diff --git a/assets/scripts/app/models/worker.coffee b/assets/scripts/app/models/worker.coffee
index 6164da13..2beb1e6b 100644
--- a/assets/scripts/app/models/worker.coffee
+++ b/assets/scripts/app/models/worker.coffee
@@ -19,8 +19,8 @@ require 'travis/model'
   ).property('state')
 
   repo: (->
-    Travis.Repo.find(@get('payload.repo.id'))
-  ).property('payload.repo.id')
+    Travis.Repo.find(@get('payload.repository.id') || @get('payload.repo.id'))
+  ).property('payload.repository.id', 'payload.repo.id')
 
   job_id: (->
     @get('payload.job.id')
diff --git a/public/scripts/app.js b/public/scripts/app.js
index 92d7820b..08c42698 100644
--- a/public/scripts/app.js
+++ b/public/scripts/app.js
@@ -29619,4 +29619,4 @@ var _require=function(){function c(a,c){document.addEventListener?a.addEventList
 ++g&&setTimeout(c,0)})}}();
 (function(){!window.WebSocket&&window.MozWebSocket&&(window.WebSocket=window.MozWebSocket);if(window.WebSocket)Pusher.Transport=window.WebSocket,Pusher.TransportType="native";var c=(document.location.protocol=="http:"?Pusher.cdn_http:Pusher.cdn_https)+Pusher.VERSION,a=[];window.JSON||a.push(c+"/json2"+Pusher.dependency_suffix+".js");if(!window.WebSocket)window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0,a.push(c+"/flashfallback"+Pusher.dependency_suffix+".js");var b=function(){return window.WebSocket?function(){Pusher.ready()}:
 function(){window.WebSocket?(Pusher.Transport=window.WebSocket,Pusher.TransportType="flash",window.WEB_SOCKET_SWF_LOCATION=c+"/WebSocketMain.swf",WebSocket.__addTask(function(){Pusher.ready()}),WebSocket.__initialize()):(Pusher.Transport=null,Pusher.TransportType="none",Pusher.ready())}}(),e=function(a){var b=function(){document.body?a():setTimeout(b,0)};b()},g=function(){e(b)};a.length>0?_require(a,g):g()})();
-;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n  Travis.reopen({\n    App: Em.Application.extend({\n      autoinit: false,\n      currentUserBinding: 'auth.user',\n      authStateBinding: 'auth.state',\n      init: function() {\n        this._super.apply(this, arguments);\n        this.store = Travis.Store.create();\n        this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n        this.set('auth', Travis.Auth.create({\n          app: this,\n          endpoint: Travis.config.api_endpoint\n        }));\n        this.slider = new Travis.Slider();\n        this.pusher = new Travis.Pusher(Travis.config.pusher);\n        return this.tailing = new Travis.Tailing();\n      },\n      signIn: function() {\n        return this.get('auth').signIn();\n      },\n      signOut: function() {\n        this.get('auth').signOut();\n        return this.get('router').send('showRoot');\n      },\n      receive: function() {\n        return this.store.receive.apply(this.store, arguments);\n      },\n      toggleSidebar: function() {\n        var element;\n        $('body').toggleClass('maximized');\n        element = $('<span></span>');\n        $('#top .profile').append(element);\n        Em.run.later((function() {\n          return element.remove();\n        }), 10);\n        element = $('<span></span>');\n        $('#repo').append(element);\n        return Em.run.later((function() {\n          return element.remove();\n        }), 10);\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n  this.Travis.Auth = Ember.Object.extend({\n    iframe: $('<iframe id=\"auth-frame\" />').hide(),\n    timeout: 5000,\n    state: 'signed-out',\n    receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n    init: function() {\n      var _this = this;\n      this.iframe.appendTo('body');\n      window.addEventListener('message', function(e) {\n        return _this.receiveMessage(e);\n      });\n      return this.loadUser();\n    },\n    accessToken: (function() {\n      return sessionStorage.getItem('travis.token');\n    }).property(),\n    loadUser: function() {\n      var user;\n      if (user = sessionStorage.getItem('travis.user')) {\n        return this.setData({\n          user: JSON.parse(user)\n        });\n      } else if (localStorage.getItem('travis.auto_signin')) {\n        return this.trySignIn();\n      }\n    },\n    signIn: function() {\n      this.set('state', 'signing-in');\n      this.trySignIn();\n      return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n    },\n    trySignIn: function() {\n      return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n    },\n    checkSignIn: function() {\n      if (this.get('state') === 'signing-in') {\n        return this.forceSignIn();\n      }\n    },\n    forceSignIn: function() {\n      localStorage.setItem('travis.auto_signin', 'true');\n      return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n    },\n    signOut: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.clear();\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.clear();\n      }\n      return this.setData();\n    },\n    setData: function(data) {\n      var user;\n      if (typeof data === 'string') {\n        data = JSON.parse(data);\n      }\n      if (data != null ? data.token : void 0) {\n        this.storeToken(data.token);\n      }\n      if (data != null ? data.user : void 0) {\n        user = this.storeUser(data.user);\n      }\n      this.set('state', user ? 'signed-in' : 'signed-out');\n      this.set('user', user ? user : void 0);\n      if (this.app.get('router')) {\n        return this.app.get('router').transitionTo('authenticated');\n      }\n    },\n    storeToken: function(token) {\n      sessionStorage.setItem('travis.token', token);\n      return this.notifyPropertyChange('accessToken');\n    },\n    storeUser: function(user) {\n      localStorage.setItem('travis.auto_signin', 'true');\n      sessionStorage.setItem('travis.user', JSON.stringify(user));\n      this.app.store.load(Travis.User, user);\n      user = this.app.store.find(Travis.User, user.id);\n      user.get('permissions');\n      return user;\n    },\n    receiveMessage: function(event) {\n      if (event.origin === this.expectedOrigin()) {\n        this.setData(event.data);\n        return console.log(\"signed in as \" + event.data.user.login);\n      } else {\n        return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n      }\n    },\n    expectedOrigin: function() {\n      if (this.endpoint[0] === '/') {\n        return this.receivingEnd;\n      } else {\n        return this.endpoint;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n  Travis.reopen({\n    Controller: Em.Controller.extend({\n      connectOutlet: function() {\n        var view, _connectedOutletViews;\n        view = this._super.apply(this, arguments);\n        if (view) {\n          _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n          if (!_connectedOutletViews) {\n            _connectedOutletViews = [];\n          }\n          _connectedOutletViews.pushObject(view);\n          Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n        }\n        return view;\n      }\n    }),\n    TopController: Em.Controller.extend({\n      userBinding: 'Travis.app.currentUser'\n    }),\n    ApplicationController: Em.Controller.extend(),\n    MainController: Em.Controller.extend(),\n    StatsLayoutController: Em.Controller.extend(),\n    ProfileLayoutController: Em.Controller.extend(),\n    AuthLayoutController: Em.Controller.extend()\n  });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n  Travis.AccountsController = Ember.ArrayController.extend({\n    tab: 'accounts',\n    init: function() {\n      return this._super();\n    },\n    findByLogin: function(login) {\n      return this.find(function(account) {\n        return account.get('login') === 'login';\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n  Travis.BuildsController = Em.ArrayController.extend({\n    repo: 'parent.repo',\n    contentBinding: 'parent.builds'\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n  Travis.FlashController = Ember.ArrayController.extend({\n    init: function() {\n      this._super.apply(this, arguments);\n      return this.set('content', Ember.A());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n  Travis.HomeController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n  Travis.ProfileController = Travis.Controller.extend({\n    name: 'profile',\n    userBinding: 'Travis.app.currentUser',\n    accountsBinding: 'Travis.app.router.accountsController',\n    account: (function() {\n      var login;\n      login = this.get('params.login') || Travis.app.get('currentUser.login');\n      return this.get('accounts').filter(function(account) {\n        if (account.get('login') === login) {\n          return account;\n        }\n      })[0];\n    }).property('accounts.length', 'params.login'),\n    activate: function(action, params) {\n      this.setParams(params || this.get('params'));\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewHooks: function() {\n      this.connectTab('hooks');\n      return this.set('hooks', Travis.Hook.find({\n        owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n      }));\n    },\n    viewUser: function() {\n      return this.connectTab('user');\n    },\n    connectTab: function(tab) {\n      var viewClass;\n      viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    setParams: function(params) {\n      var key, value, _results;\n      this.set('params', {});\n      _results = [];\n      for (key in params) {\n        value = params[key];\n        _results.push(this.set(\"params.\" + key, params[key]));\n      }\n      return _results;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n  Travis.RepoController = Travis.Controller.extend({\n    bindings: [],\n    init: function() {\n      this._super.apply(this, arguments);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var build, builds;\n      if (builds = this.get('builds')) {\n        builds.forEach(function(b) {\n          return b.updateTimes();\n        });\n      }\n      if (build = this.get('build')) {\n        build.updateTimes();\n        build.get('jobs').forEach(function(j) {\n          return j.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(action) {\n      this._unbind();\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewIndex: function() {\n      this._bind('repo', 'controllers.reposController.firstObject');\n      this._bind('build', 'repo.lastBuild');\n      return this.connectTab('current');\n    },\n    viewCurrent: function() {\n      this.connectTab('current');\n      return this._bind('build', 'repo.lastBuild');\n    },\n    viewBuilds: function() {\n      this.connectTab('builds');\n      return this._bind('builds', 'repo.builds');\n    },\n    viewPullRequests: function() {\n      this.connectTab('pull_requests');\n      return this._bind('builds', 'repo.pullRequests');\n    },\n    viewBranches: function() {\n      this.connectTab('branches');\n      return this._bind('builds', 'repo.branches');\n    },\n    viewBuild: function() {\n      return this.connectTab('build');\n    },\n    viewJob: function() {\n      this._bind('build', 'job.build');\n      return this.connectTab('job');\n    },\n    repoObserver: (function() {\n      var repo;\n      repo = this.get('repo');\n      if (repo) {\n        return repo.select();\n      }\n    }).observes('repo.id'),\n    connectTab: function(tab) {\n      var name, viewClass;\n      name = tab === 'current' ? 'build' : tab;\n      viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    _bind: function(to, from) {\n      return this.bindings.push(Ember.oneWay(this, to, from));\n    },\n    _unbind: function() {\n      var binding, _i, _len, _ref;\n      _ref = this.bindings;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        binding = _ref[_i];\n        binding.disconnect(this);\n      }\n      return this.bindings.length = 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\n\n  Travis.ReposController = Ember.ArrayController.extend({\n    defaultTab: 'recent',\n    sortProperties: ['sortOrder'],\n    init: function() {\n      this.activate(this.defaultTab);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var content;\n      if (content = this.get('content')) {\n        content.forEach(function(r) {\n          return r.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(tab, params) {\n      this.set('tab', tab);\n      return this[\"view\" + ($.camelize(tab))](params);\n    },\n    viewRecent: function() {\n      return this.set('content', Travis.Repo.find());\n    },\n    viewOwned: function() {\n      return this.set('content', Travis.Repo.ownedBy(Travis.app.get('currentUser.login')));\n    },\n    viewSearch: function(params) {\n      return this.set('content', Travis.Repo.search(params.search));\n    },\n    searchObserver: (function() {\n      var search, tab;\n      search = this.get('search');\n      tab = search ? 'search' : 'recent';\n      return this.activate(tab, {\n        search: search\n      });\n    }).observes('search')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n  Travis.reopen({\n    SidebarController: Em.ArrayController.extend({\n      init: function() {\n        this.tickables = [];\n        return Travis.Ticker.create({\n          target: this,\n          interval: Travis.INTERVALS.sponsors\n        });\n      },\n      tick: function() {\n        var tickable, _i, _len, _ref, _results;\n        _ref = this.tickables;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          tickable = _ref[_i];\n          _results.push(tickable.tick());\n        }\n        return _results;\n      }\n    }),\n    QueuesController: Em.ArrayController.extend(),\n    WorkersController: Em.ArrayController.extend({\n      groups: (function() {\n        var content, groups, host, worker, _i, _len, _ref;\n        if (content = this.get('content')) {\n          groups = {};\n          _ref = content.toArray();\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            worker = _ref[_i];\n            host = worker.get('host');\n            if (!groups[host]) {\n              groups[host] = Em.ArrayProxy.create({\n                content: []\n              });\n            }\n            groups[host].pushObject(worker);\n          }\n          return $.values(groups);\n        }\n      }).property('content.length')\n    }),\n    SponsorsController: Em.ArrayController.extend({\n      page: 0,\n      arrangedContent: (function() {\n        return this.get('shuffled').slice(this.start(), this.end());\n      }).property('shuffled.length', 'page'),\n      shuffled: (function() {\n        var content;\n        if (content = this.get('content')) {\n          return $.shuffle(content);\n        } else {\n          return [];\n        }\n      }).property('content.length'),\n      tick: function() {\n        return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n      },\n      pages: (function() {\n        var length;\n        length = this.get('content.length');\n        if (length) {\n          return parseInt(length / this.get('perPage') + 1);\n        } else {\n          return 1;\n        }\n      }).property('length'),\n      isLast: function() {\n        return this.get('page') === this.get('pages') - 1;\n      },\n      start: function() {\n        return this.get('page') * this.get('perPage');\n      },\n      end: function() {\n        return this.start() + this.get('perPage');\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n  Travis.StatsController = Travis.Controller.extend({\n    name: 'stats',\n    init: function() {\n      return this._super('top');\n    },\n    activate: function(action, params) {}\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n  var safe;\nminispade.require('ext/ember/bound_helper');\n\n  safe = function(string) {\n    return new Handlebars.SafeString(string);\n  };\n\n  Handlebars.registerHelper('tipsy', function(text, tip) {\n    return safe('<span class=\"tool-tip\" original-title=\"' + tip + '\">' + text + '</span>');\n  });\n\n  Handlebars.registerHelper('t', function(key) {\n    return safe(I18n.t(key));\n  });\n\n  Ember.registerBoundHelper('formatTime', function(value, options) {\n    return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n  });\n\n  Ember.registerBoundHelper('formatDuration', function(duration, options) {\n    return safe(Travis.Helpers.timeInWords(duration));\n  });\n\n  Ember.registerBoundHelper('formatCommit', function(commit, options) {\n    if (commit) {\n      return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n    }\n  });\n\n  Ember.registerBoundHelper('formatSha', function(sha, options) {\n    return safe(Travis.Helpers.formatSha(sha));\n  });\n\n  Ember.registerBoundHelper('pathFrom', function(url, options) {\n    return safe(Travis.Helpers.pathFrom(url));\n  });\n\n  Ember.registerBoundHelper('formatMessage', function(message, options) {\n    return safe(Travis.Helpers.formatMessage(message, options));\n  });\n\n  Ember.registerBoundHelper('formatConfig', function(config, options) {\n    return safe(Travis.Helpers.formatConfig(config));\n  });\n\n  Ember.registerBoundHelper('formatLog', function(log, options) {\n    return Travis.Helpers.formatLog(log) || '';\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('emoij');\n\n  this.Travis.Helpers = {\n    compact: function(object) {\n      var key, result, value, _ref;\n      result = {};\n      _ref = object || {};\n      for (key in _ref) {\n        value = _ref[key];\n        if (!$.isEmpty(value)) {\n          result[key] = value;\n        }\n      }\n      return result;\n    },\n    safe: function(string) {\n      return new Handlebars.SafeString(string);\n    },\n    colorForResult: function(result) {\n      if (result === 0) {\n        return 'green';\n      } else {\n        if (result === 1) {\n          return 'red';\n        } else {\n          return null;\n        }\n      }\n    },\n    formatCommit: function(sha, branch) {\n      return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n    },\n    formatSha: function(sha) {\n      return (sha || '').substr(0, 7);\n    },\n    formatConfig: function(config) {\n      var values;\n      config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n      values = $.map(config, function(value, key) {\n        value = (value && value.join ? value.join(', ') : value) || '';\n        return '%@: %@'.fmt($.camelize(key), value);\n      });\n      if (values.length === 0) {\n        return '-';\n      } else {\n        return values.join(', ');\n      }\n    },\n    formatMessage: function(message, options) {\n      message = message || '';\n      if (options.short) {\n        message = message.split(/\\n/)[0];\n      }\n      return this._emojize(this._escape(message)).replace(/\\n/g, '<br/>');\n    },\n    formatLog: function(log) {\n      return Travis.Log.filter(log);\n    },\n    pathFrom: function(url) {\n      return (url || '').split('/').pop();\n    },\n    timeAgoInWords: function(date) {\n      return $.timeago.distanceInWords(date);\n    },\n    durationFrom: function(started, finished) {\n      started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n      finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n      if (started && finished) {\n        return Math.round((finished - started) / 1000);\n      } else {\n        return 0;\n      }\n    },\n    timeInWords: function(duration) {\n      var days, hours, minutes, result, seconds;\n      days = Math.floor(duration / 86400);\n      hours = Math.floor(duration % 86400 / 3600);\n      minutes = Math.floor(duration % 3600 / 60);\n      seconds = duration % 60;\n      if (days > 0) {\n        return 'more than 24 hrs';\n      } else {\n        result = [];\n        if (hours === 1) {\n          result.push(hours + ' hr');\n        }\n        if (hours > 1) {\n          result.push(hours + ' hrs');\n        }\n        if (minutes > 0) {\n          result.push(minutes + ' min');\n        }\n        if (seconds > 0) {\n          result.push(seconds + ' sec');\n        }\n        if (result.length > 0) {\n          return result.join(' ');\n        } else {\n          return '-';\n        }\n      }\n    },\n    _normalizeDateString: function(string) {\n      if (window.JHW) {\n        string = string.replace('T', ' ').replace(/-/g, '/');\n        string = string.replace('Z', '').replace(/\\..*$/, '');\n      }\n      return string;\n    },\n    _nowUtc: function() {\n      return this._toUtc(new Date());\n    },\n    _toUtc: function(date) {\n      return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    },\n    _emojize: function(text) {\n      var emojis;\n      emojis = text.match(/:\\S+?:/g);\n      if (emojis !== null) {\n        $.each(emojis.uniq(), function(ix, emoji) {\n          var image, strippedEmoji;\n          strippedEmoji = emoji.substring(1, emoji.length - 1);\n          if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n            image = '<img class=\\'emoji\\' title=\\'' + emoji + '\\' alt=\\'' + emoji + '\\' src=\\'' + '/images/emoji/' + strippedEmoji + '.png\\'/>';\n            return text = text.replace(new RegExp(emoji, 'g'), image);\n          }\n        });\n      }\n      return text;\n    },\n    _escape: function(text) {\n      return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n  this.Travis.Urls = {\n    repo: function(slug) {\n      return \"/\" + slug;\n    },\n    builds: function(slug) {\n      return \"/\" + slug + \"/builds\";\n    },\n    pullRequests: function(slug) {\n      return \"/\" + slug + \"/pull_requests\";\n    },\n    branches: function(slug) {\n      return \"/\" + slug + \"/branches\";\n    },\n    build: function(slug, id) {\n      return \"/\" + slug + \"/builds/\" + id;\n    },\n    job: function(slug, id) {\n      return \"/\" + slug + \"/jobs/\" + id;\n    },\n    githubCommit: function(slug, sha) {\n      return \"http://github.com/\" + slug + \"/commit/\" + sha;\n    },\n    githubRepo: function(slug) {\n      return \"http://github.com/\" + slug;\n    },\n    githubWatchers: function(slug) {\n      return \"http://github.com/\" + slug + \"/watchers\";\n    },\n    githubNetwork: function(slug) {\n      return \"http://github.com/\" + slug + \"/network\";\n    },\n    githubAdmin: function(slug) {\n      return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n    },\n    statusImage: function(slug, branch) {\n      return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n    },\n    email: function(email) {\n      return \"mailto:\" + email;\n    },\n    account: function(login) {\n      return \"/profile/\" + login;\n    },\n    user: function(login) {\n      return \"/profile/\" + login + \"/me\";\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Account = Travis.Model.extend({\n    primaryKey: 'login',\n    login: DS.attr('string'),\n    name: DS.attr('string'),\n    type: DS.attr('string'),\n    reposCount: DS.attr('number'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('login'));\n    }).property()\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Artifact = Travis.Model.extend({\n    body: DS.attr('string'),\n    init: function() {\n      this._super.apply(this, arguments);\n      this.set('queue', Ember.A([]));\n      this.addObserver('body', this.fetchWorker);\n      return this.fetchWorker();\n    },\n    append: function(body) {\n      if (this.get('isLoaded')) {\n        return this.set('body', this.get('body') + body);\n      } else {\n        return this.get('queue').pushObject(body);\n      }\n    },\n    recordDidLoad: (function() {\n      var queue;\n      if (this.get('isLoaded')) {\n        queue = this.get('queue');\n        if (queue.get('length') > 0) {\n          return this.append(queue.toArray().join(''));\n        }\n      }\n    }).observes('isLoaded'),\n    fetchWorker: function() {\n      var body, line, match, worker;\n      if (body = this.get('body')) {\n        line = body.split(\"\\n\")[0];\n        if (line && (match = line.match(/Using worker: (.*)/))) {\n          if (worker = match[1]) {\n            worker = worker.trim().split(':')[0];\n            this.set('workerName', worker);\n            return this.removeObserver('body', this.fetchWorker);\n          }\n        }\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    commitId: DS.attr('number'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    duration: DS.attr('number'),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    commit: DS.belongsTo('Travis.Commit'),\n    repo: (function() {\n      if (this.get('repoId')) {\n        return Travis.Repo.find(this.get('repoId'));\n      }\n    }).property('repoId'),\n    updateTimes: function() {\n      this.notifyPropertyChange('started_at');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n  this.Travis.Branch.reopenClass({\n    byRepoId: function(id) {\n      return this.find({\n        repository_id: id\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, Travis.Ajax, {\n    eventType: DS.attr('string'),\n    repoId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    state: DS.attr('string'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string', {\n      key: 'started_at'\n    }),\n    finishedAt: DS.attr('string', {\n      key: 'finished_at'\n    }),\n    repo: DS.belongsTo('Travis.Repo'),\n    commit: DS.belongsTo('Travis.Commit'),\n    jobs: DS.hasMany('Travis.Job', {\n      key: 'job_ids'\n    }),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    isMatrix: (function() {\n      return this.get('data.job_ids.length') > 1;\n    }).property('data.job_ids.length'),\n    isFinished: (function() {\n      return this.get('state') === 'finished';\n    }).property('state'),\n    requiredJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return !data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    allowedFailureJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    configKeys: (function() {\n      var config, headers, key, keys;\n      if (!(config = this.get('config'))) {\n        return [];\n      }\n      keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n      headers = (function() {\n        var _i, _len, _ref, _results;\n        _ref = ['build.job', 'build.duration', 'build.finished_at'];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          key = _ref[_i];\n          _results.push(I18n.t(key));\n        }\n        return _results;\n      })();\n      return $.map(headers.concat(keys), function(key) {\n        return $.camelize(key);\n      });\n    }).property('config'),\n    requeue: (function() {\n      return this.post('/requests', {\n        build_id: this.get('id')\n      });\n    })\n  });\n\n  this.Travis.Build.reopenClass({\n    byRepoId: function(id, parameters) {\n      return this.find($.extend(parameters || {}, {\n        repository_id: id\n      }));\n    },\n    olderThanNumber: function(id, build_number) {\n      return this.find({\n        url: \"/builds\",\n        repository_id: id,\n        after_number: build_number\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Commit = Travis.Model.extend({\n    buildId: DS.attr('number'),\n    sha: DS.attr('string'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    compareUrl: DS.attr('string'),\n    authorName: DS.attr('string'),\n    authorEmail: DS.attr('string'),\n    committerName: DS.attr('string'),\n    committerEmail: DS.attr('string'),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'buildId'\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/extensions', "(function() {(function() {\n\n  Travis.DurationCalculations = Ember.Mixin.create({\n    duration: (function() {\n      var duration;\n      if (duration = this.get('_duration')) {\n        return duration;\n      } else {\n        return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n      }\n    }).property('_duration', 'finishedAt', 'startedAt'),\n    updateTimes: function() {\n      this.notifyPropertyChange('_duration');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Hook = Travis.Model.extend({\n    name: DS.attr('string'),\n    ownerName: DS.attr('string'),\n    description: DS.attr('string'),\n    active: DS.attr('boolean'),\n    account: (function() {\n      return this.get('slug').split('/')[0];\n    }).property('slug'),\n    slug: (function() {\n      return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n    }).property('ownerName', 'name'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('slug'));\n    }).property(),\n    urlGithubAdmin: (function() {\n      return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n    }).property(),\n    toggle: function() {\n      var transaction;\n      transaction = this.get('store').transaction();\n      transaction.add(this);\n      this.set('active', !this.get('active'));\n      return transaction.commit();\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    buildId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    logId: DS.attr('number'),\n    queue: DS.attr('string'),\n    state: DS.attr('string'),\n    number: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    allowFailure: DS.attr('boolean', {\n      key: 'allow_failure'\n    }),\n    repo: DS.belongsTo('Travis.Repo', {\n      key: 'repository_id'\n    }),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'build_id'\n    }),\n    commit: DS.belongsTo('Travis.Commit', {\n      key: 'commit_id'\n    }),\n    log: DS.belongsTo('Travis.Artifact', {\n      key: 'log_id'\n    }),\n    isQueued: (function() {}).property('state'),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    sponsor: (function() {\n      var worker;\n      worker = this.get('log.workerName');\n      if (worker && worker.length) {\n        return Travis.WORKERS[worker] || {\n          name: \"Travis Pro\",\n          url: \"http://travis-ci.com\"\n        };\n      }\n    }).property('log.workerName'),\n    configValues: (function() {\n      var config;\n      if (config = this.get('config')) {\n        return $.values($.only.apply(config, Travis.CONFIG_KEYS));\n      } else {\n        return [];\n      }\n    }).property('config'),\n    appendLog: function(text) {\n      var log;\n      if (log = this.get('log')) {\n        return log.append(text);\n      }\n    },\n    subscribe: function() {\n      var id;\n      if (id = this.get('id')) {\n        return Travis.app.pusher.subscribe(\"job-\" + id);\n      }\n    },\n    onStateChange: (function() {\n      if (this.get('state') === 'finished') {\n        return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n      }\n    }).observes('state')\n  });\n\n  this.Travis.Job.reopenClass({\n    queued: function(queue) {\n      this.find();\n      return Travis.app.store.filter(this, function(job) {\n        var queued;\n        queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n        return queued && job.get('queue') === (\"builds.\" + queue);\n      });\n    },\n    findMany: function(ids) {\n      return Travis.app.store.findMany(this, ids);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n  this.Travis.Repo = Travis.Model.extend({\n    slug: DS.attr('string'),\n    description: DS.attr('string'),\n    lastBuildId: DS.attr('number'),\n    lastBuildNumber: DS.attr('string'),\n    lastBuildResult: DS.attr('number'),\n    lastBuildStartedAt: DS.attr('string'),\n    lastBuildFinishedAt: DS.attr('string'),\n    lastBuild: DS.belongsTo('Travis.Build'),\n    builds: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'push'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    pullRequests: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'pull_request'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    branches: (function() {\n      return Travis.Branch.byRepoId(this.get('id'));\n    }).property(),\n    owner: (function() {\n      return (this.get('slug') || '').split('/')[0];\n    }).property('slug'),\n    name: (function() {\n      return (this.get('slug') || '').split('/')[1];\n    }).property('slug'),\n    lastBuildDuration: (function() {\n      var duration;\n      duration = this.get('data.last_build_duration');\n      if (!duration) {\n        duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n      }\n      return duration;\n    }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n    sortOrder: (function() {\n      var lastBuildFinishedAt;\n      if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n        return -new Date(lastBuildFinishedAt).getTime();\n      } else {\n        return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n      }\n    }).property('lastBuildFinishedAt', 'lastBuildId'),\n    stats: (function() {\n      var _this = this;\n      return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n        _this.set('_stats', data);\n        return _this.notifyPropertyChange('stats');\n      }) && {};\n    }).property(),\n    select: function() {\n      return Travis.Repo.select(this.get('id'));\n    },\n    updateTimes: function() {\n      return this.notifyPropertyChange('lastBuildDuration');\n    }\n  });\n\n  this.Travis.Repo.reopenClass({\n    url: 'repository',\n    recent: function() {\n      return this.find();\n    },\n    ownedBy: function(login) {\n      return this.find({\n        owner_name: login,\n        orderBy: 'name'\n      });\n    },\n    search: function(query) {\n      return this.find({\n        search: query,\n        orderBy: 'name'\n      });\n    },\n    bySlug: function(slug) {\n      var repo;\n      repo = $.select(this.find().toArray(), function(repo) {\n        return repo.get('slug') === slug;\n      });\n      if (repo.length > 0) {\n        return repo;\n      } else {\n        return this.find({\n          slug: slug\n        });\n      }\n    },\n    select: function(id) {\n      return this.find().forEach(function(repo) {\n        return repo.set('selected', repo.get('id') === id);\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Sponsor = Travis.Model.extend({\n    type: DS.attr('string'),\n    url: DS.attr('string'),\n    link: DS.attr('string'),\n    image: (function() {\n      return \"/images/sponsors/\" + (this.get('data.image'));\n    }).property('data.image')\n  });\n\n  Travis.Sponsor.reopenClass({\n    decks: function() {\n      return this.platinum().concat(this.gold());\n    },\n    platinum: function() {\n      var platinum, sponsor, _i, _len, _results;\n      platinum = this.byType('platinum').toArray();\n      _results = [];\n      for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n        sponsor = platinum[_i];\n        _results.push([sponsor]);\n      }\n      return _results;\n    },\n    gold: function() {\n      var gold, _results;\n      gold = this.byType('gold').toArray();\n      _results = [];\n      while (gold.length > 0) {\n        _results.push(gold.splice(0, 2));\n      }\n      return _results;\n    },\n    links: function() {\n      return this.byType('silver');\n    },\n    byType: function() {\n      var types;\n      types = Array.prototype.slice.apply(arguments);\n      return Travis.Sponsor.filter(function(sponsor) {\n        return types.indexOf(sponsor.get('type')) !== -1;\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n  this.Travis.User = Travis.Model.extend(Travis.Ajax, {\n    name: DS.attr('string'),\n    email: DS.attr('string'),\n    login: DS.attr('string'),\n    token: DS.attr('string'),\n    locale: DS.attr('string'),\n    gravatarId: DS.attr('string'),\n    isSyncing: DS.attr('boolean'),\n    syncedAt: DS.attr('string'),\n    repoCount: DS.attr('number'),\n    init: function() {\n      if (this.get('isSyncing')) {\n        this.poll();\n      }\n      this._super();\n      return Ember.run.next(this, function() {\n        var transaction;\n        transaction = this.get('store').transaction();\n        return transaction.add(this);\n      });\n    },\n    urlGithub: (function() {\n      return \"https://github.com/\" + (this.get('login'));\n    }).property(),\n    permissions: (function() {\n      var _this = this;\n      if (!this.permissions) {\n        this.permissions = Ember.ArrayProxy.create({\n          content: []\n        });\n        this.ajax('/users/permissions', 'get', {\n          success: function(data) {\n            return _this.permissions.set('content', data.permissions);\n          }\n        });\n      }\n      return this.permissions;\n    }).property(),\n    updateLocale: function(locale) {\n      var observer, self, transaction;\n      this.setWithSession('locale', locale);\n      transaction = this.get('transaction');\n      transaction.commit();\n      self = this;\n      observer = function() {\n        if (!self.get('isSaving')) {\n          self.removeObserver('isSaving', observer);\n          transaction = self.get('store').transaction();\n          return transaction.add(self);\n        }\n      };\n      return this.addObserver('isSaving', observer);\n    },\n    type: (function() {\n      return 'user';\n    }).property(),\n    sync: function() {\n      this.post('/users/sync');\n      this.setWithSession('isSyncing', true);\n      return this.poll();\n    },\n    poll: function() {\n      var _this = this;\n      return this.ajax('/users', 'get', {\n        success: function(data) {\n          if (data.user.is_syncing) {\n            return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n          } else {\n            _this.set('isSyncing', false);\n            return _this.setWithSession('syncedAt', data.user.synced_at);\n          }\n        }\n      });\n    },\n    setWithSession: function(name, value) {\n      var user;\n      this.set(name, value);\n      user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n      user[$.underscore(name)] = this.get(name);\n      return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Worker = Travis.Model.extend({\n    state: DS.attr('string'),\n    name: DS.attr('string'),\n    host: DS.attr('string'),\n    lastSeenAt: DS.attr('string'),\n    payload: (function() {\n      return this.get('data.payload');\n    }).property('data.payload'),\n    number: (function() {\n      return this.get('name').match(/\\d+$/)[0];\n    }).property('name'),\n    isWorking: (function() {\n      return this.get('state') === 'working';\n    }).property('state'),\n    repo: (function() {\n      return Travis.Repo.find(this.get('payload.repo.id'));\n    }).property('payload.repo.id'),\n    job_id: (function() {\n      return this.get('payload.job.id');\n    }).property('payload.job.id'),\n    job: (function() {\n      return Travis.Job.find(this.get('job_id'));\n    }).property('job_id')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n  Travis.Pusher = function(config) {\n    if (config) {\n      this.init(config);\n    }\n    return this;\n  };\n\n  $.extend(Travis.Pusher, {\n    CHANNELS: ['common'],\n    CHANNEL_PREFIX: ''\n  });\n\n  $.extend(Travis.Pusher.prototype, {\n    active_channels: [],\n    init: function(config) {\n      var channel, _i, _len, _ref, _results;\n      Pusher.warn = this.warn.bind(this);\n      this.pusher = new Pusher(config.key);\n      _ref = Travis.Pusher.CHANNELS;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        channel = _ref[_i];\n        _results.push(this.subscribe(channel));\n      }\n      return _results;\n    },\n    subscribe: function(channel) {\n      var _this = this;\n      if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n        this.active_channels.push(channel);\n        return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n          return _this.receive(event, data);\n        });\n      }\n    },\n    unsubscribe: function(channel) {\n      var ix;\n      ix = this.active_channels.indexOf(channel);\n      if (this.pusher && ix === -1) {\n        this.active_channels.splice(ix, 1);\n        return this.pusher.unsubscribe(this.prefix(channel));\n      }\n    },\n    prefix: function(channel) {\n      return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n    },\n    receive: function(event, data) {\n      if (event.substr(0, 6) === 'pusher') {\n        return;\n      }\n      if (data.id) {\n        data = this.normalize(event, data);\n      }\n      return Ember.run.next(function() {\n        return Travis.app.store.receive(event, data);\n      });\n    },\n    normalize: function(event, data) {\n      switch (event) {\n        case 'build:started':\n        case 'build:finished':\n          return data;\n        case 'job:created':\n        case 'job:started':\n        case 'job:finished':\n        case 'job:log':\n          if (data.queue) {\n            data.queue = data.queue.replace('builds.', '');\n          }\n          return {\n            job: data\n          };\n        case 'worker:added':\n        case 'worker:updated':\n        case 'worker:removed':\n          return {\n            worker: data\n          };\n      }\n    },\n    warn: function(type, warning) {\n      if (!this.ignoreWarning(warning)) {\n        return console.warn(warning);\n      }\n    },\n    ignoreWarning: function(warning) {\n      var message, _ref;\n      if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n        return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n\n  Travis.Router = Ember.Router.extend({\n    location: 'history',\n    enableLogging: true,\n    initialState: 'loading',\n    showRoot: Ember.Route.transitionTo('root.home.show'),\n    showStats: Ember.Route.transitionTo('root.stats'),\n    showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n    showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n    showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n    showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n    showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n    showJob: Ember.Route.transitionTo('root.home.repo.job'),\n    showProfile: Ember.Route.transitionTo('root.profile'),\n    showAccount: Ember.Route.transitionTo('root.profile.account'),\n    showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n    signedIn: function() {\n      return !!Travis.app.get('auth.user');\n    },\n    needsAuth: function(path) {\n      return path.indexOf('/profile') === 0 && !this.signedIn();\n    },\n    loading: Ember.Route.extend({\n      routePath: function(router, path) {\n        sessionStorage.setItem('travis.path', path);\n        if (router.needsAuth(path)) {\n          router.transitionTo('root.auth');\n          return Travis.app.signIn();\n        } else {\n          return router.transitionTo('authenticated');\n        }\n      }\n    }),\n    authenticated: Ember.Route.extend({\n      connectOutlets: function(router) {\n        var path;\n        path = sessionStorage.getItem('travis.path');\n        sessionStorage.removeItem('travis.path');\n        router.transitionTo('root');\n        if (path) {\n          return router.route(path);\n        }\n      }\n    }),\n    root: Ember.Route.extend({\n      initialState: 'home',\n      loading: Ember.State.extend(),\n      auth: Ember.Route.extend({\n        route: '/auth',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('authLayout');\n          $('body').attr('id', 'auth');\n          router.get('authLayoutController').connectOutlet('top', 'top');\n          return router.get('authLayoutController').connectOutlet('main', 'signin');\n        }\n      }),\n      stats: Ember.Route.extend({\n        route: '/stats',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('statsLayout');\n          $('body').attr('id', 'stats');\n          router.get('statsLayoutController').connectOutlet('top', 'top');\n          return router.get('statsLayoutController').connectOutlet('main', 'stats');\n        }\n      }),\n      profile: Ember.Route.extend({\n        initialState: 'index',\n        route: '/profile',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('profileLayout');\n          $('body').attr('id', 'profile');\n          router.get('accountsController').set('content', Travis.Account.find());\n          router.get('profileLayoutController').connectOutlet('top', 'top');\n          return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n        },\n        index: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            router.get('profileLayoutController').connectOutlet('main', 'profile');\n            return router.get('profileController').activate('hooks');\n          }\n        }),\n        account: Ember.Route.extend({\n          initialState: 'index',\n          route: '/:login',\n          connectOutlets: function(router, account) {\n            var params;\n            if (account) {\n              params = {\n                login: account.get('login')\n              };\n              return router.get('profileController').setParams(params);\n            } else {\n              return router.send('showProfile');\n            }\n          },\n          deserialize: function(router, params) {\n            return router.get('accountsController').findByLogin(params.login);\n          },\n          serialize: function(router, account) {\n            if (account) {\n              return {\n                login: account.get('login')\n              };\n            } else {\n              return {};\n            }\n          },\n          index: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('hooks');\n            }\n          }),\n          profile: Ember.Route.extend({\n            route: '/profile',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('user');\n            }\n          })\n        })\n      }),\n      home: Ember.Route.extend({\n        initialState: 'show',\n        route: '/',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('home');\n          $('body').attr('id', 'home');\n          router.get('homeController').connectOutlet('left', 'repos');\n          router.get('homeController').connectOutlet('right', 'sidebar');\n          router.get('homeController').connectOutlet('top', 'top');\n          router.get('homeController').connectOutlet('main', 'repo');\n          return router.get('homeController').connectOutlet('flash', 'flash');\n        },\n        show: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            return router.get('repoController').activate('index');\n          }\n        }),\n        repo: Ember.Route.extend({\n          initialState: 'show',\n          route: '/:owner/:name',\n          connectOutlets: function(router, repo) {\n            return router.get('repoController').set('repo', repo);\n          },\n          deserialize: function(router, params) {\n            var deferred, observer, repos, slug;\n            slug = \"\" + params.owner + \"/\" + params.name;\n            repos = Travis.Repo.bySlug(slug);\n            deferred = $.Deferred();\n            observer = function() {\n              if (repos.get('isLoaded')) {\n                repos.removeObserver('isLoaded', observer);\n                return deferred.resolve(repos.objectAt(0));\n              }\n            };\n            repos.addObserver('isLoaded', observer);\n            return deferred.promise();\n          },\n          serialize: function(router, repo) {\n            if (repo) {\n              return {\n                owner: repo.get('owner'),\n                name: repo.get('name')\n              };\n            } else {\n              return {};\n            }\n          },\n          show: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('repoController').activate('current');\n            }\n          }),\n          builds: Ember.Route.extend({\n            route: '/builds',\n            initialState: 'index',\n            index: Ember.Route.extend({\n              route: '/',\n              connectOutlets: function(router, repo) {\n                return router.get('repoController').activate('builds');\n              }\n            }),\n            show: Ember.Route.extend({\n              route: '/:build_id',\n              connectOutlets: function(router, build) {\n                if (!build.get) {\n                  build = Travis.Build.find(build);\n                }\n                router.get('repoController').set('build', build);\n                return router.get('repoController').activate('build');\n              },\n              serialize: function(router, build) {\n                if (build.get) {\n                  return {\n                    build_id: build.get('id')\n                  };\n                } else {\n                  return {\n                    build_id: build\n                  };\n                }\n              },\n              deserialize: function(router, params) {\n                var build, deferred, observer;\n                build = Travis.Build.find(params.build_id);\n                deferred = $.Deferred();\n                observer = function() {\n                  if (build.get('id')) {\n                    build.removeObserver('id', observer);\n                    return deferred.resolve(build);\n                  }\n                };\n                build.addObserver('id', observer);\n                return deferred.promise();\n              }\n            })\n          }),\n          pullRequests: Ember.Route.extend({\n            route: '/pull_requests',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('pull_requests');\n            }\n          }),\n          branches: Ember.Route.extend({\n            route: '/branches',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('branches');\n            }\n          }),\n          job: Ember.Route.extend({\n            route: '/jobs/:job_id',\n            connectOutlets: function(router, job) {\n              if (!job.get) {\n                job = Travis.Job.find(job);\n              }\n              router.get('repoController').set('job', job);\n              return router.get('repoController').activate('job');\n            },\n            serialize: function(router, job) {\n              if (job.get) {\n                return {\n                  job_id: job.get('id')\n                };\n              } else {\n                return {\n                  job_id: job\n                };\n              }\n            },\n            deserialize: function(router, params) {\n              var deferred, job, observer;\n              job = Travis.Job.find(params.job_id);\n              deferred = $.Deferred();\n              observer = function() {\n                if (job.get('id')) {\n                  job.removeObserver('id', observer);\n                  return deferred.resolve(job);\n                }\n              };\n              job.addObserver('id', observer);\n              return deferred.promise();\n            }\n          })\n        })\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n  this.Travis.Slider = function() {\n    if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n      this.minimize();\n    }\n    return this;\n  };\n\n  $.extend(Travis.Slider.prototype, {\n    persist: function() {\n      return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n    },\n    isMinimized: function() {\n      return $('body').hasClass('maximized');\n    },\n    minimize: function() {\n      return $('body').addClass('maximized');\n    },\n    toggle: function() {\n      var element;\n      $('body').toggleClass('maximized');\n      this.persist();\n      element = $('<span></span>');\n      $('#top .profile').append(element);\n      return Em.run.later((function() {\n        return element.remove();\n      }), 10);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n  var DATA_PROXY,\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n  DATA_PROXY = {\n    get: function(name) {\n      return this.savedData[name];\n    }\n  };\n\n  Travis.Store = DS.Store.extend({\n    revision: 4,\n    adapter: Travis.RestAdapter.create(),\n    merge: function(type, id, hash) {\n      var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n      if (hash === void 0) {\n        hash = id;\n        primaryKey = type.proto().primaryKey;\n        Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n        id = hash[primaryKey];\n      }\n      typeMap = this.typeMapFor(type);\n      dataCache = typeMap.cidToHash;\n      clientId = typeMap.idToCid[id];\n      recordCache = this.get('recordCache');\n      if (clientId !== void 0) {\n        if (data = dataCache[clientId]) {\n          $.extend(data, hash);\n        } else {\n          dataCache[clientId] = hash;\n        }\n        if (record = recordCache[clientId]) {\n          record.send('didChangeData');\n        }\n      } else {\n        clientId = this.find(type, id).get('clientId');\n      }\n      if (clientId) {\n        DATA_PROXY.savedData = hash;\n        this.updateRecordArrays(type, clientId, DATA_PROXY);\n        return {\n          id: id,\n          clientId: clientId\n        };\n      }\n    },\n    receive: function(event, data) {\n      var job, mappings, name, type, _ref;\n      _ref = event.split(':'), name = _ref[0], type = _ref[1];\n      mappings = this.adapter.get('mappings');\n      type = mappings[name];\n      if (event === 'job:log') {\n        if (job = this.find(Travis.Job, data['job']['id'])) {\n          return job.appendLog(data['job']['_log']);\n        }\n      } else if (data[type.singularName()]) {\n        return this._loadOne(this, type, data);\n      } else if (data[type.pluralName()]) {\n        return this._loadMany(this, type, data);\n      } else {\n        if (!type) {\n          throw \"can't load data for \" + name;\n        }\n      }\n    },\n    _loadOne: function(store, type, json) {\n      var root;\n      root = type.singularName();\n      this.adapter.sideload(store, type, json, root);\n      this.merge(type, json[root]);\n      return this._updateAssociations(type, root, json[root]);\n    },\n    _loadMany: function(store, type, json) {\n      var root;\n      root = type.pluralName();\n      this.adapter.sideload(store, type, json, root);\n      return this.loadMany(type, json[root]);\n    },\n    _updateAssociations: function(type, name, data) {\n      var _this = this;\n      return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n        var clientId, dataProxy, id, ids, parent, _ref;\n        if (meta.kind === 'belongsTo') {\n          id = data[\"\" + key + \"_id\"];\n          if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n            if (parent = _this.findByClientId(meta.type, clientId, id)) {\n              dataProxy = parent.get('data');\n              if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n                if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n                  ids.pushObject(data.id);\n                }\n                return parent.send('didChangeData');\n              }\n            }\n          }\n        }\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n  this.Travis.FixtureAdapter = DS.Adapter.extend({\n    find: function(store, type, id) {\n      var fixtures;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      if (fixtures.hasLoaded) {\n        return;\n      }\n      return setTimeout((function() {\n        store.loadMany(type, fixtures);\n        return fixtures.hasLoaded = true;\n      }), 300);\n    },\n    findMany: function() {\n      return this.find.apply(this, arguments);\n    },\n    findAll: function(store, type) {\n      var fixtures, ids;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      ids = fixtures.map(function(item, index, self) {\n        return item.id;\n      });\n      return store.loadMany(type, ids, fixtures);\n    },\n    findQuery: function(store, type, params, array) {\n      var fixture, fixtures, hashes, key, matches, value;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      hashes = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n          fixture = fixtures[_i];\n          matches = (function() {\n            var _results1;\n            _results1 = [];\n            for (key in params) {\n              value = params[key];\n              _results1.push(key === 'orderBy' || fixture[key] === value);\n            }\n            return _results1;\n          })();\n          if (matches.reduce(function(a, b) {\n            return a && b;\n          })) {\n            _results.push(fixture);\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      })();\n      return array.load(hashes.compact());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n  this.Travis.RestAdapter = DS.RESTAdapter.extend(Travis.Ajax, {\n    mappings: {\n      repositories: Travis.Repo,\n      repository: Travis.Repo,\n      repos: Travis.Repo,\n      repo: Travis.Repo,\n      builds: Travis.Build,\n      build: Travis.Build,\n      commits: Travis.Commit,\n      commit: Travis.Commit,\n      jobs: Travis.Job,\n      job: Travis.Job,\n      account: Travis.Account,\n      accounts: Travis.Account,\n      worker: Travis.Worker,\n      workers: Travis.Worker\n    },\n    plurals: {\n      repositories: 'repositories',\n      repository: 'repositories',\n      repo: 'repositories',\n      repos: 'repositories',\n      build: 'builds',\n      branch: 'branches',\n      job: 'jobs',\n      worker: 'workers',\n      profile: 'profile'\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n  this.Travis.Tailing = function() {\n    this.position = $(window).scrollTop();\n    $(window).scroll(this.onScroll.bind(this));\n    return this;\n  };\n\n  $.extend(Travis.Tailing.prototype, {\n    options: {\n      timeout: 200\n    },\n    run: function() {\n      this.autoScroll();\n      this.positionButton();\n      if (this.active()) {\n        return Ember.run.later(this.run.bind(this), this.options.timeout);\n      }\n    },\n    toggle: function(event) {\n      if (this.active()) {\n        return this.stop();\n      } else {\n        return this.start();\n      }\n    },\n    active: function() {\n      return $('#tail').hasClass('active');\n    },\n    start: function() {\n      $('#tail').addClass('active');\n      return this.run();\n    },\n    stop: function() {\n      return $('#tail').removeClass('active');\n    },\n    autoScroll: function() {\n      var log, logBottom, win, winBottom;\n      if (!this.active()) {\n        return;\n      }\n      win = $(window);\n      log = $('#log');\n      logBottom = log.offset().top + log.outerHeight() + 40;\n      winBottom = win.scrollTop() + win.height();\n      if (logBottom - winBottom > 0) {\n        return win.scrollTop(logBottom - win.height());\n      }\n    },\n    onScroll: function() {\n      var position;\n      this.positionButton();\n      position = $(window).scrollTop();\n      if (position < this.position) {\n        this.stop();\n      }\n      return this.position = position;\n    },\n    positionButton: function() {\n      var max, offset, tail;\n      tail = $('#tail');\n      if (tail.length === 0) {\n        return;\n      }\n      offset = $(window).scrollTop() - $('#log').offset().top;\n      max = $('#log').height() - $('#tail').height() + 5;\n      if (offset > max) {\n        offset = max;\n      }\n      if (offset > 0) {\n        return tail.css({\n          top: offset - 2\n        });\n      } else {\n        return tail.css({\n          top: 0\n        });\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n  this.Travis.reopen({\n    View: Em.View.extend({\n      popup: function(event) {\n        this.popupCloseAll();\n        return $(\"#\" + event.target.name).toggleClass('display');\n      },\n      popupClose: function(event) {\n        return $(event.target).closest('.popup').removeClass('display');\n      },\n      popupCloseAll: function() {\n        return $('.popup').removeClass('display');\n      }\n    })\n  });\n\n  this.Travis.reopen({\n    HomeView: Travis.View.extend({\n      templateName: 'layouts/home'\n    }),\n    AuthLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ProfileLayoutView: Travis.View.extend({\n      templateName: 'layouts/profile'\n    }),\n    StatsLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ApplicationView: Travis.View.extend({\n      templateName: 'application'\n    })\n  });\nminispade.require('views/accounts');\nminispade.require('views/build');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n  this.Travis.reopen({\n    AccountsView: Travis.View.extend({\n      tabBinding: 'controller.tab',\n      templateName: 'profile/accounts',\n      classAccounts: (function() {\n        if (this.get('tab') === 'accounts') {\n          return 'active';\n        }\n      }).property('tab')\n    }),\n    AccountsListView: Em.CollectionView.extend({\n      elementId: 'accounts',\n      accountBinding: 'content',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        accountBinding: 'content',\n        typeBinding: 'content.type',\n        selectedBinding: 'account.selected',\n        classNames: ['account'],\n        classNameBindings: ['type', 'selected'],\n        name: (function() {\n          return this.get('content.name') || this.get('content.login');\n        }).property('content.login', 'content.name'),\n        urlAccount: (function() {\n          return Travis.Urls.account(this.get('account.login'));\n        }).property('account.login')\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/build', "(function() {(function() {\n\n  this.Travis.reopen({\n    BuildsView: Travis.View.extend({\n      templateName: 'builds/list',\n      buildsBinding: 'controller.builds',\n      showMore: function() {\n        var id, number;\n        id = this.get('controller.repo.id');\n        number = this.get('builds.lastObject.number');\n        return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n      },\n      ShowMoreButton: Em.View.extend({\n        tagName: 'button',\n        classNameBindings: ['isLoading'],\n        attributeBindings: ['disabled'],\n        isLoadingBinding: 'controller.builds.isLoading',\n        template: Em.Handlebars.compile('{{view.label}}'),\n        disabledBinding: 'isLoading',\n        label: (function() {\n          if (this.get('isLoading')) {\n            return 'Loading';\n          } else {\n            return 'Show more';\n          }\n        }).property('isLoading'),\n        click: function() {\n          return this.get('parentView').showMore();\n        }\n      })\n    }),\n    BuildsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'context',\n      commitBinding: 'build.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha')\n    }),\n    BuildView: Travis.View.extend({\n      templateName: 'builds/show',\n      elementId: 'build',\n      classNameBindings: ['color', 'loading'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      commitBinding: 'build.commit',\n      loading: (function() {\n        return !this.get('build.isLoaded');\n      }).property('build.isLoaded'),\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/flash', "(function() {(function() {\n\n  this.Travis.reopen({\n    FlashView: Travis.View.extend({\n      elementId: 'flash',\n      templateName: 'layouts/flash',\n      flashBinding: 'controller.firstObject',\n      classNameBindings: ['flash.type'],\n      messageBinding: 'flash.message',\n      close: function(event) {\n        return this.get('controller').shiftObject();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n  this.Travis.reopen({\n    JobsView: Travis.View.extend({\n      templateName: 'jobs/list',\n      buildBinding: 'controller.build'\n    }),\n    JobsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'context.repo',\n      jobBinding: 'context',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id')\n    }),\n    JobView: Travis.View.extend({\n      templateName: 'jobs/show',\n      repoBinding: 'controller.repo',\n      jobBinding: 'controller.job',\n      commitBinding: 'job.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    }),\n    LogView: Travis.View.extend({\n      templateName: 'jobs/log',\n      logBinding: 'job.log',\n      click: function(event) {\n        return $(event.target).closest('.fold').toggleClass('open');\n      },\n      toTop: function() {\n        return $(window).scrollTop(0);\n      },\n      jobBinding: 'context',\n      toggleTailing: function(event) {\n        Travis.app.tailing.toggle();\n        return event.preventDefault();\n      },\n      logSubscriber: (function() {\n        var job, state;\n        job = this.get('job');\n        state = this.get('job.state');\n        if (job && state !== 'finished') {\n          job.subscribe();\n        }\n        return null;\n      }).property('job', 'job.state')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      tabBinding: 'controller.tab',\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n  this.Travis.reopen({\n    ProfileView: Travis.View.extend({\n      templateName: 'profile/show',\n      accountBinding: 'controller.account',\n      name: (function() {\n        return this.get('account.name') || this.get('account.login');\n      }).property('account.name', 'account.login')\n    }),\n    ProfileTabsView: Travis.View.extend({\n      templateName: 'profile/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classHooks: (function() {\n        if (this.get('tab') === 'hooks') {\n          return 'active';\n        }\n      }).property('tab'),\n      classUser: (function() {\n        if (this.get('tab') === 'user') {\n          return 'active';\n        }\n      }).property('tab'),\n      accountBinding: 'controller.account',\n      displayUser: (function() {\n        return this.get('controller.account.login') === this.get('controller.user.login');\n      }).property('controller.account.login', 'controller.user.login')\n    }),\n    HooksView: Travis.View.extend({\n      templateName: 'profile/tabs/hooks',\n      userBinding: 'controller.user',\n      urlGithubAdmin: (function() {\n        return Travis.Urls.githubAdmin(this.get('hook.slug'));\n      }).property('hook.slug')\n    }),\n    UserView: Travis.View.extend({\n      templateName: 'profile/tabs/user',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n      }).property('user.gravatarId'),\n      locales: (function() {\n        return [\n          {\n            key: null,\n            name: ''\n          }, {\n            key: 'en',\n            name: 'English'\n          }, {\n            key: 'ca',\n            name: 'Catalan'\n          }, {\n            key: 'cs',\n            name: 'Čeština'\n          }, {\n            key: 'es',\n            name: 'Español'\n          }, {\n            key: 'fr',\n            name: 'Français'\n          }, {\n            key: 'ja',\n            name: '日本語'\n          }, {\n            key: 'nl',\n            name: 'Nederlands'\n          }, {\n            key: 'nb',\n            name: 'Norsk Bokmål'\n          }, {\n            key: 'pl',\n            name: 'Polski'\n          }, {\n            key: {\n              'pt-BR': {\n                name: 'Português brasileiro'\n              }\n            }\n          }, {\n            key: 'ru',\n            name: 'Русский'\n          }\n        ];\n      }).property(),\n      saveLocale: function(event) {\n        return this.get('user').updateLocale($('#locale').val());\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      toggleInfo: function(event) {\n        return $('#repos').toggleClass('open');\n      }\n    }),\n    ReposListView: Em.CollectionView.extend({\n      elementId: 'repos',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        repoBinding: 'content',\n        classNames: ['repo'],\n        classNameBindings: ['color', 'selected'],\n        selectedBinding: 'repo.selected',\n        color: (function() {\n          return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n        }).property('repo.lastBuildResult'),\n        urlRepo: (function() {\n          return Travis.Urls.repo(this.get('repo.slug'));\n        }).property('repo.slug'),\n        urlLastBuild: (function() {\n          return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n        }).property('repo.slug', 'repo.lastBuildId')\n      })\n    }),\n    ReposListTabsView: Travis.View.extend({\n      templateName: 'repos/list/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepoView: Travis.View.extend({\n      templateName: 'repos/show',\n      repoBinding: 'controller.repo',\n      \"class\": (function() {\n        if (!this.get('repo.isLoaded')) {\n          return 'loading';\n        }\n      }).property('repo.isLoaded'),\n      urlGithub: (function() {\n        return Travis.Urls.githubRepo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubWatchers: (function() {\n        return Travis.Urls.githubWatchers(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubNetwork: (function() {\n        return Travis.Urls.githubNetwork(this.get('repo.slug'));\n      }).property('repo.slug')\n    }),\n    RepoShowTabsView: Travis.View.extend({\n      templateName: 'repos/show/tabs',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      classCurrent: (function() {\n        if (this.get('tab') === 'current') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuilds: (function() {\n        if (this.get('tab') === 'builds') {\n          return 'active';\n        }\n      }).property('tab'),\n      classPullRequests: (function() {\n        if (this.get('tab') === 'pull_requests') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBranches: (function() {\n        if (this.get('tab') === 'branches') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuild: (function() {\n        var classes, tab;\n        tab = this.get('tab');\n        classes = [];\n        if (tab === 'build') {\n          classes.push('active');\n        }\n        if (tab === 'build' || tab === 'job') {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab'),\n      classJob: (function() {\n        if (this.get('tab') === 'job') {\n          return 'active display-inline';\n        }\n      }).property('tab')\n    }),\n    RepoShowToolsView: Travis.View.extend({\n      templateName: 'repos/show/tools',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      closeMenu: function() {\n        return $('.menu').removeClass('display');\n      },\n      menu: function() {\n        var element;\n        this.popupCloseAll();\n        return element = $('#tools .menu').toggleClass('display');\n      },\n      requeue: function() {\n        this.closeMenu();\n        return this.get('build').requeue();\n      },\n      statusImages: function(event) {\n        this.set('active', true);\n        this.closeMenu();\n        return this.popup(event);\n      },\n      canPush: (function() {\n        return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n      }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n      isBuildTab: (function() {\n        return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n      }).property('tab'),\n      hasPushPermissions: (function() {\n        return Travis.app.get('currentUser.permissions').indexOf(this.get('repo.id')) > -1;\n      }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n      branches: (function() {\n        if (this.get('active')) {\n          return this.get('repo.branches');\n        }\n      }).property('active', 'repo.branches'),\n      urlRepo: (function() {\n        return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlStatusImage: (function() {\n        return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n      }).property('repo.slug', 'branch'),\n      markdownStatusImage: (function() {\n        return \"[![Build Status](\" + (this.get('urlStatusImage')) + \")](\" + (this.get('urlRepo')) + \")\";\n      }).property('urlStatusImage'),\n      textileStatusImage: (function() {\n        return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n      }).property('urlStatusImage'),\n      rdocStatusImage: (function() {\n        return \"{<img src=\\\"\" + (this.get('urlStatusImage')) + \"\\\" alt=\\\"Build Status\\\" />}[\" + (this.get('urlRepo')) + \"]\";\n      }).property('urlStatusImage')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n  this.Travis.reopen({\n    SidebarView: Travis.View.extend({\n      templateName: 'layouts/sidebar',\n      DecksView: Em.View.extend({\n        templateName: \"sponsors/decks\",\n        controller: Travis.SponsorsController.create({\n          perPage: 1\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n            controller.set('content', Travis.Sponsor.decks());\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      LinksView: Em.View.extend({\n        templateName: \"sponsors/links\",\n        controller: Travis.SponsorsController.create({\n          perPage: 6\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            controller.set('content', Travis.Sponsor.links());\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      WorkersView: Em.View.extend({\n        templateName: 'workers/list',\n        controller: Travis.WorkersController.create(),\n        didInsertElement: function() {\n          this.set('controller.content', Travis.Worker.find());\n          return this._super.apply(this, arguments);\n        }\n      }),\n      QueuesView: Em.View.extend({\n        templateName: 'queues/list',\n        controller: Travis.QueuesController.create(),\n        didInsertElement: function() {\n          var queue, queues;\n          queues = (function() {\n            var _i, _len, _ref, _results;\n            _ref = Travis.QUEUES;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              queue = _ref[_i];\n              _results.push(Em.ArrayController.create({\n                content: Travis.Job.queued(queue.name),\n                id: \"queue_\" + queue.name,\n                name: queue.display\n              }));\n            }\n            return _results;\n          })();\n          this.set('controller.content', queues);\n          return this._super.apply(this, arguments);\n        }\n      })\n    }),\n    WorkersView: Travis.View.extend({\n      toggleWorkers: function(event) {\n        var handle;\n        handle = $(event.target).toggleClass('open');\n        if (handle.hasClass('open')) {\n          return $('#workers li').addClass('open');\n        } else {\n          return $('#workers li').removeClass('open');\n        }\n      }\n    }),\n    WorkersListView: Travis.View.extend({\n      toggle: function(event) {\n        return $(event.target).closest('li').toggleClass('open');\n      }\n    }),\n    WorkersItemView: Travis.View.extend({\n      display: (function() {\n        var name, number, payload, repo, state;\n        name = (this.get('worker.name') || '').replace('travis-', '');\n        state = this.get('worker.state');\n        payload = this.get('worker.payload');\n        if (state === 'working' && (payload != null ? payload.repo : void 0) && (payload != null ? payload.build : void 0)) {\n          repo = payload.repo.slug;\n          number = ' #' + payload.build.number;\n          return (\"<span class='name'>\" + name + \": \" + repo + \"</span> \" + number).htmlSafe();\n        } else {\n          return \"\" + name + \": \" + state;\n        }\n      }).property('worker.state')\n    }),\n    QueueItemView: Travis.View.extend({\n      tagName: 'li',\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('job.repo.slug'), this.get('job.id'));\n      }).property('job.repo.slug', 'job.id')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n  this.Travis.reopen({\n    SigninView: Travis.View.extend({\n      templateName: 'auth/signin',\n      signingIn: (function() {\n        return Travis.app.get('authState');\n      }).property('Travis.app.authState')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n  this.Travis.reopen({\n    StatsView: Travis.View.extend({\n      templateName: 'stats/show',\n      didInsertElement: function() {},\n      renderChart: function(config) {\n        var chart;\n        chart = new Highcharts.Chart(config);\n        return this.fetch(config.source, function(data) {\n          var stats;\n          stats = (function() {\n            var _i, _len, _ref, _results;\n            _ref = data.stats;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              stats = _ref[_i];\n              _results.push(config.map(stats));\n            }\n            return _results;\n          })();\n          return chart.series[0].setData(stats);\n        });\n      },\n      fetch: function(url, callback) {\n        return $.ajax({\n          type: 'GET',\n          url: url,\n          accepts: {\n            json: 'application/vnd.travis-ci.2+json'\n          },\n          success: callback\n        });\n      },\n      CHARTS: {\n        repos: {\n          source: '/api/stats/repos',\n          total: 0,\n          map: function(data) {\n            return [Date.parse(data.date), this.total += parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"repos_stats\"\n          },\n          title: {\n            text: \"Total Projects/Repositories\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n            }\n          },\n          series: [\n            {\n              name: \"Repository Growth\",\n              data: []\n            }\n          ]\n        },\n        builds: {\n          source: '/api/stats/tests',\n          map: function(data) {\n            return [Date.parse(data.date), parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"tests_stats\",\n            type: \"column\"\n          },\n          title: {\n            text: \"Build Count\"\n          },\n          subtitle: {\n            text: \"last month\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n            }\n          },\n          series: [\n            {\n              name: \"Total Builds\",\n              data: []\n            }\n          ]\n        }\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n  this.Travis.reopen({\n    TopView: Travis.View.extend({\n      templateName: 'layouts/top',\n      tabBinding: 'controller.tab',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n      }).property('user.gravatarId'),\n      classHome: (function() {\n        if (this.get('tab') === 'home') {\n          return 'active';\n        }\n      }).property('tab'),\n      classStats: (function() {\n        if (this.get('tab') === 'stats') {\n          return 'active';\n        }\n      }).property('tab'),\n      classProfile: (function() {\n        var classes;\n        classes = ['profile'];\n        if (this.get('tab') === 'profile') {\n          classes.push('active');\n        }\n        classes.push(Travis.app.get('authState'));\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.authState'),\n      showProfile: function() {\n        return $('#top .profile ul').show();\n      },\n      hideProfile: function() {\n        return $('#top .profile ul').hide();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('data/sponsors', "(function() {(function() {\n\n  this.Travis.SPONSORS = [\n    {\n      type: 'platinum',\n      url: \"http://www.wooga.com\",\n      image: \"wooga-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://bendyworks.com\",\n      image: \"bendyworks-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://cloudcontrol.com\",\n      image: \"cloudcontrol-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://xing.de\",\n      image: \"xing-205x130.png\"\n    }, {\n      type: 'gold',\n      url: \"http://heroku.com\",\n      image: \"heroku-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://soundcloud.com\",\n      image: \"soundcloud-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://nedap.com\",\n      image: \"nedap-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://mongohq.com\",\n      image: \"mongohq-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://zweitag.de\",\n      image: \"zweitag-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://kanbanery.com\",\n      image: \"kanbanery-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://ticketevolution.com\",\n      image: \"ticketevolution-205x60.jpg\"\n    }, {\n      type: 'gold',\n      url: \"http://plan.io/travis\",\n      image: \"planio-205x60.png\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cobot.me\\\">Cobot</a><span>: The one tool to run your coworking space</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://jumpstartlab.com\\\">JumpstartLab</a><span>: We build developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://evilmartians.com\\\">Evil Martians</a><span>: Agile Ruby on Rails development</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://zendesk.com\\\">Zendesk</a><span>: Love your helpdesk</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://stripe.com\\\">Stripe</a><span>: Payments for developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://basho.com\\\">Basho</a><span>: We make Riak!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://thinkrelevance.com\\\">Relevance</a><span>: We deliver software solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://mindmatters.de\\\">Mindmatters</a><span>: Software für Menschen</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://amenhq.com\\\">Amen</a><span>: The best and worst of everything</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://site5.com\\\">Site5</a><span>: Premium Web Hosting Solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.crowdint.com\\\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.atomicobject.com/detroit\\\">Atomic Object</a><span>: Work with really smart people</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://codeminer.com.br\\\">Codeminer</a><span>: smart services for your startup</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cloudant.com\\\">Cloudant</a><span>: grow into your data layer, not out of it</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://gidsy.com\\\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://5apps.com\\\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://meltmedia.com\\\">Meltmedia</a><span>: We are Interactive Superheroes</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.fngtps.com\\\">Fingertips</a><span> offers design and development services</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.engineyard.com\\\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://malwarebytes.org\\\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://readmill.com\\\">Readmill</a><span>: The best reading app on the iPad.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.mdsol.com\\\">Medidata</a><span>: clinical tech improving quality of life</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://coderwall.com/teams/4f27194e973bf000040005f0\\\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://twitter.com\\\">Twitter</a><span>: instantly connects people everywhere</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://agileanimal.com\\\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://tupalo.com\\\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>\"\n    }\n  ];\n\n  this.Travis.WORKERS = {\n    \"jvm-otp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://travis-ci.com\"\n    },\n    \"jvm-otp2.worker.travis-ci.org\": {\n      name: \"Transloadit\",\n      url: \"http://transloadit.com\"\n    },\n    \"ppp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://beta.travis-ci.com\"\n    },\n    \"ppp2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ppp3.worker.travis-ci.org\": {\n      name: \"Alchemy CMS\",\n      url: \"http://alchemy-cms.com/\"\n    },\n    \"rails1.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby1.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"ruby2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby3.worker.travis-ci.org\": {\n      name: \"Railslove\",\n      url: \"http://railslove.de\"\n    },\n    \"ruby4.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"spree.worker.travis-ci.org\": {\n      name: \"Spree\",\n      url: \"http://spreecommerce.com\"\n    },\n    \"staging.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('emoij', "(function() {(function() {\n\n  this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n  $.fn.extend({\n    outerHtml: function() {\n      return $(this).wrap('<div></div>').parent().html();\n    },\n    outerElement: function() {\n      return $($(this).outerHtml()).empty();\n    },\n    flash: function() {\n      return Utils.flash(this);\n    },\n    unflash: function() {\n      return Utils.unflash(this);\n    },\n    filterLog: function() {\n      this.deansi();\n      return this.foldLog();\n    },\n    deansi: function() {\n      return this.html(Utils.deansi(this.html()));\n    },\n    foldLog: function() {\n      return this.html(Utils.foldLog(this.html()));\n    },\n    unfoldLog: function() {\n      return this.html(Utils.unfoldLog(this.html()));\n    },\n    updateTimes: function() {\n      return Utils.updateTimes(this);\n    },\n    activateTab: function(tab) {\n      return Utils.activateTab(this, tab);\n    },\n    timeInWords: function() {\n      return $(this).each(function() {\n        return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n      });\n    },\n    updateGithubStats: function(repo) {\n      return Utils.updateGithubStats(repo, $(this));\n    }\n  });\n\n  $.extend({\n    isEmpty: function(obj) {\n      if ($.isArray(obj)) {\n        return !obj.length;\n      } else if ($.isObject(obj)) {\n        return !$.keys(obj).length;\n      } else {\n        return !obj;\n      }\n    },\n    isObject: function(obj) {\n      return Object.prototype.toString.call(obj) === '[object Object]';\n    },\n    keys: function(obj) {\n      var keys;\n      keys = [];\n      $.each(obj, function(key) {\n        return keys.push(key);\n      });\n      return keys;\n    },\n    values: function(obj) {\n      var values;\n      values = [];\n      $.each(obj, function(key, value) {\n        return values.push(value);\n      });\n      return values;\n    },\n    underscore: function(string) {\n      return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n        if (chr) {\n          return \"_\" + (chr.toUpperCase());\n        } else {\n          return '';\n        }\n      });\n    },\n    camelize: function(string, uppercase) {\n      string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n      return string.replace(/_(.)?/g, function(match, chr) {\n        if (chr) {\n          return chr.toUpperCase();\n        } else {\n          return '';\n        }\n      });\n    },\n    capitalize: function(string) {\n      return string[0].toUpperCase() + string.substring(1);\n    },\n    compact: function(object) {\n      return $.grep(object, function(value) {\n        return !!value;\n      });\n    },\n    all: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return false;\n        }\n        i++;\n      }\n      return true;\n    },\n    detect: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return array[i];\n        }\n        i++;\n      }\n    },\n    select: function(array, callback) {\n      var args, i, result;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      result = [];\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          result.push(array[i]);\n        }\n        i++;\n      }\n      return result;\n    },\n    slice: function(object, key) {\n      var keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) > -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    only: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) !== -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    except: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) === -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    intersect: function(array, other) {\n      return array.filter(function(element) {\n        return other.indexOf(element) !== -1;\n      });\n    },\n    map: function(elems, callback, arg) {\n      var i, isArray, key, length, ret, value;\n      value = void 0;\n      key = void 0;\n      ret = [];\n      i = 0;\n      length = elems.length;\n      isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n      if (isArray) {\n        while (i < length) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n          i++;\n        }\n      } else {\n        for (key in elems) {\n          value = callback(elems[key], key, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n        }\n      }\n      return ret.concat.apply([], ret);\n    },\n    shuffle: function(array) {\n      var current, tmp, top;\n      array = array.slice();\n      top = array.length;\n      while (top && --top) {\n        current = Math.floor(Math.random() * (top + 1));\n        tmp = array[current];\n        array[current] = array[top];\n        array[top] = tmp;\n      }\n      return array;\n    },\n    truncate: function(string, length) {\n      if (string.length > length) {\n        return string.trim().substring(0, length) + '...';\n      } else {\n        return string;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n  jQuery.support.cors = true;\n\n  this.Travis.Ajax = Ember.Mixin.create({\n    DEFAULT_OPTIONS: {\n      accepts: {\n        json: 'application/vnd.travis-ci.2+json'\n      }\n    },\n    post: function(url, data, callback) {\n      return this.ajax(url, 'post', {\n        data: data,\n        success: callback\n      });\n    },\n    ajax: function(url, method, options) {\n      var endpoint, token, _base;\n      endpoint = Travis.config.api_endpoint || '';\n      options = options || {};\n      if (token = sessionStorage.getItem('travis.token')) {\n        options.headers || (options.headers = {});\n        (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n      }\n      options.url = \"\" + endpoint + url;\n      options.type = method;\n      options.dataType = 'json';\n      options.contentType = 'application/json; charset=utf-8';\n      options.context = this;\n      if (options.data && method !== 'GET' && method !== 'get') {\n        options.data = JSON.stringify(options.data);\n      }\n      return $.ajax($.extend(options, this.DEFAULT_OPTIONS));\n    }\n  });\n\n  this.Travis.ajax = Em.Object.create(this.Travis.Ajax, {\n    get: function(url, callback) {\n      return this.ajax(url, 'get', {\n        success: callback\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n  Travis.ExpandableRecordArray = DS.RecordArray.extend({\n    isLoaded: false,\n    isLoading: false,\n    load: function(array) {\n      var observer, self;\n      this.set('isLoading', true);\n      self = this;\n      observer = function() {\n        var content;\n        if (this.get('isLoaded')) {\n          content = self.get('content');\n          array.removeObserver('isLoaded', observer);\n          array.forEach(function(record) {\n            return self.pushObject(record);\n          });\n          self.set('isLoading', false);\n          return self.set('isLoaded', true);\n        }\n      };\n      return array.addObserver('isLoaded', observer);\n    },\n    pushObject: function(record) {\n      var clientId, id, ids;\n      ids = this.get('content');\n      id = record.get('id');\n      clientId = record.get('clientId');\n      if (ids.contains(clientId)) {\n        return;\n      }\n      return ids.pushObject(clientId);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/log', "(function() {(function() {\n\n  this.Travis.Log = {\n    FOLDS: {\n      schema: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?<p.*?\\/a>-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n<p.*?\\/a>.*<\\/p>)/g,\n      migrate: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n      bundle: /(<p.*?\\/a>\\$ bundle install.*<\\/p>\\n(<p.*?\\/a>(Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<p.*?\\/a><\\/p>\\n)*)/g,\n      exec: /(<p.*?\\/a>[\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n    },\n    filter: function(log) {\n      log = this.escape(log);\n      log = this.deansi(log);\n      log = log.replace(/\\r/g, '');\n      log = this.number(log);\n      log = this.fold(log);\n      log = log.replace(/\\n/g, '');\n      return log;\n    },\n    stripPaths: function(log) {\n      return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n    },\n    escape: function(log) {\n      return Handlebars.Utils.escapeExpression(log);\n    },\n    escapeRuby: function(log) {\n      return log.replace(/#<(\\w+.*?)>/, '#&lt;$1&gt;');\n    },\n    number: function(log) {\n      var result;\n      result = '';\n      $.each(log.trim().split('\\n'), function(ix, line) {\n        var number, path;\n        number = ix + 1;\n        path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n        return result += '<p><a href=\\'#%@\\' id=\\'%@\\' name=\\'L%@\\'>%@</a>%@</p>\\n'.fmt(path, path, number, number, line);\n      });\n      return result.trim();\n    },\n    deansi: function(log) {\n      var ansi, text;\n      log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n      ansi = ansiparse(log);\n      text = '';\n      ansi.forEach(function(part) {\n        var classes;\n        classes = [];\n        part.foreground && classes.push(part.foreground);\n        part.background && classes.push('bg-' + part.background);\n        part.bold && classes.push('bold');\n        part.italic && classes.push('italic');\n        return text += (classes.length ? '<span class=\\'' + classes.join(' ') + '\\'>' + part.text + '</span>' : part.text);\n      });\n      return text.replace(/\\033/g, '');\n    },\n    fold: function(log) {\n      log = this.unfold(log);\n      $.each(Travis.Log.FOLDS, function(name, pattern) {\n        return log = log.replace(pattern, function() {\n          return '<div class=\\'fold ' + name + '\\'>' + arguments[1].trim() + '</div>';\n        });\n      });\n      return log;\n    },\n    unfold: function(log) {\n      return log.replace(/<div class='fold[^']*'>([\\s\\S]*?)<\\/div>/g, '$1\\n');\n    },\n    location: function() {\n      return window.location.hash;\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n  this.Travis.Model = DS.Model.extend({\n    primaryKey: 'id',\n    id: DS.attr('number'),\n    refresh: function() {\n      var id;\n      id = this.get('id');\n      if (id) {\n        return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n      }\n    },\n    update: function(attrs) {\n      var _this = this;\n      $.each(attrs, function(key, value) {\n        if (key !== 'id') {\n          return _this.set(key, value);\n        }\n      });\n      return this;\n    }\n  });\n\n  this.Travis.Model.reopenClass({\n    find: function() {\n      if (arguments.length === 0) {\n        return Travis.app.store.findAll(this);\n      } else {\n        return this._super.apply(this, arguments);\n      }\n    },\n    filter: function(callback) {\n      return Travis.app.store.filter(this, callback);\n    },\n    load: function(attrs) {\n      return Travis.app.store.load(this, attrs);\n    },\n    buildURL: function(suffix) {\n      var base, url;\n      base = this.url || this.pluralName();\n      Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n      Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n      url = [base];\n      if (suffix !== void 0) {\n        url.push(suffix);\n      }\n      return url.join('/');\n    },\n    singularName: function() {\n      var name, parts;\n      parts = this.toString().split('.');\n      name = parts[parts.length - 1];\n      return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n    },\n    pluralName: function() {\n      return Travis.app.store.adapter.pluralize(this.singularName());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n  this.Travis.Ticker = Ember.Object.extend({\n    init: function() {\n      if (this.get('interval') !== -1) {\n        return this.schedule();\n      }\n    },\n    tick: function() {\n      var context, target, targets, _i, _len;\n      context = this.get('context');\n      targets = this.get('targets') || [this.get('target')];\n      for (_i = 0, _len = targets.length; _i < _len; _i++) {\n        target = targets[_i];\n        if (context) {\n          target = context.get(target);\n        }\n        if (target) {\n          target.tick();\n        }\n      }\n      return this.schedule();\n    },\n    schedule: function() {\n      var _this = this;\n      return Ember.run.later((function() {\n        return _this.tick();\n      }), this.get('interval') || Travis.app.TICK_INTERVAL);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n  this.Travis = Em.Namespace.create({\n    config: {\n      api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href')\n    },\n    CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n    ROUTES: {\n      'profile/:login/me': ['profile', 'user'],\n      'profile/:login': ['profile', 'hooks'],\n      'profile': ['profile', 'hooks'],\n      'stats': ['stats', 'show'],\n      ':owner/:name/jobs/:id/:line': ['home', 'job'],\n      ':owner/:name/jobs/:id': ['home', 'job'],\n      ':owner/:name/builds/:id': ['home', 'build'],\n      ':owner/:name/builds': ['home', 'builds'],\n      ':owner/:name/pull_requests': ['home', 'pullRequests'],\n      ':owner/:name/branches': ['home', 'branches'],\n      ':owner/:name': ['home', 'current'],\n      '': ['home', 'index'],\n      '#': ['home', 'index']\n    },\n    QUEUES: [\n      {\n        name: 'common',\n        display: 'Common'\n      }, {\n        name: 'php',\n        display: 'PHP, Perl and Python'\n      }, {\n        name: 'node_js',\n        display: 'Node.js'\n      }, {\n        name: 'jvmotp',\n        display: 'JVM and Erlang'\n      }, {\n        name: 'rails',\n        display: 'Rails'\n      }, {\n        name: 'spree',\n        display: 'Spree'\n      }\n    ],\n    INTERVALS: {\n      sponsors: -1,\n      times: -1,\n      updateTimes: 1000\n    },\n    run: function(attrs) {\n      var _this = this;\n      if (location.hash.slice(0, 2) === '#!') {\n        location.href = location.href.replace('#!/', '');\n      }\n      return this.loadConfig(function(config) {\n        var app;\n        app = Travis.App.create(attrs || {});\n        $.each(Travis, function(key, value) {\n          if (value && value.isClass && key !== 'constructor') {\n            return app[key] = value;\n          }\n        });\n        _this.app = app;\n        _this.store = app.store;\n        return $(function() {\n          return app.initialize();\n        });\n      });\n    },\n    loadConfig: function(callback) {\n      var _this = this;\n      return this.ajax.get('/config', function(data) {\n        $.extend(_this.config, data.config);\n        console.log(\"Connecting to \" + data.config.api_endpoint);\n        return callback(data.config);\n      });\n    }\n  });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\n  <h1>Signing in</h1>\\n  <p>\\n    Trying to authenticate with GitHub.\\n  </p>\\n{{else}}\\n  <h1>Sign in</h1>\\n  <p>\\n    <a href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>Sign in with GitHub</a>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n  <table id=\\\"builds\\\" class=\\\"list\\\">\\n    <thead>\\n      <tr>\\n        <th>{{t builds.name}}</th>\\n        <th>{{t builds.commit}}</th>\\n        <th>{{t builds.message}}</th>\\n        <th>{{t builds.duration}}</th>\\n        <th>{{t builds.finished_at}}</th>\\n      </tr>\\n    </thead>\\n\\n    <tbody>\\n      {{#each build in builds}}\\n        {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if id}}\\n              <a {{action showBuild this href=true}}>\\n                {{number}}\\n              </a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"commit\\\">\\n            <a {{bindAttr href=\\\"view.urlGithubCommit\\\"}}>\\n              {{formatCommit commit}}\\n            </a>\\n          </td>\\n          <td class=\\\"message\\\">\\n            {{{formatMessage commit.message short=\\\"true\\\"}}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"duration\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n  <p>\\n    {{view view.ShowMoreButton}}\\n  </p>\\n{{else}}\\n  <div class=\\\"loading\\\"><span>Loading</span></div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if loading}}\\n    <span>Loading</span>\\n  {{else}}\\n    <dl id=\\\"summary\\\">\\n      <div class=\\\"left\\\">\\n        <dt>{{t builds.name}}</dt>\\n        <dd class=\\\"number\\\">\\n          <span class=\\\"status\\\"></span>\\n          {{#if build.id}}\\n            <a {{action showBuild build href=true}}>{{build.number}}</a>\\n          {{/if}}\\n        </dd>\\n        <dt class=\\\"finished_at_label\\\">{{t builds.finished_at}}</dt>\\n        <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime build.finishedAt}}</dd>\\n        <dt>{{t builds.duration}}</dt>\\n        <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration build.duration}}</dd>\\n      </div>\\n\\n      <div class=\\\"right\\\">\\n        <dt>{{t builds.commit}}</dt>\\n        <dd class=\\\"commit\\\"><a href=\\\"{{unbound urlGithubCommit}}\\\">{{formatCommit build.commit}}</a></dd>\\n        {{#if commit.compareUrl}}\\n          <dt>{{t builds.compare}}</dt>\\n          <dd class=\\\"compare\\\"><a href=\\\"{{unbound commit.compareUrl}}\\\">{{pathFrom build.commit.compareUrl}}</a></dd>\\n        {{/if}}\\n        {{#if commit.authorName}}\\n          <dt>{{t builds.author}}</dt>\\n          <dd class=\\\"author\\\"><a href=\\\"{{unbound urlAuthor}}\\\">{{build.commit.authorName}}</a></dd>\\n        {{/if}}\\n        {{#if commit.committerName}}\\n          <dt>{{t builds.committer}}</dt>\\n          <dd class=\\\"committer\\\"><a href=\\\"{{unbound urlCommitter}}\\\">{{build.commit.committerName}}</a></dd>\\n        {{/if}}\\n      </div>\\n\\n      <dt>{{t builds.message}}</dt>\\n      <dd class=\\\"message\\\">{{{formatMessage build.commit.message}}}</dd>\\n\\n      {{#unless isMatrix}}\\n        <dt>{{t builds.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig build.config}}</dd>\\n      {{/unless}}\\n    </dl>\\n\\n    {{#if build.isMatrix}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n    {{else}}\\n      {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n    {{/if}}\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n  {{#if view.required}}\\n    <table id=\\\"jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.build_matrix}}\\n      </caption>\\n  {{else}}\\n    <table id=\\\"allowed_failure_jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.allowed_failures}}\\n        <a title=\\\"What's this?\\\" class=\\\"help\\\" name=\\\"help-allowed_failures\\\" {{action popup target=\\\"view\\\"}}></a>\\n      </caption>\\n  {{/if}}\\n    <thead>\\n      <tr>\\n        {{#each key in view.build.configKeys}}\\n          <th>{{key}}</th>\\n        {{/each}}\\n      </tr>\\n    </thead>\\n    <tbody>\\n      {{#each job in view.jobs}}\\n        {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{number}}</a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n          {{#each value in configValues}}\\n            <td>{{value}}</td>\\n          {{/each}}\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n\\n  {{#unless view.required}}\\n    <div id=\\\"help-allowed_failures\\\" class=\\\"popup\\\">\\n      <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n      <h4>{{t \\\"jobs.allowed_failures\\\"}}</h4>\\n      <p>\\n        Allowed Failures are items in your build matrix that are allowed to\\n        fail without causing the entire build to be shown as failed.\\n      </p>\\n      <p>\\n        You can define allowed failures in the build matrix as follows:\\n      </p>\\n      <pre>matrix:\\n  allow_failures:\\n    - rvm: ruby-head</pre>\\n      <p>\\n        This lets you add in experimental and preparatory builds to test against versions or\\n        configurations that you are not ready to officially support.\\n      </p>\\n    </div>\\n  {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n  <pre id=\\\"log\\\" class=\\\"ansi\\\"><a href=\\\"#\\\" id=\\\"tail\\\" {{action toggleTailing target=\\\"view\\\"}}>\\n    <span class=\\\"status\\\"></span>\\n    <label>Follow logs</label>\\n  </a>{{{formatLog log.body}}}</pre>\\n\\n  {{#if sponsor.name}}\\n    <p class=\\\"sponsor\\\">\\n    {{t builds.messages.sponsored_by}}\\n      <a {{bindAttr href=\\\"sponsor.url\\\"}}>{{sponsor.name}}</a>\\n    </p>\\n  {{/if}}\\n\\n  <a href='#' class=\\\"to-top\\\" {{action toTop target=\\\"view\\\"}}>To top</a>\\n{{else}}\\n  <div id=\\\"log\\\" class=\\\"loading\\\">\\n    <span>Loading</span>\\n  </div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if job.isLoaded}}\\n    <div {{bindAttr class=\\\"view.color\\\"}}>\\n      <dl id=\\\"summary\\\">\\n        <div class=\\\"left\\\">\\n          <dt>Job</dt>\\n          <dd class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{job.number}}</a>\\n            {{/if}}\\n          </dd>\\n          <dt class=\\\"finished_at_label\\\">{{t jobs.finished_at}}</dt>\\n          <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime job.finishedAt}}</dd>\\n          <dt>{{t jobs.duration}}</dt>\\n          <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration job.duration}}</dd>\\n        </div>\\n\\n        <div class=\\\"right\\\">\\n          <dt>{{t jobs.commit}}</dt>\\n          <dd class=\\\"commit\\\"><a {{bindAttr href=\\\"urlGithubCommit\\\"}}>{{formatCommit commit}}</a></dd>\\n          {{#if commit.compareUrl}}\\n            <dt>{{t jobs.compare}}</dt>\\n            <dd class=\\\"compare\\\"><a {{bindAttr href=\\\"commit.compareUrl\\\"}}>{{pathFrom commit.compareUrl}}</a></dd>\\n          {{/if}}\\n          {{#if commit.authorName}}\\n            <dt>{{t jobs.author}}</dt>\\n            <dd class=\\\"author\\\"><a {{bindAttr href=\\\"urlAuthor\\\"}}>{{commit.authorName}}</a></dd>\\n          {{/if}}\\n          {{#if commit.committerName}}\\n            <dt>{{t jobs.committer}}</dt>\\n            <dd class=\\\"committer\\\"><a {{bindAttr href=\\\"urlCommitter\\\"}}>{{commit.committerName}}</a></dd>\\n          {{/if}}\\n        </div>\\n\\n        <dt>{{t jobs.message}}</dt>\\n        <dd class=\\\"message\\\">{{formatMessage commit.message}}</dd>\\n        <dt>{{t jobs.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig job.config}}</dd>\\n      </dl>\\n\\n      {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n    </div>\\n  {{else}}\\n    <div id=\\\"job\\\" class=\\\"loading\\\">\\n      <span>Loading</span>\\n    </div>\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"<p>{{view.message}}</p>\\n<a class=\\\"close\\\" {{action close target=\\\"view\\\"}}></a>\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    {{outlet right}}\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    <a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n      {{t layouts.application.fork_me}}\\n    </a>\\n\\n    <div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n      <div class='icon'></div>&nbsp;\\n    </div>\\n\\n    <div class=\\\"box\\\">\\n      <h4>Getting started?</h4>\\n      <p>\\n        Please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started\\\">guide</a>.\\n        It will only take a few minutes :)\\n      </p>\\n      <p>\\n        You can find detailled docs on our <a href=\\\"http://about.travis-ci.org/\\\">about</a> site.\\n      </p>\\n      <p>\\n        If you need help please don't hesitate to join\\n        <a href=\\\"irc://irc.freenode.net#travis\\\">#travis</a> on irc.freenode.net\\n        or our <a href=\\\"http://groups.google.com/group/travis-ci\\\">mailinglist</a>.\\n      </p>\\n    </div>\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"<a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n  {{t layouts.application.fork_me}}\\n</a>\\n\\n<div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n  <div class='icon'></div>&nbsp;\\n</div>\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n<div id=\\\"about\\\" class=\\\"box\\\">\\n  <h4>{{t layouts.about.join}}</h4>\\n  <ul>\\n    <li>{{t layouts.about.repository}}: <a href=\\\"http://github.com/travis-ci\\\">Github</a></li>\\n    <li>{{t layouts.about.twitter}}: <a href=\\\"http://twitter.com/travisci\\\">@travisci</a></li>\\n    <li>{{t layouts.about.mailing_list}}: <a href=\\\"http://groups.google.com/group/travis-ci\\\">travis-ci</a></li>\\n    <li><a href=\\\"irc://irc.freenode.net#travis\\\">irc.freenode.net#travis</a></li>\\n  </ul>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"<a {{action showRoot href=true}}>\\n  <h1>Travis</h1>\\n</a>\\n\\n<ul id=\\\"navigation\\\">\\n  <li {{bindAttr class=\\\"view.classHome\\\"}}>\\n    <a {{action showRoot href=true}}>Home</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classStats\\\"}}>\\n    <a {{action showStats href=true}}>Stats</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/blog\\\">Blog</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/docs\\\">Docs</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classProfile\\\"}}>\\n    <p class=\\\"handle\\\">\\n      <a class=\\\"signed-out\\\" href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>{{t layouts.top.github_login}}</a>\\n      <a class=\\\"signed-in\\\" {{action showProfile href=true}}><img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>{{user.name}}</a>\\n      <span class=\\\"signing-in\\\">Signing in</span>\\n    </p>\\n    <ul>\\n      <li>\\n        <a {{action showProfile href=true}}>{{t layouts.top.profile}}</a>\\n      </li>\\n      <li>\\n        <a href=\\\"/\\\" {{action signOut target=\\\"Travis.app\\\"}}>{{t layouts.top.sign_out}}</a>\\n      </li>\\n    </ul>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n</div>\\n\\n<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_accounts\\\" {{bindAttr class=\\\"view.classAccounts\\\"}}>\\n    <h5><a name=\\\"accounts\\\" href=\\\"\\\">Accounts</a></h5>\\n  </li>\\n</ul>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n    <a {{action showAccount view.account href=true}} class=\\\"name\\\">{{view.name}}</a>\\n    <p class=\\\"summary\\\">\\n      <span class=\\\"repos_label\\\">Repositories:</span>\\n      <abbr class=\\\"repos\\\">{{view.content.reposCount}}</abbr>\\n    </p>\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"<h3>{{view.name}}</h3>\\n\\n{{view Travis.ProfileTabsView}}\\n\\n<div class=\\\"tab\\\">\\n  {{outlet pane}}\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_hooks\\\" {{bindAttr class=\\\"view.classHooks\\\"}}>\\n    <h5>\\n      <a {{action showAccount view.account href=true}}>Repositories</a>\\n    </h5>\\n  </li>\\n  {{#if view.displayUser}}\\n    <li id=\\\"tab_user\\\" {{bindAttr class=\\\"view.classUser\\\"}}>\\n      <h5>\\n        <a {{action showUserProfile view.account href=true}}>Profile</a>\\n      </h5>\\n    </li>\\n  {{/if}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"<p class=\\\"tip\\\">\\n  {{{t profiles.show.message.your_repos}}}\\n</p>\\n\\n{{#if hooks.isLoaded}}\\n  {{#if user.isSyncing}}\\n    <p class=\\\"message loading\\\">\\n      <span>Please wait while we sync from GitHub</span>\\n    </p>\\n  {{else}}\\n    <p class=\\\"message\\\">\\n      Last synchronized from GitHub: {{formatTime user.syncedAt}}\\n      <button class=\\\"sync_now\\\" {{action sync target=\\\"user\\\"}}>\\n        Sync now\\n      </button>\\n    </p>\\n\\n    <ul id=\\\"hooks\\\">\\n      {{#each hook in hooks}}\\n        <li {{bindAttr class=\\\"hook.active:active\\\"}}>\\n          <a {{bindAttr href=\\\"hook.urlGithub\\\"}} rel=\\\"nofollow\\\">{{hook.slug}}</a>\\n          <p class=\\\"description\\\">{{hook.description}}</p>\\n\\n          <div class=\\\"controls\\\">\\n            <a {{bindAttr href=\\\"hook.urlGithubAdmin\\\"}} class=\\\"github-admin tool-tip\\\" title=\\\"Github service hooks admin page\\\"></a>\\n            <a {{action toggle target=\\\"hook\\\"}} class=\\\"switch\\\"></a>\\n          </div>\\n        </li>\\n      {{else}}\\n        <li>\\n          You do not seem to have any repositories that we could sync.\\n        </li>\\n      {{/each}}\\n    </ul>\\n  {{/if}}\\n{{else}}\\n  <p class=\\\"message loading\\\">\\n    <span>Loading</span>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"<img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>\\n\\n<dl class=\\\"profile\\\">\\n  <dt>\\n    {{t profiles.show.github}}:\\n  </dt>\\n  <dd>\\n    <a {{bindAttr href=\\\"urlGithub\\\"}}>{{user.login}}</a>\\n  </dd>\\n  <dt>\\n    {{t profiles.show.email}}:\\n  </dt>\\n  <dd>\\n    {{user.email}}\\n  </dd>\\n  <dt>\\n    {{t profiles.show.token}}:\\n  </dt>\\n  <dd>\\n    {{user.token}}\\n  </dd>\\n</dl>\\n\\n<form>\\n  {{view Ember.Select id=\\\"locale\\\"\\n     contentBinding=\\\"view.locales\\\"\\n     valueBinding=\\\"Travis.app.currentUser.locale\\\"\\n     optionLabelPath=\\\"content.name\\\"\\n     optionValuePath=\\\"content.key\\\"}}\\n\\n  <button name=\\\"commit\\\" {{action saveLocale target=\\\"view\\\"}}>\\n    {{t profiles.show.update_locale}}\\n  </button>\\n</form>\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"<ul id=\\\"queues\\\">\\n{{#each queue in controller}}\\n  <li class=\\\"queue\\\">\\n    <h4>{{t queue}}: {{queue.name}}</h4>\\n    <ul {{bindAttr id=\\\"queue.id\\\"}}>\\n      {{#each job in queue}}\\n        {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n          <a {{action showJob job.repo job target=\\\"Travis.app.router\\\" href=true}}>\\n            <span class=\\\"slug\\\">\\n              {{job.repo.slug}}\\n            </span>\\n            #{{job.number}}\\n          </a>\\n        {{/view}}\\n      {{else}}\\n        {{t no_job}}\\n      {{/each}}\\n    </ul>\\n  </li>\\n{{/each}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n  {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n</div>\\n\\n{{view Travis.ReposListTabsView}}\\n\\n<a {{action toggleInfo target=\\\"view\\\"}} class=\\\"toggle-info\\\"></a>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n    {{#with view.repo}}\\n      <div class=\\\"slug-and-status\\\">\\n        <span class=\\\"status\\\"></span>\\n        {{#if slug}}\\n          <a {{action showRepo this href=true}} class=\\\"slug\\\">{{slug}}</a>\\n        {{/if}}\\n      </div>\\n      {{#if lastBuildId}}\\n        <a {{action showBuild this lastBuildId href=true}} class=\\\"last_build\\\">{{lastBuildNumber}}</a>\\n      {{/if}}\\n\\n      <p class=\\\"summary\\\">\\n        <span class=\\\"duration_label\\\">{{t repositories.duration}}:</span>\\n        <abbr class=\\\"duration\\\" {{bindAttr title=\\\"lastBuildStartedAt\\\"}}>{{formatDuration lastBuildDuration}}</abbr>,\\n        <span class=\\\"finished_at_label\\\">{{t repositories.finished_at}}:</span>\\n        <abbr class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"lastBuildFinishedAt\\\"}}>{{formatTime lastBuildFinishedAt}}</abbr>\\n      </p>\\n\\n      <div class=\\\"indicator\\\"><span></span></div>\\n\\n      {{#if description}}\\n        <div class=\\\"info\\\">\\n          <p class=\\\"description\\\">{{description}}</p>\\n        </div>\\n      {{/if}}\\n    {{/with}}\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_recent\\\" {{bindAttr class=\\\"view.classRecent\\\"}}>\\n    <h5><a name=\\\"recent\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.recent}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_owned\\\" {{bindAttr class=\\\"view.classOwned\\\"}}>\\n    <h5><a name=\\\"owned\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.my_repositories}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_search\\\" {{bindAttr class=\\\"view.classSearch\\\"}}>\\n    <h5><a name=\\\"search\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.search}}</a></h5>\\n  </li>\\n</ul>\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"<div id=\\\"repo\\\" {{bindAttr class=\\\"view.class\\\"}}>\\n  {{#if view.repo.isLoaded}}\\n    {{#with view.repo}}\\n      <h3>\\n        <a {{bindAttr href=\\\"view.urlGithub\\\"}}>{{slug}}</a>\\n      </h3>\\n\\n      <p class=\\\"description\\\">{{description}}</p>\\n\\n      <ul class=\\\"github-stats\\\">\\n        <li class=\\\"language\\\">\\n          {{lastBuildLanguage}}\\n        </li>\\n        <li>\\n          <a class=\\\"watchers\\\" title=\\\"Watchers\\\" {{bindAttr href=\\\"view.urlGithubWatchers\\\"}}>\\n            {{stats.watchers}}\\n          </a>\\n        </li>\\n        <li>\\n          <a class=\\\"forks\\\" title=\\\"Forks\\\" {{bindAttr href=\\\"view.urlGithubNetwork\\\"}}>\\n            {{stats.forks}}\\n          </a>\\n        </li>\\n      </ul>\\n\\n      {{view Travis.RepoShowTabsView}}\\n      {{view Travis.RepoShowToolsView}}\\n    {{/with}}\\n\\n  {{else}}\\n    <span>Loading</span>\\n  {{/if}}\\n\\n  <div class=\\\"tab\\\">\\n    {{outlet pane}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_current\\\" {{bindAttr class=\\\"view.classCurrent\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showRepo view.repo href=true}}>\\n        {{t repositories.tabs.current}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_builds\\\" {{bindAttr class=\\\"view.classBuilds\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBuilds view.repo href=true}}>\\n        {{t repositories.tabs.build_history}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_pull_requests\\\" {{bindAttr class=\\\"view.classPullRequests\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showPullRequests view.repo href=true}}>\\n        {{t repositories.tabs.pull_requests}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_branches\\\" {{bindAttr class=\\\"view.classBranches\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBranches view.repo href=true}}>\\n        {{t repositories.tabs.branches}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_build\\\" {{bindAttr class=\\\"view.classBuild\\\"}}>\\n    <h5>\\n      {{#if view.build.id}}\\n      <a {{action showBuild view.build href=true}}>\\n        {{t repositories.tabs.build}} #{{view.build.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_job\\\" {{bindAttr class=\\\"view.classJob\\\"}}>\\n    <h5>\\n      {{#if view.job.id}}\\n      <a {{action showBuild view.job href=true}}>\\n        {{t repositories.tabs.job}} #{{view.job.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"<div id=\\\"tools\\\">\\n  <a href=\\\"#\\\" {{action menu target=\\\"view\\\"}}></a>\\n  <ul class=\\\"menu\\\">\\n    <li>\\n      <a href=\\\"#\\\" name=\\\"status-images\\\" {{action statusImages target=\\\"view\\\"}}>Status Images</a>\\n    </li>\\n    {{#if view.canPush}}\\n      <li>\\n        <a href=\\\"#\\\" {{action requeue target=\\\"view\\\"}}>Rebuild</a>\\n      </li>\\n    {{/if}}\\n  </ul>\\n</div>\\n\\n<div id=\\\"status-images\\\" class=\\\"popup\\\">\\n  <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n  <p>\\n    <label>{{t repositories.branch}}:</label>\\n    {{#if view.branches.isLoaded}}\\n      {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n    {{else}}\\n      <span class=\\\"loading\\\"></span>\\n    {{/if}}\\n  </p>\\n  <p>\\n    <label>{{t repositories.image_url}}:</label>\\n    <input type=\\\"text\\\" class=\\\"url\\\" {{bindAttr value=\\\"view.urlStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.markdown}}:</label>\\n    <input type=\\\"text\\\" class=\\\"markdown\\\" {{bindAttr value=\\\"view.markdownStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.textile}}:</label>\\n    <input type=\\\"text\\\" class=\\\"textile\\\" {{bindAttr value=\\\"view.textileStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.rdoc}}:</label>\\n    <input type=\\\"text\\\" class=\\\"rdoc\\\" {{bindAttr value=\\\"view.rdocStatusImage\\\"}}></input>\\n  </p>\\n</div>\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"<h4>{{t layouts.application.sponsers}}</h4>\\n\\n<ul class=\\\"sponsors top\\\">\\n  {{#each deck in controller}}\\n    {{#each deck}}\\n      <li {{bindAttr class=\\\"type\\\"}}>\\n        <a {{bindAttr href=\\\"url\\\"}}>\\n          <img {{bindAttr src=\\\"image\\\"}}>\\n        </a>\\n      </li>\\n    {{/each}}\\n  {{/each}}\\n</ul>\\n\\n<p class=\\\"hint\\\">\\n  <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n    {{{t layouts.application.sponsors_link}}}\\n  </a>\\n</p>\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"<div class=\\\"box\\\">\\n  <h4>{{t layouts.application.sponsers}}</h4>\\n\\n  <ul class=\\\"sponsors bottom\\\">\\n    {{#each controller}}\\n      <li>\\n        {{{link}}}\\n      </li>\\n    {{/each}}\\n  </ul>\\n\\n  <p class=\\\"hint\\\">\\n    <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n      {{{t layouts.application.sponsors_link}}}\\n    </a>\\n  </p>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"<div id=\\\"repos_stats\\\"></div>\\n<div id=\\\"tests_stats\\\"></div>\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n  <h4>\\n    {{t workers}}\\n    <a id=\\\"toggle-workers\\\" {{action toggleWorkers target=\\\"parentView.parentView\\\"}}></a>\\n  </h4>\\n  <ul id=\\\"workers\\\">\\n    {{#each group in controller.groups}}\\n      {{#view Travis.WorkersListView}}\\n        <li class=\\\"group\\\">\\n          <h5 {{action toggle target=\\\"view\\\"}}>\\n            {{group.firstObject.host}}\\n          </h5>\\n          <ul>\\n          {{#each worker in group}}\\n            {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n              <li class=\\\"worker\\\">\\n                <div class=\\\"status\\\"></div>\\n                {{#if worker.isWorking}}\\n                  {{#if worker.job_id}}\\n                    <a {{action showJob worker.repo worker.job_id target=\\\"Travis.app.router\\\" href=true}} {{bindAttr title=\\\"worker.lastSeenAt\\\"}}>\\n                      {{view.display}}\\n                    </a>\\n                  {{/if}}\\n                {{else}}\\n                  {{view.display}}\\n                {{/if}}\\n              </li>\\n            {{/view}}\\n          {{/each}}\\n          </ul>\\n        </li>\\n      {{/view}}\\n    {{else}}\\n      No workers\\n    {{/each}}\\n  </ul>\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors &rarr;\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Getting Started guide</a>.\\n  <small>It will only take a couple of minutes.</small>\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores &rarr;\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Activa los interruptores para inicial el  Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\\n  Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guía de Inicio </a>.\\n  <small>Solo tomará unos pocos minutos.</small>\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors &rarr;\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">guide de démarrage</a>.\\n <small>Cela ne vous prendra que quelques minutes.</small>\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る &rarr;\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずは<a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Travisのはじめ方</a>を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\\\"https://github.com/travis-ci\\\">her</a>.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre &rarr;\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors &rarr;\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze <a href=\\\\\\\"http://about.travis-ci.org/docs/user/getting-started/\\\\\\\">startersgids</a> lezen.\\\\n  <small>Het zal maar enkele minuten van uw tijd vergen.</small>\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów &rarr;\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Przewodnik </a>.\\n  <small>Zajmie ci to tylko kilka minut.</small>\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores &rarr;\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров &rarr;\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n  context: null,\n  options: null,\n  property: null,\n  // paths of the property that are also observed\n  propertyPaths: [],\n\n  value: Ember.K,\n\n  valueForRender: function() {\n    var value = this.value(Ember.get(this.context, this.property), this.options);\n    if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n    return value;\n  },\n\n  render: function(buffer) {\n    buffer.push(this.valueForRender());\n  },\n\n  valueDidChange: function() {\n    if (this.morph.isRemoved()) { return; }\n    this.morph.html(this.valueForRender());\n  },\n\n  didInsertElement: function() {\n    this.valueDidChange();\n  },\n\n  init: function() {\n    this._super();\n    Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n  },\n\n  destroy: function() {\n    Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n    this._super();\n  }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n  var propertyPaths = Array.prototype.slice.call(arguments, 2);\n  Ember.Handlebars.registerHelper(name, function(property, options) {\n    var data = options.data,\n        view = data.view,\n        ctx  = this;\n\n    var bindView = view.createChildView(BoundHelperView, {\n      property: property,\n      propertyPaths: propertyPaths,\n      context: ctx,\n      options: options.hash,\n      value: func\n    });\n\n    view.appendChild(bindView);\n  });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace");
\ No newline at end of file
+;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n  Travis.reopen({\n    App: Em.Application.extend({\n      autoinit: false,\n      currentUserBinding: 'auth.user',\n      authStateBinding: 'auth.state',\n      init: function() {\n        this._super.apply(this, arguments);\n        this.store = Travis.Store.create();\n        this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n        this.set('auth', Travis.Auth.create({\n          app: this,\n          endpoint: Travis.config.api_endpoint\n        }));\n        this.slider = new Travis.Slider();\n        this.pusher = new Travis.Pusher(Travis.config.pusher);\n        return this.tailing = new Travis.Tailing();\n      },\n      signIn: function() {\n        return this.get('auth').signIn();\n      },\n      signOut: function() {\n        this.get('auth').signOut();\n        return this.get('router').send('showRoot');\n      },\n      receive: function() {\n        return this.store.receive.apply(this.store, arguments);\n      },\n      toggleSidebar: function() {\n        var element;\n        $('body').toggleClass('maximized');\n        element = $('<span></span>');\n        $('#top .profile').append(element);\n        Em.run.later((function() {\n          return element.remove();\n        }), 10);\n        element = $('<span></span>');\n        $('#repo').append(element);\n        return Em.run.later((function() {\n          return element.remove();\n        }), 10);\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n  this.Travis.Auth = Ember.Object.extend({\n    iframe: $('<iframe id=\"auth-frame\" />').hide(),\n    timeout: 5000,\n    state: 'signed-out',\n    receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n    init: function() {\n      var _this = this;\n      this.iframe.appendTo('body');\n      window.addEventListener('message', function(e) {\n        return _this.receiveMessage(e);\n      });\n      return this.loadUser();\n    },\n    accessToken: (function() {\n      return sessionStorage.getItem('travis.token');\n    }).property(),\n    loadUser: function() {\n      var user;\n      if (user = sessionStorage.getItem('travis.user')) {\n        return this.setData({\n          user: JSON.parse(user)\n        });\n      } else if (localStorage.getItem('travis.auto_signin')) {\n        return this.trySignIn();\n      }\n    },\n    signIn: function() {\n      this.set('state', 'signing-in');\n      this.trySignIn();\n      return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n    },\n    trySignIn: function() {\n      return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n    },\n    checkSignIn: function() {\n      if (this.get('state') === 'signing-in') {\n        return this.forceSignIn();\n      }\n    },\n    forceSignIn: function() {\n      localStorage.setItem('travis.auto_signin', 'true');\n      return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n    },\n    signOut: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.clear();\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.clear();\n      }\n      return this.setData();\n    },\n    setData: function(data) {\n      var user;\n      if (typeof data === 'string') {\n        data = JSON.parse(data);\n      }\n      if (data != null ? data.token : void 0) {\n        this.storeToken(data.token);\n      }\n      if (data != null ? data.user : void 0) {\n        user = this.storeUser(data.user);\n      }\n      this.set('state', user ? 'signed-in' : 'signed-out');\n      this.set('user', user ? user : void 0);\n      if (this.app.get('router')) {\n        return this.app.get('router').transitionTo('authenticated');\n      }\n    },\n    storeToken: function(token) {\n      sessionStorage.setItem('travis.token', token);\n      return this.notifyPropertyChange('accessToken');\n    },\n    storeUser: function(user) {\n      localStorage.setItem('travis.auto_signin', 'true');\n      sessionStorage.setItem('travis.user', JSON.stringify(user));\n      this.app.store.load(Travis.User, user);\n      user = this.app.store.find(Travis.User, user.id);\n      user.get('permissions');\n      return user;\n    },\n    receiveMessage: function(event) {\n      if (event.origin === this.expectedOrigin()) {\n        this.setData(event.data);\n        return console.log(\"signed in as \" + event.data.user.login);\n      } else {\n        return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n      }\n    },\n    expectedOrigin: function() {\n      if (this.endpoint[0] === '/') {\n        return this.receivingEnd;\n      } else {\n        return this.endpoint;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n  Travis.reopen({\n    Controller: Em.Controller.extend({\n      connectOutlet: function() {\n        var view, _connectedOutletViews;\n        view = this._super.apply(this, arguments);\n        if (view) {\n          _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n          if (!_connectedOutletViews) {\n            _connectedOutletViews = [];\n          }\n          _connectedOutletViews.pushObject(view);\n          Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n        }\n        return view;\n      }\n    }),\n    TopController: Em.Controller.extend({\n      userBinding: 'Travis.app.currentUser'\n    }),\n    ApplicationController: Em.Controller.extend(),\n    MainController: Em.Controller.extend(),\n    StatsLayoutController: Em.Controller.extend(),\n    ProfileLayoutController: Em.Controller.extend(),\n    AuthLayoutController: Em.Controller.extend()\n  });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n  Travis.AccountsController = Ember.ArrayController.extend({\n    tab: 'accounts',\n    init: function() {\n      return this._super();\n    },\n    findByLogin: function(login) {\n      return this.find(function(account) {\n        return account.get('login') === 'login';\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n  Travis.BuildsController = Em.ArrayController.extend({\n    repo: 'parent.repo',\n    contentBinding: 'parent.builds'\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n  Travis.FlashController = Ember.ArrayController.extend({\n    init: function() {\n      this._super.apply(this, arguments);\n      return this.set('content', Ember.A());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n  Travis.HomeController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n  Travis.ProfileController = Travis.Controller.extend({\n    name: 'profile',\n    userBinding: 'Travis.app.currentUser',\n    accountsBinding: 'Travis.app.router.accountsController',\n    account: (function() {\n      var login;\n      login = this.get('params.login') || Travis.app.get('currentUser.login');\n      return this.get('accounts').filter(function(account) {\n        if (account.get('login') === login) {\n          return account;\n        }\n      })[0];\n    }).property('accounts.length', 'params.login'),\n    activate: function(action, params) {\n      this.setParams(params || this.get('params'));\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewHooks: function() {\n      this.connectTab('hooks');\n      return this.set('hooks', Travis.Hook.find({\n        owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n      }));\n    },\n    viewUser: function() {\n      return this.connectTab('user');\n    },\n    connectTab: function(tab) {\n      var viewClass;\n      viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    setParams: function(params) {\n      var key, value, _results;\n      this.set('params', {});\n      _results = [];\n      for (key in params) {\n        value = params[key];\n        _results.push(this.set(\"params.\" + key, params[key]));\n      }\n      return _results;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n  Travis.RepoController = Travis.Controller.extend({\n    bindings: [],\n    init: function() {\n      this._super.apply(this, arguments);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var build, builds;\n      if (builds = this.get('builds')) {\n        builds.forEach(function(b) {\n          return b.updateTimes();\n        });\n      }\n      if (build = this.get('build')) {\n        build.updateTimes();\n        build.get('jobs').forEach(function(j) {\n          return j.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(action) {\n      this._unbind();\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewIndex: function() {\n      this._bind('repo', 'controllers.reposController.firstObject');\n      this._bind('build', 'repo.lastBuild');\n      return this.connectTab('current');\n    },\n    viewCurrent: function() {\n      this.connectTab('current');\n      return this._bind('build', 'repo.lastBuild');\n    },\n    viewBuilds: function() {\n      this.connectTab('builds');\n      return this._bind('builds', 'repo.builds');\n    },\n    viewPullRequests: function() {\n      this.connectTab('pull_requests');\n      return this._bind('builds', 'repo.pullRequests');\n    },\n    viewBranches: function() {\n      this.connectTab('branches');\n      return this._bind('builds', 'repo.branches');\n    },\n    viewBuild: function() {\n      return this.connectTab('build');\n    },\n    viewJob: function() {\n      this._bind('build', 'job.build');\n      return this.connectTab('job');\n    },\n    repoObserver: (function() {\n      var repo;\n      repo = this.get('repo');\n      if (repo) {\n        return repo.select();\n      }\n    }).observes('repo.id'),\n    connectTab: function(tab) {\n      var name, viewClass;\n      name = tab === 'current' ? 'build' : tab;\n      viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    _bind: function(to, from) {\n      return this.bindings.push(Ember.oneWay(this, to, from));\n    },\n    _unbind: function() {\n      var binding, _i, _len, _ref;\n      _ref = this.bindings;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        binding = _ref[_i];\n        binding.disconnect(this);\n      }\n      return this.bindings.length = 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\n\n  Travis.ReposController = Ember.ArrayController.extend({\n    defaultTab: 'recent',\n    sortProperties: ['sortOrder'],\n    init: function() {\n      this.activate(this.defaultTab);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var content;\n      if (content = this.get('content')) {\n        content.forEach(function(r) {\n          return r.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(tab, params) {\n      this.set('tab', tab);\n      return this[\"view\" + ($.camelize(tab))](params);\n    },\n    viewRecent: function() {\n      return this.set('content', Travis.Repo.find());\n    },\n    viewOwned: function() {\n      return this.set('content', Travis.Repo.ownedBy(Travis.app.get('currentUser.login')));\n    },\n    viewSearch: function(params) {\n      return this.set('content', Travis.Repo.search(params.search));\n    },\n    searchObserver: (function() {\n      var search, tab;\n      search = this.get('search');\n      tab = search ? 'search' : 'recent';\n      return this.activate(tab, {\n        search: search\n      });\n    }).observes('search')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n  Travis.reopen({\n    SidebarController: Em.ArrayController.extend({\n      init: function() {\n        this.tickables = [];\n        return Travis.Ticker.create({\n          target: this,\n          interval: Travis.INTERVALS.sponsors\n        });\n      },\n      tick: function() {\n        var tickable, _i, _len, _ref, _results;\n        _ref = this.tickables;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          tickable = _ref[_i];\n          _results.push(tickable.tick());\n        }\n        return _results;\n      }\n    }),\n    QueuesController: Em.ArrayController.extend(),\n    WorkersController: Em.ArrayController.extend({\n      groups: (function() {\n        var content, groups, host, worker, _i, _len, _ref;\n        if (content = this.get('content')) {\n          groups = {};\n          _ref = content.toArray();\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            worker = _ref[_i];\n            host = worker.get('host');\n            if (!groups[host]) {\n              groups[host] = Em.ArrayProxy.create({\n                content: []\n              });\n            }\n            groups[host].pushObject(worker);\n          }\n          return $.values(groups);\n        }\n      }).property('content.length')\n    }),\n    SponsorsController: Em.ArrayController.extend({\n      page: 0,\n      arrangedContent: (function() {\n        return this.get('shuffled').slice(this.start(), this.end());\n      }).property('shuffled.length', 'page'),\n      shuffled: (function() {\n        var content;\n        if (content = this.get('content')) {\n          return $.shuffle(content);\n        } else {\n          return [];\n        }\n      }).property('content.length'),\n      tick: function() {\n        return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n      },\n      pages: (function() {\n        var length;\n        length = this.get('content.length');\n        if (length) {\n          return parseInt(length / this.get('perPage') + 1);\n        } else {\n          return 1;\n        }\n      }).property('length'),\n      isLast: function() {\n        return this.get('page') === this.get('pages') - 1;\n      },\n      start: function() {\n        return this.get('page') * this.get('perPage');\n      },\n      end: function() {\n        return this.start() + this.get('perPage');\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n  Travis.StatsController = Travis.Controller.extend({\n    name: 'stats',\n    init: function() {\n      return this._super('top');\n    },\n    activate: function(action, params) {}\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n  var safe;\nminispade.require('ext/ember/bound_helper');\n\n  safe = function(string) {\n    return new Handlebars.SafeString(string);\n  };\n\n  Handlebars.registerHelper('tipsy', function(text, tip) {\n    return safe('<span class=\"tool-tip\" original-title=\"' + tip + '\">' + text + '</span>');\n  });\n\n  Handlebars.registerHelper('t', function(key) {\n    return safe(I18n.t(key));\n  });\n\n  Ember.registerBoundHelper('formatTime', function(value, options) {\n    return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n  });\n\n  Ember.registerBoundHelper('formatDuration', function(duration, options) {\n    return safe(Travis.Helpers.timeInWords(duration));\n  });\n\n  Ember.registerBoundHelper('formatCommit', function(commit, options) {\n    if (commit) {\n      return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n    }\n  });\n\n  Ember.registerBoundHelper('formatSha', function(sha, options) {\n    return safe(Travis.Helpers.formatSha(sha));\n  });\n\n  Ember.registerBoundHelper('pathFrom', function(url, options) {\n    return safe(Travis.Helpers.pathFrom(url));\n  });\n\n  Ember.registerBoundHelper('formatMessage', function(message, options) {\n    return safe(Travis.Helpers.formatMessage(message, options));\n  });\n\n  Ember.registerBoundHelper('formatConfig', function(config, options) {\n    return safe(Travis.Helpers.formatConfig(config));\n  });\n\n  Ember.registerBoundHelper('formatLog', function(log, options) {\n    return Travis.Helpers.formatLog(log) || '';\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('emoij');\n\n  this.Travis.Helpers = {\n    compact: function(object) {\n      var key, result, value, _ref;\n      result = {};\n      _ref = object || {};\n      for (key in _ref) {\n        value = _ref[key];\n        if (!$.isEmpty(value)) {\n          result[key] = value;\n        }\n      }\n      return result;\n    },\n    safe: function(string) {\n      return new Handlebars.SafeString(string);\n    },\n    colorForResult: function(result) {\n      if (result === 0) {\n        return 'green';\n      } else {\n        if (result === 1) {\n          return 'red';\n        } else {\n          return null;\n        }\n      }\n    },\n    formatCommit: function(sha, branch) {\n      return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n    },\n    formatSha: function(sha) {\n      return (sha || '').substr(0, 7);\n    },\n    formatConfig: function(config) {\n      var values;\n      config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n      values = $.map(config, function(value, key) {\n        value = (value && value.join ? value.join(', ') : value) || '';\n        return '%@: %@'.fmt($.camelize(key), value);\n      });\n      if (values.length === 0) {\n        return '-';\n      } else {\n        return values.join(', ');\n      }\n    },\n    formatMessage: function(message, options) {\n      message = message || '';\n      if (options.short) {\n        message = message.split(/\\n/)[0];\n      }\n      return this._emojize(this._escape(message)).replace(/\\n/g, '<br/>');\n    },\n    formatLog: function(log) {\n      return Travis.Log.filter(log);\n    },\n    pathFrom: function(url) {\n      return (url || '').split('/').pop();\n    },\n    timeAgoInWords: function(date) {\n      return $.timeago.distanceInWords(date);\n    },\n    durationFrom: function(started, finished) {\n      started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n      finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n      if (started && finished) {\n        return Math.round((finished - started) / 1000);\n      } else {\n        return 0;\n      }\n    },\n    timeInWords: function(duration) {\n      var days, hours, minutes, result, seconds;\n      days = Math.floor(duration / 86400);\n      hours = Math.floor(duration % 86400 / 3600);\n      minutes = Math.floor(duration % 3600 / 60);\n      seconds = duration % 60;\n      if (days > 0) {\n        return 'more than 24 hrs';\n      } else {\n        result = [];\n        if (hours === 1) {\n          result.push(hours + ' hr');\n        }\n        if (hours > 1) {\n          result.push(hours + ' hrs');\n        }\n        if (minutes > 0) {\n          result.push(minutes + ' min');\n        }\n        if (seconds > 0) {\n          result.push(seconds + ' sec');\n        }\n        if (result.length > 0) {\n          return result.join(' ');\n        } else {\n          return '-';\n        }\n      }\n    },\n    _normalizeDateString: function(string) {\n      if (window.JHW) {\n        string = string.replace('T', ' ').replace(/-/g, '/');\n        string = string.replace('Z', '').replace(/\\..*$/, '');\n      }\n      return string;\n    },\n    _nowUtc: function() {\n      return this._toUtc(new Date());\n    },\n    _toUtc: function(date) {\n      return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    },\n    _emojize: function(text) {\n      var emojis;\n      emojis = text.match(/:\\S+?:/g);\n      if (emojis !== null) {\n        $.each(emojis.uniq(), function(ix, emoji) {\n          var image, strippedEmoji;\n          strippedEmoji = emoji.substring(1, emoji.length - 1);\n          if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n            image = '<img class=\\'emoji\\' title=\\'' + emoji + '\\' alt=\\'' + emoji + '\\' src=\\'' + '/images/emoji/' + strippedEmoji + '.png\\'/>';\n            return text = text.replace(new RegExp(emoji, 'g'), image);\n          }\n        });\n      }\n      return text;\n    },\n    _escape: function(text) {\n      return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n  this.Travis.Urls = {\n    repo: function(slug) {\n      return \"/\" + slug;\n    },\n    builds: function(slug) {\n      return \"/\" + slug + \"/builds\";\n    },\n    pullRequests: function(slug) {\n      return \"/\" + slug + \"/pull_requests\";\n    },\n    branches: function(slug) {\n      return \"/\" + slug + \"/branches\";\n    },\n    build: function(slug, id) {\n      return \"/\" + slug + \"/builds/\" + id;\n    },\n    job: function(slug, id) {\n      return \"/\" + slug + \"/jobs/\" + id;\n    },\n    githubCommit: function(slug, sha) {\n      return \"http://github.com/\" + slug + \"/commit/\" + sha;\n    },\n    githubRepo: function(slug) {\n      return \"http://github.com/\" + slug;\n    },\n    githubWatchers: function(slug) {\n      return \"http://github.com/\" + slug + \"/watchers\";\n    },\n    githubNetwork: function(slug) {\n      return \"http://github.com/\" + slug + \"/network\";\n    },\n    githubAdmin: function(slug) {\n      return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n    },\n    statusImage: function(slug, branch) {\n      return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n    },\n    email: function(email) {\n      return \"mailto:\" + email;\n    },\n    account: function(login) {\n      return \"/profile/\" + login;\n    },\n    user: function(login) {\n      return \"/profile/\" + login + \"/me\";\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Account = Travis.Model.extend({\n    primaryKey: 'login',\n    login: DS.attr('string'),\n    name: DS.attr('string'),\n    type: DS.attr('string'),\n    reposCount: DS.attr('number'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('login'));\n    }).property()\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Artifact = Travis.Model.extend({\n    body: DS.attr('string'),\n    init: function() {\n      this._super.apply(this, arguments);\n      this.set('queue', Ember.A([]));\n      this.addObserver('body', this.fetchWorker);\n      return this.fetchWorker();\n    },\n    append: function(body) {\n      if (this.get('isLoaded')) {\n        return this.set('body', this.get('body') + body);\n      } else {\n        return this.get('queue').pushObject(body);\n      }\n    },\n    recordDidLoad: (function() {\n      var queue;\n      if (this.get('isLoaded')) {\n        queue = this.get('queue');\n        if (queue.get('length') > 0) {\n          return this.append(queue.toArray().join(''));\n        }\n      }\n    }).observes('isLoaded'),\n    fetchWorker: function() {\n      var body, line, match, worker;\n      if (body = this.get('body')) {\n        line = body.split(\"\\n\")[0];\n        if (line && (match = line.match(/Using worker: (.*)/))) {\n          if (worker = match[1]) {\n            worker = worker.trim().split(':')[0];\n            this.set('workerName', worker);\n            return this.removeObserver('body', this.fetchWorker);\n          }\n        }\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    commitId: DS.attr('number'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    duration: DS.attr('number'),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    commit: DS.belongsTo('Travis.Commit'),\n    repo: (function() {\n      if (this.get('repoId')) {\n        return Travis.Repo.find(this.get('repoId'));\n      }\n    }).property('repoId'),\n    updateTimes: function() {\n      this.notifyPropertyChange('started_at');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n  this.Travis.Branch.reopenClass({\n    byRepoId: function(id) {\n      return this.find({\n        repository_id: id\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, Travis.Ajax, {\n    eventType: DS.attr('string'),\n    repoId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    state: DS.attr('string'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string', {\n      key: 'started_at'\n    }),\n    finishedAt: DS.attr('string', {\n      key: 'finished_at'\n    }),\n    repo: DS.belongsTo('Travis.Repo'),\n    commit: DS.belongsTo('Travis.Commit'),\n    jobs: DS.hasMany('Travis.Job', {\n      key: 'job_ids'\n    }),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    isMatrix: (function() {\n      return this.get('data.job_ids.length') > 1;\n    }).property('data.job_ids.length'),\n    isFinished: (function() {\n      return this.get('state') === 'finished';\n    }).property('state'),\n    requiredJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return !data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    allowedFailureJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    configKeys: (function() {\n      var config, headers, key, keys;\n      if (!(config = this.get('config'))) {\n        return [];\n      }\n      keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n      headers = (function() {\n        var _i, _len, _ref, _results;\n        _ref = ['build.job', 'build.duration', 'build.finished_at'];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          key = _ref[_i];\n          _results.push(I18n.t(key));\n        }\n        return _results;\n      })();\n      return $.map(headers.concat(keys), function(key) {\n        return $.camelize(key);\n      });\n    }).property('config'),\n    requeue: (function() {\n      return this.post('/requests', {\n        build_id: this.get('id')\n      });\n    })\n  });\n\n  this.Travis.Build.reopenClass({\n    byRepoId: function(id, parameters) {\n      return this.find($.extend(parameters || {}, {\n        repository_id: id\n      }));\n    },\n    olderThanNumber: function(id, build_number) {\n      return this.find({\n        url: \"/builds\",\n        repository_id: id,\n        after_number: build_number\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Commit = Travis.Model.extend({\n    buildId: DS.attr('number'),\n    sha: DS.attr('string'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    compareUrl: DS.attr('string'),\n    authorName: DS.attr('string'),\n    authorEmail: DS.attr('string'),\n    committerName: DS.attr('string'),\n    committerEmail: DS.attr('string'),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'buildId'\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/extensions', "(function() {(function() {\n\n  Travis.DurationCalculations = Ember.Mixin.create({\n    duration: (function() {\n      var duration;\n      if (duration = this.get('_duration')) {\n        return duration;\n      } else {\n        return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n      }\n    }).property('_duration', 'finishedAt', 'startedAt'),\n    updateTimes: function() {\n      this.notifyPropertyChange('_duration');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Hook = Travis.Model.extend({\n    name: DS.attr('string'),\n    ownerName: DS.attr('string'),\n    description: DS.attr('string'),\n    active: DS.attr('boolean'),\n    account: (function() {\n      return this.get('slug').split('/')[0];\n    }).property('slug'),\n    slug: (function() {\n      return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n    }).property('ownerName', 'name'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('slug'));\n    }).property(),\n    urlGithubAdmin: (function() {\n      return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n    }).property(),\n    toggle: function() {\n      var transaction;\n      transaction = this.get('store').transaction();\n      transaction.add(this);\n      this.set('active', !this.get('active'));\n      return transaction.commit();\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    buildId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    logId: DS.attr('number'),\n    queue: DS.attr('string'),\n    state: DS.attr('string'),\n    number: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    allowFailure: DS.attr('boolean', {\n      key: 'allow_failure'\n    }),\n    repo: DS.belongsTo('Travis.Repo', {\n      key: 'repository_id'\n    }),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'build_id'\n    }),\n    commit: DS.belongsTo('Travis.Commit', {\n      key: 'commit_id'\n    }),\n    log: DS.belongsTo('Travis.Artifact', {\n      key: 'log_id'\n    }),\n    isQueued: (function() {}).property('state'),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    sponsor: (function() {\n      var worker;\n      worker = this.get('log.workerName');\n      if (worker && worker.length) {\n        return Travis.WORKERS[worker] || {\n          name: \"Travis Pro\",\n          url: \"http://travis-ci.com\"\n        };\n      }\n    }).property('log.workerName'),\n    configValues: (function() {\n      var config;\n      if (config = this.get('config')) {\n        return $.values($.only.apply(config, Travis.CONFIG_KEYS));\n      } else {\n        return [];\n      }\n    }).property('config'),\n    appendLog: function(text) {\n      var log;\n      if (log = this.get('log')) {\n        return log.append(text);\n      }\n    },\n    subscribe: function() {\n      var id;\n      if (id = this.get('id')) {\n        return Travis.app.pusher.subscribe(\"job-\" + id);\n      }\n    },\n    onStateChange: (function() {\n      if (this.get('state') === 'finished') {\n        return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n      }\n    }).observes('state')\n  });\n\n  this.Travis.Job.reopenClass({\n    queued: function(queue) {\n      this.find();\n      return Travis.app.store.filter(this, function(job) {\n        var queued;\n        queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n        return queued && job.get('queue') === (\"builds.\" + queue);\n      });\n    },\n    findMany: function(ids) {\n      return Travis.app.store.findMany(this, ids);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n  this.Travis.Repo = Travis.Model.extend({\n    slug: DS.attr('string'),\n    description: DS.attr('string'),\n    lastBuildId: DS.attr('number'),\n    lastBuildNumber: DS.attr('string'),\n    lastBuildResult: DS.attr('number'),\n    lastBuildStartedAt: DS.attr('string'),\n    lastBuildFinishedAt: DS.attr('string'),\n    lastBuild: DS.belongsTo('Travis.Build'),\n    builds: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'push'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    pullRequests: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'pull_request'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    branches: (function() {\n      return Travis.Branch.byRepoId(this.get('id'));\n    }).property(),\n    owner: (function() {\n      return (this.get('slug') || '').split('/')[0];\n    }).property('slug'),\n    name: (function() {\n      return (this.get('slug') || '').split('/')[1];\n    }).property('slug'),\n    lastBuildDuration: (function() {\n      var duration;\n      duration = this.get('data.last_build_duration');\n      if (!duration) {\n        duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n      }\n      return duration;\n    }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n    sortOrder: (function() {\n      var lastBuildFinishedAt;\n      if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n        return -new Date(lastBuildFinishedAt).getTime();\n      } else {\n        return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n      }\n    }).property('lastBuildFinishedAt', 'lastBuildId'),\n    stats: (function() {\n      var _this = this;\n      return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n        _this.set('_stats', data);\n        return _this.notifyPropertyChange('stats');\n      }) && {};\n    }).property(),\n    select: function() {\n      return Travis.Repo.select(this.get('id'));\n    },\n    updateTimes: function() {\n      return this.notifyPropertyChange('lastBuildDuration');\n    }\n  });\n\n  this.Travis.Repo.reopenClass({\n    url: 'repository',\n    recent: function() {\n      return this.find();\n    },\n    ownedBy: function(login) {\n      return this.find({\n        owner_name: login,\n        orderBy: 'name'\n      });\n    },\n    search: function(query) {\n      return this.find({\n        search: query,\n        orderBy: 'name'\n      });\n    },\n    bySlug: function(slug) {\n      var repo;\n      repo = $.select(this.find().toArray(), function(repo) {\n        return repo.get('slug') === slug;\n      });\n      if (repo.length > 0) {\n        return repo;\n      } else {\n        return this.find({\n          slug: slug\n        });\n      }\n    },\n    select: function(id) {\n      return this.find().forEach(function(repo) {\n        return repo.set('selected', repo.get('id') === id);\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Sponsor = Travis.Model.extend({\n    type: DS.attr('string'),\n    url: DS.attr('string'),\n    link: DS.attr('string'),\n    image: (function() {\n      return \"/images/sponsors/\" + (this.get('data.image'));\n    }).property('data.image')\n  });\n\n  Travis.Sponsor.reopenClass({\n    decks: function() {\n      return this.platinum().concat(this.gold());\n    },\n    platinum: function() {\n      var platinum, sponsor, _i, _len, _results;\n      platinum = this.byType('platinum').toArray();\n      _results = [];\n      for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n        sponsor = platinum[_i];\n        _results.push([sponsor]);\n      }\n      return _results;\n    },\n    gold: function() {\n      var gold, _results;\n      gold = this.byType('gold').toArray();\n      _results = [];\n      while (gold.length > 0) {\n        _results.push(gold.splice(0, 2));\n      }\n      return _results;\n    },\n    links: function() {\n      return this.byType('silver');\n    },\n    byType: function() {\n      var types;\n      types = Array.prototype.slice.apply(arguments);\n      return Travis.Sponsor.filter(function(sponsor) {\n        return types.indexOf(sponsor.get('type')) !== -1;\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n  this.Travis.User = Travis.Model.extend(Travis.Ajax, {\n    name: DS.attr('string'),\n    email: DS.attr('string'),\n    login: DS.attr('string'),\n    token: DS.attr('string'),\n    locale: DS.attr('string'),\n    gravatarId: DS.attr('string'),\n    isSyncing: DS.attr('boolean'),\n    syncedAt: DS.attr('string'),\n    repoCount: DS.attr('number'),\n    init: function() {\n      if (this.get('isSyncing')) {\n        this.poll();\n      }\n      this._super();\n      return Ember.run.next(this, function() {\n        var transaction;\n        transaction = this.get('store').transaction();\n        return transaction.add(this);\n      });\n    },\n    urlGithub: (function() {\n      return \"https://github.com/\" + (this.get('login'));\n    }).property(),\n    permissions: (function() {\n      var _this = this;\n      if (!this.permissions) {\n        this.permissions = Ember.ArrayProxy.create({\n          content: []\n        });\n        this.ajax('/users/permissions', 'get', {\n          success: function(data) {\n            return _this.permissions.set('content', data.permissions);\n          }\n        });\n      }\n      return this.permissions;\n    }).property(),\n    updateLocale: function(locale) {\n      var observer, self, transaction;\n      this.setWithSession('locale', locale);\n      transaction = this.get('transaction');\n      transaction.commit();\n      self = this;\n      observer = function() {\n        if (!self.get('isSaving')) {\n          self.removeObserver('isSaving', observer);\n          transaction = self.get('store').transaction();\n          return transaction.add(self);\n        }\n      };\n      return this.addObserver('isSaving', observer);\n    },\n    type: (function() {\n      return 'user';\n    }).property(),\n    sync: function() {\n      this.post('/users/sync');\n      this.setWithSession('isSyncing', true);\n      return this.poll();\n    },\n    poll: function() {\n      var _this = this;\n      return this.ajax('/users', 'get', {\n        success: function(data) {\n          if (data.user.is_syncing) {\n            return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n          } else {\n            _this.set('isSyncing', false);\n            return _this.setWithSession('syncedAt', data.user.synced_at);\n          }\n        }\n      });\n    },\n    setWithSession: function(name, value) {\n      var user;\n      this.set(name, value);\n      user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n      user[$.underscore(name)] = this.get(name);\n      return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Worker = Travis.Model.extend({\n    state: DS.attr('string'),\n    name: DS.attr('string'),\n    host: DS.attr('string'),\n    lastSeenAt: DS.attr('string'),\n    payload: (function() {\n      return this.get('data.payload');\n    }).property('data.payload'),\n    number: (function() {\n      return this.get('name').match(/\\d+$/)[0];\n    }).property('name'),\n    isWorking: (function() {\n      return this.get('state') === 'working';\n    }).property('state'),\n    repo: (function() {\n      return Travis.Repo.find(this.get('payload.repository.id') || this.get('payload.repo.id'));\n    }).property('payload.repository.id', 'payload.repo.id'),\n    job_id: (function() {\n      return this.get('payload.job.id');\n    }).property('payload.job.id'),\n    job: (function() {\n      return Travis.Job.find(this.get('job_id'));\n    }).property('job_id')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n  Travis.Pusher = function(config) {\n    if (config) {\n      this.init(config);\n    }\n    return this;\n  };\n\n  $.extend(Travis.Pusher, {\n    CHANNELS: ['common'],\n    CHANNEL_PREFIX: ''\n  });\n\n  $.extend(Travis.Pusher.prototype, {\n    active_channels: [],\n    init: function(config) {\n      var channel, _i, _len, _ref, _results;\n      Pusher.warn = this.warn.bind(this);\n      this.pusher = new Pusher(config.key);\n      _ref = Travis.Pusher.CHANNELS;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        channel = _ref[_i];\n        _results.push(this.subscribe(channel));\n      }\n      return _results;\n    },\n    subscribe: function(channel) {\n      var _this = this;\n      if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n        this.active_channels.push(channel);\n        return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n          return _this.receive(event, data);\n        });\n      }\n    },\n    unsubscribe: function(channel) {\n      var ix;\n      ix = this.active_channels.indexOf(channel);\n      if (this.pusher && ix === -1) {\n        this.active_channels.splice(ix, 1);\n        return this.pusher.unsubscribe(this.prefix(channel));\n      }\n    },\n    prefix: function(channel) {\n      return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n    },\n    receive: function(event, data) {\n      if (event.substr(0, 6) === 'pusher') {\n        return;\n      }\n      if (data.id) {\n        data = this.normalize(event, data);\n      }\n      return Ember.run.next(function() {\n        return Travis.app.store.receive(event, data);\n      });\n    },\n    normalize: function(event, data) {\n      switch (event) {\n        case 'build:started':\n        case 'build:finished':\n          return data;\n        case 'job:created':\n        case 'job:started':\n        case 'job:finished':\n        case 'job:log':\n          if (data.queue) {\n            data.queue = data.queue.replace('builds.', '');\n          }\n          return {\n            job: data\n          };\n        case 'worker:added':\n        case 'worker:updated':\n        case 'worker:removed':\n          return {\n            worker: data\n          };\n      }\n    },\n    warn: function(type, warning) {\n      if (!this.ignoreWarning(warning)) {\n        return console.warn(warning);\n      }\n    },\n    ignoreWarning: function(warning) {\n      var message, _ref;\n      if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n        return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n\n  Travis.Router = Ember.Router.extend({\n    location: 'history',\n    enableLogging: true,\n    initialState: 'loading',\n    showRoot: Ember.Route.transitionTo('root.home.show'),\n    showStats: Ember.Route.transitionTo('root.stats'),\n    showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n    showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n    showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n    showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n    showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n    showJob: Ember.Route.transitionTo('root.home.repo.job'),\n    showProfile: Ember.Route.transitionTo('root.profile'),\n    showAccount: Ember.Route.transitionTo('root.profile.account'),\n    showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n    signedIn: function() {\n      return !!Travis.app.get('auth.user');\n    },\n    needsAuth: function(path) {\n      return path.indexOf('/profile') === 0 && !this.signedIn();\n    },\n    loading: Ember.Route.extend({\n      routePath: function(router, path) {\n        sessionStorage.setItem('travis.path', path);\n        if (router.needsAuth(path)) {\n          router.transitionTo('root.auth');\n          return Travis.app.signIn();\n        } else {\n          return router.transitionTo('authenticated');\n        }\n      }\n    }),\n    authenticated: Ember.Route.extend({\n      connectOutlets: function(router) {\n        var path;\n        path = sessionStorage.getItem('travis.path');\n        sessionStorage.removeItem('travis.path');\n        router.transitionTo('root');\n        if (path) {\n          return router.route(path);\n        }\n      }\n    }),\n    root: Ember.Route.extend({\n      initialState: 'home',\n      loading: Ember.State.extend(),\n      auth: Ember.Route.extend({\n        route: '/auth',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('authLayout');\n          $('body').attr('id', 'auth');\n          router.get('authLayoutController').connectOutlet('top', 'top');\n          return router.get('authLayoutController').connectOutlet('main', 'signin');\n        }\n      }),\n      stats: Ember.Route.extend({\n        route: '/stats',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('statsLayout');\n          $('body').attr('id', 'stats');\n          router.get('statsLayoutController').connectOutlet('top', 'top');\n          return router.get('statsLayoutController').connectOutlet('main', 'stats');\n        }\n      }),\n      profile: Ember.Route.extend({\n        initialState: 'index',\n        route: '/profile',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('profileLayout');\n          $('body').attr('id', 'profile');\n          router.get('accountsController').set('content', Travis.Account.find());\n          router.get('profileLayoutController').connectOutlet('top', 'top');\n          return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n        },\n        index: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            router.get('profileLayoutController').connectOutlet('main', 'profile');\n            return router.get('profileController').activate('hooks');\n          }\n        }),\n        account: Ember.Route.extend({\n          initialState: 'index',\n          route: '/:login',\n          connectOutlets: function(router, account) {\n            var params;\n            if (account) {\n              params = {\n                login: account.get('login')\n              };\n              return router.get('profileController').setParams(params);\n            } else {\n              return router.send('showProfile');\n            }\n          },\n          deserialize: function(router, params) {\n            return router.get('accountsController').findByLogin(params.login);\n          },\n          serialize: function(router, account) {\n            if (account) {\n              return {\n                login: account.get('login')\n              };\n            } else {\n              return {};\n            }\n          },\n          index: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('hooks');\n            }\n          }),\n          profile: Ember.Route.extend({\n            route: '/profile',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('user');\n            }\n          })\n        })\n      }),\n      home: Ember.Route.extend({\n        initialState: 'show',\n        route: '/',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('home');\n          $('body').attr('id', 'home');\n          router.get('homeController').connectOutlet('left', 'repos');\n          router.get('homeController').connectOutlet('right', 'sidebar');\n          router.get('homeController').connectOutlet('top', 'top');\n          router.get('homeController').connectOutlet('main', 'repo');\n          return router.get('homeController').connectOutlet('flash', 'flash');\n        },\n        show: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            return router.get('repoController').activate('index');\n          }\n        }),\n        repo: Ember.Route.extend({\n          initialState: 'show',\n          route: '/:owner/:name',\n          connectOutlets: function(router, repo) {\n            return router.get('repoController').set('repo', repo);\n          },\n          deserialize: function(router, params) {\n            var deferred, observer, repos, slug;\n            slug = \"\" + params.owner + \"/\" + params.name;\n            repos = Travis.Repo.bySlug(slug);\n            deferred = $.Deferred();\n            observer = function() {\n              if (repos.get('isLoaded')) {\n                repos.removeObserver('isLoaded', observer);\n                return deferred.resolve(repos.objectAt(0));\n              }\n            };\n            repos.addObserver('isLoaded', observer);\n            return deferred.promise();\n          },\n          serialize: function(router, repo) {\n            if (repo) {\n              return {\n                owner: repo.get('owner'),\n                name: repo.get('name')\n              };\n            } else {\n              return {};\n            }\n          },\n          show: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('repoController').activate('current');\n            }\n          }),\n          builds: Ember.Route.extend({\n            route: '/builds',\n            initialState: 'index',\n            index: Ember.Route.extend({\n              route: '/',\n              connectOutlets: function(router, repo) {\n                return router.get('repoController').activate('builds');\n              }\n            }),\n            show: Ember.Route.extend({\n              route: '/:build_id',\n              connectOutlets: function(router, build) {\n                if (!build.get) {\n                  build = Travis.Build.find(build);\n                }\n                router.get('repoController').set('build', build);\n                return router.get('repoController').activate('build');\n              },\n              serialize: function(router, build) {\n                if (build.get) {\n                  return {\n                    build_id: build.get('id')\n                  };\n                } else {\n                  return {\n                    build_id: build\n                  };\n                }\n              },\n              deserialize: function(router, params) {\n                var build, deferred, observer;\n                build = Travis.Build.find(params.build_id);\n                deferred = $.Deferred();\n                observer = function() {\n                  if (build.get('id')) {\n                    build.removeObserver('id', observer);\n                    return deferred.resolve(build);\n                  }\n                };\n                build.addObserver('id', observer);\n                return deferred.promise();\n              }\n            })\n          }),\n          pullRequests: Ember.Route.extend({\n            route: '/pull_requests',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('pull_requests');\n            }\n          }),\n          branches: Ember.Route.extend({\n            route: '/branches',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('branches');\n            }\n          }),\n          job: Ember.Route.extend({\n            route: '/jobs/:job_id',\n            connectOutlets: function(router, job) {\n              if (!job.get) {\n                job = Travis.Job.find(job);\n              }\n              router.get('repoController').set('job', job);\n              return router.get('repoController').activate('job');\n            },\n            serialize: function(router, job) {\n              if (job.get) {\n                return {\n                  job_id: job.get('id')\n                };\n              } else {\n                return {\n                  job_id: job\n                };\n              }\n            },\n            deserialize: function(router, params) {\n              var deferred, job, observer;\n              job = Travis.Job.find(params.job_id);\n              deferred = $.Deferred();\n              observer = function() {\n                if (job.get('id')) {\n                  job.removeObserver('id', observer);\n                  return deferred.resolve(job);\n                }\n              };\n              job.addObserver('id', observer);\n              return deferred.promise();\n            }\n          })\n        })\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n  this.Travis.Slider = function() {\n    if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n      this.minimize();\n    }\n    return this;\n  };\n\n  $.extend(Travis.Slider.prototype, {\n    persist: function() {\n      return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n    },\n    isMinimized: function() {\n      return $('body').hasClass('maximized');\n    },\n    minimize: function() {\n      return $('body').addClass('maximized');\n    },\n    toggle: function() {\n      var element;\n      $('body').toggleClass('maximized');\n      this.persist();\n      element = $('<span></span>');\n      $('#top .profile').append(element);\n      return Em.run.later((function() {\n        return element.remove();\n      }), 10);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n  var DATA_PROXY,\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n  DATA_PROXY = {\n    get: function(name) {\n      return this.savedData[name];\n    }\n  };\n\n  Travis.Store = DS.Store.extend({\n    revision: 4,\n    adapter: Travis.RestAdapter.create(),\n    merge: function(type, id, hash) {\n      var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n      if (hash === void 0) {\n        hash = id;\n        primaryKey = type.proto().primaryKey;\n        Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n        id = hash[primaryKey];\n      }\n      typeMap = this.typeMapFor(type);\n      dataCache = typeMap.cidToHash;\n      clientId = typeMap.idToCid[id];\n      recordCache = this.get('recordCache');\n      if (clientId !== void 0) {\n        if (data = dataCache[clientId]) {\n          $.extend(data, hash);\n        } else {\n          dataCache[clientId] = hash;\n        }\n        if (record = recordCache[clientId]) {\n          record.send('didChangeData');\n        }\n      } else {\n        clientId = this.find(type, id).get('clientId');\n      }\n      if (clientId) {\n        DATA_PROXY.savedData = hash;\n        this.updateRecordArrays(type, clientId, DATA_PROXY);\n        return {\n          id: id,\n          clientId: clientId\n        };\n      }\n    },\n    receive: function(event, data) {\n      var job, mappings, name, type, _ref;\n      _ref = event.split(':'), name = _ref[0], type = _ref[1];\n      mappings = this.adapter.get('mappings');\n      type = mappings[name];\n      if (event === 'job:log') {\n        if (job = this.find(Travis.Job, data['job']['id'])) {\n          return job.appendLog(data['job']['_log']);\n        }\n      } else if (data[type.singularName()]) {\n        return this._loadOne(this, type, data);\n      } else if (data[type.pluralName()]) {\n        return this._loadMany(this, type, data);\n      } else {\n        if (!type) {\n          throw \"can't load data for \" + name;\n        }\n      }\n    },\n    _loadOne: function(store, type, json) {\n      var root;\n      root = type.singularName();\n      this.adapter.sideload(store, type, json, root);\n      this.merge(type, json[root]);\n      return this._updateAssociations(type, root, json[root]);\n    },\n    _loadMany: function(store, type, json) {\n      var root;\n      root = type.pluralName();\n      this.adapter.sideload(store, type, json, root);\n      return this.loadMany(type, json[root]);\n    },\n    _updateAssociations: function(type, name, data) {\n      var _this = this;\n      return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n        var clientId, dataProxy, id, ids, parent, _ref;\n        if (meta.kind === 'belongsTo') {\n          id = data[\"\" + key + \"_id\"];\n          if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n            if (parent = _this.findByClientId(meta.type, clientId, id)) {\n              dataProxy = parent.get('data');\n              if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n                if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n                  ids.pushObject(data.id);\n                }\n                return parent.send('didChangeData');\n              }\n            }\n          }\n        }\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n  this.Travis.FixtureAdapter = DS.Adapter.extend({\n    find: function(store, type, id) {\n      var fixtures;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      if (fixtures.hasLoaded) {\n        return;\n      }\n      return setTimeout((function() {\n        store.loadMany(type, fixtures);\n        return fixtures.hasLoaded = true;\n      }), 300);\n    },\n    findMany: function() {\n      return this.find.apply(this, arguments);\n    },\n    findAll: function(store, type) {\n      var fixtures, ids;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      ids = fixtures.map(function(item, index, self) {\n        return item.id;\n      });\n      return store.loadMany(type, ids, fixtures);\n    },\n    findQuery: function(store, type, params, array) {\n      var fixture, fixtures, hashes, key, matches, value;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      hashes = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n          fixture = fixtures[_i];\n          matches = (function() {\n            var _results1;\n            _results1 = [];\n            for (key in params) {\n              value = params[key];\n              _results1.push(key === 'orderBy' || fixture[key] === value);\n            }\n            return _results1;\n          })();\n          if (matches.reduce(function(a, b) {\n            return a && b;\n          })) {\n            _results.push(fixture);\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      })();\n      return array.load(hashes.compact());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n  this.Travis.RestAdapter = DS.RESTAdapter.extend(Travis.Ajax, {\n    mappings: {\n      repositories: Travis.Repo,\n      repository: Travis.Repo,\n      repos: Travis.Repo,\n      repo: Travis.Repo,\n      builds: Travis.Build,\n      build: Travis.Build,\n      commits: Travis.Commit,\n      commit: Travis.Commit,\n      jobs: Travis.Job,\n      job: Travis.Job,\n      account: Travis.Account,\n      accounts: Travis.Account,\n      worker: Travis.Worker,\n      workers: Travis.Worker\n    },\n    plurals: {\n      repositories: 'repositories',\n      repository: 'repositories',\n      repo: 'repositories',\n      repos: 'repositories',\n      build: 'builds',\n      branch: 'branches',\n      job: 'jobs',\n      worker: 'workers',\n      profile: 'profile'\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n  this.Travis.Tailing = function() {\n    this.position = $(window).scrollTop();\n    $(window).scroll(this.onScroll.bind(this));\n    return this;\n  };\n\n  $.extend(Travis.Tailing.prototype, {\n    options: {\n      timeout: 200\n    },\n    run: function() {\n      this.autoScroll();\n      this.positionButton();\n      if (this.active()) {\n        return Ember.run.later(this.run.bind(this), this.options.timeout);\n      }\n    },\n    toggle: function(event) {\n      if (this.active()) {\n        return this.stop();\n      } else {\n        return this.start();\n      }\n    },\n    active: function() {\n      return $('#tail').hasClass('active');\n    },\n    start: function() {\n      $('#tail').addClass('active');\n      return this.run();\n    },\n    stop: function() {\n      return $('#tail').removeClass('active');\n    },\n    autoScroll: function() {\n      var log, logBottom, win, winBottom;\n      if (!this.active()) {\n        return;\n      }\n      win = $(window);\n      log = $('#log');\n      logBottom = log.offset().top + log.outerHeight() + 40;\n      winBottom = win.scrollTop() + win.height();\n      if (logBottom - winBottom > 0) {\n        return win.scrollTop(logBottom - win.height());\n      }\n    },\n    onScroll: function() {\n      var position;\n      this.positionButton();\n      position = $(window).scrollTop();\n      if (position < this.position) {\n        this.stop();\n      }\n      return this.position = position;\n    },\n    positionButton: function() {\n      var max, offset, tail;\n      tail = $('#tail');\n      if (tail.length === 0) {\n        return;\n      }\n      offset = $(window).scrollTop() - $('#log').offset().top;\n      max = $('#log').height() - $('#tail').height() + 5;\n      if (offset > max) {\n        offset = max;\n      }\n      if (offset > 0) {\n        return tail.css({\n          top: offset - 2\n        });\n      } else {\n        return tail.css({\n          top: 0\n        });\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n  this.Travis.reopen({\n    View: Em.View.extend({\n      popup: function(event) {\n        this.popupCloseAll();\n        return $(\"#\" + event.target.name).toggleClass('display');\n      },\n      popupClose: function(event) {\n        return $(event.target).closest('.popup').removeClass('display');\n      },\n      popupCloseAll: function() {\n        return $('.popup').removeClass('display');\n      }\n    })\n  });\n\n  this.Travis.reopen({\n    HomeView: Travis.View.extend({\n      templateName: 'layouts/home'\n    }),\n    AuthLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ProfileLayoutView: Travis.View.extend({\n      templateName: 'layouts/profile'\n    }),\n    StatsLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ApplicationView: Travis.View.extend({\n      templateName: 'application'\n    })\n  });\nminispade.require('views/accounts');\nminispade.require('views/build');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n  this.Travis.reopen({\n    AccountsView: Travis.View.extend({\n      tabBinding: 'controller.tab',\n      templateName: 'profile/accounts',\n      classAccounts: (function() {\n        if (this.get('tab') === 'accounts') {\n          return 'active';\n        }\n      }).property('tab')\n    }),\n    AccountsListView: Em.CollectionView.extend({\n      elementId: 'accounts',\n      accountBinding: 'content',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        accountBinding: 'content',\n        typeBinding: 'content.type',\n        selectedBinding: 'account.selected',\n        classNames: ['account'],\n        classNameBindings: ['type', 'selected'],\n        name: (function() {\n          return this.get('content.name') || this.get('content.login');\n        }).property('content.login', 'content.name'),\n        urlAccount: (function() {\n          return Travis.Urls.account(this.get('account.login'));\n        }).property('account.login')\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/build', "(function() {(function() {\n\n  this.Travis.reopen({\n    BuildsView: Travis.View.extend({\n      templateName: 'builds/list',\n      buildsBinding: 'controller.builds',\n      showMore: function() {\n        var id, number;\n        id = this.get('controller.repo.id');\n        number = this.get('builds.lastObject.number');\n        return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n      },\n      ShowMoreButton: Em.View.extend({\n        tagName: 'button',\n        classNameBindings: ['isLoading'],\n        attributeBindings: ['disabled'],\n        isLoadingBinding: 'controller.builds.isLoading',\n        template: Em.Handlebars.compile('{{view.label}}'),\n        disabledBinding: 'isLoading',\n        label: (function() {\n          if (this.get('isLoading')) {\n            return 'Loading';\n          } else {\n            return 'Show more';\n          }\n        }).property('isLoading'),\n        click: function() {\n          return this.get('parentView').showMore();\n        }\n      })\n    }),\n    BuildsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'context',\n      commitBinding: 'build.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha')\n    }),\n    BuildView: Travis.View.extend({\n      templateName: 'builds/show',\n      elementId: 'build',\n      classNameBindings: ['color', 'loading'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      commitBinding: 'build.commit',\n      loading: (function() {\n        return !this.get('build.isLoaded');\n      }).property('build.isLoaded'),\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/flash', "(function() {(function() {\n\n  this.Travis.reopen({\n    FlashView: Travis.View.extend({\n      elementId: 'flash',\n      templateName: 'layouts/flash',\n      flashBinding: 'controller.firstObject',\n      classNameBindings: ['flash.type'],\n      messageBinding: 'flash.message',\n      close: function(event) {\n        return this.get('controller').shiftObject();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n  this.Travis.reopen({\n    JobsView: Travis.View.extend({\n      templateName: 'jobs/list',\n      buildBinding: 'controller.build'\n    }),\n    JobsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'context.repo',\n      jobBinding: 'context',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id')\n    }),\n    JobView: Travis.View.extend({\n      templateName: 'jobs/show',\n      repoBinding: 'controller.repo',\n      jobBinding: 'controller.job',\n      commitBinding: 'job.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    }),\n    LogView: Travis.View.extend({\n      templateName: 'jobs/log',\n      logBinding: 'job.log',\n      click: function(event) {\n        return $(event.target).closest('.fold').toggleClass('open');\n      },\n      toTop: function() {\n        return $(window).scrollTop(0);\n      },\n      jobBinding: 'context',\n      toggleTailing: function(event) {\n        Travis.app.tailing.toggle();\n        return event.preventDefault();\n      },\n      logSubscriber: (function() {\n        var job, state;\n        job = this.get('job');\n        state = this.get('job.state');\n        if (job && state !== 'finished') {\n          job.subscribe();\n        }\n        return null;\n      }).property('job', 'job.state')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      tabBinding: 'controller.tab',\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n  this.Travis.reopen({\n    ProfileView: Travis.View.extend({\n      templateName: 'profile/show',\n      accountBinding: 'controller.account',\n      name: (function() {\n        return this.get('account.name') || this.get('account.login');\n      }).property('account.name', 'account.login')\n    }),\n    ProfileTabsView: Travis.View.extend({\n      templateName: 'profile/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classHooks: (function() {\n        if (this.get('tab') === 'hooks') {\n          return 'active';\n        }\n      }).property('tab'),\n      classUser: (function() {\n        if (this.get('tab') === 'user') {\n          return 'active';\n        }\n      }).property('tab'),\n      accountBinding: 'controller.account',\n      displayUser: (function() {\n        return this.get('controller.account.login') === this.get('controller.user.login');\n      }).property('controller.account.login', 'controller.user.login')\n    }),\n    HooksView: Travis.View.extend({\n      templateName: 'profile/tabs/hooks',\n      userBinding: 'controller.user',\n      urlGithubAdmin: (function() {\n        return Travis.Urls.githubAdmin(this.get('hook.slug'));\n      }).property('hook.slug')\n    }),\n    UserView: Travis.View.extend({\n      templateName: 'profile/tabs/user',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n      }).property('user.gravatarId'),\n      locales: (function() {\n        return [\n          {\n            key: null,\n            name: ''\n          }, {\n            key: 'en',\n            name: 'English'\n          }, {\n            key: 'ca',\n            name: 'Catalan'\n          }, {\n            key: 'cs',\n            name: 'Čeština'\n          }, {\n            key: 'es',\n            name: 'Español'\n          }, {\n            key: 'fr',\n            name: 'Français'\n          }, {\n            key: 'ja',\n            name: '日本語'\n          }, {\n            key: 'nl',\n            name: 'Nederlands'\n          }, {\n            key: 'nb',\n            name: 'Norsk Bokmål'\n          }, {\n            key: 'pl',\n            name: 'Polski'\n          }, {\n            key: {\n              'pt-BR': {\n                name: 'Português brasileiro'\n              }\n            }\n          }, {\n            key: 'ru',\n            name: 'Русский'\n          }\n        ];\n      }).property(),\n      saveLocale: function(event) {\n        return this.get('user').updateLocale($('#locale').val());\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      toggleInfo: function(event) {\n        return $('#repos').toggleClass('open');\n      }\n    }),\n    ReposListView: Em.CollectionView.extend({\n      elementId: 'repos',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        repoBinding: 'content',\n        classNames: ['repo'],\n        classNameBindings: ['color', 'selected'],\n        selectedBinding: 'repo.selected',\n        color: (function() {\n          return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n        }).property('repo.lastBuildResult'),\n        urlRepo: (function() {\n          return Travis.Urls.repo(this.get('repo.slug'));\n        }).property('repo.slug'),\n        urlLastBuild: (function() {\n          return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n        }).property('repo.slug', 'repo.lastBuildId')\n      })\n    }),\n    ReposListTabsView: Travis.View.extend({\n      templateName: 'repos/list/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepoView: Travis.View.extend({\n      templateName: 'repos/show',\n      repoBinding: 'controller.repo',\n      \"class\": (function() {\n        if (!this.get('repo.isLoaded')) {\n          return 'loading';\n        }\n      }).property('repo.isLoaded'),\n      urlGithub: (function() {\n        return Travis.Urls.githubRepo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubWatchers: (function() {\n        return Travis.Urls.githubWatchers(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubNetwork: (function() {\n        return Travis.Urls.githubNetwork(this.get('repo.slug'));\n      }).property('repo.slug')\n    }),\n    RepoShowTabsView: Travis.View.extend({\n      templateName: 'repos/show/tabs',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      classCurrent: (function() {\n        if (this.get('tab') === 'current') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuilds: (function() {\n        if (this.get('tab') === 'builds') {\n          return 'active';\n        }\n      }).property('tab'),\n      classPullRequests: (function() {\n        if (this.get('tab') === 'pull_requests') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBranches: (function() {\n        if (this.get('tab') === 'branches') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuild: (function() {\n        var classes, tab;\n        tab = this.get('tab');\n        classes = [];\n        if (tab === 'build') {\n          classes.push('active');\n        }\n        if (tab === 'build' || tab === 'job') {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab'),\n      classJob: (function() {\n        if (this.get('tab') === 'job') {\n          return 'active display-inline';\n        }\n      }).property('tab')\n    }),\n    RepoShowToolsView: Travis.View.extend({\n      templateName: 'repos/show/tools',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      closeMenu: function() {\n        return $('.menu').removeClass('display');\n      },\n      menu: function() {\n        var element;\n        this.popupCloseAll();\n        return element = $('#tools .menu').toggleClass('display');\n      },\n      requeue: function() {\n        this.closeMenu();\n        return this.get('build').requeue();\n      },\n      statusImages: function(event) {\n        this.set('active', true);\n        this.closeMenu();\n        return this.popup(event);\n      },\n      canPush: (function() {\n        return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n      }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n      isBuildTab: (function() {\n        return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n      }).property('tab'),\n      hasPushPermissions: (function() {\n        return Travis.app.get('currentUser.permissions').indexOf(this.get('repo.id')) > -1;\n      }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n      branches: (function() {\n        if (this.get('active')) {\n          return this.get('repo.branches');\n        }\n      }).property('active', 'repo.branches'),\n      urlRepo: (function() {\n        return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlStatusImage: (function() {\n        return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n      }).property('repo.slug', 'branch'),\n      markdownStatusImage: (function() {\n        return \"[![Build Status](\" + (this.get('urlStatusImage')) + \")](\" + (this.get('urlRepo')) + \")\";\n      }).property('urlStatusImage'),\n      textileStatusImage: (function() {\n        return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n      }).property('urlStatusImage'),\n      rdocStatusImage: (function() {\n        return \"{<img src=\\\"\" + (this.get('urlStatusImage')) + \"\\\" alt=\\\"Build Status\\\" />}[\" + (this.get('urlRepo')) + \"]\";\n      }).property('urlStatusImage')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n  this.Travis.reopen({\n    SidebarView: Travis.View.extend({\n      templateName: 'layouts/sidebar',\n      DecksView: Em.View.extend({\n        templateName: \"sponsors/decks\",\n        controller: Travis.SponsorsController.create({\n          perPage: 1\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n            controller.set('content', Travis.Sponsor.decks());\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      LinksView: Em.View.extend({\n        templateName: \"sponsors/links\",\n        controller: Travis.SponsorsController.create({\n          perPage: 6\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            controller.set('content', Travis.Sponsor.links());\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      WorkersView: Em.View.extend({\n        templateName: 'workers/list',\n        controller: Travis.WorkersController.create(),\n        didInsertElement: function() {\n          this.set('controller.content', Travis.Worker.find());\n          return this._super.apply(this, arguments);\n        }\n      }),\n      QueuesView: Em.View.extend({\n        templateName: 'queues/list',\n        controller: Travis.QueuesController.create(),\n        didInsertElement: function() {\n          var queue, queues;\n          queues = (function() {\n            var _i, _len, _ref, _results;\n            _ref = Travis.QUEUES;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              queue = _ref[_i];\n              _results.push(Em.ArrayController.create({\n                content: Travis.Job.queued(queue.name),\n                id: \"queue_\" + queue.name,\n                name: queue.display\n              }));\n            }\n            return _results;\n          })();\n          this.set('controller.content', queues);\n          return this._super.apply(this, arguments);\n        }\n      })\n    }),\n    WorkersView: Travis.View.extend({\n      toggleWorkers: function(event) {\n        var handle;\n        handle = $(event.target).toggleClass('open');\n        if (handle.hasClass('open')) {\n          return $('#workers li').addClass('open');\n        } else {\n          return $('#workers li').removeClass('open');\n        }\n      }\n    }),\n    WorkersListView: Travis.View.extend({\n      toggle: function(event) {\n        return $(event.target).closest('li').toggleClass('open');\n      }\n    }),\n    WorkersItemView: Travis.View.extend({\n      display: (function() {\n        var name, number, payload, repo, state;\n        name = (this.get('worker.name') || '').replace('travis-', '');\n        state = this.get('worker.state');\n        payload = this.get('worker.payload');\n        if (state === 'working' && (payload != null ? payload.repo : void 0) && (payload != null ? payload.build : void 0)) {\n          repo = payload.repo.slug;\n          number = ' #' + payload.build.number;\n          return (\"<span class='name'>\" + name + \": \" + repo + \"</span> \" + number).htmlSafe();\n        } else {\n          return \"\" + name + \": \" + state;\n        }\n      }).property('worker.state')\n    }),\n    QueueItemView: Travis.View.extend({\n      tagName: 'li',\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('job.repo.slug'), this.get('job.id'));\n      }).property('job.repo.slug', 'job.id')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n  this.Travis.reopen({\n    SigninView: Travis.View.extend({\n      templateName: 'auth/signin',\n      signingIn: (function() {\n        return Travis.app.get('authState');\n      }).property('Travis.app.authState')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n  this.Travis.reopen({\n    StatsView: Travis.View.extend({\n      templateName: 'stats/show',\n      didInsertElement: function() {},\n      renderChart: function(config) {\n        var chart;\n        chart = new Highcharts.Chart(config);\n        return this.fetch(config.source, function(data) {\n          var stats;\n          stats = (function() {\n            var _i, _len, _ref, _results;\n            _ref = data.stats;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              stats = _ref[_i];\n              _results.push(config.map(stats));\n            }\n            return _results;\n          })();\n          return chart.series[0].setData(stats);\n        });\n      },\n      fetch: function(url, callback) {\n        return $.ajax({\n          type: 'GET',\n          url: url,\n          accepts: {\n            json: 'application/vnd.travis-ci.2+json'\n          },\n          success: callback\n        });\n      },\n      CHARTS: {\n        repos: {\n          source: '/api/stats/repos',\n          total: 0,\n          map: function(data) {\n            return [Date.parse(data.date), this.total += parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"repos_stats\"\n          },\n          title: {\n            text: \"Total Projects/Repositories\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n            }\n          },\n          series: [\n            {\n              name: \"Repository Growth\",\n              data: []\n            }\n          ]\n        },\n        builds: {\n          source: '/api/stats/tests',\n          map: function(data) {\n            return [Date.parse(data.date), parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"tests_stats\",\n            type: \"column\"\n          },\n          title: {\n            text: \"Build Count\"\n          },\n          subtitle: {\n            text: \"last month\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n            }\n          },\n          series: [\n            {\n              name: \"Total Builds\",\n              data: []\n            }\n          ]\n        }\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n  this.Travis.reopen({\n    TopView: Travis.View.extend({\n      templateName: 'layouts/top',\n      tabBinding: 'controller.tab',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n      }).property('user.gravatarId'),\n      classHome: (function() {\n        if (this.get('tab') === 'home') {\n          return 'active';\n        }\n      }).property('tab'),\n      classStats: (function() {\n        if (this.get('tab') === 'stats') {\n          return 'active';\n        }\n      }).property('tab'),\n      classProfile: (function() {\n        var classes;\n        classes = ['profile'];\n        if (this.get('tab') === 'profile') {\n          classes.push('active');\n        }\n        classes.push(Travis.app.get('authState'));\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.authState'),\n      showProfile: function() {\n        return $('#top .profile ul').show();\n      },\n      hideProfile: function() {\n        return $('#top .profile ul').hide();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('data/sponsors', "(function() {(function() {\n\n  this.Travis.SPONSORS = [\n    {\n      type: 'platinum',\n      url: \"http://www.wooga.com\",\n      image: \"wooga-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://bendyworks.com\",\n      image: \"bendyworks-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://cloudcontrol.com\",\n      image: \"cloudcontrol-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://xing.de\",\n      image: \"xing-205x130.png\"\n    }, {\n      type: 'gold',\n      url: \"http://heroku.com\",\n      image: \"heroku-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://soundcloud.com\",\n      image: \"soundcloud-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://nedap.com\",\n      image: \"nedap-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://mongohq.com\",\n      image: \"mongohq-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://zweitag.de\",\n      image: \"zweitag-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://kanbanery.com\",\n      image: \"kanbanery-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://ticketevolution.com\",\n      image: \"ticketevolution-205x60.jpg\"\n    }, {\n      type: 'gold',\n      url: \"http://plan.io/travis\",\n      image: \"planio-205x60.png\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cobot.me\\\">Cobot</a><span>: The one tool to run your coworking space</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://jumpstartlab.com\\\">JumpstartLab</a><span>: We build developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://evilmartians.com\\\">Evil Martians</a><span>: Agile Ruby on Rails development</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://zendesk.com\\\">Zendesk</a><span>: Love your helpdesk</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://stripe.com\\\">Stripe</a><span>: Payments for developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://basho.com\\\">Basho</a><span>: We make Riak!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://thinkrelevance.com\\\">Relevance</a><span>: We deliver software solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://mindmatters.de\\\">Mindmatters</a><span>: Software für Menschen</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://amenhq.com\\\">Amen</a><span>: The best and worst of everything</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://site5.com\\\">Site5</a><span>: Premium Web Hosting Solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.crowdint.com\\\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.atomicobject.com/detroit\\\">Atomic Object</a><span>: Work with really smart people</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://codeminer.com.br\\\">Codeminer</a><span>: smart services for your startup</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cloudant.com\\\">Cloudant</a><span>: grow into your data layer, not out of it</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://gidsy.com\\\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://5apps.com\\\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://meltmedia.com\\\">Meltmedia</a><span>: We are Interactive Superheroes</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.fngtps.com\\\">Fingertips</a><span> offers design and development services</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.engineyard.com\\\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://malwarebytes.org\\\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://readmill.com\\\">Readmill</a><span>: The best reading app on the iPad.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.mdsol.com\\\">Medidata</a><span>: clinical tech improving quality of life</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://coderwall.com/teams/4f27194e973bf000040005f0\\\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://twitter.com\\\">Twitter</a><span>: instantly connects people everywhere</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://agileanimal.com\\\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://tupalo.com\\\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>\"\n    }\n  ];\n\n  this.Travis.WORKERS = {\n    \"jvm-otp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://travis-ci.com\"\n    },\n    \"jvm-otp2.worker.travis-ci.org\": {\n      name: \"Transloadit\",\n      url: \"http://transloadit.com\"\n    },\n    \"ppp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://beta.travis-ci.com\"\n    },\n    \"ppp2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ppp3.worker.travis-ci.org\": {\n      name: \"Alchemy CMS\",\n      url: \"http://alchemy-cms.com/\"\n    },\n    \"rails1.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby1.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"ruby2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby3.worker.travis-ci.org\": {\n      name: \"Railslove\",\n      url: \"http://railslove.de\"\n    },\n    \"ruby4.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"spree.worker.travis-ci.org\": {\n      name: \"Spree\",\n      url: \"http://spreecommerce.com\"\n    },\n    \"staging.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('emoij', "(function() {(function() {\n\n  this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n  $.fn.extend({\n    outerHtml: function() {\n      return $(this).wrap('<div></div>').parent().html();\n    },\n    outerElement: function() {\n      return $($(this).outerHtml()).empty();\n    },\n    flash: function() {\n      return Utils.flash(this);\n    },\n    unflash: function() {\n      return Utils.unflash(this);\n    },\n    filterLog: function() {\n      this.deansi();\n      return this.foldLog();\n    },\n    deansi: function() {\n      return this.html(Utils.deansi(this.html()));\n    },\n    foldLog: function() {\n      return this.html(Utils.foldLog(this.html()));\n    },\n    unfoldLog: function() {\n      return this.html(Utils.unfoldLog(this.html()));\n    },\n    updateTimes: function() {\n      return Utils.updateTimes(this);\n    },\n    activateTab: function(tab) {\n      return Utils.activateTab(this, tab);\n    },\n    timeInWords: function() {\n      return $(this).each(function() {\n        return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n      });\n    },\n    updateGithubStats: function(repo) {\n      return Utils.updateGithubStats(repo, $(this));\n    }\n  });\n\n  $.extend({\n    isEmpty: function(obj) {\n      if ($.isArray(obj)) {\n        return !obj.length;\n      } else if ($.isObject(obj)) {\n        return !$.keys(obj).length;\n      } else {\n        return !obj;\n      }\n    },\n    isObject: function(obj) {\n      return Object.prototype.toString.call(obj) === '[object Object]';\n    },\n    keys: function(obj) {\n      var keys;\n      keys = [];\n      $.each(obj, function(key) {\n        return keys.push(key);\n      });\n      return keys;\n    },\n    values: function(obj) {\n      var values;\n      values = [];\n      $.each(obj, function(key, value) {\n        return values.push(value);\n      });\n      return values;\n    },\n    underscore: function(string) {\n      return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n        if (chr) {\n          return \"_\" + (chr.toUpperCase());\n        } else {\n          return '';\n        }\n      });\n    },\n    camelize: function(string, uppercase) {\n      string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n      return string.replace(/_(.)?/g, function(match, chr) {\n        if (chr) {\n          return chr.toUpperCase();\n        } else {\n          return '';\n        }\n      });\n    },\n    capitalize: function(string) {\n      return string[0].toUpperCase() + string.substring(1);\n    },\n    compact: function(object) {\n      return $.grep(object, function(value) {\n        return !!value;\n      });\n    },\n    all: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return false;\n        }\n        i++;\n      }\n      return true;\n    },\n    detect: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return array[i];\n        }\n        i++;\n      }\n    },\n    select: function(array, callback) {\n      var args, i, result;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      result = [];\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          result.push(array[i]);\n        }\n        i++;\n      }\n      return result;\n    },\n    slice: function(object, key) {\n      var keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) > -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    only: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) !== -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    except: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) === -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    intersect: function(array, other) {\n      return array.filter(function(element) {\n        return other.indexOf(element) !== -1;\n      });\n    },\n    map: function(elems, callback, arg) {\n      var i, isArray, key, length, ret, value;\n      value = void 0;\n      key = void 0;\n      ret = [];\n      i = 0;\n      length = elems.length;\n      isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n      if (isArray) {\n        while (i < length) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n          i++;\n        }\n      } else {\n        for (key in elems) {\n          value = callback(elems[key], key, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n        }\n      }\n      return ret.concat.apply([], ret);\n    },\n    shuffle: function(array) {\n      var current, tmp, top;\n      array = array.slice();\n      top = array.length;\n      while (top && --top) {\n        current = Math.floor(Math.random() * (top + 1));\n        tmp = array[current];\n        array[current] = array[top];\n        array[top] = tmp;\n      }\n      return array;\n    },\n    truncate: function(string, length) {\n      if (string.length > length) {\n        return string.trim().substring(0, length) + '...';\n      } else {\n        return string;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n  jQuery.support.cors = true;\n\n  this.Travis.Ajax = Ember.Mixin.create({\n    DEFAULT_OPTIONS: {\n      accepts: {\n        json: 'application/vnd.travis-ci.2+json'\n      }\n    },\n    post: function(url, data, callback) {\n      return this.ajax(url, 'post', {\n        data: data,\n        success: callback\n      });\n    },\n    ajax: function(url, method, options) {\n      var endpoint, token, _base;\n      endpoint = Travis.config.api_endpoint || '';\n      options = options || {};\n      if (token = sessionStorage.getItem('travis.token')) {\n        options.headers || (options.headers = {});\n        (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n      }\n      options.url = \"\" + endpoint + url;\n      options.type = method;\n      options.dataType = 'json';\n      options.contentType = 'application/json; charset=utf-8';\n      options.context = this;\n      if (options.data && method !== 'GET' && method !== 'get') {\n        options.data = JSON.stringify(options.data);\n      }\n      return $.ajax($.extend(options, this.DEFAULT_OPTIONS));\n    }\n  });\n\n  this.Travis.ajax = Em.Object.create(this.Travis.Ajax, {\n    get: function(url, callback) {\n      return this.ajax(url, 'get', {\n        success: callback\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n  Travis.ExpandableRecordArray = DS.RecordArray.extend({\n    isLoaded: false,\n    isLoading: false,\n    load: function(array) {\n      var observer, self;\n      this.set('isLoading', true);\n      self = this;\n      observer = function() {\n        var content;\n        if (this.get('isLoaded')) {\n          content = self.get('content');\n          array.removeObserver('isLoaded', observer);\n          array.forEach(function(record) {\n            return self.pushObject(record);\n          });\n          self.set('isLoading', false);\n          return self.set('isLoaded', true);\n        }\n      };\n      return array.addObserver('isLoaded', observer);\n    },\n    pushObject: function(record) {\n      var clientId, id, ids;\n      ids = this.get('content');\n      id = record.get('id');\n      clientId = record.get('clientId');\n      if (ids.contains(clientId)) {\n        return;\n      }\n      return ids.pushObject(clientId);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/log', "(function() {(function() {\n\n  this.Travis.Log = {\n    FOLDS: {\n      schema: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?<p.*?\\/a>-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n<p.*?\\/a>.*<\\/p>)/g,\n      migrate: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n      bundle: /(<p.*?\\/a>\\$ bundle install.*<\\/p>\\n(<p.*?\\/a>(Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<p.*?\\/a><\\/p>\\n)*)/g,\n      exec: /(<p.*?\\/a>[\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n    },\n    filter: function(log) {\n      log = this.escape(log);\n      log = this.deansi(log);\n      log = log.replace(/\\r/g, '');\n      log = this.number(log);\n      log = this.fold(log);\n      log = log.replace(/\\n/g, '');\n      return log;\n    },\n    stripPaths: function(log) {\n      return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n    },\n    escape: function(log) {\n      return Handlebars.Utils.escapeExpression(log);\n    },\n    escapeRuby: function(log) {\n      return log.replace(/#<(\\w+.*?)>/, '#&lt;$1&gt;');\n    },\n    number: function(log) {\n      var result;\n      result = '';\n      $.each(log.trim().split('\\n'), function(ix, line) {\n        var number, path;\n        number = ix + 1;\n        path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n        return result += '<p><a href=\\'#%@\\' id=\\'%@\\' name=\\'L%@\\'>%@</a>%@</p>\\n'.fmt(path, path, number, number, line);\n      });\n      return result.trim();\n    },\n    deansi: function(log) {\n      var ansi, text;\n      log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n      ansi = ansiparse(log);\n      text = '';\n      ansi.forEach(function(part) {\n        var classes;\n        classes = [];\n        part.foreground && classes.push(part.foreground);\n        part.background && classes.push('bg-' + part.background);\n        part.bold && classes.push('bold');\n        part.italic && classes.push('italic');\n        return text += (classes.length ? '<span class=\\'' + classes.join(' ') + '\\'>' + part.text + '</span>' : part.text);\n      });\n      return text.replace(/\\033/g, '');\n    },\n    fold: function(log) {\n      log = this.unfold(log);\n      $.each(Travis.Log.FOLDS, function(name, pattern) {\n        return log = log.replace(pattern, function() {\n          return '<div class=\\'fold ' + name + '\\'>' + arguments[1].trim() + '</div>';\n        });\n      });\n      return log;\n    },\n    unfold: function(log) {\n      return log.replace(/<div class='fold[^']*'>([\\s\\S]*?)<\\/div>/g, '$1\\n');\n    },\n    location: function() {\n      return window.location.hash;\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n  this.Travis.Model = DS.Model.extend({\n    primaryKey: 'id',\n    id: DS.attr('number'),\n    refresh: function() {\n      var id;\n      id = this.get('id');\n      if (id) {\n        return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n      }\n    },\n    update: function(attrs) {\n      var _this = this;\n      $.each(attrs, function(key, value) {\n        if (key !== 'id') {\n          return _this.set(key, value);\n        }\n      });\n      return this;\n    }\n  });\n\n  this.Travis.Model.reopenClass({\n    find: function() {\n      if (arguments.length === 0) {\n        return Travis.app.store.findAll(this);\n      } else {\n        return this._super.apply(this, arguments);\n      }\n    },\n    filter: function(callback) {\n      return Travis.app.store.filter(this, callback);\n    },\n    load: function(attrs) {\n      return Travis.app.store.load(this, attrs);\n    },\n    buildURL: function(suffix) {\n      var base, url;\n      base = this.url || this.pluralName();\n      Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n      Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n      url = [base];\n      if (suffix !== void 0) {\n        url.push(suffix);\n      }\n      return url.join('/');\n    },\n    singularName: function() {\n      var name, parts;\n      parts = this.toString().split('.');\n      name = parts[parts.length - 1];\n      return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n    },\n    pluralName: function() {\n      return Travis.app.store.adapter.pluralize(this.singularName());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n  this.Travis.Ticker = Ember.Object.extend({\n    init: function() {\n      if (this.get('interval') !== -1) {\n        return this.schedule();\n      }\n    },\n    tick: function() {\n      var context, target, targets, _i, _len;\n      context = this.get('context');\n      targets = this.get('targets') || [this.get('target')];\n      for (_i = 0, _len = targets.length; _i < _len; _i++) {\n        target = targets[_i];\n        if (context) {\n          target = context.get(target);\n        }\n        if (target) {\n          target.tick();\n        }\n      }\n      return this.schedule();\n    },\n    schedule: function() {\n      var _this = this;\n      return Ember.run.later((function() {\n        return _this.tick();\n      }), this.get('interval') || Travis.app.TICK_INTERVAL);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n  this.Travis = Em.Namespace.create({\n    config: {\n      api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href')\n    },\n    CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n    ROUTES: {\n      'profile/:login/me': ['profile', 'user'],\n      'profile/:login': ['profile', 'hooks'],\n      'profile': ['profile', 'hooks'],\n      'stats': ['stats', 'show'],\n      ':owner/:name/jobs/:id/:line': ['home', 'job'],\n      ':owner/:name/jobs/:id': ['home', 'job'],\n      ':owner/:name/builds/:id': ['home', 'build'],\n      ':owner/:name/builds': ['home', 'builds'],\n      ':owner/:name/pull_requests': ['home', 'pullRequests'],\n      ':owner/:name/branches': ['home', 'branches'],\n      ':owner/:name': ['home', 'current'],\n      '': ['home', 'index'],\n      '#': ['home', 'index']\n    },\n    QUEUES: [\n      {\n        name: 'common',\n        display: 'Common'\n      }, {\n        name: 'php',\n        display: 'PHP, Perl and Python'\n      }, {\n        name: 'node_js',\n        display: 'Node.js'\n      }, {\n        name: 'jvmotp',\n        display: 'JVM and Erlang'\n      }, {\n        name: 'rails',\n        display: 'Rails'\n      }, {\n        name: 'spree',\n        display: 'Spree'\n      }\n    ],\n    INTERVALS: {\n      sponsors: -1,\n      times: -1,\n      updateTimes: 1000\n    },\n    run: function(attrs) {\n      var _this = this;\n      if (location.hash.slice(0, 2) === '#!') {\n        location.href = location.href.replace('#!/', '');\n      }\n      return this.loadConfig(function(config) {\n        var app;\n        app = Travis.App.create(attrs || {});\n        $.each(Travis, function(key, value) {\n          if (value && value.isClass && key !== 'constructor') {\n            return app[key] = value;\n          }\n        });\n        _this.app = app;\n        _this.store = app.store;\n        return $(function() {\n          return app.initialize();\n        });\n      });\n    },\n    loadConfig: function(callback) {\n      var _this = this;\n      return this.ajax.get('/config', function(data) {\n        $.extend(_this.config, data.config);\n        console.log(\"Connecting to \" + data.config.api_endpoint);\n        return callback(data.config);\n      });\n    }\n  });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\n  <h1>Signing in</h1>\\n  <p>\\n    Trying to authenticate with GitHub.\\n  </p>\\n{{else}}\\n  <h1>Sign in</h1>\\n  <p>\\n    <a href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>Sign in with GitHub</a>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n  <table id=\\\"builds\\\" class=\\\"list\\\">\\n    <thead>\\n      <tr>\\n        <th>{{t builds.name}}</th>\\n        <th>{{t builds.commit}}</th>\\n        <th>{{t builds.message}}</th>\\n        <th>{{t builds.duration}}</th>\\n        <th>{{t builds.finished_at}}</th>\\n      </tr>\\n    </thead>\\n\\n    <tbody>\\n      {{#each build in builds}}\\n        {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if id}}\\n              <a {{action showBuild this href=true}}>\\n                {{number}}\\n              </a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"commit\\\">\\n            <a {{bindAttr href=\\\"view.urlGithubCommit\\\"}}>\\n              {{formatCommit commit}}\\n            </a>\\n          </td>\\n          <td class=\\\"message\\\">\\n            {{{formatMessage commit.message short=\\\"true\\\"}}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"duration\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n  <p>\\n    {{view view.ShowMoreButton}}\\n  </p>\\n{{else}}\\n  <div class=\\\"loading\\\"><span>Loading</span></div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if loading}}\\n    <span>Loading</span>\\n  {{else}}\\n    <dl id=\\\"summary\\\">\\n      <div class=\\\"left\\\">\\n        <dt>{{t builds.name}}</dt>\\n        <dd class=\\\"number\\\">\\n          <span class=\\\"status\\\"></span>\\n          {{#if build.id}}\\n            <a {{action showBuild build href=true}}>{{build.number}}</a>\\n          {{/if}}\\n        </dd>\\n        <dt class=\\\"finished_at_label\\\">{{t builds.finished_at}}</dt>\\n        <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime build.finishedAt}}</dd>\\n        <dt>{{t builds.duration}}</dt>\\n        <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration build.duration}}</dd>\\n      </div>\\n\\n      <div class=\\\"right\\\">\\n        <dt>{{t builds.commit}}</dt>\\n        <dd class=\\\"commit\\\"><a href=\\\"{{unbound urlGithubCommit}}\\\">{{formatCommit build.commit}}</a></dd>\\n        {{#if commit.compareUrl}}\\n          <dt>{{t builds.compare}}</dt>\\n          <dd class=\\\"compare\\\"><a href=\\\"{{unbound commit.compareUrl}}\\\">{{pathFrom build.commit.compareUrl}}</a></dd>\\n        {{/if}}\\n        {{#if commit.authorName}}\\n          <dt>{{t builds.author}}</dt>\\n          <dd class=\\\"author\\\"><a href=\\\"{{unbound urlAuthor}}\\\">{{build.commit.authorName}}</a></dd>\\n        {{/if}}\\n        {{#if commit.committerName}}\\n          <dt>{{t builds.committer}}</dt>\\n          <dd class=\\\"committer\\\"><a href=\\\"{{unbound urlCommitter}}\\\">{{build.commit.committerName}}</a></dd>\\n        {{/if}}\\n      </div>\\n\\n      <dt>{{t builds.message}}</dt>\\n      <dd class=\\\"message\\\">{{{formatMessage build.commit.message}}}</dd>\\n\\n      {{#unless isMatrix}}\\n        <dt>{{t builds.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig build.config}}</dd>\\n      {{/unless}}\\n    </dl>\\n\\n    {{#if build.isMatrix}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n    {{else}}\\n      {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n    {{/if}}\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n  {{#if view.required}}\\n    <table id=\\\"jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.build_matrix}}\\n      </caption>\\n  {{else}}\\n    <table id=\\\"allowed_failure_jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.allowed_failures}}\\n        <a title=\\\"What's this?\\\" class=\\\"help\\\" name=\\\"help-allowed_failures\\\" {{action popup target=\\\"view\\\"}}></a>\\n      </caption>\\n  {{/if}}\\n    <thead>\\n      <tr>\\n        {{#each key in view.build.configKeys}}\\n          <th>{{key}}</th>\\n        {{/each}}\\n      </tr>\\n    </thead>\\n    <tbody>\\n      {{#each job in view.jobs}}\\n        {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{number}}</a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n          {{#each value in configValues}}\\n            <td>{{value}}</td>\\n          {{/each}}\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n\\n  {{#unless view.required}}\\n    <div id=\\\"help-allowed_failures\\\" class=\\\"popup\\\">\\n      <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n      <h4>{{t \\\"jobs.allowed_failures\\\"}}</h4>\\n      <p>\\n        Allowed Failures are items in your build matrix that are allowed to\\n        fail without causing the entire build to be shown as failed.\\n      </p>\\n      <p>\\n        You can define allowed failures in the build matrix as follows:\\n      </p>\\n      <pre>matrix:\\n  allow_failures:\\n    - rvm: ruby-head</pre>\\n      <p>\\n        This lets you add in experimental and preparatory builds to test against versions or\\n        configurations that you are not ready to officially support.\\n      </p>\\n    </div>\\n  {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n  <pre id=\\\"log\\\" class=\\\"ansi\\\"><a href=\\\"#\\\" id=\\\"tail\\\" {{action toggleTailing target=\\\"view\\\"}}>\\n    <span class=\\\"status\\\"></span>\\n    <label>Follow logs</label>\\n  </a>{{{formatLog log.body}}}</pre>\\n\\n  {{#if sponsor.name}}\\n    <p class=\\\"sponsor\\\">\\n    {{t builds.messages.sponsored_by}}\\n      <a {{bindAttr href=\\\"sponsor.url\\\"}}>{{sponsor.name}}</a>\\n    </p>\\n  {{/if}}\\n\\n  <a href='#' class=\\\"to-top\\\" {{action toTop target=\\\"view\\\"}}>To top</a>\\n{{else}}\\n  <div id=\\\"log\\\" class=\\\"loading\\\">\\n    <span>Loading</span>\\n  </div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if job.isLoaded}}\\n    <div {{bindAttr class=\\\"view.color\\\"}}>\\n      <dl id=\\\"summary\\\">\\n        <div class=\\\"left\\\">\\n          <dt>Job</dt>\\n          <dd class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{job.number}}</a>\\n            {{/if}}\\n          </dd>\\n          <dt class=\\\"finished_at_label\\\">{{t jobs.finished_at}}</dt>\\n          <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime job.finishedAt}}</dd>\\n          <dt>{{t jobs.duration}}</dt>\\n          <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration job.duration}}</dd>\\n        </div>\\n\\n        <div class=\\\"right\\\">\\n          <dt>{{t jobs.commit}}</dt>\\n          <dd class=\\\"commit\\\"><a {{bindAttr href=\\\"urlGithubCommit\\\"}}>{{formatCommit commit}}</a></dd>\\n          {{#if commit.compareUrl}}\\n            <dt>{{t jobs.compare}}</dt>\\n            <dd class=\\\"compare\\\"><a {{bindAttr href=\\\"commit.compareUrl\\\"}}>{{pathFrom commit.compareUrl}}</a></dd>\\n          {{/if}}\\n          {{#if commit.authorName}}\\n            <dt>{{t jobs.author}}</dt>\\n            <dd class=\\\"author\\\"><a {{bindAttr href=\\\"urlAuthor\\\"}}>{{commit.authorName}}</a></dd>\\n          {{/if}}\\n          {{#if commit.committerName}}\\n            <dt>{{t jobs.committer}}</dt>\\n            <dd class=\\\"committer\\\"><a {{bindAttr href=\\\"urlCommitter\\\"}}>{{commit.committerName}}</a></dd>\\n          {{/if}}\\n        </div>\\n\\n        <dt>{{t jobs.message}}</dt>\\n        <dd class=\\\"message\\\">{{formatMessage commit.message}}</dd>\\n        <dt>{{t jobs.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig job.config}}</dd>\\n      </dl>\\n\\n      {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n    </div>\\n  {{else}}\\n    <div id=\\\"job\\\" class=\\\"loading\\\">\\n      <span>Loading</span>\\n    </div>\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"<p>{{view.message}}</p>\\n<a class=\\\"close\\\" {{action close target=\\\"view\\\"}}></a>\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    {{outlet right}}\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    <a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n      {{t layouts.application.fork_me}}\\n    </a>\\n\\n    <div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n      <div class='icon'></div>&nbsp;\\n    </div>\\n\\n    <div class=\\\"box\\\">\\n      <h4>Getting started?</h4>\\n      <p>\\n        Please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started\\\">guide</a>.\\n        It will only take a few minutes :)\\n      </p>\\n      <p>\\n        You can find detailled docs on our <a href=\\\"http://about.travis-ci.org/\\\">about</a> site.\\n      </p>\\n      <p>\\n        If you need help please don't hesitate to join\\n        <a href=\\\"irc://irc.freenode.net#travis\\\">#travis</a> on irc.freenode.net\\n        or our <a href=\\\"http://groups.google.com/group/travis-ci\\\">mailinglist</a>.\\n      </p>\\n    </div>\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"<a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n  {{t layouts.application.fork_me}}\\n</a>\\n\\n<div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n  <div class='icon'></div>&nbsp;\\n</div>\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n<div id=\\\"about\\\" class=\\\"box\\\">\\n  <h4>{{t layouts.about.join}}</h4>\\n  <ul>\\n    <li>{{t layouts.about.repository}}: <a href=\\\"http://github.com/travis-ci\\\">Github</a></li>\\n    <li>{{t layouts.about.twitter}}: <a href=\\\"http://twitter.com/travisci\\\">@travisci</a></li>\\n    <li>{{t layouts.about.mailing_list}}: <a href=\\\"http://groups.google.com/group/travis-ci\\\">travis-ci</a></li>\\n    <li><a href=\\\"irc://irc.freenode.net#travis\\\">irc.freenode.net#travis</a></li>\\n  </ul>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"<a {{action showRoot href=true}}>\\n  <h1>Travis</h1>\\n</a>\\n\\n<ul id=\\\"navigation\\\">\\n  <li {{bindAttr class=\\\"view.classHome\\\"}}>\\n    <a {{action showRoot href=true}}>Home</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classStats\\\"}}>\\n    <a {{action showStats href=true}}>Stats</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/blog\\\">Blog</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/docs\\\">Docs</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classProfile\\\"}}>\\n    <p class=\\\"handle\\\">\\n      <a class=\\\"signed-out\\\" href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>{{t layouts.top.github_login}}</a>\\n      <a class=\\\"signed-in\\\" {{action showProfile href=true}}><img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>{{user.name}}</a>\\n      <span class=\\\"signing-in\\\">Signing in</span>\\n    </p>\\n    <ul>\\n      <li>\\n        <a {{action showProfile href=true}}>{{t layouts.top.profile}}</a>\\n      </li>\\n      <li>\\n        <a href=\\\"/\\\" {{action signOut target=\\\"Travis.app\\\"}}>{{t layouts.top.sign_out}}</a>\\n      </li>\\n    </ul>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n</div>\\n\\n<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_accounts\\\" {{bindAttr class=\\\"view.classAccounts\\\"}}>\\n    <h5><a name=\\\"accounts\\\" href=\\\"\\\">Accounts</a></h5>\\n  </li>\\n</ul>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n    <a {{action showAccount view.account href=true}} class=\\\"name\\\">{{view.name}}</a>\\n    <p class=\\\"summary\\\">\\n      <span class=\\\"repos_label\\\">Repositories:</span>\\n      <abbr class=\\\"repos\\\">{{view.content.reposCount}}</abbr>\\n    </p>\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"<h3>{{view.name}}</h3>\\n\\n{{view Travis.ProfileTabsView}}\\n\\n<div class=\\\"tab\\\">\\n  {{outlet pane}}\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_hooks\\\" {{bindAttr class=\\\"view.classHooks\\\"}}>\\n    <h5>\\n      <a {{action showAccount view.account href=true}}>Repositories</a>\\n    </h5>\\n  </li>\\n  {{#if view.displayUser}}\\n    <li id=\\\"tab_user\\\" {{bindAttr class=\\\"view.classUser\\\"}}>\\n      <h5>\\n        <a {{action showUserProfile view.account href=true}}>Profile</a>\\n      </h5>\\n    </li>\\n  {{/if}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"<p class=\\\"tip\\\">\\n  {{{t profiles.show.message.your_repos}}}\\n</p>\\n\\n{{#if hooks.isLoaded}}\\n  {{#if user.isSyncing}}\\n    <p class=\\\"message loading\\\">\\n      <span>Please wait while we sync from GitHub</span>\\n    </p>\\n  {{else}}\\n    <p class=\\\"message\\\">\\n      Last synchronized from GitHub: {{formatTime user.syncedAt}}\\n      <button class=\\\"sync_now\\\" {{action sync target=\\\"user\\\"}}>\\n        Sync now\\n      </button>\\n    </p>\\n\\n    <ul id=\\\"hooks\\\">\\n      {{#each hook in hooks}}\\n        <li {{bindAttr class=\\\"hook.active:active\\\"}}>\\n          <a {{bindAttr href=\\\"hook.urlGithub\\\"}} rel=\\\"nofollow\\\">{{hook.slug}}</a>\\n          <p class=\\\"description\\\">{{hook.description}}</p>\\n\\n          <div class=\\\"controls\\\">\\n            <a {{bindAttr href=\\\"hook.urlGithubAdmin\\\"}} class=\\\"github-admin tool-tip\\\" title=\\\"Github service hooks admin page\\\"></a>\\n            <a {{action toggle target=\\\"hook\\\"}} class=\\\"switch\\\"></a>\\n          </div>\\n        </li>\\n      {{else}}\\n        <li>\\n          You do not seem to have any repositories that we could sync.\\n        </li>\\n      {{/each}}\\n    </ul>\\n  {{/if}}\\n{{else}}\\n  <p class=\\\"message loading\\\">\\n    <span>Loading</span>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"<img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>\\n\\n<dl class=\\\"profile\\\">\\n  <dt>\\n    {{t profiles.show.github}}:\\n  </dt>\\n  <dd>\\n    <a {{bindAttr href=\\\"urlGithub\\\"}}>{{user.login}}</a>\\n  </dd>\\n  <dt>\\n    {{t profiles.show.email}}:\\n  </dt>\\n  <dd>\\n    {{user.email}}\\n  </dd>\\n  <dt>\\n    {{t profiles.show.token}}:\\n  </dt>\\n  <dd>\\n    {{user.token}}\\n  </dd>\\n</dl>\\n\\n<form>\\n  {{view Ember.Select id=\\\"locale\\\"\\n     contentBinding=\\\"view.locales\\\"\\n     valueBinding=\\\"Travis.app.currentUser.locale\\\"\\n     optionLabelPath=\\\"content.name\\\"\\n     optionValuePath=\\\"content.key\\\"}}\\n\\n  <button name=\\\"commit\\\" {{action saveLocale target=\\\"view\\\"}}>\\n    {{t profiles.show.update_locale}}\\n  </button>\\n</form>\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"<ul id=\\\"queues\\\">\\n{{#each queue in controller}}\\n  <li class=\\\"queue\\\">\\n    <h4>{{t queue}}: {{queue.name}}</h4>\\n    <ul {{bindAttr id=\\\"queue.id\\\"}}>\\n      {{#each job in queue}}\\n        {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n          <a {{action showJob job.repo job target=\\\"Travis.app.router\\\" href=true}}>\\n            <span class=\\\"slug\\\">\\n              {{job.repo.slug}}\\n            </span>\\n            #{{job.number}}\\n          </a>\\n        {{/view}}\\n      {{else}}\\n        {{t no_job}}\\n      {{/each}}\\n    </ul>\\n  </li>\\n{{/each}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n  {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n</div>\\n\\n{{view Travis.ReposListTabsView}}\\n\\n<a {{action toggleInfo target=\\\"view\\\"}} class=\\\"toggle-info\\\"></a>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n    {{#with view.repo}}\\n      <div class=\\\"slug-and-status\\\">\\n        <span class=\\\"status\\\"></span>\\n        {{#if slug}}\\n          <a {{action showRepo this href=true}} class=\\\"slug\\\">{{slug}}</a>\\n        {{/if}}\\n      </div>\\n      {{#if lastBuildId}}\\n        <a {{action showBuild this lastBuildId href=true}} class=\\\"last_build\\\">{{lastBuildNumber}}</a>\\n      {{/if}}\\n\\n      <p class=\\\"summary\\\">\\n        <span class=\\\"duration_label\\\">{{t repositories.duration}}:</span>\\n        <abbr class=\\\"duration\\\" {{bindAttr title=\\\"lastBuildStartedAt\\\"}}>{{formatDuration lastBuildDuration}}</abbr>,\\n        <span class=\\\"finished_at_label\\\">{{t repositories.finished_at}}:</span>\\n        <abbr class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"lastBuildFinishedAt\\\"}}>{{formatTime lastBuildFinishedAt}}</abbr>\\n      </p>\\n\\n      <div class=\\\"indicator\\\"><span></span></div>\\n\\n      {{#if description}}\\n        <div class=\\\"info\\\">\\n          <p class=\\\"description\\\">{{description}}</p>\\n        </div>\\n      {{/if}}\\n    {{/with}}\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_recent\\\" {{bindAttr class=\\\"view.classRecent\\\"}}>\\n    <h5><a name=\\\"recent\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.recent}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_owned\\\" {{bindAttr class=\\\"view.classOwned\\\"}}>\\n    <h5><a name=\\\"owned\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.my_repositories}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_search\\\" {{bindAttr class=\\\"view.classSearch\\\"}}>\\n    <h5><a name=\\\"search\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.search}}</a></h5>\\n  </li>\\n</ul>\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"<div id=\\\"repo\\\" {{bindAttr class=\\\"view.class\\\"}}>\\n  {{#if view.repo.isLoaded}}\\n    {{#with view.repo}}\\n      <h3>\\n        <a {{bindAttr href=\\\"view.urlGithub\\\"}}>{{slug}}</a>\\n      </h3>\\n\\n      <p class=\\\"description\\\">{{description}}</p>\\n\\n      <ul class=\\\"github-stats\\\">\\n        <li class=\\\"language\\\">\\n          {{lastBuildLanguage}}\\n        </li>\\n        <li>\\n          <a class=\\\"watchers\\\" title=\\\"Watchers\\\" {{bindAttr href=\\\"view.urlGithubWatchers\\\"}}>\\n            {{stats.watchers}}\\n          </a>\\n        </li>\\n        <li>\\n          <a class=\\\"forks\\\" title=\\\"Forks\\\" {{bindAttr href=\\\"view.urlGithubNetwork\\\"}}>\\n            {{stats.forks}}\\n          </a>\\n        </li>\\n      </ul>\\n\\n      {{view Travis.RepoShowTabsView}}\\n      {{view Travis.RepoShowToolsView}}\\n    {{/with}}\\n\\n  {{else}}\\n    <span>Loading</span>\\n  {{/if}}\\n\\n  <div class=\\\"tab\\\">\\n    {{outlet pane}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_current\\\" {{bindAttr class=\\\"view.classCurrent\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showRepo view.repo href=true}}>\\n        {{t repositories.tabs.current}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_builds\\\" {{bindAttr class=\\\"view.classBuilds\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBuilds view.repo href=true}}>\\n        {{t repositories.tabs.build_history}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_pull_requests\\\" {{bindAttr class=\\\"view.classPullRequests\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showPullRequests view.repo href=true}}>\\n        {{t repositories.tabs.pull_requests}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_branches\\\" {{bindAttr class=\\\"view.classBranches\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBranches view.repo href=true}}>\\n        {{t repositories.tabs.branches}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_build\\\" {{bindAttr class=\\\"view.classBuild\\\"}}>\\n    <h5>\\n      {{#if view.build.id}}\\n      <a {{action showBuild view.build href=true}}>\\n        {{t repositories.tabs.build}} #{{view.build.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_job\\\" {{bindAttr class=\\\"view.classJob\\\"}}>\\n    <h5>\\n      {{#if view.job.id}}\\n      <a {{action showBuild view.job href=true}}>\\n        {{t repositories.tabs.job}} #{{view.job.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"<div id=\\\"tools\\\">\\n  <a href=\\\"#\\\" {{action menu target=\\\"view\\\"}}></a>\\n  <ul class=\\\"menu\\\">\\n    <li>\\n      <a href=\\\"#\\\" name=\\\"status-images\\\" {{action statusImages target=\\\"view\\\"}}>Status Images</a>\\n    </li>\\n    {{#if view.canPush}}\\n      <li>\\n        <a href=\\\"#\\\" {{action requeue target=\\\"view\\\"}}>Rebuild</a>\\n      </li>\\n    {{/if}}\\n  </ul>\\n</div>\\n\\n<div id=\\\"status-images\\\" class=\\\"popup\\\">\\n  <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n  <p>\\n    <label>{{t repositories.branch}}:</label>\\n    {{#if view.branches.isLoaded}}\\n      {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n    {{else}}\\n      <span class=\\\"loading\\\"></span>\\n    {{/if}}\\n  </p>\\n  <p>\\n    <label>{{t repositories.image_url}}:</label>\\n    <input type=\\\"text\\\" class=\\\"url\\\" {{bindAttr value=\\\"view.urlStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.markdown}}:</label>\\n    <input type=\\\"text\\\" class=\\\"markdown\\\" {{bindAttr value=\\\"view.markdownStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.textile}}:</label>\\n    <input type=\\\"text\\\" class=\\\"textile\\\" {{bindAttr value=\\\"view.textileStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.rdoc}}:</label>\\n    <input type=\\\"text\\\" class=\\\"rdoc\\\" {{bindAttr value=\\\"view.rdocStatusImage\\\"}}></input>\\n  </p>\\n</div>\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"<h4>{{t layouts.application.sponsers}}</h4>\\n\\n<ul class=\\\"sponsors top\\\">\\n  {{#each deck in controller}}\\n    {{#each deck}}\\n      <li {{bindAttr class=\\\"type\\\"}}>\\n        <a {{bindAttr href=\\\"url\\\"}}>\\n          <img {{bindAttr src=\\\"image\\\"}}>\\n        </a>\\n      </li>\\n    {{/each}}\\n  {{/each}}\\n</ul>\\n\\n<p class=\\\"hint\\\">\\n  <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n    {{{t layouts.application.sponsors_link}}}\\n  </a>\\n</p>\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"<div class=\\\"box\\\">\\n  <h4>{{t layouts.application.sponsers}}</h4>\\n\\n  <ul class=\\\"sponsors bottom\\\">\\n    {{#each controller}}\\n      <li>\\n        {{{link}}}\\n      </li>\\n    {{/each}}\\n  </ul>\\n\\n  <p class=\\\"hint\\\">\\n    <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n      {{{t layouts.application.sponsors_link}}}\\n    </a>\\n  </p>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"<div id=\\\"repos_stats\\\"></div>\\n<div id=\\\"tests_stats\\\"></div>\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n  <h4>\\n    {{t workers}}\\n    <a id=\\\"toggle-workers\\\" {{action toggleWorkers target=\\\"parentView.parentView\\\"}}></a>\\n  </h4>\\n  <ul id=\\\"workers\\\">\\n    {{#each group in controller.groups}}\\n      {{#view Travis.WorkersListView}}\\n        <li class=\\\"group\\\">\\n          <h5 {{action toggle target=\\\"view\\\"}}>\\n            {{group.firstObject.host}}\\n          </h5>\\n          <ul>\\n          {{#each worker in group}}\\n            {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n              <li class=\\\"worker\\\">\\n                <div class=\\\"status\\\"></div>\\n                {{#if worker.isWorking}}\\n                  {{#if worker.job_id}}\\n                    <a {{action showJob worker.repo worker.job_id target=\\\"Travis.app.router\\\" href=true}} {{bindAttr title=\\\"worker.lastSeenAt\\\"}}>\\n                      {{view.display}}\\n                    </a>\\n                  {{/if}}\\n                {{else}}\\n                  {{view.display}}\\n                {{/if}}\\n              </li>\\n            {{/view}}\\n          {{/each}}\\n          </ul>\\n        </li>\\n      {{/view}}\\n    {{else}}\\n      No workers\\n    {{/each}}\\n  </ul>\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors &rarr;\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Getting Started guide</a>.\\n  <small>It will only take a couple of minutes.</small>\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores &rarr;\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Activa los interruptores para inicial el  Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\\n  Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guía de Inicio </a>.\\n  <small>Solo tomará unos pocos minutos.</small>\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors &rarr;\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">guide de démarrage</a>.\\n <small>Cela ne vous prendra que quelques minutes.</small>\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る &rarr;\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずは<a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Travisのはじめ方</a>を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\\\"https://github.com/travis-ci\\\">her</a>.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre &rarr;\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors &rarr;\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze <a href=\\\\\\\"http://about.travis-ci.org/docs/user/getting-started/\\\\\\\">startersgids</a> lezen.\\\\n  <small>Het zal maar enkele minuten van uw tijd vergen.</small>\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów &rarr;\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Przewodnik </a>.\\n  <small>Zajmie ci to tylko kilka minut.</small>\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores &rarr;\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров &rarr;\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n  context: null,\n  options: null,\n  property: null,\n  // paths of the property that are also observed\n  propertyPaths: [],\n\n  value: Ember.K,\n\n  valueForRender: function() {\n    var value = this.value(Ember.get(this.context, this.property), this.options);\n    if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n    return value;\n  },\n\n  render: function(buffer) {\n    buffer.push(this.valueForRender());\n  },\n\n  valueDidChange: function() {\n    if (this.morph.isRemoved()) { return; }\n    this.morph.html(this.valueForRender());\n  },\n\n  didInsertElement: function() {\n    this.valueDidChange();\n  },\n\n  init: function() {\n    this._super();\n    Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n  },\n\n  destroy: function() {\n    Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n    this._super();\n  }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n  var propertyPaths = Array.prototype.slice.call(arguments, 2);\n  Ember.Handlebars.registerHelper(name, function(property, options) {\n    var data = options.data,\n        view = data.view,\n        ctx  = this;\n\n    var bindView = view.createChildView(BoundHelperView, {\n      property: property,\n      propertyPaths: propertyPaths,\n      context: ctx,\n      options: options.hash,\n      value: func\n    });\n\n    view.appendChild(bindView);\n  });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace");
\ No newline at end of file
diff --git a/public/scripts/min/app.js b/public/scripts/min/app.js
index 92d7820b..08c42698 100644
--- a/public/scripts/min/app.js
+++ b/public/scripts/min/app.js
@@ -29619,4 +29619,4 @@ var _require=function(){function c(a,c){document.addEventListener?a.addEventList
 ++g&&setTimeout(c,0)})}}();
 (function(){!window.WebSocket&&window.MozWebSocket&&(window.WebSocket=window.MozWebSocket);if(window.WebSocket)Pusher.Transport=window.WebSocket,Pusher.TransportType="native";var c=(document.location.protocol=="http:"?Pusher.cdn_http:Pusher.cdn_https)+Pusher.VERSION,a=[];window.JSON||a.push(c+"/json2"+Pusher.dependency_suffix+".js");if(!window.WebSocket)window.WEB_SOCKET_DISABLE_AUTO_INITIALIZATION=!0,a.push(c+"/flashfallback"+Pusher.dependency_suffix+".js");var b=function(){return window.WebSocket?function(){Pusher.ready()}:
 function(){window.WebSocket?(Pusher.Transport=window.WebSocket,Pusher.TransportType="flash",window.WEB_SOCKET_SWF_LOCATION=c+"/WebSocketMain.swf",WebSocket.__addTask(function(){Pusher.ready()}),WebSocket.__initialize()):(Pusher.Transport=null,Pusher.TransportType="none",Pusher.ready())}}(),e=function(a){var b=function(){document.body?a():setTimeout(b,0)};b()},g=function(){e(b)};a.length>0?_require(a,g):g()})();
-;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n  Travis.reopen({\n    App: Em.Application.extend({\n      autoinit: false,\n      currentUserBinding: 'auth.user',\n      authStateBinding: 'auth.state',\n      init: function() {\n        this._super.apply(this, arguments);\n        this.store = Travis.Store.create();\n        this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n        this.set('auth', Travis.Auth.create({\n          app: this,\n          endpoint: Travis.config.api_endpoint\n        }));\n        this.slider = new Travis.Slider();\n        this.pusher = new Travis.Pusher(Travis.config.pusher);\n        return this.tailing = new Travis.Tailing();\n      },\n      signIn: function() {\n        return this.get('auth').signIn();\n      },\n      signOut: function() {\n        this.get('auth').signOut();\n        return this.get('router').send('showRoot');\n      },\n      receive: function() {\n        return this.store.receive.apply(this.store, arguments);\n      },\n      toggleSidebar: function() {\n        var element;\n        $('body').toggleClass('maximized');\n        element = $('<span></span>');\n        $('#top .profile').append(element);\n        Em.run.later((function() {\n          return element.remove();\n        }), 10);\n        element = $('<span></span>');\n        $('#repo').append(element);\n        return Em.run.later((function() {\n          return element.remove();\n        }), 10);\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n  this.Travis.Auth = Ember.Object.extend({\n    iframe: $('<iframe id=\"auth-frame\" />').hide(),\n    timeout: 5000,\n    state: 'signed-out',\n    receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n    init: function() {\n      var _this = this;\n      this.iframe.appendTo('body');\n      window.addEventListener('message', function(e) {\n        return _this.receiveMessage(e);\n      });\n      return this.loadUser();\n    },\n    accessToken: (function() {\n      return sessionStorage.getItem('travis.token');\n    }).property(),\n    loadUser: function() {\n      var user;\n      if (user = sessionStorage.getItem('travis.user')) {\n        return this.setData({\n          user: JSON.parse(user)\n        });\n      } else if (localStorage.getItem('travis.auto_signin')) {\n        return this.trySignIn();\n      }\n    },\n    signIn: function() {\n      this.set('state', 'signing-in');\n      this.trySignIn();\n      return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n    },\n    trySignIn: function() {\n      return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n    },\n    checkSignIn: function() {\n      if (this.get('state') === 'signing-in') {\n        return this.forceSignIn();\n      }\n    },\n    forceSignIn: function() {\n      localStorage.setItem('travis.auto_signin', 'true');\n      return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n    },\n    signOut: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.clear();\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.clear();\n      }\n      return this.setData();\n    },\n    setData: function(data) {\n      var user;\n      if (typeof data === 'string') {\n        data = JSON.parse(data);\n      }\n      if (data != null ? data.token : void 0) {\n        this.storeToken(data.token);\n      }\n      if (data != null ? data.user : void 0) {\n        user = this.storeUser(data.user);\n      }\n      this.set('state', user ? 'signed-in' : 'signed-out');\n      this.set('user', user ? user : void 0);\n      if (this.app.get('router')) {\n        return this.app.get('router').transitionTo('authenticated');\n      }\n    },\n    storeToken: function(token) {\n      sessionStorage.setItem('travis.token', token);\n      return this.notifyPropertyChange('accessToken');\n    },\n    storeUser: function(user) {\n      localStorage.setItem('travis.auto_signin', 'true');\n      sessionStorage.setItem('travis.user', JSON.stringify(user));\n      this.app.store.load(Travis.User, user);\n      user = this.app.store.find(Travis.User, user.id);\n      user.get('permissions');\n      return user;\n    },\n    receiveMessage: function(event) {\n      if (event.origin === this.expectedOrigin()) {\n        this.setData(event.data);\n        return console.log(\"signed in as \" + event.data.user.login);\n      } else {\n        return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n      }\n    },\n    expectedOrigin: function() {\n      if (this.endpoint[0] === '/') {\n        return this.receivingEnd;\n      } else {\n        return this.endpoint;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n  Travis.reopen({\n    Controller: Em.Controller.extend({\n      connectOutlet: function() {\n        var view, _connectedOutletViews;\n        view = this._super.apply(this, arguments);\n        if (view) {\n          _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n          if (!_connectedOutletViews) {\n            _connectedOutletViews = [];\n          }\n          _connectedOutletViews.pushObject(view);\n          Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n        }\n        return view;\n      }\n    }),\n    TopController: Em.Controller.extend({\n      userBinding: 'Travis.app.currentUser'\n    }),\n    ApplicationController: Em.Controller.extend(),\n    MainController: Em.Controller.extend(),\n    StatsLayoutController: Em.Controller.extend(),\n    ProfileLayoutController: Em.Controller.extend(),\n    AuthLayoutController: Em.Controller.extend()\n  });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n  Travis.AccountsController = Ember.ArrayController.extend({\n    tab: 'accounts',\n    init: function() {\n      return this._super();\n    },\n    findByLogin: function(login) {\n      return this.find(function(account) {\n        return account.get('login') === 'login';\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n  Travis.BuildsController = Em.ArrayController.extend({\n    repo: 'parent.repo',\n    contentBinding: 'parent.builds'\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n  Travis.FlashController = Ember.ArrayController.extend({\n    init: function() {\n      this._super.apply(this, arguments);\n      return this.set('content', Ember.A());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n  Travis.HomeController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n  Travis.ProfileController = Travis.Controller.extend({\n    name: 'profile',\n    userBinding: 'Travis.app.currentUser',\n    accountsBinding: 'Travis.app.router.accountsController',\n    account: (function() {\n      var login;\n      login = this.get('params.login') || Travis.app.get('currentUser.login');\n      return this.get('accounts').filter(function(account) {\n        if (account.get('login') === login) {\n          return account;\n        }\n      })[0];\n    }).property('accounts.length', 'params.login'),\n    activate: function(action, params) {\n      this.setParams(params || this.get('params'));\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewHooks: function() {\n      this.connectTab('hooks');\n      return this.set('hooks', Travis.Hook.find({\n        owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n      }));\n    },\n    viewUser: function() {\n      return this.connectTab('user');\n    },\n    connectTab: function(tab) {\n      var viewClass;\n      viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    setParams: function(params) {\n      var key, value, _results;\n      this.set('params', {});\n      _results = [];\n      for (key in params) {\n        value = params[key];\n        _results.push(this.set(\"params.\" + key, params[key]));\n      }\n      return _results;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n  Travis.RepoController = Travis.Controller.extend({\n    bindings: [],\n    init: function() {\n      this._super.apply(this, arguments);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var build, builds;\n      if (builds = this.get('builds')) {\n        builds.forEach(function(b) {\n          return b.updateTimes();\n        });\n      }\n      if (build = this.get('build')) {\n        build.updateTimes();\n        build.get('jobs').forEach(function(j) {\n          return j.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(action) {\n      this._unbind();\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewIndex: function() {\n      this._bind('repo', 'controllers.reposController.firstObject');\n      this._bind('build', 'repo.lastBuild');\n      return this.connectTab('current');\n    },\n    viewCurrent: function() {\n      this.connectTab('current');\n      return this._bind('build', 'repo.lastBuild');\n    },\n    viewBuilds: function() {\n      this.connectTab('builds');\n      return this._bind('builds', 'repo.builds');\n    },\n    viewPullRequests: function() {\n      this.connectTab('pull_requests');\n      return this._bind('builds', 'repo.pullRequests');\n    },\n    viewBranches: function() {\n      this.connectTab('branches');\n      return this._bind('builds', 'repo.branches');\n    },\n    viewBuild: function() {\n      return this.connectTab('build');\n    },\n    viewJob: function() {\n      this._bind('build', 'job.build');\n      return this.connectTab('job');\n    },\n    repoObserver: (function() {\n      var repo;\n      repo = this.get('repo');\n      if (repo) {\n        return repo.select();\n      }\n    }).observes('repo.id'),\n    connectTab: function(tab) {\n      var name, viewClass;\n      name = tab === 'current' ? 'build' : tab;\n      viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    _bind: function(to, from) {\n      return this.bindings.push(Ember.oneWay(this, to, from));\n    },\n    _unbind: function() {\n      var binding, _i, _len, _ref;\n      _ref = this.bindings;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        binding = _ref[_i];\n        binding.disconnect(this);\n      }\n      return this.bindings.length = 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\n\n  Travis.ReposController = Ember.ArrayController.extend({\n    defaultTab: 'recent',\n    sortProperties: ['sortOrder'],\n    init: function() {\n      this.activate(this.defaultTab);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var content;\n      if (content = this.get('content')) {\n        content.forEach(function(r) {\n          return r.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(tab, params) {\n      this.set('tab', tab);\n      return this[\"view\" + ($.camelize(tab))](params);\n    },\n    viewRecent: function() {\n      return this.set('content', Travis.Repo.find());\n    },\n    viewOwned: function() {\n      return this.set('content', Travis.Repo.ownedBy(Travis.app.get('currentUser.login')));\n    },\n    viewSearch: function(params) {\n      return this.set('content', Travis.Repo.search(params.search));\n    },\n    searchObserver: (function() {\n      var search, tab;\n      search = this.get('search');\n      tab = search ? 'search' : 'recent';\n      return this.activate(tab, {\n        search: search\n      });\n    }).observes('search')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n  Travis.reopen({\n    SidebarController: Em.ArrayController.extend({\n      init: function() {\n        this.tickables = [];\n        return Travis.Ticker.create({\n          target: this,\n          interval: Travis.INTERVALS.sponsors\n        });\n      },\n      tick: function() {\n        var tickable, _i, _len, _ref, _results;\n        _ref = this.tickables;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          tickable = _ref[_i];\n          _results.push(tickable.tick());\n        }\n        return _results;\n      }\n    }),\n    QueuesController: Em.ArrayController.extend(),\n    WorkersController: Em.ArrayController.extend({\n      groups: (function() {\n        var content, groups, host, worker, _i, _len, _ref;\n        if (content = this.get('content')) {\n          groups = {};\n          _ref = content.toArray();\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            worker = _ref[_i];\n            host = worker.get('host');\n            if (!groups[host]) {\n              groups[host] = Em.ArrayProxy.create({\n                content: []\n              });\n            }\n            groups[host].pushObject(worker);\n          }\n          return $.values(groups);\n        }\n      }).property('content.length')\n    }),\n    SponsorsController: Em.ArrayController.extend({\n      page: 0,\n      arrangedContent: (function() {\n        return this.get('shuffled').slice(this.start(), this.end());\n      }).property('shuffled.length', 'page'),\n      shuffled: (function() {\n        var content;\n        if (content = this.get('content')) {\n          return $.shuffle(content);\n        } else {\n          return [];\n        }\n      }).property('content.length'),\n      tick: function() {\n        return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n      },\n      pages: (function() {\n        var length;\n        length = this.get('content.length');\n        if (length) {\n          return parseInt(length / this.get('perPage') + 1);\n        } else {\n          return 1;\n        }\n      }).property('length'),\n      isLast: function() {\n        return this.get('page') === this.get('pages') - 1;\n      },\n      start: function() {\n        return this.get('page') * this.get('perPage');\n      },\n      end: function() {\n        return this.start() + this.get('perPage');\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n  Travis.StatsController = Travis.Controller.extend({\n    name: 'stats',\n    init: function() {\n      return this._super('top');\n    },\n    activate: function(action, params) {}\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n  var safe;\nminispade.require('ext/ember/bound_helper');\n\n  safe = function(string) {\n    return new Handlebars.SafeString(string);\n  };\n\n  Handlebars.registerHelper('tipsy', function(text, tip) {\n    return safe('<span class=\"tool-tip\" original-title=\"' + tip + '\">' + text + '</span>');\n  });\n\n  Handlebars.registerHelper('t', function(key) {\n    return safe(I18n.t(key));\n  });\n\n  Ember.registerBoundHelper('formatTime', function(value, options) {\n    return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n  });\n\n  Ember.registerBoundHelper('formatDuration', function(duration, options) {\n    return safe(Travis.Helpers.timeInWords(duration));\n  });\n\n  Ember.registerBoundHelper('formatCommit', function(commit, options) {\n    if (commit) {\n      return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n    }\n  });\n\n  Ember.registerBoundHelper('formatSha', function(sha, options) {\n    return safe(Travis.Helpers.formatSha(sha));\n  });\n\n  Ember.registerBoundHelper('pathFrom', function(url, options) {\n    return safe(Travis.Helpers.pathFrom(url));\n  });\n\n  Ember.registerBoundHelper('formatMessage', function(message, options) {\n    return safe(Travis.Helpers.formatMessage(message, options));\n  });\n\n  Ember.registerBoundHelper('formatConfig', function(config, options) {\n    return safe(Travis.Helpers.formatConfig(config));\n  });\n\n  Ember.registerBoundHelper('formatLog', function(log, options) {\n    return Travis.Helpers.formatLog(log) || '';\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('emoij');\n\n  this.Travis.Helpers = {\n    compact: function(object) {\n      var key, result, value, _ref;\n      result = {};\n      _ref = object || {};\n      for (key in _ref) {\n        value = _ref[key];\n        if (!$.isEmpty(value)) {\n          result[key] = value;\n        }\n      }\n      return result;\n    },\n    safe: function(string) {\n      return new Handlebars.SafeString(string);\n    },\n    colorForResult: function(result) {\n      if (result === 0) {\n        return 'green';\n      } else {\n        if (result === 1) {\n          return 'red';\n        } else {\n          return null;\n        }\n      }\n    },\n    formatCommit: function(sha, branch) {\n      return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n    },\n    formatSha: function(sha) {\n      return (sha || '').substr(0, 7);\n    },\n    formatConfig: function(config) {\n      var values;\n      config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n      values = $.map(config, function(value, key) {\n        value = (value && value.join ? value.join(', ') : value) || '';\n        return '%@: %@'.fmt($.camelize(key), value);\n      });\n      if (values.length === 0) {\n        return '-';\n      } else {\n        return values.join(', ');\n      }\n    },\n    formatMessage: function(message, options) {\n      message = message || '';\n      if (options.short) {\n        message = message.split(/\\n/)[0];\n      }\n      return this._emojize(this._escape(message)).replace(/\\n/g, '<br/>');\n    },\n    formatLog: function(log) {\n      return Travis.Log.filter(log);\n    },\n    pathFrom: function(url) {\n      return (url || '').split('/').pop();\n    },\n    timeAgoInWords: function(date) {\n      return $.timeago.distanceInWords(date);\n    },\n    durationFrom: function(started, finished) {\n      started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n      finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n      if (started && finished) {\n        return Math.round((finished - started) / 1000);\n      } else {\n        return 0;\n      }\n    },\n    timeInWords: function(duration) {\n      var days, hours, minutes, result, seconds;\n      days = Math.floor(duration / 86400);\n      hours = Math.floor(duration % 86400 / 3600);\n      minutes = Math.floor(duration % 3600 / 60);\n      seconds = duration % 60;\n      if (days > 0) {\n        return 'more than 24 hrs';\n      } else {\n        result = [];\n        if (hours === 1) {\n          result.push(hours + ' hr');\n        }\n        if (hours > 1) {\n          result.push(hours + ' hrs');\n        }\n        if (minutes > 0) {\n          result.push(minutes + ' min');\n        }\n        if (seconds > 0) {\n          result.push(seconds + ' sec');\n        }\n        if (result.length > 0) {\n          return result.join(' ');\n        } else {\n          return '-';\n        }\n      }\n    },\n    _normalizeDateString: function(string) {\n      if (window.JHW) {\n        string = string.replace('T', ' ').replace(/-/g, '/');\n        string = string.replace('Z', '').replace(/\\..*$/, '');\n      }\n      return string;\n    },\n    _nowUtc: function() {\n      return this._toUtc(new Date());\n    },\n    _toUtc: function(date) {\n      return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    },\n    _emojize: function(text) {\n      var emojis;\n      emojis = text.match(/:\\S+?:/g);\n      if (emojis !== null) {\n        $.each(emojis.uniq(), function(ix, emoji) {\n          var image, strippedEmoji;\n          strippedEmoji = emoji.substring(1, emoji.length - 1);\n          if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n            image = '<img class=\\'emoji\\' title=\\'' + emoji + '\\' alt=\\'' + emoji + '\\' src=\\'' + '/images/emoji/' + strippedEmoji + '.png\\'/>';\n            return text = text.replace(new RegExp(emoji, 'g'), image);\n          }\n        });\n      }\n      return text;\n    },\n    _escape: function(text) {\n      return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n  this.Travis.Urls = {\n    repo: function(slug) {\n      return \"/\" + slug;\n    },\n    builds: function(slug) {\n      return \"/\" + slug + \"/builds\";\n    },\n    pullRequests: function(slug) {\n      return \"/\" + slug + \"/pull_requests\";\n    },\n    branches: function(slug) {\n      return \"/\" + slug + \"/branches\";\n    },\n    build: function(slug, id) {\n      return \"/\" + slug + \"/builds/\" + id;\n    },\n    job: function(slug, id) {\n      return \"/\" + slug + \"/jobs/\" + id;\n    },\n    githubCommit: function(slug, sha) {\n      return \"http://github.com/\" + slug + \"/commit/\" + sha;\n    },\n    githubRepo: function(slug) {\n      return \"http://github.com/\" + slug;\n    },\n    githubWatchers: function(slug) {\n      return \"http://github.com/\" + slug + \"/watchers\";\n    },\n    githubNetwork: function(slug) {\n      return \"http://github.com/\" + slug + \"/network\";\n    },\n    githubAdmin: function(slug) {\n      return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n    },\n    statusImage: function(slug, branch) {\n      return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n    },\n    email: function(email) {\n      return \"mailto:\" + email;\n    },\n    account: function(login) {\n      return \"/profile/\" + login;\n    },\n    user: function(login) {\n      return \"/profile/\" + login + \"/me\";\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Account = Travis.Model.extend({\n    primaryKey: 'login',\n    login: DS.attr('string'),\n    name: DS.attr('string'),\n    type: DS.attr('string'),\n    reposCount: DS.attr('number'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('login'));\n    }).property()\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Artifact = Travis.Model.extend({\n    body: DS.attr('string'),\n    init: function() {\n      this._super.apply(this, arguments);\n      this.set('queue', Ember.A([]));\n      this.addObserver('body', this.fetchWorker);\n      return this.fetchWorker();\n    },\n    append: function(body) {\n      if (this.get('isLoaded')) {\n        return this.set('body', this.get('body') + body);\n      } else {\n        return this.get('queue').pushObject(body);\n      }\n    },\n    recordDidLoad: (function() {\n      var queue;\n      if (this.get('isLoaded')) {\n        queue = this.get('queue');\n        if (queue.get('length') > 0) {\n          return this.append(queue.toArray().join(''));\n        }\n      }\n    }).observes('isLoaded'),\n    fetchWorker: function() {\n      var body, line, match, worker;\n      if (body = this.get('body')) {\n        line = body.split(\"\\n\")[0];\n        if (line && (match = line.match(/Using worker: (.*)/))) {\n          if (worker = match[1]) {\n            worker = worker.trim().split(':')[0];\n            this.set('workerName', worker);\n            return this.removeObserver('body', this.fetchWorker);\n          }\n        }\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    commitId: DS.attr('number'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    duration: DS.attr('number'),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    commit: DS.belongsTo('Travis.Commit'),\n    repo: (function() {\n      if (this.get('repoId')) {\n        return Travis.Repo.find(this.get('repoId'));\n      }\n    }).property('repoId'),\n    updateTimes: function() {\n      this.notifyPropertyChange('started_at');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n  this.Travis.Branch.reopenClass({\n    byRepoId: function(id) {\n      return this.find({\n        repository_id: id\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, Travis.Ajax, {\n    eventType: DS.attr('string'),\n    repoId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    state: DS.attr('string'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string', {\n      key: 'started_at'\n    }),\n    finishedAt: DS.attr('string', {\n      key: 'finished_at'\n    }),\n    repo: DS.belongsTo('Travis.Repo'),\n    commit: DS.belongsTo('Travis.Commit'),\n    jobs: DS.hasMany('Travis.Job', {\n      key: 'job_ids'\n    }),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    isMatrix: (function() {\n      return this.get('data.job_ids.length') > 1;\n    }).property('data.job_ids.length'),\n    isFinished: (function() {\n      return this.get('state') === 'finished';\n    }).property('state'),\n    requiredJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return !data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    allowedFailureJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    configKeys: (function() {\n      var config, headers, key, keys;\n      if (!(config = this.get('config'))) {\n        return [];\n      }\n      keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n      headers = (function() {\n        var _i, _len, _ref, _results;\n        _ref = ['build.job', 'build.duration', 'build.finished_at'];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          key = _ref[_i];\n          _results.push(I18n.t(key));\n        }\n        return _results;\n      })();\n      return $.map(headers.concat(keys), function(key) {\n        return $.camelize(key);\n      });\n    }).property('config'),\n    requeue: (function() {\n      return this.post('/requests', {\n        build_id: this.get('id')\n      });\n    })\n  });\n\n  this.Travis.Build.reopenClass({\n    byRepoId: function(id, parameters) {\n      return this.find($.extend(parameters || {}, {\n        repository_id: id\n      }));\n    },\n    olderThanNumber: function(id, build_number) {\n      return this.find({\n        url: \"/builds\",\n        repository_id: id,\n        after_number: build_number\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Commit = Travis.Model.extend({\n    buildId: DS.attr('number'),\n    sha: DS.attr('string'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    compareUrl: DS.attr('string'),\n    authorName: DS.attr('string'),\n    authorEmail: DS.attr('string'),\n    committerName: DS.attr('string'),\n    committerEmail: DS.attr('string'),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'buildId'\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/extensions', "(function() {(function() {\n\n  Travis.DurationCalculations = Ember.Mixin.create({\n    duration: (function() {\n      var duration;\n      if (duration = this.get('_duration')) {\n        return duration;\n      } else {\n        return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n      }\n    }).property('_duration', 'finishedAt', 'startedAt'),\n    updateTimes: function() {\n      this.notifyPropertyChange('_duration');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Hook = Travis.Model.extend({\n    name: DS.attr('string'),\n    ownerName: DS.attr('string'),\n    description: DS.attr('string'),\n    active: DS.attr('boolean'),\n    account: (function() {\n      return this.get('slug').split('/')[0];\n    }).property('slug'),\n    slug: (function() {\n      return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n    }).property('ownerName', 'name'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('slug'));\n    }).property(),\n    urlGithubAdmin: (function() {\n      return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n    }).property(),\n    toggle: function() {\n      var transaction;\n      transaction = this.get('store').transaction();\n      transaction.add(this);\n      this.set('active', !this.get('active'));\n      return transaction.commit();\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    buildId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    logId: DS.attr('number'),\n    queue: DS.attr('string'),\n    state: DS.attr('string'),\n    number: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    allowFailure: DS.attr('boolean', {\n      key: 'allow_failure'\n    }),\n    repo: DS.belongsTo('Travis.Repo', {\n      key: 'repository_id'\n    }),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'build_id'\n    }),\n    commit: DS.belongsTo('Travis.Commit', {\n      key: 'commit_id'\n    }),\n    log: DS.belongsTo('Travis.Artifact', {\n      key: 'log_id'\n    }),\n    isQueued: (function() {}).property('state'),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    sponsor: (function() {\n      var worker;\n      worker = this.get('log.workerName');\n      if (worker && worker.length) {\n        return Travis.WORKERS[worker] || {\n          name: \"Travis Pro\",\n          url: \"http://travis-ci.com\"\n        };\n      }\n    }).property('log.workerName'),\n    configValues: (function() {\n      var config;\n      if (config = this.get('config')) {\n        return $.values($.only.apply(config, Travis.CONFIG_KEYS));\n      } else {\n        return [];\n      }\n    }).property('config'),\n    appendLog: function(text) {\n      var log;\n      if (log = this.get('log')) {\n        return log.append(text);\n      }\n    },\n    subscribe: function() {\n      var id;\n      if (id = this.get('id')) {\n        return Travis.app.pusher.subscribe(\"job-\" + id);\n      }\n    },\n    onStateChange: (function() {\n      if (this.get('state') === 'finished') {\n        return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n      }\n    }).observes('state')\n  });\n\n  this.Travis.Job.reopenClass({\n    queued: function(queue) {\n      this.find();\n      return Travis.app.store.filter(this, function(job) {\n        var queued;\n        queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n        return queued && job.get('queue') === (\"builds.\" + queue);\n      });\n    },\n    findMany: function(ids) {\n      return Travis.app.store.findMany(this, ids);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n  this.Travis.Repo = Travis.Model.extend({\n    slug: DS.attr('string'),\n    description: DS.attr('string'),\n    lastBuildId: DS.attr('number'),\n    lastBuildNumber: DS.attr('string'),\n    lastBuildResult: DS.attr('number'),\n    lastBuildStartedAt: DS.attr('string'),\n    lastBuildFinishedAt: DS.attr('string'),\n    lastBuild: DS.belongsTo('Travis.Build'),\n    builds: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'push'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    pullRequests: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'pull_request'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    branches: (function() {\n      return Travis.Branch.byRepoId(this.get('id'));\n    }).property(),\n    owner: (function() {\n      return (this.get('slug') || '').split('/')[0];\n    }).property('slug'),\n    name: (function() {\n      return (this.get('slug') || '').split('/')[1];\n    }).property('slug'),\n    lastBuildDuration: (function() {\n      var duration;\n      duration = this.get('data.last_build_duration');\n      if (!duration) {\n        duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n      }\n      return duration;\n    }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n    sortOrder: (function() {\n      var lastBuildFinishedAt;\n      if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n        return -new Date(lastBuildFinishedAt).getTime();\n      } else {\n        return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n      }\n    }).property('lastBuildFinishedAt', 'lastBuildId'),\n    stats: (function() {\n      var _this = this;\n      return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n        _this.set('_stats', data);\n        return _this.notifyPropertyChange('stats');\n      }) && {};\n    }).property(),\n    select: function() {\n      return Travis.Repo.select(this.get('id'));\n    },\n    updateTimes: function() {\n      return this.notifyPropertyChange('lastBuildDuration');\n    }\n  });\n\n  this.Travis.Repo.reopenClass({\n    url: 'repository',\n    recent: function() {\n      return this.find();\n    },\n    ownedBy: function(login) {\n      return this.find({\n        owner_name: login,\n        orderBy: 'name'\n      });\n    },\n    search: function(query) {\n      return this.find({\n        search: query,\n        orderBy: 'name'\n      });\n    },\n    bySlug: function(slug) {\n      var repo;\n      repo = $.select(this.find().toArray(), function(repo) {\n        return repo.get('slug') === slug;\n      });\n      if (repo.length > 0) {\n        return repo;\n      } else {\n        return this.find({\n          slug: slug\n        });\n      }\n    },\n    select: function(id) {\n      return this.find().forEach(function(repo) {\n        return repo.set('selected', repo.get('id') === id);\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Sponsor = Travis.Model.extend({\n    type: DS.attr('string'),\n    url: DS.attr('string'),\n    link: DS.attr('string'),\n    image: (function() {\n      return \"/images/sponsors/\" + (this.get('data.image'));\n    }).property('data.image')\n  });\n\n  Travis.Sponsor.reopenClass({\n    decks: function() {\n      return this.platinum().concat(this.gold());\n    },\n    platinum: function() {\n      var platinum, sponsor, _i, _len, _results;\n      platinum = this.byType('platinum').toArray();\n      _results = [];\n      for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n        sponsor = platinum[_i];\n        _results.push([sponsor]);\n      }\n      return _results;\n    },\n    gold: function() {\n      var gold, _results;\n      gold = this.byType('gold').toArray();\n      _results = [];\n      while (gold.length > 0) {\n        _results.push(gold.splice(0, 2));\n      }\n      return _results;\n    },\n    links: function() {\n      return this.byType('silver');\n    },\n    byType: function() {\n      var types;\n      types = Array.prototype.slice.apply(arguments);\n      return Travis.Sponsor.filter(function(sponsor) {\n        return types.indexOf(sponsor.get('type')) !== -1;\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n  this.Travis.User = Travis.Model.extend(Travis.Ajax, {\n    name: DS.attr('string'),\n    email: DS.attr('string'),\n    login: DS.attr('string'),\n    token: DS.attr('string'),\n    locale: DS.attr('string'),\n    gravatarId: DS.attr('string'),\n    isSyncing: DS.attr('boolean'),\n    syncedAt: DS.attr('string'),\n    repoCount: DS.attr('number'),\n    init: function() {\n      if (this.get('isSyncing')) {\n        this.poll();\n      }\n      this._super();\n      return Ember.run.next(this, function() {\n        var transaction;\n        transaction = this.get('store').transaction();\n        return transaction.add(this);\n      });\n    },\n    urlGithub: (function() {\n      return \"https://github.com/\" + (this.get('login'));\n    }).property(),\n    permissions: (function() {\n      var _this = this;\n      if (!this.permissions) {\n        this.permissions = Ember.ArrayProxy.create({\n          content: []\n        });\n        this.ajax('/users/permissions', 'get', {\n          success: function(data) {\n            return _this.permissions.set('content', data.permissions);\n          }\n        });\n      }\n      return this.permissions;\n    }).property(),\n    updateLocale: function(locale) {\n      var observer, self, transaction;\n      this.setWithSession('locale', locale);\n      transaction = this.get('transaction');\n      transaction.commit();\n      self = this;\n      observer = function() {\n        if (!self.get('isSaving')) {\n          self.removeObserver('isSaving', observer);\n          transaction = self.get('store').transaction();\n          return transaction.add(self);\n        }\n      };\n      return this.addObserver('isSaving', observer);\n    },\n    type: (function() {\n      return 'user';\n    }).property(),\n    sync: function() {\n      this.post('/users/sync');\n      this.setWithSession('isSyncing', true);\n      return this.poll();\n    },\n    poll: function() {\n      var _this = this;\n      return this.ajax('/users', 'get', {\n        success: function(data) {\n          if (data.user.is_syncing) {\n            return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n          } else {\n            _this.set('isSyncing', false);\n            return _this.setWithSession('syncedAt', data.user.synced_at);\n          }\n        }\n      });\n    },\n    setWithSession: function(name, value) {\n      var user;\n      this.set(name, value);\n      user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n      user[$.underscore(name)] = this.get(name);\n      return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Worker = Travis.Model.extend({\n    state: DS.attr('string'),\n    name: DS.attr('string'),\n    host: DS.attr('string'),\n    lastSeenAt: DS.attr('string'),\n    payload: (function() {\n      return this.get('data.payload');\n    }).property('data.payload'),\n    number: (function() {\n      return this.get('name').match(/\\d+$/)[0];\n    }).property('name'),\n    isWorking: (function() {\n      return this.get('state') === 'working';\n    }).property('state'),\n    repo: (function() {\n      return Travis.Repo.find(this.get('payload.repo.id'));\n    }).property('payload.repo.id'),\n    job_id: (function() {\n      return this.get('payload.job.id');\n    }).property('payload.job.id'),\n    job: (function() {\n      return Travis.Job.find(this.get('job_id'));\n    }).property('job_id')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n  Travis.Pusher = function(config) {\n    if (config) {\n      this.init(config);\n    }\n    return this;\n  };\n\n  $.extend(Travis.Pusher, {\n    CHANNELS: ['common'],\n    CHANNEL_PREFIX: ''\n  });\n\n  $.extend(Travis.Pusher.prototype, {\n    active_channels: [],\n    init: function(config) {\n      var channel, _i, _len, _ref, _results;\n      Pusher.warn = this.warn.bind(this);\n      this.pusher = new Pusher(config.key);\n      _ref = Travis.Pusher.CHANNELS;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        channel = _ref[_i];\n        _results.push(this.subscribe(channel));\n      }\n      return _results;\n    },\n    subscribe: function(channel) {\n      var _this = this;\n      if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n        this.active_channels.push(channel);\n        return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n          return _this.receive(event, data);\n        });\n      }\n    },\n    unsubscribe: function(channel) {\n      var ix;\n      ix = this.active_channels.indexOf(channel);\n      if (this.pusher && ix === -1) {\n        this.active_channels.splice(ix, 1);\n        return this.pusher.unsubscribe(this.prefix(channel));\n      }\n    },\n    prefix: function(channel) {\n      return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n    },\n    receive: function(event, data) {\n      if (event.substr(0, 6) === 'pusher') {\n        return;\n      }\n      if (data.id) {\n        data = this.normalize(event, data);\n      }\n      return Ember.run.next(function() {\n        return Travis.app.store.receive(event, data);\n      });\n    },\n    normalize: function(event, data) {\n      switch (event) {\n        case 'build:started':\n        case 'build:finished':\n          return data;\n        case 'job:created':\n        case 'job:started':\n        case 'job:finished':\n        case 'job:log':\n          if (data.queue) {\n            data.queue = data.queue.replace('builds.', '');\n          }\n          return {\n            job: data\n          };\n        case 'worker:added':\n        case 'worker:updated':\n        case 'worker:removed':\n          return {\n            worker: data\n          };\n      }\n    },\n    warn: function(type, warning) {\n      if (!this.ignoreWarning(warning)) {\n        return console.warn(warning);\n      }\n    },\n    ignoreWarning: function(warning) {\n      var message, _ref;\n      if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n        return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n\n  Travis.Router = Ember.Router.extend({\n    location: 'history',\n    enableLogging: true,\n    initialState: 'loading',\n    showRoot: Ember.Route.transitionTo('root.home.show'),\n    showStats: Ember.Route.transitionTo('root.stats'),\n    showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n    showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n    showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n    showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n    showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n    showJob: Ember.Route.transitionTo('root.home.repo.job'),\n    showProfile: Ember.Route.transitionTo('root.profile'),\n    showAccount: Ember.Route.transitionTo('root.profile.account'),\n    showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n    signedIn: function() {\n      return !!Travis.app.get('auth.user');\n    },\n    needsAuth: function(path) {\n      return path.indexOf('/profile') === 0 && !this.signedIn();\n    },\n    loading: Ember.Route.extend({\n      routePath: function(router, path) {\n        sessionStorage.setItem('travis.path', path);\n        if (router.needsAuth(path)) {\n          router.transitionTo('root.auth');\n          return Travis.app.signIn();\n        } else {\n          return router.transitionTo('authenticated');\n        }\n      }\n    }),\n    authenticated: Ember.Route.extend({\n      connectOutlets: function(router) {\n        var path;\n        path = sessionStorage.getItem('travis.path');\n        sessionStorage.removeItem('travis.path');\n        router.transitionTo('root');\n        if (path) {\n          return router.route(path);\n        }\n      }\n    }),\n    root: Ember.Route.extend({\n      initialState: 'home',\n      loading: Ember.State.extend(),\n      auth: Ember.Route.extend({\n        route: '/auth',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('authLayout');\n          $('body').attr('id', 'auth');\n          router.get('authLayoutController').connectOutlet('top', 'top');\n          return router.get('authLayoutController').connectOutlet('main', 'signin');\n        }\n      }),\n      stats: Ember.Route.extend({\n        route: '/stats',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('statsLayout');\n          $('body').attr('id', 'stats');\n          router.get('statsLayoutController').connectOutlet('top', 'top');\n          return router.get('statsLayoutController').connectOutlet('main', 'stats');\n        }\n      }),\n      profile: Ember.Route.extend({\n        initialState: 'index',\n        route: '/profile',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('profileLayout');\n          $('body').attr('id', 'profile');\n          router.get('accountsController').set('content', Travis.Account.find());\n          router.get('profileLayoutController').connectOutlet('top', 'top');\n          return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n        },\n        index: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            router.get('profileLayoutController').connectOutlet('main', 'profile');\n            return router.get('profileController').activate('hooks');\n          }\n        }),\n        account: Ember.Route.extend({\n          initialState: 'index',\n          route: '/:login',\n          connectOutlets: function(router, account) {\n            var params;\n            if (account) {\n              params = {\n                login: account.get('login')\n              };\n              return router.get('profileController').setParams(params);\n            } else {\n              return router.send('showProfile');\n            }\n          },\n          deserialize: function(router, params) {\n            return router.get('accountsController').findByLogin(params.login);\n          },\n          serialize: function(router, account) {\n            if (account) {\n              return {\n                login: account.get('login')\n              };\n            } else {\n              return {};\n            }\n          },\n          index: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('hooks');\n            }\n          }),\n          profile: Ember.Route.extend({\n            route: '/profile',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('user');\n            }\n          })\n        })\n      }),\n      home: Ember.Route.extend({\n        initialState: 'show',\n        route: '/',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('home');\n          $('body').attr('id', 'home');\n          router.get('homeController').connectOutlet('left', 'repos');\n          router.get('homeController').connectOutlet('right', 'sidebar');\n          router.get('homeController').connectOutlet('top', 'top');\n          router.get('homeController').connectOutlet('main', 'repo');\n          return router.get('homeController').connectOutlet('flash', 'flash');\n        },\n        show: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            return router.get('repoController').activate('index');\n          }\n        }),\n        repo: Ember.Route.extend({\n          initialState: 'show',\n          route: '/:owner/:name',\n          connectOutlets: function(router, repo) {\n            return router.get('repoController').set('repo', repo);\n          },\n          deserialize: function(router, params) {\n            var deferred, observer, repos, slug;\n            slug = \"\" + params.owner + \"/\" + params.name;\n            repos = Travis.Repo.bySlug(slug);\n            deferred = $.Deferred();\n            observer = function() {\n              if (repos.get('isLoaded')) {\n                repos.removeObserver('isLoaded', observer);\n                return deferred.resolve(repos.objectAt(0));\n              }\n            };\n            repos.addObserver('isLoaded', observer);\n            return deferred.promise();\n          },\n          serialize: function(router, repo) {\n            if (repo) {\n              return {\n                owner: repo.get('owner'),\n                name: repo.get('name')\n              };\n            } else {\n              return {};\n            }\n          },\n          show: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('repoController').activate('current');\n            }\n          }),\n          builds: Ember.Route.extend({\n            route: '/builds',\n            initialState: 'index',\n            index: Ember.Route.extend({\n              route: '/',\n              connectOutlets: function(router, repo) {\n                return router.get('repoController').activate('builds');\n              }\n            }),\n            show: Ember.Route.extend({\n              route: '/:build_id',\n              connectOutlets: function(router, build) {\n                if (!build.get) {\n                  build = Travis.Build.find(build);\n                }\n                router.get('repoController').set('build', build);\n                return router.get('repoController').activate('build');\n              },\n              serialize: function(router, build) {\n                if (build.get) {\n                  return {\n                    build_id: build.get('id')\n                  };\n                } else {\n                  return {\n                    build_id: build\n                  };\n                }\n              },\n              deserialize: function(router, params) {\n                var build, deferred, observer;\n                build = Travis.Build.find(params.build_id);\n                deferred = $.Deferred();\n                observer = function() {\n                  if (build.get('id')) {\n                    build.removeObserver('id', observer);\n                    return deferred.resolve(build);\n                  }\n                };\n                build.addObserver('id', observer);\n                return deferred.promise();\n              }\n            })\n          }),\n          pullRequests: Ember.Route.extend({\n            route: '/pull_requests',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('pull_requests');\n            }\n          }),\n          branches: Ember.Route.extend({\n            route: '/branches',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('branches');\n            }\n          }),\n          job: Ember.Route.extend({\n            route: '/jobs/:job_id',\n            connectOutlets: function(router, job) {\n              if (!job.get) {\n                job = Travis.Job.find(job);\n              }\n              router.get('repoController').set('job', job);\n              return router.get('repoController').activate('job');\n            },\n            serialize: function(router, job) {\n              if (job.get) {\n                return {\n                  job_id: job.get('id')\n                };\n              } else {\n                return {\n                  job_id: job\n                };\n              }\n            },\n            deserialize: function(router, params) {\n              var deferred, job, observer;\n              job = Travis.Job.find(params.job_id);\n              deferred = $.Deferred();\n              observer = function() {\n                if (job.get('id')) {\n                  job.removeObserver('id', observer);\n                  return deferred.resolve(job);\n                }\n              };\n              job.addObserver('id', observer);\n              return deferred.promise();\n            }\n          })\n        })\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n  this.Travis.Slider = function() {\n    if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n      this.minimize();\n    }\n    return this;\n  };\n\n  $.extend(Travis.Slider.prototype, {\n    persist: function() {\n      return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n    },\n    isMinimized: function() {\n      return $('body').hasClass('maximized');\n    },\n    minimize: function() {\n      return $('body').addClass('maximized');\n    },\n    toggle: function() {\n      var element;\n      $('body').toggleClass('maximized');\n      this.persist();\n      element = $('<span></span>');\n      $('#top .profile').append(element);\n      return Em.run.later((function() {\n        return element.remove();\n      }), 10);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n  var DATA_PROXY,\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n  DATA_PROXY = {\n    get: function(name) {\n      return this.savedData[name];\n    }\n  };\n\n  Travis.Store = DS.Store.extend({\n    revision: 4,\n    adapter: Travis.RestAdapter.create(),\n    merge: function(type, id, hash) {\n      var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n      if (hash === void 0) {\n        hash = id;\n        primaryKey = type.proto().primaryKey;\n        Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n        id = hash[primaryKey];\n      }\n      typeMap = this.typeMapFor(type);\n      dataCache = typeMap.cidToHash;\n      clientId = typeMap.idToCid[id];\n      recordCache = this.get('recordCache');\n      if (clientId !== void 0) {\n        if (data = dataCache[clientId]) {\n          $.extend(data, hash);\n        } else {\n          dataCache[clientId] = hash;\n        }\n        if (record = recordCache[clientId]) {\n          record.send('didChangeData');\n        }\n      } else {\n        clientId = this.find(type, id).get('clientId');\n      }\n      if (clientId) {\n        DATA_PROXY.savedData = hash;\n        this.updateRecordArrays(type, clientId, DATA_PROXY);\n        return {\n          id: id,\n          clientId: clientId\n        };\n      }\n    },\n    receive: function(event, data) {\n      var job, mappings, name, type, _ref;\n      _ref = event.split(':'), name = _ref[0], type = _ref[1];\n      mappings = this.adapter.get('mappings');\n      type = mappings[name];\n      if (event === 'job:log') {\n        if (job = this.find(Travis.Job, data['job']['id'])) {\n          return job.appendLog(data['job']['_log']);\n        }\n      } else if (data[type.singularName()]) {\n        return this._loadOne(this, type, data);\n      } else if (data[type.pluralName()]) {\n        return this._loadMany(this, type, data);\n      } else {\n        if (!type) {\n          throw \"can't load data for \" + name;\n        }\n      }\n    },\n    _loadOne: function(store, type, json) {\n      var root;\n      root = type.singularName();\n      this.adapter.sideload(store, type, json, root);\n      this.merge(type, json[root]);\n      return this._updateAssociations(type, root, json[root]);\n    },\n    _loadMany: function(store, type, json) {\n      var root;\n      root = type.pluralName();\n      this.adapter.sideload(store, type, json, root);\n      return this.loadMany(type, json[root]);\n    },\n    _updateAssociations: function(type, name, data) {\n      var _this = this;\n      return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n        var clientId, dataProxy, id, ids, parent, _ref;\n        if (meta.kind === 'belongsTo') {\n          id = data[\"\" + key + \"_id\"];\n          if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n            if (parent = _this.findByClientId(meta.type, clientId, id)) {\n              dataProxy = parent.get('data');\n              if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n                if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n                  ids.pushObject(data.id);\n                }\n                return parent.send('didChangeData');\n              }\n            }\n          }\n        }\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n  this.Travis.FixtureAdapter = DS.Adapter.extend({\n    find: function(store, type, id) {\n      var fixtures;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      if (fixtures.hasLoaded) {\n        return;\n      }\n      return setTimeout((function() {\n        store.loadMany(type, fixtures);\n        return fixtures.hasLoaded = true;\n      }), 300);\n    },\n    findMany: function() {\n      return this.find.apply(this, arguments);\n    },\n    findAll: function(store, type) {\n      var fixtures, ids;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      ids = fixtures.map(function(item, index, self) {\n        return item.id;\n      });\n      return store.loadMany(type, ids, fixtures);\n    },\n    findQuery: function(store, type, params, array) {\n      var fixture, fixtures, hashes, key, matches, value;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      hashes = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n          fixture = fixtures[_i];\n          matches = (function() {\n            var _results1;\n            _results1 = [];\n            for (key in params) {\n              value = params[key];\n              _results1.push(key === 'orderBy' || fixture[key] === value);\n            }\n            return _results1;\n          })();\n          if (matches.reduce(function(a, b) {\n            return a && b;\n          })) {\n            _results.push(fixture);\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      })();\n      return array.load(hashes.compact());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n  this.Travis.RestAdapter = DS.RESTAdapter.extend(Travis.Ajax, {\n    mappings: {\n      repositories: Travis.Repo,\n      repository: Travis.Repo,\n      repos: Travis.Repo,\n      repo: Travis.Repo,\n      builds: Travis.Build,\n      build: Travis.Build,\n      commits: Travis.Commit,\n      commit: Travis.Commit,\n      jobs: Travis.Job,\n      job: Travis.Job,\n      account: Travis.Account,\n      accounts: Travis.Account,\n      worker: Travis.Worker,\n      workers: Travis.Worker\n    },\n    plurals: {\n      repositories: 'repositories',\n      repository: 'repositories',\n      repo: 'repositories',\n      repos: 'repositories',\n      build: 'builds',\n      branch: 'branches',\n      job: 'jobs',\n      worker: 'workers',\n      profile: 'profile'\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n  this.Travis.Tailing = function() {\n    this.position = $(window).scrollTop();\n    $(window).scroll(this.onScroll.bind(this));\n    return this;\n  };\n\n  $.extend(Travis.Tailing.prototype, {\n    options: {\n      timeout: 200\n    },\n    run: function() {\n      this.autoScroll();\n      this.positionButton();\n      if (this.active()) {\n        return Ember.run.later(this.run.bind(this), this.options.timeout);\n      }\n    },\n    toggle: function(event) {\n      if (this.active()) {\n        return this.stop();\n      } else {\n        return this.start();\n      }\n    },\n    active: function() {\n      return $('#tail').hasClass('active');\n    },\n    start: function() {\n      $('#tail').addClass('active');\n      return this.run();\n    },\n    stop: function() {\n      return $('#tail').removeClass('active');\n    },\n    autoScroll: function() {\n      var log, logBottom, win, winBottom;\n      if (!this.active()) {\n        return;\n      }\n      win = $(window);\n      log = $('#log');\n      logBottom = log.offset().top + log.outerHeight() + 40;\n      winBottom = win.scrollTop() + win.height();\n      if (logBottom - winBottom > 0) {\n        return win.scrollTop(logBottom - win.height());\n      }\n    },\n    onScroll: function() {\n      var position;\n      this.positionButton();\n      position = $(window).scrollTop();\n      if (position < this.position) {\n        this.stop();\n      }\n      return this.position = position;\n    },\n    positionButton: function() {\n      var max, offset, tail;\n      tail = $('#tail');\n      if (tail.length === 0) {\n        return;\n      }\n      offset = $(window).scrollTop() - $('#log').offset().top;\n      max = $('#log').height() - $('#tail').height() + 5;\n      if (offset > max) {\n        offset = max;\n      }\n      if (offset > 0) {\n        return tail.css({\n          top: offset - 2\n        });\n      } else {\n        return tail.css({\n          top: 0\n        });\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n  this.Travis.reopen({\n    View: Em.View.extend({\n      popup: function(event) {\n        this.popupCloseAll();\n        return $(\"#\" + event.target.name).toggleClass('display');\n      },\n      popupClose: function(event) {\n        return $(event.target).closest('.popup').removeClass('display');\n      },\n      popupCloseAll: function() {\n        return $('.popup').removeClass('display');\n      }\n    })\n  });\n\n  this.Travis.reopen({\n    HomeView: Travis.View.extend({\n      templateName: 'layouts/home'\n    }),\n    AuthLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ProfileLayoutView: Travis.View.extend({\n      templateName: 'layouts/profile'\n    }),\n    StatsLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ApplicationView: Travis.View.extend({\n      templateName: 'application'\n    })\n  });\nminispade.require('views/accounts');\nminispade.require('views/build');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n  this.Travis.reopen({\n    AccountsView: Travis.View.extend({\n      tabBinding: 'controller.tab',\n      templateName: 'profile/accounts',\n      classAccounts: (function() {\n        if (this.get('tab') === 'accounts') {\n          return 'active';\n        }\n      }).property('tab')\n    }),\n    AccountsListView: Em.CollectionView.extend({\n      elementId: 'accounts',\n      accountBinding: 'content',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        accountBinding: 'content',\n        typeBinding: 'content.type',\n        selectedBinding: 'account.selected',\n        classNames: ['account'],\n        classNameBindings: ['type', 'selected'],\n        name: (function() {\n          return this.get('content.name') || this.get('content.login');\n        }).property('content.login', 'content.name'),\n        urlAccount: (function() {\n          return Travis.Urls.account(this.get('account.login'));\n        }).property('account.login')\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/build', "(function() {(function() {\n\n  this.Travis.reopen({\n    BuildsView: Travis.View.extend({\n      templateName: 'builds/list',\n      buildsBinding: 'controller.builds',\n      showMore: function() {\n        var id, number;\n        id = this.get('controller.repo.id');\n        number = this.get('builds.lastObject.number');\n        return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n      },\n      ShowMoreButton: Em.View.extend({\n        tagName: 'button',\n        classNameBindings: ['isLoading'],\n        attributeBindings: ['disabled'],\n        isLoadingBinding: 'controller.builds.isLoading',\n        template: Em.Handlebars.compile('{{view.label}}'),\n        disabledBinding: 'isLoading',\n        label: (function() {\n          if (this.get('isLoading')) {\n            return 'Loading';\n          } else {\n            return 'Show more';\n          }\n        }).property('isLoading'),\n        click: function() {\n          return this.get('parentView').showMore();\n        }\n      })\n    }),\n    BuildsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'context',\n      commitBinding: 'build.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha')\n    }),\n    BuildView: Travis.View.extend({\n      templateName: 'builds/show',\n      elementId: 'build',\n      classNameBindings: ['color', 'loading'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      commitBinding: 'build.commit',\n      loading: (function() {\n        return !this.get('build.isLoaded');\n      }).property('build.isLoaded'),\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/flash', "(function() {(function() {\n\n  this.Travis.reopen({\n    FlashView: Travis.View.extend({\n      elementId: 'flash',\n      templateName: 'layouts/flash',\n      flashBinding: 'controller.firstObject',\n      classNameBindings: ['flash.type'],\n      messageBinding: 'flash.message',\n      close: function(event) {\n        return this.get('controller').shiftObject();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n  this.Travis.reopen({\n    JobsView: Travis.View.extend({\n      templateName: 'jobs/list',\n      buildBinding: 'controller.build'\n    }),\n    JobsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'context.repo',\n      jobBinding: 'context',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id')\n    }),\n    JobView: Travis.View.extend({\n      templateName: 'jobs/show',\n      repoBinding: 'controller.repo',\n      jobBinding: 'controller.job',\n      commitBinding: 'job.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    }),\n    LogView: Travis.View.extend({\n      templateName: 'jobs/log',\n      logBinding: 'job.log',\n      click: function(event) {\n        return $(event.target).closest('.fold').toggleClass('open');\n      },\n      toTop: function() {\n        return $(window).scrollTop(0);\n      },\n      jobBinding: 'context',\n      toggleTailing: function(event) {\n        Travis.app.tailing.toggle();\n        return event.preventDefault();\n      },\n      logSubscriber: (function() {\n        var job, state;\n        job = this.get('job');\n        state = this.get('job.state');\n        if (job && state !== 'finished') {\n          job.subscribe();\n        }\n        return null;\n      }).property('job', 'job.state')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      tabBinding: 'controller.tab',\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n  this.Travis.reopen({\n    ProfileView: Travis.View.extend({\n      templateName: 'profile/show',\n      accountBinding: 'controller.account',\n      name: (function() {\n        return this.get('account.name') || this.get('account.login');\n      }).property('account.name', 'account.login')\n    }),\n    ProfileTabsView: Travis.View.extend({\n      templateName: 'profile/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classHooks: (function() {\n        if (this.get('tab') === 'hooks') {\n          return 'active';\n        }\n      }).property('tab'),\n      classUser: (function() {\n        if (this.get('tab') === 'user') {\n          return 'active';\n        }\n      }).property('tab'),\n      accountBinding: 'controller.account',\n      displayUser: (function() {\n        return this.get('controller.account.login') === this.get('controller.user.login');\n      }).property('controller.account.login', 'controller.user.login')\n    }),\n    HooksView: Travis.View.extend({\n      templateName: 'profile/tabs/hooks',\n      userBinding: 'controller.user',\n      urlGithubAdmin: (function() {\n        return Travis.Urls.githubAdmin(this.get('hook.slug'));\n      }).property('hook.slug')\n    }),\n    UserView: Travis.View.extend({\n      templateName: 'profile/tabs/user',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n      }).property('user.gravatarId'),\n      locales: (function() {\n        return [\n          {\n            key: null,\n            name: ''\n          }, {\n            key: 'en',\n            name: 'English'\n          }, {\n            key: 'ca',\n            name: 'Catalan'\n          }, {\n            key: 'cs',\n            name: 'Čeština'\n          }, {\n            key: 'es',\n            name: 'Español'\n          }, {\n            key: 'fr',\n            name: 'Français'\n          }, {\n            key: 'ja',\n            name: '日本語'\n          }, {\n            key: 'nl',\n            name: 'Nederlands'\n          }, {\n            key: 'nb',\n            name: 'Norsk Bokmål'\n          }, {\n            key: 'pl',\n            name: 'Polski'\n          }, {\n            key: {\n              'pt-BR': {\n                name: 'Português brasileiro'\n              }\n            }\n          }, {\n            key: 'ru',\n            name: 'Русский'\n          }\n        ];\n      }).property(),\n      saveLocale: function(event) {\n        return this.get('user').updateLocale($('#locale').val());\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      toggleInfo: function(event) {\n        return $('#repos').toggleClass('open');\n      }\n    }),\n    ReposListView: Em.CollectionView.extend({\n      elementId: 'repos',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        repoBinding: 'content',\n        classNames: ['repo'],\n        classNameBindings: ['color', 'selected'],\n        selectedBinding: 'repo.selected',\n        color: (function() {\n          return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n        }).property('repo.lastBuildResult'),\n        urlRepo: (function() {\n          return Travis.Urls.repo(this.get('repo.slug'));\n        }).property('repo.slug'),\n        urlLastBuild: (function() {\n          return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n        }).property('repo.slug', 'repo.lastBuildId')\n      })\n    }),\n    ReposListTabsView: Travis.View.extend({\n      templateName: 'repos/list/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepoView: Travis.View.extend({\n      templateName: 'repos/show',\n      repoBinding: 'controller.repo',\n      \"class\": (function() {\n        if (!this.get('repo.isLoaded')) {\n          return 'loading';\n        }\n      }).property('repo.isLoaded'),\n      urlGithub: (function() {\n        return Travis.Urls.githubRepo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubWatchers: (function() {\n        return Travis.Urls.githubWatchers(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubNetwork: (function() {\n        return Travis.Urls.githubNetwork(this.get('repo.slug'));\n      }).property('repo.slug')\n    }),\n    RepoShowTabsView: Travis.View.extend({\n      templateName: 'repos/show/tabs',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      classCurrent: (function() {\n        if (this.get('tab') === 'current') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuilds: (function() {\n        if (this.get('tab') === 'builds') {\n          return 'active';\n        }\n      }).property('tab'),\n      classPullRequests: (function() {\n        if (this.get('tab') === 'pull_requests') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBranches: (function() {\n        if (this.get('tab') === 'branches') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuild: (function() {\n        var classes, tab;\n        tab = this.get('tab');\n        classes = [];\n        if (tab === 'build') {\n          classes.push('active');\n        }\n        if (tab === 'build' || tab === 'job') {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab'),\n      classJob: (function() {\n        if (this.get('tab') === 'job') {\n          return 'active display-inline';\n        }\n      }).property('tab')\n    }),\n    RepoShowToolsView: Travis.View.extend({\n      templateName: 'repos/show/tools',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      closeMenu: function() {\n        return $('.menu').removeClass('display');\n      },\n      menu: function() {\n        var element;\n        this.popupCloseAll();\n        return element = $('#tools .menu').toggleClass('display');\n      },\n      requeue: function() {\n        this.closeMenu();\n        return this.get('build').requeue();\n      },\n      statusImages: function(event) {\n        this.set('active', true);\n        this.closeMenu();\n        return this.popup(event);\n      },\n      canPush: (function() {\n        return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n      }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n      isBuildTab: (function() {\n        return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n      }).property('tab'),\n      hasPushPermissions: (function() {\n        return Travis.app.get('currentUser.permissions').indexOf(this.get('repo.id')) > -1;\n      }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n      branches: (function() {\n        if (this.get('active')) {\n          return this.get('repo.branches');\n        }\n      }).property('active', 'repo.branches'),\n      urlRepo: (function() {\n        return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlStatusImage: (function() {\n        return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n      }).property('repo.slug', 'branch'),\n      markdownStatusImage: (function() {\n        return \"[![Build Status](\" + (this.get('urlStatusImage')) + \")](\" + (this.get('urlRepo')) + \")\";\n      }).property('urlStatusImage'),\n      textileStatusImage: (function() {\n        return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n      }).property('urlStatusImage'),\n      rdocStatusImage: (function() {\n        return \"{<img src=\\\"\" + (this.get('urlStatusImage')) + \"\\\" alt=\\\"Build Status\\\" />}[\" + (this.get('urlRepo')) + \"]\";\n      }).property('urlStatusImage')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n  this.Travis.reopen({\n    SidebarView: Travis.View.extend({\n      templateName: 'layouts/sidebar',\n      DecksView: Em.View.extend({\n        templateName: \"sponsors/decks\",\n        controller: Travis.SponsorsController.create({\n          perPage: 1\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n            controller.set('content', Travis.Sponsor.decks());\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      LinksView: Em.View.extend({\n        templateName: \"sponsors/links\",\n        controller: Travis.SponsorsController.create({\n          perPage: 6\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            controller.set('content', Travis.Sponsor.links());\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      WorkersView: Em.View.extend({\n        templateName: 'workers/list',\n        controller: Travis.WorkersController.create(),\n        didInsertElement: function() {\n          this.set('controller.content', Travis.Worker.find());\n          return this._super.apply(this, arguments);\n        }\n      }),\n      QueuesView: Em.View.extend({\n        templateName: 'queues/list',\n        controller: Travis.QueuesController.create(),\n        didInsertElement: function() {\n          var queue, queues;\n          queues = (function() {\n            var _i, _len, _ref, _results;\n            _ref = Travis.QUEUES;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              queue = _ref[_i];\n              _results.push(Em.ArrayController.create({\n                content: Travis.Job.queued(queue.name),\n                id: \"queue_\" + queue.name,\n                name: queue.display\n              }));\n            }\n            return _results;\n          })();\n          this.set('controller.content', queues);\n          return this._super.apply(this, arguments);\n        }\n      })\n    }),\n    WorkersView: Travis.View.extend({\n      toggleWorkers: function(event) {\n        var handle;\n        handle = $(event.target).toggleClass('open');\n        if (handle.hasClass('open')) {\n          return $('#workers li').addClass('open');\n        } else {\n          return $('#workers li').removeClass('open');\n        }\n      }\n    }),\n    WorkersListView: Travis.View.extend({\n      toggle: function(event) {\n        return $(event.target).closest('li').toggleClass('open');\n      }\n    }),\n    WorkersItemView: Travis.View.extend({\n      display: (function() {\n        var name, number, payload, repo, state;\n        name = (this.get('worker.name') || '').replace('travis-', '');\n        state = this.get('worker.state');\n        payload = this.get('worker.payload');\n        if (state === 'working' && (payload != null ? payload.repo : void 0) && (payload != null ? payload.build : void 0)) {\n          repo = payload.repo.slug;\n          number = ' #' + payload.build.number;\n          return (\"<span class='name'>\" + name + \": \" + repo + \"</span> \" + number).htmlSafe();\n        } else {\n          return \"\" + name + \": \" + state;\n        }\n      }).property('worker.state')\n    }),\n    QueueItemView: Travis.View.extend({\n      tagName: 'li',\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('job.repo.slug'), this.get('job.id'));\n      }).property('job.repo.slug', 'job.id')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n  this.Travis.reopen({\n    SigninView: Travis.View.extend({\n      templateName: 'auth/signin',\n      signingIn: (function() {\n        return Travis.app.get('authState');\n      }).property('Travis.app.authState')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n  this.Travis.reopen({\n    StatsView: Travis.View.extend({\n      templateName: 'stats/show',\n      didInsertElement: function() {},\n      renderChart: function(config) {\n        var chart;\n        chart = new Highcharts.Chart(config);\n        return this.fetch(config.source, function(data) {\n          var stats;\n          stats = (function() {\n            var _i, _len, _ref, _results;\n            _ref = data.stats;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              stats = _ref[_i];\n              _results.push(config.map(stats));\n            }\n            return _results;\n          })();\n          return chart.series[0].setData(stats);\n        });\n      },\n      fetch: function(url, callback) {\n        return $.ajax({\n          type: 'GET',\n          url: url,\n          accepts: {\n            json: 'application/vnd.travis-ci.2+json'\n          },\n          success: callback\n        });\n      },\n      CHARTS: {\n        repos: {\n          source: '/api/stats/repos',\n          total: 0,\n          map: function(data) {\n            return [Date.parse(data.date), this.total += parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"repos_stats\"\n          },\n          title: {\n            text: \"Total Projects/Repositories\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n            }\n          },\n          series: [\n            {\n              name: \"Repository Growth\",\n              data: []\n            }\n          ]\n        },\n        builds: {\n          source: '/api/stats/tests',\n          map: function(data) {\n            return [Date.parse(data.date), parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"tests_stats\",\n            type: \"column\"\n          },\n          title: {\n            text: \"Build Count\"\n          },\n          subtitle: {\n            text: \"last month\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n            }\n          },\n          series: [\n            {\n              name: \"Total Builds\",\n              data: []\n            }\n          ]\n        }\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n  this.Travis.reopen({\n    TopView: Travis.View.extend({\n      templateName: 'layouts/top',\n      tabBinding: 'controller.tab',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n      }).property('user.gravatarId'),\n      classHome: (function() {\n        if (this.get('tab') === 'home') {\n          return 'active';\n        }\n      }).property('tab'),\n      classStats: (function() {\n        if (this.get('tab') === 'stats') {\n          return 'active';\n        }\n      }).property('tab'),\n      classProfile: (function() {\n        var classes;\n        classes = ['profile'];\n        if (this.get('tab') === 'profile') {\n          classes.push('active');\n        }\n        classes.push(Travis.app.get('authState'));\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.authState'),\n      showProfile: function() {\n        return $('#top .profile ul').show();\n      },\n      hideProfile: function() {\n        return $('#top .profile ul').hide();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('data/sponsors', "(function() {(function() {\n\n  this.Travis.SPONSORS = [\n    {\n      type: 'platinum',\n      url: \"http://www.wooga.com\",\n      image: \"wooga-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://bendyworks.com\",\n      image: \"bendyworks-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://cloudcontrol.com\",\n      image: \"cloudcontrol-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://xing.de\",\n      image: \"xing-205x130.png\"\n    }, {\n      type: 'gold',\n      url: \"http://heroku.com\",\n      image: \"heroku-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://soundcloud.com\",\n      image: \"soundcloud-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://nedap.com\",\n      image: \"nedap-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://mongohq.com\",\n      image: \"mongohq-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://zweitag.de\",\n      image: \"zweitag-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://kanbanery.com\",\n      image: \"kanbanery-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://ticketevolution.com\",\n      image: \"ticketevolution-205x60.jpg\"\n    }, {\n      type: 'gold',\n      url: \"http://plan.io/travis\",\n      image: \"planio-205x60.png\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cobot.me\\\">Cobot</a><span>: The one tool to run your coworking space</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://jumpstartlab.com\\\">JumpstartLab</a><span>: We build developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://evilmartians.com\\\">Evil Martians</a><span>: Agile Ruby on Rails development</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://zendesk.com\\\">Zendesk</a><span>: Love your helpdesk</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://stripe.com\\\">Stripe</a><span>: Payments for developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://basho.com\\\">Basho</a><span>: We make Riak!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://thinkrelevance.com\\\">Relevance</a><span>: We deliver software solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://mindmatters.de\\\">Mindmatters</a><span>: Software für Menschen</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://amenhq.com\\\">Amen</a><span>: The best and worst of everything</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://site5.com\\\">Site5</a><span>: Premium Web Hosting Solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.crowdint.com\\\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.atomicobject.com/detroit\\\">Atomic Object</a><span>: Work with really smart people</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://codeminer.com.br\\\">Codeminer</a><span>: smart services for your startup</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cloudant.com\\\">Cloudant</a><span>: grow into your data layer, not out of it</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://gidsy.com\\\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://5apps.com\\\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://meltmedia.com\\\">Meltmedia</a><span>: We are Interactive Superheroes</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.fngtps.com\\\">Fingertips</a><span> offers design and development services</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.engineyard.com\\\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://malwarebytes.org\\\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://readmill.com\\\">Readmill</a><span>: The best reading app on the iPad.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.mdsol.com\\\">Medidata</a><span>: clinical tech improving quality of life</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://coderwall.com/teams/4f27194e973bf000040005f0\\\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://twitter.com\\\">Twitter</a><span>: instantly connects people everywhere</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://agileanimal.com\\\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://tupalo.com\\\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>\"\n    }\n  ];\n\n  this.Travis.WORKERS = {\n    \"jvm-otp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://travis-ci.com\"\n    },\n    \"jvm-otp2.worker.travis-ci.org\": {\n      name: \"Transloadit\",\n      url: \"http://transloadit.com\"\n    },\n    \"ppp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://beta.travis-ci.com\"\n    },\n    \"ppp2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ppp3.worker.travis-ci.org\": {\n      name: \"Alchemy CMS\",\n      url: \"http://alchemy-cms.com/\"\n    },\n    \"rails1.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby1.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"ruby2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby3.worker.travis-ci.org\": {\n      name: \"Railslove\",\n      url: \"http://railslove.de\"\n    },\n    \"ruby4.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"spree.worker.travis-ci.org\": {\n      name: \"Spree\",\n      url: \"http://spreecommerce.com\"\n    },\n    \"staging.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('emoij', "(function() {(function() {\n\n  this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n  $.fn.extend({\n    outerHtml: function() {\n      return $(this).wrap('<div></div>').parent().html();\n    },\n    outerElement: function() {\n      return $($(this).outerHtml()).empty();\n    },\n    flash: function() {\n      return Utils.flash(this);\n    },\n    unflash: function() {\n      return Utils.unflash(this);\n    },\n    filterLog: function() {\n      this.deansi();\n      return this.foldLog();\n    },\n    deansi: function() {\n      return this.html(Utils.deansi(this.html()));\n    },\n    foldLog: function() {\n      return this.html(Utils.foldLog(this.html()));\n    },\n    unfoldLog: function() {\n      return this.html(Utils.unfoldLog(this.html()));\n    },\n    updateTimes: function() {\n      return Utils.updateTimes(this);\n    },\n    activateTab: function(tab) {\n      return Utils.activateTab(this, tab);\n    },\n    timeInWords: function() {\n      return $(this).each(function() {\n        return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n      });\n    },\n    updateGithubStats: function(repo) {\n      return Utils.updateGithubStats(repo, $(this));\n    }\n  });\n\n  $.extend({\n    isEmpty: function(obj) {\n      if ($.isArray(obj)) {\n        return !obj.length;\n      } else if ($.isObject(obj)) {\n        return !$.keys(obj).length;\n      } else {\n        return !obj;\n      }\n    },\n    isObject: function(obj) {\n      return Object.prototype.toString.call(obj) === '[object Object]';\n    },\n    keys: function(obj) {\n      var keys;\n      keys = [];\n      $.each(obj, function(key) {\n        return keys.push(key);\n      });\n      return keys;\n    },\n    values: function(obj) {\n      var values;\n      values = [];\n      $.each(obj, function(key, value) {\n        return values.push(value);\n      });\n      return values;\n    },\n    underscore: function(string) {\n      return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n        if (chr) {\n          return \"_\" + (chr.toUpperCase());\n        } else {\n          return '';\n        }\n      });\n    },\n    camelize: function(string, uppercase) {\n      string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n      return string.replace(/_(.)?/g, function(match, chr) {\n        if (chr) {\n          return chr.toUpperCase();\n        } else {\n          return '';\n        }\n      });\n    },\n    capitalize: function(string) {\n      return string[0].toUpperCase() + string.substring(1);\n    },\n    compact: function(object) {\n      return $.grep(object, function(value) {\n        return !!value;\n      });\n    },\n    all: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return false;\n        }\n        i++;\n      }\n      return true;\n    },\n    detect: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return array[i];\n        }\n        i++;\n      }\n    },\n    select: function(array, callback) {\n      var args, i, result;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      result = [];\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          result.push(array[i]);\n        }\n        i++;\n      }\n      return result;\n    },\n    slice: function(object, key) {\n      var keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) > -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    only: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) !== -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    except: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) === -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    intersect: function(array, other) {\n      return array.filter(function(element) {\n        return other.indexOf(element) !== -1;\n      });\n    },\n    map: function(elems, callback, arg) {\n      var i, isArray, key, length, ret, value;\n      value = void 0;\n      key = void 0;\n      ret = [];\n      i = 0;\n      length = elems.length;\n      isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n      if (isArray) {\n        while (i < length) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n          i++;\n        }\n      } else {\n        for (key in elems) {\n          value = callback(elems[key], key, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n        }\n      }\n      return ret.concat.apply([], ret);\n    },\n    shuffle: function(array) {\n      var current, tmp, top;\n      array = array.slice();\n      top = array.length;\n      while (top && --top) {\n        current = Math.floor(Math.random() * (top + 1));\n        tmp = array[current];\n        array[current] = array[top];\n        array[top] = tmp;\n      }\n      return array;\n    },\n    truncate: function(string, length) {\n      if (string.length > length) {\n        return string.trim().substring(0, length) + '...';\n      } else {\n        return string;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n  jQuery.support.cors = true;\n\n  this.Travis.Ajax = Ember.Mixin.create({\n    DEFAULT_OPTIONS: {\n      accepts: {\n        json: 'application/vnd.travis-ci.2+json'\n      }\n    },\n    post: function(url, data, callback) {\n      return this.ajax(url, 'post', {\n        data: data,\n        success: callback\n      });\n    },\n    ajax: function(url, method, options) {\n      var endpoint, token, _base;\n      endpoint = Travis.config.api_endpoint || '';\n      options = options || {};\n      if (token = sessionStorage.getItem('travis.token')) {\n        options.headers || (options.headers = {});\n        (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n      }\n      options.url = \"\" + endpoint + url;\n      options.type = method;\n      options.dataType = 'json';\n      options.contentType = 'application/json; charset=utf-8';\n      options.context = this;\n      if (options.data && method !== 'GET' && method !== 'get') {\n        options.data = JSON.stringify(options.data);\n      }\n      return $.ajax($.extend(options, this.DEFAULT_OPTIONS));\n    }\n  });\n\n  this.Travis.ajax = Em.Object.create(this.Travis.Ajax, {\n    get: function(url, callback) {\n      return this.ajax(url, 'get', {\n        success: callback\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n  Travis.ExpandableRecordArray = DS.RecordArray.extend({\n    isLoaded: false,\n    isLoading: false,\n    load: function(array) {\n      var observer, self;\n      this.set('isLoading', true);\n      self = this;\n      observer = function() {\n        var content;\n        if (this.get('isLoaded')) {\n          content = self.get('content');\n          array.removeObserver('isLoaded', observer);\n          array.forEach(function(record) {\n            return self.pushObject(record);\n          });\n          self.set('isLoading', false);\n          return self.set('isLoaded', true);\n        }\n      };\n      return array.addObserver('isLoaded', observer);\n    },\n    pushObject: function(record) {\n      var clientId, id, ids;\n      ids = this.get('content');\n      id = record.get('id');\n      clientId = record.get('clientId');\n      if (ids.contains(clientId)) {\n        return;\n      }\n      return ids.pushObject(clientId);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/log', "(function() {(function() {\n\n  this.Travis.Log = {\n    FOLDS: {\n      schema: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?<p.*?\\/a>-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n<p.*?\\/a>.*<\\/p>)/g,\n      migrate: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n      bundle: /(<p.*?\\/a>\\$ bundle install.*<\\/p>\\n(<p.*?\\/a>(Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<p.*?\\/a><\\/p>\\n)*)/g,\n      exec: /(<p.*?\\/a>[\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n    },\n    filter: function(log) {\n      log = this.escape(log);\n      log = this.deansi(log);\n      log = log.replace(/\\r/g, '');\n      log = this.number(log);\n      log = this.fold(log);\n      log = log.replace(/\\n/g, '');\n      return log;\n    },\n    stripPaths: function(log) {\n      return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n    },\n    escape: function(log) {\n      return Handlebars.Utils.escapeExpression(log);\n    },\n    escapeRuby: function(log) {\n      return log.replace(/#<(\\w+.*?)>/, '#&lt;$1&gt;');\n    },\n    number: function(log) {\n      var result;\n      result = '';\n      $.each(log.trim().split('\\n'), function(ix, line) {\n        var number, path;\n        number = ix + 1;\n        path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n        return result += '<p><a href=\\'#%@\\' id=\\'%@\\' name=\\'L%@\\'>%@</a>%@</p>\\n'.fmt(path, path, number, number, line);\n      });\n      return result.trim();\n    },\n    deansi: function(log) {\n      var ansi, text;\n      log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n      ansi = ansiparse(log);\n      text = '';\n      ansi.forEach(function(part) {\n        var classes;\n        classes = [];\n        part.foreground && classes.push(part.foreground);\n        part.background && classes.push('bg-' + part.background);\n        part.bold && classes.push('bold');\n        part.italic && classes.push('italic');\n        return text += (classes.length ? '<span class=\\'' + classes.join(' ') + '\\'>' + part.text + '</span>' : part.text);\n      });\n      return text.replace(/\\033/g, '');\n    },\n    fold: function(log) {\n      log = this.unfold(log);\n      $.each(Travis.Log.FOLDS, function(name, pattern) {\n        return log = log.replace(pattern, function() {\n          return '<div class=\\'fold ' + name + '\\'>' + arguments[1].trim() + '</div>';\n        });\n      });\n      return log;\n    },\n    unfold: function(log) {\n      return log.replace(/<div class='fold[^']*'>([\\s\\S]*?)<\\/div>/g, '$1\\n');\n    },\n    location: function() {\n      return window.location.hash;\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n  this.Travis.Model = DS.Model.extend({\n    primaryKey: 'id',\n    id: DS.attr('number'),\n    refresh: function() {\n      var id;\n      id = this.get('id');\n      if (id) {\n        return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n      }\n    },\n    update: function(attrs) {\n      var _this = this;\n      $.each(attrs, function(key, value) {\n        if (key !== 'id') {\n          return _this.set(key, value);\n        }\n      });\n      return this;\n    }\n  });\n\n  this.Travis.Model.reopenClass({\n    find: function() {\n      if (arguments.length === 0) {\n        return Travis.app.store.findAll(this);\n      } else {\n        return this._super.apply(this, arguments);\n      }\n    },\n    filter: function(callback) {\n      return Travis.app.store.filter(this, callback);\n    },\n    load: function(attrs) {\n      return Travis.app.store.load(this, attrs);\n    },\n    buildURL: function(suffix) {\n      var base, url;\n      base = this.url || this.pluralName();\n      Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n      Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n      url = [base];\n      if (suffix !== void 0) {\n        url.push(suffix);\n      }\n      return url.join('/');\n    },\n    singularName: function() {\n      var name, parts;\n      parts = this.toString().split('.');\n      name = parts[parts.length - 1];\n      return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n    },\n    pluralName: function() {\n      return Travis.app.store.adapter.pluralize(this.singularName());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n  this.Travis.Ticker = Ember.Object.extend({\n    init: function() {\n      if (this.get('interval') !== -1) {\n        return this.schedule();\n      }\n    },\n    tick: function() {\n      var context, target, targets, _i, _len;\n      context = this.get('context');\n      targets = this.get('targets') || [this.get('target')];\n      for (_i = 0, _len = targets.length; _i < _len; _i++) {\n        target = targets[_i];\n        if (context) {\n          target = context.get(target);\n        }\n        if (target) {\n          target.tick();\n        }\n      }\n      return this.schedule();\n    },\n    schedule: function() {\n      var _this = this;\n      return Ember.run.later((function() {\n        return _this.tick();\n      }), this.get('interval') || Travis.app.TICK_INTERVAL);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n  this.Travis = Em.Namespace.create({\n    config: {\n      api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href')\n    },\n    CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n    ROUTES: {\n      'profile/:login/me': ['profile', 'user'],\n      'profile/:login': ['profile', 'hooks'],\n      'profile': ['profile', 'hooks'],\n      'stats': ['stats', 'show'],\n      ':owner/:name/jobs/:id/:line': ['home', 'job'],\n      ':owner/:name/jobs/:id': ['home', 'job'],\n      ':owner/:name/builds/:id': ['home', 'build'],\n      ':owner/:name/builds': ['home', 'builds'],\n      ':owner/:name/pull_requests': ['home', 'pullRequests'],\n      ':owner/:name/branches': ['home', 'branches'],\n      ':owner/:name': ['home', 'current'],\n      '': ['home', 'index'],\n      '#': ['home', 'index']\n    },\n    QUEUES: [\n      {\n        name: 'common',\n        display: 'Common'\n      }, {\n        name: 'php',\n        display: 'PHP, Perl and Python'\n      }, {\n        name: 'node_js',\n        display: 'Node.js'\n      }, {\n        name: 'jvmotp',\n        display: 'JVM and Erlang'\n      }, {\n        name: 'rails',\n        display: 'Rails'\n      }, {\n        name: 'spree',\n        display: 'Spree'\n      }\n    ],\n    INTERVALS: {\n      sponsors: -1,\n      times: -1,\n      updateTimes: 1000\n    },\n    run: function(attrs) {\n      var _this = this;\n      if (location.hash.slice(0, 2) === '#!') {\n        location.href = location.href.replace('#!/', '');\n      }\n      return this.loadConfig(function(config) {\n        var app;\n        app = Travis.App.create(attrs || {});\n        $.each(Travis, function(key, value) {\n          if (value && value.isClass && key !== 'constructor') {\n            return app[key] = value;\n          }\n        });\n        _this.app = app;\n        _this.store = app.store;\n        return $(function() {\n          return app.initialize();\n        });\n      });\n    },\n    loadConfig: function(callback) {\n      var _this = this;\n      return this.ajax.get('/config', function(data) {\n        $.extend(_this.config, data.config);\n        console.log(\"Connecting to \" + data.config.api_endpoint);\n        return callback(data.config);\n      });\n    }\n  });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\n  <h1>Signing in</h1>\\n  <p>\\n    Trying to authenticate with GitHub.\\n  </p>\\n{{else}}\\n  <h1>Sign in</h1>\\n  <p>\\n    <a href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>Sign in with GitHub</a>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n  <table id=\\\"builds\\\" class=\\\"list\\\">\\n    <thead>\\n      <tr>\\n        <th>{{t builds.name}}</th>\\n        <th>{{t builds.commit}}</th>\\n        <th>{{t builds.message}}</th>\\n        <th>{{t builds.duration}}</th>\\n        <th>{{t builds.finished_at}}</th>\\n      </tr>\\n    </thead>\\n\\n    <tbody>\\n      {{#each build in builds}}\\n        {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if id}}\\n              <a {{action showBuild this href=true}}>\\n                {{number}}\\n              </a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"commit\\\">\\n            <a {{bindAttr href=\\\"view.urlGithubCommit\\\"}}>\\n              {{formatCommit commit}}\\n            </a>\\n          </td>\\n          <td class=\\\"message\\\">\\n            {{{formatMessage commit.message short=\\\"true\\\"}}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"duration\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n  <p>\\n    {{view view.ShowMoreButton}}\\n  </p>\\n{{else}}\\n  <div class=\\\"loading\\\"><span>Loading</span></div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if loading}}\\n    <span>Loading</span>\\n  {{else}}\\n    <dl id=\\\"summary\\\">\\n      <div class=\\\"left\\\">\\n        <dt>{{t builds.name}}</dt>\\n        <dd class=\\\"number\\\">\\n          <span class=\\\"status\\\"></span>\\n          {{#if build.id}}\\n            <a {{action showBuild build href=true}}>{{build.number}}</a>\\n          {{/if}}\\n        </dd>\\n        <dt class=\\\"finished_at_label\\\">{{t builds.finished_at}}</dt>\\n        <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime build.finishedAt}}</dd>\\n        <dt>{{t builds.duration}}</dt>\\n        <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration build.duration}}</dd>\\n      </div>\\n\\n      <div class=\\\"right\\\">\\n        <dt>{{t builds.commit}}</dt>\\n        <dd class=\\\"commit\\\"><a href=\\\"{{unbound urlGithubCommit}}\\\">{{formatCommit build.commit}}</a></dd>\\n        {{#if commit.compareUrl}}\\n          <dt>{{t builds.compare}}</dt>\\n          <dd class=\\\"compare\\\"><a href=\\\"{{unbound commit.compareUrl}}\\\">{{pathFrom build.commit.compareUrl}}</a></dd>\\n        {{/if}}\\n        {{#if commit.authorName}}\\n          <dt>{{t builds.author}}</dt>\\n          <dd class=\\\"author\\\"><a href=\\\"{{unbound urlAuthor}}\\\">{{build.commit.authorName}}</a></dd>\\n        {{/if}}\\n        {{#if commit.committerName}}\\n          <dt>{{t builds.committer}}</dt>\\n          <dd class=\\\"committer\\\"><a href=\\\"{{unbound urlCommitter}}\\\">{{build.commit.committerName}}</a></dd>\\n        {{/if}}\\n      </div>\\n\\n      <dt>{{t builds.message}}</dt>\\n      <dd class=\\\"message\\\">{{{formatMessage build.commit.message}}}</dd>\\n\\n      {{#unless isMatrix}}\\n        <dt>{{t builds.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig build.config}}</dd>\\n      {{/unless}}\\n    </dl>\\n\\n    {{#if build.isMatrix}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n    {{else}}\\n      {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n    {{/if}}\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n  {{#if view.required}}\\n    <table id=\\\"jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.build_matrix}}\\n      </caption>\\n  {{else}}\\n    <table id=\\\"allowed_failure_jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.allowed_failures}}\\n        <a title=\\\"What's this?\\\" class=\\\"help\\\" name=\\\"help-allowed_failures\\\" {{action popup target=\\\"view\\\"}}></a>\\n      </caption>\\n  {{/if}}\\n    <thead>\\n      <tr>\\n        {{#each key in view.build.configKeys}}\\n          <th>{{key}}</th>\\n        {{/each}}\\n      </tr>\\n    </thead>\\n    <tbody>\\n      {{#each job in view.jobs}}\\n        {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{number}}</a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n          {{#each value in configValues}}\\n            <td>{{value}}</td>\\n          {{/each}}\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n\\n  {{#unless view.required}}\\n    <div id=\\\"help-allowed_failures\\\" class=\\\"popup\\\">\\n      <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n      <h4>{{t \\\"jobs.allowed_failures\\\"}}</h4>\\n      <p>\\n        Allowed Failures are items in your build matrix that are allowed to\\n        fail without causing the entire build to be shown as failed.\\n      </p>\\n      <p>\\n        You can define allowed failures in the build matrix as follows:\\n      </p>\\n      <pre>matrix:\\n  allow_failures:\\n    - rvm: ruby-head</pre>\\n      <p>\\n        This lets you add in experimental and preparatory builds to test against versions or\\n        configurations that you are not ready to officially support.\\n      </p>\\n    </div>\\n  {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n  <pre id=\\\"log\\\" class=\\\"ansi\\\"><a href=\\\"#\\\" id=\\\"tail\\\" {{action toggleTailing target=\\\"view\\\"}}>\\n    <span class=\\\"status\\\"></span>\\n    <label>Follow logs</label>\\n  </a>{{{formatLog log.body}}}</pre>\\n\\n  {{#if sponsor.name}}\\n    <p class=\\\"sponsor\\\">\\n    {{t builds.messages.sponsored_by}}\\n      <a {{bindAttr href=\\\"sponsor.url\\\"}}>{{sponsor.name}}</a>\\n    </p>\\n  {{/if}}\\n\\n  <a href='#' class=\\\"to-top\\\" {{action toTop target=\\\"view\\\"}}>To top</a>\\n{{else}}\\n  <div id=\\\"log\\\" class=\\\"loading\\\">\\n    <span>Loading</span>\\n  </div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if job.isLoaded}}\\n    <div {{bindAttr class=\\\"view.color\\\"}}>\\n      <dl id=\\\"summary\\\">\\n        <div class=\\\"left\\\">\\n          <dt>Job</dt>\\n          <dd class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{job.number}}</a>\\n            {{/if}}\\n          </dd>\\n          <dt class=\\\"finished_at_label\\\">{{t jobs.finished_at}}</dt>\\n          <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime job.finishedAt}}</dd>\\n          <dt>{{t jobs.duration}}</dt>\\n          <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration job.duration}}</dd>\\n        </div>\\n\\n        <div class=\\\"right\\\">\\n          <dt>{{t jobs.commit}}</dt>\\n          <dd class=\\\"commit\\\"><a {{bindAttr href=\\\"urlGithubCommit\\\"}}>{{formatCommit commit}}</a></dd>\\n          {{#if commit.compareUrl}}\\n            <dt>{{t jobs.compare}}</dt>\\n            <dd class=\\\"compare\\\"><a {{bindAttr href=\\\"commit.compareUrl\\\"}}>{{pathFrom commit.compareUrl}}</a></dd>\\n          {{/if}}\\n          {{#if commit.authorName}}\\n            <dt>{{t jobs.author}}</dt>\\n            <dd class=\\\"author\\\"><a {{bindAttr href=\\\"urlAuthor\\\"}}>{{commit.authorName}}</a></dd>\\n          {{/if}}\\n          {{#if commit.committerName}}\\n            <dt>{{t jobs.committer}}</dt>\\n            <dd class=\\\"committer\\\"><a {{bindAttr href=\\\"urlCommitter\\\"}}>{{commit.committerName}}</a></dd>\\n          {{/if}}\\n        </div>\\n\\n        <dt>{{t jobs.message}}</dt>\\n        <dd class=\\\"message\\\">{{formatMessage commit.message}}</dd>\\n        <dt>{{t jobs.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig job.config}}</dd>\\n      </dl>\\n\\n      {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n    </div>\\n  {{else}}\\n    <div id=\\\"job\\\" class=\\\"loading\\\">\\n      <span>Loading</span>\\n    </div>\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"<p>{{view.message}}</p>\\n<a class=\\\"close\\\" {{action close target=\\\"view\\\"}}></a>\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    {{outlet right}}\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    <a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n      {{t layouts.application.fork_me}}\\n    </a>\\n\\n    <div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n      <div class='icon'></div>&nbsp;\\n    </div>\\n\\n    <div class=\\\"box\\\">\\n      <h4>Getting started?</h4>\\n      <p>\\n        Please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started\\\">guide</a>.\\n        It will only take a few minutes :)\\n      </p>\\n      <p>\\n        You can find detailled docs on our <a href=\\\"http://about.travis-ci.org/\\\">about</a> site.\\n      </p>\\n      <p>\\n        If you need help please don't hesitate to join\\n        <a href=\\\"irc://irc.freenode.net#travis\\\">#travis</a> on irc.freenode.net\\n        or our <a href=\\\"http://groups.google.com/group/travis-ci\\\">mailinglist</a>.\\n      </p>\\n    </div>\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"<a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n  {{t layouts.application.fork_me}}\\n</a>\\n\\n<div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n  <div class='icon'></div>&nbsp;\\n</div>\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n<div id=\\\"about\\\" class=\\\"box\\\">\\n  <h4>{{t layouts.about.join}}</h4>\\n  <ul>\\n    <li>{{t layouts.about.repository}}: <a href=\\\"http://github.com/travis-ci\\\">Github</a></li>\\n    <li>{{t layouts.about.twitter}}: <a href=\\\"http://twitter.com/travisci\\\">@travisci</a></li>\\n    <li>{{t layouts.about.mailing_list}}: <a href=\\\"http://groups.google.com/group/travis-ci\\\">travis-ci</a></li>\\n    <li><a href=\\\"irc://irc.freenode.net#travis\\\">irc.freenode.net#travis</a></li>\\n  </ul>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"<a {{action showRoot href=true}}>\\n  <h1>Travis</h1>\\n</a>\\n\\n<ul id=\\\"navigation\\\">\\n  <li {{bindAttr class=\\\"view.classHome\\\"}}>\\n    <a {{action showRoot href=true}}>Home</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classStats\\\"}}>\\n    <a {{action showStats href=true}}>Stats</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/blog\\\">Blog</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/docs\\\">Docs</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classProfile\\\"}}>\\n    <p class=\\\"handle\\\">\\n      <a class=\\\"signed-out\\\" href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>{{t layouts.top.github_login}}</a>\\n      <a class=\\\"signed-in\\\" {{action showProfile href=true}}><img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>{{user.name}}</a>\\n      <span class=\\\"signing-in\\\">Signing in</span>\\n    </p>\\n    <ul>\\n      <li>\\n        <a {{action showProfile href=true}}>{{t layouts.top.profile}}</a>\\n      </li>\\n      <li>\\n        <a href=\\\"/\\\" {{action signOut target=\\\"Travis.app\\\"}}>{{t layouts.top.sign_out}}</a>\\n      </li>\\n    </ul>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n</div>\\n\\n<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_accounts\\\" {{bindAttr class=\\\"view.classAccounts\\\"}}>\\n    <h5><a name=\\\"accounts\\\" href=\\\"\\\">Accounts</a></h5>\\n  </li>\\n</ul>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n    <a {{action showAccount view.account href=true}} class=\\\"name\\\">{{view.name}}</a>\\n    <p class=\\\"summary\\\">\\n      <span class=\\\"repos_label\\\">Repositories:</span>\\n      <abbr class=\\\"repos\\\">{{view.content.reposCount}}</abbr>\\n    </p>\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"<h3>{{view.name}}</h3>\\n\\n{{view Travis.ProfileTabsView}}\\n\\n<div class=\\\"tab\\\">\\n  {{outlet pane}}\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_hooks\\\" {{bindAttr class=\\\"view.classHooks\\\"}}>\\n    <h5>\\n      <a {{action showAccount view.account href=true}}>Repositories</a>\\n    </h5>\\n  </li>\\n  {{#if view.displayUser}}\\n    <li id=\\\"tab_user\\\" {{bindAttr class=\\\"view.classUser\\\"}}>\\n      <h5>\\n        <a {{action showUserProfile view.account href=true}}>Profile</a>\\n      </h5>\\n    </li>\\n  {{/if}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"<p class=\\\"tip\\\">\\n  {{{t profiles.show.message.your_repos}}}\\n</p>\\n\\n{{#if hooks.isLoaded}}\\n  {{#if user.isSyncing}}\\n    <p class=\\\"message loading\\\">\\n      <span>Please wait while we sync from GitHub</span>\\n    </p>\\n  {{else}}\\n    <p class=\\\"message\\\">\\n      Last synchronized from GitHub: {{formatTime user.syncedAt}}\\n      <button class=\\\"sync_now\\\" {{action sync target=\\\"user\\\"}}>\\n        Sync now\\n      </button>\\n    </p>\\n\\n    <ul id=\\\"hooks\\\">\\n      {{#each hook in hooks}}\\n        <li {{bindAttr class=\\\"hook.active:active\\\"}}>\\n          <a {{bindAttr href=\\\"hook.urlGithub\\\"}} rel=\\\"nofollow\\\">{{hook.slug}}</a>\\n          <p class=\\\"description\\\">{{hook.description}}</p>\\n\\n          <div class=\\\"controls\\\">\\n            <a {{bindAttr href=\\\"hook.urlGithubAdmin\\\"}} class=\\\"github-admin tool-tip\\\" title=\\\"Github service hooks admin page\\\"></a>\\n            <a {{action toggle target=\\\"hook\\\"}} class=\\\"switch\\\"></a>\\n          </div>\\n        </li>\\n      {{else}}\\n        <li>\\n          You do not seem to have any repositories that we could sync.\\n        </li>\\n      {{/each}}\\n    </ul>\\n  {{/if}}\\n{{else}}\\n  <p class=\\\"message loading\\\">\\n    <span>Loading</span>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"<img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>\\n\\n<dl class=\\\"profile\\\">\\n  <dt>\\n    {{t profiles.show.github}}:\\n  </dt>\\n  <dd>\\n    <a {{bindAttr href=\\\"urlGithub\\\"}}>{{user.login}}</a>\\n  </dd>\\n  <dt>\\n    {{t profiles.show.email}}:\\n  </dt>\\n  <dd>\\n    {{user.email}}\\n  </dd>\\n  <dt>\\n    {{t profiles.show.token}}:\\n  </dt>\\n  <dd>\\n    {{user.token}}\\n  </dd>\\n</dl>\\n\\n<form>\\n  {{view Ember.Select id=\\\"locale\\\"\\n     contentBinding=\\\"view.locales\\\"\\n     valueBinding=\\\"Travis.app.currentUser.locale\\\"\\n     optionLabelPath=\\\"content.name\\\"\\n     optionValuePath=\\\"content.key\\\"}}\\n\\n  <button name=\\\"commit\\\" {{action saveLocale target=\\\"view\\\"}}>\\n    {{t profiles.show.update_locale}}\\n  </button>\\n</form>\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"<ul id=\\\"queues\\\">\\n{{#each queue in controller}}\\n  <li class=\\\"queue\\\">\\n    <h4>{{t queue}}: {{queue.name}}</h4>\\n    <ul {{bindAttr id=\\\"queue.id\\\"}}>\\n      {{#each job in queue}}\\n        {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n          <a {{action showJob job.repo job target=\\\"Travis.app.router\\\" href=true}}>\\n            <span class=\\\"slug\\\">\\n              {{job.repo.slug}}\\n            </span>\\n            #{{job.number}}\\n          </a>\\n        {{/view}}\\n      {{else}}\\n        {{t no_job}}\\n      {{/each}}\\n    </ul>\\n  </li>\\n{{/each}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n  {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n</div>\\n\\n{{view Travis.ReposListTabsView}}\\n\\n<a {{action toggleInfo target=\\\"view\\\"}} class=\\\"toggle-info\\\"></a>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n    {{#with view.repo}}\\n      <div class=\\\"slug-and-status\\\">\\n        <span class=\\\"status\\\"></span>\\n        {{#if slug}}\\n          <a {{action showRepo this href=true}} class=\\\"slug\\\">{{slug}}</a>\\n        {{/if}}\\n      </div>\\n      {{#if lastBuildId}}\\n        <a {{action showBuild this lastBuildId href=true}} class=\\\"last_build\\\">{{lastBuildNumber}}</a>\\n      {{/if}}\\n\\n      <p class=\\\"summary\\\">\\n        <span class=\\\"duration_label\\\">{{t repositories.duration}}:</span>\\n        <abbr class=\\\"duration\\\" {{bindAttr title=\\\"lastBuildStartedAt\\\"}}>{{formatDuration lastBuildDuration}}</abbr>,\\n        <span class=\\\"finished_at_label\\\">{{t repositories.finished_at}}:</span>\\n        <abbr class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"lastBuildFinishedAt\\\"}}>{{formatTime lastBuildFinishedAt}}</abbr>\\n      </p>\\n\\n      <div class=\\\"indicator\\\"><span></span></div>\\n\\n      {{#if description}}\\n        <div class=\\\"info\\\">\\n          <p class=\\\"description\\\">{{description}}</p>\\n        </div>\\n      {{/if}}\\n    {{/with}}\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_recent\\\" {{bindAttr class=\\\"view.classRecent\\\"}}>\\n    <h5><a name=\\\"recent\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.recent}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_owned\\\" {{bindAttr class=\\\"view.classOwned\\\"}}>\\n    <h5><a name=\\\"owned\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.my_repositories}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_search\\\" {{bindAttr class=\\\"view.classSearch\\\"}}>\\n    <h5><a name=\\\"search\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.search}}</a></h5>\\n  </li>\\n</ul>\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"<div id=\\\"repo\\\" {{bindAttr class=\\\"view.class\\\"}}>\\n  {{#if view.repo.isLoaded}}\\n    {{#with view.repo}}\\n      <h3>\\n        <a {{bindAttr href=\\\"view.urlGithub\\\"}}>{{slug}}</a>\\n      </h3>\\n\\n      <p class=\\\"description\\\">{{description}}</p>\\n\\n      <ul class=\\\"github-stats\\\">\\n        <li class=\\\"language\\\">\\n          {{lastBuildLanguage}}\\n        </li>\\n        <li>\\n          <a class=\\\"watchers\\\" title=\\\"Watchers\\\" {{bindAttr href=\\\"view.urlGithubWatchers\\\"}}>\\n            {{stats.watchers}}\\n          </a>\\n        </li>\\n        <li>\\n          <a class=\\\"forks\\\" title=\\\"Forks\\\" {{bindAttr href=\\\"view.urlGithubNetwork\\\"}}>\\n            {{stats.forks}}\\n          </a>\\n        </li>\\n      </ul>\\n\\n      {{view Travis.RepoShowTabsView}}\\n      {{view Travis.RepoShowToolsView}}\\n    {{/with}}\\n\\n  {{else}}\\n    <span>Loading</span>\\n  {{/if}}\\n\\n  <div class=\\\"tab\\\">\\n    {{outlet pane}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_current\\\" {{bindAttr class=\\\"view.classCurrent\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showRepo view.repo href=true}}>\\n        {{t repositories.tabs.current}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_builds\\\" {{bindAttr class=\\\"view.classBuilds\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBuilds view.repo href=true}}>\\n        {{t repositories.tabs.build_history}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_pull_requests\\\" {{bindAttr class=\\\"view.classPullRequests\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showPullRequests view.repo href=true}}>\\n        {{t repositories.tabs.pull_requests}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_branches\\\" {{bindAttr class=\\\"view.classBranches\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBranches view.repo href=true}}>\\n        {{t repositories.tabs.branches}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_build\\\" {{bindAttr class=\\\"view.classBuild\\\"}}>\\n    <h5>\\n      {{#if view.build.id}}\\n      <a {{action showBuild view.build href=true}}>\\n        {{t repositories.tabs.build}} #{{view.build.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_job\\\" {{bindAttr class=\\\"view.classJob\\\"}}>\\n    <h5>\\n      {{#if view.job.id}}\\n      <a {{action showBuild view.job href=true}}>\\n        {{t repositories.tabs.job}} #{{view.job.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"<div id=\\\"tools\\\">\\n  <a href=\\\"#\\\" {{action menu target=\\\"view\\\"}}></a>\\n  <ul class=\\\"menu\\\">\\n    <li>\\n      <a href=\\\"#\\\" name=\\\"status-images\\\" {{action statusImages target=\\\"view\\\"}}>Status Images</a>\\n    </li>\\n    {{#if view.canPush}}\\n      <li>\\n        <a href=\\\"#\\\" {{action requeue target=\\\"view\\\"}}>Rebuild</a>\\n      </li>\\n    {{/if}}\\n  </ul>\\n</div>\\n\\n<div id=\\\"status-images\\\" class=\\\"popup\\\">\\n  <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n  <p>\\n    <label>{{t repositories.branch}}:</label>\\n    {{#if view.branches.isLoaded}}\\n      {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n    {{else}}\\n      <span class=\\\"loading\\\"></span>\\n    {{/if}}\\n  </p>\\n  <p>\\n    <label>{{t repositories.image_url}}:</label>\\n    <input type=\\\"text\\\" class=\\\"url\\\" {{bindAttr value=\\\"view.urlStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.markdown}}:</label>\\n    <input type=\\\"text\\\" class=\\\"markdown\\\" {{bindAttr value=\\\"view.markdownStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.textile}}:</label>\\n    <input type=\\\"text\\\" class=\\\"textile\\\" {{bindAttr value=\\\"view.textileStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.rdoc}}:</label>\\n    <input type=\\\"text\\\" class=\\\"rdoc\\\" {{bindAttr value=\\\"view.rdocStatusImage\\\"}}></input>\\n  </p>\\n</div>\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"<h4>{{t layouts.application.sponsers}}</h4>\\n\\n<ul class=\\\"sponsors top\\\">\\n  {{#each deck in controller}}\\n    {{#each deck}}\\n      <li {{bindAttr class=\\\"type\\\"}}>\\n        <a {{bindAttr href=\\\"url\\\"}}>\\n          <img {{bindAttr src=\\\"image\\\"}}>\\n        </a>\\n      </li>\\n    {{/each}}\\n  {{/each}}\\n</ul>\\n\\n<p class=\\\"hint\\\">\\n  <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n    {{{t layouts.application.sponsors_link}}}\\n  </a>\\n</p>\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"<div class=\\\"box\\\">\\n  <h4>{{t layouts.application.sponsers}}</h4>\\n\\n  <ul class=\\\"sponsors bottom\\\">\\n    {{#each controller}}\\n      <li>\\n        {{{link}}}\\n      </li>\\n    {{/each}}\\n  </ul>\\n\\n  <p class=\\\"hint\\\">\\n    <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n      {{{t layouts.application.sponsors_link}}}\\n    </a>\\n  </p>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"<div id=\\\"repos_stats\\\"></div>\\n<div id=\\\"tests_stats\\\"></div>\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n  <h4>\\n    {{t workers}}\\n    <a id=\\\"toggle-workers\\\" {{action toggleWorkers target=\\\"parentView.parentView\\\"}}></a>\\n  </h4>\\n  <ul id=\\\"workers\\\">\\n    {{#each group in controller.groups}}\\n      {{#view Travis.WorkersListView}}\\n        <li class=\\\"group\\\">\\n          <h5 {{action toggle target=\\\"view\\\"}}>\\n            {{group.firstObject.host}}\\n          </h5>\\n          <ul>\\n          {{#each worker in group}}\\n            {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n              <li class=\\\"worker\\\">\\n                <div class=\\\"status\\\"></div>\\n                {{#if worker.isWorking}}\\n                  {{#if worker.job_id}}\\n                    <a {{action showJob worker.repo worker.job_id target=\\\"Travis.app.router\\\" href=true}} {{bindAttr title=\\\"worker.lastSeenAt\\\"}}>\\n                      {{view.display}}\\n                    </a>\\n                  {{/if}}\\n                {{else}}\\n                  {{view.display}}\\n                {{/if}}\\n              </li>\\n            {{/view}}\\n          {{/each}}\\n          </ul>\\n        </li>\\n      {{/view}}\\n    {{else}}\\n      No workers\\n    {{/each}}\\n  </ul>\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors &rarr;\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Getting Started guide</a>.\\n  <small>It will only take a couple of minutes.</small>\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores &rarr;\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Activa los interruptores para inicial el  Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\\n  Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guía de Inicio </a>.\\n  <small>Solo tomará unos pocos minutos.</small>\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors &rarr;\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">guide de démarrage</a>.\\n <small>Cela ne vous prendra que quelques minutes.</small>\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る &rarr;\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずは<a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Travisのはじめ方</a>を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\\\"https://github.com/travis-ci\\\">her</a>.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre &rarr;\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors &rarr;\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze <a href=\\\\\\\"http://about.travis-ci.org/docs/user/getting-started/\\\\\\\">startersgids</a> lezen.\\\\n  <small>Het zal maar enkele minuten van uw tijd vergen.</small>\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów &rarr;\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Przewodnik </a>.\\n  <small>Zajmie ci to tylko kilka minut.</small>\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores &rarr;\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров &rarr;\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n  context: null,\n  options: null,\n  property: null,\n  // paths of the property that are also observed\n  propertyPaths: [],\n\n  value: Ember.K,\n\n  valueForRender: function() {\n    var value = this.value(Ember.get(this.context, this.property), this.options);\n    if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n    return value;\n  },\n\n  render: function(buffer) {\n    buffer.push(this.valueForRender());\n  },\n\n  valueDidChange: function() {\n    if (this.morph.isRemoved()) { return; }\n    this.morph.html(this.valueForRender());\n  },\n\n  didInsertElement: function() {\n    this.valueDidChange();\n  },\n\n  init: function() {\n    this._super();\n    Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n  },\n\n  destroy: function() {\n    Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n    this._super();\n  }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n  var propertyPaths = Array.prototype.slice.call(arguments, 2);\n  Ember.Handlebars.registerHelper(name, function(property, options) {\n    var data = options.data,\n        view = data.view,\n        ctx  = this;\n\n    var bindView = view.createChildView(BoundHelperView, {\n      property: property,\n      propertyPaths: propertyPaths,\n      context: ctx,\n      options: options.hash,\n      value: func\n    });\n\n    view.appendChild(bindView);\n  });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace");
\ No newline at end of file
+;minispade.register('app', "(function() {(function() {\nminispade.require('auth');\nminispade.require('controllers');\nminispade.require('helpers');\nminispade.require('models');\nminispade.require('pusher');\nminispade.require('routes');\nminispade.require('slider');\nminispade.require('store');\nminispade.require('tailing');\nminispade.require('templates');\nminispade.require('views');\nminispade.require('config/locales');\nminispade.require('data/sponsors');\n\n  Travis.reopen({\n    App: Em.Application.extend({\n      autoinit: false,\n      currentUserBinding: 'auth.user',\n      authStateBinding: 'auth.state',\n      init: function() {\n        this._super.apply(this, arguments);\n        this.store = Travis.Store.create();\n        this.store.loadMany(Travis.Sponsor, Travis.SPONSORS);\n        this.set('auth', Travis.Auth.create({\n          app: this,\n          endpoint: Travis.config.api_endpoint\n        }));\n        this.slider = new Travis.Slider();\n        this.pusher = new Travis.Pusher(Travis.config.pusher);\n        return this.tailing = new Travis.Tailing();\n      },\n      signIn: function() {\n        return this.get('auth').signIn();\n      },\n      signOut: function() {\n        this.get('auth').signOut();\n        return this.get('router').send('showRoot');\n      },\n      receive: function() {\n        return this.store.receive.apply(this.store, arguments);\n      },\n      toggleSidebar: function() {\n        var element;\n        $('body').toggleClass('maximized');\n        element = $('<span></span>');\n        $('#top .profile').append(element);\n        Em.run.later((function() {\n          return element.remove();\n        }), 10);\n        element = $('<span></span>');\n        $('#repo').append(element);\n        return Em.run.later((function() {\n          return element.remove();\n        }), 10);\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=app");minispade.register('auth', "(function() {(function() {\n\n  this.Travis.Auth = Ember.Object.extend({\n    iframe: $('<iframe id=\"auth-frame\" />').hide(),\n    timeout: 5000,\n    state: 'signed-out',\n    receivingEnd: \"\" + location.protocol + \"//\" + location.host,\n    init: function() {\n      var _this = this;\n      this.iframe.appendTo('body');\n      window.addEventListener('message', function(e) {\n        return _this.receiveMessage(e);\n      });\n      return this.loadUser();\n    },\n    accessToken: (function() {\n      return sessionStorage.getItem('travis.token');\n    }).property(),\n    loadUser: function() {\n      var user;\n      if (user = sessionStorage.getItem('travis.user')) {\n        return this.setData({\n          user: JSON.parse(user)\n        });\n      } else if (localStorage.getItem('travis.auto_signin')) {\n        return this.trySignIn();\n      }\n    },\n    signIn: function() {\n      this.set('state', 'signing-in');\n      this.trySignIn();\n      return Ember.run.later(this, this.checkSignIn.bind(this), this.timeout);\n    },\n    trySignIn: function() {\n      return this.iframe.attr('src', \"\" + this.endpoint + \"/auth/post_message?origin=\" + this.receivingEnd);\n    },\n    checkSignIn: function() {\n      if (this.get('state') === 'signing-in') {\n        return this.forceSignIn();\n      }\n    },\n    forceSignIn: function() {\n      localStorage.setItem('travis.auto_signin', 'true');\n      return window.location = \"\" + this.endpoint + \"/auth/handshake?redirect_uri=\" + location;\n    },\n    signOut: function() {\n      if (typeof localStorage !== \"undefined\" && localStorage !== null) {\n        localStorage.clear();\n      }\n      if (typeof sessionStorage !== \"undefined\" && sessionStorage !== null) {\n        sessionStorage.clear();\n      }\n      return this.setData();\n    },\n    setData: function(data) {\n      var user;\n      if (typeof data === 'string') {\n        data = JSON.parse(data);\n      }\n      if (data != null ? data.token : void 0) {\n        this.storeToken(data.token);\n      }\n      if (data != null ? data.user : void 0) {\n        user = this.storeUser(data.user);\n      }\n      this.set('state', user ? 'signed-in' : 'signed-out');\n      this.set('user', user ? user : void 0);\n      if (this.app.get('router')) {\n        return this.app.get('router').transitionTo('authenticated');\n      }\n    },\n    storeToken: function(token) {\n      sessionStorage.setItem('travis.token', token);\n      return this.notifyPropertyChange('accessToken');\n    },\n    storeUser: function(user) {\n      localStorage.setItem('travis.auto_signin', 'true');\n      sessionStorage.setItem('travis.user', JSON.stringify(user));\n      this.app.store.load(Travis.User, user);\n      user = this.app.store.find(Travis.User, user.id);\n      user.get('permissions');\n      return user;\n    },\n    receiveMessage: function(event) {\n      if (event.origin === this.expectedOrigin()) {\n        this.setData(event.data);\n        return console.log(\"signed in as \" + event.data.user.login);\n      } else {\n        return console.log(\"unexpected message \" + event.origin + \": \" + event.data);\n      }\n    },\n    expectedOrigin: function() {\n      if (this.endpoint[0] === '/') {\n        return this.receivingEnd;\n      } else {\n        return this.endpoint;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=auth");minispade.register('controllers', "(function() {(function() {\nminispade.require('helpers');\nminispade.require('travis/ticker');\n\n  Travis.reopen({\n    Controller: Em.Controller.extend({\n      connectOutlet: function() {\n        var view, _connectedOutletViews;\n        view = this._super.apply(this, arguments);\n        if (view) {\n          _connectedOutletViews = Travis.app.get('_connectedOutletViews');\n          if (!_connectedOutletViews) {\n            _connectedOutletViews = [];\n          }\n          _connectedOutletViews.pushObject(view);\n          Travis.app.set('_connectedOutletViews', _connectedOutletViews);\n        }\n        return view;\n      }\n    }),\n    TopController: Em.Controller.extend({\n      userBinding: 'Travis.app.currentUser'\n    }),\n    ApplicationController: Em.Controller.extend(),\n    MainController: Em.Controller.extend(),\n    StatsLayoutController: Em.Controller.extend(),\n    ProfileLayoutController: Em.Controller.extend(),\n    AuthLayoutController: Em.Controller.extend()\n  });\nminispade.require('controllers/accounts');\nminispade.require('controllers/builds');\nminispade.require('controllers/flash');\nminispade.require('controllers/home');\nminispade.require('controllers/profile');\nminispade.require('controllers/repos');\nminispade.require('controllers/repo');\nminispade.require('controllers/sidebar');\nminispade.require('controllers/stats');\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers");minispade.register('controllers/accounts', "(function() {(function() {\n\n  Travis.AccountsController = Ember.ArrayController.extend({\n    tab: 'accounts',\n    init: function() {\n      return this._super();\n    },\n    findByLogin: function(login) {\n      return this.find(function(account) {\n        return account.get('login') === 'login';\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/accounts");minispade.register('controllers/builds', "(function() {(function() {\n\n  Travis.BuildsController = Em.ArrayController.extend({\n    repo: 'parent.repo',\n    contentBinding: 'parent.builds'\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/builds");minispade.register('controllers/flash', "(function() {(function() {\n\n  Travis.FlashController = Ember.ArrayController.extend({\n    init: function() {\n      this._super.apply(this, arguments);\n      return this.set('content', Ember.A());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/flash");minispade.register('controllers/home', "(function() {(function() {\n\n  Travis.HomeController = Travis.Controller.extend();\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/home");minispade.register('controllers/profile', "(function() {(function() {\n\n  Travis.ProfileController = Travis.Controller.extend({\n    name: 'profile',\n    userBinding: 'Travis.app.currentUser',\n    accountsBinding: 'Travis.app.router.accountsController',\n    account: (function() {\n      var login;\n      login = this.get('params.login') || Travis.app.get('currentUser.login');\n      return this.get('accounts').filter(function(account) {\n        if (account.get('login') === login) {\n          return account;\n        }\n      })[0];\n    }).property('accounts.length', 'params.login'),\n    activate: function(action, params) {\n      this.setParams(params || this.get('params'));\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewHooks: function() {\n      this.connectTab('hooks');\n      return this.set('hooks', Travis.Hook.find({\n        owner_name: this.get('params.login') || Travis.app.get('currentUser.login')\n      }));\n    },\n    viewUser: function() {\n      return this.connectTab('user');\n    },\n    connectTab: function(tab) {\n      var viewClass;\n      viewClass = Travis[\"\" + ($.camelize(tab)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    setParams: function(params) {\n      var key, value, _results;\n      this.set('params', {});\n      _results = [];\n      for (key in params) {\n        value = params[key];\n        _results.push(this.set(\"params.\" + key, params[key]));\n      }\n      return _results;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/profile");minispade.register('controllers/repo', "(function() {(function() {\n\n  Travis.RepoController = Travis.Controller.extend({\n    bindings: [],\n    init: function() {\n      this._super.apply(this, arguments);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var build, builds;\n      if (builds = this.get('builds')) {\n        builds.forEach(function(b) {\n          return b.updateTimes();\n        });\n      }\n      if (build = this.get('build')) {\n        build.updateTimes();\n        build.get('jobs').forEach(function(j) {\n          return j.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(action) {\n      this._unbind();\n      return this[\"view\" + ($.camelize(action))]();\n    },\n    viewIndex: function() {\n      this._bind('repo', 'controllers.reposController.firstObject');\n      this._bind('build', 'repo.lastBuild');\n      return this.connectTab('current');\n    },\n    viewCurrent: function() {\n      this.connectTab('current');\n      return this._bind('build', 'repo.lastBuild');\n    },\n    viewBuilds: function() {\n      this.connectTab('builds');\n      return this._bind('builds', 'repo.builds');\n    },\n    viewPullRequests: function() {\n      this.connectTab('pull_requests');\n      return this._bind('builds', 'repo.pullRequests');\n    },\n    viewBranches: function() {\n      this.connectTab('branches');\n      return this._bind('builds', 'repo.branches');\n    },\n    viewBuild: function() {\n      return this.connectTab('build');\n    },\n    viewJob: function() {\n      this._bind('build', 'job.build');\n      return this.connectTab('job');\n    },\n    repoObserver: (function() {\n      var repo;\n      repo = this.get('repo');\n      if (repo) {\n        return repo.select();\n      }\n    }).observes('repo.id'),\n    connectTab: function(tab) {\n      var name, viewClass;\n      name = tab === 'current' ? 'build' : tab;\n      viewClass = name === 'builds' || name === 'branches' || name === 'pull_requests' ? Travis.BuildsView : Travis[\"\" + ($.camelize(name)) + \"View\"];\n      this.set('tab', tab);\n      return this.connectOutlet({\n        outletName: 'pane',\n        controller: this,\n        viewClass: viewClass\n      });\n    },\n    _bind: function(to, from) {\n      return this.bindings.push(Ember.oneWay(this, to, from));\n    },\n    _unbind: function() {\n      var binding, _i, _len, _ref;\n      _ref = this.bindings;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        binding = _ref[_i];\n        binding.disconnect(this);\n      }\n      return this.bindings.length = 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repo");minispade.register('controllers/repos', "(function() {(function() {\n\n  Travis.ReposController = Ember.ArrayController.extend({\n    defaultTab: 'recent',\n    sortProperties: ['sortOrder'],\n    init: function() {\n      this.activate(this.defaultTab);\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    updateTimes: function() {\n      var content;\n      if (content = this.get('content')) {\n        content.forEach(function(r) {\n          return r.updateTimes();\n        });\n      }\n      return Ember.run.later(this.updateTimes.bind(this), Travis.INTERVALS.updateTimes);\n    },\n    activate: function(tab, params) {\n      this.set('tab', tab);\n      return this[\"view\" + ($.camelize(tab))](params);\n    },\n    viewRecent: function() {\n      return this.set('content', Travis.Repo.find());\n    },\n    viewOwned: function() {\n      return this.set('content', Travis.Repo.ownedBy(Travis.app.get('currentUser.login')));\n    },\n    viewSearch: function(params) {\n      return this.set('content', Travis.Repo.search(params.search));\n    },\n    searchObserver: (function() {\n      var search, tab;\n      search = this.get('search');\n      tab = search ? 'search' : 'recent';\n      return this.activate(tab, {\n        search: search\n      });\n    }).observes('search')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/repos");minispade.register('controllers/sidebar', "(function() {(function() {\n\n  Travis.reopen({\n    SidebarController: Em.ArrayController.extend({\n      init: function() {\n        this.tickables = [];\n        return Travis.Ticker.create({\n          target: this,\n          interval: Travis.INTERVALS.sponsors\n        });\n      },\n      tick: function() {\n        var tickable, _i, _len, _ref, _results;\n        _ref = this.tickables;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          tickable = _ref[_i];\n          _results.push(tickable.tick());\n        }\n        return _results;\n      }\n    }),\n    QueuesController: Em.ArrayController.extend(),\n    WorkersController: Em.ArrayController.extend({\n      groups: (function() {\n        var content, groups, host, worker, _i, _len, _ref;\n        if (content = this.get('content')) {\n          groups = {};\n          _ref = content.toArray();\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            worker = _ref[_i];\n            host = worker.get('host');\n            if (!groups[host]) {\n              groups[host] = Em.ArrayProxy.create({\n                content: []\n              });\n            }\n            groups[host].pushObject(worker);\n          }\n          return $.values(groups);\n        }\n      }).property('content.length')\n    }),\n    SponsorsController: Em.ArrayController.extend({\n      page: 0,\n      arrangedContent: (function() {\n        return this.get('shuffled').slice(this.start(), this.end());\n      }).property('shuffled.length', 'page'),\n      shuffled: (function() {\n        var content;\n        if (content = this.get('content')) {\n          return $.shuffle(content);\n        } else {\n          return [];\n        }\n      }).property('content.length'),\n      tick: function() {\n        return this.set('page', this.isLast() ? 0 : this.get('page') + 1);\n      },\n      pages: (function() {\n        var length;\n        length = this.get('content.length');\n        if (length) {\n          return parseInt(length / this.get('perPage') + 1);\n        } else {\n          return 1;\n        }\n      }).property('length'),\n      isLast: function() {\n        return this.get('page') === this.get('pages') - 1;\n      },\n      start: function() {\n        return this.get('page') * this.get('perPage');\n      },\n      end: function() {\n        return this.start() + this.get('perPage');\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/sidebar");minispade.register('controllers/stats', "(function() {(function() {\n\n  Travis.StatsController = Travis.Controller.extend({\n    name: 'stats',\n    init: function() {\n      return this._super('top');\n    },\n    activate: function(action, params) {}\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=controllers/stats");minispade.register('helpers', "(function() {(function() {\nminispade.require('helpers/handlebars');\nminispade.require('helpers/helpers');\nminispade.require('helpers/urls');\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers");minispade.register('helpers/handlebars', "(function() {(function() {\n  var safe;\nminispade.require('ext/ember/bound_helper');\n\n  safe = function(string) {\n    return new Handlebars.SafeString(string);\n  };\n\n  Handlebars.registerHelper('tipsy', function(text, tip) {\n    return safe('<span class=\"tool-tip\" original-title=\"' + tip + '\">' + text + '</span>');\n  });\n\n  Handlebars.registerHelper('t', function(key) {\n    return safe(I18n.t(key));\n  });\n\n  Ember.registerBoundHelper('formatTime', function(value, options) {\n    return safe(Travis.Helpers.timeAgoInWords(value) || '-');\n  });\n\n  Ember.registerBoundHelper('formatDuration', function(duration, options) {\n    return safe(Travis.Helpers.timeInWords(duration));\n  });\n\n  Ember.registerBoundHelper('formatCommit', function(commit, options) {\n    if (commit) {\n      return safe(Travis.Helpers.formatCommit(commit.get('sha'), commit.get('branch')));\n    }\n  });\n\n  Ember.registerBoundHelper('formatSha', function(sha, options) {\n    return safe(Travis.Helpers.formatSha(sha));\n  });\n\n  Ember.registerBoundHelper('pathFrom', function(url, options) {\n    return safe(Travis.Helpers.pathFrom(url));\n  });\n\n  Ember.registerBoundHelper('formatMessage', function(message, options) {\n    return safe(Travis.Helpers.formatMessage(message, options));\n  });\n\n  Ember.registerBoundHelper('formatConfig', function(config, options) {\n    return safe(Travis.Helpers.formatConfig(config));\n  });\n\n  Ember.registerBoundHelper('formatLog', function(log, options) {\n    return Travis.Helpers.formatLog(log) || '';\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/handlebars");minispade.register('helpers/helpers', "(function() {(function() {\nminispade.require('travis/log');\nminispade.require('emoij');\n\n  this.Travis.Helpers = {\n    compact: function(object) {\n      var key, result, value, _ref;\n      result = {};\n      _ref = object || {};\n      for (key in _ref) {\n        value = _ref[key];\n        if (!$.isEmpty(value)) {\n          result[key] = value;\n        }\n      }\n      return result;\n    },\n    safe: function(string) {\n      return new Handlebars.SafeString(string);\n    },\n    colorForResult: function(result) {\n      if (result === 0) {\n        return 'green';\n      } else {\n        if (result === 1) {\n          return 'red';\n        } else {\n          return null;\n        }\n      }\n    },\n    formatCommit: function(sha, branch) {\n      return Travis.Helpers.formatSha(sha) + (branch ? \" (\" + branch + \")\" : '');\n    },\n    formatSha: function(sha) {\n      return (sha || '').substr(0, 7);\n    },\n    formatConfig: function(config) {\n      var values;\n      config = $.only(config, 'rvm', 'gemfile', 'env', 'otp_release', 'php', 'node_js', 'scala', 'jdk', 'python', 'perl');\n      values = $.map(config, function(value, key) {\n        value = (value && value.join ? value.join(', ') : value) || '';\n        return '%@: %@'.fmt($.camelize(key), value);\n      });\n      if (values.length === 0) {\n        return '-';\n      } else {\n        return values.join(', ');\n      }\n    },\n    formatMessage: function(message, options) {\n      message = message || '';\n      if (options.short) {\n        message = message.split(/\\n/)[0];\n      }\n      return this._emojize(this._escape(message)).replace(/\\n/g, '<br/>');\n    },\n    formatLog: function(log) {\n      return Travis.Log.filter(log);\n    },\n    pathFrom: function(url) {\n      return (url || '').split('/').pop();\n    },\n    timeAgoInWords: function(date) {\n      return $.timeago.distanceInWords(date);\n    },\n    durationFrom: function(started, finished) {\n      started = started && this._toUtc(new Date(this._normalizeDateString(started)));\n      finished = finished ? this._toUtc(new Date(this._normalizeDateString(finished))) : this._nowUtc();\n      if (started && finished) {\n        return Math.round((finished - started) / 1000);\n      } else {\n        return 0;\n      }\n    },\n    timeInWords: function(duration) {\n      var days, hours, minutes, result, seconds;\n      days = Math.floor(duration / 86400);\n      hours = Math.floor(duration % 86400 / 3600);\n      minutes = Math.floor(duration % 3600 / 60);\n      seconds = duration % 60;\n      if (days > 0) {\n        return 'more than 24 hrs';\n      } else {\n        result = [];\n        if (hours === 1) {\n          result.push(hours + ' hr');\n        }\n        if (hours > 1) {\n          result.push(hours + ' hrs');\n        }\n        if (minutes > 0) {\n          result.push(minutes + ' min');\n        }\n        if (seconds > 0) {\n          result.push(seconds + ' sec');\n        }\n        if (result.length > 0) {\n          return result.join(' ');\n        } else {\n          return '-';\n        }\n      }\n    },\n    _normalizeDateString: function(string) {\n      if (window.JHW) {\n        string = string.replace('T', ' ').replace(/-/g, '/');\n        string = string.replace('Z', '').replace(/\\..*$/, '');\n      }\n      return string;\n    },\n    _nowUtc: function() {\n      return this._toUtc(new Date());\n    },\n    _toUtc: function(date) {\n      return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n    },\n    _emojize: function(text) {\n      var emojis;\n      emojis = text.match(/:\\S+?:/g);\n      if (emojis !== null) {\n        $.each(emojis.uniq(), function(ix, emoji) {\n          var image, strippedEmoji;\n          strippedEmoji = emoji.substring(1, emoji.length - 1);\n          if (EmojiDictionary.indexOf(strippedEmoji) !== -1) {\n            image = '<img class=\\'emoji\\' title=\\'' + emoji + '\\' alt=\\'' + emoji + '\\' src=\\'' + '/images/emoji/' + strippedEmoji + '.png\\'/>';\n            return text = text.replace(new RegExp(emoji, 'g'), image);\n          }\n        });\n      }\n      return text;\n    },\n    _escape: function(text) {\n      return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/helpers");minispade.register('helpers/urls', "(function() {(function() {\n\n  this.Travis.Urls = {\n    repo: function(slug) {\n      return \"/\" + slug;\n    },\n    builds: function(slug) {\n      return \"/\" + slug + \"/builds\";\n    },\n    pullRequests: function(slug) {\n      return \"/\" + slug + \"/pull_requests\";\n    },\n    branches: function(slug) {\n      return \"/\" + slug + \"/branches\";\n    },\n    build: function(slug, id) {\n      return \"/\" + slug + \"/builds/\" + id;\n    },\n    job: function(slug, id) {\n      return \"/\" + slug + \"/jobs/\" + id;\n    },\n    githubCommit: function(slug, sha) {\n      return \"http://github.com/\" + slug + \"/commit/\" + sha;\n    },\n    githubRepo: function(slug) {\n      return \"http://github.com/\" + slug;\n    },\n    githubWatchers: function(slug) {\n      return \"http://github.com/\" + slug + \"/watchers\";\n    },\n    githubNetwork: function(slug) {\n      return \"http://github.com/\" + slug + \"/network\";\n    },\n    githubAdmin: function(slug) {\n      return \"http://github.com/\" + slug + \"/admin/hooks#travis_minibucket\";\n    },\n    statusImage: function(slug, branch) {\n      return (\"https://secure.travis-ci.org/\" + slug + \".png\") + (branch ? \"?branch=\" + branch : '');\n    },\n    email: function(email) {\n      return \"mailto:\" + email;\n    },\n    account: function(login) {\n      return \"/profile/\" + login;\n    },\n    user: function(login) {\n      return \"/profile/\" + login + \"/me\";\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=helpers/urls");minispade.register('models', "(function() {(function() {\nminispade.require('models/extensions');\nminispade.require('models/account');\nminispade.require('models/artifact');\nminispade.require('models/branch');\nminispade.require('models/build');\nminispade.require('models/commit');\nminispade.require('models/hook');\nminispade.require('models/job');\nminispade.require('models/repo');\nminispade.require('models/sponsor');\nminispade.require('models/user');\nminispade.require('models/worker');\n\n}).call(this);\n\n})();\n//@ sourceURL=models");minispade.register('models/account', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Account = Travis.Model.extend({\n    primaryKey: 'login',\n    login: DS.attr('string'),\n    name: DS.attr('string'),\n    type: DS.attr('string'),\n    reposCount: DS.attr('number'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('login'));\n    }).property()\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/account");minispade.register('models/artifact', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Artifact = Travis.Model.extend({\n    body: DS.attr('string'),\n    init: function() {\n      this._super.apply(this, arguments);\n      this.set('queue', Ember.A([]));\n      this.addObserver('body', this.fetchWorker);\n      return this.fetchWorker();\n    },\n    append: function(body) {\n      if (this.get('isLoaded')) {\n        return this.set('body', this.get('body') + body);\n      } else {\n        return this.get('queue').pushObject(body);\n      }\n    },\n    recordDidLoad: (function() {\n      var queue;\n      if (this.get('isLoaded')) {\n        queue = this.get('queue');\n        if (queue.get('length') > 0) {\n          return this.append(queue.toArray().join(''));\n        }\n      }\n    }).observes('isLoaded'),\n    fetchWorker: function() {\n      var body, line, match, worker;\n      if (body = this.get('body')) {\n        line = body.split(\"\\n\")[0];\n        if (line && (match = line.match(/Using worker: (.*)/))) {\n          if (worker = match[1]) {\n            worker = worker.trim().split(':')[0];\n            this.set('workerName', worker);\n            return this.removeObserver('body', this.fetchWorker);\n          }\n        }\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/artifact");minispade.register('models/branch', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Branch = Travis.Model.extend(Travis.Helpers, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    commitId: DS.attr('number'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    duration: DS.attr('number'),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    commit: DS.belongsTo('Travis.Commit'),\n    repo: (function() {\n      if (this.get('repoId')) {\n        return Travis.Repo.find(this.get('repoId'));\n      }\n    }).property('repoId'),\n    updateTimes: function() {\n      this.notifyPropertyChange('started_at');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n  this.Travis.Branch.reopenClass({\n    byRepoId: function(id) {\n      return this.find({\n        repository_id: id\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/branch");minispade.register('models/build', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Build = Travis.Model.extend(Travis.DurationCalculations, Travis.Ajax, {\n    eventType: DS.attr('string'),\n    repoId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    state: DS.attr('string'),\n    number: DS.attr('number'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string', {\n      key: 'started_at'\n    }),\n    finishedAt: DS.attr('string', {\n      key: 'finished_at'\n    }),\n    repo: DS.belongsTo('Travis.Repo'),\n    commit: DS.belongsTo('Travis.Commit'),\n    jobs: DS.hasMany('Travis.Job', {\n      key: 'job_ids'\n    }),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    isMatrix: (function() {\n      return this.get('data.job_ids.length') > 1;\n    }).property('data.job_ids.length'),\n    isFinished: (function() {\n      return this.get('state') === 'finished';\n    }).property('state'),\n    requiredJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return !data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    allowedFailureJobs: (function() {\n      return this.get('jobs').filter(function(data) {\n        return data.get('allowFailure');\n      });\n    }).property('jobs.@each.allowFailure'),\n    configKeys: (function() {\n      var config, headers, key, keys;\n      if (!(config = this.get('config'))) {\n        return [];\n      }\n      keys = $.intersect($.keys(config), Travis.CONFIG_KEYS);\n      headers = (function() {\n        var _i, _len, _ref, _results;\n        _ref = ['build.job', 'build.duration', 'build.finished_at'];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          key = _ref[_i];\n          _results.push(I18n.t(key));\n        }\n        return _results;\n      })();\n      return $.map(headers.concat(keys), function(key) {\n        return $.camelize(key);\n      });\n    }).property('config'),\n    requeue: (function() {\n      return this.post('/requests', {\n        build_id: this.get('id')\n      });\n    })\n  });\n\n  this.Travis.Build.reopenClass({\n    byRepoId: function(id, parameters) {\n      return this.find($.extend(parameters || {}, {\n        repository_id: id\n      }));\n    },\n    olderThanNumber: function(id, build_number) {\n      return this.find({\n        url: \"/builds\",\n        repository_id: id,\n        after_number: build_number\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/build");minispade.register('models/commit', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Commit = Travis.Model.extend({\n    buildId: DS.attr('number'),\n    sha: DS.attr('string'),\n    branch: DS.attr('string'),\n    message: DS.attr('string'),\n    compareUrl: DS.attr('string'),\n    authorName: DS.attr('string'),\n    authorEmail: DS.attr('string'),\n    committerName: DS.attr('string'),\n    committerEmail: DS.attr('string'),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'buildId'\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/commit");minispade.register('models/extensions', "(function() {(function() {\n\n  Travis.DurationCalculations = Ember.Mixin.create({\n    duration: (function() {\n      var duration;\n      if (duration = this.get('_duration')) {\n        return duration;\n      } else {\n        return Travis.Helpers.durationFrom(this.get('startedAt'), this.get('finishedAt'));\n      }\n    }).property('_duration', 'finishedAt', 'startedAt'),\n    updateTimes: function() {\n      this.notifyPropertyChange('_duration');\n      return this.notifyPropertyChange('finished_at');\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/extensions");minispade.register('models/hook', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Hook = Travis.Model.extend({\n    name: DS.attr('string'),\n    ownerName: DS.attr('string'),\n    description: DS.attr('string'),\n    active: DS.attr('boolean'),\n    account: (function() {\n      return this.get('slug').split('/')[0];\n    }).property('slug'),\n    slug: (function() {\n      return \"\" + (this.get('ownerName')) + \"/\" + (this.get('name'));\n    }).property('ownerName', 'name'),\n    urlGithub: (function() {\n      return \"http://github.com/\" + (this.get('slug'));\n    }).property(),\n    urlGithubAdmin: (function() {\n      return \"http://github.com/\" + (this.get('slug')) + \"/admin/hooks#travis_minibucket\";\n    }).property(),\n    toggle: function() {\n      var transaction;\n      transaction = this.get('store').transaction();\n      transaction.add(this);\n      this.set('active', !this.get('active'));\n      return transaction.commit();\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/hook");minispade.register('models/job', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Job = Travis.Model.extend(Travis.DurationCalculations, {\n    repoId: DS.attr('number', {\n      key: 'repository_id'\n    }),\n    buildId: DS.attr('number'),\n    commitId: DS.attr('number'),\n    logId: DS.attr('number'),\n    queue: DS.attr('string'),\n    state: DS.attr('string'),\n    number: DS.attr('string'),\n    result: DS.attr('number'),\n    _duration: DS.attr('number', {\n      key: 'duration'\n    }),\n    startedAt: DS.attr('string'),\n    finishedAt: DS.attr('string'),\n    allowFailure: DS.attr('boolean', {\n      key: 'allow_failure'\n    }),\n    repo: DS.belongsTo('Travis.Repo', {\n      key: 'repository_id'\n    }),\n    build: DS.belongsTo('Travis.Build', {\n      key: 'build_id'\n    }),\n    commit: DS.belongsTo('Travis.Commit', {\n      key: 'commit_id'\n    }),\n    log: DS.belongsTo('Travis.Artifact', {\n      key: 'log_id'\n    }),\n    isQueued: (function() {}).property('state'),\n    config: (function() {\n      return Travis.Helpers.compact(this.get('data.config'));\n    }).property('data.config'),\n    sponsor: (function() {\n      var worker;\n      worker = this.get('log.workerName');\n      if (worker && worker.length) {\n        return Travis.WORKERS[worker] || {\n          name: \"Travis Pro\",\n          url: \"http://travis-ci.com\"\n        };\n      }\n    }).property('log.workerName'),\n    configValues: (function() {\n      var config;\n      if (config = this.get('config')) {\n        return $.values($.only.apply(config, Travis.CONFIG_KEYS));\n      } else {\n        return [];\n      }\n    }).property('config'),\n    appendLog: function(text) {\n      var log;\n      if (log = this.get('log')) {\n        return log.append(text);\n      }\n    },\n    subscribe: function() {\n      var id;\n      if (id = this.get('id')) {\n        return Travis.app.pusher.subscribe(\"job-\" + id);\n      }\n    },\n    onStateChange: (function() {\n      if (this.get('state') === 'finished') {\n        return Travis.app.pusher.unsubscribe(\"job-\" + (this.get('id')));\n      }\n    }).observes('state')\n  });\n\n  this.Travis.Job.reopenClass({\n    queued: function(queue) {\n      this.find();\n      return Travis.app.store.filter(this, function(job) {\n        var queued;\n        queued = ['created', 'queued'].indexOf(job.get('state')) !== -1;\n        return queued && job.get('queue') === (\"builds.\" + queue);\n      });\n    },\n    findMany: function(ids) {\n      return Travis.app.store.findMany(this, ids);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/job");minispade.register('models/repo', "(function() {(function() {\nminispade.require('travis/expandable_record_array');\nminispade.require('travis/model');\n\n  this.Travis.Repo = Travis.Model.extend({\n    slug: DS.attr('string'),\n    description: DS.attr('string'),\n    lastBuildId: DS.attr('number'),\n    lastBuildNumber: DS.attr('string'),\n    lastBuildResult: DS.attr('number'),\n    lastBuildStartedAt: DS.attr('string'),\n    lastBuildFinishedAt: DS.attr('string'),\n    lastBuild: DS.belongsTo('Travis.Build'),\n    builds: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'push'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    pullRequests: (function() {\n      var array, builds, id;\n      id = this.get('id');\n      builds = Travis.Build.byRepoId(id, {\n        event_type: 'pull_request'\n      });\n      array = Travis.ExpandableRecordArray.create({\n        type: Travis.Build,\n        content: Ember.A([]),\n        store: this.get('store')\n      });\n      array.load(builds);\n      return array;\n    }).property(),\n    branches: (function() {\n      return Travis.Branch.byRepoId(this.get('id'));\n    }).property(),\n    owner: (function() {\n      return (this.get('slug') || '').split('/')[0];\n    }).property('slug'),\n    name: (function() {\n      return (this.get('slug') || '').split('/')[1];\n    }).property('slug'),\n    lastBuildDuration: (function() {\n      var duration;\n      duration = this.get('data.last_build_duration');\n      if (!duration) {\n        duration = Travis.Helpers.durationFrom(this.get('lastBuildStartedAt'), this.get('lastBuildFinishedAt'));\n      }\n      return duration;\n    }).property('data.last_build_duration', 'lastBuildStartedAt', 'lastBuildFinishedAt'),\n    sortOrder: (function() {\n      var lastBuildFinishedAt;\n      if (lastBuildFinishedAt = this.get('lastBuildFinishedAt')) {\n        return -new Date(lastBuildFinishedAt).getTime();\n      } else {\n        return -new Date('9999').getTime() - parseInt(this.get('lastBuildId'));\n      }\n    }).property('lastBuildFinishedAt', 'lastBuildId'),\n    stats: (function() {\n      var _this = this;\n      return this.get('_stats') || $.get(\"https://api.github.com/repos/\" + (this.get('slug')), function(data) {\n        _this.set('_stats', data);\n        return _this.notifyPropertyChange('stats');\n      }) && {};\n    }).property(),\n    select: function() {\n      return Travis.Repo.select(this.get('id'));\n    },\n    updateTimes: function() {\n      return this.notifyPropertyChange('lastBuildDuration');\n    }\n  });\n\n  this.Travis.Repo.reopenClass({\n    url: 'repository',\n    recent: function() {\n      return this.find();\n    },\n    ownedBy: function(login) {\n      return this.find({\n        owner_name: login,\n        orderBy: 'name'\n      });\n    },\n    search: function(query) {\n      return this.find({\n        search: query,\n        orderBy: 'name'\n      });\n    },\n    bySlug: function(slug) {\n      var repo;\n      repo = $.select(this.find().toArray(), function(repo) {\n        return repo.get('slug') === slug;\n      });\n      if (repo.length > 0) {\n        return repo;\n      } else {\n        return this.find({\n          slug: slug\n        });\n      }\n    },\n    select: function(id) {\n      return this.find().forEach(function(repo) {\n        return repo.set('selected', repo.get('id') === id);\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/repo");minispade.register('models/sponsor', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Sponsor = Travis.Model.extend({\n    type: DS.attr('string'),\n    url: DS.attr('string'),\n    link: DS.attr('string'),\n    image: (function() {\n      return \"/images/sponsors/\" + (this.get('data.image'));\n    }).property('data.image')\n  });\n\n  Travis.Sponsor.reopenClass({\n    decks: function() {\n      return this.platinum().concat(this.gold());\n    },\n    platinum: function() {\n      var platinum, sponsor, _i, _len, _results;\n      platinum = this.byType('platinum').toArray();\n      _results = [];\n      for (_i = 0, _len = platinum.length; _i < _len; _i++) {\n        sponsor = platinum[_i];\n        _results.push([sponsor]);\n      }\n      return _results;\n    },\n    gold: function() {\n      var gold, _results;\n      gold = this.byType('gold').toArray();\n      _results = [];\n      while (gold.length > 0) {\n        _results.push(gold.splice(0, 2));\n      }\n      return _results;\n    },\n    links: function() {\n      return this.byType('silver');\n    },\n    byType: function() {\n      var types;\n      types = Array.prototype.slice.apply(arguments);\n      return Travis.Sponsor.filter(function(sponsor) {\n        return types.indexOf(sponsor.get('type')) !== -1;\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/sponsor");minispade.register('models/user', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('travis/model');\n\n  this.Travis.User = Travis.Model.extend(Travis.Ajax, {\n    name: DS.attr('string'),\n    email: DS.attr('string'),\n    login: DS.attr('string'),\n    token: DS.attr('string'),\n    locale: DS.attr('string'),\n    gravatarId: DS.attr('string'),\n    isSyncing: DS.attr('boolean'),\n    syncedAt: DS.attr('string'),\n    repoCount: DS.attr('number'),\n    init: function() {\n      if (this.get('isSyncing')) {\n        this.poll();\n      }\n      this._super();\n      return Ember.run.next(this, function() {\n        var transaction;\n        transaction = this.get('store').transaction();\n        return transaction.add(this);\n      });\n    },\n    urlGithub: (function() {\n      return \"https://github.com/\" + (this.get('login'));\n    }).property(),\n    permissions: (function() {\n      var _this = this;\n      if (!this.permissions) {\n        this.permissions = Ember.ArrayProxy.create({\n          content: []\n        });\n        this.ajax('/users/permissions', 'get', {\n          success: function(data) {\n            return _this.permissions.set('content', data.permissions);\n          }\n        });\n      }\n      return this.permissions;\n    }).property(),\n    updateLocale: function(locale) {\n      var observer, self, transaction;\n      this.setWithSession('locale', locale);\n      transaction = this.get('transaction');\n      transaction.commit();\n      self = this;\n      observer = function() {\n        if (!self.get('isSaving')) {\n          self.removeObserver('isSaving', observer);\n          transaction = self.get('store').transaction();\n          return transaction.add(self);\n        }\n      };\n      return this.addObserver('isSaving', observer);\n    },\n    type: (function() {\n      return 'user';\n    }).property(),\n    sync: function() {\n      this.post('/users/sync');\n      this.setWithSession('isSyncing', true);\n      return this.poll();\n    },\n    poll: function() {\n      var _this = this;\n      return this.ajax('/users', 'get', {\n        success: function(data) {\n          if (data.user.is_syncing) {\n            return Ember.run.later(_this, _this.poll.bind(_this), 3000);\n          } else {\n            _this.set('isSyncing', false);\n            return _this.setWithSession('syncedAt', data.user.synced_at);\n          }\n        }\n      });\n    },\n    setWithSession: function(name, value) {\n      var user;\n      this.set(name, value);\n      user = JSON.parse(typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.getItem('travis.user') : void 0);\n      user[$.underscore(name)] = this.get(name);\n      return typeof sessionStorage !== \"undefined\" && sessionStorage !== null ? sessionStorage.setItem('travis.user', JSON.stringify(user)) : void 0;\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/user");minispade.register('models/worker', "(function() {(function() {\nminispade.require('travis/model');\n\n  this.Travis.Worker = Travis.Model.extend({\n    state: DS.attr('string'),\n    name: DS.attr('string'),\n    host: DS.attr('string'),\n    lastSeenAt: DS.attr('string'),\n    payload: (function() {\n      return this.get('data.payload');\n    }).property('data.payload'),\n    number: (function() {\n      return this.get('name').match(/\\d+$/)[0];\n    }).property('name'),\n    isWorking: (function() {\n      return this.get('state') === 'working';\n    }).property('state'),\n    repo: (function() {\n      return Travis.Repo.find(this.get('payload.repository.id') || this.get('payload.repo.id'));\n    }).property('payload.repository.id', 'payload.repo.id'),\n    job_id: (function() {\n      return this.get('payload.job.id');\n    }).property('payload.job.id'),\n    job: (function() {\n      return Travis.Job.find(this.get('job_id'));\n    }).property('job_id')\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=models/worker");minispade.register('pusher', "(function() {(function() {\n\n  Travis.Pusher = function(config) {\n    if (config) {\n      this.init(config);\n    }\n    return this;\n  };\n\n  $.extend(Travis.Pusher, {\n    CHANNELS: ['common'],\n    CHANNEL_PREFIX: ''\n  });\n\n  $.extend(Travis.Pusher.prototype, {\n    active_channels: [],\n    init: function(config) {\n      var channel, _i, _len, _ref, _results;\n      Pusher.warn = this.warn.bind(this);\n      this.pusher = new Pusher(config.key);\n      _ref = Travis.Pusher.CHANNELS;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        channel = _ref[_i];\n        _results.push(this.subscribe(channel));\n      }\n      return _results;\n    },\n    subscribe: function(channel) {\n      var _this = this;\n      if (this.pusher && this.active_channels.indexOf(channel) === -1) {\n        this.active_channels.push(channel);\n        return this.pusher.subscribe(this.prefix(channel)).bind_all(function(event, data) {\n          return _this.receive(event, data);\n        });\n      }\n    },\n    unsubscribe: function(channel) {\n      var ix;\n      ix = this.active_channels.indexOf(channel);\n      if (this.pusher && ix === -1) {\n        this.active_channels.splice(ix, 1);\n        return this.pusher.unsubscribe(this.prefix(channel));\n      }\n    },\n    prefix: function(channel) {\n      return \"\" + Travis.Pusher.CHANNEL_PREFIX + channel;\n    },\n    receive: function(event, data) {\n      if (event.substr(0, 6) === 'pusher') {\n        return;\n      }\n      if (data.id) {\n        data = this.normalize(event, data);\n      }\n      return Ember.run.next(function() {\n        return Travis.app.store.receive(event, data);\n      });\n    },\n    normalize: function(event, data) {\n      switch (event) {\n        case 'build:started':\n        case 'build:finished':\n          return data;\n        case 'job:created':\n        case 'job:started':\n        case 'job:finished':\n        case 'job:log':\n          if (data.queue) {\n            data.queue = data.queue.replace('builds.', '');\n          }\n          return {\n            job: data\n          };\n        case 'worker:added':\n        case 'worker:updated':\n        case 'worker:removed':\n          return {\n            worker: data\n          };\n      }\n    },\n    warn: function(type, warning) {\n      if (!this.ignoreWarning(warning)) {\n        return console.warn(warning);\n      }\n    },\n    ignoreWarning: function(warning) {\n      var message, _ref;\n      if (message = (_ref = warning.data) != null ? _ref.message : void 0) {\n        return message.indexOf('Existing subscription') === 0 || message.indexOf('No current subscription') === 0;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=pusher");minispade.register('routes', "(function() {(function() {\n\n  Travis.Router = Ember.Router.extend({\n    location: 'history',\n    enableLogging: true,\n    initialState: 'loading',\n    showRoot: Ember.Route.transitionTo('root.home.show'),\n    showStats: Ember.Route.transitionTo('root.stats'),\n    showRepo: Ember.Route.transitionTo('root.home.repo.show'),\n    showBuilds: Ember.Route.transitionTo('root.home.repo.builds.index'),\n    showBuild: Ember.Route.transitionTo('root.home.repo.builds.show'),\n    showPullRequests: Ember.Route.transitionTo('root.home.repo.pullRequests'),\n    showBranches: Ember.Route.transitionTo('root.home.repo.branches'),\n    showJob: Ember.Route.transitionTo('root.home.repo.job'),\n    showProfile: Ember.Route.transitionTo('root.profile'),\n    showAccount: Ember.Route.transitionTo('root.profile.account'),\n    showUserProfile: Ember.Route.transitionTo('root.profile.account.profile'),\n    signedIn: function() {\n      return !!Travis.app.get('auth.user');\n    },\n    needsAuth: function(path) {\n      return path.indexOf('/profile') === 0 && !this.signedIn();\n    },\n    loading: Ember.Route.extend({\n      routePath: function(router, path) {\n        sessionStorage.setItem('travis.path', path);\n        if (router.needsAuth(path)) {\n          router.transitionTo('root.auth');\n          return Travis.app.signIn();\n        } else {\n          return router.transitionTo('authenticated');\n        }\n      }\n    }),\n    authenticated: Ember.Route.extend({\n      connectOutlets: function(router) {\n        var path;\n        path = sessionStorage.getItem('travis.path');\n        sessionStorage.removeItem('travis.path');\n        router.transitionTo('root');\n        if (path) {\n          return router.route(path);\n        }\n      }\n    }),\n    root: Ember.Route.extend({\n      initialState: 'home',\n      loading: Ember.State.extend(),\n      auth: Ember.Route.extend({\n        route: '/auth',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('authLayout');\n          $('body').attr('id', 'auth');\n          router.get('authLayoutController').connectOutlet('top', 'top');\n          return router.get('authLayoutController').connectOutlet('main', 'signin');\n        }\n      }),\n      stats: Ember.Route.extend({\n        route: '/stats',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('statsLayout');\n          $('body').attr('id', 'stats');\n          router.get('statsLayoutController').connectOutlet('top', 'top');\n          return router.get('statsLayoutController').connectOutlet('main', 'stats');\n        }\n      }),\n      profile: Ember.Route.extend({\n        initialState: 'index',\n        route: '/profile',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('profileLayout');\n          $('body').attr('id', 'profile');\n          router.get('accountsController').set('content', Travis.Account.find());\n          router.get('profileLayoutController').connectOutlet('top', 'top');\n          return router.get('profileLayoutController').connectOutlet('left', 'accounts');\n        },\n        index: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            router.get('profileLayoutController').connectOutlet('main', 'profile');\n            return router.get('profileController').activate('hooks');\n          }\n        }),\n        account: Ember.Route.extend({\n          initialState: 'index',\n          route: '/:login',\n          connectOutlets: function(router, account) {\n            var params;\n            if (account) {\n              params = {\n                login: account.get('login')\n              };\n              return router.get('profileController').setParams(params);\n            } else {\n              return router.send('showProfile');\n            }\n          },\n          deserialize: function(router, params) {\n            return router.get('accountsController').findByLogin(params.login);\n          },\n          serialize: function(router, account) {\n            if (account) {\n              return {\n                login: account.get('login')\n              };\n            } else {\n              return {};\n            }\n          },\n          index: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('hooks');\n            }\n          }),\n          profile: Ember.Route.extend({\n            route: '/profile',\n            connectOutlets: function(router) {\n              return router.get('profileController').activate('user');\n            }\n          })\n        })\n      }),\n      home: Ember.Route.extend({\n        initialState: 'show',\n        route: '/',\n        connectOutlets: function(router) {\n          router.get('applicationController').connectOutlet('home');\n          $('body').attr('id', 'home');\n          router.get('homeController').connectOutlet('left', 'repos');\n          router.get('homeController').connectOutlet('right', 'sidebar');\n          router.get('homeController').connectOutlet('top', 'top');\n          router.get('homeController').connectOutlet('main', 'repo');\n          return router.get('homeController').connectOutlet('flash', 'flash');\n        },\n        show: Ember.Route.extend({\n          route: '/',\n          connectOutlets: function(router) {\n            return router.get('repoController').activate('index');\n          }\n        }),\n        repo: Ember.Route.extend({\n          initialState: 'show',\n          route: '/:owner/:name',\n          connectOutlets: function(router, repo) {\n            return router.get('repoController').set('repo', repo);\n          },\n          deserialize: function(router, params) {\n            var deferred, observer, repos, slug;\n            slug = \"\" + params.owner + \"/\" + params.name;\n            repos = Travis.Repo.bySlug(slug);\n            deferred = $.Deferred();\n            observer = function() {\n              if (repos.get('isLoaded')) {\n                repos.removeObserver('isLoaded', observer);\n                return deferred.resolve(repos.objectAt(0));\n              }\n            };\n            repos.addObserver('isLoaded', observer);\n            return deferred.promise();\n          },\n          serialize: function(router, repo) {\n            if (repo) {\n              return {\n                owner: repo.get('owner'),\n                name: repo.get('name')\n              };\n            } else {\n              return {};\n            }\n          },\n          show: Ember.Route.extend({\n            route: '/',\n            connectOutlets: function(router) {\n              return router.get('repoController').activate('current');\n            }\n          }),\n          builds: Ember.Route.extend({\n            route: '/builds',\n            initialState: 'index',\n            index: Ember.Route.extend({\n              route: '/',\n              connectOutlets: function(router, repo) {\n                return router.get('repoController').activate('builds');\n              }\n            }),\n            show: Ember.Route.extend({\n              route: '/:build_id',\n              connectOutlets: function(router, build) {\n                if (!build.get) {\n                  build = Travis.Build.find(build);\n                }\n                router.get('repoController').set('build', build);\n                return router.get('repoController').activate('build');\n              },\n              serialize: function(router, build) {\n                if (build.get) {\n                  return {\n                    build_id: build.get('id')\n                  };\n                } else {\n                  return {\n                    build_id: build\n                  };\n                }\n              },\n              deserialize: function(router, params) {\n                var build, deferred, observer;\n                build = Travis.Build.find(params.build_id);\n                deferred = $.Deferred();\n                observer = function() {\n                  if (build.get('id')) {\n                    build.removeObserver('id', observer);\n                    return deferred.resolve(build);\n                  }\n                };\n                build.addObserver('id', observer);\n                return deferred.promise();\n              }\n            })\n          }),\n          pullRequests: Ember.Route.extend({\n            route: '/pull_requests',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('pull_requests');\n            }\n          }),\n          branches: Ember.Route.extend({\n            route: '/branches',\n            connectOutlets: function(router, repo) {\n              return router.get('repoController').activate('branches');\n            }\n          }),\n          job: Ember.Route.extend({\n            route: '/jobs/:job_id',\n            connectOutlets: function(router, job) {\n              if (!job.get) {\n                job = Travis.Job.find(job);\n              }\n              router.get('repoController').set('job', job);\n              return router.get('repoController').activate('job');\n            },\n            serialize: function(router, job) {\n              if (job.get) {\n                return {\n                  job_id: job.get('id')\n                };\n              } else {\n                return {\n                  job_id: job\n                };\n              }\n            },\n            deserialize: function(router, params) {\n              var deferred, job, observer;\n              job = Travis.Job.find(params.job_id);\n              deferred = $.Deferred();\n              observer = function() {\n                if (job.get('id')) {\n                  job.removeObserver('id', observer);\n                  return deferred.resolve(job);\n                }\n              };\n              job.addObserver('id', observer);\n              return deferred.promise();\n            }\n          })\n        })\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=routes");minispade.register('slider', "(function() {(function() {\n\n  this.Travis.Slider = function() {\n    if ((typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.getItem('travis.maximized') : void 0) === 'true') {\n      this.minimize();\n    }\n    return this;\n  };\n\n  $.extend(Travis.Slider.prototype, {\n    persist: function() {\n      return typeof localStorage !== \"undefined\" && localStorage !== null ? localStorage.setItem('travis.maximized', this.isMinimized()) : void 0;\n    },\n    isMinimized: function() {\n      return $('body').hasClass('maximized');\n    },\n    minimize: function() {\n      return $('body').addClass('maximized');\n    },\n    toggle: function() {\n      var element;\n      $('body').toggleClass('maximized');\n      this.persist();\n      element = $('<span></span>');\n      $('#top .profile').append(element);\n      return Em.run.later((function() {\n        return element.remove();\n      }), 10);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=slider");minispade.register('store', "(function() {(function() {\n  var DATA_PROXY,\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\nminispade.require('store/rest_adapter');\n\n  DATA_PROXY = {\n    get: function(name) {\n      return this.savedData[name];\n    }\n  };\n\n  Travis.Store = DS.Store.extend({\n    revision: 4,\n    adapter: Travis.RestAdapter.create(),\n    merge: function(type, id, hash) {\n      var clientId, data, dataCache, primaryKey, record, recordCache, typeMap;\n      if (hash === void 0) {\n        hash = id;\n        primaryKey = type.proto().primaryKey;\n        Ember.assert(\"A data hash was loaded for a record of type \" + type.toString() + \" but no primary key '\" + primaryKey + \"' was provided.\", hash[primaryKey]);\n        id = hash[primaryKey];\n      }\n      typeMap = this.typeMapFor(type);\n      dataCache = typeMap.cidToHash;\n      clientId = typeMap.idToCid[id];\n      recordCache = this.get('recordCache');\n      if (clientId !== void 0) {\n        if (data = dataCache[clientId]) {\n          $.extend(data, hash);\n        } else {\n          dataCache[clientId] = hash;\n        }\n        if (record = recordCache[clientId]) {\n          record.send('didChangeData');\n        }\n      } else {\n        clientId = this.find(type, id).get('clientId');\n      }\n      if (clientId) {\n        DATA_PROXY.savedData = hash;\n        this.updateRecordArrays(type, clientId, DATA_PROXY);\n        return {\n          id: id,\n          clientId: clientId\n        };\n      }\n    },\n    receive: function(event, data) {\n      var job, mappings, name, type, _ref;\n      _ref = event.split(':'), name = _ref[0], type = _ref[1];\n      mappings = this.adapter.get('mappings');\n      type = mappings[name];\n      if (event === 'job:log') {\n        if (job = this.find(Travis.Job, data['job']['id'])) {\n          return job.appendLog(data['job']['_log']);\n        }\n      } else if (data[type.singularName()]) {\n        return this._loadOne(this, type, data);\n      } else if (data[type.pluralName()]) {\n        return this._loadMany(this, type, data);\n      } else {\n        if (!type) {\n          throw \"can't load data for \" + name;\n        }\n      }\n    },\n    _loadOne: function(store, type, json) {\n      var root;\n      root = type.singularName();\n      this.adapter.sideload(store, type, json, root);\n      this.merge(type, json[root]);\n      return this._updateAssociations(type, root, json[root]);\n    },\n    _loadMany: function(store, type, json) {\n      var root;\n      root = type.pluralName();\n      this.adapter.sideload(store, type, json, root);\n      return this.loadMany(type, json[root]);\n    },\n    _updateAssociations: function(type, name, data) {\n      var _this = this;\n      return Em.get(type, 'associationsByName').forEach(function(key, meta) {\n        var clientId, dataProxy, id, ids, parent, _ref;\n        if (meta.kind === 'belongsTo') {\n          id = data[\"\" + key + \"_id\"];\n          if (clientId = _this.typeMapFor(meta.type).idToCid[id]) {\n            if (parent = _this.findByClientId(meta.type, clientId, id)) {\n              dataProxy = parent.get('data');\n              if (ids = dataProxy.get(\"\" + name + \"_ids\")) {\n                if (_ref = data.id, __indexOf.call(ids, _ref) < 0) {\n                  ids.pushObject(data.id);\n                }\n                return parent.send('didChangeData');\n              }\n            }\n          }\n        }\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store");minispade.register('store/fixture_adapter', "(function() {(function() {\n\n  this.Travis.FixtureAdapter = DS.Adapter.extend({\n    find: function(store, type, id) {\n      var fixtures;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      if (fixtures.hasLoaded) {\n        return;\n      }\n      return setTimeout((function() {\n        store.loadMany(type, fixtures);\n        return fixtures.hasLoaded = true;\n      }), 300);\n    },\n    findMany: function() {\n      return this.find.apply(this, arguments);\n    },\n    findAll: function(store, type) {\n      var fixtures, ids;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      ids = fixtures.map(function(item, index, self) {\n        return item.id;\n      });\n      return store.loadMany(type, ids, fixtures);\n    },\n    findQuery: function(store, type, params, array) {\n      var fixture, fixtures, hashes, key, matches, value;\n      fixtures = type.FIXTURES;\n      Ember.assert(\"Unable to find fixtures for model type \" + type.toString(), !!fixtures);\n      hashes = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (_i = 0, _len = fixtures.length; _i < _len; _i++) {\n          fixture = fixtures[_i];\n          matches = (function() {\n            var _results1;\n            _results1 = [];\n            for (key in params) {\n              value = params[key];\n              _results1.push(key === 'orderBy' || fixture[key] === value);\n            }\n            return _results1;\n          })();\n          if (matches.reduce(function(a, b) {\n            return a && b;\n          })) {\n            _results.push(fixture);\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      })();\n      return array.load(hashes.compact());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/fixture_adapter");minispade.register('store/rest_adapter', "(function() {(function() {\nminispade.require('travis/ajax');\nminispade.require('models');\n\n  this.Travis.RestAdapter = DS.RESTAdapter.extend(Travis.Ajax, {\n    mappings: {\n      repositories: Travis.Repo,\n      repository: Travis.Repo,\n      repos: Travis.Repo,\n      repo: Travis.Repo,\n      builds: Travis.Build,\n      build: Travis.Build,\n      commits: Travis.Commit,\n      commit: Travis.Commit,\n      jobs: Travis.Job,\n      job: Travis.Job,\n      account: Travis.Account,\n      accounts: Travis.Account,\n      worker: Travis.Worker,\n      workers: Travis.Worker\n    },\n    plurals: {\n      repositories: 'repositories',\n      repository: 'repositories',\n      repo: 'repositories',\n      repos: 'repositories',\n      build: 'builds',\n      branch: 'branches',\n      job: 'jobs',\n      worker: 'workers',\n      profile: 'profile'\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=store/rest_adapter");minispade.register('tailing', "(function() {(function() {\n\n  this.Travis.Tailing = function() {\n    this.position = $(window).scrollTop();\n    $(window).scroll(this.onScroll.bind(this));\n    return this;\n  };\n\n  $.extend(Travis.Tailing.prototype, {\n    options: {\n      timeout: 200\n    },\n    run: function() {\n      this.autoScroll();\n      this.positionButton();\n      if (this.active()) {\n        return Ember.run.later(this.run.bind(this), this.options.timeout);\n      }\n    },\n    toggle: function(event) {\n      if (this.active()) {\n        return this.stop();\n      } else {\n        return this.start();\n      }\n    },\n    active: function() {\n      return $('#tail').hasClass('active');\n    },\n    start: function() {\n      $('#tail').addClass('active');\n      return this.run();\n    },\n    stop: function() {\n      return $('#tail').removeClass('active');\n    },\n    autoScroll: function() {\n      var log, logBottom, win, winBottom;\n      if (!this.active()) {\n        return;\n      }\n      win = $(window);\n      log = $('#log');\n      logBottom = log.offset().top + log.outerHeight() + 40;\n      winBottom = win.scrollTop() + win.height();\n      if (logBottom - winBottom > 0) {\n        return win.scrollTop(logBottom - win.height());\n      }\n    },\n    onScroll: function() {\n      var position;\n      this.positionButton();\n      position = $(window).scrollTop();\n      if (position < this.position) {\n        this.stop();\n      }\n      return this.position = position;\n    },\n    positionButton: function() {\n      var max, offset, tail;\n      tail = $('#tail');\n      if (tail.length === 0) {\n        return;\n      }\n      offset = $(window).scrollTop() - $('#log').offset().top;\n      max = $('#log').height() - $('#tail').height() + 5;\n      if (offset > max) {\n        offset = max;\n      }\n      if (offset > 0) {\n        return tail.css({\n          top: offset - 2\n        });\n      } else {\n        return tail.css({\n          top: 0\n        });\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=tailing");minispade.register('views', "(function() {(function() {\nminispade.require('ext/ember/namespace');\n\n  this.Travis.reopen({\n    View: Em.View.extend({\n      popup: function(event) {\n        this.popupCloseAll();\n        return $(\"#\" + event.target.name).toggleClass('display');\n      },\n      popupClose: function(event) {\n        return $(event.target).closest('.popup').removeClass('display');\n      },\n      popupCloseAll: function() {\n        return $('.popup').removeClass('display');\n      }\n    })\n  });\n\n  this.Travis.reopen({\n    HomeView: Travis.View.extend({\n      templateName: 'layouts/home'\n    }),\n    AuthLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ProfileLayoutView: Travis.View.extend({\n      templateName: 'layouts/profile'\n    }),\n    StatsLayoutView: Travis.View.extend({\n      templateName: 'layouts/simple'\n    }),\n    ApplicationView: Travis.View.extend({\n      templateName: 'application'\n    })\n  });\nminispade.require('views/accounts');\nminispade.require('views/build');\nminispade.require('views/flash');\nminispade.require('views/job');\nminispade.require('views/repo');\nminispade.require('views/profile');\nminispade.require('views/sidebar');\nminispade.require('views/stats');\nminispade.require('views/signin');\nminispade.require('views/top');\n\n}).call(this);\n\n})();\n//@ sourceURL=views");minispade.register('views/accounts', "(function() {(function() {\n\n  this.Travis.reopen({\n    AccountsView: Travis.View.extend({\n      tabBinding: 'controller.tab',\n      templateName: 'profile/accounts',\n      classAccounts: (function() {\n        if (this.get('tab') === 'accounts') {\n          return 'active';\n        }\n      }).property('tab')\n    }),\n    AccountsListView: Em.CollectionView.extend({\n      elementId: 'accounts',\n      accountBinding: 'content',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        accountBinding: 'content',\n        typeBinding: 'content.type',\n        selectedBinding: 'account.selected',\n        classNames: ['account'],\n        classNameBindings: ['type', 'selected'],\n        name: (function() {\n          return this.get('content.name') || this.get('content.login');\n        }).property('content.login', 'content.name'),\n        urlAccount: (function() {\n          return Travis.Urls.account(this.get('account.login'));\n        }).property('account.login')\n      })\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/accounts");minispade.register('views/build', "(function() {(function() {\n\n  this.Travis.reopen({\n    BuildsView: Travis.View.extend({\n      templateName: 'builds/list',\n      buildsBinding: 'controller.builds',\n      showMore: function() {\n        var id, number;\n        id = this.get('controller.repo.id');\n        number = this.get('builds.lastObject.number');\n        return this.get('builds').load(Travis.Build.olderThanNumber(id, number));\n      },\n      ShowMoreButton: Em.View.extend({\n        tagName: 'button',\n        classNameBindings: ['isLoading'],\n        attributeBindings: ['disabled'],\n        isLoadingBinding: 'controller.builds.isLoading',\n        template: Em.Handlebars.compile('{{view.label}}'),\n        disabledBinding: 'isLoading',\n        label: (function() {\n          if (this.get('isLoading')) {\n            return 'Loading';\n          } else {\n            return 'Show more';\n          }\n        }).property('isLoading'),\n        click: function() {\n          return this.get('parentView').showMore();\n        }\n      })\n    }),\n    BuildsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'context',\n      commitBinding: 'build.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha')\n    }),\n    BuildView: Travis.View.extend({\n      templateName: 'builds/show',\n      elementId: 'build',\n      classNameBindings: ['color', 'loading'],\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      commitBinding: 'build.commit',\n      loading: (function() {\n        return !this.get('build.isLoaded');\n      }).property('build.isLoaded'),\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('build.result'));\n      }).property('build.result'),\n      urlBuild: (function() {\n        return Travis.Urls.build(this.get('repo.slug'), this.get('build.id'));\n      }).property('repo.slug', 'build.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/build");minispade.register('views/flash', "(function() {(function() {\n\n  this.Travis.reopen({\n    FlashView: Travis.View.extend({\n      elementId: 'flash',\n      templateName: 'layouts/flash',\n      flashBinding: 'controller.firstObject',\n      classNameBindings: ['flash.type'],\n      messageBinding: 'flash.message',\n      close: function(event) {\n        return this.get('controller').shiftObject();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/flash");minispade.register('views/job', "(function() {(function() {\n\n  this.Travis.reopen({\n    JobsView: Travis.View.extend({\n      templateName: 'jobs/list',\n      buildBinding: 'controller.build'\n    }),\n    JobsItemView: Travis.View.extend({\n      tagName: 'tr',\n      classNameBindings: ['color'],\n      repoBinding: 'context.repo',\n      jobBinding: 'context',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id')\n    }),\n    JobView: Travis.View.extend({\n      templateName: 'jobs/show',\n      repoBinding: 'controller.repo',\n      jobBinding: 'controller.job',\n      commitBinding: 'job.commit',\n      color: (function() {\n        return Travis.Helpers.colorForResult(this.get('job.result'));\n      }).property('job.result'),\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('repo.slug'), this.get('job.id'));\n      }).property('repo.slug', 'job.id'),\n      urlGithubCommit: (function() {\n        return Travis.Urls.githubCommit(this.get('repo.slug'), this.get('commit.sha'));\n      }).property('repo.slug', 'commit.sha'),\n      urlAuthor: (function() {\n        return Travis.Urls.email(this.get('commit.authorEmail'));\n      }).property('commit.authorEmail'),\n      urlCommitter: (function() {\n        return Travis.Urls.email(this.get('commit.committerEmail'));\n      }).property('commit.committerEmail')\n    }),\n    LogView: Travis.View.extend({\n      templateName: 'jobs/log',\n      logBinding: 'job.log',\n      click: function(event) {\n        return $(event.target).closest('.fold').toggleClass('open');\n      },\n      toTop: function() {\n        return $(window).scrollTop(0);\n      },\n      jobBinding: 'context',\n      toggleTailing: function(event) {\n        Travis.app.tailing.toggle();\n        return event.preventDefault();\n      },\n      logSubscriber: (function() {\n        var job, state;\n        job = this.get('job');\n        state = this.get('job.state');\n        if (job && state !== 'finished') {\n          job.subscribe();\n        }\n        return null;\n      }).property('job', 'job.state')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/job");minispade.register('views/left', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      tabBinding: 'controller.tab',\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/left");minispade.register('views/profile', "(function() {(function() {\n\n  this.Travis.reopen({\n    ProfileView: Travis.View.extend({\n      templateName: 'profile/show',\n      accountBinding: 'controller.account',\n      name: (function() {\n        return this.get('account.name') || this.get('account.login');\n      }).property('account.name', 'account.login')\n    }),\n    ProfileTabsView: Travis.View.extend({\n      templateName: 'profile/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classHooks: (function() {\n        if (this.get('tab') === 'hooks') {\n          return 'active';\n        }\n      }).property('tab'),\n      classUser: (function() {\n        if (this.get('tab') === 'user') {\n          return 'active';\n        }\n      }).property('tab'),\n      accountBinding: 'controller.account',\n      displayUser: (function() {\n        return this.get('controller.account.login') === this.get('controller.user.login');\n      }).property('controller.account.login', 'controller.user.login')\n    }),\n    HooksView: Travis.View.extend({\n      templateName: 'profile/tabs/hooks',\n      userBinding: 'controller.user',\n      urlGithubAdmin: (function() {\n        return Travis.Urls.githubAdmin(this.get('hook.slug'));\n      }).property('hook.slug')\n    }),\n    UserView: Travis.View.extend({\n      templateName: 'profile/tabs/user',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=48&d=mm\";\n      }).property('user.gravatarId'),\n      locales: (function() {\n        return [\n          {\n            key: null,\n            name: ''\n          }, {\n            key: 'en',\n            name: 'English'\n          }, {\n            key: 'ca',\n            name: 'Catalan'\n          }, {\n            key: 'cs',\n            name: 'Čeština'\n          }, {\n            key: 'es',\n            name: 'Español'\n          }, {\n            key: 'fr',\n            name: 'Français'\n          }, {\n            key: 'ja',\n            name: '日本語'\n          }, {\n            key: 'nl',\n            name: 'Nederlands'\n          }, {\n            key: 'nb',\n            name: 'Norsk Bokmål'\n          }, {\n            key: 'pl',\n            name: 'Polski'\n          }, {\n            key: {\n              'pt-BR': {\n                name: 'Português brasileiro'\n              }\n            }\n          }, {\n            key: 'ru',\n            name: 'Русский'\n          }\n        ];\n      }).property(),\n      saveLocale: function(event) {\n        return this.get('user').updateLocale($('#locale').val());\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/profile");minispade.register('views/repo', "(function() {(function() {\nminispade.require('views/repo/list');\nminispade.require('views/repo/show');\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo");minispade.register('views/repo/list', "(function() {(function() {\n\n  this.Travis.reopen({\n    ReposView: Travis.View.extend({\n      templateName: 'repos/list',\n      toggleInfo: function(event) {\n        return $('#repos').toggleClass('open');\n      }\n    }),\n    ReposListView: Em.CollectionView.extend({\n      elementId: 'repos',\n      tagName: 'ul',\n      emptyView: Ember.View.extend({\n        template: Ember.Handlebars.compile('<div class=\"loading\"><span>Loading</span></div>')\n      }),\n      itemViewClass: Travis.View.extend({\n        repoBinding: 'content',\n        classNames: ['repo'],\n        classNameBindings: ['color', 'selected'],\n        selectedBinding: 'repo.selected',\n        color: (function() {\n          return Travis.Helpers.colorForResult(this.get('repo.lastBuildResult'));\n        }).property('repo.lastBuildResult'),\n        urlRepo: (function() {\n          return Travis.Urls.repo(this.get('repo.slug'));\n        }).property('repo.slug'),\n        urlLastBuild: (function() {\n          return Travis.Urls.build(this.get('repo.slug'), this.get('repo.lastBuildId'));\n        }).property('repo.slug', 'repo.lastBuildId')\n      })\n    }),\n    ReposListTabsView: Travis.View.extend({\n      templateName: 'repos/list/tabs',\n      tabBinding: 'controller.tab',\n      activate: function(event) {\n        return this.get('controller').activate(event.target.name);\n      },\n      classRecent: (function() {\n        if (this.get('tab') === 'recent') {\n          return 'active';\n        }\n      }).property('tab'),\n      classOwned: (function() {\n        var classes;\n        classes = [];\n        if (this.get('tab') === 'owned') {\n          classes.push('active');\n        }\n        if (Travis.app.get('currentUser')) {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.currentUser'),\n      classSearch: (function() {\n        if (this.get('tab') === 'search') {\n          return 'active';\n        }\n      }).property('tab')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/list");minispade.register('views/repo/show', "(function() {(function() {\n\n  this.Travis.reopen({\n    RepoView: Travis.View.extend({\n      templateName: 'repos/show',\n      repoBinding: 'controller.repo',\n      \"class\": (function() {\n        if (!this.get('repo.isLoaded')) {\n          return 'loading';\n        }\n      }).property('repo.isLoaded'),\n      urlGithub: (function() {\n        return Travis.Urls.githubRepo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubWatchers: (function() {\n        return Travis.Urls.githubWatchers(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlGithubNetwork: (function() {\n        return Travis.Urls.githubNetwork(this.get('repo.slug'));\n      }).property('repo.slug')\n    }),\n    RepoShowTabsView: Travis.View.extend({\n      templateName: 'repos/show/tabs',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      classCurrent: (function() {\n        if (this.get('tab') === 'current') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuilds: (function() {\n        if (this.get('tab') === 'builds') {\n          return 'active';\n        }\n      }).property('tab'),\n      classPullRequests: (function() {\n        if (this.get('tab') === 'pull_requests') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBranches: (function() {\n        if (this.get('tab') === 'branches') {\n          return 'active';\n        }\n      }).property('tab'),\n      classBuild: (function() {\n        var classes, tab;\n        tab = this.get('tab');\n        classes = [];\n        if (tab === 'build') {\n          classes.push('active');\n        }\n        if (tab === 'build' || tab === 'job') {\n          classes.push('display-inline');\n        }\n        return classes.join(' ');\n      }).property('tab'),\n      classJob: (function() {\n        if (this.get('tab') === 'job') {\n          return 'active display-inline';\n        }\n      }).property('tab')\n    }),\n    RepoShowToolsView: Travis.View.extend({\n      templateName: 'repos/show/tools',\n      repoBinding: 'controller.repo',\n      buildBinding: 'controller.build',\n      jobBinding: 'controller.job',\n      tabBinding: 'controller.tab',\n      closeMenu: function() {\n        return $('.menu').removeClass('display');\n      },\n      menu: function() {\n        var element;\n        this.popupCloseAll();\n        return element = $('#tools .menu').toggleClass('display');\n      },\n      requeue: function() {\n        this.closeMenu();\n        return this.get('build').requeue();\n      },\n      statusImages: function(event) {\n        this.set('active', true);\n        this.closeMenu();\n        return this.popup(event);\n      },\n      canPush: (function() {\n        return this.get('isBuildTab') && this.get('build.isFinished') && this.get('hasPushPermissions');\n      }).property('build.isFinished', 'hasPushPermissions', 'isBuildTab'),\n      isBuildTab: (function() {\n        return ['current', 'build', 'job'].indexOf(this.get('tab')) > -1;\n      }).property('tab'),\n      hasPushPermissions: (function() {\n        return Travis.app.get('currentUser.permissions').indexOf(this.get('repo.id')) > -1;\n      }).property('Travis.app.currentUser.permissions.length', 'repo.id'),\n      branches: (function() {\n        if (this.get('active')) {\n          return this.get('repo.branches');\n        }\n      }).property('active', 'repo.branches'),\n      urlRepo: (function() {\n        return 'https://' + location.host + Travis.Urls.repo(this.get('repo.slug'));\n      }).property('repo.slug'),\n      urlStatusImage: (function() {\n        return Travis.Urls.statusImage(this.get('repo.slug'), this.get('branch.commit.branch'));\n      }).property('repo.slug', 'branch'),\n      markdownStatusImage: (function() {\n        return \"[![Build Status](\" + (this.get('urlStatusImage')) + \")](\" + (this.get('urlRepo')) + \")\";\n      }).property('urlStatusImage'),\n      textileStatusImage: (function() {\n        return \"!\" + (this.get('urlStatusImage')) + \"!:\" + (this.get('urlRepo'));\n      }).property('urlStatusImage'),\n      rdocStatusImage: (function() {\n        return \"{<img src=\\\"\" + (this.get('urlStatusImage')) + \"\\\" alt=\\\"Build Status\\\" />}[\" + (this.get('urlRepo')) + \"]\";\n      }).property('urlStatusImage')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/repo/show");minispade.register('views/sidebar', "(function() {(function() {\n\n  this.Travis.reopen({\n    SidebarView: Travis.View.extend({\n      templateName: 'layouts/sidebar',\n      DecksView: Em.View.extend({\n        templateName: \"sponsors/decks\",\n        controller: Travis.SponsorsController.create({\n          perPage: 1\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n            controller.set('content', Travis.Sponsor.decks());\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      LinksView: Em.View.extend({\n        templateName: \"sponsors/links\",\n        controller: Travis.SponsorsController.create({\n          perPage: 6\n        }),\n        didInsertElement: function() {\n          var controller;\n          controller = this.get('controller');\n          if (!controller.get('content')) {\n            controller.set('content', Travis.Sponsor.links());\n            Travis.app.get('router.sidebarController').tickables.push(controller);\n          }\n          return this._super.apply(this, arguments);\n        }\n      }),\n      WorkersView: Em.View.extend({\n        templateName: 'workers/list',\n        controller: Travis.WorkersController.create(),\n        didInsertElement: function() {\n          this.set('controller.content', Travis.Worker.find());\n          return this._super.apply(this, arguments);\n        }\n      }),\n      QueuesView: Em.View.extend({\n        templateName: 'queues/list',\n        controller: Travis.QueuesController.create(),\n        didInsertElement: function() {\n          var queue, queues;\n          queues = (function() {\n            var _i, _len, _ref, _results;\n            _ref = Travis.QUEUES;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              queue = _ref[_i];\n              _results.push(Em.ArrayController.create({\n                content: Travis.Job.queued(queue.name),\n                id: \"queue_\" + queue.name,\n                name: queue.display\n              }));\n            }\n            return _results;\n          })();\n          this.set('controller.content', queues);\n          return this._super.apply(this, arguments);\n        }\n      })\n    }),\n    WorkersView: Travis.View.extend({\n      toggleWorkers: function(event) {\n        var handle;\n        handle = $(event.target).toggleClass('open');\n        if (handle.hasClass('open')) {\n          return $('#workers li').addClass('open');\n        } else {\n          return $('#workers li').removeClass('open');\n        }\n      }\n    }),\n    WorkersListView: Travis.View.extend({\n      toggle: function(event) {\n        return $(event.target).closest('li').toggleClass('open');\n      }\n    }),\n    WorkersItemView: Travis.View.extend({\n      display: (function() {\n        var name, number, payload, repo, state;\n        name = (this.get('worker.name') || '').replace('travis-', '');\n        state = this.get('worker.state');\n        payload = this.get('worker.payload');\n        if (state === 'working' && (payload != null ? payload.repo : void 0) && (payload != null ? payload.build : void 0)) {\n          repo = payload.repo.slug;\n          number = ' #' + payload.build.number;\n          return (\"<span class='name'>\" + name + \": \" + repo + \"</span> \" + number).htmlSafe();\n        } else {\n          return \"\" + name + \": \" + state;\n        }\n      }).property('worker.state')\n    }),\n    QueueItemView: Travis.View.extend({\n      tagName: 'li',\n      urlJob: (function() {\n        return Travis.Urls.job(this.get('job.repo.slug'), this.get('job.id'));\n      }).property('job.repo.slug', 'job.id')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/sidebar");minispade.register('views/signin', "(function() {(function() {\n\n  this.Travis.reopen({\n    SigninView: Travis.View.extend({\n      templateName: 'auth/signin',\n      signingIn: (function() {\n        return Travis.app.get('authState');\n      }).property('Travis.app.authState')\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/signin");minispade.register('views/stats', "(function() {(function() {\n\n  this.Travis.reopen({\n    StatsView: Travis.View.extend({\n      templateName: 'stats/show',\n      didInsertElement: function() {},\n      renderChart: function(config) {\n        var chart;\n        chart = new Highcharts.Chart(config);\n        return this.fetch(config.source, function(data) {\n          var stats;\n          stats = (function() {\n            var _i, _len, _ref, _results;\n            _ref = data.stats;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              stats = _ref[_i];\n              _results.push(config.map(stats));\n            }\n            return _results;\n          })();\n          return chart.series[0].setData(stats);\n        });\n      },\n      fetch: function(url, callback) {\n        return $.ajax({\n          type: 'GET',\n          url: url,\n          accepts: {\n            json: 'application/vnd.travis-ci.2+json'\n          },\n          success: callback\n        });\n      },\n      CHARTS: {\n        repos: {\n          source: '/api/stats/repos',\n          total: 0,\n          map: function(data) {\n            return [Date.parse(data.date), this.total += parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"repos_stats\"\n          },\n          title: {\n            text: \"Total Projects/Repositories\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" repos\";\n            }\n          },\n          series: [\n            {\n              name: \"Repository Growth\",\n              data: []\n            }\n          ]\n        },\n        builds: {\n          source: '/api/stats/tests',\n          map: function(data) {\n            return [Date.parse(data.date), parseInt(data.count)];\n          },\n          chart: {\n            renderTo: \"tests_stats\",\n            type: \"column\"\n          },\n          title: {\n            text: \"Build Count\"\n          },\n          subtitle: {\n            text: \"last month\"\n          },\n          xAxis: {\n            type: \"datetime\",\n            dateTimeLabelFormats: {\n              month: \"%e. %b\",\n              year: \"%b\"\n            }\n          },\n          yAxis: {\n            title: {\n              text: \"Count\"\n            },\n            min: 0\n          },\n          tooltip: {\n            formatter: function() {\n              return Highcharts.dateFormat(\"%e. %b\", this.x) + \": \" + this.y + \" builds\";\n            }\n          },\n          series: [\n            {\n              name: \"Total Builds\",\n              data: []\n            }\n          ]\n        }\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/stats");minispade.register('views/top', "(function() {(function() {\n\n  this.Travis.reopen({\n    TopView: Travis.View.extend({\n      templateName: 'layouts/top',\n      tabBinding: 'controller.tab',\n      userBinding: 'controller.user',\n      gravatarUrl: (function() {\n        return \"\" + location.protocol + \"//www.gravatar.com/avatar/\" + (this.get('user.gravatarId')) + \"?s=24&d=mm\";\n      }).property('user.gravatarId'),\n      classHome: (function() {\n        if (this.get('tab') === 'home') {\n          return 'active';\n        }\n      }).property('tab'),\n      classStats: (function() {\n        if (this.get('tab') === 'stats') {\n          return 'active';\n        }\n      }).property('tab'),\n      classProfile: (function() {\n        var classes;\n        classes = ['profile'];\n        if (this.get('tab') === 'profile') {\n          classes.push('active');\n        }\n        classes.push(Travis.app.get('authState'));\n        return classes.join(' ');\n      }).property('tab', 'Travis.app.authState'),\n      showProfile: function() {\n        return $('#top .profile ul').show();\n      },\n      hideProfile: function() {\n        return $('#top .profile ul').hide();\n      }\n    })\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=views/top");minispade.register('data/sponsors', "(function() {(function() {\n\n  this.Travis.SPONSORS = [\n    {\n      type: 'platinum',\n      url: \"http://www.wooga.com\",\n      image: \"wooga-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://bendyworks.com\",\n      image: \"bendyworks-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://cloudcontrol.com\",\n      image: \"cloudcontrol-205x130.png\"\n    }, {\n      type: 'platinum',\n      url: \"http://xing.de\",\n      image: \"xing-205x130.png\"\n    }, {\n      type: 'gold',\n      url: \"http://heroku.com\",\n      image: \"heroku-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://soundcloud.com\",\n      image: \"soundcloud-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://nedap.com\",\n      image: \"nedap-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://mongohq.com\",\n      image: \"mongohq-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://zweitag.de\",\n      image: \"zweitag-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://kanbanery.com\",\n      image: \"kanbanery-205x60.png\"\n    }, {\n      type: 'gold',\n      url: \"http://ticketevolution.com\",\n      image: \"ticketevolution-205x60.jpg\"\n    }, {\n      type: 'gold',\n      url: \"http://plan.io/travis\",\n      image: \"planio-205x60.png\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cobot.me\\\">Cobot</a><span>: The one tool to run your coworking space</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://jumpstartlab.com\\\">JumpstartLab</a><span>: We build developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://evilmartians.com\\\">Evil Martians</a><span>: Agile Ruby on Rails development</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://zendesk.com\\\">Zendesk</a><span>: Love your helpdesk</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://stripe.com\\\">Stripe</a><span>: Payments for developers</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://basho.com\\\">Basho</a><span>: We make Riak!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://thinkrelevance.com\\\">Relevance</a><span>: We deliver software solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://mindmatters.de\\\">Mindmatters</a><span>: Software für Menschen</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://amenhq.com\\\">Amen</a><span>: The best and worst of everything</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://site5.com\\\">Site5</a><span>: Premium Web Hosting Solutions</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.crowdint.com\\\">Crowd Interactive</a><span>: Leading Rails consultancy in Mexico</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.atomicobject.com/detroit\\\">Atomic Object</a><span>: Work with really smart people</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://codeminer.com.br\\\">Codeminer</a><span>: smart services for your startup</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://cloudant.com\\\">Cloudant</a><span>: grow into your data layer, not out of it</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://gidsy.com\\\">Gidsy</a><span>: Explore, organize &amp; book unique things to do!</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://5apps.com\\\">5apps</a><span>: Package &amp; deploy HTML5 apps automatically</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://meltmedia.com\\\">Meltmedia</a><span>: We are Interactive Superheroes</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.fngtps.com\\\">Fingertips</a><span> offers design and development services</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.engineyard.com\\\">Engine Yard</a><span>: Build epic apps, let us handle the rest</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://malwarebytes.org\\\">Malwarebytes</a><span>: Defeat Malware once and for all.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://readmill.com\\\">Readmill</a><span>: The best reading app on the iPad.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://www.mdsol.com\\\">Medidata</a><span>: clinical tech improving quality of life</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://coderwall.com/teams/4f27194e973bf000040005f0\\\">ESM</a><span>: Japan's best agile Ruby/Rails consultancy</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://twitter.com\\\">Twitter</a><span>: instantly connects people everywhere</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://agileanimal.com\\\">AGiLE ANiMAL</a><span>: we <3 Travis CI.</span>\"\n    }, {\n      type: 'silver',\n      link: \"<a href=\\\"http://tupalo.com\\\">Tupalo</a><span>: Discover, review &amp; share local businesses.</span>\"\n    }\n  ];\n\n  this.Travis.WORKERS = {\n    \"jvm-otp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://travis-ci.com\"\n    },\n    \"jvm-otp2.worker.travis-ci.org\": {\n      name: \"Transloadit\",\n      url: \"http://transloadit.com\"\n    },\n    \"ppp1.worker.travis-ci.org\": {\n      name: \"Travis Pro\",\n      url: \"http://beta.travis-ci.com\"\n    },\n    \"ppp2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ppp3.worker.travis-ci.org\": {\n      name: \"Alchemy CMS\",\n      url: \"http://alchemy-cms.com/\"\n    },\n    \"rails1.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby1.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"ruby2.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    },\n    \"ruby3.worker.travis-ci.org\": {\n      name: \"Railslove\",\n      url: \"http://railslove.de\"\n    },\n    \"ruby4.worker.travis-ci.org\": {\n      name: \"Engine Yard\",\n      url: \"http://www.engineyard.com\"\n    },\n    \"spree.worker.travis-ci.org\": {\n      name: \"Spree\",\n      url: \"http://spreecommerce.com\"\n    },\n    \"staging.worker.travis-ci.org\": {\n      name: \"EnterpriseRails\",\n      url: \"http://www.enterprise-rails.com\"\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=data/sponsors");minispade.register('emoij', "(function() {(function() {\n\n  this.EmojiDictionary = ['-1', '0', '1', '109', '2', '3', '4', '5', '6', '7', '8', '8ball', '9', 'a', 'ab', 'airplane', 'alien', 'ambulance', 'angel', 'anger', 'angry', 'apple', 'aquarius', 'aries', 'arrow_backward', 'arrow_down', 'arrow_forward', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right', 'arrow_right', 'arrow_up', 'arrow_upper_left', 'arrow_upper_right', 'art', 'astonished', 'atm', 'b', 'baby', 'baby_chick', 'baby_symbol', 'balloon', 'bamboo', 'bank', 'barber', 'baseball', 'basketball', 'bath', 'bear', 'beer', 'beers', 'beginner', 'bell', 'bento', 'bike', 'bikini', 'bird', 'birthday', 'black_square', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat', 'bomb', 'book', 'boot', 'bouquet', 'bow', 'bowtie', 'boy', 'bread', 'briefcase', 'broken_heart', 'bug', 'bulb', 'bullettrain_front', 'bullettrain_side', 'bus', 'busstop', 'cactus', 'cake', 'calling', 'camel', 'camera', 'cancer', 'capricorn', 'car', 'cat', 'cd', 'chart', 'checkered_flag', 'cherry_blossom', 'chicken', 'christmas_tree', 'church', 'cinema', 'city_sunrise', 'city_sunset', 'clap', 'clapper', 'clock1', 'clock10', 'clock11', 'clock12', 'clock2', 'clock3', 'clock4', 'clock5', 'clock6', 'clock7', 'clock8', 'clock9', 'closed_umbrella', 'cloud', 'clubs', 'cn', 'cocktail', 'coffee', 'cold_sweat', 'computer', 'confounded', 'congratulations', 'construction', 'construction_worker', 'convenience_store', 'cool', 'cop', 'copyright', 'couple', 'couple_with_heart', 'couplekiss', 'cow', 'crossed_flags', 'crown', 'cry', 'cupid', 'currency_exchange', 'curry', 'cyclone', 'dancer', 'dancers', 'dango', 'dart', 'dash', 'de', 'department_store', 'diamonds', 'disappointed', 'dog', 'dolls', 'dolphin', 'dress', 'dvd', 'ear', 'ear_of_rice', 'egg', 'eggplant', 'egplant', 'eight_pointed_black_star', 'eight_spoked_asterisk', 'elephant', 'email', 'es', 'european_castle', 'exclamation', 'eyes', 'factory', 'fallen_leaf', 'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel', 'finnadie', 'fire', 'fire_engine', 'fireworks', 'fish', 'fist', 'flags', 'flushed', 'football', 'fork_and_knife', 'fountain', 'four_leaf_clover', 'fr', 'fries', 'frog', 'fuelpump', 'gb', 'gem', 'gemini', 'ghost', 'gift', 'gift_heart', 'girl', 'goberserk', 'godmode', 'golf', 'green_heart', 'grey_exclamation', 'grey_question', 'grin', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer', 'hamster', 'hand', 'handbag', 'hankey', 'hash', 'headphones', 'heart', 'heart_decoration', 'heart_eyes', 'heartbeat', 'heartpulse', 'hearts', 'hibiscus', 'high_heel', 'horse', 'hospital', 'hotel', 'hotsprings', 'house', 'hurtrealbad', 'icecream', 'id', 'ideograph_advantage', 'imp', 'information_desk_person', 'iphone', 'it', 'jack_o_lantern', 'japanese_castle', 'joy', 'jp', 'key', 'kimono', 'kiss', 'kissing_face', 'kissing_heart', 'koala', 'koko', 'kr', 'leaves', 'leo', 'libra', 'lips', 'lipstick', 'lock', 'loop', 'loudspeaker', 'love_hotel', 'mag', 'mahjong', 'mailbox', 'man', 'man_with_gua_pi_mao', 'man_with_turban', 'maple_leaf', 'mask', 'massage', 'mega', 'memo', 'mens', 'metal', 'metro', 'microphone', 'minidisc', 'mobile_phone_off', 'moneybag', 'monkey', 'monkey_face', 'moon', 'mortar_board', 'mount_fuji', 'mouse', 'movie_camera', 'muscle', 'musical_note', 'nail_care', 'necktie', 'new', 'no_good', 'no_smoking', 'nose', 'notes', 'o', 'o2', 'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman', 'older_man', 'older_woman', 'open_hands', 'ophiuchus', 'palm_tree', 'parking', 'part_alternation_mark', 'pencil', 'penguin', 'pensive', 'persevere', 'person_with_blond_hair', 'phone', 'pig', 'pill', 'pisces', 'plus1', 'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2', 'police_car', 'poop', 'post_office', 'postbox', 'pray', 'princess', 'punch', 'purple_heart', 'question', 'rabbit', 'racehorse', 'radio', 'rage', 'rage1', 'rage2', 'rage3', 'rage4', 'rainbow', 'raised_hands', 'ramen', 'red_car', 'red_circle', 'registered', 'relaxed', 'relieved', 'restroom', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker', 'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rose', 'ru', 'runner', 'sa', 'sagittarius', 'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone', 'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'seat', 'secret', 'shaved_ice', 'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'signal_strength', 'six_pointed_star', 'ski', 'skull', 'sleepy', 'slot_machine', 'smile', 'smiley', 'smirk', 'smoking', 'snake', 'snowman', 'sob', 'soccer', 'space_invader', 'spades', 'spaghetti', 'sparkler', 'sparkles', 'speaker', 'speedboat', 'squirrel', 'star', 'star2', 'stars', 'station', 'statue_of_liberty', 'stew', 'strawberry', 'sunflower', 'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect', 'sweat', 'sweat_drops', 'swimmer', 'syringe', 'tada', 'tangerine', 'taurus', 'taxi', 'tea', 'telephone', 'tennis', 'tent', 'thumbsdown', 'thumbsup', 'ticket', 'tiger', 'tm', 'toilet', 'tokyo_tower', 'tomato', 'tongue', 'top', 'tophat', 'traffic_light', 'train', 'trident', 'trophy', 'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'tv', 'u5272', 'u55b6', 'u6307', 'u6708', 'u6709', 'u6e80', 'u7121', 'u7533', 'u7a7a', 'umbrella', 'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vhs', 'vibration_mode', 'virgo', 'vs', 'walking', 'warning', 'watermelon', 'wave', 'wc', 'wedding', 'whale', 'wheelchair', 'white_square', 'wind_chime', 'wink', 'wink2', 'wolf', 'woman', 'womans_hat', 'womens', 'x', 'yellow_heart', 'zap', 'zzz'];\n\n}).call(this);\n\n})();\n//@ sourceURL=emoij");minispade.register('ext/jquery', "(function() {(function() {\n\n  $.fn.extend({\n    outerHtml: function() {\n      return $(this).wrap('<div></div>').parent().html();\n    },\n    outerElement: function() {\n      return $($(this).outerHtml()).empty();\n    },\n    flash: function() {\n      return Utils.flash(this);\n    },\n    unflash: function() {\n      return Utils.unflash(this);\n    },\n    filterLog: function() {\n      this.deansi();\n      return this.foldLog();\n    },\n    deansi: function() {\n      return this.html(Utils.deansi(this.html()));\n    },\n    foldLog: function() {\n      return this.html(Utils.foldLog(this.html()));\n    },\n    unfoldLog: function() {\n      return this.html(Utils.unfoldLog(this.html()));\n    },\n    updateTimes: function() {\n      return Utils.updateTimes(this);\n    },\n    activateTab: function(tab) {\n      return Utils.activateTab(this, tab);\n    },\n    timeInWords: function() {\n      return $(this).each(function() {\n        return $(this).text(Utils.timeInWords(parseInt($(this).attr('title'))));\n      });\n    },\n    updateGithubStats: function(repo) {\n      return Utils.updateGithubStats(repo, $(this));\n    }\n  });\n\n  $.extend({\n    isEmpty: function(obj) {\n      if ($.isArray(obj)) {\n        return !obj.length;\n      } else if ($.isObject(obj)) {\n        return !$.keys(obj).length;\n      } else {\n        return !obj;\n      }\n    },\n    isObject: function(obj) {\n      return Object.prototype.toString.call(obj) === '[object Object]';\n    },\n    keys: function(obj) {\n      var keys;\n      keys = [];\n      $.each(obj, function(key) {\n        return keys.push(key);\n      });\n      return keys;\n    },\n    values: function(obj) {\n      var values;\n      values = [];\n      $.each(obj, function(key, value) {\n        return values.push(value);\n      });\n      return values;\n    },\n    underscore: function(string) {\n      return string[0].toLowerCase() + string.substring(1).replace(/([A-Z])?/g, function(match, chr) {\n        if (chr) {\n          return \"_\" + (chr.toUpperCase());\n        } else {\n          return '';\n        }\n      });\n    },\n    camelize: function(string, uppercase) {\n      string = uppercase === false ? $.underscore(string) : $.capitalize(string);\n      return string.replace(/_(.)?/g, function(match, chr) {\n        if (chr) {\n          return chr.toUpperCase();\n        } else {\n          return '';\n        }\n      });\n    },\n    capitalize: function(string) {\n      return string[0].toUpperCase() + string.substring(1);\n    },\n    compact: function(object) {\n      return $.grep(object, function(value) {\n        return !!value;\n      });\n    },\n    all: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return false;\n        }\n        i++;\n      }\n      return true;\n    },\n    detect: function(array, callback) {\n      var args, i;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          return array[i];\n        }\n        i++;\n      }\n    },\n    select: function(array, callback) {\n      var args, i, result;\n      args = Array.prototype.slice.apply(arguments);\n      callback = args.pop();\n      array = args.pop() || this;\n      result = [];\n      i = 0;\n      while (i < array.length) {\n        if (callback(array[i])) {\n          result.push(array[i]);\n        }\n        i++;\n      }\n      return result;\n    },\n    slice: function(object, key) {\n      var keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) > -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    only: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) !== -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    except: function(object) {\n      var key, keys, result;\n      keys = Array.prototype.slice.apply(arguments);\n      object = (typeof keys[0] === 'object' ? keys.shift() : this);\n      result = {};\n      for (key in object) {\n        if (keys.indexOf(key) === -1) {\n          result[key] = object[key];\n        }\n      }\n      return result;\n    },\n    intersect: function(array, other) {\n      return array.filter(function(element) {\n        return other.indexOf(element) !== -1;\n      });\n    },\n    map: function(elems, callback, arg) {\n      var i, isArray, key, length, ret, value;\n      value = void 0;\n      key = void 0;\n      ret = [];\n      i = 0;\n      length = elems.length;\n      isArray = elems instanceof jQuery || length !== void 0 && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems);\n      if (isArray) {\n        while (i < length) {\n          value = callback(elems[i], i, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n          i++;\n        }\n      } else {\n        for (key in elems) {\n          value = callback(elems[key], key, arg);\n          if (value != null) {\n            ret[ret.length] = value;\n          }\n        }\n      }\n      return ret.concat.apply([], ret);\n    },\n    shuffle: function(array) {\n      var current, tmp, top;\n      array = array.slice();\n      top = array.length;\n      while (top && --top) {\n        current = Math.floor(Math.random() * (top + 1));\n        tmp = array[current];\n        array[current] = array[top];\n        array[top] = tmp;\n      }\n      return array;\n    },\n    truncate: function(string, length) {\n      if (string.length > length) {\n        return string.trim().substring(0, length) + '...';\n      } else {\n        return string;\n      }\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=ext/jquery");minispade.register('travis/ajax', "(function() {(function() {\n\n  jQuery.support.cors = true;\n\n  this.Travis.Ajax = Ember.Mixin.create({\n    DEFAULT_OPTIONS: {\n      accepts: {\n        json: 'application/vnd.travis-ci.2+json'\n      }\n    },\n    post: function(url, data, callback) {\n      return this.ajax(url, 'post', {\n        data: data,\n        success: callback\n      });\n    },\n    ajax: function(url, method, options) {\n      var endpoint, token, _base;\n      endpoint = Travis.config.api_endpoint || '';\n      options = options || {};\n      if (token = sessionStorage.getItem('travis.token')) {\n        options.headers || (options.headers = {});\n        (_base = options.headers)['Authorization'] || (_base['Authorization'] = \"token \" + token);\n      }\n      options.url = \"\" + endpoint + url;\n      options.type = method;\n      options.dataType = 'json';\n      options.contentType = 'application/json; charset=utf-8';\n      options.context = this;\n      if (options.data && method !== 'GET' && method !== 'get') {\n        options.data = JSON.stringify(options.data);\n      }\n      return $.ajax($.extend(options, this.DEFAULT_OPTIONS));\n    }\n  });\n\n  this.Travis.ajax = Em.Object.create(this.Travis.Ajax, {\n    get: function(url, callback) {\n      return this.ajax(url, 'get', {\n        success: callback\n      });\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ajax");minispade.register('travis/expandable_record_array', "(function() {(function() {\n\n  Travis.ExpandableRecordArray = DS.RecordArray.extend({\n    isLoaded: false,\n    isLoading: false,\n    load: function(array) {\n      var observer, self;\n      this.set('isLoading', true);\n      self = this;\n      observer = function() {\n        var content;\n        if (this.get('isLoaded')) {\n          content = self.get('content');\n          array.removeObserver('isLoaded', observer);\n          array.forEach(function(record) {\n            return self.pushObject(record);\n          });\n          self.set('isLoading', false);\n          return self.set('isLoaded', true);\n        }\n      };\n      return array.addObserver('isLoaded', observer);\n    },\n    pushObject: function(record) {\n      var clientId, id, ids;\n      ids = this.get('content');\n      id = record.get('id');\n      clientId = record.get('clientId');\n      if (ids.contains(clientId)) {\n        return;\n      }\n      return ids.pushObject(clientId);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/expandable_record_array");minispade.register('travis/log', "(function() {(function() {\n\n  this.Travis.Log = {\n    FOLDS: {\n      schema: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:schema:load[\\s\\S]*?<p.*?\\/a>-- assume_migrated_upto_version[\\s\\S]*?<\\/p>\\n<p.*?\\/a>.*<\\/p>)/g,\n      migrate: /(<p.*?\\/a>\\$ (?:bundle exec )?rake( db:create)? db:migrate[\\s\\S]*== +\\w+: migrated \\(.*\\) =+)/g,\n      bundle: /(<p.*?\\/a>\\$ bundle install.*<\\/p>\\n(<p.*?\\/a>(Updating|Using|Installing|Fetching|remote:|Receiving|Resolving).*?<\\/p>\\n|<p.*?\\/a><\\/p>\\n)*)/g,\n      exec: /(<p.*?\\/a>[\\/\\w]*.rvm\\/rubies\\/[\\S]*?\\/(ruby|rbx|jruby) .*?<\\/p>)/g\n    },\n    filter: function(log) {\n      log = this.escape(log);\n      log = this.deansi(log);\n      log = log.replace(/\\r/g, '');\n      log = this.number(log);\n      log = this.fold(log);\n      log = log.replace(/\\n/g, '');\n      return log;\n    },\n    stripPaths: function(log) {\n      return log.replace(/\\/home\\/vagrant\\/builds(\\/[^\\/\\n]+){2}\\//g, '');\n    },\n    escape: function(log) {\n      return Handlebars.Utils.escapeExpression(log);\n    },\n    escapeRuby: function(log) {\n      return log.replace(/#<(\\w+.*?)>/, '#&lt;$1&gt;');\n    },\n    number: function(log) {\n      var result;\n      result = '';\n      $.each(log.trim().split('\\n'), function(ix, line) {\n        var number, path;\n        number = ix + 1;\n        path = Travis.Log.location().substr(1).replace(/\\/L\\d+/, '') + '/L' + number;\n        return result += '<p><a href=\\'#%@\\' id=\\'%@\\' name=\\'L%@\\'>%@</a>%@</p>\\n'.fmt(path, path, number, number, line);\n      });\n      return result.trim();\n    },\n    deansi: function(log) {\n      var ansi, text;\n      log = log.replace(/\\r\\r/g, '\\r').replace(/\\033\\[K\\r/g, '\\r').replace(/^.*\\r(?!$)/gm, '').replace(/\u001b\\[2K/g, '').replace(/\\033\\(B/g, \"\");\n      ansi = ansiparse(log);\n      text = '';\n      ansi.forEach(function(part) {\n        var classes;\n        classes = [];\n        part.foreground && classes.push(part.foreground);\n        part.background && classes.push('bg-' + part.background);\n        part.bold && classes.push('bold');\n        part.italic && classes.push('italic');\n        return text += (classes.length ? '<span class=\\'' + classes.join(' ') + '\\'>' + part.text + '</span>' : part.text);\n      });\n      return text.replace(/\\033/g, '');\n    },\n    fold: function(log) {\n      log = this.unfold(log);\n      $.each(Travis.Log.FOLDS, function(name, pattern) {\n        return log = log.replace(pattern, function() {\n          return '<div class=\\'fold ' + name + '\\'>' + arguments[1].trim() + '</div>';\n        });\n      });\n      return log;\n    },\n    unfold: function(log) {\n      return log.replace(/<div class='fold[^']*'>([\\s\\S]*?)<\\/div>/g, '$1\\n');\n    },\n    location: function() {\n      return window.location.hash;\n    }\n  };\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/log");minispade.register('travis/model', "(function() {(function() {\n\n  this.Travis.Model = DS.Model.extend({\n    primaryKey: 'id',\n    id: DS.attr('number'),\n    refresh: function() {\n      var id;\n      id = this.get('id');\n      if (id) {\n        return Travis.app.store.adapter.find(Travis.app.store, this.constructor, id);\n      }\n    },\n    update: function(attrs) {\n      var _this = this;\n      $.each(attrs, function(key, value) {\n        if (key !== 'id') {\n          return _this.set(key, value);\n        }\n      });\n      return this;\n    }\n  });\n\n  this.Travis.Model.reopenClass({\n    find: function() {\n      if (arguments.length === 0) {\n        return Travis.app.store.findAll(this);\n      } else {\n        return this._super.apply(this, arguments);\n      }\n    },\n    filter: function(callback) {\n      return Travis.app.store.filter(this, callback);\n    },\n    load: function(attrs) {\n      return Travis.app.store.load(this, attrs);\n    },\n    buildURL: function(suffix) {\n      var base, url;\n      base = this.url || this.pluralName();\n      Ember.assert('Base URL (' + base + ') must not start with slash', !base || base.toString().charAt(0) !== '/');\n      Ember.assert('URL suffix (' + suffix + ') must not start with slash', !suffix || suffix.toString().charAt(0) !== '/');\n      url = [base];\n      if (suffix !== void 0) {\n        url.push(suffix);\n      }\n      return url.join('/');\n    },\n    singularName: function() {\n      var name, parts;\n      parts = this.toString().split('.');\n      name = parts[parts.length - 1];\n      return name.replace(/([A-Z])/g, '_$1').toLowerCase().slice(1);\n    },\n    pluralName: function() {\n      return Travis.app.store.adapter.pluralize(this.singularName());\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/model");minispade.register('travis/ticker', "(function() {(function() {\n\n  this.Travis.Ticker = Ember.Object.extend({\n    init: function() {\n      if (this.get('interval') !== -1) {\n        return this.schedule();\n      }\n    },\n    tick: function() {\n      var context, target, targets, _i, _len;\n      context = this.get('context');\n      targets = this.get('targets') || [this.get('target')];\n      for (_i = 0, _len = targets.length; _i < _len; _i++) {\n        target = targets[_i];\n        if (context) {\n          target = context.get(target);\n        }\n        if (target) {\n          target.tick();\n        }\n      }\n      return this.schedule();\n    },\n    schedule: function() {\n      var _this = this;\n      return Ember.run.later((function() {\n        return _this.tick();\n      }), this.get('interval') || Travis.app.TICK_INTERVAL);\n    }\n  });\n\n}).call(this);\n\n})();\n//@ sourceURL=travis/ticker");minispade.register('travis', "(function() {(function() {\nminispade.require('ext/jquery');\nminispade.require('ext/ember/namespace');\n\n  this.Travis = Em.Namespace.create({\n    config: {\n      api_endpoint: $('meta[rel=\"travis.api_endpoint\"]').attr('href')\n    },\n    CONFIG_KEYS: ['rvm', 'gemfile', 'env', 'jdk', 'otp_release', 'php', 'node_js', 'perl', 'python', 'scala'],\n    ROUTES: {\n      'profile/:login/me': ['profile', 'user'],\n      'profile/:login': ['profile', 'hooks'],\n      'profile': ['profile', 'hooks'],\n      'stats': ['stats', 'show'],\n      ':owner/:name/jobs/:id/:line': ['home', 'job'],\n      ':owner/:name/jobs/:id': ['home', 'job'],\n      ':owner/:name/builds/:id': ['home', 'build'],\n      ':owner/:name/builds': ['home', 'builds'],\n      ':owner/:name/pull_requests': ['home', 'pullRequests'],\n      ':owner/:name/branches': ['home', 'branches'],\n      ':owner/:name': ['home', 'current'],\n      '': ['home', 'index'],\n      '#': ['home', 'index']\n    },\n    QUEUES: [\n      {\n        name: 'common',\n        display: 'Common'\n      }, {\n        name: 'php',\n        display: 'PHP, Perl and Python'\n      }, {\n        name: 'node_js',\n        display: 'Node.js'\n      }, {\n        name: 'jvmotp',\n        display: 'JVM and Erlang'\n      }, {\n        name: 'rails',\n        display: 'Rails'\n      }, {\n        name: 'spree',\n        display: 'Spree'\n      }\n    ],\n    INTERVALS: {\n      sponsors: -1,\n      times: -1,\n      updateTimes: 1000\n    },\n    run: function(attrs) {\n      var _this = this;\n      if (location.hash.slice(0, 2) === '#!') {\n        location.href = location.href.replace('#!/', '');\n      }\n      return this.loadConfig(function(config) {\n        var app;\n        app = Travis.App.create(attrs || {});\n        $.each(Travis, function(key, value) {\n          if (value && value.isClass && key !== 'constructor') {\n            return app[key] = value;\n          }\n        });\n        _this.app = app;\n        _this.store = app.store;\n        return $(function() {\n          return app.initialize();\n        });\n      });\n    },\n    loadConfig: function(callback) {\n      var _this = this;\n      return this.ajax.get('/config', function(data) {\n        $.extend(_this.config, data.config);\n        console.log(\"Connecting to \" + data.config.api_endpoint);\n        return callback(data.config);\n      });\n    }\n  });\nminispade.require('travis/ajax');\nminispade.require('app');\n\n}).call(this);\n\n})();\n//@ sourceURL=travis");minispade.register('templates', "(function() {\nEmber.TEMPLATES['application'] = Ember.Handlebars.compile(\"{{outlet}}\\n\");\n\nEmber.TEMPLATES['auth/signin'] = Ember.Handlebars.compile(\"{{#if view.signingIn}}\\n  <h1>Signing in</h1>\\n  <p>\\n    Trying to authenticate with GitHub.\\n  </p>\\n{{else}}\\n  <h1>Sign in</h1>\\n  <p>\\n    <a href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>Sign in with GitHub</a>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['builds/list'] = Ember.Handlebars.compile(\"{{#if builds.isLoaded}}\\n  <table id=\\\"builds\\\" class=\\\"list\\\">\\n    <thead>\\n      <tr>\\n        <th>{{t builds.name}}</th>\\n        <th>{{t builds.commit}}</th>\\n        <th>{{t builds.message}}</th>\\n        <th>{{t builds.duration}}</th>\\n        <th>{{t builds.finished_at}}</th>\\n      </tr>\\n    </thead>\\n\\n    <tbody>\\n      {{#each build in builds}}\\n        {{#view Travis.BuildsItemView contextBinding=\\\"build\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if id}}\\n              <a {{action showBuild this href=true}}>\\n                {{number}}\\n              </a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"commit\\\">\\n            <a {{bindAttr href=\\\"view.urlGithubCommit\\\"}}>\\n              {{formatCommit commit}}\\n            </a>\\n          </td>\\n          <td class=\\\"message\\\">\\n            {{{formatMessage commit.message short=\\\"true\\\"}}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"duration\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n  <p>\\n    {{view view.ShowMoreButton}}\\n  </p>\\n{{else}}\\n  <div class=\\\"loading\\\"><span>Loading</span></div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['builds/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if loading}}\\n    <span>Loading</span>\\n  {{else}}\\n    <dl id=\\\"summary\\\">\\n      <div class=\\\"left\\\">\\n        <dt>{{t builds.name}}</dt>\\n        <dd class=\\\"number\\\">\\n          <span class=\\\"status\\\"></span>\\n          {{#if build.id}}\\n            <a {{action showBuild build href=true}}>{{build.number}}</a>\\n          {{/if}}\\n        </dd>\\n        <dt class=\\\"finished_at_label\\\">{{t builds.finished_at}}</dt>\\n        <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime build.finishedAt}}</dd>\\n        <dt>{{t builds.duration}}</dt>\\n        <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration build.duration}}</dd>\\n      </div>\\n\\n      <div class=\\\"right\\\">\\n        <dt>{{t builds.commit}}</dt>\\n        <dd class=\\\"commit\\\"><a href=\\\"{{unbound urlGithubCommit}}\\\">{{formatCommit build.commit}}</a></dd>\\n        {{#if commit.compareUrl}}\\n          <dt>{{t builds.compare}}</dt>\\n          <dd class=\\\"compare\\\"><a href=\\\"{{unbound commit.compareUrl}}\\\">{{pathFrom build.commit.compareUrl}}</a></dd>\\n        {{/if}}\\n        {{#if commit.authorName}}\\n          <dt>{{t builds.author}}</dt>\\n          <dd class=\\\"author\\\"><a href=\\\"{{unbound urlAuthor}}\\\">{{build.commit.authorName}}</a></dd>\\n        {{/if}}\\n        {{#if commit.committerName}}\\n          <dt>{{t builds.committer}}</dt>\\n          <dd class=\\\"committer\\\"><a href=\\\"{{unbound urlCommitter}}\\\">{{build.commit.committerName}}</a></dd>\\n        {{/if}}\\n      </div>\\n\\n      <dt>{{t builds.message}}</dt>\\n      <dd class=\\\"message\\\">{{{formatMessage build.commit.message}}}</dd>\\n\\n      {{#unless isMatrix}}\\n        <dt>{{t builds.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig build.config}}</dd>\\n      {{/unless}}\\n    </dl>\\n\\n    {{#if build.isMatrix}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.requiredJobs\\\" required=\\\"true\\\"}}\\n      {{view Travis.JobsView jobsBinding=\\\"build.allowedFailureJobs\\\"}}\\n    {{else}}\\n      {{view Travis.LogView contextBinding=\\\"build.jobs.firstObject\\\"}}\\n    {{/if}}\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['jobs/list'] = Ember.Handlebars.compile(\"{{#if view.jobs.length}}\\n  {{#if view.required}}\\n    <table id=\\\"jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.build_matrix}}\\n      </caption>\\n  {{else}}\\n    <table id=\\\"allowed_failure_jobs\\\" class=\\\"list\\\">\\n      <caption>\\n        {{t jobs.allowed_failures}}\\n        <a title=\\\"What's this?\\\" class=\\\"help\\\" name=\\\"help-allowed_failures\\\" {{action popup target=\\\"view\\\"}}></a>\\n      </caption>\\n  {{/if}}\\n    <thead>\\n      <tr>\\n        {{#each key in view.build.configKeys}}\\n          <th>{{key}}</th>\\n        {{/each}}\\n      </tr>\\n    </thead>\\n    <tbody>\\n      {{#each job in view.jobs}}\\n        {{#view Travis.JobsItemView contextBinding=\\\"job\\\"}}\\n          <td class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{number}}</a>\\n            {{/if}}\\n          </td>\\n          <td class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>\\n            {{formatDuration duration}}\\n          </td>\\n          <td class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>\\n            {{formatTime finishedAt}}\\n          </td>\\n          {{#each value in configValues}}\\n            <td>{{value}}</td>\\n          {{/each}}\\n        {{/view}}\\n      {{/each}}\\n    </tbody>\\n  </table>\\n\\n  {{#unless view.required}}\\n    <div id=\\\"help-allowed_failures\\\" class=\\\"popup\\\">\\n      <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n      <h4>{{t \\\"jobs.allowed_failures\\\"}}</h4>\\n      <p>\\n        Allowed Failures are items in your build matrix that are allowed to\\n        fail without causing the entire build to be shown as failed.\\n      </p>\\n      <p>\\n        You can define allowed failures in the build matrix as follows:\\n      </p>\\n      <pre>matrix:\\n  allow_failures:\\n    - rvm: ruby-head</pre>\\n      <p>\\n        This lets you add in experimental and preparatory builds to test against versions or\\n        configurations that you are not ready to officially support.\\n      </p>\\n    </div>\\n  {{/unless}}\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/log'] = Ember.Handlebars.compile(\"{{view.logSubscriber}}\\n\\n{{#if log.isLoaded}}\\n  <pre id=\\\"log\\\" class=\\\"ansi\\\"><a href=\\\"#\\\" id=\\\"tail\\\" {{action toggleTailing target=\\\"view\\\"}}>\\n    <span class=\\\"status\\\"></span>\\n    <label>Follow logs</label>\\n  </a>{{{formatLog log.body}}}</pre>\\n\\n  {{#if sponsor.name}}\\n    <p class=\\\"sponsor\\\">\\n    {{t builds.messages.sponsored_by}}\\n      <a {{bindAttr href=\\\"sponsor.url\\\"}}>{{sponsor.name}}</a>\\n    </p>\\n  {{/if}}\\n\\n  <a href='#' class=\\\"to-top\\\" {{action toTop target=\\\"view\\\"}}>To top</a>\\n{{else}}\\n  <div id=\\\"log\\\" class=\\\"loading\\\">\\n    <span>Loading</span>\\n  </div>\\n{{/if}}\\n\");\n\nEmber.TEMPLATES['jobs/show'] = Ember.Handlebars.compile(\"{{#with view}}\\n  {{#if job.isLoaded}}\\n    <div {{bindAttr class=\\\"view.color\\\"}}>\\n      <dl id=\\\"summary\\\">\\n        <div class=\\\"left\\\">\\n          <dt>Job</dt>\\n          <dd class=\\\"number\\\">\\n            <span class=\\\"status\\\"></span>\\n            {{#if job.id}}\\n              <a {{action showJob repo job href=true}}>{{job.number}}</a>\\n            {{/if}}\\n          </dd>\\n          <dt class=\\\"finished_at_label\\\">{{t jobs.finished_at}}</dt>\\n          <dd class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"finishedAt\\\"}}>{{formatTime job.finishedAt}}</dd>\\n          <dt>{{t jobs.duration}}</dt>\\n          <dd class=\\\"duration\\\" {{bindAttr title=\\\"startedAt\\\"}}>{{formatDuration job.duration}}</dd>\\n        </div>\\n\\n        <div class=\\\"right\\\">\\n          <dt>{{t jobs.commit}}</dt>\\n          <dd class=\\\"commit\\\"><a {{bindAttr href=\\\"urlGithubCommit\\\"}}>{{formatCommit commit}}</a></dd>\\n          {{#if commit.compareUrl}}\\n            <dt>{{t jobs.compare}}</dt>\\n            <dd class=\\\"compare\\\"><a {{bindAttr href=\\\"commit.compareUrl\\\"}}>{{pathFrom commit.compareUrl}}</a></dd>\\n          {{/if}}\\n          {{#if commit.authorName}}\\n            <dt>{{t jobs.author}}</dt>\\n            <dd class=\\\"author\\\"><a {{bindAttr href=\\\"urlAuthor\\\"}}>{{commit.authorName}}</a></dd>\\n          {{/if}}\\n          {{#if commit.committerName}}\\n            <dt>{{t jobs.committer}}</dt>\\n            <dd class=\\\"committer\\\"><a {{bindAttr href=\\\"urlCommitter\\\"}}>{{commit.committerName}}</a></dd>\\n          {{/if}}\\n        </div>\\n\\n        <dt>{{t jobs.message}}</dt>\\n        <dd class=\\\"message\\\">{{formatMessage commit.message}}</dd>\\n        <dt>{{t jobs.config}}</dt>\\n        <dd class=\\\"config\\\">{{formatConfig job.config}}</dd>\\n      </dl>\\n\\n      {{view Travis.LogView contextBinding=\\\"job\\\"}}}\\n    </div>\\n  {{else}}\\n    <div id=\\\"job\\\" class=\\\"loading\\\">\\n      <span>Loading</span>\\n    </div>\\n  {{/if}}\\n{{/with}}\\n\");\n\nEmber.TEMPLATES['layouts/flash'] = Ember.Handlebars.compile(\"<p>{{view.message}}</p>\\n<a class=\\\"close\\\" {{action close target=\\\"view\\\"}}></a>\\n\");\n\nEmber.TEMPLATES['layouts/home'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    {{outlet right}}\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/profile'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"left\\\">\\n    {{outlet left}}\\n  </div>\\n\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n\\n  <div id=\\\"right\\\">\\n    <a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n      {{t layouts.application.fork_me}}\\n    </a>\\n\\n    <div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n      <div class='icon'></div>&nbsp;\\n    </div>\\n\\n    <div class=\\\"box\\\">\\n      <h4>Getting started?</h4>\\n      <p>\\n        Please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started\\\">guide</a>.\\n        It will only take a few minutes :)\\n      </p>\\n      <p>\\n        You can find detailled docs on our <a href=\\\"http://about.travis-ci.org/\\\">about</a> site.\\n      </p>\\n      <p>\\n        If you need help please don't hesitate to join\\n        <a href=\\\"irc://irc.freenode.net#travis\\\">#travis</a> on irc.freenode.net\\n        or our <a href=\\\"http://groups.google.com/group/travis-ci\\\">mailinglist</a>.\\n      </p>\\n    </div>\\n  </div>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/sidebar'] = Ember.Handlebars.compile(\"<a id=\\\"github\\\" href=\\\"https://github.com/travis-ci\\\" title=\\\"Fork me on GitHub\\\">\\n  {{t layouts.application.fork_me}}\\n</a>\\n\\n<div id=\\\"slider\\\" {{action toggle target=\\\"Travis.app.slider\\\"}}>\\n  <div class='icon'></div>&nbsp;\\n</div>\\n\\n{{view view.DecksView}}\\n{{view view.WorkersView}}\\n{{view view.QueuesView}}\\n{{view view.LinksView}}\\n\\n<div id=\\\"about\\\" class=\\\"box\\\">\\n  <h4>{{t layouts.about.join}}</h4>\\n  <ul>\\n    <li>{{t layouts.about.repository}}: <a href=\\\"http://github.com/travis-ci\\\">Github</a></li>\\n    <li>{{t layouts.about.twitter}}: <a href=\\\"http://twitter.com/travisci\\\">@travisci</a></li>\\n    <li>{{t layouts.about.mailing_list}}: <a href=\\\"http://groups.google.com/group/travis-ci\\\">travis-ci</a></li>\\n    <li><a href=\\\"irc://irc.freenode.net#travis\\\">irc.freenode.net#travis</a></li>\\n  </ul>\\n</div>\\n\");\n\nEmber.TEMPLATES['layouts/simple'] = Ember.Handlebars.compile(\"<div id=\\\"top\\\">\\n  {{outlet top}}\\n</div>\\n\\n<div id=\\\"page\\\">\\n  <div id=\\\"main\\\">\\n    {{outlet flash}}\\n    {{outlet main}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['layouts/top'] = Ember.Handlebars.compile(\"<a {{action showRoot href=true}}>\\n  <h1>Travis</h1>\\n</a>\\n\\n<ul id=\\\"navigation\\\">\\n  <li {{bindAttr class=\\\"view.classHome\\\"}}>\\n    <a {{action showRoot href=true}}>Home</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classStats\\\"}}>\\n    <a {{action showStats href=true}}>Stats</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/blog\\\">Blog</a>\\n  </li>\\n  <li>\\n    <a href=\\\"http://about.travis-ci.org/docs\\\">Docs</a>\\n  </li>\\n  <li {{bindAttr class=\\\"view.classProfile\\\"}}>\\n    <p class=\\\"handle\\\">\\n      <a class=\\\"signed-out\\\" href=\\\"#\\\" {{action signIn target=\\\"Travis.app\\\"}}>{{t layouts.top.github_login}}</a>\\n      <a class=\\\"signed-in\\\" {{action showProfile href=true}}><img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>{{user.name}}</a>\\n      <span class=\\\"signing-in\\\">Signing in</span>\\n    </p>\\n    <ul>\\n      <li>\\n        <a {{action showProfile href=true}}>{{t layouts.top.profile}}</a>\\n      </li>\\n      <li>\\n        <a href=\\\"/\\\" {{action signOut target=\\\"Travis.app\\\"}}>{{t layouts.top.sign_out}}</a>\\n      </li>\\n    </ul>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/accounts'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n</div>\\n\\n<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_accounts\\\" {{bindAttr class=\\\"view.classAccounts\\\"}}>\\n    <h5><a name=\\\"accounts\\\" href=\\\"\\\">Accounts</a></h5>\\n  </li>\\n</ul>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.AccountsListView contentBinding=\\\"controller\\\"}}\\n    <a {{action showAccount view.account href=true}} class=\\\"name\\\">{{view.name}}</a>\\n    <p class=\\\"summary\\\">\\n      <span class=\\\"repos_label\\\">Repositories:</span>\\n      <abbr class=\\\"repos\\\">{{view.content.reposCount}}</abbr>\\n    </p>\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['profile/show'] = Ember.Handlebars.compile(\"<h3>{{view.name}}</h3>\\n\\n{{view Travis.ProfileTabsView}}\\n\\n<div class=\\\"tab\\\">\\n  {{outlet pane}}\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_hooks\\\" {{bindAttr class=\\\"view.classHooks\\\"}}>\\n    <h5>\\n      <a {{action showAccount view.account href=true}}>Repositories</a>\\n    </h5>\\n  </li>\\n  {{#if view.displayUser}}\\n    <li id=\\\"tab_user\\\" {{bindAttr class=\\\"view.classUser\\\"}}>\\n      <h5>\\n        <a {{action showUserProfile view.account href=true}}>Profile</a>\\n      </h5>\\n    </li>\\n  {{/if}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['profile/tabs/hooks'] = Ember.Handlebars.compile(\"<p class=\\\"tip\\\">\\n  {{{t profiles.show.message.your_repos}}}\\n</p>\\n\\n{{#if hooks.isLoaded}}\\n  {{#if user.isSyncing}}\\n    <p class=\\\"message loading\\\">\\n      <span>Please wait while we sync from GitHub</span>\\n    </p>\\n  {{else}}\\n    <p class=\\\"message\\\">\\n      Last synchronized from GitHub: {{formatTime user.syncedAt}}\\n      <button class=\\\"sync_now\\\" {{action sync target=\\\"user\\\"}}>\\n        Sync now\\n      </button>\\n    </p>\\n\\n    <ul id=\\\"hooks\\\">\\n      {{#each hook in hooks}}\\n        <li {{bindAttr class=\\\"hook.active:active\\\"}}>\\n          <a {{bindAttr href=\\\"hook.urlGithub\\\"}} rel=\\\"nofollow\\\">{{hook.slug}}</a>\\n          <p class=\\\"description\\\">{{hook.description}}</p>\\n\\n          <div class=\\\"controls\\\">\\n            <a {{bindAttr href=\\\"hook.urlGithubAdmin\\\"}} class=\\\"github-admin tool-tip\\\" title=\\\"Github service hooks admin page\\\"></a>\\n            <a {{action toggle target=\\\"hook\\\"}} class=\\\"switch\\\"></a>\\n          </div>\\n        </li>\\n      {{else}}\\n        <li>\\n          You do not seem to have any repositories that we could sync.\\n        </li>\\n      {{/each}}\\n    </ul>\\n  {{/if}}\\n{{else}}\\n  <p class=\\\"message loading\\\">\\n    <span>Loading</span>\\n  </p>\\n{{/if}}\\n\\n\\n\");\n\nEmber.TEMPLATES['profile/tabs/user'] = Ember.Handlebars.compile(\"<img {{bindAttr src=\\\"view.gravatarUrl\\\"}}>\\n\\n<dl class=\\\"profile\\\">\\n  <dt>\\n    {{t profiles.show.github}}:\\n  </dt>\\n  <dd>\\n    <a {{bindAttr href=\\\"urlGithub\\\"}}>{{user.login}}</a>\\n  </dd>\\n  <dt>\\n    {{t profiles.show.email}}:\\n  </dt>\\n  <dd>\\n    {{user.email}}\\n  </dd>\\n  <dt>\\n    {{t profiles.show.token}}:\\n  </dt>\\n  <dd>\\n    {{user.token}}\\n  </dd>\\n</dl>\\n\\n<form>\\n  {{view Ember.Select id=\\\"locale\\\"\\n     contentBinding=\\\"view.locales\\\"\\n     valueBinding=\\\"Travis.app.currentUser.locale\\\"\\n     optionLabelPath=\\\"content.name\\\"\\n     optionValuePath=\\\"content.key\\\"}}\\n\\n  <button name=\\\"commit\\\" {{action saveLocale target=\\\"view\\\"}}>\\n    {{t profiles.show.update_locale}}\\n  </button>\\n</form>\\n\\n\\n\");\n\nEmber.TEMPLATES['queues/list'] = Ember.Handlebars.compile(\"<ul id=\\\"queues\\\">\\n{{#each queue in controller}}\\n  <li class=\\\"queue\\\">\\n    <h4>{{t queue}}: {{queue.name}}</h4>\\n    <ul {{bindAttr id=\\\"queue.id\\\"}}>\\n      {{#each job in queue}}\\n        {{#view Travis.QueueItemView jobBinding=\\\"job\\\"}}\\n          <a {{action showJob job.repo job target=\\\"Travis.app.router\\\" href=true}}>\\n            <span class=\\\"slug\\\">\\n              {{job.repo.slug}}\\n            </span>\\n            #{{job.number}}\\n          </a>\\n        {{/view}}\\n      {{else}}\\n        {{t no_job}}\\n      {{/each}}\\n    </ul>\\n  </li>\\n{{/each}}\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/list'] = Ember.Handlebars.compile(\"<div id=\\\"search_box\\\">\\n  {{view Ember.TextField valueBinding=\\\"controller.search\\\"}}\\n</div>\\n\\n{{view Travis.ReposListTabsView}}\\n\\n<a {{action toggleInfo target=\\\"view\\\"}} class=\\\"toggle-info\\\"></a>\\n\\n<div class=\\\"tab\\\">\\n  {{#collection Travis.ReposListView contentBinding=\\\"controller\\\"}}\\n    {{#with view.repo}}\\n      <div class=\\\"slug-and-status\\\">\\n        <span class=\\\"status\\\"></span>\\n        {{#if slug}}\\n          <a {{action showRepo this href=true}} class=\\\"slug\\\">{{slug}}</a>\\n        {{/if}}\\n      </div>\\n      {{#if lastBuildId}}\\n        <a {{action showBuild this lastBuildId href=true}} class=\\\"last_build\\\">{{lastBuildNumber}}</a>\\n      {{/if}}\\n\\n      <p class=\\\"summary\\\">\\n        <span class=\\\"duration_label\\\">{{t repositories.duration}}:</span>\\n        <abbr class=\\\"duration\\\" {{bindAttr title=\\\"lastBuildStartedAt\\\"}}>{{formatDuration lastBuildDuration}}</abbr>,\\n        <span class=\\\"finished_at_label\\\">{{t repositories.finished_at}}:</span>\\n        <abbr class=\\\"finished_at timeago\\\" {{bindAttr title=\\\"lastBuildFinishedAt\\\"}}>{{formatTime lastBuildFinishedAt}}</abbr>\\n      </p>\\n\\n      <div class=\\\"indicator\\\"><span></span></div>\\n\\n      {{#if description}}\\n        <div class=\\\"info\\\">\\n          <p class=\\\"description\\\">{{description}}</p>\\n        </div>\\n      {{/if}}\\n    {{/with}}\\n  {{/collection}}\\n</div>\\n\");\n\nEmber.TEMPLATES['repos/list/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_recent\\\" {{bindAttr class=\\\"view.classRecent\\\"}}>\\n    <h5><a name=\\\"recent\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.recent}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_owned\\\" {{bindAttr class=\\\"view.classOwned\\\"}}>\\n    <h5><a name=\\\"owned\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.my_repositories}}</a></h5>\\n  </li>\\n  <li id=\\\"tab_search\\\" {{bindAttr class=\\\"view.classSearch\\\"}}>\\n    <h5><a name=\\\"search\\\" {{action activate target=\\\"view\\\"}}>{{t layouts.application.search}}</a></h5>\\n  </li>\\n</ul>\\n\\n\");\n\nEmber.TEMPLATES['repos/show'] = Ember.Handlebars.compile(\"<div id=\\\"repo\\\" {{bindAttr class=\\\"view.class\\\"}}>\\n  {{#if view.repo.isLoaded}}\\n    {{#with view.repo}}\\n      <h3>\\n        <a {{bindAttr href=\\\"view.urlGithub\\\"}}>{{slug}}</a>\\n      </h3>\\n\\n      <p class=\\\"description\\\">{{description}}</p>\\n\\n      <ul class=\\\"github-stats\\\">\\n        <li class=\\\"language\\\">\\n          {{lastBuildLanguage}}\\n        </li>\\n        <li>\\n          <a class=\\\"watchers\\\" title=\\\"Watchers\\\" {{bindAttr href=\\\"view.urlGithubWatchers\\\"}}>\\n            {{stats.watchers}}\\n          </a>\\n        </li>\\n        <li>\\n          <a class=\\\"forks\\\" title=\\\"Forks\\\" {{bindAttr href=\\\"view.urlGithubNetwork\\\"}}>\\n            {{stats.forks}}\\n          </a>\\n        </li>\\n      </ul>\\n\\n      {{view Travis.RepoShowTabsView}}\\n      {{view Travis.RepoShowToolsView}}\\n    {{/with}}\\n\\n  {{else}}\\n    <span>Loading</span>\\n  {{/if}}\\n\\n  <div class=\\\"tab\\\">\\n    {{outlet pane}}\\n  </div>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['repos/show/tabs'] = Ember.Handlebars.compile(\"<ul class=\\\"tabs\\\">\\n  <li id=\\\"tab_current\\\" {{bindAttr class=\\\"view.classCurrent\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showRepo view.repo href=true}}>\\n        {{t repositories.tabs.current}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_builds\\\" {{bindAttr class=\\\"view.classBuilds\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBuilds view.repo href=true}}>\\n        {{t repositories.tabs.build_history}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_pull_requests\\\" {{bindAttr class=\\\"view.classPullRequests\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showPullRequests view.repo href=true}}>\\n        {{t repositories.tabs.pull_requests}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_branches\\\" {{bindAttr class=\\\"view.classBranches\\\"}}>\\n    <h5>\\n      {{#if view.repo.slug}}\\n      <a {{action showBranches view.repo href=true}}>\\n        {{t repositories.tabs.branches}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_build\\\" {{bindAttr class=\\\"view.classBuild\\\"}}>\\n    <h5>\\n      {{#if view.build.id}}\\n      <a {{action showBuild view.build href=true}}>\\n        {{t repositories.tabs.build}} #{{view.build.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n  <li id=\\\"tab_job\\\" {{bindAttr class=\\\"view.classJob\\\"}}>\\n    <h5>\\n      {{#if view.job.id}}\\n      <a {{action showBuild view.job href=true}}>\\n        {{t repositories.tabs.job}} #{{view.job.number}}\\n      </a>\\n      {{/if}}\\n    </h5>\\n  </li>\\n</ul>\\n\");\n\nEmber.TEMPLATES['repos/show/tools'] = Ember.Handlebars.compile(\"<div id=\\\"tools\\\">\\n  <a href=\\\"#\\\" {{action menu target=\\\"view\\\"}}></a>\\n  <ul class=\\\"menu\\\">\\n    <li>\\n      <a href=\\\"#\\\" name=\\\"status-images\\\" {{action statusImages target=\\\"view\\\"}}>Status Images</a>\\n    </li>\\n    {{#if view.canPush}}\\n      <li>\\n        <a href=\\\"#\\\" {{action requeue target=\\\"view\\\"}}>Rebuild</a>\\n      </li>\\n    {{/if}}\\n  </ul>\\n</div>\\n\\n<div id=\\\"status-images\\\" class=\\\"popup\\\">\\n  <a href=\\\"#\\\" class=\\\"close\\\" {{action popupClose target=\\\"view\\\"}}></a>\\n  <p>\\n    <label>{{t repositories.branch}}:</label>\\n    {{#if view.branches.isLoaded}}\\n      {{view Ember.Select contentBinding=\\\"view.branches\\\" selectionBinding=\\\"view.branch\\\" optionLabelPath=\\\"content.commit.branch\\\" optionValuePath=\\\"content.commit.branch\\\"}}\\n    {{else}}\\n      <span class=\\\"loading\\\"></span>\\n    {{/if}}\\n  </p>\\n  <p>\\n    <label>{{t repositories.image_url}}:</label>\\n    <input type=\\\"text\\\" class=\\\"url\\\" {{bindAttr value=\\\"view.urlStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.markdown}}:</label>\\n    <input type=\\\"text\\\" class=\\\"markdown\\\" {{bindAttr value=\\\"view.markdownStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.textile}}:</label>\\n    <input type=\\\"text\\\" class=\\\"textile\\\" {{bindAttr value=\\\"view.textileStatusImage\\\"}}></input>\\n  </p>\\n  <p>\\n    <label>{{t repositories.rdoc}}:</label>\\n    <input type=\\\"text\\\" class=\\\"rdoc\\\" {{bindAttr value=\\\"view.rdocStatusImage\\\"}}></input>\\n  </p>\\n</div>\\n\");\n\nEmber.TEMPLATES['sponsors/decks'] = Ember.Handlebars.compile(\"<h4>{{t layouts.application.sponsers}}</h4>\\n\\n<ul class=\\\"sponsors top\\\">\\n  {{#each deck in controller}}\\n    {{#each deck}}\\n      <li {{bindAttr class=\\\"type\\\"}}>\\n        <a {{bindAttr href=\\\"url\\\"}}>\\n          <img {{bindAttr src=\\\"image\\\"}}>\\n        </a>\\n      </li>\\n    {{/each}}\\n  {{/each}}\\n</ul>\\n\\n<p class=\\\"hint\\\">\\n  <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n    {{{t layouts.application.sponsors_link}}}\\n  </a>\\n</p>\\n\");\n\nEmber.TEMPLATES['sponsors/links'] = Ember.Handlebars.compile(\"<div class=\\\"box\\\">\\n  <h4>{{t layouts.application.sponsers}}</h4>\\n\\n  <ul class=\\\"sponsors bottom\\\">\\n    {{#each controller}}\\n      <li>\\n        {{{link}}}\\n      </li>\\n    {{/each}}\\n  </ul>\\n\\n  <p class=\\\"hint\\\">\\n    <a href=\\\"https://love.travis-ci.org/sponsors\\\">\\n      {{{t layouts.application.sponsors_link}}}\\n    </a>\\n  </p>\\n</div>\\n\\n\");\n\nEmber.TEMPLATES['stats/show'] = Ember.Handlebars.compile(\"<div id=\\\"repos_stats\\\"></div>\\n<div id=\\\"tests_stats\\\"></div>\\n\");\n\nEmber.TEMPLATES['workers/list'] = Ember.Handlebars.compile(\"{{#view Travis.WorkersView}}\\n  <h4>\\n    {{t workers}}\\n    <a id=\\\"toggle-workers\\\" {{action toggleWorkers target=\\\"parentView.parentView\\\"}}></a>\\n  </h4>\\n  <ul id=\\\"workers\\\">\\n    {{#each group in controller.groups}}\\n      {{#view Travis.WorkersListView}}\\n        <li class=\\\"group\\\">\\n          <h5 {{action toggle target=\\\"view\\\"}}>\\n            {{group.firstObject.host}}\\n          </h5>\\n          <ul>\\n          {{#each worker in group}}\\n            {{#view Travis.WorkersItemView workerBinding=\\\"worker\\\"}}\\n              <li class=\\\"worker\\\">\\n                <div class=\\\"status\\\"></div>\\n                {{#if worker.isWorking}}\\n                  {{#if worker.job_id}}\\n                    <a {{action showJob worker.repo worker.job_id target=\\\"Travis.app.router\\\" href=true}} {{bindAttr title=\\\"worker.lastSeenAt\\\"}}>\\n                      {{view.display}}\\n                    </a>\\n                  {{/if}}\\n                {{else}}\\n                  {{view.display}}\\n                {{/if}}\\n              </li>\\n            {{/view}}\\n          {{/each}}\\n          </ul>\\n        </li>\\n      {{/view}}\\n    {{else}}\\n      No workers\\n    {{/each}}\\n  </ul>\\n{{/view}}\\n\");\n\n})();\n//@ sourceURL=templates");minispade.register('config/locales', "(function() {window.I18n = window.I18n || {}\nwindow.I18n.translations = {\"ca\":{\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"pt-BR\":\"português brasileiro\",\"ru\":\"Русский\"}},\"en\":{\"errors\":{\"messages\":{\"not_found\":\"not found\",\"already_confirmed\":\"was already confirmed\",\"not_locked\":\"was not locked\"}},\"devise\":{\"failure\":{\"unauthenticated\":\"You need to sign in or sign up before continuing.\",\"unconfirmed\":\"You have to confirm your account before continuing.\",\"locked\":\"Your account is locked.\",\"invalid\":\"Invalid email or password.\",\"invalid_token\":\"Invalid authentication token.\",\"timeout\":\"Your session expired, please sign in again to continue.\",\"inactive\":\"Your account was not activated yet.\"},\"sessions\":{\"signed_in\":\"Signed in successfully.\",\"signed_out\":\"Signed out successfully.\"},\"passwords\":{\"send_instructions\":\"You will receive an email with instructions about how to reset your password in a few minutes.\",\"updated\":\"Your password was changed successfully. You are now signed in.\"},\"confirmations\":{\"send_instructions\":\"You will receive an email with instructions about how to confirm your account in a few minutes.\",\"confirmed\":\"Your account was successfully confirmed. You are now signed in.\"},\"registrations\":{\"signed_up\":\"You have signed up successfully. If enabled, a confirmation was sent to your e-mail.\",\"updated\":\"You updated your account successfully.\",\"destroyed\":\"Bye! Your account was successfully cancelled. We hope to see you again soon.\"},\"unlocks\":{\"send_instructions\":\"You will receive an email with instructions about how to unlock your account in a few minutes.\",\"unlocked\":\"Your account was successfully unlocked. You are now signed in.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Confirmation instructions\"},\"reset_password_instructions\":{\"subject\":\"Reset password instructions\"},\"unlock_instructions\":{\"subject\":\"Unlock Instructions\"}}},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hour\",\"other\":\"%{count} hours\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} second\",\"other\":\"%{count} seconds\"}}},\"workers\":\"Workers\",\"queue\":\"Queue\",\"no_job\":\"There are no jobs\",\"repositories\":{\"branch\":\"Branch\",\"image_url\":\"Image URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"tabs\":{\"current\":\"Current\",\"build_history\":\"Build History\",\"branches\":\"Branch Summary\",\"pull_requests\":\"Pull Requests\",\"build\":\"Build\",\"job\":\"Job\"}},\"build\":{\"job\":\"Job\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"This test suite was run on a worker box sponsored by\"},\"build_matrix\":\"Build Matrix\",\"allowed_failures\":\"Allowed Failures\",\"author\":\"Author\",\"config\":\"Config\",\"compare\":\"Compare\",\"committer\":\"Committer\",\"branch\":\"Branch\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Started\",\"duration\":\"Duration\",\"finished_at\":\"Finished\",\"show_more\":\"Show more\"},\"layouts\":{\"top\":{\"home\":\"Home\",\"blog\":\"Blog\",\"docs\":\"Docs\",\"stats\":\"Stats\",\"github_login\":\"Sign in with Github\",\"profile\":\"Profile\",\"sign_out\":\"Sign Out\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Recent\",\"search\":\"Search\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"See all of our amazing sponsors &rarr;\",\"my_repositories\":\"My Repositories\"},\"about\":{\"alpha\":\"This stuff is alpha.\",\"messages\":{\"alpha\":\"Please do <strong>not</strong> consider this a stable service. We're still far from that! More info <a href='https://github.com/travis-ci'>here.</a>\"},\"join\":\"Join us and help!\",\"mailing_list\":\"Mailing List\",\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Author\",\"build\":\"Build\",\"build_matrix\":\"Build Matrix\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Compare\",\"config\":\"Config\",\"duration\":\"Duration\",\"finished_at\":\"Finished at\",\"job\":\"Job\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Flick the switches below to turn on the Travis service hook for your projects, then push to GitHub.\",\"config\":\"how to configure custom build options\"},\"messages\":{\"notice\":\"To get started, please read our <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Getting Started guide</a>.\\n  <small>It will only take a couple of minutes.</small>\"},\"token\":\"Token\",\"your_repos\":\"Your Repositories\",\"update\":\"Update\",\"update_locale\":\"Update\",\"your_locale\":\"Your Locale\"}},\"statistics\":{\"index\":{\"count\":\"Count\",\"repo_growth\":\"Repository Growth\",\"total_projects\":\"Total Projects/Repositories\",\"build_count\":\"Build Count\",\"last_month\":\"last month\",\"total_builds\":\"Total Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"es\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"workers\":\"Procesos\",\"queue\":\"Cola\",\"no_job\":\"No hay trabajos\",\"repositories\":{\"branch\":\"Rama\",\"image_url\":\"Imagen URL\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"tabs\":{\"current\":\"Actual\",\"build_history\":\"Histórico\",\"branches\":\"Ramas\",\"build\":\"Builds\",\"job\":\"Trabajo\"}},\"build\":{\"job\":\"Trabajo\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\",\"sponsored_by\":\"Patrocinado por\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Esta serie de tests han sido ejecutados en una caja de Proceso patrocinada por\"},\"build_matrix\":\"Matriz de Builds\",\"allowed_failures\":\"Fallos Permitidos\",\"author\":\"Autor\",\"config\":\"Configuración\",\"compare\":\"Comparar\",\"committer\":\"Committer\",\"branch\":\"Rama\",\"commit\":\"Commit\",\"message\":\"Mensaje\",\"started_at\":\"Iniciado\",\"duration\":\"Duración\",\"finished_at\":\"Finalizado\"},\"layouts\":{\"top\":{\"home\":\"Inicio\",\"blog\":\"Blog\",\"docs\":\"Documentación\",\"stats\":\"Estadísticas\",\"github_login\":\"Iniciar sesión con Github\",\"profile\":\"Perfil\",\"sign_out\":\"Desconectar\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Hazme un Fork en Github\",\"recent\":\"Reciente\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Ver todos nuestros patrocinadores &rarr;\",\"my_repositories\":\"Mis Repositorios\"},\"about\":{\"alpha\":\"Esto es alpha.\",\"messages\":{\"alpha\":\"Por favor <strong>no</strong> considereis esto un servicio estable. Estamos estamos aún lejos de ello! Más información <a href='https://github.com/travis-ci'>aquí.</a>\"},\"join\":\"Únetenos y ayudanos!\",\"mailing_list\":\"Lista de Correos\",\"repository\":\"Repositorio\",\"twitter\":\"Twitter\"}},\"profiles\":{\"show\":{\"email\":\"Correo electrónico\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Activa los interruptores para inicial el  Travis service hook para tus proyectos, y haz un Push en GitHub.<br />\\n  Para probar varias versiones de ruby, mira\",\"config\":\"como configurar tus propias opciones para el Build\"},\"messages\":{\"notice\":\"Para comenzar, por favor lee nuestra <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guía de Inicio </a>.\\n  <small>Solo tomará unos pocos minutos.</small>\"},\"token\":\"Token\",\"your_repos\":\"Tus repositorios\",\"update\":\"Actualizar\",\"update_locale\":\"Actualizar\",\"your_locale\":\"Tu Idioma\"}},\"statistics\":{\"index\":{\"count\":\"Número\",\"repo_growth\":\"Crecimiento de Repositorios\",\"total_projects\":\"Total de Proyectos/Repositorios\",\"build_count\":\"Número de Builds\",\"last_month\":\"mes anterior\",\"total_builds\":\"Total de Builds\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"fr\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} heure\",\"other\":\"%{count} heures\"},\"minutes_exact\":{\"one\":\"%{count} minute\",\"other\":\"%{count} minutes\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} secondes\"}}},\"workers\":\"Processus\",\"queue\":\"File\",\"no_job\":\"Pas de tâches\",\"repositories\":{\"branch\":\"Branche\",\"image_url\":\"Image\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"tabs\":{\"current\":\"Actuel\",\"build_history\":\"Historique des tâches\",\"branches\":\"Résumé des branches\",\"build\":\"Construction\",\"job\":\"Tâche\"}},\"build\":{\"job\":\"Tâche\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\",\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"builds\":{\"name\":\"Version\",\"messages\":{\"sponsored_by\":\"Cette série de tests a été exécutée sur une machine sponsorisée par\"},\"build_matrix\":\"Matrice des versions\",\"allowed_failures\":\"Échecs autorisés\",\"author\":\"Auteur\",\"config\":\"Config\",\"compare\":\"Comparer\",\"committer\":\"Committeur\",\"branch\":\"Branche\",\"commit\":\"Commit\",\"message\":\"Message\",\"started_at\":\"Commencé\",\"duration\":\"Durée\",\"finished_at\":\"Terminé\"},\"layouts\":{\"top\":{\"home\":\"Accueil\",\"blog\":\"Blog\",\"docs\":\"Documentation\",\"stats\":\"Statistiques\",\"github_login\":\"Connection Github\",\"profile\":\"Profil\",\"sign_out\":\"Déconnection\",\"admin\":\"Admin\"},\"application\":{\"fork_me\":\"Faites un Fork sur Github\",\"recent\":\"Récent\",\"search\":\"Chercher\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Voir tous nos extraordinaire sponsors &rarr;\",\"my_repositories\":\"Mes dépôts\"},\"about\":{\"alpha\":\"Ceci est en alpha.\",\"messages\":{\"alpha\":\"S'il vous plaît ne considérez <strong>pas</strong> ce service comme étant stable. Nous sommes loin de ça! Plus d'infos <a href='https://github.com/travis-ci'>ici.</a>\"},\"join\":\"Joignez-vous à nous et aidez-nous!\",\"mailing_list\":\"Liste de distribution\",\"repository\":\"Dépôt\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Version\",\"build_matrix\":\"Matrice des versions\",\"commit\":\"Commit\",\"committer\":\"Committeur\",\"compare\":\"Comparer\",\"config\":\"Config\",\"duration\":\"Durée\",\"finished_at\":\"Terminé à\",\"job\":\"Tâche\",\"log\":\"Journal\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"message\":{\"your_repos\":\"Utilisez les boutons ci-dessous pour activer Travis sur vos projets puis déployez sur GitHub.<br />\\nPour tester sur plus de versions de ruby, voir\",\"config\":\"comment configurer des options de version personnalisées\"},\"messages\":{\"notice\":\"Pour commencer, veuillez lire notre <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">guide de démarrage</a>.\\n <small>Cela ne vous prendra que quelques minutes.</small>\"},\"token\":\"Jeton\",\"your_repos\":\"Vos dépôts\",\"email\":\"Courriel\",\"update\":\"Modifier\",\"update_locale\":\"Modifier\",\"your_locale\":\"Votre langue\"}},\"statistics\":{\"index\":{\"count\":\"Décompte\",\"repo_growth\":\"Croissance de dépôt\",\"total_projects\":\"Total des projets/dépôts\",\"build_count\":\"Décompte des versions\",\"last_month\":\"mois dernier\",\"total_builds\":\"Total des versions\"}},\"admin\":{\"actions\":{\"create\":\"créer\",\"created\":\"créé\",\"delete\":\"supprimer\",\"deleted\":\"supprimé\",\"update\":\"mise à jour\",\"updated\":\"mis à jour\"},\"credentials\":{\"log_out\":\"Déconnection\"},\"delete\":{\"confirmation\":\"Oui, je suis sure\",\"flash_confirmation\":\"%{name} a été détruit avec succès\"},\"flash\":{\"error\":\"%{name} n'a pas pu être %{action}\",\"noaction\":\"Aucune action n'a été entreprise\",\"successful\":\"%{name} a réussi à %{action}\"},\"history\":{\"name\":\"Historique\",\"no_activity\":\"Aucune activité\",\"page_name\":\"Historique pour %{name}\"},\"list\":{\"add_new\":\"Ajouter un nouveau\",\"delete_action\":\"Supprimer\",\"delete_selected\":\"Supprimer la sélection\",\"edit_action\":\"Modifier\",\"search\":\"Rechercher\",\"select\":\"Sélectionner le %{name} à modifier\",\"select_action\":\"Sélectionner\",\"show_all\":\"Montrer tout\"},\"new\":{\"basic_info\":\"Information de base\",\"cancel\":\"Annuler\",\"chosen\":\"%{name} choisi\",\"chose_all\":\"Choisir tout\",\"clear_all\":\"Déselectionner tout\",\"many_chars\":\"caractères ou moins\",\"one_char\":\"caractère.\",\"optional\":\"Optionnel\",\"required\":\"Requis\",\"save\":\"Sauvegarder\",\"save_and_add_another\":\"Sauvegarder et en ajouter un autre\",\"save_and_edit\":\"Sauvegarder et modifier\",\"select_choice\":\"Faites vos choix et cliquez\"},\"dashboard\":{\"add_new\":\"Ajouter un nouveau\",\"last_used\":\"Dernière utilisation\",\"model_name\":\"Nom du modèle\",\"modify\":\"Modification\",\"name\":\"Tableau de bord\",\"pagename\":\"Administration du site\",\"records\":\"Enregistrements\",\"show\":\"Voir\",\"ago\":\"plus tôt\"}},\"home\":{\"name\":\"accueil\"},\"repository\":{\"duration\":\"Durée\"},\"devise\":{\"confirmations\":{\"confirmed\":\"Votre compte a été crée avec succès. Vous être maintenant connecté.\",\"send_instructions\":\"Vous allez recevoir un courriel avec les instructions de confirmation de votre compte dans quelques minutes.\"},\"failure\":{\"inactive\":\"Votre compte n'a pas encore été activé.\",\"invalid\":\"Adresse courriel ou mot de passe invalide.\",\"invalid_token\":\"Jeton d'authentification invalide.\",\"locked\":\"Votre compte est bloqué.\",\"timeout\":\"Votre session est expirée, veuillez vous reconnecter pour continuer.\",\"unauthenticated\":\"Vous devez vous connecter ou vous enregistrer afin de continuer\",\"unconfirmed\":\"Vous devez confirmer votre compte avant de continuer.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instructions de confirmations\"},\"reset_password_instructions\":{\"subject\":\"Instruction de remise à zéro du mot de passe\"},\"unlock_instructions\":{\"subject\":\"Instruction de débloquage\"}},\"passwords\":{\"send_instructions\":\"Vous recevrez un courriel avec les instructions de remise à zéro du mot de passe dans quelques minutes.\",\"updated\":\"Votre mot de passe a été changé avec succès. Vous êtes maintenant connecté.\"},\"registrations\":{\"destroyed\":\"Au revoir! Votre compte a été annulé avec succès. Nous espérons vous revoir bientôt.\",\"signed_up\":\"Vous êtes enregistré avec succès. Si activé, une confirmation vous a été envoyé par courriel.\",\"updated\":\"Votre compte a été mis a jour avec succès\"},\"sessions\":{\"signed_in\":\"Connecté avec succès\",\"signed_out\":\"Déconnecté avec succès\"},\"unlocks\":{\"send_instructions\":\"Vous recevrez un courriel contenant les instructions pour débloquer votre compte dans quelques minutes.\",\"unlocked\":\"Votre compte a été débloqué avec succès.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"étais déja confirmé\",\"not_found\":\"n'a pas été trouvé\",\"not_locked\":\"n'étais pas bloqué\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"ja\":{\"workers\":\"ワーカー\",\"queue\":\"キュー\",\"no_job\":\"ジョブはありません\",\"repositories\":{\"branch\":\"ブランチ\",\"image_url\":\"画像URL\",\"markdown\":\".md\",\"textile\":\".textile\",\"rdoc\":\".rdoc\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"tabs\":{\"current\":\"最新\",\"build_history\":\"ビルド履歴\",\"branches\":\"ブランチまとめ\",\"build\":\"ビルド\",\"job\":\"ジョブ\"}},\"build\":{\"job\":\"ジョブ\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"ビルドマトリクス\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"builds\":{\"name\":\"ビルド\",\"messages\":{\"sponsored_by\":\"このテストは以下のスポンサーの協力で行いました。\"},\"build_matrix\":\"失敗許容範囲外\",\"allowed_failures\":\"失敗許容範囲内\",\"author\":\"制作者\",\"config\":\"設定\",\"compare\":\"比較\",\"committer\":\"コミット者\",\"branch\":\"ブランチ\",\"commit\":\"コミット\",\"message\":\"メッセージ\",\"started_at\":\"開始時刻\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\"},\"layouts\":{\"about\":{\"alpha\":\"まだアルファですよ!\",\"join\":\"参加してみよう!\",\"mailing_list\":\"メールリスト\",\"messages\":{\"alpha\":\"Travis-ciは安定したサービスまで後一歩!詳しくは<a href='https://github.com/travis-ci'>こちら</a>\"},\"repository\":\"リポジトリ\",\"twitter\":\"ツイッター\"},\"application\":{\"fork_me\":\"Githubでフォークしよう\",\"my_repositories\":\"マイリポジトリ\",\"recent\":\"最近\",\"search\":\"検索\",\"sponsers\":\"スポンサー\",\"sponsors_link\":\"スポンサーをもっと見る &rarr;\"},\"top\":{\"blog\":\"ブログ\",\"docs\":\"Travisとは?\",\"github_login\":\"Githubでログイン\",\"home\":\"ホーム\",\"profile\":\"プロフィール\",\"sign_out\":\"ログアウト\",\"stats\":\"統計\",\"admin\":\"管理\"},\"mobile\":{\"author\":\"制作者\",\"build\":\"ビルド\",\"build_matrix\":\"ビルドマトリクス\",\"commit\":\"コミット\",\"committer\":\"コミット者\",\"compare\":\"比較\",\"config\":\"設定\",\"duration\":\"処理時間\",\"finished_at\":\"終了時刻\",\"job\":\"ジョブ\",\"log\":\"ログ\"}},\"profiles\":{\"show\":{\"github\":\"Github\",\"email\":\"メール\",\"message\":{\"config\":\"詳細設定\",\"your_repos\":\"以下のスイッチを設定し、Travis-ciを有効にします。Githubへプッシュしたらビルドは自動的に開始します。複数バーションや細かい設定はこちらへ:\"},\"messages\":{\"notice\":\"まずは<a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Travisのはじめ方</a>を参照してください。\"},\"token\":\"トークン\",\"your_repos\":\"リポジトリ\",\"update\":\"更新\",\"update_locale\":\"更新\",\"your_locale\":\"言語設定\"}},\"statistics\":{\"index\":{\"build_count\":\"ビルド数\",\"count\":\"数\",\"last_month\":\"先月\",\"repo_growth\":\"リポジトリ\",\"total_builds\":\"合計ビルド数\",\"total_projects\":\"合計リポジトリ\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nb\":{\"admin\":{\"actions\":{\"create\":\"opprett\",\"created\":\"opprettet\",\"delete\":\"slett\",\"deleted\":\"slettet\",\"update\":\"oppdater\",\"updated\":\"oppdatert\"},\"credentials\":{\"log_out\":\"Logg ut\"},\"dashboard\":{\"add_new\":\"Legg til ny\",\"ago\":\"siden\",\"last_used\":\"Sist brukt\",\"model_name\":\"Modell\",\"modify\":\"Rediger\",\"name\":\"Dashbord\",\"pagename\":\"Nettstedsadministrasjon\",\"records\":\"Oppføringer\",\"show\":\"Vis\"},\"delete\":{\"confirmation\":\"Ja, jeg er sikker\",\"flash_confirmation\":\"%{name} ble slettet\"},\"flash\":{\"error\":\"%{name} kunne ikke bli %{action}\",\"noaction\":\"Ingen handlinger ble utført\",\"successful\":\"%{name} ble %{action}\"},\"history\":{\"name\":\"Logg\",\"no_activity\":\"Ingen aktivitet\",\"page_name\":\"Logg for %{name}\"},\"list\":{\"add_new\":\"Legg til ny\",\"delete_action\":\"Slett\",\"delete_selected\":\"Slett valgte\",\"edit_action\":\"Rediger\",\"search\":\"Søk\",\"select\":\"Velg %{name} for å redigere\",\"select_action\":\"Velg\",\"show_all\":\"Vis alle \"},\"new\":{\"basic_info\":\"Basisinformasjon\",\"cancel\":\"Avbryt\",\"chosen\":\"Valgt %{name}\",\"chose_all\":\"Velg alle\",\"clear_all\":\"Fjern alle\",\"many_chars\":\"eller færre tegn.\",\"one_char\":\"tegn.\",\"optional\":\"Valgfri\",\"required\":\"Påkrevd\",\"save\":\"Lagre\",\"save_and_add_another\":\"Lagre og legg til ny\",\"save_and_edit\":\"Lagre og rediger\",\"select_choice\":\"Kryss av for dine valg og klikk\"}},\"build\":{\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\"},\"builds\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testen ble kjørt på en maskin sponset av\"},\"name\":\"Jobb\",\"started_at\":\"Startet\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} time\",\"other\":\"%{count} timer\"},\"minutes_exact\":{\"one\":\"%{count} minutt\",\"other\":\"%{count} minutter\"},\"seconds_exact\":{\"one\":\"%{count} sekund\",\"other\":\"%{count} sekunder\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Din konto er aktivert og du er nå innlogget.\",\"send_instructions\":\"Om noen få minutter så vil du få en e-post med informasjon om hvordan du bekrefter kontoen din.\"},\"failure\":{\"inactive\":\"Kontoen din har ikke blitt aktivert enda.\",\"invalid\":\"Ugyldig e-post eller passord.\",\"invalid_token\":\"Ugyldig autentiseringskode.\",\"locked\":\"Kontoen din er låst.\",\"timeout\":\"Du ble logget ut siden på grunn av mangel på aktivitet, vennligst logg inn på nytt.\",\"unauthenticated\":\"Du må logge inn eller registrere deg for å fortsette.\",\"unconfirmed\":\"Du må bekrefte kontoen din før du kan fortsette.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bekreftelsesinformasjon\"},\"reset_password_instructions\":{\"subject\":\"Instruksjoner for å få nytt passord\"},\"unlock_instructions\":{\"subject\":\"Opplåsningsinstruksjoner\"}},\"passwords\":{\"send_instructions\":\"Om noen få minutter så vil du få en epost med informasjon om hvordan du kan få et nytt passord.\",\"updated\":\"Passordet ditt ble endret, og du er logget inn.\"},\"registrations\":{\"destroyed\":\"Adjø! Kontoen din ble kansellert. Vi håper vi ser deg igjen snart.\",\"signed_up\":\"Du er nå registrert.\",\"updated\":\"Kontoen din ble oppdatert.\"},\"sessions\":{\"signed_in\":\"Du er nå logget inn.\",\"signed_out\":\"Du er nå logget ut.\"},\"unlocks\":{\"send_instructions\":\"Om noen få minutter så kommer du til å få en e-post med informasjon om hvordan du kan låse opp kontoen din.\",\"unlocked\":\"Kontoen din ble låst opp, og du er nå logget inn igjen.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"har allerede blitt bekreftet\",\"not_found\":\"ikke funnnet\",\"not_locked\":\"var ikke låst\"}},\"home\":{\"name\":\"hjem\"},\"jobs\":{\"allowed_failures\":\"Tillatte feil\",\"author\":\"Forfatter\",\"branch\":\"Gren\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"message\":\"Beskrivelse\",\"messages\":{\"sponsored_by\":\"Denne testserien ble kjørt på en maskin sponset av\"},\"started_at\":\"Startet\"},\"layouts\":{\"about\":{\"alpha\":\"Dette er alfa-greier.\",\"join\":\"Bli med og hjelp oss!\",\"mailing_list\":\"E-postliste\",\"messages\":{\"alpha\":\"Dette er <strong>ikke</strong> en stabil tjeneste. Vi har fremdeles et stykke igjen! Mer informasjon finner du <a href=\\\"https://github.com/travis-ci\\\">her</a>.\"},\"repository\":\"Kodelager\",\"twitter\":\"Twitter.\"},\"application\":{\"fork_me\":\"Se koden på Github\",\"my_repositories\":\"Mine kodelagre\",\"recent\":\"Nylig\",\"search\":\"Søk\",\"sponsers\":\"Sponsorer\",\"sponsors_link\":\"Se alle de flotte sponsorene våre &rarr;\"},\"mobile\":{\"author\":\"Forfatter\",\"build\":\"Jobb\",\"build_matrix\":\"Jobbmatrise\",\"commit\":\"Innsending\",\"committer\":\"Innsender\",\"compare\":\"Sammenlign\",\"config\":\"Oppsett\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"job\":\"Jobb\",\"log\":\"Logg\"},\"top\":{\"admin\":\"Administrator\",\"blog\":\"Blogg\",\"docs\":\"Dokumentasjon\",\"github_login\":\"Logg inn med Github\",\"home\":\"Hjem\",\"profile\":\"Profil\",\"sign_out\":\"Logg ut\",\"stats\":\"Statistikk\"}},\"no_job\":\"Ingen jobber finnnes\",\"profiles\":{\"show\":{\"email\":\"E-post\",\"github\":\"Github\",\"message\":{\"config\":\"hvordan sette opp egne jobbinnstillinger\",\"your_repos\":\"Slå\\u0010 på Travis for prosjektene dine ved å dra i bryterne under, og send koden til Github.<br />\\nFor å teste mot flere ruby-versjoner, se dokumentasjonen for\"},\"messages\":{\"notice\":\"For å komme i gang, vennligst les <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">kom-i-gang-veivisereren</a> vår. <small>Det tar bare et par minutter.</small>\"},\"token\":\"Kode\",\"update\":\"Oppdater\",\"update_locale\":\"Oppdater\",\"your_locale\":\"Ditt språk\",\"your_repos\":\"Dine kodelagre\"}},\"queue\":\"Kø\",\"repositories\":{\"branch\":\"Gren\",\"commit\":\"Innsender\",\"duration\":\"Varighet\",\"finished_at\":\"Fullført\",\"image_url\":\"Bilde-URL\",\"markdown\":\"Markdown\",\"message\":\"Beskrivelse\",\"rdoc\":\"RDOC\",\"started_at\":\"Startet\",\"tabs\":{\"branches\":\"Grensammendrag\",\"build\":\"Jobb\",\"build_history\":\"Jobblogg\",\"current\":\"Siste\",\"job\":\"Jobb\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Varighet\"},\"statistics\":{\"index\":{\"build_count\":\"Antall jobber\",\"count\":\"Antall\",\"last_month\":\"siste måned\",\"repo_growth\":\"Vekst i kodelager\",\"total_builds\":\"Totale jobber\",\"total_projects\":\"Antall prosjekter/kodelagre\"}},\"workers\":\"Arbeidere\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"nl\":{\"admin\":{\"actions\":{\"create\":\"aanmaken\",\"created\":\"aangemaakt\",\"delete\":\"verwijderen\",\"deleted\":\"verwijderd\",\"update\":\"bijwerken\",\"updated\":\"bijgewerkt\"},\"credentials\":{\"log_out\":\"Afmelden\"},\"dashboard\":{\"add_new\":\"Nieuwe toevoegen\",\"ago\":\"geleden\",\"last_used\":\"Laatst gebruikt\",\"model_name\":\"Model naam\",\"modify\":\"Wijzigen\",\"pagename\":\"Site administratie\",\"show\":\"Laten zien\",\"records\":\"Gegevens\"},\"delete\":{\"confirmation\":\"Ja, ik ben zeker\",\"flash_confirmation\":\"%{name} is vernietigd\"},\"flash\":{\"error\":\"%{name} kon niet worden %{action}\",\"noaction\":\"Er zijn geen acties genomen\",\"successful\":\"%{name} is %{action}\"},\"history\":{\"name\":\"Geschiedenis\",\"no_activity\":\"Geen activiteit\",\"page_name\":\"Geschiedenis van %{name}\"},\"list\":{\"add_new\":\"Nieuwe toevoegen\",\"delete_action\":\"Verwijderen\",\"delete_selected\":\"Verwijder geselecteerden\",\"edit_action\":\"Bewerken\",\"search\":\"Zoeken\",\"select\":\"Selecteer %{name} om te bewerken\",\"select_action\":\"Selecteer\",\"show_all\":\"Laat allen zien\"},\"new\":{\"basic_info\":\"Basisinfo\",\"cancel\":\"Annuleren\",\"chosen\":\"%{name} gekozen\",\"chose_all\":\"Kies allen\",\"clear_all\":\"Deselecteer allen\",\"many_chars\":\"tekens of minder.\",\"one_char\":\"teken.\",\"optional\":\"Optioneel\",\"required\":\"Vereist\",\"save\":\"Opslaan\",\"save_and_add_another\":\"Opslaan en een nieuwe toevoegen\",\"save_and_edit\":\"Opslaan en bewerken\",\"select_choice\":\"Selecteer uw keuzes en klik\"}},\"build\":{\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"job\":\"Taak\"},\"builds\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw Matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze tests zijn gedraaid op een machine gesponsord door\"},\"name\":\"Bouw\",\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} uur\",\"other\":\"%{count} uren\"},\"minutes_exact\":{\"one\":\"%{count} minuut\",\"other\":\"%{count} minuten\"},\"seconds_exact\":{\"one\":\"%{count} seconde\",\"other\":\"%{count} seconden\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Uw account is bevestigd. U wordt nu ingelogd.\",\"send_instructions\":\"Binnen enkele minuten zal u een email ontvangen met instructies om uw account te bevestigen.\"},\"failure\":{\"inactive\":\"Uw account is nog niet geactiveerd.\",\"invalid\":\"Ongeldig email adres of wachtwoord.\",\"invalid_token\":\"Ongeldig authenticatie token.\",\"locked\":\"Uw account is vergrendeld.\",\"timeout\":\"Uw sessie is verlopen, gelieve opnieuw in te loggen om verder te gaan.\",\"unauthenticated\":\"U moet inloggen of u registeren voordat u verder gaat.\",\"unconfirmed\":\"U moet uw account bevestigen voordat u verder gaat.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Bevestigings-instructies\"},\"reset_password_instructions\":{\"subject\":\"Wachtwoord herstel instructies\"},\"unlock_instructions\":{\"subject\":\"Ontgrendel-instructies\"}},\"passwords\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw wachtwoord opnieuw in te stellen.\",\"updated\":\"Uw wachtwoord is veranderd. U wordt nu ingelogd.\"},\"registrations\":{\"destroyed\":\"Dag! Uw account is geannuleerd. We hopen u vlug terug te zien.\",\"signed_up\":\"Uw registratie is voltooid. Als het ingeschakeld is wordt een bevestiging naar uw email adres verzonden.\",\"updated\":\"Het bijwerken van uw account is gelukt.\"},\"sessions\":{\"signed_in\":\"Inloggen gelukt.\",\"signed_out\":\"Uitloggen gelukt.\"},\"unlocks\":{\"send_instructions\":\"Binnen enkele minuten zal u een email krijgen met instructies om uw account te ontgrendelen.\",\"unlocked\":\"Uw account is ontgrendeld. U wordt nu ingelogd.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"was al bevestigd\",\"not_found\":\"niet gevonden\",\"not_locked\":\"was niet vergrendeld\"}},\"jobs\":{\"allowed_failures\":\"Toegestane mislukkingen\",\"author\":\"Auteur\",\"branch\":\"Tak\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"message\":\"Bericht\",\"messages\":{\"sponsored_by\":\"Deze testen zijn uitgevoerd op een machine gesponsord door\"},\"started_at\":\"Gestart\",\"commit\":\"Commit\",\"committer\":\"Committer\"},\"layouts\":{\"about\":{\"alpha\":\"Dit is in alfa-stadium.\",\"join\":\"Doe met ons mee en help!\",\"mailing_list\":\"Mailing lijst\",\"messages\":{\"alpha\":\"Gelieve deze service <strong>niet</strong> te beschouwen als stabiel. Daar zijn we nog lang niet! Meer info <a href='https://github.com/travis-ci'>hier.</a>\"},\"repository\":\"Repository\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Maak een fork op Github\",\"my_repositories\":\"Mijn repositories\",\"recent\":\"Recent\",\"search\":\"Zoeken\",\"sponsers\":\"Sponsors\",\"sponsors_link\":\"Bekijk al onze geweldige sponsors &rarr;\"},\"mobile\":{\"author\":\"Auteur\",\"build\":\"Bouw\",\"build_matrix\":\"Bouw matrix\",\"compare\":\"Vergelijk\",\"config\":\"Configuratie\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid op\",\"job\":\"Taak\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"log\":\"Logboek\"},\"top\":{\"admin\":\"Administratie\",\"blog\":\"Blog\",\"docs\":\"Documentatie\",\"github_login\":\"Inloggen met Github\",\"home\":\"Home\",\"profile\":\"Profiel\",\"sign_out\":\"Uitloggen\",\"stats\":\"Statistieken\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Er zijn geen taken\",\"profiles\":{\"show\":{\"email\":\"Email adres\",\"github\":\"Github\",\"message\":{\"config\":\"hoe eigen bouw-opties in te stellen\",\"your_repos\":\"Zet de schakelaars hieronder aan om de Travis hook voor uw projecten te activeren en push daarna naar Github<br />\\nOm te testen tegen meerdere rubies, zie\"},\"messages\":{\"notice\":\"Om te beginnen kunt u onze <a href=\\\\\\\"http://about.travis-ci.org/docs/user/getting-started/\\\\\\\">startersgids</a> lezen.\\\\n  <small>Het zal maar enkele minuten van uw tijd vergen.</small>\"},\"update\":\"Bijwerken\",\"update_locale\":\"Bijwerken\",\"your_locale\":\"Uw taal\",\"your_repos\":\"Uw repositories\",\"token\":\"Token\"}},\"queue\":\"Wachtrij\",\"repositories\":{\"branch\":\"Tak\",\"duration\":\"Duur\",\"finished_at\":\"Voltooid\",\"image_url\":\"Afbeeldings URL\",\"message\":\"Bericht\",\"started_at\":\"Gestart\",\"tabs\":{\"branches\":\"Tak samenvatting\",\"build\":\"Bouw\",\"build_history\":\"Bouw geschiedenis\",\"current\":\"Huidig\",\"job\":\"Taak\"},\"commit\":\"Commit\",\"markdown\":\"Markdown\",\"rdoc\":\"RDOC\",\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duur\"},\"statistics\":{\"index\":{\"build_count\":\"Bouw aantal\",\"count\":\"Aantal\",\"last_month\":\"voorbije maand\",\"repo_growth\":\"Repository groei\",\"total_builds\":\"Bouw totaal\",\"total_projects\":\"Projecten/Repository totaal\"}},\"workers\":\"Machines\",\"home\":{\"name\":\"Hoofdpagina\"}},\"pl\":{\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} godzina\",\"other\":\"%{count} godziny\"},\"minutes_exact\":{\"one\":\"%{count} minuta\",\"other\":\"%{count} minuty\"},\"seconds_exact\":{\"one\":\"%{count} sekunda\",\"other\":\"%{count} sekundy\"}}},\"workers\":\"Workers\",\"queue\":\"Kolejka\",\"no_job\":\"Brak zadań\",\"repositories\":{\"branch\":\"Gałąź\",\"image_url\":\"URL obrazka\",\"markdown\":\"Markdown\",\"textile\":\"Textile\",\"rdoc\":\"RDOC\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"tabs\":{\"current\":\"Aktualny\",\"build_history\":\"Historia Buildów\",\"branches\":\"Wszystkie Gałęzie\",\"build\":\"Build\",\"job\":\"Zadanie\"}},\"build\":{\"job\":\"Zadanie\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"jobs\":{\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Committer\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"builds\":{\"name\":\"Build\",\"messages\":{\"sponsored_by\":\"Te testy zostały uruchomione na maszynie sponsorowanej przez\"},\"build_matrix\":\"Macierz Buildów\",\"allowed_failures\":\"Dopuszczalne Niepowodzenia\",\"author\":\"Autor\",\"config\":\"Konfiguracja\",\"compare\":\"Porównanie\",\"committer\":\"Komitujący\",\"branch\":\"Gałąź\",\"commit\":\"Commit\",\"message\":\"Opis\",\"started_at\":\"Rozpoczęto\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\"},\"layouts\":{\"top\":{\"home\":\"Start\",\"blog\":\"Blog\",\"docs\":\"Dokumentacja\",\"stats\":\"Statystki\",\"github_login\":\"Zaloguj się przy pomocy Githuba\",\"profile\":\"Profil\",\"sign_out\":\"Wyloguj się\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"recent\":\"Ostatnie\",\"search\":\"Wyniki\",\"sponsers\":\"Sponsorzy\",\"sponsors_link\":\"Zobacz naszych wszystkich wspaniałych sponsorów &rarr;\",\"my_repositories\":\"Moje repozytoria\"},\"about\":{\"alpha\":\"To wciąż jest wersja alpha.\",\"messages\":{\"alpha\":\"Proszę <strong>nie</strong> traktuj tego jako stabilnej usługi. Wciąż nam wiele do tego brakuje! Więcej informacji znajdziesz <a href='https://github.com/travis-ci'>tutaj.</a>\"},\"join\":\"Pomóż i dołącz do nas!\",\"mailing_list\":\"Lista mailingowa\",\"repository\":\"Repozytorium\",\"twitter\":\"Twitter\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Macierz Buildów\",\"commit\":\"Commit\",\"committer\":\"Komitujący\",\"compare\":\"Porównianie\",\"config\":\"Konfiguracja\",\"duration\":\"Czas trwania\",\"finished_at\":\"Zakończono\",\"job\":\"Zadanie\",\"log\":\"Log\"}},\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"your_repos\":\"  Przesuń suwak poniżej, aby włączyć Travisa, dla twoich projektów, a następnie umieść swój kod na GitHubie.<br />\\n Aby testować swój kod przy użyciu wielu wersji Rubiego, zobacz\",\"config\":\"jak skonfigurować niestandardowe opcje builda\"},\"messages\":{\"notice\":\"Aby zacząć, przeczytaj nasz <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Przewodnik </a>.\\n  <small>Zajmie ci to tylko kilka minut.</small>\"},\"token\":\"Token\",\"your_repos\":\"Twoje repozytoria\"}},\"statistics\":{\"index\":{\"count\":\"Ilość\",\"repo_growth\":\"Przyrost repozytoriów\",\"total_projects\":\"Łącznie projektów/repozytoriów\",\"build_count\":\"Liczba buildów\",\"last_month\":\"ostatni miesiąc\",\"total_builds\":\"Łącznie Buildów\"}},\"date\":{\"abbr_day_names\":[\"nie\",\"pon\",\"wto\",\"śro\",\"czw\",\"pią\",\"sob\"],\"abbr_month_names\":[\"sty\",\"lut\",\"mar\",\"kwi\",\"maj\",\"cze\",\"lip\",\"sie\",\"wrz\",\"paź\",\"lis\",\"gru\"],\"day_names\":[\"niedziela\",\"poniedziałek\",\"wtorek\",\"środa\",\"czwartek\",\"piątek\",\"sobota\"],\"formats\":{\"default\":\"%d-%m-%Y\",\"long\":\"%B %d, %Y\",\"short\":\"%d %b\"},\"month_names\":[\"styczeń\",\"luty\",\"marzec\",\"kwiecień\",\"maj\",\"czerwiec\",\"lipiec\",\"sierpień\",\"wrzesień\",\"październik\",\"listopad\",\"grudzień\"],\"order\":[\"day\",\"month\",\"year\"]},\"errors\":{\"format\":\"%{attribute} %{message}\",\"messages\":{\"accepted\":\"musi zostać zaakceptowane\",\"blank\":\"nie może być puste\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}},\"pt-BR\":{\"admin\":{\"actions\":{\"create\":\"criar\",\"created\":\"criado\",\"delete\":\"deletar\",\"deleted\":\"deletado\",\"update\":\"atualizar\",\"updated\":\"atualizado\"},\"credentials\":{\"log_out\":\"Deslogar\"},\"dashboard\":{\"add_new\":\"Adicionar novo\",\"ago\":\"atrás\",\"last_used\":\"Última utilização\",\"model_name\":\"Nome do modelo\",\"modify\":\"Modificar\",\"name\":\"Dashboard\",\"pagename\":\"Administração do site\",\"records\":\"Registros\",\"show\":\"Mostrar\"},\"delete\":{\"confirmation\":\"Sim, tenho certeza\",\"flash_confirmation\":\"%{name} foi destruído com sucesso\"},\"flash\":{\"error\":\"%{name} falhou ao %{action}\",\"noaction\":\"Nenhuma ação foi tomada\",\"successful\":\"%{name} foi %{action} com sucesso\"},\"history\":{\"name\":\"Histórico\",\"no_activity\":\"Nenhuma Atividade\",\"page_name\":\"Histórico para %{name}\"},\"list\":{\"add_new\":\"Adicionar novo\",\"delete_action\":\"Deletar\",\"delete_selected\":\"Deletar selecionados\",\"edit_action\":\"Editar\",\"search\":\"Buscar\",\"select\":\"Selecionar %{name} para editar\",\"select_action\":\"Selecionar\",\"show_all\":\"Mostrar todos\"},\"new\":{\"basic_info\":\"Informações básicas\",\"cancel\":\"Cancelar\",\"chosen\":\"Escolhido %{name}\",\"chose_all\":\"Escolher todos\",\"clear_all\":\"Limpar todos\",\"many_chars\":\"caracteres ou menos.\",\"one_char\":\"caractere.\",\"optional\":\"Opcional\",\"required\":\"Requerido\",\"save\":\"Salvar\",\"save_and_add_another\":\"Salvar e adicionar outro\",\"save_and_edit\":\"Salvar e alterar\",\"select_choice\":\"Selecione e clique\"}},\"build\":{\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\"},\"builds\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"name\":\"Build\",\"started_at\":\"Iniciou em\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} hora\",\"other\":\"%{count} horas\"},\"minutes_exact\":{\"one\":\"%{count} minuto\",\"other\":\"%{count} minutos\"},\"seconds_exact\":{\"one\":\"%{count} segundo\",\"other\":\"%{count} segundos\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Sua conta foi confirmada com sucesso. Você agora está logado.\",\"send_instructions\":\"Você receberá um email com instruções de como confirmar sua conta em alguns minutos.\"},\"failure\":{\"inactive\":\"Sua conta ainda não foi ativada.\",\"invalid\":\"Email ou senha inválidos.\",\"invalid_token\":\"Token de autenticação inválido.\",\"locked\":\"Sua conta está trancada.\",\"timeout\":\"Sua sessão expirou, por favor faça seu login novamente.\",\"unauthenticated\":\"Você precisa fazer o login ou cadastrar-se antes de continuar.\",\"unconfirmed\":\"Você precisa confirmar sua conta antes de continuar.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Instruções de confirmação\"},\"reset_password_instructions\":{\"subject\":\"Instruções de atualização de senha\"},\"unlock_instructions\":{\"subject\":\"Instruções de destrancamento\"}},\"passwords\":{\"send_instructions\":\"Você receberá um email com instruções de como atualizar sua senha em alguns minutos.\",\"updated\":\"Sua senha foi alterada com sucesso. Você agora está logado.\"},\"registrations\":{\"destroyed\":\"Tchau! Sua conta foi cancelada com sucesso. Esperamos vê-lo novamente em breve!\",\"signed_up\":\"Você se cadastrou com sucesso. Se ativada, uma confirmação foi enviada para seu email.\",\"updated\":\"Você atualizou sua conta com sucesso.\"},\"sessions\":{\"signed_in\":\"Logado com sucesso.\",\"signed_out\":\"Deslogado com sucesso.\"},\"unlocks\":{\"send_instructions\":\"Você receberá um email com instruções de como destrancar sua conta em alguns minutos.\",\"unlocked\":\"Sua conta foi destrancada com sucesso. Você agora está logado.\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"já foi confirmado\",\"not_found\":\"não encontrado\",\"not_locked\":\"não estava trancado\"}},\"home\":{\"name\":\"home\"},\"jobs\":{\"allowed_failures\":\"Falhas Permitidas\",\"author\":\"Autor\",\"branch\":\"Branch\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"message\":\"Mensagem\",\"messages\":{\"sponsored_by\":\"Esta série de testes foi executada em uma caixa de processos patrocinada por\"},\"started_at\":\"Iniciou em\"},\"layouts\":{\"about\":{\"alpha\":\"Isto é um alpha.\",\"join\":\"Junte-se à nós e ajude!\",\"mailing_list\":\"Lista de email\",\"messages\":{\"alpha\":\"Por favor, <strong>não</strong> considere isto um serviço estável. Estamos muito longe disso! Mais informações <a href='https://github.com/travis-ci'>aqui.</a>\"},\"repository\":\"Repositório\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Faça fork no Github\",\"my_repositories\":\"Meus Repositórios\",\"recent\":\"Recentes\",\"search\":\"Buscar\",\"sponsers\":\"Patrocinadores\",\"sponsors_link\":\"Conheça todos os nossos patrocinadores &rarr;\"},\"mobile\":{\"author\":\"Autor\",\"build\":\"Build\",\"build_matrix\":\"Matriz de Build\",\"commit\":\"Commit\",\"committer\":\"Committer\",\"compare\":\"Comparar\",\"config\":\"Config\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"job\":\"Trabalho\",\"log\":\"Log\"},\"top\":{\"admin\":\"Admin\",\"blog\":\"Blog\",\"docs\":\"Documentação\",\"github_login\":\"Logue com o Github\",\"home\":\"Home\",\"profile\":\"Perfil\",\"sign_out\":\"Sair\",\"stats\":\"Estatísticas\"}},\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"fr\":\"Français\",\"ja\":\"日本語\",\"nb\":\"Norsk Bokmål\",\"nl\":\"Nederlands\",\"pl\":\"Polski\",\"ru\":\"Русский\",\"pt-BR\":\"português brasileiro\"},\"no_job\":\"Não há trabalhos\",\"profiles\":{\"show\":{\"email\":\"Email\",\"github\":\"Github\",\"message\":{\"config\":\"como configurar opções de build\",\"your_repos\":\"Use os botões abaixo para ligar ou desligar o hook de serviço do Travis para seus projetos, e então, faça um push para o Github.<br />Para testar com múltiplas versões do Ruby, leia\"},\"messages\":{\"notice\":\"Para começar, leia nosso <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Guia de início</a>. <small>Só leva alguns minutinhos.</small>\"},\"token\":\"Token\",\"update\":\"Atualizar\",\"update_locale\":\"Atualizar\",\"your_locale\":\"Sua língua\",\"your_repos\":\"Seus Repositórios\"}},\"queue\":\"Fila\",\"repositories\":{\"branch\":\"Branch\",\"commit\":\"Commit\",\"duration\":\"Duração\",\"finished_at\":\"Concluído em\",\"image_url\":\"URL da imagem\",\"markdown\":\"Markdown\",\"message\":\"Mensagem\",\"rdoc\":\"RDOC\",\"started_at\":\"Iniciou em\",\"tabs\":{\"branches\":\"Sumário do Branch\",\"build\":\"Build\",\"build_history\":\"Histórico de Build\",\"current\":\"Atual\",\"job\":\"Trabalho\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Duração\"},\"statistics\":{\"index\":{\"build_count\":\"Número de Builds\",\"count\":\"Número\",\"last_month\":\"último mês\",\"repo_growth\":\"Crescimento de Repositório\",\"total_builds\":\"Total de Builds\",\"total_projects\":\"Total de Projetos/Repositórios\"}},\"workers\":\"Processos\"},\"ru\":{\"admin\":{\"actions\":{\"create\":\"создать\",\"created\":\"создано\",\"delete\":\"удалить\",\"deleted\":\"удалено\",\"update\":\"обновить\",\"updated\":\"обновлено\"},\"credentials\":{\"log_out\":\"Выход\"},\"dashboard\":{\"add_new\":\"Добавить\",\"ago\":\"назад\",\"last_used\":\"Использовалось в последний раз\",\"model_name\":\"Имя модели\",\"modify\":\"Изменить\",\"name\":\"Панель управления\",\"pagename\":\"Управление сайтом\",\"records\":\"Записи\",\"show\":\"Показать\"},\"delete\":{\"confirmation\":\"Да, я уверен\",\"flash_confirmation\":\"%{name} успешно удалено\"},\"history\":{\"name\":\"История\",\"no_activity\":\"Нет активности\",\"page_name\":\"История %{name}\"},\"list\":{\"add_new\":\"Добавить\",\"delete_action\":\"Удалить\",\"delete_selected\":\"Удалить выбранные\",\"edit_action\":\"Редактировать\",\"search\":\"Поиск\",\"select\":\"Для редактирования выберите %{name}\",\"select_action\":\"Выбрать\",\"show_all\":\"Показать все\"},\"new\":{\"basic_info\":\"Основная информация\",\"cancel\":\"Отмена\",\"chosen\":\"Выбрано %{name}\",\"chose_all\":\"Выбрать все\",\"clear_all\":\"Очистить все\",\"one_char\":\"символ.\",\"optional\":\"Необязательно\",\"required\":\"Обязательно\",\"save\":\"Сохранить\",\"save_and_add_another\":\"Сохранить и добавить другое\",\"save_and_edit\":\"Сохранить и продолжить редактирование\",\"select_choice\":\"Выберите и кликните\",\"many_chars\":\"символов или меньше.\"},\"flash\":{\"error\":\"%{name} не удалось %{action}\",\"noaction\":\"Никаких действий не произведено\",\"successful\":\"%{name} было успешно %{action}\"}},\"build\":{\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\"},\"builds\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Дифф\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине, спонсируемой\"},\"name\":\"Билд\",\"started_at\":\"Начало\"},\"datetime\":{\"distance_in_words\":{\"hours_exact\":{\"one\":\"%{count} час\",\"few\":\"%{count} часа\",\"many\":\"%{count} часов\",\"other\":\"%{count} часа\"},\"minutes_exact\":{\"one\":\"%{count} минута\",\"few\":\"%{count} минуты\",\"many\":\"%{count} минут\",\"other\":\"%{count} минуты\"},\"seconds_exact\":{\"one\":\"%{count} секунда\",\"few\":\"%{count} секунды\",\"many\":\"%{count} секунд\",\"other\":\"%{count} секунды\"}}},\"devise\":{\"confirmations\":{\"confirmed\":\"Ваш аккаунт успешно подтвержден. Приветствуем!\",\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для прохождения процедуры подтверждения аккаунта.\"},\"failure\":{\"inactive\":\"Ваш аккаунт еще не активирован.\",\"invalid\":\"Ошибка в адресе почты или пароле.\",\"invalid_token\":\"Неправильный токен аутентификации.\",\"locked\":\"Ваш аккаунт заблокирован.\",\"timeout\":\"Сессия окончена. Для продолжения работы войдите снова.\",\"unauthenticated\":\"Вам нужно войти или зарегистрироваться.\",\"unconfirmed\":\"Вы должны сначала подтвердить свой аккаунт.\"},\"mailer\":{\"confirmation_instructions\":{\"subject\":\"Инструкции для подтверждению аккаунта\"},\"reset_password_instructions\":{\"subject\":\"Инструкции для сброса пароля\"},\"unlock_instructions\":{\"subject\":\"Инструкции для разблокирования аккаунта\"}},\"passwords\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциями для сброса пароля.\",\"updated\":\"Ваш пароль успешно изменен. Приветствуем!\"},\"registrations\":{\"destroyed\":\"Ваш аккаунт был успешно удален. Живите долго и процветайте!\",\"signed_up\":\"Вы успешно прошли регистрацию. Инструкции для подтверждения аккаунта отправлены на ваш электронный адрес.\",\"updated\":\"Аккаунт успешно обновлен.\"},\"sessions\":{\"signed_in\":\"Приветствуем!\",\"signed_out\":\"Удачи!\"},\"unlocks\":{\"send_instructions\":\"В течении нескольких минут вы получите электронное письмо с инструкциям для разблокировния аккаунта.\",\"unlocked\":\"Ваш аккаунт успешно разблокирован. Приветствуем!\"}},\"errors\":{\"messages\":{\"already_confirmed\":\"уже подтвержден\",\"not_found\":\"не найден\",\"not_locked\":\"не заблокирован\"}},\"home\":{\"name\":\"Главная\"},\"jobs\":{\"allowed_failures\":\"Допустимые неудачи\",\"author\":\"Автор\",\"branch\":\"Ветка\",\"build_matrix\":\"Матрица\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"message\":\"Комментарий\",\"messages\":{\"sponsored_by\":\"Эта серия тестов была запущена на машине спонсируемой\"},\"started_at\":\"Начало\"},\"layouts\":{\"about\":{\"alpha\":\"Это альфа-версия\",\"join\":\"Присоединяйтесь к нам и помогайте!\",\"mailing_list\":\"Лист рассылки\",\"messages\":{\"alpha\":\"Пожалуйста, <strong>не</strong> считайте данный сервис стабильным. Мы еще очень далеки от стабильности! <a href='https://github.com/travis-ci'>Подробности</a>\"},\"repository\":\"Репозиторий\",\"twitter\":\"Twitter\"},\"application\":{\"fork_me\":\"Fork me on Github\",\"my_repositories\":\"Мои репозитории\",\"recent\":\"Недавние\",\"search\":\"Поиск\",\"sponsers\":\"Спонсоры\",\"sponsors_link\":\"Список всех наших замечательных спонсоров &rarr;\"},\"mobile\":{\"author\":\"Автор\",\"build\":\"Сборка\",\"build_matrix\":\"Матрица сборок\",\"commit\":\"Коммит\",\"committer\":\"Коммитер\",\"compare\":\"Сравнение\",\"config\":\"Конфигурация\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"job\":\"Задача\",\"log\":\"Журнал\"},\"top\":{\"admin\":\"Управление\",\"blog\":\"Блог\",\"docs\":\"Документация\",\"github_login\":\"Войти через Github\",\"home\":\"Главная\",\"profile\":\"Профиль\",\"sign_out\":\"Выход\",\"stats\":\"Статистика\"}},\"no_job\":\"Очередь пуста\",\"profiles\":{\"show\":{\"email\":\"Электронная почта\",\"github\":\"Github\",\"message\":{\"config\":\"как настроить специальные опции билда\",\"your_repos\":\"Используйте переключатели, чтобы включить Travis service hook для вашего проекта, а потом отправьте код на GitHub.<br />\\nДля тестирования на нескольких версиях Ruby смотрите\"},\"messages\":{\"notice\":\"Перед началом, пожалуйста, прочтите <a href=\\\"http://about.travis-ci.org/docs/user/getting-started/\\\">Руководство для быстрого старта</a>. <small>Это займет всего несколько минут.</small>\"},\"token\":\"Токен\",\"update\":\"Обновить\",\"update_locale\":\"Обновить\",\"your_locale\":\"Ваш язык\",\"your_repos\":\"Ваши репозитории\"}},\"queue\":\"Очередь\",\"repositories\":{\"branch\":\"Ветка\",\"commit\":\"Коммит\",\"duration\":\"Длительность\",\"finished_at\":\"Завершен\",\"image_url\":\"URL изображения\",\"markdown\":\"Markdown\",\"message\":\"Комментарий\",\"rdoc\":\"RDOC\",\"started_at\":\"Начало\",\"tabs\":{\"branches\":\"Статус веток\",\"build\":\"Билд\",\"build_history\":\"История\",\"current\":\"Текущий\",\"job\":\"Задача\"},\"textile\":\"Textile\"},\"repository\":{\"duration\":\"Длительность\"},\"statistics\":{\"index\":{\"build_count\":\"Количество билдов\",\"count\":\"Количество\",\"last_month\":\"прошлый месяц\",\"repo_growth\":\"Рост числа репозиториев\",\"total_builds\":\"Всего билдов\",\"total_projects\":\"Всего проектов/репозиториев\"}},\"workers\":\"Машины\",\"locales\":{\"en\":\"English\",\"es\":\"Español\",\"ja\":\"日本語\",\"ru\":\"Русский\",\"fr\":\"Français\",\"nb\":\"Norsk Bokmål\",\"pl\":\"Polski\",\"nl\":\"Nederlands\",\"pt-BR\":\"português brasileiro\"}}};\n\n\n})();\n//@ sourceURL=config/locales");minispade.register('ext/ember/bound_helper', "(function() {// https://gist.github.com/2018185\n// For reference: https://github.com/wagenet/ember.js/blob/ac66dcb8a1cbe91d736074441f853e0da474ee6e/packages/ember-handlebars/lib/views/bound_property_view.js\nvar BoundHelperView = Ember.View.extend(Ember._Metamorph, {\n\n  context: null,\n  options: null,\n  property: null,\n  // paths of the property that are also observed\n  propertyPaths: [],\n\n  value: Ember.K,\n\n  valueForRender: function() {\n    var value = this.value(Ember.get(this.context, this.property), this.options);\n    if (this.options.escaped) { value = Handlebars.Utils.escapeExpression(value); }\n    return value;\n  },\n\n  render: function(buffer) {\n    buffer.push(this.valueForRender());\n  },\n\n  valueDidChange: function() {\n    if (this.morph.isRemoved()) { return; }\n    this.morph.html(this.valueForRender());\n  },\n\n  didInsertElement: function() {\n    this.valueDidChange();\n  },\n\n  init: function() {\n    this._super();\n    Ember.addObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        Ember.addObserver(this.context, this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n  },\n\n  destroy: function() {\n    Ember.removeObserver(this.context, this.property, this, 'valueDidChange');\n    this.get('propertyPaths').forEach(function(propName) {\n        this.context.removeObserver(this.property + '.' + propName, this, 'valueDidChange');\n    }, this);\n    this._super();\n  }\n\n});\n\nEmber.registerBoundHelper = function(name, func) {\n  var propertyPaths = Array.prototype.slice.call(arguments, 2);\n  Ember.Handlebars.registerHelper(name, function(property, options) {\n    var data = options.data,\n        view = data.view,\n        ctx  = this;\n\n    var bindView = view.createChildView(BoundHelperView, {\n      property: property,\n      propertyPaths: propertyPaths,\n      context: ctx,\n      options: options.hash,\n      value: func\n    });\n\n    view.appendChild(bindView);\n  });\n};\n\n\n})();\n//@ sourceURL=ext/ember/bound_helper");minispade.register('ext/ember/namespace', "(function() {Em.Namespace.reopen = Em.Namespace.reopenClass\n\n\n\n})();\n//@ sourceURL=ext/ember/namespace");
\ No newline at end of file
diff --git a/public/version b/public/version
index dfb9fa27..0ed0b4c6 100644
--- a/public/version
+++ b/public/version
@@ -1 +1 @@
-5ee7fd14
\ No newline at end of file
+4804c4eb
\ No newline at end of file