{"version":3,"sources":["vendor/ember-cli/app-prefix.js","dummy/app.js","dummy/controllers/things.js","dummy/ella-sparse-array-controller/tests/modules/ella-sparse-array-controller/controllers/sparse-array.js","dummy/initializers/app-version.js","dummy/initializers/export-application-global.js","dummy/router.js","dummy/routes/index.js","dummy/routes/things.js","dummy/templates/application.js","dummy/templates/index.js","dummy/templates/things.js","dummy/tests/helpers/resolver.js","dummy/tests/helpers/resolver.jshint.js","dummy/tests/helpers/start-app.js","dummy/tests/helpers/start-app.jshint.js","dummy/tests/test-helper.js","dummy/tests/test-helper.jshint.js","vendor/ember-cli/app-suffix.js","vendor/ember-cli/app-boot.js"],"sourcesContent":["/* jshint ignore:start */\n\n/* jshint ignore:end */\n","define('dummy/app', ['exports', 'ember', 'ember/resolver', 'ember/load-initializers', 'dummy/config/environment'], function (exports, Ember, Resolver, loadInitializers, config) {\n\n  'use strict';\n\n  var App;\n\n  Ember['default'].MODEL_FACTORY_INJECTIONS = true;\n\n  App = Ember['default'].Application.extend({\n    modulePrefix: config['default'].modulePrefix,\n    podModulePrefix: config['default'].podModulePrefix,\n    Resolver: Resolver['default']\n  });\n\n  loadInitializers['default'](App, config['default'].modulePrefix);\n\n  exports['default'] = App;\n\n});","define('dummy/controllers/things', ['exports', 'ember', 'ella-sparse-array-controller/controllers/sparse-array'], function (exports, Ember, EmberellaSparseArray) {\n\n  'use strict';\n\n  var ThingsController;\n\n  ThingsController = EmberellaSparseArray['default'].extend({\n    test: 'Hello, World'\n  });\n\n  exports['default'] = ThingsController;\n\n});","define('dummy/ella-sparse-array-controller/tests/modules/ella-sparse-array-controller/controllers/sparse-array', ['exports', 'ember'], function (exports, Ember) {\n\n  'use strict';\n\n  var EmberellaSparseArray,\n      get,\n      set,\n      slice = [].slice;\n\n  get = Ember['default'].get;\n\n  set = Ember['default'].set;\n\n  /*\n  @module emberella\n  @submodule emberella-controllers\n   */\n\n  /*\n    `EmberellaSparseArray` is a variation on an\n    `Ember.ArrayController` that allows content to be lazily loaded from the\n    persistence layer.\n\n    @class EmberellaSparseArray\n    @extends Ember.ArrayProxy\n   */\n\n  EmberellaSparseArray = Ember['default'].ArrayProxy.extend(Ember['default'].ControllerMixin, {\n\n    /*\n      @private\n    \n      Stash a reference to the original content object.\n    \n      @property _content\n      @type {Mixed}\n      @default null\n     */\n    _content: null,\n\n    /*\n      @private\n    \n      Stash the potential total number of items as reported by the\n      persistence layer.\n    \n      @property _length\n      @type {Integer}\n      @default null\n     */\n    _length: null,\n\n    /*\n      @property isSelectable\n      @type Boolean\n      @default true\n      @final\n     */\n    isSparseArrayController: true,\n\n    /*\n      The number of items to fetch together in a single request. Essentially,\n      the \"page size\" of each query.\n    \n      @property rangeSize\n      @type {Integer}\n      @default 1\n     */\n    rangeSize: 1,\n\n    /*\n      Flag to indicate if this controller should attempt to fetch data.\n    \n      @property shouldRequestObjects\n      @type {Boolean}\n      @default true\n     */\n    shouldRequestObjects: true,\n\n    /*\n      Alias to `content` property. Override to customize the behavior of\n      content referencing.\n    \n      @property sparseContent\n     */\n    sparseContent: Ember['default'].computed.alias('content'),\n\n    /*\n      The total number of potential items in the sparse array. If the length is\n      unknown, requesting this property will cause the controller to try to fetch\n      the total length from the persistence layer.\n    \n      @property length\n      @type {Integer}\n      @default 0\n      @readOnly\n     */\n    length: Ember['default'].computed(function () {\n      var ret;\n      ret = get(this, '_length');\n      if (Ember['default'].isEmpty(ret)) {\n        this.requestLength();\n      }\n      return get(this, '_length') || 0;\n    }).property('_length').readOnly(),\n\n    /*\n      True if this controller instance is attempting to fetch its length.\n    \n      @property isRequestingLength\n      @type {Boolean}\n      @default false\n     */\n    isRequestingLength: null,\n\n    /*\n      True if this controller instance is attempting to fetch its length.\n    \n      @property isUpdating\n      @type {Boolean}\n      @default false\n     */\n    isUpdating: Ember['default'].computed(function () {\n      return !!get(this, 'isRequestingLength');\n    }).property('isRequestingLength'),\n    init: function init() {\n      this._TMP_OBJECT = {\n        isSparseArrayItem: true,\n        isStale: true\n      };\n      this._TMP_PROVIDE_ARRAY = [];\n      this._TMP_PROVIDE_RANGE = {\n        length: 1\n      };\n      this._TMP_RANGE = {};\n      return this._super();\n    },\n\n    /*\n      Return the content in array format.\n    \n      @method toArray\n      @return {Array}\n     */\n    toArray: function toArray() {\n      var sparseContent;\n      sparseContent = get(this, 'sparseContent');\n      if (!sparseContent) {\n        return Ember['default'].A();\n      }\n      return sparseContent.toArray();\n    },\n\n    /*\n      Check the content to see if a valid, non-stale object is available at the\n      provided index.\n    \n      @method isObjectAt\n      @param {Integer} idx The index to check for object existence\n      @return {Boolean}\n     */\n    isObjectAt: function isObjectAt(idx) {\n      var result;\n      result = this.objectAt(idx, true);\n      return !!(result && result.isStale !== true);\n    },\n\n    /*\n      Get the data from the specified index.\n    \n      If an object is found at a given index, it will be returned immediately.\n    \n      Otherwise, a \"stale\" placeholder object will be returned and a new remote\n      query to fetch the data for the given index will be created.\n    \n      @method objectAt\n      @param {Integer} idx The index to obtain content for\n      @param {Boolean} dontFetch Won't obtain remote data if `true`\n      @return {Object}\n     */\n    objectAt: function objectAt(idx, dontFetch) {\n      var ref, result;\n      idx = parseInt(idx, 10);\n      if (isNaN(idx) || idx < 0 || idx >= get(this, 'length')) {\n        return void 0;\n      }\n      result = (ref = this._super(idx)) != null ? ref : this.insertSparseArrayItem(idx);\n      if (result && result.isStale !== true) {\n        return result;\n      }\n      return this.requestObjectAt(idx, dontFetch);\n    },\n\n    /*\n      Fetches data at the specified index. If `rangeSize` is greater than 1, this\n      method will also retrieve adjacent items to form a \"page\" of results.\n    \n      @method requestObjectAt\n      @param {Integer} idx The index to fetch content for\n      @param {Boolean} dontFetch Won't obtain remote data if `true`\n      @return {Object|Null} A placeholder object or null if content is empty\n     */\n    requestObjectAt: function requestObjectAt(idx, dontFetch) {\n      var content, i, j, k, placeholders, range, rangeSize, ref, ref1, ref2, results, start;\n      if (dontFetch == null) {\n        dontFetch = !get(this, 'shouldRequestObjects');\n      }\n      if (dontFetch) {\n        return (ref = get(this, 'sparseContent')[idx]) != null ? ref : this.insertSparseArrayItem(idx);\n      }\n      content = get(this, 'content');\n      rangeSize = parseInt(get(this, 'rangeSize'), 10) || 1;\n      if (content == null) {\n        return null;\n      }\n      start = Math.floor(idx / rangeSize) * rangeSize;\n      start = Math.max(start, 0);\n      placeholders = Math.min(start + rangeSize, get(this, 'length'));\n      this.insertSparseArrayItems((function () {\n        results = [];\n        for (var j = start; start <= placeholders ? j < placeholders : j > placeholders; start <= placeholders ? j++ : j--) {\n          results.push(j);\n        }\n        return results;\n      }).apply(this));\n      if (this.didRequestRange !== Ember['default'].K) {\n        range = this._TMP_RANGE;\n        range.start = start;\n        range.length = rangeSize;\n        this._didRequestRange(range);\n      } else {\n        for (i = k = ref1 = start, ref2 = rangeSize; ref1 <= ref2 ? k < ref2 : k > ref2; i = ref1 <= ref2 ? ++k : --k) {\n          this._didRequestIndex(i);\n        }\n      }\n      return get(this, 'sparseContent')[idx];\n    },\n\n    /*\n      Fetches data regarding the total number of objects in the\n      persistence layer.\n    \n      @method requestLength\n      @return {Integer} The current known length\n     */\n    requestLength: function requestLength() {\n      var len;\n      len = get(this, '_length');\n      if (!(this.didRequestLength === Ember['default'].K || get(this, 'isRequestingLength'))) {\n        set(this, 'isRequestingLength', true);\n        this._didRequestLength();\n        return len;\n      }\n      return get(this, '_content.length');\n    },\n\n    /*\n      Empty the sparse array.\n    \n      @method reset\n      @chainable\n     */\n    reset: function reset() {\n      var len;\n      this.beginPropertyChanges();\n      len = get(this, '_length');\n      this._clearSparseContent();\n      set(this, '_length', len);\n      this.endPropertyChanges();\n      return this;\n    },\n\n    /*\n      Uncache the item at the specified index.\n    \n      @method unset\n      @param {Integer} idx The index to unset\n      @chainable\n     */\n    unset: function unset(idx) {\n      var sparseContent;\n      if (idx == null) {\n        return this;\n      }\n      sparseContent = get(this, 'sparseContent');\n      sparseContent[idx] = void 0;\n      return this;\n    },\n\n    /*\n      Remove the item at the specified index.\n    \n      @method removeObject\n      @param {Mixed} obj The object to remove from the content\n      @chainable\n     */\n    removeObject: function removeObject(obj) {\n      var shouldRequestObjects;\n      shouldRequestObjects = get(this, 'shouldRequestObjects');\n      this.disableRequests();\n      this._super(obj);\n      if (shouldRequestObjects) {\n        this.enableRequests();\n      }\n      return this;\n    },\n\n    /*\n      Enable data fetching.\n    \n      @method enableRequests\n      @chainable\n     */\n    enableRequests: function enableRequests() {\n      set(this, 'shouldRequestObjects', true);\n      return this;\n    },\n\n    /*\n      Disable data fetching.\n    \n      @method disableRequests\n      @chainable\n     */\n    disableRequests: function disableRequests() {\n      set(this, 'shouldRequestObjects', false);\n      return this;\n    },\n\n    /*\n      Insert a placeholder object at the specified index.\n    \n      @method insertSparseArrayItem\n      @param {Integer} idx Where to inject a placeholder\n      @param {Boolean} force If true, placeholder replaces existing content\n      @return {Object}\n     */\n    insertSparseArrayItem: function insertSparseArrayItem(idx, force) {\n      var proxy, sparseContent;\n      if (force == null) {\n        force = false;\n      }\n      sparseContent = get(this, 'sparseContent');\n      proxy = Ember['default'].copy(this._TMP_OBJECT);\n      proxy.contentIndex = idx;\n      if (force || sparseContent[idx] == null) {\n        sparseContent[idx] = proxy;\n      }\n      return sparseContent[idx];\n    },\n\n    /*\n      Insert placeholder objects at the specified indexes.\n    \n      @method insertSparseArrayItems\n      @param {Integer|Array} idx Multiple indexes\n      @chainable\n     */\n    insertSparseArrayItems: function insertSparseArrayItems() {\n      var i, idx, j, len1, ref;\n      idx = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n      ref = [].concat.apply([], idx);\n      for (j = 0, len1 = ref.length; j < len1; j++) {\n        i = ref[j];\n        this.insertSparseArrayItem(i);\n      }\n      return this;\n    },\n\n    /*\n      Async callback to provide total number of objects available to this\n      controller stored in the persistence layer.\n    \n      @method provideLength\n      @param {Integer} length The total number of available objects\n      @chainable\n     */\n    provideLength: function provideLength(length) {\n      set(this, '_length', length);\n      set(this, 'isRequestingLength', false);\n      return this;\n    },\n\n    /*\n      Async callback to provide objects in a specific range.\n    \n      @method provideObjectsInRange\n      @param {Object} [range] A range object\n        @param {Integer} [range.start]\n          The index at which objects should be inserted into the content array\n        @param {Integer} [range.length]\n          The number of items to replace with the updated data\n      @param {Array} array The data to inject into the sparse array\n      @chainable\n     */\n    provideObjectsInRange: function provideObjectsInRange(range, array) {\n      var sparseContent;\n      sparseContent = get(this, 'sparseContent');\n      sparseContent.replace(range.start, range.length, array);\n      return this;\n    },\n\n    /*\n      Async callback to provide an object at a specific index.\n    \n      Ultimately, this method calls `provideObjectsInRange`. Override\n      `provideObjectsInRange` to inject custom behavior.\n    \n      @method provideObjectAtIndex\n      @param {Integer} idx The index to insert data at\n      @param {Object} obj The object to insert\n      @chainable\n     */\n    provideObjectAtIndex: function provideObjectAtIndex(idx, obj) {\n      var array, range;\n      array = this._TMP_PROVIDE_ARRAY;\n      range = this._TMP_PROVIDE_RANGE;\n      array[0] = obj;\n      range.start = idx;\n      return this.provideObjectsInRange(range, array);\n    },\n\n    /*\n      Hook for responding to impending updates to the content array. Override to\n      add custom handling for array updates.\n    \n      @method contentArrayWillChange\n      @param {Array} array The array instance being updated\n      @param {Integer} idx The index where changes applied\n      @param {Integer} removedCount\n      @param {Integer} addedCount\n     */\n    contentArrayWillChange: function contentArrayWillChange(array, idx, removedCount, addedCount) {\n      return this;\n    },\n\n    /*\n      Hook for responding to updates to the content array. Override to\n      add custom handling for array updates.\n    \n      @method contentArrayWillChange\n      @param {Array} array The array instance being updated\n      @param {Integer} idx The index where changes applied\n      @param {Integer} removedCount\n      @param {Integer} addedCount\n     */\n    contentArrayDidChange: function contentArrayDidChange(array, idx, removedCount, addedCount) {\n      return this;\n    },\n\n    /*\n      @private\n    \n      Override Ember's `_contentWillChange` to observe `_content`.\n    \n      @method _contentWillChange\n     */\n    _contentWillChange: Ember['default'].beforeObserver(function () {\n      return this._super();\n    }, '_content'),\n\n    /*\n      @private\n    \n      Override Ember's `_contentDidChange` to observe `_content` and `content`.\n    \n      @method _contentDidChange\n     */\n    _contentDidChange: Ember['default'].observer(function () {\n      return this._super();\n    }, 'content', '_content'),\n\n    /*\n      @private\n    \n      Move any array set to the `content` property to the `_content` property.\n    \n      This allows `content` to be used for referencing the sparse array while\n      retaining a reference to the originally provided content object.\n    \n      @method _setupContent\n      @return {Array} The sparse array\n     */\n    _setupContent: function _setupContent() {\n      var _content, controller, ref, sparseContent;\n      controller = this;\n      _content = get(controller, 'content');\n      if (_content && _content.isSparseArray) {\n        return;\n      }\n      if (_content) {\n        _content.addArrayObserver(controller, {\n          willChange: 'contentArrayWillChange',\n          didChange: 'contentArrayDidChange'\n        });\n      }\n      sparseContent = Ember['default'].A((ref = _content && _content.slice()) != null ? ref : []);\n      sparseContent.isSparseArray = true;\n      set(controller, '_content', _content);\n      set(controller, 'sparseContent', sparseContent);\n      return sparseContent;\n    },\n\n    /*\n      @private\n    \n      Remove observers from `_content`.\n    \n      @method _teardownContent\n      @return null\n     */\n    _teardownContent: function _teardownContent() {\n      var _content, controller;\n      controller = this;\n      _content = get(controller, '_content');\n      if (_content) {\n        _content.removeArrayObserver(controller, {\n          willChange: 'contentArrayWillChange',\n          didChange: 'contentArrayDidChange'\n        });\n      }\n      return null;\n    },\n\n    /*\n      @private\n    \n      Set reported length to `content.total` if it changes.\n    \n      @method _contentTotalChanged\n      @chainable\n     */\n    _contentTotalChanged: Ember['default'].observer(function () {\n      set(this, '_length', get(this, 'content.total'));\n      return this;\n    }, 'content.total'),\n\n    /*\n      Hook for responding to the sparse array being replaced with a new\n      array instance. Override to add custom handling.\n    \n      @method sparseContentWillChange\n      @param {Object} self\n     */\n    sparseContentWillChange: Ember['default'].K,\n\n    /*\n      Hook for responding to the sparse array being replaced with a new\n      array instance. Override to add custom handling.\n    \n      @method sparseContentDidChange\n      @param {Object} self\n     */\n    sparseContentDidChange: Ember['default'].K,\n\n    /*\n      Hook for injecting custom behavior when an item in the sparse array gets\n      replaced with new data.\n    \n      @method sparseContentDidChange\n      @param {Object} item The previous value\n      @param {Object} addedObject The new value\n     */\n    didReplaceSparseArrayItem: Ember['default'].K,\n\n    /*\n      Hook for responding to impending updates to the sparse array. Extend to\n      add custom handling for array updates.\n    \n      @method sparseContentArrayWillChange\n      @param {Array} array The array instance being updated\n      @param {Integer} idx The index where changes applied\n      @param {Integer} removedCount\n      @param {Integer} addedCount\n     */\n    sparseContentArrayWillChange: function sparseContentArrayWillChange(array, idx, removedCount, addedCount) {\n      this._PREVIOUS_SPARSE_CONTENT = array.slice(idx, idx + removedCount);\n      return this;\n    },\n\n    /*\n      Hook for responding to updates to the sparse array. Extend to\n      add custom handling for array updates.\n    \n      @method sparseContentArrayDidChange\n      @param {Array} array The array instance being updated\n      @param {Integer} idx The index where changes applied\n      @param {Integer} removedCount\n      @param {Integer} addedCount\n     */\n    sparseContentArrayDidChange: function sparseContentArrayDidChange(array, idx, removedCount, addedCount) {\n      var addedObjects, delta, i, item, j, len1, ref, removedObjects;\n      removedObjects = (ref = this._PREVIOUS_SPARSE_CONTENT) != null ? ref : Ember['default'].A();\n      addedObjects = array.slice(idx, idx + addedCount);\n      delta = ((addedObjects != null ? addedObjects.length : void 0) || 0) - ((removedObjects != null ? removedObjects.length : void 0) || 0);\n      set(this, '_length', get(this, '_length') + delta);\n      for (i = j = 0, len1 = removedObjects.length; j < len1; i = ++j) {\n        item = removedObjects[i];\n        if (item && item.isSparseArrayItem) {\n          this.didReplaceSparseArrayItem(item, addedObjects[i]);\n        }\n      }\n      this._PREVIOUS_SPARSE_CONTENT = null;\n      return this;\n    },\n\n    /*\n      @private\n    \n      Sparse array change handler.\n    \n      @method _sparseContentWillChange\n     */\n    _sparseContentWillChange: Ember['default'].beforeObserver(function () {\n      var len, sparseContent;\n      sparseContent = get(this, 'sparseContent');\n      len = sparseContent ? get(sparseContent, 'length') : 0;\n      this.sparseContentArrayWillChange(this, 0, len, void 0);\n      this.sparseContentWillChange(this);\n      return this._teardownSparseContent(sparseContent);\n    }, 'sparseContent'),\n\n    /*\n      @private\n    \n      Sparse array change handler.\n    \n      @method _sparseContentDidChange\n     */\n    _sparseContentDidChange: Ember['default'].observer(function () {\n      var len, sparseContent;\n      sparseContent = get(this, 'sparseContent');\n      len = sparseContent ? get(sparseContent, 'length') : 0;\n      this._setupSparseContent(sparseContent);\n      this.sparseContentDidChange(this);\n      return this.sparseContentArrayDidChange(this, 0, void 0, len);\n    }, 'sparseContent'),\n\n    /*\n      @private\n    \n      Remove change observing on sparse array.\n    \n      @method _teardownSparseContent\n     */\n    _teardownSparseContent: function _teardownSparseContent() {\n      var sparseContent;\n      this._clearSparseContent();\n      sparseContent = get(this, 'sparseContent');\n      if (sparseContent) {\n        return sparseContent.removeArrayObserver(this, {\n          willChange: 'sparseContentArrayWillChange',\n          didChange: 'sparseContentArrayDidChange'\n        });\n      }\n    },\n\n    /*\n      @private\n    \n      Add change observing on sparse array.\n    \n      @method _setupSparseContent\n     */\n    _setupSparseContent: function _setupSparseContent() {\n      var sparseContent;\n      sparseContent = get(this, 'sparseContent');\n      if (sparseContent) {\n        sparseContent.addArrayObserver(this, {\n          willChange: 'sparseContentArrayWillChange',\n          didChange: 'sparseContentArrayDidChange'\n        });\n      }\n      return this._lengthDidChange();\n    },\n\n    /*\n      @private\n    \n      Set the sparse array's length to the controller's length.\n    \n      @method _lengthDidChange\n     */\n    _lengthDidChange: Ember['default'].observer(function () {\n      var length, ref, sparseContent;\n      length = (ref = get(this, 'length')) != null ? ref : 0;\n      sparseContent = get(this, 'sparseContent');\n      if (Ember['default'].isArray(sparseContent) && sparseContent.isSparseArray && sparseContent.length !== length) {\n        return sparseContent.length = length;\n      }\n    }, 'length'),\n\n    /*\n      @private\n    \n      Empty the sparse array.\n    \n      @method _clearSparseContent\n     */\n    _clearSparseContent: function _clearSparseContent() {\n      var sparseContent;\n      sparseContent = get(this, 'sparseContent');\n      if (sparseContent && sparseContent.isSparseArray) {\n        sparseContent.clear();\n      }\n      return this;\n    },\n\n    /*\n      Called before controller destruction.\n    \n      @method willDestroy\n     */\n    willDestroy: function willDestroy() {\n      this._super();\n      return this._teardownSparseContent();\n    },\n\n    /*\n      Hook for single object requests. Override this method to enable this\n      controller to obtain a single persisted object.\n    \n      If the request is successful, insert the fetched object into the sparse\n      array using the `provideObjectAtIndex` method.\n    \n      @method didRequestIndex\n      @param {Integer} idx\n     */\n    didRequestIndex: Ember['default'].K,\n\n    /*\n      Hook for range requests. Override this method to enable this controller\n      to obtain a page of persisted data.\n    \n      If the request is successful, insert the fetched objects into the sparse\n      array using the `provideObjectsInRange` method.\n    \n      @method didRequestRange\n      @param {Object} [range] A range object\n        @param {Integer} [range.start]\n          The index to fetch\n        @param {Integer} [range.length]\n          The number of items to fetch\n     */\n    didRequestRange: Ember['default'].K,\n\n    /*\n      Hook for initiating requests for the total number of objects available to\n      this controller in the persistence layer. Override this method to enable\n      this controller to obtain its length.\n    \n      If the request is successful, set the length of this sparse array\n      controller using the `provideLength` method.\n    \n      @method didRequestLength\n     */\n    didRequestLength: Ember['default'].K,\n\n    /*\n      @private\n    \n      Prevents the controller from continuously attempting to fetch data for\n      objects that are already in the process of being fetched.\n    \n      @method _markSparseArrayItemInProgress\n      @param {Integer} idx The index of the object to place into a loading state\n     */\n    _markSparseArrayItemInProgress: function _markSparseArrayItemInProgress(idx) {\n      var item, sparseContent;\n      sparseContent = get(this, 'sparseContent');\n      if (!(sparseContent && Ember['default'].typeOf(sparseContent === 'array'))) {\n        return;\n      }\n      item = sparseContent[idx];\n      if (item && item.isStale) {\n        item.isStale = false;\n      }\n      return item;\n    },\n\n    /*\n      @private\n    \n      Prepare to fetch a page of data from the persistence layer.\n    \n      @method _didRequestRange\n      @param {Object} [range] A range object\n        @param {Integer} [range.start]\n          The index to fetch\n        @param {Integer} [range.length]\n          The number of items to fetch\n     */\n    _didRequestRange: function _didRequestRange(range) {\n      var idx, j, ref, ref1;\n      for (idx = j = ref = range.start, ref1 = range.start + range.length; ref <= ref1 ? j < ref1 : j > ref1; idx = ref <= ref1 ? ++j : --j) {\n        this._markSparseArrayItemInProgress(idx);\n      }\n      return this.didRequestRange(range);\n    },\n\n    /*\n      @private\n    \n      Prepare to fetch a single object from the persistence layer.\n    \n      @method _didRequestIndex\n      @param {Integer} idx\n     */\n    _didRequestIndex: function _didRequestIndex(idx) {\n      this._markSparseArrayItemInProgress(idx);\n      return this.didRequestIndex(idx);\n    },\n\n    /*\n      @private\n    \n      Prepare to fetch the total number of available objects from the\n      persistence layer.\n    \n      @method _didRequestLength\n     */\n    _didRequestLength: function _didRequestLength() {\n      return this.didRequestLength();\n    }\n  });\n\n  exports['default'] = EmberellaSparseArray;\n\n});","define('dummy/initializers/app-version', ['exports', 'dummy/config/environment', 'ember'], function (exports, config, Ember) {\n\n  'use strict';\n\n  var classify = Ember['default'].String.classify;\n  var registered = false;\n\n  exports['default'] = {\n    name: 'App Version',\n    initialize: function initialize(container, application) {\n      if (!registered) {\n        var appName = classify(application.toString());\n        Ember['default'].libraries.register(appName, config['default'].APP.version);\n        registered = true;\n      }\n    }\n  };\n\n});","define('dummy/initializers/export-application-global', ['exports', 'ember', 'dummy/config/environment'], function (exports, Ember, config) {\n\n  'use strict';\n\n  exports.initialize = initialize;\n\n  function initialize(container, application) {\n    var classifiedName = Ember['default'].String.classify(config['default'].modulePrefix);\n\n    if (config['default'].exportApplicationGlobal && !window[classifiedName]) {\n      window[classifiedName] = application;\n    }\n  }\n\n  ;\n\n  exports['default'] = {\n    name: 'export-application-global',\n\n    initialize: initialize\n  };\n\n});","define('dummy/router', ['exports', 'ember', 'dummy/config/environment'], function (exports, Ember, config) {\n\n  'use strict';\n\n  var Router;\n\n  Router = Ember['default'].Router.extend({\n    location: config['default'].locationType\n  });\n\n  Router.map(function () {\n    this.route('index', {\n      path: '/'\n    });\n    return this.route('things');\n  });\n\n  exports['default'] = Router;\n\n});","define('dummy/routes/index', ['exports', 'ember'], function (exports, Ember) {\n\n  'use strict';\n\n  var IndexRoute;\n\n  IndexRoute = Ember['default'].Route.extend({\n    redirect: function redirect() {\n      return this.transitionTo('things');\n    }\n  });\n\n  exports['default'] = IndexRoute;\n\n});","define('dummy/routes/things', ['exports', 'ember'], function (exports, Ember) {\n\n  'use strict';\n\n  var ThingsRoute;\n\n  ThingsRoute = Ember['default'].Route.extend({\n    setupController: function setupController(controller, model) {\n      return controller.set('errorMessage', null);\n    }\n  });\n\n  exports['default'] = ThingsRoute;\n\n});","define('dummy/templates/application', ['exports'], function (exports) {\n\n  'use strict';\n\n  exports['default'] = Ember.HTMLBars.template((function() {\n    return {\n      isHTMLBars: true,\n      revision: \"Ember@1.11.1\",\n      blockParams: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      build: function build(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createElement(\"h2\");\n        dom.setAttribute(el1,\"id\",\"title\");\n        var el2 = dom.createTextNode(\"Welcome to Ember.js\");\n        dom.appendChild(el1, el2);\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\\n\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      render: function render(context, env, contextualElement) {\n        var dom = env.dom;\n        var hooks = env.hooks, content = hooks.content;\n        dom.detectNamespace(contextualElement);\n        var fragment;\n        if (env.useFragmentCache && dom.canClone) {\n          if (this.cachedFragment === null) {\n            fragment = this.build(dom);\n            if (this.hasRendered) {\n              this.cachedFragment = fragment;\n            } else {\n              this.hasRendered = true;\n            }\n          }\n          if (this.cachedFragment) {\n            fragment = dom.cloneNode(this.cachedFragment, true);\n          }\n        } else {\n          fragment = this.build(dom);\n        }\n        var morph0 = dom.createMorphAt(fragment,2,2,contextualElement);\n        content(env, morph0, context, \"outlet\");\n        return fragment;\n      }\n    };\n  }()));\n\n});","define('dummy/templates/index', ['exports'], function (exports) {\n\n  'use strict';\n\n  exports['default'] = Ember.HTMLBars.template((function() {\n    return {\n      isHTMLBars: true,\n      revision: \"Ember@1.11.1\",\n      blockParams: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      build: function build(dom) {\n        var el0 = dom.createDocumentFragment();\n        return el0;\n      },\n      render: function render(context, env, contextualElement) {\n        var dom = env.dom;\n        dom.detectNamespace(contextualElement);\n        var fragment;\n        if (env.useFragmentCache && dom.canClone) {\n          if (this.cachedFragment === null) {\n            fragment = this.build(dom);\n            if (this.hasRendered) {\n              this.cachedFragment = fragment;\n            } else {\n              this.hasRendered = true;\n            }\n          }\n          if (this.cachedFragment) {\n            fragment = dom.cloneNode(this.cachedFragment, true);\n          }\n        } else {\n          fragment = this.build(dom);\n        }\n        return fragment;\n      }\n    };\n  }()));\n\n});","define('dummy/templates/things', ['exports'], function (exports) {\n\n  'use strict';\n\n  exports['default'] = Ember.HTMLBars.template((function() {\n    return {\n      isHTMLBars: true,\n      revision: \"Ember@1.11.1\",\n      blockParams: 0,\n      cachedFragment: null,\n      hasRendered: false,\n      build: function build(dom) {\n        var el0 = dom.createDocumentFragment();\n        var el1 = dom.createComment(\"\");\n        dom.appendChild(el0, el1);\n        var el1 = dom.createTextNode(\"\\n\");\n        dom.appendChild(el0, el1);\n        return el0;\n      },\n      render: function render(context, env, contextualElement) {\n        var dom = env.dom;\n        var hooks = env.hooks, content = hooks.content;\n        dom.detectNamespace(contextualElement);\n        var fragment;\n        if (env.useFragmentCache && dom.canClone) {\n          if (this.cachedFragment === null) {\n            fragment = this.build(dom);\n            if (this.hasRendered) {\n              this.cachedFragment = fragment;\n            } else {\n              this.hasRendered = true;\n            }\n          }\n          if (this.cachedFragment) {\n            fragment = dom.cloneNode(this.cachedFragment, true);\n          }\n        } else {\n          fragment = this.build(dom);\n        }\n        var morph0 = dom.createMorphAt(fragment,0,0,contextualElement);\n        dom.insertBoundary(fragment, 0);\n        content(env, morph0, context, \"test\");\n        return fragment;\n      }\n    };\n  }()));\n\n});","define('dummy/tests/helpers/resolver', ['exports', 'ember/resolver', 'dummy/config/environment'], function (exports, Resolver, config) {\n\n  'use strict';\n\n  var resolver = Resolver['default'].create();\n\n  resolver.namespace = {\n    modulePrefix: config['default'].modulePrefix,\n    podModulePrefix: config['default'].podModulePrefix\n  };\n\n  exports['default'] = resolver;\n\n});","define('dummy/tests/helpers/resolver.jshint', function () {\n\n  'use strict';\n\n  module('JSHint - helpers');\n  test('helpers/resolver.js should pass jshint', function() { \n    ok(true, 'helpers/resolver.js should pass jshint.'); \n  });\n\n});","define('dummy/tests/helpers/start-app', ['exports', 'ember', 'dummy/app', 'dummy/router', 'dummy/config/environment'], function (exports, Ember, Application, Router, config) {\n\n  'use strict';\n\n\n\n  exports['default'] = startApp;\n  function startApp(attrs) {\n    var application;\n\n    var attributes = Ember['default'].merge({}, config['default'].APP);\n    attributes = Ember['default'].merge(attributes, attrs); // use defaults, but you can override;\n\n    Ember['default'].run(function () {\n      application = Application['default'].create(attributes);\n      application.setupForTesting();\n      application.injectTestHelpers();\n    });\n\n    return application;\n  }\n\n});","define('dummy/tests/helpers/start-app.jshint', function () {\n\n  'use strict';\n\n  module('JSHint - helpers');\n  test('helpers/start-app.js should pass jshint', function() { \n    ok(true, 'helpers/start-app.js should pass jshint.'); \n  });\n\n});","define('dummy/tests/test-helper', ['dummy/tests/helpers/resolver', 'ember-qunit'], function (resolver, ember_qunit) {\n\n\t'use strict';\n\n\tember_qunit.setResolver(resolver['default']);\n\n});","define('dummy/tests/test-helper.jshint', function () {\n\n  'use strict';\n\n  module('JSHint - .');\n  test('test-helper.js should pass jshint', function() { \n    ok(true, 'test-helper.js should pass jshint.'); \n  });\n\n});","/* jshint ignore:start */\n\n/* jshint ignore:end */\n","/* jshint ignore:start */\n\ndefine('dummy/config/environment', ['ember'], function(Ember) {\n  var prefix = 'dummy';\n/* jshint ignore:start */\n\ntry {\n  var metaName = prefix + '/config/environment';\n  var rawConfig = Ember['default'].$('meta[name=\"' + metaName + '\"]').attr('content');\n  var config = JSON.parse(unescape(rawConfig));\n\n  return { 'default': config };\n}\ncatch(err) {\n  throw new Error('Could not read config from meta tag with name \"' + metaName + '\".');\n}\n\n/* jshint ignore:end */\n\n});\n\nif (runningTests) {\n  require(\"dummy/tests/test-helper\");\n} else {\n  require(\"dummy/app\")[\"default\"].create({\"name\":\"ella-sparse-array-controller\",\"version\":\"0.0.3.5e038ebd\"});\n}\n\n/* jshint ignore:end */\n"],"names":[],"mappings":"AAAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3zBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;","file":"dummy.js"}