tag');\n this.assertElement(this.firstChild, { tagName: 'div', content: '' });\n };\n\n _class5.prototype.assertContent = function (content) {\n this.assert.strictEqual(this.nodesCount, 1, 'It should render exactly one
tag');\n this.assertElement(this.firstChild, {\n tagName: 'div',\n attrs: { 'data-foo': content },\n content: ''\n });\n };\n\n return _class5;\n }(DynamicContentTest));\n\n var TrustedContentTest = function (_DynamicContentTest5) {\n (0, _emberBabel.inherits)(TrustedContentTest, _DynamicContentTest5);\n\n function TrustedContentTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _DynamicContentTest5.apply(this, arguments));\n }\n\n TrustedContentTest.prototype.assertIsEmpty = function () {\n this.assert.strictEqual(this.firstChild, null);\n };\n\n TrustedContentTest.prototype.assertContent = function (content) {\n this.assertHTML(content);\n };\n\n TrustedContentTest.prototype.assertStableRerender = function () {\n var _this28 = this;\n\n this.takeSnapshot();\n this.runTask(function () {\n return _this28.rerender();\n });\n _DynamicContentTest5.prototype.assertInvariants.call(this);\n };\n\n TrustedContentTest.prototype.assertInvariants = function () {\n // If it's not stable, we will wipe out all the content and replace them,\n // so there are no invariants\n };\n\n return TrustedContentTest;\n }(DynamicContentTest);\n\n (0, _testCase.moduleFor)('Dynamic content tests (trusted)', function (_TrustedContentTest) {\n (0, _emberBabel.inherits)(_class6, _TrustedContentTest);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TrustedContentTest.apply(this, arguments));\n }\n\n _class6.prototype.renderPath = function (path) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n this.render('{{{' + path + '}}}', context);\n };\n\n _class6.prototype['@test updating trusted curlies'] = function () {\n var _this30 = this;\n\n this.render('{{{htmlContent}}}{{{nested.htmlContent}}}', {\n htmlContent: '
Max ',\n nested: { htmlContent: '
James ' }\n });\n\n this.assertContent('
Max James ');\n\n this.runTask(function () {\n return _this30.rerender();\n });\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this30.context, 'htmlContent', '
M a x ');\n });\n\n this.assertContent('
M a x James ');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this30.context, 'nested.htmlContent', 'Jammie');\n });\n\n this.assertContent('
M a x Jammie');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this30.context, 'htmlContent', '
Max ');\n (0, _emberMetal.set)(_this30.context, 'nested', { htmlContent: '
James ' });\n });\n\n this.assertContent('
Max James ');\n };\n\n _class6.prototype['@test empty content in trusted curlies [GH#14978]'] = function () {\n var _this31 = this;\n\n this.render('before {{{value}}} after', {\n value: 'hello'\n });\n\n this.assertContent('before hello after');\n\n this.runTask(function () {\n return _this31.rerender();\n });\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', undefined);\n });\n\n this.assertContent('before after');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', 'hello');\n });\n\n this.assertContent('before hello after');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', null);\n });\n\n this.assertContent('before after');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', 'hello');\n });\n\n this.assertContent('before hello after');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', '');\n });\n\n this.assertContent('before after');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', 'hello');\n });\n\n this.assertContent('before hello after');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', (0, _helpers.htmlSafe)(''));\n });\n\n this.assertContent('before after');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'value', 'hello');\n });\n\n this.assertContent('before hello after');\n };\n\n return _class6;\n }(TrustedContentTest));\n\n (0, _testCase.moduleFor)('Dynamic content tests (integration)', function (_RenderingTest3) {\n (0, _emberBabel.inherits)(_class7, _RenderingTest3);\n\n function _class7() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest3.apply(this, arguments));\n }\n\n _class7.prototype['@test it can render a dynamic template'] = function () {\n var _this33 = this;\n\n var ember = '\\n \\n
\\n
Why you should use Ember.js? \\n
\\n It\\'s great \\n It\\'s awesome \\n It\\'s Ember.js \\n \\n
\\n \\n ';\n\n this.render('\\n \\n
\\n
Why you should use {{framework}}? \\n
\\n It\\'s great \\n It\\'s awesome \\n It\\'s {{framework}} \\n \\n
\\n \\n ', {\n framework: 'Ember.js'\n });\n this.assertHTML(ember);\n\n this.runTask(function () {\n return _this33.rerender();\n });\n\n this.assertHTML(ember);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this33.context, 'framework', 'React');\n });\n\n this.assertHTML('\\n \\n
\\n
Why you should use React? \\n
\\n It\\'s great \\n It\\'s awesome \\n It\\'s React \\n \\n
\\n \\n ');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this33.context, 'framework', 'Ember.js');\n });\n\n this.assertHTML(ember);\n };\n\n _class7.prototype['@test it should evaluate to nothing if part of the path is `undefined`'] = function () {\n var _this34 = this;\n\n this.render('{{foo.bar.baz.bizz}}', {\n foo: {}\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return _this34.rerender();\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this34.context, 'foo', {\n bar: { baz: { bizz: 'Hey!' } }\n });\n });\n\n this.assertText('Hey!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this34.context, 'foo', {});\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this34.context, 'foo', {\n bar: { baz: { bizz: 'Hello!' } }\n });\n });\n\n this.assertText('Hello!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this34.context, 'foo', {});\n });\n\n this.assertText('');\n };\n\n _class7.prototype['@test it should evaluate to nothing if part of the path is a primative'] = function () {\n var _this35 = this;\n\n this.render('{{foo.bar.baz.bizz}}', {\n foo: { bar: true }\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return _this35.rerender();\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this35.context, 'foo', {\n bar: false\n });\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this35.context, 'foo', {\n bar: 'Haha'\n });\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this35.context, 'foo', {\n bar: null\n });\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this35.context, 'foo', {\n bar: undefined\n });\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this35.context, 'foo', {\n bar: 1\n });\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this35.context, 'foo', {\n bar: { baz: { bizz: 'Hello!' } }\n });\n });\n\n this.assertText('Hello!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this35.context, 'foo', {\n bar: true\n });\n });\n\n this.assertText('');\n };\n\n _class7.prototype['@test can set dynamic href'] = function () {\n var _this36 = this;\n\n this.render('
Example ', {\n model: {\n url: 'http://example.com'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'a',\n content: 'Example',\n attrs: { href: 'http://example.com' }\n });\n\n this.runTask(function () {\n return _this36.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'a',\n content: 'Example',\n attrs: { href: 'http://example.com' }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this36.context, 'model.url', 'http://linkedin.com');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'a',\n content: 'Example',\n attrs: { href: 'http://linkedin.com' }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this36.context, 'model', { url: 'http://example.com' });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'a',\n content: 'Example',\n attrs: { href: 'http://example.com' }\n });\n };\n\n _class7.prototype['@test quoteless class attributes update correctly'] = function () {\n var _this37 = this;\n\n this.render('
hello
', {\n fooBar: true\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo-bar') }\n });\n\n this.runTask(function () {\n return _this37.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo-bar') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this37.context, 'fooBar', false);\n });\n\n this.assertElement(this.firstChild, { tagName: 'div', content: 'hello' });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this37.context, 'fooBar', true);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo-bar') }\n });\n };\n\n _class7.prototype['@test quoted class attributes update correctly'] = function (assert) {\n var _this38 = this;\n\n this.render('
hello
', {\n fooBar: true\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo-bar') }\n });\n\n this.runTask(function () {\n return _this38.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo-bar') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this38.context, 'fooBar', false);\n });\n\n assert.equal(this.firstChild.className, '');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this38.context, 'fooBar', true);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo-bar') }\n });\n };\n\n _class7.prototype['@test unquoted class attribute can contain multiple classes'] = function () {\n var _this39 = this;\n\n this.render('
hello
', {\n model: {\n classes: 'foo bar baz'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar baz') }\n });\n\n this.runTask(function () {\n return _this39.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar baz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this39.context, 'model.classes', 'fizz bizz');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('fizz bizz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this39.context, 'model', { classes: 'foo bar baz' });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar baz') }\n });\n };\n\n _class7.prototype['@test unquoted class attribute'] = function () {\n var _this40 = this;\n\n this.render('
hello
', {\n model: {\n foo: 'foo'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo') }\n });\n\n this.runTask(function () {\n return _this40.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this40.context, 'model.foo', 'fizz');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('fizz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this40.context, 'model', { foo: 'foo' });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo') }\n });\n };\n\n _class7.prototype['@test quoted class attribute'] = function () {\n var _this41 = this;\n\n this.render('
hello
', {\n model: {\n foo: 'foo'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo') }\n });\n\n this.runTask(function () {\n return _this41.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this41.context, 'model.foo', 'fizz');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('fizz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this41.context, 'model', { foo: 'foo' });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo') }\n });\n };\n\n _class7.prototype['@test quoted class attribute can contain multiple classes'] = function () {\n var _this42 = this;\n\n this.render('
hello
', {\n model: {\n classes: 'foo bar baz'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar baz') }\n });\n\n this.runTask(function () {\n return _this42.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar baz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this42.context, 'model.classes', 'fizz bizz');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('fizz bizz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this42.context, 'model', { classes: 'foo bar baz' });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar baz') }\n });\n };\n\n _class7.prototype['@test class attribute concats bound values'] = function () {\n var _this43 = this;\n\n this.render('
hello
', {\n model: {\n foo: 'foo',\n bar: 'bar',\n bizz: 'bizz'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar bizz') }\n });\n\n this.runTask(function () {\n return _this43.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar bizz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this43.context, 'model.foo', 'fizz');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('fizz bar bizz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this43.context, 'model.bar', null);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('fizz bizz') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this43.context, 'model', {\n foo: 'foo',\n bar: 'bar',\n bizz: 'bizz'\n });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar bizz') }\n });\n };\n\n _class7.prototype['@test class attribute accepts nested helpers, and updates'] = function () {\n var _this44 = this;\n\n this.render('
hello
', {\n model: {\n size: 'large',\n hasSize: true,\n hasShape: false,\n shape: 'round'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('large') }\n });\n\n this.runTask(function () {\n return _this44.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('large') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this44.context, 'model.hasShape', true);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('large round') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this44.context, 'model.hasSize', false);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('round') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this44.context, 'model', {\n size: 'large',\n hasSize: true,\n hasShape: false,\n shape: 'round'\n });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('large') }\n });\n };\n\n _class7.prototype['@test Multiple dynamic classes'] = function () {\n var _this45 = this;\n\n this.render('
hello
', {\n model: {\n foo: 'foo',\n bar: 'bar',\n fizz: 'fizz',\n baz: 'baz'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar fizz baz') }\n });\n\n this.runTask(function () {\n return _this45.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar fizz baz') }\n });\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this45.context, 'model.foo', null);\n (0, _emberMetal.set)(_this45.context, 'model.fizz', null);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('bar baz') }\n });\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this45.context, 'model', {\n foo: 'foo',\n bar: 'bar',\n fizz: 'fizz',\n baz: 'baz'\n });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: (0, _testHelpers.classes)('foo bar fizz baz') }\n });\n };\n\n _class7.prototype['@test classes are ordered: See issue #9912'] = function () {\n var _this46 = this;\n\n this.render('
hello
', {\n model: {\n foo: 'foo',\n bar: 'bar'\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: 'foo static bar' }\n });\n\n this.runTask(function () {\n return _this46.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: 'foo static bar' }\n });\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this46.context, 'model.bar', null);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: 'foo static ' }\n });\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this46.context, 'model', {\n foo: 'foo',\n bar: 'bar'\n });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: 'hello',\n attrs: { class: 'foo static bar' }\n });\n };\n\n return _class7;\n }(_testCase.RenderingTest));\n\n var warnings = void 0,\n originalWarn = void 0;\n\n var StyleTest = function (_RenderingTest4) {\n (0, _emberBabel.inherits)(StyleTest, _RenderingTest4);\n\n function StyleTest() {\n\n var _this47 = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest4.apply(this, arguments));\n\n warnings = [];\n originalWarn = (0, _debug.getDebugFunction)('warn');\n (0, _debug.setDebugFunction)('warn', function (message, test) {\n if (!test) {\n warnings.push(message);\n }\n });\n return _this47;\n }\n\n StyleTest.prototype.teardown = function () {\n var _RenderingTest4$proto;\n\n (_RenderingTest4$proto = _RenderingTest4.prototype.teardown).call.apply(_RenderingTest4$proto, [this].concat(Array.prototype.slice.call(arguments)));\n (0, _debug.setDebugFunction)('warn', originalWarn);\n };\n\n StyleTest.prototype.assertStyleWarning = function (style) {\n this.assert.deepEqual(warnings, [(0, _emberViews.constructStyleDeprecationMessage)(style)]);\n };\n\n StyleTest.prototype.assertNoWarning = function () {\n this.assert.deepEqual(warnings, []);\n };\n\n return StyleTest;\n }(_testCase.RenderingTest);\n\n (0, _testCase.moduleFor)('Inline style tests', function (_StyleTest) {\n (0, _emberBabel.inherits)(_class8, _StyleTest);\n\n function _class8() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _StyleTest.apply(this, arguments));\n }\n\n _class8.prototype['@test can set dynamic style'] = function () {\n var _this49 = this;\n\n this.render('
', {\n model: {\n style: (0, _helpers.htmlSafe)('width: 60px;')\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'width: 60px;' }\n });\n\n this.runTask(function () {\n return _this49.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'width: 60px;' }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this49.context, 'model.style', 'height: 60px;');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'height: 60px;' }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this49.context, 'model.style', null);\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: {}\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this49.context, 'model', { style: 'width: 60px;' });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'width: 60px;' }\n });\n };\n\n _class8.prototype['@test can set dynamic style with -html-safe'] = function () {\n var _this50 = this;\n\n this.render('
', {\n model: {\n style: (0, _helpers.htmlSafe)('width: 60px;')\n }\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'width: 60px;' }\n });\n\n this.runTask(function () {\n return _this50.rerender();\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'width: 60px;' }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this50.context, 'model.style', 'height: 60px;');\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'height: 60px;' }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this50.context, 'model', { style: 'width: 60px;' });\n });\n\n this.assertElement(this.firstChild, {\n tagName: 'div',\n content: '',\n attrs: { style: 'width: 60px;' }\n });\n };\n\n return _class8;\n }(StyleTest));\n\n if (!EmberDev.runningProdBuild) {\n (0, _testCase.moduleFor)('Inline style tests - warnings', function (_StyleTest2) {\n (0, _emberBabel.inherits)(_class9, _StyleTest2);\n\n function _class9() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _StyleTest2.apply(this, arguments));\n }\n\n _class9.prototype['@test specifying
generates a warning'] = function () {\n var userValue = 'width: 42px';\n this.render('
', {\n userValue: userValue\n });\n\n this.assertStyleWarning(userValue);\n };\n\n _class9.prototype['@test specifying `attributeBindings: [\"style\"]` generates a warning'] = function () {\n var FooBarComponent = _helpers.Component.extend({\n attributeBindings: ['style']\n });\n\n this.registerComponent('foo-bar', {\n ComponentClass: FooBarComponent,\n template: 'hello'\n });\n var userValue = 'width: 42px';\n this.render('{{foo-bar style=userValue}}', {\n userValue: userValue\n });\n\n this.assertStyleWarning(userValue);\n };\n\n _class9.prototype['@test specifying `
` works properly without a warning'] = function () {\n this.render('
', {\n userValue: 'width: 42px'\n });\n\n this.assertNoWarning();\n };\n\n _class9.prototype['@test specifying `
` works properly with a SafeString'] = function () {\n this.render('
', {\n userValue: new _helpers.SafeString('width: 42px')\n });\n\n this.assertNoWarning();\n };\n\n _class9.prototype['@test null value do not generate htmlsafe warning'] = function () {\n this.render('
', {\n userValue: null\n });\n\n this.assertNoWarning();\n };\n\n _class9.prototype['@test undefined value do not generate htmlsafe warning'] = function () {\n this.render('
');\n\n this.assertNoWarning();\n };\n\n _class9.prototype['@test no warnings are triggered when using `-html-safe`'] = function () {\n this.render('
', {\n userValue: 'width: 42px'\n });\n\n this.assertNoWarning();\n };\n\n _class9.prototype['@test no warnings are triggered when a safe string is quoted'] = function () {\n this.render('
', {\n userValue: new _helpers.SafeString('width: 42px')\n });\n\n this.assertNoWarning();\n };\n\n _class9.prototype['@test binding warning is triggered when an unsafe string is quoted'] = function () {\n var userValue = 'width: 42px';\n this.render('
', {\n userValue: userValue\n });\n\n this.assertStyleWarning(userValue);\n };\n\n _class9.prototype['@test binding warning is triggered when a safe string for a complete property is concatenated in place'] = function () {\n this.render('
', {\n userValue: new _helpers.SafeString('width: 42px')\n });\n\n this.assertStyleWarning('color: green; ' + 'width: 42px');\n };\n\n _class9.prototype['@test binding warning is triggered when a safe string for a value is concatenated in place'] = function () {\n var userValue = '42px';\n this.render('
', {\n userValue: new _helpers.SafeString(userValue)\n });\n\n this.assertStyleWarning('color: green; width: ' + userValue);\n };\n\n _class9.prototype['@test binding warning is triggered when a safe string for a property name is concatenated in place'] = function () {\n var userValue = 'width';\n this.render('
', {\n userProperty: new _helpers.SafeString(userValue)\n });\n\n this.assertStyleWarning('color: green; ' + userValue + ': 42px');\n };\n\n return _class9;\n }(StyleTest));\n }\n});","enifed('ember-glimmer/tests/integration/custom-component-manager-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-runtime', 'ember-metal', 'ember-glimmer'], function (_emberBabel, _testCase, _emberRuntime, _emberMetal, _emberGlimmer) {\n 'use strict';\n\n var ComponentManagerTest = function (_RenderingTest) {\n (0, _emberBabel.inherits)(ComponentManagerTest, _RenderingTest);\n\n function ComponentManagerTest(assert) {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n\n _this.registerComponentManager('basic', _emberRuntime.Object.extend({\n capabilities: (0, _emberGlimmer.capabilities)('3.4'),\n\n createComponent: function (factory, args) {\n return factory.create({ args: args });\n },\n updateComponent: function (component, args) {\n (0, _emberMetal.set)(component, 'args', args);\n },\n getContext: function (component) {\n return component;\n }\n }));\n\n _this.registerComponentManager('instrumented-full', _emberRuntime.Object.extend({\n capabilities: (0, _emberGlimmer.capabilities)('3.4', {\n destructor: true,\n asyncLifecycleCallbacks: true\n }),\n\n createComponent: function (factory, args) {\n assert.step('createComponent');\n return factory.create({ args: args });\n },\n updateComponent: function (component, args) {\n assert.step('updateComponent');\n (0, _emberMetal.set)(component, 'args', args);\n },\n destroyComponent: function (component) {\n assert.step('destroyComponent');\n component.destroy();\n },\n getContext: function (component) {\n assert.step('getContext');\n return component;\n },\n didCreateComponent: function (component) {\n assert.step('didCreateComponent');\n component.didRender();\n },\n didUpdateComponent: function (component) {\n assert.step('didUpdateComponent');\n component.didUpdate();\n }\n }));\n return _this;\n }\n\n return ComponentManagerTest;\n }(_testCase.RenderingTest);\n\n (0, _testCase.moduleFor)('Component Manager - Curly Invocation', function (_ComponentManagerTest) {\n (0, _emberBabel.inherits)(_class, _ComponentManagerTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ComponentManagerTest.apply(this, arguments));\n }\n\n _class.prototype['@test it can render a basic component with custom component manager'] = function () {\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend({\n greeting: 'hello'\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{greeting}} world
',\n ComponentClass: ComponentClass\n });\n\n this.render('{{foo-bar}}');\n\n this.assertHTML('
hello world
');\n };\n\n _class.prototype['@test it can have no template context'] = function () {\n this.registerComponentManager('pseudo-template-only', _emberRuntime.Object.extend({\n capabilities: (0, _emberGlimmer.capabilities)('3.4'),\n\n createComponent: function () {\n return null;\n },\n updateComponent: function () {},\n getContext: function () {\n return null;\n }\n }));\n\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('pseudo-template-only', {});\n\n this.registerComponent('foo-bar', {\n template: '
{{@greeting}} world
',\n ComponentClass: ComponentClass\n });\n\n this.render('{{foo-bar greeting=\"hello\"}}');\n\n this.assertHTML('
hello world
');\n };\n\n _class.prototype['@test it can discover component manager through inheritance - ES Classes'] = function () {\n this.registerComponentManager('test', _emberRuntime.Object.extend({\n capabilities: (0, _emberGlimmer.capabilities)('3.4'),\n\n createComponent: function (Factory, args) {\n return new Factory(args);\n },\n updateComponent: function () {},\n getContext: function (component) {\n return component;\n }\n }));\n\n var Base = function () {};\n\n (0, _emberGlimmer.setComponentManager)('test', Base);\n\n var Child = function (_Base) {\n (0, _emberBabel.inherits)(Child, _Base);\n\n function Child() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _Base.apply(this, arguments));\n }\n\n return Child;\n }(Base);\n\n var Grandchild = function (_Child) {\n (0, _emberBabel.inherits)(Grandchild, _Child);\n\n function Grandchild() {\n\n var _this4 = (0, _emberBabel.possibleConstructorReturn)(this, _Child.call(this));\n\n _this4.name = 'grandchild';\n return _this4;\n }\n\n return Grandchild;\n }(Child);\n\n this.registerComponent('foo-bar', {\n template: '{{this.name}}',\n ComponentClass: Grandchild\n });\n\n this.render('{{foo-bar}}');\n\n this.assertHTML('grandchild');\n };\n\n _class.prototype['@test it can discover component manager through inheritance - Ember Object'] = function () {\n var Parent = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend());\n var Child = Parent.extend();\n var Grandchild = Child.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.name = 'grandchild';\n }\n });\n\n this.registerComponent('foo-bar', {\n template: '{{this.name}}',\n ComponentClass: Grandchild\n });\n\n this.render('{{foo-bar}}');\n\n this.assertHTML('grandchild');\n };\n\n _class.prototype['@test it can customize the template context'] = function () {\n var customContext = {\n greeting: 'goodbye'\n };\n\n this.registerComponentManager('test', _emberRuntime.Object.extend({\n capabilities: (0, _emberGlimmer.capabilities)('3.4'),\n\n createComponent: function (factory) {\n return factory.create();\n },\n getContext: function () {\n return customContext;\n },\n updateComponent: function () {}\n }));\n\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('test', _emberRuntime.Object.extend({\n greeting: 'hello',\n count: 1234\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{greeting}} world {{count}}
',\n ComponentClass: ComponentClass\n });\n\n this.render('{{foo-bar}}');\n\n this.assertHTML('
goodbye world
');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(customContext, 'greeting', 'sayonara');\n });\n\n this.assertHTML('
sayonara world
');\n };\n\n _class.prototype['@test it can set arguments on the component instance'] = function () {\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend({\n salutation: (0, _emberMetal.computed)('args.named.firstName', 'args.named.lastName', function () {\n return this.args.named.firstName + ' ' + this.args.named.lastName;\n })\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{salutation}}
',\n ComponentClass: ComponentClass\n });\n\n this.render('{{foo-bar firstName=\"Yehuda\" lastName=\"Katz\"}}');\n\n this.assertHTML('
Yehuda Katz
');\n };\n\n _class.prototype['@test arguments are updated if they change'] = function () {\n var _this5 = this;\n\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend({\n salutation: (0, _emberMetal.computed)('args.named.firstName', 'args.named.lastName', function () {\n return this.args.named.firstName + ' ' + this.args.named.lastName;\n })\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{salutation}}
',\n ComponentClass: ComponentClass\n });\n\n this.render('{{foo-bar firstName=firstName lastName=lastName}}', {\n firstName: 'Yehuda',\n lastName: 'Katz'\n });\n\n this.assertHTML('
Yehuda Katz
');\n\n this.runTask(function () {\n return (0, _emberMetal.setProperties)(_this5.context, {\n firstName: 'Chad',\n lastName: 'Hietala'\n });\n });\n\n this.assertHTML('
Chad Hietala
');\n };\n\n _class.prototype['@test it can opt-in to running destructor'] = function (assert) {\n var _this6 = this;\n\n this.registerComponentManager('test', _emberRuntime.Object.extend({\n capabilities: (0, _emberGlimmer.capabilities)('3.4', {\n destructor: true\n }),\n\n createComponent: function (factory) {\n assert.step('createComponent');\n return factory.create();\n },\n getContext: function (component) {\n return component;\n },\n updateComponent: function () {},\n destroyComponent: function (component) {\n assert.step('destroyComponent');\n component.destroy();\n }\n }));\n\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('test', _emberRuntime.Object.extend({\n greeting: 'hello',\n destroy: function () {\n assert.step('component.destroy()');\n this._super.apply(this, arguments);\n }\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{greeting}} world
',\n ComponentClass: ComponentClass\n });\n\n this.render('{{#if show}}{{foo-bar}}{{/if}}', { show: true });\n\n this.assertHTML('
hello world
');\n\n this.runTask(function () {\n return _this6.context.set('show', false);\n });\n\n this.assertText('');\n\n assert.verifySteps(['createComponent', 'destroyComponent', 'component.destroy()']);\n };\n\n _class.prototype['@test it can opt-in to running async lifecycle hooks'] = function (assert) {\n var _this7 = this;\n\n this.registerComponentManager('test', _emberRuntime.Object.extend({\n capabilities: (0, _emberGlimmer.capabilities)('3.4', {\n asyncLifecycleCallbacks: true\n }),\n\n createComponent: function (factory, args) {\n assert.step('createComponent');\n return factory.create({ args: args });\n },\n updateComponent: function (component, args) {\n assert.step('updateComponent');\n (0, _emberMetal.set)(component, 'args', args);\n },\n destroyComponent: function (component) {\n assert.step('destroyComponent');\n component.destroy();\n },\n getContext: function (component) {\n assert.step('getContext');\n return component;\n },\n didCreateComponent: function () {\n assert.step('didCreateComponent');\n },\n didUpdateComponent: function () {\n assert.step('didUpdateComponent');\n }\n }));\n\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('test', _emberRuntime.Object.extend({\n greeting: 'hello'\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{greeting}} {{@name}}
',\n ComponentClass: ComponentClass\n });\n\n this.render('{{foo-bar name=name}}', { name: 'world' });\n\n this.assertHTML('
hello world
');\n assert.verifySteps(['createComponent', 'getContext', 'didCreateComponent']);\n\n this.runTask(function () {\n return _this7.context.set('name', 'max');\n });\n this.assertHTML('
hello max
');\n assert.verifySteps(['updateComponent', 'didUpdateComponent']);\n };\n\n return _class;\n }(ComponentManagerTest));\n\n (0, _testCase.moduleFor)('Component Manager - Angle Invocation', function (_ComponentManagerTest2) {\n (0, _emberBabel.inherits)(_class2, _ComponentManagerTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ComponentManagerTest2.apply(this, arguments));\n }\n\n _class2.prototype['@test it can render a basic component with custom component manager'] = function () {\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend({\n greeting: 'hello'\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{greeting}} world
',\n ComponentClass: ComponentClass\n });\n\n this.render('
');\n\n this.assertHTML('
hello world
');\n };\n\n _class2.prototype['@test it can set arguments on the component instance'] = function () {\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend({\n salutation: (0, _emberMetal.computed)('args.named.firstName', 'args.named.lastName', function () {\n return this.args.named.firstName + ' ' + this.args.named.lastName;\n })\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{salutation}}
',\n ComponentClass: ComponentClass\n });\n\n this.render('
');\n\n this.assertHTML('
Yehuda Katz
');\n };\n\n _class2.prototype['@test it can pass attributes'] = function () {\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend());\n\n this.registerComponent('foo-bar', {\n template: '
Hello world!
',\n ComponentClass: ComponentClass\n });\n\n this.render('
');\n\n this.assertHTML('
Hello world!
');\n };\n\n _class2.prototype['@test arguments are updated if they change'] = function () {\n var _this9 = this;\n\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('basic', _emberRuntime.Object.extend({\n salutation: (0, _emberMetal.computed)('args.named.firstName', 'args.named.lastName', function () {\n return this.args.named.firstName + ' ' + this.args.named.lastName;\n })\n }));\n\n this.registerComponent('foo-bar', {\n template: '
{{salutation}}
',\n ComponentClass: ComponentClass\n });\n\n this.render('
', {\n firstName: 'Yehuda',\n lastName: 'Katz'\n });\n\n this.assertHTML('
Yehuda Katz
');\n\n this.runTask(function () {\n return (0, _emberMetal.setProperties)(_this9.context, {\n firstName: 'Chad',\n lastName: 'Hietala'\n });\n });\n\n this.assertHTML('
Chad Hietala
');\n };\n\n _class2.prototype['@test updating attributes triggers didUpdateComponent'] = function (assert) {\n var _this10 = this;\n\n var ComponentClass = (0, _emberGlimmer.setComponentManager)('instrumented-full', _emberRuntime.Object.extend({\n didRender: function () {},\n didUpdate: function () {}\n }));\n\n this.registerComponent('foo-bar', {\n template: '
Hello world!
',\n ComponentClass: ComponentClass\n });\n\n this.render('
', { value: 'foo' });\n\n this.assertHTML('
Hello world!
');\n assert.verifySteps(['createComponent', 'getContext', 'didCreateComponent']);\n\n this.runTask(function () {\n return _this10.context.set('value', 'bar');\n });\n assert.verifySteps(['didUpdateComponent']);\n };\n\n return _class2;\n }(ComponentManagerTest));\n});","enifed('ember-glimmer/tests/integration/event-dispatcher-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers', '@ember/runloop', '@ember/instrumentation', 'ember-views', 'ember-utils'], function (_emberBabel, _testCase, _helpers, _runloop, _instrumentation, _emberViews, _emberUtils) {\n 'use strict';\n\n var canDataTransfer = !!document.createEvent('HTMLEvents').dataTransfer;\n\n function fireNativeWithDataTransfer(node, type, dataTransfer) {\n var event = document.createEvent('HTMLEvents');\n event.initEvent(type, true, true);\n event.dataTransfer = dataTransfer;\n node.dispatchEvent(event);\n }\n\n (0, _testCase.moduleFor)('EventDispatcher', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test events bubble view hierarchy for form elements'] = function (assert) {\n var _this2 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n change: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
'\n });\n\n this.render('{{x-foo}}');\n\n this.runTask(function () {\n return _this2.$('#is-done').trigger('change');\n });\n assert.ok(receivedEvent, 'change event was triggered');\n assert.strictEqual(receivedEvent.target, this.$('#is-done')[0]);\n };\n\n _class.prototype['@test case insensitive events'] = function (assert) {\n var _this3 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-bar', {\n ComponentClass: _helpers.Component.extend({\n clicked: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
my button '\n });\n\n this.render('{{x-bar}}');\n\n this.runTask(function () {\n return _this3.$('#is-done').trigger('click');\n });\n assert.ok(receivedEvent, 'change event was triggered');\n assert.strictEqual(receivedEvent.target, this.$('#is-done')[0]);\n };\n\n _class.prototype['@test case sensitive events'] = function (assert) {\n var _this4 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-bar', {\n ComponentClass: _helpers.Component.extend({\n clicked: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
my button '\n });\n\n this.render('{{x-bar}}');\n\n this.runTask(function () {\n return _this4.$('#is-done').trigger('click');\n });\n assert.ok(receivedEvent, 'change event was triggered');\n assert.strictEqual(receivedEvent.target, this.$('#is-done')[0]);\n };\n\n _class.prototype['@test events bubble to parent view'] = function (assert) {\n var _this5 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n change: function (event) {\n receivedEvent = event;\n }\n }),\n template: '{{yield}}'\n });\n\n this.registerComponent('x-bar', {\n ComponentClass: _helpers.Component.extend({\n change: function () {}\n }),\n template: '
'\n });\n\n this.render('{{#x-foo}}{{x-bar}}{{/x-foo}}');\n\n this.runTask(function () {\n return _this5.$('#is-done').trigger('change');\n });\n assert.ok(receivedEvent, 'change event was triggered');\n assert.strictEqual(receivedEvent.target, this.$('#is-done')[0]);\n };\n\n _class.prototype['@test events bubbling up can be prevented'] = function (assert) {\n var _this6 = this;\n\n var hasReceivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n change: function () {\n hasReceivedEvent = true;\n }\n }),\n template: '{{yield}}'\n });\n\n this.registerComponent('x-bar', {\n ComponentClass: _helpers.Component.extend({\n change: function () {\n return false;\n }\n }),\n template: '
'\n });\n\n this.render('{{#x-foo}}{{x-bar}}{{/x-foo}}');\n\n this.runTask(function () {\n return _this6.$('#is-done').trigger('change');\n });\n assert.notOk(hasReceivedEvent, 'change event has not been received');\n };\n\n _class.prototype['@test event handlers are wrapped in a run loop'] = function (assert) {\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n change: function () {\n assert.ok((0, _runloop.getCurrentRunLoop)(), 'a run loop should have started');\n }\n }),\n template: '
'\n });\n\n this.render('{{x-foo}}');\n\n this.$('#is-done').trigger('click');\n };\n\n _class.prototype['@test delegated event listeners work for mouseEnter/Leave'] = function (assert) {\n var _this7 = this;\n\n var receivedEnterEvents = [];\n var receivedLeaveEvents = [];\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n mouseEnter: function (event) {\n receivedEnterEvents.push(event);\n },\n mouseLeave: function (event) {\n receivedLeaveEvents.push(event);\n }\n }),\n template: '
'\n });\n\n this.render('{{x-foo id=\"outer\"}}');\n\n var parent = this.element;\n var outer = this.$('#outer')[0];\n var inner = this.$('#inner')[0];\n\n // mouse moves over #outer\n this.runTask(function () {\n _this7.$(outer).trigger('mouseenter', { canBubble: false, relatedTarget: parent });\n _this7.$(outer).trigger('mouseover', { relatedTarget: parent });\n _this7.$(parent).trigger('mouseout', { relatedTarget: outer });\n });\n assert.equal(receivedEnterEvents.length, 1, 'mouseenter event was triggered');\n assert.strictEqual(receivedEnterEvents[0].target, outer);\n\n // mouse moves over #inner\n this.runTask(function () {\n _this7.$(inner).trigger('mouseover', { relatedTarget: outer });\n _this7.$(outer).trigger('mouseout', { relatedTarget: inner });\n });\n assert.equal(receivedEnterEvents.length, 1, 'mouseenter event was not triggered again');\n\n // mouse moves out of #inner\n this.runTask(function () {\n _this7.$(inner).trigger('mouseout', { relatedTarget: outer });\n _this7.$(outer).trigger('mouseover', { relatedTarget: inner });\n });\n assert.equal(receivedLeaveEvents.length, 0, 'mouseleave event was not triggered');\n\n // mouse moves out of #outer\n this.runTask(function () {\n _this7.$(outer).trigger('mouseleave', { canBubble: false, relatedTarget: parent });\n _this7.$(outer).trigger('mouseout', { relatedTarget: parent });\n _this7.$(parent).trigger('mouseover', { relatedTarget: outer });\n });\n assert.equal(receivedLeaveEvents.length, 1, 'mouseleave event was triggered');\n assert.strictEqual(receivedLeaveEvents[0].target, outer);\n };\n\n _class.prototype['@test delegated event listeners work for mouseEnter/Leave with skipped events'] = function (assert) {\n var _this8 = this;\n\n var receivedEnterEvents = [];\n var receivedLeaveEvents = [];\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n mouseEnter: function (event) {\n receivedEnterEvents.push(event);\n },\n mouseLeave: function (event) {\n receivedLeaveEvents.push(event);\n }\n }),\n template: '
'\n });\n\n this.render('{{x-foo id=\"outer\"}}');\n\n var parent = this.element;\n var outer = this.$('#outer')[0];\n var inner = this.$('#inner')[0];\n\n // we replicate fast mouse movement, where mouseover is fired directly in #inner, skipping #outer\n this.runTask(function () {\n _this8.$(outer).trigger('mouseenter', { canBubble: false, relatedTarget: parent });\n _this8.$(inner).trigger('mouseover', { relatedTarget: parent });\n _this8.$(parent).trigger('mouseout', { relatedTarget: inner });\n });\n assert.equal(receivedEnterEvents.length, 1, 'mouseenter event was triggered');\n assert.strictEqual(receivedEnterEvents[0].target, inner);\n\n // mouse moves out of #outer\n this.runTask(function () {\n _this8.$(outer).trigger('mouseleave', { canBubble: false, relatedTarget: parent });\n _this8.$(inner).trigger('mouseout', { relatedTarget: parent });\n _this8.$(parent).trigger('mouseover', { relatedTarget: inner });\n });\n assert.equal(receivedLeaveEvents.length, 1, 'mouseleave event was triggered');\n assert.strictEqual(receivedLeaveEvents[0].target, inner);\n };\n\n _class.prototype['@test delegated event listeners work for mouseEnter/Leave with skipped events and subcomponent'] = function (assert) {\n var _this9 = this;\n\n var receivedEnterEvents = [];\n var receivedLeaveEvents = [];\n\n this.registerComponent('x-outer', {\n ComponentClass: _helpers.Component.extend({\n mouseEnter: function (event) {\n receivedEnterEvents.push(event);\n },\n mouseLeave: function (event) {\n receivedLeaveEvents.push(event);\n }\n }),\n template: '{{yield}}'\n });\n\n this.registerComponent('x-inner', {\n ComponentClass: _helpers.Component.extend(),\n template: ''\n });\n\n this.render('{{#x-outer id=\"outer\"}}{{x-inner id=\"inner\"}}{{/x-outer}}');\n\n var parent = this.element;\n var outer = this.$('#outer')[0];\n var inner = this.$('#inner')[0];\n\n // we replicate fast mouse movement, where mouseover is fired directly in #inner, skipping #outer\n this.runTask(function () {\n _this9.$(outer).trigger('mouseenter', { canBubble: false, relatedTarget: parent });\n _this9.$(inner).trigger('mouseover', { relatedTarget: parent });\n _this9.$(parent).trigger('mouseout', { relatedTarget: inner });\n });\n assert.equal(receivedEnterEvents.length, 1, 'mouseenter event was triggered');\n assert.strictEqual(receivedEnterEvents[0].target, inner);\n\n // mouse moves out of #inner\n this.runTask(function () {\n _this9.$(outer).trigger('mouseleave', { canBubble: false, relatedTarget: parent });\n _this9.$(inner).trigger('mouseout', { relatedTarget: parent });\n _this9.$(parent).trigger('mouseover', { relatedTarget: inner });\n });\n\n assert.equal(receivedLeaveEvents.length, 1, 'mouseleave event was triggered');\n assert.strictEqual(receivedLeaveEvents[0].target, inner);\n };\n\n return _class;\n }(_testCase.RenderingTest));\n\n (0, _testCase.moduleFor)('EventDispatcher#setup', function (_RenderingTest2) {\n (0, _emberBabel.inherits)(_class2, _RenderingTest2);\n\n function _class2() {\n\n var _this10 = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest2.apply(this, arguments));\n\n var dispatcher = _this10.owner.lookup('event_dispatcher:main');\n (0, _runloop.run)(dispatcher, 'destroy');\n _this10.owner.__container__.reset('event_dispatcher:main');\n _this10.dispatcher = _this10.owner.lookup('event_dispatcher:main');\n return _this10;\n }\n\n _class2.prototype['@test additional events can be specified'] = function (assert) {\n this.dispatcher.setup({ myevent: 'myEvent' });\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n myEvent: function () {\n assert.ok(true, 'custom event was triggered');\n }\n }),\n template: '
Hello!
'\n });\n\n this.render('{{x-foo}}');\n\n this.$('div').trigger('myevent');\n };\n\n _class2.prototype['@test a rootElement can be specified'] = function (assert) {\n this.element.innerHTML = '
';\n // this.$().append('
');\n this.dispatcher.setup({ myevent: 'myEvent' }, '#app');\n\n assert.ok(this.$('#app').hasClass('ember-application'), 'custom rootElement was used');\n assert.equal(this.dispatcher.rootElement, '#app', 'the dispatchers rootElement was updated');\n };\n\n _class2.prototype['@test default events can be disabled via `customEvents`'] = function (assert) {\n this.dispatcher.setup({ click: null });\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n click: function () {\n assert.ok(false, 'click method was called');\n },\n null: function () {\n assert.ok(false, 'null method was called');\n },\n doubleClick: function () {\n assert.ok(true, 'a non-disabled event is still handled properly');\n }\n }),\n\n template: '
Hello!
'\n });\n\n this.render('{{x-foo}}');\n\n this.$('div').trigger('click');\n this.$('div').trigger('dblclick');\n };\n\n _class2.prototype['@test throws if specified rootElement does not exist'] = function (assert) {\n var _this11 = this;\n\n assert.throws(function () {\n _this11.dispatcher.setup({ myevent: 'myEvent' }, '#app');\n });\n };\n\n return _class2;\n }(_testCase.RenderingTest));\n\n if (canDataTransfer) {\n (0, _testCase.moduleFor)('EventDispatcher - Event Properties', function (_RenderingTest4) {\n (0, _emberBabel.inherits)(_class4, _RenderingTest4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest4.apply(this, arguments));\n }\n\n _class4.prototype['@test dataTransfer property is added to drop event'] = function (assert) {\n var receivedEvent = void 0;\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n drop: function (event) {\n receivedEvent = event;\n }\n })\n });\n\n this.render('{{x-foo}}');\n\n fireNativeWithDataTransfer(this.$('div')[0], 'drop', 'success');\n assert.equal(receivedEvent.dataTransfer, 'success');\n };\n\n return _class4;\n }(_testCase.RenderingTest));\n }\n\n if (_emberViews.jQueryDisabled) {\n (0, _testCase.moduleFor)('EventDispatcher#native-events', function (_RenderingTest5) {\n (0, _emberBabel.inherits)(_class5, _RenderingTest5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest5.apply(this, arguments));\n }\n\n _class5.prototype['@test native events are passed when jQuery is not present'] = function (assert) {\n var _this15 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n click: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
bar '\n });\n\n this.render('{{x-foo}}');\n\n this.runTask(function () {\n return _this15.$('#foo').click();\n });\n assert.ok(receivedEvent, 'click event was triggered');\n assert.notOk(receivedEvent.originalEvent, 'event is not a jQuery.Event');\n };\n\n return _class5;\n }(_testCase.RenderingTest));\n } else {\n (0, _testCase.moduleFor)('EventDispatcher#jquery-events', function (_RenderingTest6) {\n (0, _emberBabel.inherits)(_class6, _RenderingTest6);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest6.apply(this, arguments));\n }\n\n _class6.prototype.beforeEach = function () {\n this.jqueryIntegration = window.ENV._JQUERY_INTEGRATION;\n };\n\n _class6.prototype.afterEach = function () {\n window.ENV._JQUERY_INTEGRATION = this.jqueryIntegration;\n };\n\n _class6.prototype['@test jQuery events are passed when jQuery is present'] = function (assert) {\n var _this17 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n click: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
bar '\n });\n\n this.render('{{x-foo}}');\n\n this.runTask(function () {\n return _this17.$('#foo').click();\n });\n assert.ok(receivedEvent, 'click event was triggered');\n assert.ok(receivedEvent instanceof _emberViews.jQuery.Event, 'event is a jQuery.Event');\n };\n\n _class6.prototype['@' + (_emberUtils.HAS_NATIVE_PROXY ? 'test' : 'skip') + ' accessing jQuery.Event#originalEvent is deprecated'] = function (assert) {\n var _this18 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n click: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
bar '\n });\n\n this.render('{{x-foo}}');\n\n this.runTask(function () {\n return _this18.$('#foo').click();\n });\n expectDeprecation(function () {\n var _receivedEvent = receivedEvent,\n originalEvent = _receivedEvent.originalEvent;\n\n assert.ok(originalEvent, 'jQuery event has originalEvent property');\n assert.equal(originalEvent.type, 'click', 'properties of originalEvent are available');\n }, 'Accessing jQuery.Event specific properties is deprecated. Either use the ember-jquery-legacy addon to normalize events to native events, or explicitly opt into jQuery integration using @ember/optional-features.');\n };\n\n _class6.prototype['@test other jQuery.Event properties do not trigger deprecation'] = function (assert) {\n var _this19 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n click: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
bar '\n });\n\n this.render('{{x-foo}}');\n\n this.runTask(function () {\n return _this19.$('#foo').click();\n });\n expectNoDeprecation(function () {\n receivedEvent.stopPropagation();\n receivedEvent.stopImmediatePropagation();\n receivedEvent.preventDefault();\n assert.ok(receivedEvent.bubbles, 'properties of jQuery event are available');\n assert.equal(receivedEvent.type, 'click', 'properties of jQuery event are available');\n });\n };\n\n _class6.prototype['@test accessing jQuery.Event#originalEvent does not trigger deprecations when jquery integration is explicitly enabled'] = function (assert) {\n var _this20 = this;\n\n var receivedEvent = void 0;\n window.ENV._JQUERY_INTEGRATION = true;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n click: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
bar '\n });\n\n this.render('{{x-foo}}');\n\n this.runTask(function () {\n return _this20.$('#foo').click();\n });\n expectNoDeprecation(function () {\n var _receivedEvent2 = receivedEvent,\n originalEvent = _receivedEvent2.originalEvent;\n\n assert.ok(originalEvent, 'jQuery event has originalEvent property');\n assert.equal(originalEvent.type, 'click', 'properties of originalEvent are available');\n });\n };\n\n _class6.prototype['@' + 'skip' + ' accessing jQuery.Event#__originalEvent does not trigger deprecations to support ember-jquery-legacy'] = function (assert) {\n var _this21 = this;\n\n var receivedEvent = void 0;\n\n this.registerComponent('x-foo', {\n ComponentClass: _helpers.Component.extend({\n click: function (event) {\n receivedEvent = event;\n }\n }),\n template: '
bar '\n });\n\n this.render('{{x-foo}}');\n\n this.runTask(function () {\n return _this21.$('#foo').click();\n });\n expectNoDeprecation(function () {\n var _receivedEvent3 = receivedEvent,\n originalEvent = _receivedEvent3.__originalEvent;\n\n assert.ok(originalEvent, 'jQuery event has __originalEvent property');\n assert.equal(originalEvent.type, 'click', 'properties of __originalEvent are available');\n });\n };\n\n return _class6;\n }(_testCase.RenderingTest));\n }\n});","enifed('ember-glimmer/tests/integration/helpers/-class-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/test-helpers', 'ember-metal'], function (_emberBabel, _testCase, _testHelpers, _emberMetal) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{-class}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test casts binding to dasherized class'] = function () {\n var _this2 = this;\n\n this.registerComponent('foo-bar', { template: '' });\n this.render('{{foo-bar class=(-class someTruth \"someTruth\")}}', {\n someTruth: true\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('some-truth ember-view') }\n });\n\n this.runTask(function () {\n return _this2.rerender();\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('some-truth ember-view') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'someTruth', false);\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('ember-view') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'someTruth', true);\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('some-truth ember-view') }\n });\n };\n\n _class.prototype['@tests casts leaf path of binding to dasherized class'] = function () {\n var _this3 = this;\n\n this.registerComponent('foo-bar', { template: '' });\n this.render('{{foo-bar class=(-class model.someTruth \"someTruth\")}}', {\n model: {\n someTruth: true\n }\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('some-truth ember-view') }\n });\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('some-truth ember-view') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'model.someTruth', false);\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('ember-view') }\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'model', { someTruth: true });\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: (0, _testHelpers.classes)('some-truth ember-view') }\n });\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/closure-action-test', ['ember-babel', '@ember/instrumentation', '@ember/runloop', 'ember-metal', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer/tests/utils/helpers'], function (_emberBabel, _instrumentation, _runloop, _emberMetal, _testCase, _abstractTestCase, _helpers) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n
clicked: {{clicked}}; foo: {{foo}}
\\n\\n {{click-me id=\"string-action\" onClick=(action \"on-click\")}}\\n {{click-me id=\"function-action\" onClick=(action onClick)}}\\n {{click-me id=\"mut-action\" onClick=(action (mut clicked))}}\\n '], ['\\n
clicked: {{clicked}}; foo: {{foo}}
\\n\\n {{click-me id=\"string-action\" onClick=(action \"on-click\")}}\\n {{click-me id=\"function-action\" onClick=(action onClick)}}\\n {{click-me id=\"mut-action\" onClick=(action (mut clicked))}}\\n ']);\n\n (0, _testCase.moduleFor)('Helpers test: closure {{action}}', function (_RenderingTest2) {\n (0, _emberBabel.inherits)(_class2, _RenderingTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest2.apply(this, arguments));\n }\n\n _class2.prototype['@test action should be called'] = function () {\n var outerActionCalled = false;\n var component = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n outerSubmit: function () {\n outerActionCalled = true;\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action outerSubmit)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n component.fireAction();\n });\n\n this.assert.ok(outerActionCalled, 'the action was called');\n };\n\n _class2.prototype['@test an error is triggered when bound action function is undefined'] = function () {\n var _this6 = this;\n\n this.registerComponent('inner-component', {\n template: 'inner'\n });\n this.registerComponent('outer-component', {\n template: '{{inner-component submit=(action somethingThatIsUndefined)}}'\n });\n\n expectAssertion(function () {\n _this6.render('{{outer-component}}');\n }, /Action passed is null or undefined in \\(action[^)]*\\) from .*\\./);\n };\n\n _class2.prototype['@test an error is triggered when bound action being passed in is a non-function'] = function () {\n var _this7 = this;\n\n this.registerComponent('inner-component', {\n template: 'inner'\n });\n this.registerComponent('outer-component', {\n ComponentClass: _helpers.Component.extend({\n nonFunctionThing: {}\n }),\n template: '{{inner-component submit=(action nonFunctionThing)}}'\n });\n\n expectAssertion(function () {\n _this7.render('{{outer-component}}');\n }, /An action could not be made for `.*` in .*\\. Please confirm that you are using either a quoted action name \\(i\\.e\\. `\\(action '.*'\\)`\\) or a function available in .*\\./);\n };\n\n _class2.prototype['@test [#12718] a nice error is shown when a bound action function is undefined and it is passed as attrs.foo'] = function () {\n var _this8 = this;\n\n this.registerComponent('inner-component', {\n template: '
Click me '\n });\n\n this.registerComponent('outer-component', {\n template: '{{inner-component}}'\n });\n\n expectAssertion(function () {\n _this8.render('{{outer-component}}');\n }, /Action passed is null or undefined in \\(action[^)]*\\) from .*\\./);\n };\n\n _class2.prototype['@test action value is returned'] = function () {\n var expectedValue = 'terrible tom';\n var returnedValue = void 0;\n var innerComponent = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n returnedValue = this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n outerSubmit: function () {\n return expectedValue;\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action outerSubmit)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(returnedValue, expectedValue, 'action can return to caller');\n };\n\n _class2.prototype['@test action should be called on the correct scope'] = function () {\n var innerComponent = void 0;\n var outerComponent = void 0;\n var actualComponent = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n outerComponent = this;\n },\n\n isOuterComponent: true,\n outerSubmit: function () {\n actualComponent = this;\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action outerSubmit)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(actualComponent, outerComponent, 'action has the correct context');\n this.assert.ok(actualComponent.isOuterComponent, 'action has the correct context');\n };\n\n _class2.prototype['@test arguments to action are passed, curry'] = function () {\n var first = 'mitch';\n var second = 'martin';\n var third = 'matt';\n var fourth = 'wacky wycats';\n\n var innerComponent = void 0;\n var actualArgs = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit(fourth);\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n third: third,\n outerSubmit: function () {\n // eslint-disable-line no-unused-vars\n actualArgs = [].concat(Array.prototype.slice.call(arguments));\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action (action outerSubmit \"' + first + '\") \"' + second + '\" third)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.deepEqual(actualArgs, [first, second, third, fourth], 'action has the correct args');\n };\n\n _class2.prototype['@test `this` can be passed as an argument'] = function () {\n var value = {};\n var component = void 0;\n var innerComponent = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n actions: {\n outerAction: function (incomingValue) {\n value = incomingValue;\n }\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action \"outerAction\" this)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.strictEqual(value, component, 'the component is passed at `this`');\n };\n\n _class2.prototype['@test arguments to action are bound'] = function () {\n var value = 'lazy leah';\n\n var innerComponent = void 0;\n var outerComponent = void 0;\n var actualArg = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n outerComponent = this;\n },\n\n value: '',\n outerSubmit: function (incomingValue) {\n actualArg = incomingValue;\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action outerSubmit value)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.strictEqual(actualArg, '', 'action has the correct first arg');\n\n this.runTask(function () {\n outerComponent.set('value', value);\n });\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.strictEqual(actualArg, value, 'action has the correct first arg');\n };\n\n _class2.prototype['@test array arguments are passed correctly to action'] = function () {\n var first = 'foo';\n var second = [3, 5];\n var third = [4, 9];\n\n var actualFirst = void 0;\n var actualSecond = void 0;\n var actualThird = void 0;\n\n var innerComponent = void 0;\n var outerComponent = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit(second, third);\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n outerComponent = this;\n },\n outerSubmit: function (incomingFirst, incomingSecond, incomingThird) {\n actualFirst = incomingFirst;\n actualSecond = incomingSecond;\n actualThird = incomingThird;\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action outerSubmit first)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n outerComponent.set('first', first);\n outerComponent.set('second', second);\n });\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(actualFirst, first, 'action has the correct first arg');\n this.assert.equal(actualSecond, second, 'action has the correct second arg');\n this.assert.equal(actualThird, third, 'action has the correct third arg');\n };\n\n _class2.prototype['@test mut values can be wrapped in actions, are settable'] = function () {\n var newValue = 'trollin trek';\n\n var innerComponent = void 0;\n var outerComponent = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit(newValue);\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n outerComponent = this;\n },\n\n outerMut: 'patient peter'\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action (mut outerMut))}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(outerComponent.get('outerMut'), newValue, 'mut value is set');\n };\n\n _class2.prototype['@test mut values can be wrapped in actions, are settable with a curry'] = function () {\n var newValue = 'trollin trek';\n\n var innerComponent = void 0;\n var outerComponent = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n outerComponent = this;\n },\n\n outerMut: 'patient peter'\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action (mut outerMut) \\'' + newValue + '\\')}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(outerComponent.get('outerMut'), newValue, 'mut value is set');\n };\n\n _class2.prototype['@test action can create closures over actions'] = function () {\n var first = 'raging robert';\n var second = 'mild machty';\n var returnValue = 'butch brian';\n\n var actualFirst = void 0;\n var actualSecond = void 0;\n var actualReturnedValue = void 0;\n\n var innerComponent = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n actualReturnedValue = this.attrs.submit(second);\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n actions: {\n outerAction: function (incomingFirst, incomingSecond) {\n actualFirst = incomingFirst;\n actualSecond = incomingSecond;\n return returnValue;\n }\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action \\'outerAction\\' \\'' + first + '\\')}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(actualReturnedValue, returnValue, 'return value is present');\n this.assert.equal(actualFirst, first, 'first argument is correct');\n this.assert.equal(actualSecond, second, 'second argument is correct');\n };\n\n _class2.prototype['@test provides a helpful error if an action is not present'] = function () {\n var _this9 = this;\n\n var InnerComponent = _helpers.Component.extend({});\n\n var OuterComponent = _helpers.Component.extend({\n actions: {\n something: function () {\n // this is present to ensure `actions` hash is present\n // a different error is triggered if `actions` is missing\n // completely\n }\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action \\'doesNotExist\\')}}'\n });\n\n expectAssertion(function () {\n _this9.render('{{outer-component}}');\n }, /An action named 'doesNotExist' was not found in /);\n };\n\n _class2.prototype['@test provides a helpful error if actions hash is not present'] = function () {\n var _this10 = this;\n\n var InnerComponent = _helpers.Component.extend({});\n\n var OuterComponent = _helpers.Component.extend({});\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action \\'doesNotExist\\')}}'\n });\n\n expectAssertion(function () {\n _this10.render('{{outer-component}}');\n }, /An action named 'doesNotExist' was not found in /);\n };\n\n _class2.prototype['@test action can create closures over actions with target'] = function () {\n var innerComponent = void 0;\n var actionCalled = false;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n otherComponent: (0, _emberMetal.computed)(function () {\n return {\n actions: {\n outerAction: function () {\n actionCalled = true;\n }\n }\n };\n })\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action \\'outerAction\\' target=otherComponent)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.ok(actionCalled, 'action called on otherComponent');\n };\n\n _class2.prototype['@test value can be used with action over actions'] = function () {\n var newValue = 'yelping yehuda';\n\n var innerComponent = void 0;\n var actualValue = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit({\n readProp: newValue\n });\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n outerContent: {\n readProp: newValue\n },\n actions: {\n outerAction: function (incomingValue) {\n actualValue = incomingValue;\n }\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action \\'outerAction\\' value=\"readProp\")}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(actualValue, newValue, 'value is read');\n };\n\n _class2.prototype['@test action will read the value of a first property'] = function () {\n var newValue = 'irate igor';\n\n var innerComponent = void 0;\n var actualValue = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit({\n readProp: newValue\n });\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n outerAction: function (incomingValue) {\n actualValue = incomingValue;\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action outerAction value=\"readProp\")}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(actualValue, newValue, 'property is read');\n };\n\n _class2.prototype['@test action will read the value of a curried first argument property'] = function () {\n var newValue = 'kissing kris';\n\n var innerComponent = void 0;\n var actualValue = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n objectArgument: {\n readProp: newValue\n },\n outerAction: function (incomingValue) {\n actualValue = incomingValue;\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action outerAction objectArgument value=\"readProp\")}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(actualValue, newValue, 'property is read');\n };\n\n _class2.prototype['@test action closure does not get auto-mut wrapped'] = function (assert) {\n var first = 'raging robert';\n var second = 'mild machty';\n var returnValue = 'butch brian';\n\n var innerComponent = void 0;\n var actualFirst = void 0;\n var actualSecond = void 0;\n var actualReturnedValue = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.get('submit')(second);\n this.get('attrs-submit')(second);\n var attrsSubmitReturnValue = this.attrs['attrs-submit'](second);\n var submitReturnValue = this.attrs.submit(second);\n\n assert.equal(attrsSubmitReturnValue, submitReturnValue, 'both attrs.foo and foo should behave the same');\n\n return submitReturnValue;\n }\n });\n\n var MiddleComponent = _helpers.Component.extend({});\n\n var OuterComponent = _helpers.Component.extend({\n actions: {\n outerAction: function (incomingFirst, incomingSecond) {\n actualFirst = incomingFirst;\n actualSecond = incomingSecond;\n return returnValue;\n }\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('middle-component', {\n ComponentClass: MiddleComponent,\n template: '{{inner-component attrs-submit=attrs.submit submit=submit}}'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{middle-component submit=(action \\'outerAction\\' \\'' + first + '\\')}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n actualReturnedValue = innerComponent.fireAction();\n });\n\n this.assert.equal(actualFirst, first, 'first argument is correct');\n this.assert.equal(actualSecond, second, 'second argument is correct');\n this.assert.equal(actualReturnedValue, returnValue, 'return value is present');\n };\n\n _class2.prototype['@test action should be called within a run loop'] = function () {\n var innerComponent = void 0;\n var capturedRunLoop = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n this.attrs.submit();\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n actions: {\n submit: function () {\n capturedRunLoop = (0, _runloop.getCurrentRunLoop)();\n }\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action \\'submit\\')}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.ok(capturedRunLoop, 'action is called within a run loop');\n };\n\n _class2.prototype['@test objects that define INVOKE can be casted to actions'] = function () {\n var innerComponent = void 0;\n var actionArgs = void 0;\n var invokableArgs = void 0;\n\n var InnerComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n innerComponent = this;\n },\n fireAction: function () {\n actionArgs = this.attrs.submit(4, 5, 6);\n }\n });\n\n var OuterComponent = _helpers.Component.extend({\n foo: 123,\n submitTask: (0, _emberMetal.computed)(function () {\n var _this11 = this,\n _ref;\n\n return _ref = {}, _ref[_helpers.INVOKE] = function () {\n var _len, args, _key;\n\n for (_len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n invokableArgs = args;\n return _this11.foo;\n }, _ref;\n })\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: 'inner'\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: '{{inner-component submit=(action submitTask 1 2 3)}}'\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n innerComponent.fireAction();\n });\n\n this.assert.equal(actionArgs, 123);\n this.assert.deepEqual(invokableArgs, [1, 2, 3, 4, 5, 6]);\n };\n\n _class2.prototype['@test closure action with `(mut undefinedThing)` works properly [GH#13959]'] = function () {\n var _this12 = this;\n\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n label: undefined,\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
{{if label label \"Click me\"}} '\n });\n\n this.render('{{example-component}}');\n\n this.assertText('Click me');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n _this12.$('button').click();\n });\n\n this.assertText('Clicked!');\n\n this.runTask(function () {\n component.set('label', 'Dun clicked');\n });\n\n this.assertText('Dun clicked');\n\n this.runTask(function () {\n _this12.$('button').click();\n });\n\n this.assertText('Clicked!');\n\n this.runTask(function () {\n component.set('label', undefined);\n });\n\n this.assertText('Click me');\n };\n\n _class2.prototype['@test closure actions does not cause component hooks to fire unnecessarily [GH#14305] [GH#14654]'] = function (assert) {\n var _this14 = this;\n\n var clicked = 0;\n var didReceiveAttrsFired = 0;\n\n var ClickMeComponent = _helpers.Component.extend({\n tagName: 'button',\n\n click: function () {\n this.get('onClick').call(undefined, ++clicked);\n },\n didReceiveAttrs: function () {\n didReceiveAttrsFired++;\n }\n });\n\n this.registerComponent('click-me', {\n ComponentClass: ClickMeComponent\n });\n\n var outer = void 0;\n\n var OuterComponent = _helpers.Component.extend({\n clicked: 0,\n\n actions: {\n 'on-click': function () {\n this.incrementProperty('clicked');\n }\n },\n\n init: function () {\n var _this13 = this;\n\n this._super();\n outer = this;\n this.set('onClick', function () {\n return _this13.incrementProperty('clicked');\n });\n }\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: (0, _abstractTestCase.strip)(_templateObject)\n });\n\n this.render('{{outer-component foo=foo}}', { foo: 1 });\n\n this.assertText('clicked: 0; foo: 1');\n\n assert.equal(didReceiveAttrsFired, 3);\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n this.assertText('clicked: 0; foo: 1');\n\n assert.equal(didReceiveAttrsFired, 3);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'foo', 2);\n });\n\n this.assertText('clicked: 0; foo: 2');\n\n assert.equal(didReceiveAttrsFired, 3);\n\n this.runTask(function () {\n return _this14.$('#string-action').click();\n });\n\n this.assertText('clicked: 1; foo: 2');\n\n assert.equal(didReceiveAttrsFired, 3);\n\n this.runTask(function () {\n return _this14.$('#function-action').click();\n });\n\n this.assertText('clicked: 2; foo: 2');\n\n assert.equal(didReceiveAttrsFired, 3);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(outer, 'onClick', function () {\n outer.incrementProperty('clicked');\n });\n });\n\n this.assertText('clicked: 2; foo: 2');\n\n assert.equal(didReceiveAttrsFired, 3);\n\n this.runTask(function () {\n return _this14.$('#function-action').click();\n });\n\n this.assertText('clicked: 3; foo: 2');\n\n assert.equal(didReceiveAttrsFired, 3);\n\n this.runTask(function () {\n return _this14.$('#mut-action').click();\n });\n\n this.assertText('clicked: 4; foo: 2');\n\n assert.equal(didReceiveAttrsFired, 3);\n };\n\n return _class2;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/concat-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-metal'], function (_emberBabel, _testCase, _emberMetal) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{concat}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test it concats static arguments'] = function () {\n this.render('{{concat \"foo\" \" \" \"bar\" \" \" \"baz\"}}');\n this.assertText('foo bar baz');\n };\n\n _class.prototype['@test it updates for bound arguments'] = function () {\n var _this2 = this;\n\n this.render('{{concat model.first model.second}}', {\n model: { first: 'one', second: 'two' }\n });\n\n this.assertText('onetwo');\n\n this.runTask(function () {\n return _this2.rerender();\n });\n\n this.assertText('onetwo');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'model.first', 'three');\n });\n\n this.assertText('threetwo');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'model.second', 'four');\n });\n\n this.assertText('threefour');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'model', { first: 'one', second: 'two' });\n });\n\n this.assertText('onetwo');\n };\n\n _class.prototype['@test it can be used as a sub-expression'] = function () {\n var _this3 = this;\n\n this.render('{{concat (concat model.first model.second) (concat model.third model.fourth)}}', {\n model: {\n first: 'one',\n second: 'two',\n third: 'three',\n fourth: 'four'\n }\n });\n\n this.assertText('onetwothreefour');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('onetwothreefour');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'model.first', 'five');\n });\n\n this.assertText('fivetwothreefour');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this3.context, 'model.second', 'six');\n (0, _emberMetal.set)(_this3.context, 'model.third', 'seven');\n });\n\n this.assertText('fivesixsevenfour');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this3.context, 'model', {\n first: 'one',\n second: 'two',\n third: 'three',\n fourth: 'four'\n });\n });\n\n this.assertText('onetwothreefour');\n };\n\n _class.prototype['@test it can be used as input for other helpers'] = function () {\n var _this4 = this;\n\n this.registerHelper('x-eq', function (_ref) {\n var actual = _ref[0],\n expected = _ref[1];\n return actual === expected;\n });\n\n this.render('{{#if (x-eq (concat model.first model.second) \"onetwo\")}}Truthy!{{else}}False{{/if}}', {\n model: {\n first: 'one',\n second: 'two'\n }\n });\n\n this.assertText('Truthy!');\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assertText('Truthy!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'model.first', 'three');\n });\n\n this.assertText('False');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'model', { first: 'one', second: 'two' });\n });\n\n this.assertText('Truthy!');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/custom-helper-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'internal-test-helpers', 'ember-metal'], function (_emberBabel, _testCase, _internalTestHelpers, _emberMetal) {\n 'use strict';\n\n var HelperMutatingArgsTests;\n (0, _testCase.moduleFor)('Helpers test: custom helpers', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test it cannot override built-in syntax'] = function () {\n var _this2 = this;\n\n this.registerHelper('if', function () {\n return 'Nope';\n });\n expectAssertion(function () {\n _this2.render('{{if foo \\'LOL\\'}}', { foo: true });\n }, /You attempted to overwrite the built-in helper \\\"if\\\" which is not allowed. Please rename the helper./);\n };\n\n _class.prototype['@test it can resolve custom simple helpers with or without dashes'] = function () {\n var _this3 = this;\n\n this.registerHelper('hello', function () {\n return 'hello';\n });\n this.registerHelper('hello-world', function () {\n return 'hello world';\n });\n\n this.render('{{hello}} | {{hello-world}}');\n\n this.assertText('hello | hello world');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('hello | hello world');\n };\n\n _class.prototype['@test it does not resolve helpers with a `.` (period)'] = function () {\n var _this4 = this;\n\n this.registerHelper('hello.world', function () {\n return 'hello world';\n });\n\n this.render('{{hello.world}}', {\n hello: {\n world: ''\n }\n });\n\n this.assertText('');\n\n this.assertStableRerender();\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'hello', { world: 'hello world!' });\n });\n\n this.assertText('hello world!');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this4.context, 'hello', {\n world: ''\n });\n });\n\n this.assertText('');\n };\n\n _class.prototype['@test it can resolve custom class-based helpers with or without dashes'] = function () {\n var _this5 = this;\n\n this.registerHelper('hello', {\n compute: function () {\n return 'hello';\n }\n });\n\n this.registerHelper('hello-world', {\n compute: function () {\n return 'hello world';\n }\n });\n\n this.render('{{hello}} | {{hello-world}}');\n\n this.assertText('hello | hello world');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertText('hello | hello world');\n };\n\n _class.prototype['@test throws if `this._super` is not called from `init`'] = function () {\n var _this6 = this;\n\n this.registerHelper('hello-world', {\n init: function () {}\n });\n\n expectAssertion(function () {\n _this6.render('{{hello-world}}');\n }, /You must call `this._super\\(...arguments\\);` when overriding `init` on a framework object. Please update .* to call `this._super\\(...arguments\\);` from `init`./);\n };\n\n _class.prototype['@test class-based helper can recompute a new value'] = function (assert) {\n var _this7 = this;\n\n var destroyCount = 0;\n var computeCount = 0;\n var helper = void 0;\n\n this.registerHelper('hello-world', {\n init: function () {\n this._super.apply(this, arguments);\n helper = this;\n },\n compute: function () {\n return ++computeCount;\n },\n destroy: function () {\n destroyCount++;\n this._super();\n }\n });\n\n this.render('{{hello-world}}');\n\n this.assertText('1');\n\n this.runTask(function () {\n return _this7.rerender();\n });\n\n this.assertText('1');\n\n this.runTask(function () {\n return helper.recompute();\n });\n\n this.assertText('2');\n\n assert.strictEqual(destroyCount, 0, 'destroy is not called on recomputation');\n };\n\n _class.prototype['@test class-based helper with static arguments can recompute a new value'] = function (assert) {\n var _this8 = this;\n\n var destroyCount = 0;\n var computeCount = 0;\n var helper = void 0;\n\n this.registerHelper('hello-world', {\n init: function () {\n this._super.apply(this, arguments);\n helper = this;\n },\n compute: function () {\n return ++computeCount;\n },\n destroy: function () {\n destroyCount++;\n this._super();\n }\n });\n\n this.render('{{hello-world \"whut\"}}');\n\n this.assertText('1');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('1');\n\n this.runTask(function () {\n return helper.recompute();\n });\n\n this.assertText('2');\n\n assert.strictEqual(destroyCount, 0, 'destroy is not called on recomputation');\n };\n\n _class.prototype['@test helper params can be returned'] = function () {\n this.registerHelper('hello-world', function (values) {\n return values;\n });\n\n this.render('{{#each (hello-world model) as |item|}}({{item}}){{/each}}', {\n model: ['bob']\n });\n\n this.assertText('(bob)');\n };\n\n _class.prototype['@test helper hash can be returned'] = function () {\n this.registerHelper('hello-world', function (_, hash) {\n return hash.model;\n });\n\n this.render('{{get (hello-world model=model) \\'name\\'}}', {\n model: { name: 'bob' }\n });\n\n this.assertText('bob');\n };\n\n _class.prototype['@test simple helper is called for param changes'] = function (assert) {\n var _this9 = this;\n\n var computeCount = 0;\n\n this.registerHelper('hello-world', function (_ref) {\n var value = _ref[0];\n\n computeCount++;\n return value + '-value';\n });\n\n this.render('{{hello-world model.name}}', {\n model: { name: 'bob' }\n });\n\n this.assertText('bob-value');\n\n assert.strictEqual(computeCount, 1, 'compute is called exactly 1 time');\n\n this.runTask(function () {\n return _this9.rerender();\n });\n\n this.assertText('bob-value');\n\n assert.strictEqual(computeCount, 1, 'compute is called exactly 1 time');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'model.name', 'sal');\n });\n\n this.assertText('sal-value');\n\n assert.strictEqual(computeCount, 2, 'compute is called exactly 2 times');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'model', { name: 'bob' });\n });\n\n this.assertText('bob-value');\n\n assert.strictEqual(computeCount, 3, 'compute is called exactly 3 times');\n };\n\n _class.prototype['@test class-based helper compute is called for param changes'] = function (assert) {\n var _this10 = this;\n\n var createCount = 0;\n var computeCount = 0;\n\n this.registerHelper('hello-world', {\n init: function () {\n this._super.apply(this, arguments);\n createCount++;\n },\n compute: function (_ref2) {\n var value = _ref2[0];\n\n computeCount++;\n return value + '-value';\n }\n });\n\n this.render('{{hello-world model.name}}', {\n model: { name: 'bob' }\n });\n\n this.assertText('bob-value');\n\n assert.strictEqual(computeCount, 1, 'compute is called exactly 1 time');\n\n this.runTask(function () {\n return _this10.rerender();\n });\n\n this.assertText('bob-value');\n\n assert.strictEqual(computeCount, 1, 'compute is called exactly 1 time');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'model.name', 'sal');\n });\n\n this.assertText('sal-value');\n\n assert.strictEqual(computeCount, 2, 'compute is called exactly 2 times');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'model', { name: 'bob' });\n });\n\n this.assertText('bob-value');\n\n assert.strictEqual(computeCount, 3, 'compute is called exactly 3 times');\n assert.strictEqual(createCount, 1, 'helper is only created once');\n };\n\n _class.prototype['@test simple helper receives params, hash'] = function () {\n var _this11 = this;\n\n this.registerHelper('hello-world', function (_params, _hash) {\n return 'params: ' + JSON.stringify(_params) + ', hash: ' + JSON.stringify(_hash);\n });\n\n this.render('{{hello-world model.name \"rich\" first=model.age last=\"sam\"}}', {\n model: {\n name: 'bob',\n age: 42\n }\n });\n\n this.assertText('params: [\"bob\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return _this11.rerender();\n });\n\n this.assertText('params: [\"bob\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'model.name', 'sal');\n });\n\n this.assertText('params: [\"sal\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'model.age', 28);\n });\n\n this.assertText('params: [\"sal\",\"rich\"], hash: {\"first\":28,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'model', { name: 'bob', age: 42 });\n });\n\n this.assertText('params: [\"bob\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n };\n\n _class.prototype['@test class-based helper receives params, hash'] = function () {\n var _this12 = this;\n\n this.registerHelper('hello-world', {\n compute: function (_params, _hash) {\n return 'params: ' + JSON.stringify(_params) + ', hash: ' + JSON.stringify(_hash);\n }\n });\n\n this.render('{{hello-world model.name \"rich\" first=model.age last=\"sam\"}}', {\n model: {\n name: 'bob',\n age: 42\n }\n });\n\n this.assertText('params: [\"bob\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return _this12.rerender();\n });\n\n this.assertText('params: [\"bob\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'model.name', 'sal');\n });\n\n this.assertText('params: [\"sal\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'model.age', 28);\n });\n\n this.assertText('params: [\"sal\",\"rich\"], hash: {\"first\":28,\"last\":\"sam\"}');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'model', { name: 'bob', age: 42 });\n });\n\n this.assertText('params: [\"bob\",\"rich\"], hash: {\"first\":42,\"last\":\"sam\"}');\n };\n\n _class.prototype['@test class-based helper usable in subexpressions'] = function () {\n var _this13 = this;\n\n this.registerHelper('join-words', {\n compute: function (params) {\n return params.join(' ');\n }\n });\n\n this.render('{{join-words \"Who\"\\n (join-words \"overcomes\" \"by\")\\n model.reason\\n (join-words (join-words \"hath overcome but\" \"half\"))\\n (join-words \"his\" (join-words \"foe\"))}}', { model: { reason: 'force' } });\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n\n this.runTask(function () {\n return _this13.rerender();\n });\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'model.reason', 'Nickleback');\n });\n\n this.assertText('Who overcomes by Nickleback hath overcome but half his foe');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'model', { reason: 'force' });\n });\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n };\n\n _class.prototype['@test parameterless helper is usable in subexpressions'] = function () {\n var _this14 = this;\n\n this.registerHelper('should-show', function () {\n return true;\n });\n\n this.render('{{#if (should-show)}}true{{/if}}');\n\n this.assertText('true');\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n this.assertText('true');\n };\n\n _class.prototype['@test parameterless helper is usable in attributes'] = function () {\n var _this15 = this;\n\n this.registerHelper('foo-bar', function () {\n return 'baz';\n });\n\n this.render('
');\n\n this.assertHTML('
');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertHTML('
');\n };\n\n _class.prototype['@test simple helper not usable with a block'] = function () {\n var _this16 = this;\n\n this.registerHelper('some-helper', function () {});\n\n expectAssertion(function () {\n _this16.render('{{#some-helper}}{{/some-helper}}');\n }, /Helpers may not be used in the block form/);\n };\n\n _class.prototype['@test class-based helper not usable with a block'] = function () {\n var _this17 = this;\n\n this.registerHelper('some-helper', {\n compute: function () {}\n });\n\n expectAssertion(function () {\n _this17.render('{{#some-helper}}{{/some-helper}}');\n }, /Helpers may not be used in the block form/);\n };\n\n _class.prototype['@test simple helper not usable within element'] = function () {\n var _this18 = this;\n\n this.registerHelper('some-helper', function () {});\n\n this.assert.throws(function () {\n _this18.render('
');\n }, /Compile Error some-helper is not a modifier: Helpers may not be used in the element form/);\n };\n\n _class.prototype['@test class-based helper not usable within element'] = function () {\n var _this19 = this;\n\n this.registerHelper('some-helper', {\n compute: function () {}\n });\n\n this.assert.throws(function () {\n _this19.render('
');\n }, /Compile Error some-helper is not a modifier: Helpers may not be used in the element form/);\n };\n\n _class.prototype['@test class-based helper is torn down'] = function (assert) {\n var destroyCalled = 0;\n\n this.registerHelper('some-helper', {\n destroy: function () {\n destroyCalled++;\n this._super.apply(this, arguments);\n },\n compute: function () {\n return 'must define a compute';\n }\n });\n\n this.render('{{some-helper}}');\n\n (0, _internalTestHelpers.runDestroy)(this.component);\n\n assert.strictEqual(destroyCalled, 1, 'destroy called once');\n };\n\n _class.prototype['@test class-based helper used in subexpression can recompute'] = function () {\n var _this20 = this;\n\n var helper = void 0;\n var phrase = 'overcomes by';\n\n this.registerHelper('dynamic-segment', {\n init: function () {\n this._super.apply(this, arguments);\n helper = this;\n },\n compute: function () {\n return phrase;\n }\n });\n\n this.registerHelper('join-words', {\n compute: function (params) {\n return params.join(' ');\n }\n });\n\n this.render('{{join-words \"Who\"\\n (dynamic-segment)\\n \"force\"\\n (join-words (join-words \"hath overcome but\" \"half\"))\\n (join-words \"his\" (join-words \"foe\"))}}');\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n\n this.runTask(function () {\n return _this20.rerender();\n });\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n\n phrase = 'believes his';\n\n this.runTask(function () {\n return helper.recompute();\n });\n\n this.assertText('Who believes his force hath overcome but half his foe');\n\n phrase = 'overcomes by';\n\n this.runTask(function () {\n return helper.recompute();\n });\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n };\n\n _class.prototype['@test class-based helper used in subexpression can recompute component'] = function () {\n var _this21 = this;\n\n var helper = void 0;\n var phrase = 'overcomes by';\n\n this.registerHelper('dynamic-segment', {\n init: function () {\n this._super.apply(this, arguments);\n helper = this;\n },\n compute: function () {\n return phrase;\n }\n });\n\n this.registerHelper('join-words', {\n compute: function (params) {\n return params.join(' ');\n }\n });\n\n this.registerComponent('some-component', {\n template: '{{first}} {{second}} {{third}} {{fourth}} {{fifth}}'\n });\n\n this.render('{{some-component first=\"Who\"\\n second=(dynamic-segment)\\n third=\"force\"\\n fourth=(join-words (join-words \"hath overcome but\" \"half\"))\\n fifth=(join-words \"his\" (join-words \"foe\"))}}');\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n\n this.runTask(function () {\n return _this21.rerender();\n });\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n\n phrase = 'believes his';\n\n this.runTask(function () {\n return helper.recompute();\n });\n\n this.assertText('Who believes his force hath overcome but half his foe');\n\n phrase = 'overcomes by';\n\n this.runTask(function () {\n return helper.recompute();\n });\n\n this.assertText('Who overcomes by force hath overcome but half his foe');\n };\n\n _class.prototype['@test class-based helper used in subexpression is destroyed'] = function (assert) {\n var destroyCount = 0;\n\n this.registerHelper('dynamic-segment', {\n phrase: 'overcomes by',\n init: function () {\n this._super.apply(this, arguments);\n },\n compute: function () {\n return this.phrase;\n },\n destroy: function () {\n destroyCount++;\n this._super.apply(this, arguments);\n }\n });\n\n this.registerHelper('join-words', {\n compute: function (params) {\n return params.join(' ');\n }\n });\n\n this.render('{{join-words \"Who\"\\n (dynamic-segment)\\n \"force\"\\n (join-words (join-words \"hath overcome but\" \"half\"))\\n (join-words \"his\" (join-words \"foe\"))}}');\n\n (0, _internalTestHelpers.runDestroy)(this.component);\n\n assert.equal(destroyCount, 1, 'destroy is called after a view is destroyed');\n };\n\n _class.prototype['@test simple helper can be invoked manually via `owner.factoryFor(...).create().compute()'] = function (assert) {\n this.registerHelper('some-helper', function () {\n assert.ok(true, 'some-helper helper invoked');\n return 'lolol';\n });\n\n var instance = this.owner.factoryFor('helper:some-helper').create();\n\n assert.equal(typeof instance.compute, 'function', 'expected instance.compute to be present');\n assert.equal(instance.compute(), 'lolol', 'can invoke `.compute`');\n };\n\n _class.prototype['@test class-based helper can be invoked manually via `owner.factoryFor(...).create().compute()'] = function (assert) {\n this.registerHelper('some-helper', {\n compute: function () {\n assert.ok(true, 'some-helper helper invoked');\n return 'lolol';\n }\n });\n\n var instance = this.owner.factoryFor('helper:some-helper').create();\n\n assert.equal(typeof instance.compute, 'function', 'expected instance.compute to be present');\n assert.equal(instance.compute(), 'lolol', 'can invoke `.compute`');\n };\n\n return _class;\n }(_testCase.RenderingTest)); /* globals EmberDev */\n\n if (!EmberDev.runningProdBuild) {\n HelperMutatingArgsTests = function (_RenderingTest2) {\n (0, _emberBabel.inherits)(HelperMutatingArgsTests, _RenderingTest2);\n\n function HelperMutatingArgsTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest2.apply(this, arguments));\n }\n\n HelperMutatingArgsTests.prototype.buildCompute = function () {\n var _this23 = this;\n\n return function (params, hash) {\n _this23.assert.throws(function () {\n params.push('foo');\n\n // cannot assert error message as it varies by platform\n });\n\n _this23.assert.throws(function () {\n hash.foo = 'bar';\n\n // cannot assert error message as it varies by platform\n });\n\n _this23.assert.throws(function () {\n hash.someUnusedHashProperty = 'bar';\n\n // cannot assert error message as it varies by platform\n });\n };\n };\n\n HelperMutatingArgsTests.prototype['@test cannot mutate params - no positional specified / named specified'] = function () {\n this.render('{{test-helper foo=bar}}', { bar: 'derp' });\n };\n\n HelperMutatingArgsTests.prototype['@test cannot mutate params - positional specified / no named specified'] = function () {\n this.render('{{test-helper bar}}', { bar: 'derp' });\n };\n\n HelperMutatingArgsTests.prototype['@test cannot mutate params - positional specified / named specified'] = function () {\n this.render('{{test-helper bar foo=qux}}', { bar: 'derp', qux: 'baz' });\n };\n\n HelperMutatingArgsTests.prototype['@test cannot mutate params - no positional specified / no named specified'] = function () {\n this.render('{{test-helper}}', { bar: 'derp', qux: 'baz' });\n };\n\n return HelperMutatingArgsTests;\n }(_testCase.RenderingTest);\n\n\n (0, _testCase.moduleFor)('Helpers test: mutation triggers errors - class based helper', function (_HelperMutatingArgsTe) {\n (0, _emberBabel.inherits)(_class2, _HelperMutatingArgsTe);\n\n function _class2() {\n\n var _this24 = (0, _emberBabel.possibleConstructorReturn)(this, _HelperMutatingArgsTe.apply(this, arguments));\n\n var compute = _this24.buildCompute();\n\n _this24.registerHelper('test-helper', {\n compute: compute\n });\n return _this24;\n }\n\n return _class2;\n }(HelperMutatingArgsTests));\n\n (0, _testCase.moduleFor)('Helpers test: mutation triggers errors - simple helper', function (_HelperMutatingArgsTe2) {\n (0, _emberBabel.inherits)(_class3, _HelperMutatingArgsTe2);\n\n function _class3() {\n\n var _this25 = (0, _emberBabel.possibleConstructorReturn)(this, _HelperMutatingArgsTe2.apply(this, arguments));\n\n var compute = _this25.buildCompute();\n\n _this25.registerHelper('test-helper', compute);\n return _this25;\n }\n\n return _class3;\n }(HelperMutatingArgsTests));\n }\n});","enifed('ember-glimmer/tests/integration/helpers/element-action-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer/tests/utils/helpers', 'ember-metal', '@ember/instrumentation', 'ember-runtime', 'ember-views'], function (_emberBabel, _testCase, _abstractTestCase, _helpers, _emberMetal, _instrumentation, _emberRuntime, _emberViews) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#inner-component}}\\n
Wat me! \\n {{/inner-component}}\\n '], ['\\n {{#inner-component}}\\n
Wat me! \\n {{/inner-component}}\\n ']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#target-component as |parent|}}\\n {{other-component anotherTarget=parent}}\\n {{/target-component}}\\n '], ['\\n {{#target-component as |parent|}}\\n {{other-component anotherTarget=parent}}\\n {{/target-component}}\\n ']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#target-component as |aTarget|}}\\n
click me \\n {{/target-component}}\\n '], ['\\n {{#target-component as |aTarget|}}\\n
click me \\n {{/target-component}}\\n ']),\n _templateObject4 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n
click me '], ['\\n
click me ']),\n _templateObject5 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#middle-component}}\\n {{inner-component action=\"hey\"}}\\n {{/middle-component}}\\n '], ['\\n {{#middle-component}}\\n {{inner-component action=\"hey\"}}\\n {{/middle-component}}\\n ']),\n _templateObject6 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n
Click Me \\n {{yield}}\\n '], ['\\n
Click Me \\n {{yield}}\\n ']);\n\n function getActionAttributes(element) {\n var attributes = element.attributes,\n i,\n attr;\n var actionAttrs = [];\n\n for (i = 0; i < attributes.length; i++) {\n attr = attributes.item(i);\n\n\n if (attr.name.indexOf('data-ember-action-') === 0) {\n actionAttrs.push(attr.name);\n }\n }\n\n return actionAttrs;\n }\n\n function getActionIds(element) {\n return getActionAttributes(element).map(function (attribute) {\n return attribute.slice('data-ember-action-'.length);\n });\n }\n\n var isIE11 = !window.ActiveXObject && 'ActiveXObject' in window;\n\n (0, _testCase.moduleFor)('Helpers test: element action', function (_RenderingTest2) {\n (0, _emberBabel.inherits)(_class2, _RenderingTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest2.apply(this, arguments));\n }\n\n _class2.prototype['@test it can call an action on its enclosing component'] = function () {\n var _this4 = this;\n\n var fooCallCount = 0;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n foo: function () {\n fooCallCount++;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Click me '\n });\n\n this.render('{{example-component}}');\n\n this.assert.equal(fooCallCount, 0, 'foo has not been called');\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assert.equal(fooCallCount, 0, 'foo has not been called');\n\n this.runTask(function () {\n _this4.$('button').click();\n });\n\n this.assert.equal(fooCallCount, 1, 'foo has been called 1 time');\n\n this.runTask(function () {\n _this4.$('button').click();\n });\n\n this.assert.equal(fooCallCount, 2, 'foo has been called 2 times');\n };\n\n _class2.prototype['@test it can call an action with parameters'] = function () {\n var _this5 = this;\n\n var fooArgs = [];\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n member: 'a',\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n actions: {\n foo: function (thing) {\n fooArgs.push(thing);\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Click me '\n });\n\n this.render('{{example-component}}');\n\n this.assert.deepEqual(fooArgs, [], 'foo has not been called');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assert.deepEqual(fooArgs, [], 'foo has not been called');\n\n this.runTask(function () {\n _this5.$('button').click();\n });\n\n this.assert.deepEqual(fooArgs, ['a'], 'foo has not been called');\n\n this.runTask(function () {\n component.set('member', 'b');\n });\n\n this.runTask(function () {\n _this5.$('button').click();\n });\n\n this.assert.deepEqual(fooArgs, ['a', 'b'], 'foo has been called with an updated value');\n };\n\n _class2.prototype['@test it should output a marker attribute with a guid'] = function () {\n this.render('
me the money ');\n\n var button = this.$('button');\n\n var attributes = getActionAttributes(button[0]);\n\n this.assert.ok(button.attr('data-ember-action').match(''), 'An empty data-ember-action attribute was added');\n this.assert.ok(attributes[0].match(/data-ember-action-\\d+/), 'A data-ember-action-xyz attribute with a guid was added');\n };\n\n _class2.prototype['@test it should allow alternative events to be handled'] = function () {\n var _this6 = this;\n\n var showCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n show: function () {\n showCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
'\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this6.$('#show').trigger('mouseup');\n });\n\n this.assert.ok(showCalled, 'show action was called on mouseUp');\n };\n\n _class2.prototype['@test inside a yield, the target points at the original target'] = function () {\n var _this7 = this;\n\n var targetWatted = false;\n var innerWatted = false;\n\n var TargetComponent = _helpers.Component.extend({\n actions: {\n wat: function () {\n targetWatted = true;\n }\n }\n });\n\n var InnerComponent = _helpers.Component.extend({\n actions: {\n wat: function () {\n innerWatted = true;\n }\n }\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: '{{yield}}'\n });\n\n this.registerComponent('target-component', {\n ComponentClass: TargetComponent,\n template: (0, _abstractTestCase.strip)(_templateObject)\n });\n\n this.render('{{target-component}}');\n\n this.runTask(function () {\n _this7.$('button').click();\n });\n\n this.assert.ok(targetWatted, 'the correct target was watted');\n this.assert.notOk(innerWatted, 'the inner target was not watted');\n };\n\n _class2.prototype['@test it should allow a target to be specified'] = function () {\n var _this8 = this;\n\n var targetWatted = false;\n\n var TargetComponent = _helpers.Component.extend({\n actions: {\n wat: function () {\n targetWatted = true;\n }\n }\n });\n\n var OtherComponent = _helpers.Component.extend({});\n\n this.registerComponent('target-component', {\n ComponentClass: TargetComponent,\n template: '{{yield this}}'\n });\n\n this.registerComponent('other-component', {\n ComponentClass: OtherComponent,\n template: '
Wat? '\n });\n\n this.render((0, _abstractTestCase.strip)(_templateObject2));\n\n this.runTask(function () {\n _this8.$('a').click();\n });\n\n this.assert.equal(targetWatted, true, 'the specified target was watted');\n };\n\n _class2.prototype['@test it should lazily evaluate the target'] = function () {\n var _this9 = this;\n\n var firstEdit = 0;\n var secondEdit = 0;\n var component = void 0;\n\n var second = {\n edit: function () {\n secondEdit++;\n }\n };\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n theTarget: {\n edit: function () {\n firstEdit++;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Edit '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this9.$('a').click();\n });\n\n this.assert.equal(firstEdit, 1);\n\n this.runTask(function () {\n (0, _emberMetal.set)(component, 'theTarget', second);\n });\n\n this.runTask(function () {\n _this9.$('a').click();\n });\n\n this.assert.equal(firstEdit, 1);\n this.assert.equal(secondEdit, 1);\n };\n\n _class2.prototype['@test it should register an event handler'] = function () {\n var _this10 = this;\n\n var editHandlerWasCalled = false;\n var shortcutHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n },\n shortcut: function () {\n shortcutHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me click me too
'\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this10.$('a[data-ember-action]').trigger('click', { altKey: true });\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the event handler was called');\n\n this.runTask(function () {\n _this10.$('div[data-ember-action]').trigger('click', { ctrlKey: true });\n });\n\n this.assert.equal(shortcutHandlerWasCalled, true, 'the \"any\" shortcut\\'s event handler was called');\n };\n\n _class2.prototype['@test it handles whitelisted bound modifier keys'] = function () {\n var _this11 = this;\n\n var editHandlerWasCalled = false;\n var shortcutHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n altKey: 'alt',\n anyKey: 'any',\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n },\n shortcut: function () {\n shortcutHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me click me too
'\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this11.$('a[data-ember-action]').trigger('click', { altKey: true });\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the event handler was called');\n\n this.runTask(function () {\n _this11.$('div[data-ember-action]').trigger('click', { ctrlKey: true });\n });\n\n this.assert.equal(shortcutHandlerWasCalled, true, 'the \"any\" shortcut\\'s event handler was called');\n };\n\n _class2.prototype['@test it handles whitelisted bound modifier keys with current value'] = function () {\n var _this12 = this;\n\n var editHandlerWasCalled = false;\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n acceptedKeys: 'alt',\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this12.$('a[data-ember-action]').trigger('click', { altKey: true });\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the event handler was called');\n\n editHandlerWasCalled = false;\n\n this.runTask(function () {\n component.set('acceptedKeys', '');\n });\n\n this.runTask(function () {\n _this12.$('div[data-ember-action]').click();\n });\n\n this.assert.equal(editHandlerWasCalled, false, 'the event handler was not called');\n };\n\n _class2.prototype['@test should be able to use action more than once for the same event within a view'] = function () {\n var _this13 = this;\n\n var editHandlerWasCalled = false;\n var deleteHandlerWasCalled = false;\n var originalHandlerWasCalled = false;\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n },\n delete: function () {\n deleteHandlerWasCalled = true;\n }\n },\n click: function () {\n originalHandlerWasCalled = true;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
edit delete '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this13.$('#edit').click();\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the edit action was called');\n this.assert.equal(deleteHandlerWasCalled, false, 'the delete action was not called');\n this.assert.equal(originalHandlerWasCalled, true, 'the click handler was called (due to bubbling)');\n\n editHandlerWasCalled = deleteHandlerWasCalled = originalHandlerWasCalled = false;\n\n this.runTask(function () {\n _this13.$('#delete').click();\n });\n\n this.assert.equal(editHandlerWasCalled, false, 'the edit action was not called');\n this.assert.equal(deleteHandlerWasCalled, true, 'the delete action was called');\n this.assert.equal(originalHandlerWasCalled, true, 'the click handler was called (due to bubbling)');\n\n editHandlerWasCalled = deleteHandlerWasCalled = originalHandlerWasCalled = false;\n\n this.runTask(function () {\n _this13.wrap(component.element).click();\n });\n\n this.assert.equal(editHandlerWasCalled, false, 'the edit action was not called');\n this.assert.equal(deleteHandlerWasCalled, false, 'the delete action was not called');\n this.assert.equal(originalHandlerWasCalled, true, 'the click handler was called');\n };\n\n _class2.prototype['@test the event should not bubble if `bubbles=false` is passed'] = function () {\n var _this14 = this;\n\n var editHandlerWasCalled = false;\n var deleteHandlerWasCalled = false;\n var originalHandlerWasCalled = false;\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n },\n delete: function () {\n deleteHandlerWasCalled = true;\n }\n },\n click: function () {\n originalHandlerWasCalled = true;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
edit delete '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this14.$('#edit').click();\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the edit action was called');\n this.assert.equal(deleteHandlerWasCalled, false, 'the delete action was not called');\n this.assert.equal(originalHandlerWasCalled, false, 'the click handler was not called');\n\n editHandlerWasCalled = deleteHandlerWasCalled = originalHandlerWasCalled = false;\n\n this.runTask(function () {\n _this14.$('#delete').click();\n });\n\n this.assert.equal(editHandlerWasCalled, false, 'the edit action was not called');\n this.assert.equal(deleteHandlerWasCalled, true, 'the delete action was called');\n this.assert.equal(originalHandlerWasCalled, false, 'the click handler was not called');\n\n editHandlerWasCalled = deleteHandlerWasCalled = originalHandlerWasCalled = false;\n\n this.runTask(function () {\n _this14.wrap(component.element).click();\n });\n\n this.assert.equal(editHandlerWasCalled, false, 'the edit action was not called');\n this.assert.equal(deleteHandlerWasCalled, false, 'the delete action was not called');\n this.assert.equal(originalHandlerWasCalled, true, 'the click handler was called');\n };\n\n _class2.prototype['@test the event should not bubble if `bubbles=false` is passed bound'] = function () {\n var _this15 = this;\n\n var editHandlerWasCalled = false;\n var deleteHandlerWasCalled = false;\n var originalHandlerWasCalled = false;\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n isFalse: false,\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n },\n delete: function () {\n deleteHandlerWasCalled = true;\n }\n },\n click: function () {\n originalHandlerWasCalled = true;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
edit delete '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this15.$('#edit').click();\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the edit action was called');\n this.assert.equal(deleteHandlerWasCalled, false, 'the delete action was not called');\n this.assert.equal(originalHandlerWasCalled, false, 'the click handler was not called');\n\n editHandlerWasCalled = deleteHandlerWasCalled = originalHandlerWasCalled = false;\n\n this.runTask(function () {\n _this15.$('#delete').click();\n });\n\n this.assert.equal(editHandlerWasCalled, false, 'the edit action was not called');\n this.assert.equal(deleteHandlerWasCalled, true, 'the delete action was called');\n this.assert.equal(originalHandlerWasCalled, false, 'the click handler was not called');\n\n editHandlerWasCalled = deleteHandlerWasCalled = originalHandlerWasCalled = false;\n\n this.runTask(function () {\n _this15.wrap(component.element).click();\n });\n\n this.assert.equal(editHandlerWasCalled, false, 'the edit action was not called');\n this.assert.equal(deleteHandlerWasCalled, false, 'the delete action was not called');\n this.assert.equal(originalHandlerWasCalled, true, 'the click handler was called');\n };\n\n _class2.prototype['@test the bubbling depends on the bound parameter'] = function () {\n var _this16 = this;\n\n var editHandlerWasCalled = false;\n var originalHandlerWasCalled = false;\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n shouldBubble: false,\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n },\n click: function () {\n originalHandlerWasCalled = true;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
edit '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this16.$('#edit').click();\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the edit action was called');\n this.assert.equal(originalHandlerWasCalled, false, 'the click handler was not called');\n\n editHandlerWasCalled = originalHandlerWasCalled = false;\n\n this.runTask(function () {\n component.set('shouldBubble', true);\n });\n\n this.runTask(function () {\n _this16.$('#edit').click();\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the edit action was called');\n this.assert.equal(originalHandlerWasCalled, true, 'the click handler was called');\n };\n\n _class2.prototype['@test it should work properly in an #each block'] = function () {\n var _this17 = this;\n\n var editHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n items: (0, _emberRuntime.A)([1, 2, 3, 4]),\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '{{#each items as |item|}}
click me {{/each}}'\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this17.$('a').click();\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the event handler was called');\n };\n\n _class2.prototype['@test it should work properly in a {{#with foo as |bar|}} block'] = function () {\n var _this18 = this;\n\n var editHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n something: { ohai: 'there' },\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '{{#with something as |somethingElse|}}
click me {{/with}}'\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this18.$('a').click();\n });\n\n this.assert.equal(editHandlerWasCalled, true, 'the event handler was called');\n };\n\n _class2.prototype['@test it should unregister event handlers when an element action is removed'] = function (assert) {\n var _this19 = this;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n edit: function () {}\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '{{#if isActive}}
click me {{/if}}'\n });\n\n this.render('{{example-component isActive=isActive}}', {\n isActive: true\n });\n\n assert.equal(this.$('a[data-ember-action]').length, 1, 'The element is rendered');\n\n var actionId = void 0;\n\n actionId = getActionIds(this.$('a[data-ember-action]')[0])[0];\n\n assert.ok(_emberViews.ActionManager.registeredActions[actionId], 'An action is registered');\n\n this.runTask(function () {\n return _this19.rerender();\n });\n\n assert.equal(this.$('a[data-ember-action]').length, 1, 'The element is still present');\n\n assert.ok(_emberViews.ActionManager.registeredActions[actionId], 'The action is still registered');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this19.context, 'isActive', false);\n });\n\n assert.strictEqual(this.$('a[data-ember-action]').length, 0, 'The element is removed');\n\n assert.ok(!_emberViews.ActionManager.registeredActions[actionId], 'The action is unregistered');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this19.context, 'isActive', true);\n });\n\n assert.equal(this.$('a[data-ember-action]').length, 1, 'The element is rendered');\n\n actionId = getActionIds(this.$('a[data-ember-action]')[0])[0];\n\n assert.ok(_emberViews.ActionManager.registeredActions[actionId], 'A new action is registered');\n };\n\n _class2.prototype['@test it should capture events from child elements and allow them to trigger the action'] = function () {\n var _this20 = this;\n\n var editHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me
'\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this20.$('button').click();\n });\n\n this.assert.ok(editHandlerWasCalled, 'event on a child target triggered the action of its parent');\n };\n\n _class2.prototype['@test it should allow bubbling of events from action helper to original parent event'] = function () {\n var _this21 = this;\n\n var editHandlerWasCalled = false;\n var originalHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n },\n click: function () {\n originalHandlerWasCalled = true;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this21.$('a').click();\n });\n\n this.assert.ok(editHandlerWasCalled && originalHandlerWasCalled, 'both event handlers were called');\n };\n\n _class2.prototype['@test it should not bubble an event from action helper to original parent event if `bubbles=false` is passed'] = function () {\n var _this22 = this;\n\n var editHandlerWasCalled = false;\n var originalHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n },\n click: function () {\n originalHandlerWasCalled = true;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this22.$('a').click();\n });\n\n this.assert.ok(editHandlerWasCalled, 'the child event handler was called');\n this.assert.notOk(originalHandlerWasCalled, 'the parent handler was not called');\n };\n\n _class2.prototype['@test it should allow \"send\" as the action name (#594)'] = function () {\n var _this23 = this;\n\n var sendHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n send: function () {\n sendHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this23.$('a').click();\n });\n\n this.assert.ok(sendHandlerWasCalled, 'the event handler was called');\n };\n\n _class2.prototype['@test it should send the view, event, and current context to the action'] = function () {\n var _this24 = this;\n\n var passedTarget = void 0;\n var passedContext = void 0;\n var targetThis = void 0;\n\n var TargetComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n targetThis = this;\n },\n\n actions: {\n edit: function (context) {\n passedTarget = this === targetThis;\n passedContext = context;\n }\n }\n });\n\n var aContext = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n aContext = this;\n }\n });\n\n this.registerComponent('target-component', {\n ComponentClass: TargetComponent,\n template: '{{yield this}}'\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: (0, _abstractTestCase.strip)(_templateObject3)\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this24.$('#edit').click();\n });\n\n this.assert.ok(passedTarget, 'the action is called with the target as this');\n this.assert.strictEqual(passedContext, aContext, 'the parameter is passed along');\n };\n\n _class2.prototype['@test it should only trigger actions for the event they were registered on'] = function () {\n var _this25 = this;\n\n var editHandlerWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n edit: function () {\n editHandlerWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this25.$('a').click();\n });\n\n this.assert.ok(editHandlerWasCalled, 'the event handler was called on click');\n\n editHandlerWasCalled = false;\n\n this.runTask(function () {\n _this25.$('a').trigger('mouseover');\n });\n\n this.assert.notOk(editHandlerWasCalled, 'the event handler was not called on mouseover');\n };\n\n _class2.prototype['@test it should allow multiple contexts to be specified'] = function () {\n var _this26 = this;\n\n var passedContexts = void 0;\n var models = [_emberRuntime.Object.create(), _emberRuntime.Object.create()];\n\n var ExampleComponent = _helpers.Component.extend({\n modelA: models[0],\n modelB: models[1],\n actions: {\n edit: function () {\n var _len, args, _key;\n\n for (_len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n passedContexts = args;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this26.$('button').click();\n });\n\n this.assert.deepEqual(passedContexts, models, 'the action was called with the passed contexts');\n };\n\n _class2.prototype['@test it should allow multiple contexts to be specified mixed with string args'] = function () {\n var _this27 = this;\n\n var passedContexts = void 0;\n var model = _emberRuntime.Object.create();\n\n var ExampleComponent = _helpers.Component.extend({\n model: model,\n actions: {\n edit: function () {\n var _len2, args, _key2;\n\n for (_len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n passedContexts = args;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
click me '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this27.$('button').click();\n });\n\n this.assert.deepEqual(passedContexts, ['herp', model], 'the action was called with the passed contexts');\n };\n\n _class2.prototype['@test it should not trigger action with special clicks'] = function () {\n var _this28 = this;\n\n var showCalled = false;\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n actions: {\n show: function () {\n showCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Howdy '\n });\n\n this.render('{{example-component}}');\n\n var assert = this.assert;\n\n var checkClick = function (prop, value, expected) {\n var _this28$wrap$findAll$;\n\n showCalled = false;\n var event = _this28.wrap(component.element).findAll('button').trigger('click', (_this28$wrap$findAll$ = {}, _this28$wrap$findAll$[prop] = value, _this28$wrap$findAll$))[0];\n if (expected) {\n assert.ok(showCalled, 'should call action with ' + prop + ':' + value);\n\n // IE11 does not allow simulated events to have a valid `defaultPrevented`\n if (!isIE11) {\n assert.ok(event.defaultPrevented, 'should prevent default');\n }\n } else {\n assert.notOk(showCalled, 'should not call action with ' + prop + ':' + value);\n assert.notOk(event.defaultPrevented, 'should not prevent default');\n }\n };\n\n checkClick('ctrlKey', true, false);\n checkClick('altKey', true, false);\n checkClick('metaKey', true, false);\n checkClick('shiftKey', true, false);\n\n checkClick('button', 0, true);\n checkClick('button', 1, false);\n checkClick('button', 2, false);\n checkClick('button', 3, false);\n checkClick('button', 4, false);\n };\n\n _class2.prototype['@test it can trigger actions for keyboard events'] = function () {\n var _this29 = this;\n\n var showCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n show: function () {\n showCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
'\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this29.$('input').trigger('keyup', { char: 'a', which: 65 });\n });\n\n this.assert.ok(showCalled, 'the action was called with keyup');\n };\n\n _class2.prototype['@test a quoteless parameter should allow dynamic lookup of the actionName'] = function () {\n var _this30 = this;\n\n var lastAction = void 0;\n var actionOrder = [];\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n hookMeUp: 'rock',\n actions: {\n rock: function () {\n lastAction = 'rock';\n actionOrder.push('rock');\n },\n paper: function () {\n lastAction = 'paper';\n actionOrder.push('paper');\n },\n scissors: function () {\n lastAction = 'scissors';\n actionOrder.push('scissors');\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Whistle tips go woop woooop '\n });\n\n this.render('{{example-component}}');\n\n var test = this;\n\n var testBoundAction = function (propertyValue) {\n test.runTask(function () {\n component.set('hookMeUp', propertyValue);\n });\n\n test.runTask(function () {\n _this30.wrap(component.element).findAll('#bound-param').click();\n });\n\n test.assert.ok(lastAction, propertyValue, 'lastAction set to ' + propertyValue);\n };\n\n testBoundAction('rock');\n testBoundAction('paper');\n testBoundAction('scissors');\n\n this.assert.deepEqual(actionOrder, ['rock', 'paper', 'scissors'], 'action name was looked up properly');\n };\n\n _class2.prototype['@test a quoteless string parameter should resolve actionName, including path'] = function () {\n var _this31 = this;\n\n var lastAction = void 0;\n var actionOrder = [];\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n allactions: (0, _emberRuntime.A)([{ title: 'Rock', name: 'rock' }, { title: 'Paper', name: 'paper' }, { title: 'Scissors', name: 'scissors' }]),\n actions: {\n rock: function () {\n lastAction = 'rock';\n actionOrder.push('rock');\n },\n paper: function () {\n lastAction = 'paper';\n actionOrder.push('paper');\n },\n scissors: function () {\n lastAction = 'scissors';\n actionOrder.push('scissors');\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '{{#each allactions as |allaction|}}
{{allaction.title}} {{/each}}'\n });\n\n this.render('{{example-component}}');\n\n var test = this;\n\n var testBoundAction = function (propertyValue) {\n test.runTask(function () {\n _this31.wrap(component.element).findAll('#' + propertyValue).click();\n });\n\n test.assert.ok(lastAction, propertyValue, 'lastAction set to ' + propertyValue);\n };\n\n testBoundAction('rock');\n testBoundAction('paper');\n testBoundAction('scissors');\n\n this.assert.deepEqual(actionOrder, ['rock', 'paper', 'scissors'], 'action name was looked up properly');\n };\n\n _class2.prototype['@test a quoteless function parameter should be called, including arguments'] = function () {\n var _this32 = this;\n\n var submitCalled = false;\n var incomingArg = void 0;\n\n var arg = 'rough ray';\n\n var ExampleComponent = _helpers.Component.extend({\n submit: function (actualArg) {\n incomingArg = actualArg;\n submitCalled = true;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Hi '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this32.$('a').click();\n });\n\n this.assert.ok(submitCalled, 'submit function called');\n this.assert.equal(incomingArg, arg, 'argument passed');\n };\n\n _class2.prototype['@test a quoteless parameter that does not resolve to a value asserts'] = function () {\n var _this33 = this;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n ohNoeNotValid: function () {}\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Hi '\n });\n\n expectAssertion(function () {\n _this33.render('{{example-component}}');\n }, 'You specified a quoteless path, `ohNoeNotValid`, to the {{action}} helper ' + 'which did not resolve to an action name (a string). ' + 'Perhaps you meant to use a quoted actionName? (e.g. {{action \"ohNoeNotValid\"}}).');\n };\n\n _class2.prototype['@test allows multiple actions on a single element'] = function () {\n var _this34 = this;\n\n var clickActionWasCalled = false;\n var doubleClickActionWasCalled = false;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n clicked: function () {\n clickActionWasCalled = true;\n },\n doubleClicked: function () {\n doubleClickActionWasCalled = true;\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: (0, _abstractTestCase.strip)(_templateObject4)\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this34.$('a').trigger('click');\n });\n\n this.assert.ok(clickActionWasCalled, 'the clicked action was called');\n\n this.runTask(function () {\n _this34.$('a').trigger('dblclick');\n });\n\n this.assert.ok(doubleClickActionWasCalled, 'the doubleClicked action was called');\n };\n\n _class2.prototype['@test it should respect preventDefault option if provided'] = function () {\n var _this35 = this;\n\n var ExampleComponent = _helpers.Component.extend({\n actions: {\n show: function () {}\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Hi '\n });\n\n this.render('{{example-component}}');\n\n var event = void 0;\n\n this.runTask(function () {\n event = _this35.$('a').click()[0];\n });\n\n this.assert.equal(event.defaultPrevented, false, 'should not preventDefault');\n };\n\n _class2.prototype['@test it should respect preventDefault option if provided bound'] = function () {\n var _this36 = this;\n\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n shouldPreventDefault: false,\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n },\n\n actions: {\n show: function () {}\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Hi '\n });\n\n this.render('{{example-component}}');\n\n var event = void 0;\n\n this.runTask(function () {\n event = _this36.$('a').trigger(event)[0];\n });\n\n this.assert.equal(event.defaultPrevented, false, 'should not preventDefault');\n\n this.runTask(function () {\n component.set('shouldPreventDefault', true);\n event = _this36.$('a').trigger('click')[0];\n });\n\n // IE11 does not allow simulated events to have a valid `defaultPrevented`\n if (!isIE11) {\n this.assert.equal(event.defaultPrevented, true, 'should preventDefault');\n }\n };\n\n _class2.prototype['@test it should target the proper component when `action` is in yielded block [GH #12409]'] = function () {\n var _this38 = this;\n\n var outerActionCalled = false;\n var innerClickCalled = false;\n\n var OuterComponent = _helpers.Component.extend({\n actions: {\n hey: function () {\n outerActionCalled = true;\n }\n }\n });\n\n var MiddleComponent = _helpers.Component.extend({});\n\n var InnerComponent = _helpers.Component.extend({\n click: function () {\n var _this37 = this;\n\n innerClickCalled = true;\n expectDeprecation(function () {\n _this37.sendAction();\n }, /You called (.*).sendAction\\((.*)\\) but Component#sendAction is deprecated. Please use closure actions instead./);\n }\n });\n\n this.registerComponent('outer-component', {\n ComponentClass: OuterComponent,\n template: (0, _abstractTestCase.strip)(_templateObject5)\n });\n\n this.registerComponent('middle-component', {\n ComponentClass: MiddleComponent,\n template: '{{yield}}'\n });\n\n this.registerComponent('inner-component', {\n ComponentClass: InnerComponent,\n template: (0, _abstractTestCase.strip)(_templateObject6)\n });\n\n this.render('{{outer-component}}');\n\n this.runTask(function () {\n _this38.$('button').click();\n });\n\n this.assert.ok(outerActionCalled, 'the action fired on the proper target');\n this.assert.ok(innerClickCalled, 'the click was triggered');\n };\n\n _class2.prototype['@test element action with (mut undefinedThing) works properly'] = function () {\n var _this39 = this;\n\n var component = void 0;\n\n var ExampleComponent = _helpers.Component.extend({\n label: undefined,\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
{{if label label \"Click me\"}} '\n });\n\n this.render('{{example-component}}');\n\n this.assertText('Click me');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n _this39.$('button').click();\n });\n\n this.assertText('Clicked!');\n\n this.runTask(function () {\n component.set('label', 'Dun clicked');\n });\n\n this.assertText('Dun clicked');\n\n this.runTask(function () {\n _this39.$('button').click();\n });\n\n this.assertText('Clicked!');\n\n this.runTask(function () {\n component.set('label', undefined);\n });\n\n this.assertText('Click me');\n };\n\n _class2.prototype['@test it supports non-registered actions [GH#14888]'] = function () {\n this.render('\\n {{#if show}}\\n
\\n Show ({{show}})\\n \\n {{/if}}\\n ', { show: true });\n\n this.assert.equal(this.$('button').text().trim(), 'Show (true)');\n // We need to focus in to simulate an actual click.\n this.runTask(function () {\n document.getElementById('ddButton').focus();\n document.getElementById('ddButton').click();\n });\n };\n\n _class2.prototype[\"@test action handler that shifts element attributes doesn't trigger multiple invocations\"] = function () {\n var _this40 = this;\n\n var actionCount = 0;\n var ExampleComponent = _helpers.Component.extend({\n selected: false,\n actions: {\n toggleSelected: function () {\n actionCount++;\n this.toggleProperty('selected');\n }\n }\n });\n\n this.registerComponent('example-component', {\n ComponentClass: ExampleComponent,\n template: '
Toggle Selected '\n });\n\n this.render('{{example-component}}');\n\n this.runTask(function () {\n _this40.$('button').click();\n });\n\n this.assert.equal(actionCount, 1, 'Click action only fired once.');\n this.assert.ok(this.$('button').hasClass('selected'), \"Element with action handler has properly updated it's conditional class\");\n\n this.runTask(function () {\n _this40.$('button').click();\n });\n\n this.assert.equal(actionCount, 2, 'Second click action only fired once.');\n this.assert.ok(!this.$('button').hasClass('selected'), \"Element with action handler has properly updated it's conditional class\");\n };\n\n return _class2;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/get-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers', 'ember-metal'], function (_emberBabel, _testCase, _helpers, _emberMetal) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{get}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test should be able to get an object value with a static key'] = function () {\n var _this2 = this;\n\n this.render('[{{get colors \\'apple\\'}}] [{{if true (get colors \\'apple\\')}}]', {\n colors: { apple: 'red' }\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return _this2.rerender();\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'colors.apple', 'green');\n });\n\n this.assertText('[green] [green]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'colors', {\n apple: 'red'\n });\n });\n\n this.assertText('[red] [red]');\n };\n\n _class.prototype['@test should be able to get an object value with nested static key'] = function () {\n var _this3 = this;\n\n this.render('[{{get colors \"apple.gala\"}}] [{{if true (get colors \"apple.gala\")}}]', {\n colors: {\n apple: {\n gala: 'red and yellow'\n }\n }\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'colors.apple.gala', 'yellow and red striped');\n });\n\n this.assertText('[yellow and red striped] [yellow and red striped]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'colors', { apple: { gala: 'red and yellow' } });\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n };\n\n _class.prototype['@test should be able to get an object value with a number'] = function () {\n var _this4 = this;\n\n this.render('[{{get items 1}}][{{get items 2}}][{{get items 3}}]', {\n indexes: [1, 2, 3],\n items: {\n 1: 'First',\n 2: 'Second',\n 3: 'Third'\n }\n });\n\n this.assertText('[First][Second][Third]');\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assertText('[First][Second][Third]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'items.1', 'Qux');\n });\n\n this.assertText('[Qux][Second][Third]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'items', { 1: 'First', 2: 'Second', 3: 'Third' });\n });\n\n this.assertText('[First][Second][Third]');\n };\n\n _class.prototype['@test should be able to get an array value with a number'] = function () {\n var _this5 = this;\n\n this.render('[{{get numbers 0}}][{{get numbers 1}}][{{get numbers 2}}]', {\n numbers: [1, 2, 3]\n });\n\n this.assertText('[1][2][3]');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertText('[1][2][3]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'numbers', [3, 2, 1]);\n });\n\n this.assertText('[3][2][1]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'numbers', [1, 2, 3]);\n });\n\n this.assertText('[1][2][3]');\n };\n\n _class.prototype['@test should be able to get an object value with a path evaluating to a number'] = function () {\n var _this6 = this;\n\n this.render('{{#each indexes as |index|}}[{{get items index}}]{{/each}}', {\n indexes: [1, 2, 3],\n items: {\n 1: 'First',\n 2: 'Second',\n 3: 'Third'\n }\n });\n\n this.assertText('[First][Second][Third]');\n\n this.runTask(function () {\n return _this6.rerender();\n });\n\n this.assertText('[First][Second][Third]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'items.1', 'Qux');\n });\n\n this.assertText('[Qux][Second][Third]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'items', { 1: 'First', 2: 'Second', 3: 'Third' });\n });\n\n this.assertText('[First][Second][Third]');\n };\n\n _class.prototype['@test should be able to get an array value with a path evaluating to a number'] = function () {\n var _this7 = this;\n\n this.render('{{#each numbers as |num index|}}[{{get numbers index}}]{{/each}}', {\n numbers: [1, 2, 3]\n });\n\n this.assertText('[1][2][3]');\n\n this.runTask(function () {\n return _this7.rerender();\n });\n\n this.assertText('[1][2][3]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'numbers', [3, 2, 1]);\n });\n\n this.assertText('[3][2][1]');\n };\n\n _class.prototype['@test should be able to get an object value with a bound/dynamic key'] = function () {\n var _this8 = this;\n\n this.render('[{{get colors key}}] [{{if true (get colors key)}}]', {\n colors: { apple: 'red', banana: 'yellow' },\n key: 'apple'\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'key', 'banana');\n });\n\n this.assertText('[yellow] [yellow]');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this8.context, 'colors.apple', 'green');\n (0, _emberMetal.set)(_this8.context, 'colors.banana', 'purple');\n });\n\n this.assertText('[purple] [purple]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'key', 'apple');\n });\n\n this.assertText('[green] [green]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'colors', { apple: 'red' });\n });\n\n this.assertText('[red] [red]');\n };\n\n _class.prototype['@test should be able to get an object value with nested dynamic key'] = function () {\n var _this9 = this;\n\n this.render('[{{get colors key}}] [{{if true (get colors key)}}]', {\n colors: {\n apple: {\n gala: 'red and yellow',\n mcintosh: 'red'\n },\n banana: 'yellow'\n },\n key: 'apple.gala'\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n\n this.runTask(function () {\n return _this9.rerender();\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'key', 'apple.mcintosh');\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'key', 'banana');\n });\n\n this.assertText('[yellow] [yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'key', 'apple.gala');\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n };\n\n _class.prototype['@test should be able to get an object value with subexpression returning nested key'] = function () {\n var _this10 = this;\n\n this.render('[{{get colors (concat \\'apple\\' \\'.\\' \\'gala\\')}}] [{{if true (get colors (concat \\'apple\\' \\'.\\' \\'gala\\'))}}]', {\n colors: {\n apple: {\n gala: 'red and yellow',\n mcintosh: 'red'\n }\n },\n key: 'apple.gala'\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n\n this.runTask(function () {\n return _this10.rerender();\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'colors.apple.gala', 'yellow and red striped');\n });\n\n this.assertText('[yellow and red striped] [yellow and red striped]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'colors.apple.gala', 'yellow-redish');\n });\n\n this.assertText('[yellow-redish] [yellow-redish]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'colors', {\n apple: {\n gala: 'red and yellow',\n mcintosh: 'red'\n }\n });\n });\n\n this.assertText('[red and yellow] [red and yellow]');\n };\n\n _class.prototype['@test should be able to get an object value with a get helper as the key'] = function () {\n var _this11 = this;\n\n this.render('[{{get colors (get possibleKeys key)}}] [{{if true (get colors (get possibleKeys key))}}]', {\n colors: { apple: 'red', banana: 'yellow' },\n key: 'key1',\n possibleKeys: { key1: 'apple', key2: 'banana' }\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return _this11.rerender();\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'key', 'key2');\n });\n\n this.assertText('[yellow] [yellow]');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this11.context, 'colors.apple', 'green');\n (0, _emberMetal.set)(_this11.context, 'colors.banana', 'purple');\n });\n\n this.assertText('[purple] [purple]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'key', 'key1');\n });\n\n this.assertText('[green] [green]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'colors', { apple: 'red', banana: 'yellow' });\n });\n\n this.assertText('[red] [red]');\n };\n\n _class.prototype['@test should be able to get an object value with a get helper value as a bound/dynamic key'] = function () {\n var _this12 = this;\n\n this.render('[{{get (get possibleValues objectKey) key}}] [{{if true (get (get possibleValues objectKey) key)}}]', {\n possibleValues: {\n colors1: { apple: 'red', banana: 'yellow' },\n colors2: { apple: 'green', banana: 'purple' }\n },\n objectKey: 'colors1',\n key: 'apple'\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return _this12.rerender();\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'objectKey', 'colors2');\n });\n\n this.assertText('[green] [green]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'objectKey', 'colors1');\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'key', 'banana');\n });\n\n this.assertText('[yellow] [yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'objectKey', 'colors2');\n });\n\n this.assertText('[purple] [purple]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'objectKey', 'colors1');\n });\n\n this.assertText('[yellow] [yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'key', 'apple');\n });\n };\n\n _class.prototype['@test should be able to get an object value with a get helper as the value and a get helper as the key'] = function () {\n var _this13 = this;\n\n this.render('[{{get (get possibleValues objectKey) (get possibleKeys key)}}] [{{if true (get (get possibleValues objectKey) (get possibleKeys key))}}]', {\n possibleValues: {\n colors1: { apple: 'red', banana: 'yellow' },\n colors2: { apple: 'green', banana: 'purple' }\n },\n objectKey: 'colors1',\n possibleKeys: {\n key1: 'apple',\n key2: 'banana'\n },\n key: 'key1'\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return _this13.rerender();\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'objectKey', 'colors2');\n });\n\n this.assertText('[green] [green]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'objectKey', 'colors1');\n });\n\n this.assertText('[red] [red]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'key', 'key2');\n });\n\n this.assertText('[yellow] [yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'objectKey', 'colors2');\n });\n\n this.assertText('[purple] [purple]');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this13.context, 'objectKey', 'colors1');\n (0, _emberMetal.set)(_this13.context, 'key', 'key1');\n });\n\n this.assertText('[red] [red]');\n };\n\n _class.prototype['@test the result of a get helper can be yielded'] = function () {\n var _this14 = this;\n\n var fooBarInstance = void 0;\n var FooBarComponent = _helpers.Component.extend({\n init: function () {\n this._super();\n fooBarInstance = this;\n this.mcintosh = 'red';\n }\n });\n\n this.registerComponent('foo-bar', {\n ComponentClass: FooBarComponent,\n template: '{{yield (get colors mcintosh)}}'\n });\n\n this.render('{{#foo-bar colors=colors as |value|}}{{value}}{{/foo-bar}}', {\n colors: {\n red: 'banana'\n }\n });\n\n this.assertText('banana');\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n this.assertText('banana');\n\n this.runTask(function () {\n (0, _emberMetal.set)(fooBarInstance, 'mcintosh', 'yellow');\n (0, _emberMetal.set)(_this14.context, 'colors', { yellow: 'bus' });\n });\n\n this.assertText('bus');\n\n this.runTask(function () {\n (0, _emberMetal.set)(fooBarInstance, 'mcintosh', 'red');\n (0, _emberMetal.set)(_this14.context, 'colors', { red: 'banana' });\n });\n\n this.assertText('banana');\n };\n\n _class.prototype['@test should handle object values as nulls'] = function () {\n var _this15 = this;\n\n this.render('[{{get colors \\'apple\\'}}] [{{if true (get colors \\'apple\\')}}]', {\n colors: null\n });\n\n this.assertText('[] []');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('[] []');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'colors', { apple: 'green', banana: 'purple' });\n });\n\n this.assertText('[green] [green]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'colors', null);\n });\n\n this.assertText('[] []');\n };\n\n _class.prototype['@test should handle object keys as nulls'] = function () {\n var _this16 = this;\n\n this.render('[{{get colors key}}] [{{if true (get colors key)}}]', {\n colors: {\n apple: 'red',\n banana: 'yellow'\n },\n key: null\n });\n\n this.assertText('[] []');\n\n this.runTask(function () {\n return _this16.rerender();\n });\n\n this.assertText('[] []');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'key', 'banana');\n });\n\n this.assertText('[yellow] [yellow]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'key', null);\n });\n\n this.assertText('[] []');\n };\n\n _class.prototype['@test should handle object values and keys as nulls'] = function () {\n this.render('[{{get colors \\'apple\\'}}] [{{if true (get colors key)}}]', {\n colors: null,\n key: null\n });\n\n this.assertText('[] []');\n };\n\n _class.prototype['@test get helper value should be updatable using {{input}} and (mut) - static key'] = function (assert) {\n var _this17 = this;\n\n this.render('{{input type=\\'text\\' value=(mut (get source \\'banana\\')) id=\\'get-input\\'}}', {\n source: {\n banana: 'banana'\n }\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'banana');\n\n this.runTask(function () {\n return _this17.rerender();\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'banana');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'source.banana', 'yellow');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'yellow');\n\n this.runTask(function () {\n return _this17.$('#get-input').val('some value').trigger('change');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'some value');\n assert.strictEqual((0, _emberMetal.get)(this.context, 'source.banana'), 'some value');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'source', { banana: 'banana' });\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'banana');\n };\n\n _class.prototype['@test get helper value should be updatable using {{input}} and (mut) - dynamic key'] = function (assert) {\n var _this18 = this;\n\n this.render('{{input type=\\'text\\' value=(mut (get source key)) id=\\'get-input\\'}}', {\n source: {\n apple: 'apple',\n banana: 'banana'\n },\n key: 'banana'\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'banana');\n\n this.runTask(function () {\n return _this18.rerender();\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'banana');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this18.context, 'source.banana', 'yellow');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'yellow');\n\n this.runTask(function () {\n return _this18.$('#get-input').val('some value').trigger('change');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'some value');\n assert.strictEqual((0, _emberMetal.get)(this.context, 'source.banana'), 'some value');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this18.context, 'key', 'apple');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'apple');\n\n this.runTask(function () {\n return _this18.$('#get-input').val('some other value').trigger('change');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'some other value');\n assert.strictEqual((0, _emberMetal.get)(this.context, 'source.apple'), 'some other value');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this18.context, 'key', 'banana');\n (0, _emberMetal.set)(_this18.context, 'source', { banana: 'banana' });\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'banana');\n };\n\n _class.prototype['@test get helper value should be updatable using {{input}} and (mut) - dynamic nested key'] = function (assert) {\n var _this19 = this;\n\n this.render('{{input type=\\'text\\' value=(mut (get source key)) id=\\'get-input\\'}}', {\n source: {\n apple: {\n gala: 'gala',\n mcintosh: 'mcintosh'\n },\n banana: 'banana'\n },\n key: 'apple.mcintosh'\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'mcintosh');\n\n this.runTask(function () {\n return _this19.rerender();\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'mcintosh');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this19.context, 'source.apple.mcintosh', 'red');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'red');\n\n this.runTask(function () {\n return _this19.$('#get-input').val('some value').trigger('change');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'some value');\n assert.strictEqual((0, _emberMetal.get)(this.context, 'source.apple.mcintosh'), 'some value');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this19.context, 'key', 'apple.gala');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'gala');\n\n this.runTask(function () {\n return _this19.$('#get-input').val('some other value').trigger('change');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'some other value');\n assert.strictEqual((0, _emberMetal.get)(this.context, 'source.apple.gala'), 'some other value');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this19.context, 'key', 'banana');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'banana');\n\n this.runTask(function () {\n return _this19.$('#get-input').val('yet another value').trigger('change');\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'yet another value');\n assert.strictEqual((0, _emberMetal.get)(this.context, 'source.banana'), 'yet another value');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this19.context, 'key', 'apple.mcintosh');\n (0, _emberMetal.set)(_this19.context, 'source', {\n apple: {\n gala: 'gala',\n mcintosh: 'mcintosh'\n },\n banana: 'banana'\n });\n });\n\n assert.strictEqual(this.$('#get-input').val(), 'mcintosh');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/hash-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers', 'ember-metal'], function (_emberBabel, _testCase, _helpers, _emberMetal) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{hash}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test returns a hash with the right key-value'] = function () {\n var _this2 = this;\n\n this.render('{{#with (hash name=\"Sergio\") as |person|}}{{person.name}}{{/with}}');\n\n this.assertText('Sergio');\n\n this.runTask(function () {\n return _this2.rerender();\n });\n\n this.assertText('Sergio');\n };\n\n _class.prototype['@test can have more than one key-value'] = function () {\n var _this3 = this;\n\n this.render('{{#with (hash name=\"Sergio\" lastName=\"Arbeo\") as |person|}}{{person.name}} {{person.lastName}}{{/with}}');\n\n this.assertText('Sergio Arbeo');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('Sergio Arbeo');\n };\n\n _class.prototype['@test binds values when variables are used'] = function () {\n var _this4 = this;\n\n this.render('{{#with (hash name=model.firstName lastName=\"Arbeo\") as |person|}}{{person.name}} {{person.lastName}}{{/with}}', {\n model: {\n firstName: 'Marisa'\n }\n });\n\n this.assertText('Marisa Arbeo');\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assertText('Marisa Arbeo');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'model.firstName', 'Sergio');\n });\n\n this.assertText('Sergio Arbeo');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'model', { firstName: 'Marisa' });\n });\n\n this.assertText('Marisa Arbeo');\n };\n\n _class.prototype['@test binds multiple values when variables are used'] = function () {\n var _this5 = this;\n\n this.render('{{#with (hash name=model.firstName lastName=model.lastName) as |person|}}{{person.name}} {{person.lastName}}{{/with}}', {\n model: {\n firstName: 'Marisa',\n lastName: 'Arbeo'\n }\n });\n\n this.assertText('Marisa Arbeo');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertText('Marisa Arbeo');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model.firstName', 'Sergio');\n });\n\n this.assertText('Sergio Arbeo');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model.lastName', 'Smith');\n });\n\n this.assertText('Sergio Smith');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model', {\n firstName: 'Marisa',\n lastName: 'Arbeo'\n });\n });\n\n this.assertText('Marisa Arbeo');\n };\n\n _class.prototype['@test hash helpers can be nested'] = function () {\n var _this6 = this;\n\n this.render('{{#with (hash person=(hash name=model.firstName)) as |ctx|}}{{ctx.person.name}}{{/with}}', {\n model: { firstName: 'Balint' }\n });\n\n this.assertText('Balint');\n\n this.runTask(function () {\n return _this6.rerender();\n });\n\n this.assertText('Balint');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'model.firstName', 'Chad');\n });\n\n this.assertText('Chad');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'model', { firstName: 'Balint' });\n });\n\n this.assertText('Balint');\n };\n\n _class.prototype['@test should yield hash of internal properties'] = function () {\n var _this7 = this;\n\n var fooBarInstance = void 0;\n var FooBarComponent = _helpers.Component.extend({\n init: function () {\n this._super();\n fooBarInstance = this;\n this.model = { firstName: 'Chad' };\n }\n });\n\n this.registerComponent('foo-bar', {\n ComponentClass: FooBarComponent,\n template: '{{yield (hash firstName=model.firstName)}}'\n });\n\n this.render('{{#foo-bar as |values|}}{{values.firstName}}{{/foo-bar}}');\n\n this.assertText('Chad');\n\n this.runTask(function () {\n return _this7.rerender();\n });\n\n this.assertText('Chad');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(fooBarInstance, 'model.firstName', 'Godfrey');\n });\n\n this.assertText('Godfrey');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(fooBarInstance, 'model', { firstName: 'Chad' });\n });\n\n this.assertText('Chad');\n };\n\n _class.prototype['@test should yield hash of internal and external properties'] = function () {\n var _this8 = this;\n\n var fooBarInstance = void 0;\n var FooBarComponent = _helpers.Component.extend({\n init: function () {\n this._super();\n fooBarInstance = this;\n this.model = { firstName: 'Chad' };\n }\n });\n\n this.registerComponent('foo-bar', {\n ComponentClass: FooBarComponent,\n template: '{{yield (hash firstName=model.firstName lastName=lastName)}}'\n });\n\n this.render('{{#foo-bar lastName=model.lastName as |values|}}{{values.firstName}} {{values.lastName}}{{/foo-bar}}', {\n model: { lastName: 'Hietala' }\n });\n\n this.assertText('Chad Hietala');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('Chad Hietala');\n\n this.runTask(function () {\n (0, _emberMetal.set)(fooBarInstance, 'model.firstName', 'Godfrey');\n (0, _emberMetal.set)(_this8.context, 'model.lastName', 'Chan');\n });\n\n this.assertText('Godfrey Chan');\n\n this.runTask(function () {\n (0, _emberMetal.set)(fooBarInstance, 'model', { firstName: 'Chad' });\n (0, _emberMetal.set)(_this8.context, 'model', { lastName: 'Hietala' });\n });\n\n this.assertText('Chad Hietala');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/if-unless-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/shared-conditional-tests'], function (_emberBabel, _testCase, _sharedConditionalTests) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: inline {{if}}', function (_IfUnlessHelperTest) {\n (0, _emberBabel.inherits)(_class, _IfUnlessHelperTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest.apply(this, arguments));\n }\n\n _class.prototype.templateFor = function (_ref) {\n var cond = _ref.cond,\n truthy = _ref.truthy,\n falsy = _ref.falsy;\n\n return '{{if ' + cond + ' ' + truthy + ' ' + falsy + '}}';\n };\n\n _class.prototype['@test it raises when there are more than three arguments'] = function () {\n var _this2 = this;\n\n expectAssertion(function () {\n _this2.render('{{if condition \\'a\\' \\'b\\' \\'c\\'}}', { condition: true });\n }, 'The inline form of the \\'if\\' helper expects two or three arguments. (\\'-top-level\\' @ L1:C0) ');\n };\n\n _class.prototype['@test it raises when there are less than two arguments'] = function () {\n var _this3 = this;\n\n expectAssertion(function () {\n _this3.render('{{if condition}}', { condition: true });\n }, 'The inline form of the \\'if\\' helper expects two or three arguments. (\\'-top-level\\' @ L1:C0) ');\n };\n\n return _class;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: nested {{if}} helpers (returning truthy values)', function (_IfUnlessHelperTest2) {\n (0, _emberBabel.inherits)(_class2, _IfUnlessHelperTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest2.apply(this, arguments));\n }\n\n _class2.prototype.templateFor = function (_ref2) {\n var cond = _ref2.cond,\n truthy = _ref2.truthy,\n falsy = _ref2.falsy;\n\n return '{{if (if ' + cond + ' ' + cond + ' false) ' + truthy + ' ' + falsy + '}}';\n };\n\n return _class2;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: nested {{if}} helpers (returning falsy values)', function (_IfUnlessHelperTest3) {\n (0, _emberBabel.inherits)(_class3, _IfUnlessHelperTest3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest3.apply(this, arguments));\n }\n\n _class3.prototype.templateFor = function (_ref3) {\n var cond = _ref3.cond,\n truthy = _ref3.truthy,\n falsy = _ref3.falsy;\n\n return '{{if (if ' + cond + ' true ' + cond + ') ' + truthy + ' ' + falsy + '}}';\n };\n\n return _class3;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: {{if}} used with another helper', function (_IfUnlessHelperTest4) {\n (0, _emberBabel.inherits)(_class4, _IfUnlessHelperTest4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest4.apply(this, arguments));\n }\n\n _class4.prototype.wrapperFor = function (templates) {\n return '{{concat ' + templates.join(' ') + '}}';\n };\n\n _class4.prototype.templateFor = function (_ref4) {\n var cond = _ref4.cond,\n truthy = _ref4.truthy,\n falsy = _ref4.falsy;\n\n return '(if ' + cond + ' ' + truthy + ' ' + falsy + ')';\n };\n\n return _class4;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: {{if}} used in attribute position', function (_IfUnlessHelperTest5) {\n (0, _emberBabel.inherits)(_class5, _IfUnlessHelperTest5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest5.apply(this, arguments));\n }\n\n _class5.prototype.wrapperFor = function (templates) {\n return '
';\n };\n\n _class5.prototype.templateFor = function (_ref5) {\n var cond = _ref5.cond,\n truthy = _ref5.truthy,\n falsy = _ref5.falsy;\n\n return '{{if ' + cond + ' ' + truthy + ' ' + falsy + '}}';\n };\n\n _class5.prototype.textValue = function () {\n return this.$('div').attr('data-foo');\n };\n\n return _class5;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: inline {{if}} and {{unless}} without the inverse argument', function (_IfUnlessHelperTest6) {\n (0, _emberBabel.inherits)(_class6, _IfUnlessHelperTest6);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest6.apply(this, arguments));\n }\n\n _class6.prototype.templateFor = function (_ref6) {\n var cond = _ref6.cond,\n truthy = _ref6.truthy,\n falsy = _ref6.falsy;\n\n return '{{if ' + cond + ' ' + truthy + '}}{{unless ' + cond + ' ' + falsy + '}}';\n };\n\n return _class6;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: inline {{unless}}', function (_IfUnlessHelperTest7) {\n (0, _emberBabel.inherits)(_class7, _IfUnlessHelperTest7);\n\n function _class7() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest7.apply(this, arguments));\n }\n\n _class7.prototype.templateFor = function (_ref7) {\n var cond = _ref7.cond,\n truthy = _ref7.truthy,\n falsy = _ref7.falsy;\n\n return '{{unless ' + cond + ' ' + falsy + ' ' + truthy + '}}';\n };\n\n _class7.prototype['@test it raises when there are more than three arguments'] = function () {\n var _this10 = this;\n\n expectAssertion(function () {\n _this10.render('{{unless condition \\'a\\' \\'b\\' \\'c\\'}}', { condition: true });\n }, /The inline form of the `unless` helper expects two or three arguments/);\n };\n\n _class7.prototype['@test it raises when there are less than two arguments'] = function () {\n var _this11 = this;\n\n expectAssertion(function () {\n _this11.render('{{unless condition}}', { condition: true });\n }, /The inline form of the `unless` helper expects two or three arguments/);\n };\n\n return _class7;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: nested {{unless}} helpers (returning truthy values)', function (_IfUnlessHelperTest8) {\n (0, _emberBabel.inherits)(_class8, _IfUnlessHelperTest8);\n\n function _class8() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest8.apply(this, arguments));\n }\n\n _class8.prototype.templateFor = function (_ref8) {\n var cond = _ref8.cond,\n truthy = _ref8.truthy,\n falsy = _ref8.falsy;\n\n return '{{unless (unless ' + cond + ' false ' + cond + ') ' + falsy + ' ' + truthy + '}}';\n };\n\n return _class8;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: nested {{unless}} helpers (returning falsy values)', function (_IfUnlessHelperTest9) {\n (0, _emberBabel.inherits)(_class9, _IfUnlessHelperTest9);\n\n function _class9() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest9.apply(this, arguments));\n }\n\n _class9.prototype.templateFor = function (_ref9) {\n var cond = _ref9.cond,\n truthy = _ref9.truthy,\n falsy = _ref9.falsy;\n\n return '{{unless (unless ' + cond + ' ' + cond + ' true) ' + falsy + ' ' + truthy + '}}';\n };\n\n return _class9;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: {{unless}} used with another helper', function (_IfUnlessHelperTest10) {\n (0, _emberBabel.inherits)(_class10, _IfUnlessHelperTest10);\n\n function _class10() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest10.apply(this, arguments));\n }\n\n _class10.prototype.wrapperFor = function (templates) {\n return '{{concat ' + templates.join(' ') + '}}';\n };\n\n _class10.prototype.templateFor = function (_ref10) {\n var cond = _ref10.cond,\n truthy = _ref10.truthy,\n falsy = _ref10.falsy;\n\n return '(unless ' + cond + ' ' + falsy + ' ' + truthy + ')';\n };\n\n return _class10;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n\n (0, _testCase.moduleFor)('Helpers test: {{unless}} used in attribute position', function (_IfUnlessHelperTest11) {\n (0, _emberBabel.inherits)(_class11, _IfUnlessHelperTest11);\n\n function _class11() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessHelperTest11.apply(this, arguments));\n }\n\n _class11.prototype.wrapperFor = function (templates) {\n return '
';\n };\n\n _class11.prototype.templateFor = function (_ref11) {\n var cond = _ref11.cond,\n truthy = _ref11.truthy,\n falsy = _ref11.falsy;\n\n return '{{unless ' + cond + ' ' + falsy + ' ' + truthy + '}}';\n };\n\n _class11.prototype.textValue = function () {\n return this.$('div').attr('data-foo');\n };\n\n return _class11;\n }(_sharedConditionalTests.IfUnlessHelperTest));\n});","enifed('ember-glimmer/tests/integration/helpers/input-test', ['ember-babel', '@ember/polyfills', 'ember-metal', 'ember-glimmer/tests/utils/helpers', 'ember-glimmer/tests/utils/test-case', 'internal-test-helpers', 'ember-views'], function (_emberBabel, _polyfills, _emberMetal, _helpers, _testCase, _internalTestHelpers, _emberViews) {\n 'use strict';\n\n /* globals Event */\n\n var ExpectedEvent = _emberViews.jQuery !== undefined ? _emberViews.jQuery.Event : Event;\n\n var InputRenderingTest = function (_RenderingTest) {\n (0, _emberBabel.inherits)(InputRenderingTest, _RenderingTest);\n\n function InputRenderingTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n InputRenderingTest.prototype.$input = function () {\n return this.$('input');\n };\n\n InputRenderingTest.prototype.inputID = function () {\n return this.$input().prop('id');\n };\n\n InputRenderingTest.prototype.assertDisabled = function () {\n this.assert.ok(this.$('input').prop('disabled'), 'The input is disabled');\n };\n\n InputRenderingTest.prototype.assertNotDisabled = function () {\n this.assert.ok(this.$('input').is(':not(:disabled)'), 'The input is not disabled');\n };\n\n InputRenderingTest.prototype.assertInputId = function (expectedId) {\n this.assert.equal(this.inputID(), expectedId, 'the input id should be `expectedId`');\n };\n\n InputRenderingTest.prototype.assertSingleInput = function () {\n this.assert.equal(this.$('input').length, 1, 'A single text field was inserted');\n };\n\n InputRenderingTest.prototype.assertSingleCheckbox = function () {\n this.assert.equal(this.$('input[type=checkbox]').length, 1, 'A single checkbox is added');\n };\n\n InputRenderingTest.prototype.assertCheckboxIsChecked = function () {\n this.assert.equal(this.$input().prop('checked'), true, 'the checkbox is checked');\n };\n\n InputRenderingTest.prototype.assertCheckboxIsNotChecked = function () {\n this.assert.equal(this.$input().prop('checked'), false, 'the checkbox is not checked');\n };\n\n InputRenderingTest.prototype.assertValue = function (expected) {\n this.assert.equal(this.$input().val(), expected, 'the input value should be ' + expected);\n };\n\n InputRenderingTest.prototype.assertAttr = function (name, expected) {\n this.assert.equal(this.$input().attr(name), expected, 'the input ' + name + ' attribute has the value \\'' + expected + '\\'');\n };\n\n InputRenderingTest.prototype.assertAllAttrs = function (names, expected) {\n var _this2 = this;\n\n names.forEach(function (name) {\n return _this2.assertAttr(name, expected);\n });\n };\n\n InputRenderingTest.prototype.assertSelectionRange = function (start, end) {\n var input = this.$input()[0];\n this.assert.equal(input.selectionStart, start, 'the cursor start position should be ' + start);\n this.assert.equal(input.selectionEnd, end, 'the cursor end position should be ' + end);\n };\n\n InputRenderingTest.prototype.triggerEvent = function (type, options) {\n var event = document.createEvent('Events');\n event.initEvent(type, true, true);\n (0, _polyfills.assign)(event, options);\n\n var element = this.$input()[0];\n this.runTask(function () {\n element.dispatchEvent(event);\n });\n };\n\n return InputRenderingTest;\n }(_testCase.RenderingTest);\n\n (0, _testCase.moduleFor)('Helpers test: {{input}}', function (_InputRenderingTest) {\n (0, _emberBabel.inherits)(_class, _InputRenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _InputRenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test a single text field is inserted into the DOM'] = function () {\n var _this4 = this;\n\n this.render('{{input type=\"text\" value=value}}', { value: 'hello' });\n\n var id = this.inputID();\n\n this.assertValue('hello');\n this.assertSingleInput();\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assertValue('hello');\n this.assertSingleInput();\n this.assertInputId(id);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'value', 'goodbye');\n });\n\n this.assertValue('goodbye');\n this.assertSingleInput();\n this.assertInputId(id);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'value', 'hello');\n });\n\n this.assertValue('hello');\n this.assertSingleInput();\n this.assertInputId(id);\n };\n\n _class.prototype['@test default type'] = function () {\n var _this5 = this;\n\n this.render('{{input}}');\n\n this.assertAttr('type', 'text');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertAttr('type', 'text');\n };\n\n _class.prototype['@test dynamic attributes'] = function () {\n var _this6 = this;\n\n this.render('\\n {{input type=\"text\"\\n disabled=disabled\\n value=value\\n placeholder=placeholder\\n name=name\\n maxlength=maxlength\\n minlength=minlength\\n size=size\\n tabindex=tabindex\\n }}', {\n disabled: false,\n value: 'Original value',\n placeholder: 'Original placeholder',\n name: 'original-name',\n maxlength: 10,\n minlength: 5,\n size: 20,\n tabindex: 30\n });\n\n this.assertNotDisabled();\n this.assertValue('Original value');\n this.assertAttr('placeholder', 'Original placeholder');\n this.assertAttr('name', 'original-name');\n this.assertAttr('maxlength', '10');\n this.assertAttr('minlength', '5');\n // this.assertAttr('size', '20'); //NOTE: failing in IE (TEST_SUITE=sauce)\n // this.assertAttr('tabindex', '30'); //NOTE: failing in IE (TEST_SUITE=sauce)\n\n this.runTask(function () {\n return _this6.rerender();\n });\n\n this.assertNotDisabled();\n this.assertValue('Original value');\n this.assertAttr('placeholder', 'Original placeholder');\n this.assertAttr('name', 'original-name');\n this.assertAttr('maxlength', '10');\n this.assertAttr('minlength', '5');\n // this.assertAttr('size', '20'); //NOTE: failing in IE (TEST_SUITE=sauce)\n // this.assertAttr('tabindex', '30'); //NOTE: failing in IE (TEST_SUITE=sauce)\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this6.context, 'value', 'Updated value');\n (0, _emberMetal.set)(_this6.context, 'disabled', true);\n (0, _emberMetal.set)(_this6.context, 'placeholder', 'Updated placeholder');\n (0, _emberMetal.set)(_this6.context, 'name', 'updated-name');\n (0, _emberMetal.set)(_this6.context, 'maxlength', 11);\n (0, _emberMetal.set)(_this6.context, 'minlength', 6);\n // set(this.context, 'size', 21); //NOTE: failing in IE (TEST_SUITE=sauce)\n // set(this.context, 'tabindex', 31); //NOTE: failing in IE (TEST_SUITE=sauce)\n });\n\n this.assertDisabled();\n this.assertValue('Updated value');\n this.assertAttr('placeholder', 'Updated placeholder');\n this.assertAttr('name', 'updated-name');\n this.assertAttr('maxlength', '11');\n this.assertAttr('minlength', '6');\n // this.assertAttr('size', '21'); //NOTE: failing in IE (TEST_SUITE=sauce)\n // this.assertAttr('tabindex', '31'); //NOTE: failing in IE (TEST_SUITE=sauce)\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this6.context, 'value', 'Original value');\n (0, _emberMetal.set)(_this6.context, 'disabled', false);\n (0, _emberMetal.set)(_this6.context, 'placeholder', 'Original placeholder');\n (0, _emberMetal.set)(_this6.context, 'name', 'original-name');\n (0, _emberMetal.set)(_this6.context, 'maxlength', 10);\n (0, _emberMetal.set)(_this6.context, 'minlength', 5);\n // set(this.context, 'size', 20); //NOTE: failing in IE (TEST_SUITE=sauce)\n // set(this.context, 'tabindex', 30); //NOTE: failing in IE (TEST_SUITE=sauce)\n });\n\n this.assertNotDisabled();\n this.assertValue('Original value');\n this.assertAttr('placeholder', 'Original placeholder');\n this.assertAttr('name', 'original-name');\n this.assertAttr('maxlength', '10');\n this.assertAttr('minlength', '5');\n // this.assertAttr('size', '20'); //NOTE: failing in IE (TEST_SUITE=sauce)\n // this.assertAttr('tabindex', '30'); //NOTE: failing in IE (TEST_SUITE=sauce)\n };\n\n _class.prototype['@test static attributes'] = function () {\n var _this7 = this;\n\n this.render('\\n {{input type=\"text\"\\n disabled=true\\n value=\"Original value\"\\n placeholder=\"Original placeholder\"\\n name=\"original-name\"\\n maxlength=10\\n minlength=5\\n size=20\\n tabindex=30\\n }}');\n\n this.assertDisabled();\n this.assertValue('Original value');\n this.assertAttr('placeholder', 'Original placeholder');\n this.assertAttr('name', 'original-name');\n this.assertAttr('maxlength', '10');\n this.assertAttr('minlength', '5');\n // this.assertAttr('size', '20'); //NOTE: failing in IE (TEST_SUITE=sauce)\n // this.assertAttr('tabindex', '30'); //NOTE: failing in IE (TEST_SUITE=sauce)\n\n this.runTask(function () {\n return _this7.rerender();\n });\n\n this.assertDisabled();\n this.assertValue('Original value');\n this.assertAttr('placeholder', 'Original placeholder');\n this.assertAttr('name', 'original-name');\n this.assertAttr('maxlength', '10');\n this.assertAttr('minlength', '5');\n // this.assertAttr('size', '20'); //NOTE: failing in IE (TEST_SUITE=sauce)\n // this.assertAttr('tabindex', '30'); //NOTE: failing in IE (TEST_SUITE=sauce)\n };\n\n _class.prototype['@test cursor selection range'] = function () {\n var _this8 = this;\n\n // Modifying input.selectionStart, which is utilized in the cursor tests,\n // causes an event in Safari.\n (0, _internalTestHelpers.runDestroy)(this.owner.lookup('event_dispatcher:main'));\n\n this.render('{{input type=\"text\" value=value}}', { value: 'original' });\n\n var input = this.$input()[0];\n\n // See https://ember-twiddle.com/33e506329f8176ae874422644d4cc08c?openFiles=components.input-component.js%2Ctemplates.components.input-component.hbs\n // this.assertSelectionRange(8, 8); //NOTE: this is (0, 0) on Firefox (TEST_SUITE=sauce)\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n // this.assertSelectionRange(8, 8); //NOTE: this is (0, 0) on Firefox (TEST_SUITE=sauce)\n\n this.runTask(function () {\n input.selectionStart = 2;\n input.selectionEnd = 4;\n });\n\n this.assertSelectionRange(2, 4);\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertSelectionRange(2, 4);\n\n // this.runTask(() => set(this.context, 'value', 'updated'));\n //\n // this.assertSelectionRange(7, 7); //NOTE: this fails in IE, the range is 0 -> 0 (TEST_SUITE=sauce)\n //\n // this.runTask(() => set(this.context, 'value', 'original'));\n //\n // this.assertSelectionRange(8, 8); //NOTE: this fails in IE, the range is 0 -> 0 (TEST_SUITE=sauce)\n };\n\n _class.prototype['@test [DEPRECATED] sends an action with `{{input enter=\"foo\"}}` when
is pressed'] = function (assert) {\n var _this9 = this;\n\n assert.expect(4);\n\n expectDeprecation(function () {\n _this9.render('{{input enter=\\'foo\\'}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed.');\n }\n }\n });\n }, 'Please refactor `{{input enter=\"foo\"}}` to `{{input enter=(action \"foo\")}}. (\\'-top-level\\' @ L1:C0) ');\n expectDeprecation(function () {\n _this9.triggerEvent('keyup', { keyCode: 13 });\n }, 'Passing actions to components as strings (like {{input enter=\"foo\"}}) is deprecated. Please use closure actions instead ({{input enter=(action \"foo\")}})');\n };\n\n _class.prototype['@test sends an action with `{{input enter=(action \"foo\")}}` when is pressed'] = function (assert) {\n assert.expect(2);\n this.render('{{input enter=(action \\'foo\\')}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n\n this.triggerEvent('keyup', {\n keyCode: 13\n });\n };\n\n _class.prototype['@test [DEPRECATED] sends an action with `{{input key-press=\"foo\"}}` is pressed'] = function (assert) {\n var _this10 = this;\n\n assert.expect(4);\n\n expectDeprecation(function () {\n _this10.render('{{input value=value key-press=\\'foo\\'}}', {\n value: 'initial',\n\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n }, 'Please refactor `{{input key-press=\"foo\"}}` to `{{input key-press=(action \"foo\")}}. (\\'-top-level\\' @ L1:C0) ');\n\n expectDeprecation(function () {\n _this10.triggerEvent('keypress', { keyCode: 65 });\n }, 'Passing actions to components as strings (like {{input key-press=\"foo\"}}) is deprecated. Please use closure actions instead ({{input key-press=(action \"foo\")}})');\n };\n\n _class.prototype['@test sends an action with `{{input key-press=(action \"foo\")}}` is pressed'] = function (assert) {\n assert.expect(2);\n\n this.render('{{input value=value key-press=(action \\'foo\\')}}', {\n value: 'initial',\n\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n\n this.triggerEvent('keypress', { keyCode: 65 });\n };\n\n _class.prototype['@test sends an action to the parent level when `bubbles=true` is provided'] = function (assert) {\n assert.expect(1);\n\n var ParentComponent = _helpers.Component.extend({\n change: function () {\n assert.ok(true, 'bubbled upwards');\n }\n });\n\n this.registerComponent('x-parent', {\n ComponentClass: ParentComponent,\n template: '{{input bubbles=true}}'\n });\n this.render('{{x-parent}}');\n\n this.triggerEvent('change');\n };\n\n _class.prototype['@test triggers `focus-in` when focused'] = function (assert) {\n var _this11 = this;\n\n var wasFocused = false;\n\n this.render('{{input focus-in=(action \\'foo\\')}}', {\n actions: {\n foo: function () {\n wasFocused = true;\n }\n }\n });\n\n this.runTask(function () {\n _this11.$input().focus();\n });\n\n assert.ok(wasFocused, 'action was triggered');\n };\n\n _class.prototype['@test sends `insert-newline` when is pressed'] = function (assert) {\n assert.expect(2);\n\n this.render('{{input insert-newline=(action \\'foo\\')}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n\n this.triggerEvent('keyup', {\n keyCode: 13\n });\n };\n\n _class.prototype['@test [DEPRECATED] sends an action with `{{input escape-press=\"foo\"}}` when is pressed'] = function (assert) {\n var _this12 = this;\n\n assert.expect(4);\n\n expectDeprecation(function () {\n _this12.render('{{input escape-press=\\'foo\\'}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n }, 'Please refactor `{{input escape-press=\"foo\"}}` to `{{input escape-press=(action \"foo\")}}. (\\'-top-level\\' @ L1:C0) ');\n\n expectDeprecation(function () {\n _this12.triggerEvent('keyup', { keyCode: 27 });\n }, 'Passing actions to components as strings (like {{input escape-press=\"foo\"}}) is deprecated. Please use closure actions instead ({{input escape-press=(action \"foo\")}})');\n };\n\n _class.prototype['@test sends an action with `{{input escape-press=(action \"foo\")}}` when is pressed'] = function (assert) {\n assert.expect(2);\n\n this.render('{{input escape-press=(action \\'foo\\')}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n\n this.triggerEvent('keyup', { keyCode: 27 });\n };\n\n _class.prototype['@test [DEPRECATED] sends an action with `{{input key-down=\"foo\"}}` when a key is pressed'] = function (assert) {\n var _this13 = this;\n\n assert.expect(4);\n\n expectDeprecation(function () {\n _this13.render('{{input key-down=\\'foo\\'}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n }, 'Please refactor `{{input key-down=\"foo\"}}` to `{{input key-down=(action \"foo\")}}. (\\'-top-level\\' @ L1:C0) ');\n\n expectDeprecation(function () {\n _this13.triggerEvent('keydown', { keyCode: 65 });\n }, 'Passing actions to components as strings (like {{input key-down=\"foo\"}}) is deprecated. Please use closure actions instead ({{input key-down=(action \"foo\")}})');\n };\n\n _class.prototype['@test sends an action with `{{input key-down=(action \"foo\")}}` when a key is pressed'] = function (assert) {\n assert.expect(2);\n\n this.render('{{input key-down=(action \\'foo\\')}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n\n this.triggerEvent('keydown', { keyCode: 65 });\n };\n\n _class.prototype['@test [DEPRECATED] sends an action with `{{input key-up=\"foo\"}}` when a key is pressed'] = function (assert) {\n var _this14 = this;\n\n assert.expect(4);\n\n expectDeprecation(function () {\n _this14.render('{{input key-up=\\'foo\\'}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n }, 'Please refactor `{{input key-up=\"foo\"}}` to `{{input key-up=(action \"foo\")}}. (\\'-top-level\\' @ L1:C0) ');\n\n expectDeprecation(function () {\n _this14.triggerEvent('keyup', { keyCode: 65 });\n }, 'Passing actions to components as strings (like {{input key-up=\"foo\"}}) is deprecated. Please use closure actions instead ({{input key-up=(action \"foo\")}})');\n };\n\n _class.prototype['@test [DEPRECATED] sends an action with `{{input key-up=(action \"foo\")}}` when a key is pressed'] = function (assert) {\n assert.expect(2);\n\n this.render('{{input key-up=(action \\'foo\\')}}', {\n actions: {\n foo: function (value, event) {\n assert.ok(true, 'action was triggered');\n assert.ok(event instanceof ExpectedEvent, 'event was passed');\n }\n }\n });\n this.triggerEvent('keyup', { keyCode: 65 });\n };\n\n _class.prototype['@test GH#14727 can render a file input after having had render an input of other type'] = function () {\n this.render('{{input type=\"text\"}}{{input type=\"file\"}}');\n\n this.assert.equal(this.$input()[0].type, 'text');\n this.assert.equal(this.$input()[1].type, 'file');\n };\n\n return _class;\n }(InputRenderingTest));\n\n (0, _testCase.moduleFor)('Helpers test: {{input}} with dynamic type', function (_InputRenderingTest2) {\n (0, _emberBabel.inherits)(_class2, _InputRenderingTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _InputRenderingTest2.apply(this, arguments));\n }\n\n _class2.prototype['@test a bound property can be used to determine type'] = function () {\n var _this16 = this;\n\n this.render('{{input type=type}}', { type: 'password' });\n\n this.assertAttr('type', 'password');\n\n this.runTask(function () {\n return _this16.rerender();\n });\n\n this.assertAttr('type', 'password');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'type', 'text');\n });\n\n this.assertAttr('type', 'text');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'type', 'password');\n });\n\n this.assertAttr('type', 'password');\n };\n\n _class2.prototype['@test a subexpression can be used to determine type'] = function () {\n var _this17 = this;\n\n this.render('{{input type=(if isTruthy trueType falseType)}}', {\n isTruthy: true,\n trueType: 'text',\n falseType: 'password'\n });\n\n this.assertAttr('type', 'text');\n\n this.runTask(function () {\n return _this17.rerender();\n });\n\n this.assertAttr('type', 'text');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'isTruthy', false);\n });\n\n this.assertAttr('type', 'password');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'isTruthy', true);\n });\n\n this.assertAttr('type', 'text');\n };\n\n _class2.prototype['@test GH16256 input macro does not modify params in place'] = function () {\n this.registerComponent('my-input', {\n template: '{{input type=inputType}}'\n });\n\n this.render('{{my-input inputType=firstType}}{{my-input inputType=secondType}}', {\n firstType: 'password',\n secondType: 'email'\n });\n\n var inputs = this.element.querySelectorAll('input');\n this.assert.equal(inputs.length, 2, 'there are two inputs');\n this.assert.equal(inputs[0].getAttribute('type'), 'password');\n this.assert.equal(inputs[1].getAttribute('type'), 'email');\n };\n\n return _class2;\n }(InputRenderingTest));\n\n (0, _testCase.moduleFor)('Helpers test: {{input type=\\'checkbox\\'}}', function (_InputRenderingTest3) {\n (0, _emberBabel.inherits)(_class3, _InputRenderingTest3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _InputRenderingTest3.apply(this, arguments));\n }\n\n _class3.prototype['@test dynamic attributes'] = function () {\n var _this19 = this;\n\n this.render('{{input\\n type=\\'checkbox\\'\\n disabled=disabled\\n name=name\\n checked=checked\\n tabindex=tabindex\\n }}', {\n disabled: false,\n name: 'original-name',\n checked: false,\n tabindex: 10\n });\n\n this.assertSingleCheckbox();\n this.assertNotDisabled();\n this.assertAttr('name', 'original-name');\n this.assertAttr('tabindex', '10');\n\n this.runTask(function () {\n return _this19.rerender();\n });\n\n this.assertSingleCheckbox();\n this.assertNotDisabled();\n this.assertAttr('name', 'original-name');\n this.assertAttr('tabindex', '10');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this19.context, 'disabled', true);\n (0, _emberMetal.set)(_this19.context, 'name', 'updated-name');\n (0, _emberMetal.set)(_this19.context, 'tabindex', 11);\n });\n\n this.assertSingleCheckbox();\n this.assertDisabled();\n this.assertAttr('name', 'updated-name');\n this.assertAttr('tabindex', '11');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this19.context, 'disabled', false);\n (0, _emberMetal.set)(_this19.context, 'name', 'original-name');\n (0, _emberMetal.set)(_this19.context, 'tabindex', 10);\n });\n\n this.assertSingleCheckbox();\n this.assertNotDisabled();\n this.assertAttr('name', 'original-name');\n this.assertAttr('tabindex', '10');\n };\n\n _class3.prototype['@test `value` property assertion'] = function () {\n var _this20 = this;\n\n expectAssertion(function () {\n _this20.render('{{input type=\"checkbox\" value=value}}', {\n value: 'value'\n });\n }, /you must use `checked=/);\n };\n\n _class3.prototype['@test with a bound type'] = function () {\n var _this21 = this;\n\n this.render('{{input type=inputType checked=isChecked}}', {\n inputType: 'checkbox',\n isChecked: true\n });\n\n this.assertSingleCheckbox();\n this.assertCheckboxIsChecked();\n\n this.runTask(function () {\n return _this21.rerender();\n });\n\n this.assertCheckboxIsChecked();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this21.context, 'isChecked', false);\n });\n\n this.assertCheckboxIsNotChecked();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this21.context, 'isChecked', true);\n });\n\n this.assertCheckboxIsChecked();\n };\n\n _class3.prototype['@test native click changes check property'] = function () {\n this.render('{{input type=\"checkbox\"}}');\n\n this.assertSingleCheckbox();\n this.assertCheckboxIsNotChecked();\n this.$input()[0].click();\n this.assertCheckboxIsChecked();\n this.$input()[0].click();\n this.assertCheckboxIsNotChecked();\n };\n\n _class3.prototype['@test with static values'] = function () {\n var _this22 = this;\n\n this.render('{{input type=\"checkbox\" disabled=false tabindex=10 name=\"original-name\" checked=false}}');\n\n this.assertSingleCheckbox();\n this.assertCheckboxIsNotChecked();\n this.assertNotDisabled();\n this.assertAttr('tabindex', '10');\n this.assertAttr('name', 'original-name');\n\n this.runTask(function () {\n return _this22.rerender();\n });\n\n this.assertSingleCheckbox();\n this.assertCheckboxIsNotChecked();\n this.assertNotDisabled();\n this.assertAttr('tabindex', '10');\n this.assertAttr('name', 'original-name');\n };\n\n return _class3;\n }(InputRenderingTest));\n\n (0, _testCase.moduleFor)('Helpers test: {{input type=\\'text\\'}}', function (_InputRenderingTest4) {\n (0, _emberBabel.inherits)(_class4, _InputRenderingTest4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _InputRenderingTest4.apply(this, arguments));\n }\n\n _class4.prototype['@test null values'] = function () {\n var _this24 = this;\n\n var attributes = ['disabled', 'placeholder', 'name', 'maxlength', 'size', 'tabindex'];\n\n this.render('\\n {{input type=\"text\"\\n disabled=disabled\\n value=value\\n placeholder=placeholder\\n name=name\\n maxlength=maxlength\\n size=size\\n tabindex=tabindex\\n }}', {\n disabled: null,\n value: null,\n placeholder: null,\n name: null,\n maxlength: null,\n size: null,\n tabindex: null\n });\n\n this.assertValue('');\n this.assertAllAttrs(attributes, undefined);\n\n this.runTask(function () {\n return _this24.rerender();\n });\n\n this.assertValue('');\n this.assertAllAttrs(attributes, undefined);\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this24.context, 'disabled', true);\n (0, _emberMetal.set)(_this24.context, 'value', 'Updated value');\n (0, _emberMetal.set)(_this24.context, 'placeholder', 'Updated placeholder');\n (0, _emberMetal.set)(_this24.context, 'name', 'updated-name');\n (0, _emberMetal.set)(_this24.context, 'maxlength', 11);\n (0, _emberMetal.set)(_this24.context, 'size', 21);\n (0, _emberMetal.set)(_this24.context, 'tabindex', 31);\n });\n\n this.assertDisabled();\n this.assertValue('Updated value');\n this.assertAttr('placeholder', 'Updated placeholder');\n this.assertAttr('name', 'updated-name');\n this.assertAttr('maxlength', '11');\n this.assertAttr('size', '21');\n this.assertAttr('tabindex', '31');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this24.context, 'disabled', null);\n (0, _emberMetal.set)(_this24.context, 'value', null);\n (0, _emberMetal.set)(_this24.context, 'placeholder', null);\n (0, _emberMetal.set)(_this24.context, 'name', null);\n (0, _emberMetal.set)(_this24.context, 'maxlength', null);\n // set(this.context, 'size', null); //NOTE: this fails with `Error: Failed to set the 'size' property on 'HTMLInputElement': The value provided is 0, which is an invalid size.` (TEST_SUITE=sauce)\n (0, _emberMetal.set)(_this24.context, 'tabindex', null);\n });\n\n this.assertAttr('disabled', undefined);\n this.assertValue('');\n // this.assertAttr('placeholder', undefined); //NOTE: this fails with a value of \"null\" (TEST_SUITE=sauce)\n // this.assertAttr('name', undefined); //NOTE: this fails with a value of \"null\" (TEST_SUITE=sauce)\n this.assertAttr('maxlength', undefined);\n // this.assertAttr('size', undefined); //NOTE: re-enable once `size` bug above has been addressed\n this.assertAttr('tabindex', undefined);\n };\n\n return _class4;\n }(InputRenderingTest));\n\n // These are the permutations of the set:\n // ['type=\"range\"', 'min=\"-5\" max=\"50\"', 'value=\"%x\"']\n ['type=\"range\" min=\"-5\" max=\"50\" value=\"%x\"', 'type=\"range\" value=\"%x\" min=\"-5\" max=\"50\"', 'min=\"-5\" max=\"50\" type=\"range\" value=\"%x\"', 'min=\"-5\" max=\"50\" value=\"%x\" type=\"range\"', 'value=\"%x\" min=\"-5\" max=\"50\" type=\"range\"', 'value=\"%x\" type=\"range\" min=\"-5\" max=\"50\"'].forEach(function (attrs) {\n (0, _testCase.moduleFor)('[GH#15675] Helpers test: {{input ' + attrs + '}}', function (_InputRenderingTest5) {\n (0, _emberBabel.inherits)(_class5, _InputRenderingTest5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _InputRenderingTest5.apply(this, arguments));\n }\n\n _class5.prototype.renderInput = function () {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25;\n\n this.render('{{input ' + attrs.replace('%x', value) + '}}');\n };\n\n _class5.prototype['@test value over default max but below set max is kept'] = function () {\n this.renderInput('25');\n this.assertValue('25');\n };\n\n _class5.prototype['@test value below default min but above set min is kept'] = function () {\n this.renderInput('-2');\n this.assertValue('-2');\n };\n\n _class5.prototype['@test in the valid default range is kept'] = function () {\n this.renderInput('5');\n this.assertValue('5');\n };\n\n _class5.prototype['@test value above max is reset to max'] = function () {\n this.renderInput('55');\n this.assertValue('50');\n };\n\n _class5.prototype['@test value below min is reset to min'] = function () {\n this.renderInput('-10');\n this.assertValue('-5');\n };\n\n return _class5;\n }(InputRenderingTest));\n });\n});","enifed('ember-glimmer/tests/integration/helpers/loc-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-metal', '@ember/string'], function (_emberBabel, _testCase, _emberMetal, _string) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{loc}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n\n (0, _string._setStrings)({\n 'Hello Friend': 'Hallo Freund',\n Hello: 'Hallo, %@'\n });\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _RenderingTest.prototype.teardown.call(this);\n (0, _string._setStrings)({});\n };\n\n _class.prototype['@test it lets the original value through by default'] = function () {\n var _this2 = this;\n\n this.render('{{loc \"Hiya buddy!\"}}');\n this.assertText('Hiya buddy!', 'the unlocalized string is correct');\n this.runTask(function () {\n return _this2.rerender();\n });\n this.assertText('Hiya buddy!', 'the unlocalized string is correct after rerender');\n };\n\n _class.prototype['@test it localizes a simple string'] = function () {\n var _this3 = this;\n\n this.render('{{loc \"Hello Friend\"}}');\n this.assertText('Hallo Freund', 'the localized string is correct');\n this.runTask(function () {\n return _this3.rerender();\n });\n this.assertText('Hallo Freund', 'the localized string is correct after rerender');\n };\n\n _class.prototype['@test it takes passed formats into an account'] = function () {\n var _this4 = this;\n\n this.render('{{loc \"%@, %@\" \"Hello\" \"Mr. Pitkin\"}}');\n this.assertText('Hello, Mr. Pitkin', 'the formatted string is correct');\n this.runTask(function () {\n return _this4.rerender();\n });\n this.assertText('Hello, Mr. Pitkin', 'the formatted string is correct after rerender');\n };\n\n _class.prototype['@test it updates when bound params change'] = function () {\n var _this5 = this;\n\n this.render('{{loc simple}} - {{loc personal \\'Mr. Pitkin\\'}}', {\n simple: 'Hello Friend',\n personal: 'Hello'\n });\n this.assertText('Hallo Freund - Hallo, Mr. Pitkin', 'the bound value is correct');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n this.assertText('Hallo Freund - Hallo, Mr. Pitkin', 'the bound value is correct after rerender');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'simple', \"G'day mate\");\n });\n this.assertText(\"G'day mate - Hallo, Mr. Pitkin\", 'the bound value is correct after update');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'simple', 'Hello Friend');\n });\n this.assertText('Hallo Freund - Hallo, Mr. Pitkin', 'the bound value is correct after reset');\n };\n\n _class.prototype['@test it updates when nested bound params change'] = function () {\n var _this6 = this;\n\n this.render('{{loc greetings.simple}} - {{loc greetings.personal \\'Mr. Pitkin\\'}}', {\n greetings: {\n simple: 'Hello Friend',\n personal: 'Hello'\n }\n });\n this.assertText('Hallo Freund - Hallo, Mr. Pitkin', 'the bound value is correct');\n\n this.runTask(function () {\n return _this6.rerender();\n });\n this.assertText('Hallo Freund - Hallo, Mr. Pitkin', 'the bound value is correct after rerender');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'greetings.simple', \"G'day mate\");\n });\n this.assertText(\"G'day mate - Hallo, Mr. Pitkin\", 'the bound value is correct after interior mutation');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'greetings', {\n simple: 'Hello Friend',\n personal: 'Hello'\n });\n });\n this.assertText('Hallo Freund - Hallo, Mr. Pitkin', 'the bound value is correct after replacement');\n };\n\n _class.prototype['@test it can be overriden'] = function () {\n this.registerHelper('loc', function () {\n return 'Yup';\n });\n this.render('{{loc greeting}}', {\n greeting: 'Hello Friend'\n });\n this.assertText('Yup', 'the localized string is correct');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/log-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case'], function (_emberBabel, _testCase) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{log}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n\n /* eslint-disable no-console */\n _this.originalLog = console.log;\n _this.logCalls = [];\n console.log = function () {\n var _this$logCalls;\n\n (_this$logCalls = _this.logCalls).push.apply(_this$logCalls, arguments);\n /* eslint-enable no-console */\n };\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _RenderingTest.prototype.teardown.call(this);\n /* eslint-disable no-console */\n console.log = this.originalLog;\n /* eslint-enable no-console */\n };\n\n _class.prototype.assertLog = function (values) {\n var i, len;\n\n this.assertText('');\n this.assert.strictEqual(this.logCalls.length, values.length);\n\n for (i = 0, len = values.length; i < len; i++) {\n this.assert.strictEqual(this.logCalls[i], values[i]);\n }\n };\n\n _class.prototype['@test correctly logs primitives'] = function () {\n this.render('{{log \"one\" 1 true}}');\n\n this.assertLog(['one', 1, true]);\n };\n\n _class.prototype['@test correctly logs a property'] = function () {\n this.render('{{log value}}', {\n value: 'one'\n });\n\n this.assertLog(['one']);\n };\n\n _class.prototype['@test correctly logs multiple arguments'] = function () {\n this.render('{{log \"my variable:\" value}}', {\n value: 'one'\n });\n\n this.assertLog(['my variable:', 'one']);\n };\n\n _class.prototype['@test correctly logs `this`'] = function () {\n this.render('{{log this}}');\n\n this.assertLog([this.context]);\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/mut-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers', 'ember-metal', 'ember-glimmer/tests/utils/test-helpers'], function (_emberBabel, _testCase, _helpers, _emberMetal, _testHelpers) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{mut}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test a simple mutable binding using `mut` propagates properly'] = function () {\n var _this2 = this;\n\n var bottom = void 0;\n\n this.registerComponent('bottom-mut', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n bottom = this;\n }\n }),\n template: '{{setMe}}'\n });\n\n this.registerComponent('middle-mut', {\n template: '{{bottom-mut setMe=value}}'\n });\n\n this.render('{{middle-mut value=(mut val)}}', {\n val: 12\n });\n\n this.assertText('12', 'the data propagated downwards');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return bottom.attrs.setMe.update(13);\n });\n\n this.assertText('13', 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'setMe'), 13, \"the set took effect on bottom's prop\");\n this.assert.strictEqual(bottom.attrs.setMe.value, 13, \"the set took effect on bottom's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'val'), 13, 'the set propagated back up');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(bottom, 'setMe', 14);\n });\n\n this.assertText('14', 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'setMe'), 14, \"the set took effect on bottom's prop\");\n this.assert.strictEqual(bottom.attrs.setMe.value, 14, \"the set took effect on bottom's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'val'), 14, 'the set propagated back up');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'val', 12);\n });\n\n this.assertText('12');\n };\n\n _class.prototype['@test a simple mutable binding using `mut` inserts into the DOM'] = function () {\n var _this3 = this;\n\n var bottom = void 0,\n middle = void 0;\n\n this.registerComponent('bottom-mut', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n bottom = this;\n }\n }),\n template: '{{setMe}}'\n });\n\n this.registerComponent('middle-mut', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n middle = this;\n }\n }),\n template: '{{bottom-mut setMe=(mut value)}}'\n });\n\n this.render('{{middle-mut value=(mut val)}}', {\n val: 12\n });\n\n this.assertText('12', 'the data propagated downwards');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return bottom.attrs.setMe.update(13);\n });\n\n this.assertText('13', 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'setMe'), 13, \"the set took effect on bottom's prop\");\n this.assert.strictEqual(bottom.attrs.setMe.value, 13, \"the set took effect on bottom's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(middle, 'value'), 13, \"the set propagated to middle's prop\");\n this.assert.strictEqual(middle.attrs.value.value, 13, \"the set propagated to middle's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'val'), 13, 'the set propagated back up');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(bottom, 'setMe', 14);\n });\n\n this.assertText('14', 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'setMe'), 14, \"the set took effect on bottom's prop\");\n this.assert.strictEqual(bottom.attrs.setMe.value, 14, \"the set took effect on bottom's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(middle, 'value'), 14, \"the set propagated to middle's prop\");\n this.assert.strictEqual(middle.attrs.value.value, 14, \"the set propagated to middle's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'val'), 14, 'the set propagated back up');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'val', 12);\n });\n\n this.assertText('12');\n };\n\n _class.prototype['@test passing a literal results in a assertion'] = function () {\n var _this4 = this;\n\n this.registerComponent('bottom-mut', { template: '{{setMe}}' });\n\n expectAssertion(function () {\n _this4.render('{{bottom-mut setMe=(mut \"foo bar\")}}');\n }, 'You can only pass a path to mut');\n };\n\n _class.prototype['@test passing the result of a helper invocation results in an assertion'] = function () {\n var _this5 = this;\n\n this.registerComponent('bottom-mut', { template: '{{setMe}}' });\n\n expectAssertion(function () {\n _this5.render('{{bottom-mut setMe=(mut (concat \"foo\" \" \" \"bar\"))}}');\n }, 'You can only pass a path to mut');\n };\n\n _class.prototype['@test using a string value through middle tier does not trigger assertion (due to the auto-mut transform)'] = function () {\n var bottom = void 0;\n\n this.registerComponent('bottom-mut', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n bottom = this;\n }\n }),\n template: '{{stuff}}'\n });\n\n this.registerComponent('middle-mut', {\n template: '{{bottom-mut stuff=value}}'\n });\n\n this.render('{{middle-mut value=\"foo\"}}');\n\n this.assert.equal((0, _emberMetal.get)(bottom, 'stuff'), 'foo', 'the data propagated');\n this.assertText('foo');\n\n this.assertStableRerender();\n\n // No U-R for this test\n };\n\n _class.prototype['@test {{readonly}} of a {{mut}} is converted into an immutable binding'] = function () {\n var _this6 = this;\n\n var middle = void 0,\n bottom = void 0;\n\n this.registerComponent('bottom-mut', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n bottom = this;\n }\n }),\n template: '{{setMe}}'\n });\n\n this.registerComponent('middle-mut', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n middle = this;\n }\n }),\n template: '{{bottom-mut setMe=(readonly value)}}'\n });\n\n this.render('{{middle-mut value=(mut val)}}', {\n val: 12\n });\n\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return middle.attrs.value.update(13);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(middle, 'value'), 13, \"the set took effect on middle's prop\");\n this.assert.strictEqual(middle.attrs.value.value, 13, \"the set took effect on middle's attr\");\n\n this.runTask(function () {\n return (0, _emberMetal.set)(middle, 'value', 14);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(middle, 'value'), 14, \"the set took effect on middle's prop\");\n this.assert.strictEqual(middle.attrs.value.value, 14, \"the set took effect on middle's attr\");\n this.assert.strictEqual(bottom.attrs.setMe, 14, 'the mutable binding has been converted to an immutable cell');\n this.assertText('14');\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'val'), 14, 'the set propagated back up');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'val', 12);\n });\n\n this.assertText('12');\n };\n\n _class.prototype['@test mutable bindings work inside of yielded content'] = function () {\n var _this7 = this;\n\n this.registerComponent('bottom-mut', {\n template: '{{yield}}'\n });\n\n this.registerComponent('middle-mut', {\n template: '{{#bottom-mut}}{{model.name}}{{/bottom-mut}}'\n });\n\n this.render('{{middle-mut model=(mut model)}}', {\n model: { name: 'Matthew Beale' }\n });\n\n this.assertText('Matthew Beale');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'model.name', 'Joel Kang');\n });\n\n this.assertText('Joel Kang');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'model', { name: 'Matthew Beale' });\n });\n\n this.assertText('Matthew Beale');\n };\n\n _class.prototype['@test a simple mutable binding using {{mut}} is available in hooks'] = function () {\n var _this8 = this;\n\n var bottom = void 0;\n var willRender = [];\n var didInsert = [];\n\n this.registerComponent('bottom-mut', {\n ComponentClass: _helpers.Component.extend({\n willRender: function () {\n willRender.push((0, _emberMetal.get)(this, 'setMe'));\n },\n didInsertElement: function () {\n didInsert.push((0, _emberMetal.get)(this, 'setMe'));\n bottom = this;\n }\n }),\n template: '{{setMe}}'\n });\n\n this.registerComponent('middle-mut', {\n template: '{{bottom-mut setMe=(mut value)}}'\n });\n\n this.render('{{middle-mut value=(mut val)}}', {\n val: 12\n });\n\n this.assert.deepEqual(willRender, [12], 'willReceive is [12]');\n this.assert.deepEqual(didInsert, [12], 'didInsert is [12]');\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.assert.deepEqual(willRender, [12], 'willReceive is [12]');\n this.assert.deepEqual(didInsert, [12], 'didInsert is [12]');\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'setMe'), 12, 'the data propagated');\n\n this.runTask(function () {\n return bottom.attrs.setMe.update(13);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'setMe'), 13, \"the set took effect on bottom's prop\");\n this.assert.strictEqual(bottom.attrs.setMe.value, 13, \"the set took effect on bottom's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'val'), 13, 'the set propagated back up');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(bottom, 'setMe', 14);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'setMe'), 14, \"the set took effect on bottom's prop\");\n this.assert.strictEqual(bottom.attrs.setMe.value, 14, \"the set took effect on bottom's attr\");\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'val'), 14, 'the set propagated back up');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'val', 12);\n });\n\n this.assertText('12');\n };\n\n _class.prototype['@test a mutable binding with a backing computed property and attribute present in the root of the component is updated when the upstream property invalidates #11023'] = function () {\n var bottom = void 0,\n middle = void 0;\n\n this.registerComponent('bottom-mut', {\n ComponentClass: _helpers.Component.extend({\n thingy: null,\n didInsertElement: function () {\n bottom = this;\n }\n }),\n template: '{{thingy}}'\n });\n\n this.registerComponent('middle-mut', {\n ComponentClass: _helpers.Component.extend({\n baseValue: 12,\n val: (0, _emberMetal.computed)('baseValue', function () {\n return this.get('baseValue');\n }),\n didInsertElement: function () {\n middle = this;\n }\n }),\n template: '{{bottom-mut thingy=(mut val)}}'\n });\n\n this.render('{{middle-mut}}');\n\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'thingy'), 12, 'data propagated');\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(middle, 'baseValue', 13);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(middle, 'val'), 13, 'the set took effect');\n this.assert.strictEqual(bottom.attrs.thingy.value, 13, \"the set propagated down to bottom's attrs\");\n this.assert.strictEqual((0, _emberMetal.get)(bottom, 'thingy'), 13, \"the set propagated down to bottom's prop\");\n this.assertText('13');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(middle, 'baseValue', 12);\n });\n\n this.assertText('12');\n };\n\n _class.prototype['@test automatic mutable bindings exposes a mut cell in attrs'] = function () {\n var inner = void 0;\n\n this.registerComponent('x-inner', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n inner = this;\n }\n }),\n template: '{{foo}}'\n });\n\n this.registerComponent('x-outer', {\n template: '{{x-inner foo=bar}}'\n });\n\n this.render('{{x-outer bar=baz}}', { baz: 'foo' });\n\n this.assertText('foo');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return inner.attrs.foo.update('bar');\n });\n\n this.assert.equal(inner.attrs.foo.value, 'bar');\n this.assert.equal((0, _emberMetal.get)(inner, 'foo'), 'bar');\n this.assertText('bar');\n\n this.runTask(function () {\n return inner.attrs.foo.update('foo');\n });\n\n this.assertText('foo');\n };\n\n _class.prototype['@test automatic mutable bindings tolerate undefined non-stream inputs and attempts to set them'] = function () {\n var inner = void 0;\n\n this.registerComponent('x-inner', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n inner = this;\n }\n }),\n template: '{{model}}'\n });\n\n this.registerComponent('x-outer', {\n template: '{{x-inner model=nonexistent}}'\n });\n\n this.render('{{x-outer}}');\n\n this.assertText('');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return inner.attrs.model.update(42);\n });\n\n this.assert.equal(inner.attrs.model.value, 42);\n this.assert.equal((0, _emberMetal.get)(inner, 'model'), 42);\n this.assertText('42');\n\n this.runTask(function () {\n return inner.attrs.model.update(undefined);\n });\n\n this.assertText('');\n };\n\n _class.prototype['@test automatic mutable bindings tolerate constant non-stream inputs and attempts to set them'] = function () {\n var inner = void 0;\n\n this.registerComponent('x-inner', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n inner = this;\n }\n }),\n template: 'hello{{model}}'\n });\n\n this.registerComponent('x-outer', {\n template: '{{x-inner model=x}}'\n });\n\n this.render('{{x-outer x=\"foo\"}}');\n\n this.assertText('hellofoo');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return inner.attrs.model.update(42);\n });\n\n this.assert.equal(inner.attrs.model.value, 42);\n this.assert.equal((0, _emberMetal.get)(inner, 'model'), 42);\n this.assertText('hello42');\n\n this.runTask(function () {\n return inner.attrs.model.update('foo');\n });\n\n this.assertText('hellofoo');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n\n (0, _testCase.moduleFor)('Mutable Bindings used in Computed Properties that are bound as attributeBindings', function (_RenderingTest2) {\n (0, _emberBabel.inherits)(_class2, _RenderingTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest2.apply(this, arguments));\n }\n\n _class2.prototype['@test an attribute binding of a computed property of a 2-way bound attr recomputes when the attr changes'] = function () {\n var _this10 = this;\n\n var input = void 0,\n output = void 0;\n\n this.registerComponent('x-input', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n input = this;\n }\n })\n });\n\n this.registerComponent('x-output', {\n ComponentClass: _helpers.Component.extend({\n attributeBindings: ['style'],\n didInsertElement: function () {\n output = this;\n },\n\n style: (0, _emberMetal.computed)('height', function () {\n var height = this.get('height');\n return (0, _helpers.htmlSafe)('height: ' + height + 'px;');\n }),\n height: 20\n }),\n template: '{{height}}'\n });\n\n this.render('{{x-output height=height}}{{x-input height=(mut height)}}', {\n height: 60\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 60px;') },\n content: '60'\n });\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return input.attrs.height.update(35);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(output, 'height'), 35, 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'height'), 35, 'the set propagated back up');\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 35px;') },\n content: '35'\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(input, 'height', 36);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(output, 'height'), 36, 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'height'), 36, 'the set propagated back up');\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 36px;') },\n content: '36'\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'height', 60);\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 60px;') },\n content: '60'\n });\n this.assert.strictEqual((0, _emberMetal.get)(input, 'height'), 60);\n };\n\n _class2.prototype['@test an attribute binding of a computed property with a setter of a 2-way bound attr recomputes when the attr changes'] = function () {\n var _this11 = this;\n\n var input = void 0,\n output = void 0;\n\n this.registerComponent('x-input', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n input = this;\n }\n })\n });\n\n this.registerComponent('x-output', {\n ComponentClass: _helpers.Component.extend({\n attributeBindings: ['style'],\n didInsertElement: function () {\n output = this;\n },\n\n style: (0, _emberMetal.computed)('height', 'width', function () {\n var height = this.get('height');\n var width = this.get('width');\n return (0, _helpers.htmlSafe)('height: ' + height + 'px; width: ' + width + 'px;');\n }),\n height: 20,\n width: (0, _emberMetal.computed)('height', {\n get: function () {\n return this.get('height') * 2;\n },\n set: function (keyName, width) {\n this.set('height', width / 2);\n return width;\n }\n })\n }),\n template: '{{width}}x{{height}}'\n });\n\n this.render('{{x-output width=width}}{{x-input width=(mut width)}}', {\n width: 70\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 35px; width: 70px;') },\n content: '70x35'\n });\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(input, 'width', 80);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(output, 'width'), 80, 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'width'), 80, 'the set propagated back up');\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 40px; width: 80px;') },\n content: '80x40'\n });\n\n this.runTask(function () {\n return input.attrs.width.update(90);\n });\n\n this.assert.strictEqual((0, _emberMetal.get)(output, 'width'), 90, 'the set took effect');\n this.assert.strictEqual((0, _emberMetal.get)(this.context, 'width'), 90, 'the set propagated back up');\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 45px; width: 90px;') },\n content: '90x45'\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'width', 70);\n });\n\n this.assertComponentElement(this.firstChild, {\n tagName: 'div',\n attrs: { style: (0, _testHelpers.styles)('height: 35px; width: 70px;') },\n content: '70x35'\n });\n this.assert.strictEqual((0, _emberMetal.get)(input, 'width'), 70);\n };\n\n return _class2;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/partial-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-metal', 'ember-runtime', 'ember-glimmer/tests/utils/abstract-test-case'], function (_emberBabel, _testCase, _emberMetal, _emberRuntime, _abstractTestCase) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each model.items as |item|}}\\n {{item}}: {{partial \\'show-item\\'}} |\\n {{/each}}'], ['\\n {{#each model.items as |item|}}\\n {{item}}: {{partial \\'show-item\\'}} |\\n {{/each}}']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with model as |item|}}\\n {{item.name}}: {{partial \\'show-id\\'}}\\n {{/with}}'], ['\\n {{#with model as |item|}}\\n {{item.name}}: {{partial \\'show-id\\'}}\\n {{/with}}']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each items as |item|}}\\n {{item.id}}: {{partial \\'show-item\\'}} |\\n {{/each}}'], ['\\n {{#each items as |item|}}\\n {{item.id}}: {{partial \\'show-item\\'}} |\\n {{/each}}']),\n _templateObject4 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each items as |item|}}\\n {{item}}: {{partial \\'show-item\\'}} |\\n {{/each}}'], ['\\n {{#each items as |item|}}\\n {{item}}: {{partial \\'show-item\\'}} |\\n {{/each}}']),\n _templateObject5 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n [outer: {{name}}] {{partial \\'inner-partial\\'}}\\n '], ['\\n [outer: {{name}}] {{partial \\'inner-partial\\'}}\\n ']),\n _templateObject6 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each names as |name i|}}\\n {{i}}: {{partial \\'outer-partial\\'}}\\n {{/each}}'], ['\\n {{#each names as |name i|}}\\n {{i}}: {{partial \\'outer-partial\\'}}\\n {{/each}}']),\n _templateObject7 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with \\'Ben\\' as |person2|}}\\n Hi {{person1}} (aged {{age}}) and {{person2}}. {{partial \\'person3-partial\\'}}\\n {{/with}}\\n '], ['\\n {{#with \\'Ben\\' as |person2|}}\\n Hi {{person1}} (aged {{age}}) and {{person2}}. {{partial \\'person3-partial\\'}}\\n {{/with}}\\n ']),\n _templateObject8 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with \\'Alex\\' as |person3|}}\\n Hi {{person1}} (aged {{age}}), {{person2}} and {{person3}}. {{partial \\'person4-partial\\'}}\\n {{/with}}\\n '], ['\\n {{#with \\'Alex\\' as |person3|}}\\n Hi {{person1}} (aged {{age}}), {{person2}} and {{person3}}. {{partial \\'person4-partial\\'}}\\n {{/with}}\\n ']),\n _templateObject9 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with \\'Sarah\\' as |person4|}}\\n Hi {{person1}} (aged {{age}}), {{person2}}, {{person3}} and {{person4}}.\\n {{/with}}\\n '], ['\\n {{#with \\'Sarah\\' as |person4|}}\\n Hi {{person1}} (aged {{age}}), {{person2}}, {{person3}} and {{person4}}.\\n {{/with}}\\n ']),\n _templateObject10 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with \\'Sophie\\' as |person1|}}\\n Hi {{person1}} (aged {{age}}). {{partial \\'person2-partial\\'}}\\n {{/with}}'], ['\\n {{#with \\'Sophie\\' as |person1|}}\\n Hi {{person1}} (aged {{age}}). {{partial \\'person2-partial\\'}}\\n {{/with}}']),\n _templateObject11 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each model.items as |template i|}}\\n {{model.type}}: {{partial template}}\\n {{/each}}'], ['\\n {{#each model.items as |template i|}}\\n {{model.type}}: {{partial template}}\\n {{/each}}']),\n _templateObject12 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with item.thing as |t|}}\\n {{partial t}}\\n {{else}}\\n Nothing!\\n {{/with}}'], ['\\n {{#with item.thing as |t|}}\\n {{partial t}}\\n {{else}}\\n Nothing!\\n {{/with}}']),\n _templateObject13 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#outer.inner as |inner|}}\\n inner.name: {{inner.name}}\\n {{/outer.inner}}\\n '], ['\\n {{#outer.inner as |inner|}}\\n inner.name: {{inner.name}}\\n {{/outer.inner}}\\n ']),\n _templateObject14 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#outer-component name=name as |outer|}}\\n {{partial \\'some-partial\\'}}\\n {{/outer-component}}'], ['\\n {{#outer-component name=name as |outer|}}\\n {{partial \\'some-partial\\'}}\\n {{/outer-component}}']);\n\n (0, _testCase.moduleFor)('Helpers test: {{partial}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test should render other templates registered with the container'] = function () {\n this.registerPartial('_subTemplateFromContainer', 'sub-template');\n\n this.render('This {{partial \"subTemplateFromContainer\"}} is pretty great.');\n\n this.assertStableRerender();\n\n this.assertText('This sub-template is pretty great.');\n };\n\n _class.prototype['@test should render other slash-separated templates registered with the container'] = function () {\n this.registerPartial('child/_subTemplateFromContainer', 'sub-template');\n\n this.render('This {{partial \"child/subTemplateFromContainer\"}} is pretty great.');\n\n this.assertStableRerender();\n\n this.assertText('This sub-template is pretty great.');\n };\n\n _class.prototype['@test should use the current context'] = function () {\n var _this2 = this;\n\n this.registerPartial('_person_name', '{{model.firstName}} {{model.lastName}}');\n\n this.render('Who is {{partial \"person_name\"}}?', {\n model: {\n firstName: 'Kris',\n lastName: 'Selden'\n }\n });\n\n this.assertStableRerender();\n\n this.assertText('Who is Kris Selden?');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'model.firstName', 'Kelly');\n });\n\n this.assertText('Who is Kelly Selden?');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'model', { firstName: 'Kris', lastName: 'Selden' });\n });\n\n this.assertText('Who is Kris Selden?');\n };\n\n _class.prototype['@test Quoteless parameters passed to {{partial}} perform a bound property lookup of the partial name'] = function () {\n var _this3 = this;\n\n this.registerPartial('_subTemplate', 'sub-template');\n this.registerPartial('_otherTemplate', 'other-template');\n\n this.render('This {{partial templates.partialName}} is pretty {{partial nonexistent}}great.', {\n templates: { partialName: 'subTemplate' }\n });\n\n this.assertStableRerender();\n\n this.assertText('This sub-template is pretty great.');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'templates.partialName', 'otherTemplate');\n });\n\n this.assertText('This other-template is pretty great.');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'templates.partialName', null);\n });\n\n this.assertText('This is pretty great.');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'templates', { partialName: 'subTemplate' });\n });\n\n this.assertText('This sub-template is pretty great.');\n };\n\n _class.prototype['@test partial using data from {{#each}}'] = function () {\n var _this4 = this;\n\n this.registerPartial('show-item', '{{item}}');\n\n this.render((0, _abstractTestCase.strip)(_templateObject), {\n model: {\n items: (0, _emberRuntime.A)(['apple', 'orange', 'banana'])\n }\n });\n\n this.assertStableRerender();\n\n this.assertText('apple: apple |orange: orange |banana: banana |');\n\n this.runTask(function () {\n return _this4.context.model.items.pushObject('strawberry');\n });\n\n this.assertText('apple: apple |orange: orange |banana: banana |strawberry: strawberry |');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'model', {\n items: (0, _emberRuntime.A)(['apple', 'orange', 'banana'])\n });\n });\n\n this.assertText('apple: apple |orange: orange |banana: banana |');\n };\n\n _class.prototype['@test partial using `{{get` on data from {{#with}}'] = function () {\n var _this5 = this;\n\n this.registerPartial('show-id', '{{get item \"id\"}}');\n\n this.render((0, _abstractTestCase.strip)(_templateObject2), {\n model: { id: 1, name: 'foo' }\n });\n\n this.assertStableRerender();\n\n this.assertText('foo: 1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model.id', 2);\n });\n\n this.assertText('foo: 2');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model.name', 'bar');\n });\n\n this.assertText('bar: 2');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model', { id: 1, name: 'foo' });\n });\n\n this.assertText('foo: 1');\n };\n\n _class.prototype['@test partial using `{{get` on data from {{#each}}'] = function () {\n var _this6 = this;\n\n this.registerPartial('show-item', '{{get item \"id\"}}');\n\n this.render((0, _abstractTestCase.strip)(_templateObject3), {\n items: (0, _emberRuntime.A)([{ id: 1 }, { id: 2 }, { id: 3 }])\n });\n\n this.assertStableRerender();\n\n this.assertText('1: 1 |2: 2 |3: 3 |');\n\n this.runTask(function () {\n return _this6.context.items.pushObject({ id: 4 });\n });\n\n this.assertText('1: 1 |2: 2 |3: 3 |4: 4 |');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'items', (0, _emberRuntime.A)([{ id: 1 }, { id: 2 }, { id: 3 }]));\n });\n\n this.assertText('1: 1 |2: 2 |3: 3 |');\n };\n\n _class.prototype['@test partial using conditional on data from {{#each}}'] = function () {\n var _this7 = this;\n\n this.registerPartial('show-item', '{{#if item}}{{item}}{{/if}}');\n\n this.render((0, _abstractTestCase.strip)(_templateObject4), {\n items: (0, _emberRuntime.A)(['apple', null, 'orange', 'banana'])\n });\n\n this.assertStableRerender();\n\n this.assertText('apple: apple |: |orange: orange |banana: banana |');\n\n this.runTask(function () {\n return _this7.context.items.pushObject('strawberry');\n });\n\n this.assertText('apple: apple |: |orange: orange |banana: banana |strawberry: strawberry |');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'items', (0, _emberRuntime.A)(['apple', null, 'orange', 'banana']));\n });\n\n this.assertText('apple: apple |: |orange: orange |banana: banana |');\n };\n\n _class.prototype['@test nested partials using data from {{#each}}'] = function () {\n var _this8 = this;\n\n this.registerPartial('_outer-partial', (0, _abstractTestCase.strip)(_templateObject5));\n\n this.registerPartial('inner-partial', '[inner: {{name}}]');\n\n this.render((0, _abstractTestCase.strip)(_templateObject6), {\n names: (0, _emberRuntime.A)(['Alex', 'Ben'])\n });\n\n this.assertStableRerender();\n\n this.assertText('0: [outer: Alex] [inner: Alex]1: [outer: Ben] [inner: Ben]');\n\n this.runTask(function () {\n return _this8.context.names.pushObject('Sophie');\n });\n\n this.assertText('0: [outer: Alex] [inner: Alex]1: [outer: Ben] [inner: Ben]2: [outer: Sophie] [inner: Sophie]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'names', (0, _emberRuntime.A)(['Alex', 'Ben']));\n });\n\n this.assertText('0: [outer: Alex] [inner: Alex]1: [outer: Ben] [inner: Ben]');\n };\n\n _class.prototype['@test nested partials within nested `{{#with}}` blocks'] = function () {\n var _this9 = this;\n\n this.registerPartial('_person2-partial', (0, _abstractTestCase.strip)(_templateObject7));\n\n this.registerPartial('_person3-partial', (0, _abstractTestCase.strip)(_templateObject8));\n\n this.registerPartial('_person4-partial', (0, _abstractTestCase.strip)(_templateObject9));\n\n this.render((0, _abstractTestCase.strip)(_templateObject10), { age: 0 });\n\n this.assertStableRerender();\n\n this.assertText('Hi Sophie (aged 0). Hi Sophie (aged 0) and Ben. Hi Sophie (aged 0), Ben and Alex. Hi Sophie (aged 0), Ben, Alex and Sarah.');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'age', 1);\n });\n\n this.assertText('Hi Sophie (aged 1). Hi Sophie (aged 1) and Ben. Hi Sophie (aged 1), Ben and Alex. Hi Sophie (aged 1), Ben, Alex and Sarah.');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'age', 0);\n });\n\n this.assertText('Hi Sophie (aged 0). Hi Sophie (aged 0) and Ben. Hi Sophie (aged 0), Ben and Alex. Hi Sophie (aged 0), Ben, Alex and Sarah.');\n };\n\n _class.prototype['@test dynamic partials in {{#each}}'] = function () {\n var _this10 = this;\n\n this.registerPartial('_odd', 'ODD{{i}}');\n this.registerPartial('_even', 'EVEN{{i}}');\n\n this.render((0, _abstractTestCase.strip)(_templateObject11), {\n model: {\n items: ['even', 'odd', 'even', 'odd'],\n type: 'number'\n }\n });\n\n this.assertStableRerender();\n\n this.assertText('number: EVEN0number: ODD1number: EVEN2number: ODD3');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'model.type', 'integer');\n });\n\n this.assertText('integer: EVEN0integer: ODD1integer: EVEN2integer: ODD3');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'model', {\n items: ['even', 'odd', 'even', 'odd'],\n type: 'number'\n });\n });\n\n this.assertText('number: EVEN0number: ODD1number: EVEN2number: ODD3');\n };\n\n _class.prototype['@test dynamic partials in {{#with}}'] = function () {\n var _this11 = this;\n\n this.registerPartial('_thing', '{{t}}');\n\n this.render((0, _abstractTestCase.strip)(_templateObject12), {\n item: { thing: false }\n });\n\n this.assertStableRerender();\n\n this.assertText('Nothing!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'item.thing', 'thing');\n });\n\n this.assertText('thing');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'item', { thing: false });\n });\n\n this.assertText('Nothing!');\n };\n\n _class.prototype['@test partials which contain contextual components'] = function () {\n var _this12 = this;\n\n this.registerComponent('outer-component', {\n template: '{{yield (hash inner=(component \"inner-component\" name=name))}}'\n });\n\n this.registerComponent('inner-component', {\n template: '{{yield (hash name=name)}}'\n });\n\n this.registerPartial('_some-partial', (0, _abstractTestCase.strip)(_templateObject13));\n\n this.render((0, _abstractTestCase.strip)(_templateObject14), { name: 'Sophie' });\n\n this.assertStableRerender();\n\n this.assertText('inner.name: Sophie');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'name', 'Ben');\n });\n\n this.assertText('inner.name: Ben');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'name', 'Sophie');\n });\n\n this.assertText('inner.name: Sophie');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/readonly-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers', 'ember-metal'], function (_emberBabel, _testCase, _helpers, _emberMetal) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{readonly}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test {{readonly}} of a path should work'] = function () {\n var component = void 0;\n\n this.registerComponent('foo-bar', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n component = this;\n }\n }),\n template: '{{value}}'\n });\n\n this.render('{{foo-bar value=(readonly val)}}', {\n val: 12\n });\n\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(component, 'value', 13);\n });\n this.assert.notOk(component.attrs.value.update);\n\n this.assertText('13', 'local property is updated');\n this.assert.equal((0, _emberMetal.get)(this.context, 'val'), 12, 'upstream attribute is not updated');\n\n // No U-R\n };\n\n _class.prototype['@test passing an action to {{readonly}} avoids mutable cell wrapping'] = function (assert) {\n assert.expect(4);\n var outer = void 0,\n inner = void 0;\n\n this.registerComponent('x-inner', {\n ComponentClass: _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n inner = this;\n }\n })\n });\n\n this.registerComponent('x-outer', {\n ComponentClass: _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n outer = this;\n }\n }),\n template: '{{x-inner onClick=(readonly onClick)}}'\n });\n\n this.render('{{x-outer onClick=(action doIt)}}', {\n doIt: function () {\n assert.ok(true, 'action was called');\n }\n });\n\n assert.equal(typeof outer.attrs.onClick, 'function', 'function itself is present in outer component attrs');\n outer.attrs.onClick();\n\n assert.equal(typeof inner.attrs.onClick, 'function', 'function itself is present in inner component attrs');\n inner.attrs.onClick();\n };\n\n _class.prototype['@test updating a {{readonly}} property from above works'] = function (assert) {\n var _this2 = this;\n\n var component = void 0;\n\n this.registerComponent('foo-bar', {\n ComponentClass: _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n }\n }),\n template: '{{value}}'\n });\n\n this.render('{{foo-bar value=(readonly thing)}}', {\n thing: 'initial'\n });\n\n this.assertText('initial');\n\n this.assertStableRerender();\n\n assert.strictEqual(component.attrs.value, 'initial', 'no mutable cell');\n assert.strictEqual((0, _emberMetal.get)(component, 'value'), 'initial', 'no mutable cell');\n assert.strictEqual(this.context.thing, 'initial');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'thing', 'updated!');\n });\n\n this.assertText('updated!');\n assert.strictEqual(component.attrs.value, 'updated!', 'passed down value was set in attrs');\n assert.strictEqual((0, _emberMetal.get)(component, 'value'), 'updated!', 'passed down value was set');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'thing', 'initial');\n });\n\n this.assertText('initial');\n };\n\n _class.prototype['@test updating a nested path of a {{readonly}}'] = function (assert) {\n var component = void 0;\n\n this.registerComponent('foo-bar', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n component = this;\n }\n }),\n template: '{{value.prop}}'\n });\n\n this.render('{{foo-bar value=(readonly thing)}}', {\n thing: {\n prop: 'initial'\n }\n });\n\n this.assertText('initial');\n\n this.assertStableRerender();\n\n assert.notOk(component.attrs.value.update, 'no update available');\n assert.deepEqual((0, _emberMetal.get)(component, 'value'), { prop: 'initial' });\n assert.deepEqual(this.context.thing, { prop: 'initial' });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(component, 'value.prop', 'updated!');\n });\n\n this.assertText('updated!', 'nested path is updated');\n assert.deepEqual((0, _emberMetal.get)(component, 'value'), { prop: 'updated!' });\n assert.deepEqual(this.context.thing, { prop: 'updated!' });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(component, 'value.prop', 'initial');\n });\n\n this.assertText('initial');\n };\n\n _class.prototype['@test {{readonly}} of a string renders correctly'] = function () {\n var component = void 0;\n\n this.registerComponent('foo-bar', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n component = this;\n }\n }),\n template: '{{value}}'\n });\n\n this.render('{{foo-bar value=(readonly \"12\")}}');\n\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.assert.notOk(component.attrs.value.update);\n this.assert.strictEqual((0, _emberMetal.get)(component, 'value'), '12');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(component, 'value', '13');\n });\n\n this.assertText('13', 'local property is updated');\n this.assert.strictEqual((0, _emberMetal.get)(component, 'value'), '13');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(component, 'value', '12');\n });\n\n this.assertText('12');\n };\n\n _class.prototype['@test {{mut}} of a {{readonly}} mutates only the middle and bottom tiers'] = function () {\n var _this3 = this;\n\n var middle = void 0,\n bottom = void 0;\n\n this.registerComponent('x-bottom', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n bottom = this;\n }\n }),\n template: '{{bar}}'\n });\n\n this.registerComponent('x-middle', {\n ComponentClass: _helpers.Component.extend({\n didInsertElement: function () {\n middle = this;\n }\n }),\n template: '{{foo}} {{x-bottom bar=(mut foo)}}'\n });\n\n this.render('{{x-middle foo=(readonly val)}}', {\n val: 12\n });\n\n this.assertText('12 12');\n\n this.assertStableRerender();\n\n this.assert.equal((0, _emberMetal.get)(bottom, 'bar'), 12, \"bottom's local bar received the value\");\n this.assert.equal((0, _emberMetal.get)(middle, 'foo'), 12, \"middle's local foo received the value\");\n\n // updating the mut-cell directly\n this.runTask(function () {\n return bottom.attrs.bar.update(13);\n });\n\n this.assert.equal((0, _emberMetal.get)(bottom, 'bar'), 13, \"bottom's local bar was updated after set of bottom's bar\");\n this.assert.equal((0, _emberMetal.get)(middle, 'foo'), 13, \"middle's local foo was updated after set of bottom's bar\");\n this.assertText('13 13');\n this.assert.equal((0, _emberMetal.get)(this.context, 'val'), 12, 'But context val is not updated');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(bottom, 'bar', 14);\n });\n\n this.assert.equal((0, _emberMetal.get)(bottom, 'bar'), 14, \"bottom's local bar was updated after set of bottom's bar\");\n this.assert.equal((0, _emberMetal.get)(middle, 'foo'), 14, \"middle's local foo was updated after set of bottom's bar\");\n this.assertText('14 14');\n this.assert.equal((0, _emberMetal.get)(this.context, 'val'), 12, 'But context val is not updated');\n\n this.assert.notOk(middle.attrs.foo.update, \"middle's foo attr is not a mutable cell\");\n this.runTask(function () {\n return (0, _emberMetal.set)(middle, 'foo', 15);\n });\n\n this.assertText('15 15');\n this.assert.equal((0, _emberMetal.get)(middle, 'foo'), 15, \"set of middle's foo took effect\");\n this.assert.equal((0, _emberMetal.get)(bottom, 'bar'), 15, \"bottom's local bar was updated after set of middle's foo\");\n this.assert.equal((0, _emberMetal.get)(this.context, 'val'), 12, 'Context val remains unchanged');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'val', 10);\n });\n\n this.assertText('10 10');\n this.assert.equal((0, _emberMetal.get)(bottom, 'bar'), 10, \"bottom's local bar was updated after set of context's val\");\n this.assert.equal((0, _emberMetal.get)(middle, 'foo'), 10, \"middle's local foo was updated after set of context's val\");\n\n // setting as a normal property\n this.runTask(function () {\n return (0, _emberMetal.set)(bottom, 'bar', undefined);\n });\n\n this.assertText(' ');\n this.assert.equal((0, _emberMetal.get)(bottom, 'bar'), undefined, \"bottom's local bar was updated to a falsy value\");\n this.assert.equal((0, _emberMetal.get)(middle, 'foo'), undefined, \"middle's local foo was updated to a falsy value\");\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'val', 12);\n });\n this.assertText('12 12', 'bottom and middle were both reset');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/render-test', ['ember-babel', 'ember-metal', '@ember/controller', 'ember-environment', 'ember-glimmer/tests/utils/test-case'], function (_emberBabel, _emberMetal, _controller, _emberEnvironment, _testCase) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{render}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n\n _this.originalRenderSupport = _emberEnvironment.ENV._ENABLE_RENDER_SUPPORT;\n _emberEnvironment.ENV._ENABLE_RENDER_SUPPORT = true;\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _RenderingTest.prototype.teardown.call(this);\n _emberEnvironment.ENV._ENABLE_RENDER_SUPPORT = this.originalRenderSupport;\n };\n\n _class.prototype['@test should render given template'] = function () {\n var _this2 = this;\n\n this.registerTemplate('home', 'BYE
');\n\n expectDeprecation(function () {\n _this2.render('HI {{render \\'home\\'}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HIBYE');\n };\n\n _class.prototype['@test uses `controller:basic` as the basis for a generated controller when none exists for specified name'] = function () {\n var _this3 = this;\n\n this.owner.register('controller:basic', _controller.default.extend({\n isBasicController: true\n }));\n this.registerTemplate('home', '{{isBasicController}}');\n\n expectDeprecation(function () {\n _this3.render('{{render \\'home\\'}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('true');\n };\n\n _class.prototype['@test generates a controller if none exists'] = function () {\n var _this4 = this;\n\n this.registerTemplate('home', '{{this}}
');\n\n expectDeprecation(function () {\n _this4.render('HI {{render \\'home\\'}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HI(generated home controller)');\n };\n\n _class.prototype['@test should use controller with the same name as template if present'] = function () {\n var _this5 = this;\n\n this.owner.register('controller:home', _controller.default.extend({ name: 'home' }));\n this.registerTemplate('home', '{{name}}BYE
');\n\n expectDeprecation(function () {\n _this5.render('HI {{render \\'home\\'}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HIhomeBYE');\n };\n\n _class.prototype['@test should render nested helpers'] = function () {\n var _this6 = this;\n\n this.owner.register('controller:home', _controller.default.extend());\n this.owner.register('controller:foo', _controller.default.extend());\n this.owner.register('controller:bar', _controller.default.extend());\n this.owner.register('controller:baz', _controller.default.extend());\n\n this.registerTemplate('home', 'BYE
');\n this.registerTemplate('baz', 'BAZ
');\n\n expectDeprecation(function () {\n _this6.registerTemplate('foo', 'FOO
{{render \\'bar\\'}}');\n _this6.registerTemplate('bar', 'BAR
{{render \\'baz\\'}}');\n _this6.render(\"HI {{render 'foo'}}\");\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HIFOOBARBAZ');\n };\n\n _class.prototype['@test should have assertion if the template does not exist'] = function () {\n var _this7 = this;\n\n this.owner.register('controller:oops', _controller.default.extend());\n\n expectDeprecation(function () {\n expectAssertion(function () {\n _this7.render('HI {{render \\'oops\\'}}');\n }, \"You used `{{render 'oops'}}`, but 'oops' can not be found as a template.\");\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n };\n\n _class.prototype['@test should render given template with the singleton controller as its context'] = function () {\n var _this8 = this;\n\n this.owner.register('controller:post', _controller.default.extend({\n init: function () {\n this.set('title', 'It\\'s Simple Made Easy');\n }\n }));\n this.registerTemplate('post', '{{title}}
');\n\n expectDeprecation(function () {\n _this8.render('HI {{render \\'post\\'}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HIIt\\'s Simple Made Easy');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('HIIt\\'s Simple Made Easy');\n\n var controller = this.owner.lookup('controller:post');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(controller, 'title', 'Rails is omakase');\n });\n\n this.assertText('HIRails is omakase');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(controller, 'title', 'It\\'s Simple Made Easy');\n });\n\n this.assertText('HIIt\\'s Simple Made Easy');\n };\n\n _class.prototype['@test should not destroy the singleton controller on teardown'] = function (assert) {\n var _this9 = this;\n\n var willDestroyFired = 0;\n\n this.owner.register('controller:post', _controller.default.extend({\n init: function () {\n this.set('title', 'It\\'s Simple Made Easy');\n },\n willDestroy: function () {\n this._super.apply(this, arguments);\n willDestroyFired++;\n }\n }));\n\n this.registerTemplate('post', '{{title}}
');\n\n expectDeprecation(function () {\n _this9.render('{{#if showPost}}{{render \\'post\\'}}{{else}}Nothing here{{/if}}', {\n showPost: false\n });\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('Nothing here');\n\n assert.strictEqual(willDestroyFired, 0, 'it did not destroy the controller');\n\n this.runTask(function () {\n return _this9.rerender();\n });\n\n this.assertText('Nothing here');\n\n assert.strictEqual(willDestroyFired, 0, 'it did not destroy the controller');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'showPost', true);\n });\n\n this.assertText('It\\'s Simple Made Easy');\n\n assert.strictEqual(willDestroyFired, 0, 'it did not destroy the controller');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'showPost', false);\n });\n\n this.assertText('Nothing here');\n\n assert.strictEqual(willDestroyFired, 0, 'it did not destroy the controller');\n };\n\n _class.prototype['@test should render given template with a supplied model'] = function () {\n var _this10 = this;\n\n this.owner.register('controller:post', _controller.default.extend());\n this.registerTemplate('post', '{{model.title}}
');\n\n expectDeprecation(function () {\n _this10.render('HI {{render \\'post\\' post}}', {\n post: {\n title: 'It\\'s Simple Made Easy'\n }\n });\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HIIt\\'s Simple Made Easy');\n\n this.runTask(function () {\n return _this10.rerender();\n });\n\n this.assertText('HIIt\\'s Simple Made Easy');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'post.title', 'Rails is omakase');\n });\n\n this.assertText('HIRails is omakase');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'post', { title: 'It\\'s Simple Made Easy' });\n });\n\n this.assertText('HIIt\\'s Simple Made Easy');\n };\n\n _class.prototype['@test should destroy the non-singleton controllers on teardown'] = function (assert) {\n var _this11 = this;\n\n var willDestroyFired = 0;\n\n this.owner.register('controller:post', _controller.default.extend({\n willDestroy: function () {\n this._super.apply(this, arguments);\n willDestroyFired++;\n }\n }));\n\n this.registerTemplate('post', '{{model.title}}
');\n\n expectDeprecation(function () {\n _this11.render('{{#if showPost}}{{render \\'post\\' post}}{{else}}Nothing here{{/if}}', {\n showPost: false,\n post: {\n title: 'It\\'s Simple Made Easy'\n }\n });\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('Nothing here');\n\n assert.strictEqual(willDestroyFired, 0, 'it did not destroy the controller');\n\n this.runTask(function () {\n return _this11.rerender();\n });\n\n this.assertText('Nothing here');\n\n assert.strictEqual(willDestroyFired, 0, 'it did not destroy the controller');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'showPost', true);\n });\n\n this.assertText('It\\'s Simple Made Easy');\n\n assert.strictEqual(willDestroyFired, 0, 'it did not destroy the controller');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'showPost', false);\n });\n\n this.assertText('Nothing here');\n\n assert.strictEqual(willDestroyFired, 1, 'it did destroy the controller');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'showPost', true);\n });\n\n this.assertText('It\\'s Simple Made Easy');\n\n assert.strictEqual(willDestroyFired, 1, 'it did not destroy the controller');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'showPost', false);\n });\n\n this.assertText('Nothing here');\n\n assert.strictEqual(willDestroyFired, 2, 'it did destroy the controller');\n };\n\n _class.prototype['@test with a supplied model should not fire observers on the controller'] = function (assert) {\n var _this12 = this;\n\n this.owner.register('controller:post', _controller.default.extend());\n this.registerTemplate('post', '{{model.title}}
');\n\n var postDidChange = 0;\n expectDeprecation(function () {\n _this12.render('HI {{render \\'post\\' post}}', {\n postDidChange: (0, _emberMetal.observer)('post', function () {\n postDidChange++;\n }),\n post: {\n title: 'It\\'s Simple Made Easy'\n }\n });\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HIIt\\'s Simple Made Easy');\n\n this.runTask(function () {\n return _this12.rerender();\n });\n\n this.assertText('HIIt\\'s Simple Made Easy');\n assert.equal(postDidChange, 0);\n };\n\n _class.prototype['@test should raise an error when a given controller name does not resolve to a controller'] = function () {\n var _this13 = this;\n\n this.registerTemplate('home', 'BYE
');\n this.owner.register('controller:posts', _controller.default.extend());\n\n expectDeprecation(function () {\n expectAssertion(function () {\n _this13.render('HI {{render \"home\" controller=\"postss\"}}');\n }, /The controller name you supplied \\'postss\\' did not resolve to a controller./);\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n };\n\n _class.prototype['@test should render with given controller'] = function (assert) {\n var _this14 = this;\n\n this.registerTemplate('home', '{{uniqueId}}');\n\n var id = 0;\n var model = {};\n\n this.owner.register('controller:posts', _controller.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.uniqueId = id++;\n this.set('model', model);\n }\n }));\n\n expectDeprecation(function () {\n _this14.render('{{render \"home\" controller=\"posts\"}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n var renderedController = this.owner.lookup('controller:posts');\n var uniqueId = renderedController.get('uniqueId');\n var renderedModel = renderedController.get('model');\n\n assert.equal(uniqueId, 0);\n assert.equal(renderedModel, model);\n this.assertText('0');\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n assert.equal(uniqueId, 0);\n assert.equal(renderedModel, model);\n this.assertText('0');\n };\n\n _class.prototype['@test should render templates with models multiple times'] = function () {\n var _this15 = this;\n\n this.owner.register('controller:post', _controller.default.extend());\n\n this.registerTemplate('post', '{{model.title}}
');\n expectDeprecation(function () {\n _this15.render('HI {{render \\'post\\' post1}} {{render \\'post\\' post2}}', {\n post1: {\n title: 'Me First'\n },\n post2: {\n title: 'Then me'\n }\n });\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.assertText('HI Me First Then me');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('HI Me First Then me');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'post1.title', 'I am new');\n });\n\n this.assertText('HI I am new Then me');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'post1', { title: 'Me First' });\n });\n\n this.assertText('HI Me First Then me');\n };\n\n _class.prototype['@test should not treat invocations with falsy contexts as context-less'] = function (assert) {\n var _this16 = this;\n\n this.registerTemplate('post', '{{#unless model.zero}}NOTHING{{/unless}}
');\n this.owner.register('controller:post', _controller.default.extend());\n\n expectDeprecation(function () {\n _this16.render('HI {{render \\'post\\' zero}} {{render \\'post\\' nonexistent}}', {\n model: {\n zero: false\n }\n });\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n assert.ok(this.$().text().match(/^HI ?NOTHING ?NOTHING$/));\n };\n\n _class.prototype['@test should render templates both with and without models'] = function (assert) {\n var _this17 = this;\n\n this.registerTemplate('post', 'Title:{{model.title}}
');\n this.owner.register('controller:post', _controller.default.extend());\n\n var post = {\n title: 'Rails is omakase'\n };\n expectDeprecation(function () {\n _this17.render('HI {{render \\'post\\'}} {{render \\'post\\' post}}', {\n post: post\n });\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n assert.ok(this.$().text().match(/^HI ?Title: ?Title:Rails is omakase$/));\n\n this.runTask(function () {\n return _this17.rerender();\n });\n\n assert.ok(this.$().text().match(/^HI ?Title: ?Title:Rails is omakase$/));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'post.title', 'Simple Made Easy');\n });\n\n assert.ok(this.$().text().match(/^HI ?Title: ?Title:Simple Made Easy$/));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'post', { title: 'Rails is omakase' });\n });\n\n assert.ok(this.$().text().match(/^HI ?Title: ?Title:Rails is omakase$/));\n };\n\n _class.prototype['@test works with dot notation'] = function () {\n var _this18 = this;\n\n this.registerTemplate('blog.post', '{{uniqueId}}');\n\n var id = 0;\n this.owner.register('controller:blog.post', _controller.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.uniqueId = id++;\n }\n }));\n\n expectDeprecation(function () {\n _this18.render('{{render \"blog.post\"}}');\n }, /Please refactor [\\w\\.{\\}\"` ]+ to a component/);\n\n this.assertText('0');\n };\n\n _class.prototype['@test throws an assertion if called with an unquoted template name'] = function () {\n var _this19 = this;\n\n this.registerTemplate('home', 'BYE
');\n\n expectAssertion(function () {\n _this19.render('HI {{render home}}');\n }, 'The first argument of {{render}} must be quoted, e.g. {{render \"sidebar\"}}.');\n };\n\n _class.prototype['@test throws an assertion if called with a literal for a model'] = function () {\n var _this20 = this;\n\n this.registerTemplate('home', 'BYE
');\n expectAssertion(function () {\n _this20.render('HI {{render \"home\" \"model\"}}', {\n model: {\n title: 'Simple Made Easy'\n }\n });\n }, 'The second argument of {{render}} must be a path, e.g. {{render \"post\" post}}.');\n };\n\n _class.prototype['@test should set router as target when action not found on parentController is not found'] = function (assert) {\n var _this21 = this;\n\n var postController = void 0;\n this.registerTemplate('post', 'post template');\n this.owner.register('controller:post', _controller.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n postController = this;\n }\n }));\n\n this.owner.register('router:main', {\n send: function (actionName) {\n assert.equal(actionName, 'someAction');\n assert.ok(true, 'routerStub#send called');\n }\n }, { instantiate: false });\n\n expectDeprecation(function () {\n _this21.render('{{render \\'post\\' post1}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n postController.send('someAction');\n };\n\n _class.prototype['@test render helper emits useful backtracking re-render assertion message'] = function () {\n var _this22 = this;\n\n this.owner.register('controller:outer', _controller.default.extend());\n this.owner.register('controller:inner', _controller.default.extend({\n propertyWithError: (0, _emberMetal.computed)(function () {\n this.set('model.name', 'this will cause a backtracking error');\n return 'foo';\n })\n }));\n\n var expectedBacktrackingMessage = /modified \"model\\.name\" twice on \\[object Object\\] in a single render\\. It was rendered in \"controller:outer \\(with the render helper\\)\" and modified in \"controller:inner \\(with the render helper\\)\"/;\n\n expectDeprecation(function () {\n var person = { name: 'Ben' };\n\n _this22.registerTemplate('outer', 'Hi {{model.name}} | {{render \\'inner\\' model}}');\n _this22.registerTemplate('inner', 'Hi {{propertyWithError}}');\n\n expectAssertion(function () {\n _this22.render('{{render \\'outer\\' person}}', { person: person });\n }, expectedBacktrackingMessage);\n });\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/text-area-test', ['ember-babel', '@ember/polyfills', 'ember-metal', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/test-helpers', 'ember-glimmer/tests/utils/abstract-test-case'], function (_emberBabel, _polyfills, _emberMetal, _testCase, _testHelpers, _abstractTestCase) {\n 'use strict';\n\n var TextAreaRenderingTest = function (_RenderingTest) {\n (0, _emberBabel.inherits)(TextAreaRenderingTest, _RenderingTest);\n\n function TextAreaRenderingTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n TextAreaRenderingTest.prototype.assertTextArea = function () {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n attrs = _ref.attrs,\n value = _ref.value;\n\n var mergedAttrs = (0, _polyfills.assign)({ class: (0, _testHelpers.classes)('ember-view ember-text-area') }, attrs);\n this.assertComponentElement(this.firstChild, {\n tagName: 'textarea',\n attrs: mergedAttrs\n });\n\n if (value) {\n this.assert.strictEqual(value, this.firstChild.value);\n }\n };\n\n TextAreaRenderingTest.prototype.triggerEvent = function (type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var event = document.createEvent('Events');\n event.initEvent(type, true, true);\n (0, _polyfills.assign)(event, options);\n\n this.firstChild.dispatchEvent(event);\n };\n\n return TextAreaRenderingTest;\n }(_testCase.RenderingTest);\n\n var BoundTextAreaAttributes = function () {\n function BoundTextAreaAttributes(cases) {\n\n this.cases = cases;\n }\n\n BoundTextAreaAttributes.prototype.generate = function (_ref2) {\n var _ref3;\n\n var attribute = _ref2.attribute,\n first = _ref2.first,\n second = _ref2.second;\n\n return _ref3 = {}, _ref3['@test ' + attribute] = function () {\n var _attrs,\n _this2 = this,\n _attrs2,\n _attrs3;\n\n this.render('{{textarea ' + attribute + '=value}}', {\n value: first\n });\n this.assertTextArea({ attrs: (_attrs = {}, _attrs[attribute] = first, _attrs) });\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'value', second);\n });\n this.assertTextArea({ attrs: (_attrs2 = {}, _attrs2[attribute] = second, _attrs2) });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'value', first);\n });\n this.assertTextArea({ attrs: (_attrs3 = {}, _attrs3[attribute] = first, _attrs3) });\n }, _ref3;\n };\n\n return BoundTextAreaAttributes;\n }();\n\n (0, _abstractTestCase.applyMixins)(TextAreaRenderingTest, new BoundTextAreaAttributes([{ attribute: 'placeholder', first: 'Stuff here', second: 'Other stuff' }, { attribute: 'name', first: 'Stuff here', second: 'Other stuff' }, { attribute: 'title', first: 'Stuff here', second: 'Other stuff' }, { attribute: 'maxlength', first: '1', second: '2' }, { attribute: 'rows', first: '1', second: '2' }, { attribute: 'cols', first: '1', second: '2' }, { attribute: 'tabindex', first: '1', second: '2' }]));\n\n (0, _testCase.moduleFor)('Helpers test: {{textarea}}', function (_TextAreaRenderingTes) {\n (0, _emberBabel.inherits)(_class, _TextAreaRenderingTes);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TextAreaRenderingTes.apply(this, arguments));\n }\n\n _class.prototype['@test Should insert a textarea'] = function (assert) {\n this.render('{{textarea}}');\n\n assert.equal(this.$('textarea').length, 1);\n\n this.assertStableRerender();\n };\n\n _class.prototype['@test Should respect disabled'] = function (assert) {\n this.render('{{textarea disabled=disabled}}', {\n disabled: true\n });\n assert.ok(this.$('textarea').is(':disabled'));\n };\n\n _class.prototype['@test Should respect disabled when false'] = function (assert) {\n this.render('{{textarea disabled=disabled}}', {\n disabled: false\n });\n assert.ok(this.$('textarea').is(':not(:disabled)'));\n };\n\n _class.prototype['@test Should become disabled when the context changes'] = function (assert) {\n var _this4 = this;\n\n this.render('{{textarea disabled=disabled}}');\n assert.ok(this.$('textarea').is(':not(:disabled)'));\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'disabled', true);\n });\n assert.ok(this.$('textarea').is(':disabled'));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'disabled', false);\n });\n assert.ok(this.$('textarea').is(':not(:disabled)'));\n };\n\n _class.prototype['@test Should bind its contents to the specified value'] = function () {\n var _this5 = this;\n\n this.render('{{textarea value=model.val}}', {\n model: { val: 'A beautiful day in Seattle' }\n });\n this.assertTextArea({ value: 'A beautiful day in Seattle' });\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model.val', 'Auckland');\n });\n this.assertTextArea({ value: 'Auckland' });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model', { val: 'A beautiful day in Seattle' });\n });\n this.assertTextArea({ value: 'A beautiful day in Seattle' });\n };\n\n _class.prototype['@test GH#14001 Should correctly handle an empty string bound value'] = function () {\n var _this6 = this;\n\n this.render('{{textarea value=message}}', { message: '' });\n\n this.assert.strictEqual(this.firstChild.value, '');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'message', 'hello');\n });\n\n this.assert.strictEqual(this.firstChild.value, 'hello');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'message', '');\n });\n\n this.assert.strictEqual(this.firstChild.value, '');\n };\n\n _class.prototype['@test should update the value for `cut` / `input` / `change` events'] = function () {\n var _this7 = this;\n\n this.render('{{textarea value=model.val}}', {\n model: { val: 'A beautiful day in Seattle' }\n });\n this.assertTextArea({ value: 'A beautiful day in Seattle' });\n\n this.assertStableRerender();\n\n this.runTask(function () {\n _this7.firstChild.value = 'Auckland';\n _this7.triggerEvent('cut');\n });\n this.assertTextArea({ value: 'Auckland' });\n\n this.runTask(function () {\n _this7.firstChild.value = 'Hope';\n _this7.triggerEvent('paste');\n });\n this.assertTextArea({ value: 'Hope' });\n\n this.runTask(function () {\n _this7.firstChild.value = 'Boston';\n _this7.triggerEvent('input');\n });\n this.assertTextArea({ value: 'Boston' });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'model', { val: 'A beautiful day in Seattle' });\n });\n this.assertTextArea({ value: 'A beautiful day in Seattle' });\n };\n\n return _class;\n }(TextAreaRenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/unbound-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-metal', 'ember-glimmer/tests/utils/helpers', 'ember-runtime'], function (_emberBabel, _testCase, _abstractTestCase, _emberMetal, _helpers, _emberRuntime) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n '], ['\\n \\n ']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{unbound (surround model.prefix model.value \"bar\")}} {{surround model.prefix model.value \"bar\"}} {{unbound (surround \"bar\" model.value model.suffix)}} {{surround \"bar\" model.value model.suffix}}'], ['\\n {{unbound (surround model.prefix model.value \"bar\")}} {{surround model.prefix model.value \"bar\"}} {{unbound (surround \"bar\" model.value model.suffix)}} {{surround \"bar\" model.value model.suffix}}']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#if (unbound model.foo)}}\\n {{#if model.bar}}true{{/if}}\\n {{#unless model.bar}}false{{/unless}}\\n {{/if}}\\n {{#unless (unbound model.notfoo)}}\\n {{#if model.bar}}true{{/if}}\\n {{#unless model.bar}}false{{/unless}}\\n {{/unless}}'], ['\\n {{#if (unbound model.foo)}}\\n {{#if model.bar}}true{{/if}}\\n {{#unless model.bar}}false{{/unless}}\\n {{/if}}\\n {{#unless (unbound model.notfoo)}}\\n {{#if model.bar}}true{{/if}}\\n {{#unless model.bar}}false{{/unless}}\\n {{/unless}}']);\n\n (0, _testCase.moduleFor)('Helpers test: {{unbound}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test should be able to output a property without binding'] = function () {\n var _this2 = this;\n\n this.render('{{unbound content.anUnboundString}}
', {\n content: {\n anUnboundString: 'No spans here, son.'\n }\n });\n\n this.assertText('No spans here, son.');\n\n this.runTask(function () {\n return _this2.rerender();\n });\n\n this.assertText('No spans here, son.');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'content.anUnboundString', 'HEY');\n });\n\n this.assertText('No spans here, son.');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'content', {\n anUnboundString: 'No spans here, son.'\n });\n });\n\n this.assertText('No spans here, son.');\n };\n\n _class.prototype['@test should be able to use unbound helper in #each helper'] = function () {\n var _this3 = this;\n\n this.render('{{#each items as |item|}}{{unbound item}} {{/each}} ', {\n items: (0, _emberRuntime.A)(['a', 'b', 'c', 1, 2, 3])\n });\n\n this.assertText('abc123');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('abc123');\n };\n\n _class.prototype['@test should be able to use unbound helper in #each helper (with objects)'] = function () {\n var _this4 = this;\n\n this.render('{{#each items as |item|}}{{unbound item.wham}} {{/each}} ', {\n items: (0, _emberRuntime.A)([{ wham: 'bam' }, { wham: 1 }])\n });\n\n this.assertText('bam1');\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assertText('bam1');\n\n this.runTask(function () {\n return _this4.context.items.setEach('wham', 'HEY');\n });\n\n this.assertText('bam1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'items', (0, _emberRuntime.A)([{ wham: 'bam' }, { wham: 1 }]));\n });\n\n this.assertText('bam1');\n };\n\n _class.prototype['@test it should assert unbound cannot be called with multiple arguments'] = function () {\n var _this5 = this;\n\n expectAssertion(function () {\n _this5.render('{{unbound foo bar}}', {\n foo: 'BORK',\n bar: 'BLOOP'\n });\n }, /unbound helper cannot be called with multiple params or hash params/);\n };\n\n _class.prototype['@test should render on attributes'] = function () {\n var _this6 = this;\n\n this.render(' ', {\n model: { foo: 'BORK' }\n });\n\n this.assertHTML(' ');\n\n this.runTask(function () {\n return _this6.rerender();\n });\n\n this.assertHTML(' ');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'model.foo', 'OOF');\n });\n\n this.assertHTML(' ');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'model', { foo: 'BORK' });\n });\n\n this.assertHTML(' ');\n };\n\n _class.prototype['@test should property escape unsafe hrefs'] = function () {\n var _this7 = this;\n\n var unsafeUrls = (0, _emberRuntime.A)([{\n name: 'Bob',\n url: 'javascript:bob-is-cool' // jshint ignore:line\n }, {\n name: 'James',\n url: 'vbscript:james-is-cool' // jshint ignore:line\n }, {\n name: 'Richard',\n url: 'javascript:richard-is-cool' // jshint ignore:line\n }]);\n\n this.render('', {\n people: unsafeUrls\n });\n\n var escapedHtml = (0, _abstractTestCase.strip)(_templateObject);\n\n this.assertHTML(escapedHtml);\n\n this.runTask(function () {\n return _this7.rerender();\n });\n\n this.assertHTML(escapedHtml);\n\n this.runTask(function () {\n return _this7.context.people.setEach('url', 'http://google.com');\n });\n\n this.assertHTML(escapedHtml);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'people', unsafeUrls);\n });\n\n this.assertHTML(escapedHtml);\n };\n\n _class.prototype['@skip helper form updates on parent re-render'] = function () {\n var _this8 = this;\n\n this.render('{{unbound foo}}', {\n foo: 'BORK'\n });\n\n this.assertText('BORK');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('BORK');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'foo', 'OOF');\n });\n\n this.assertText('BORK');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('OOF');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'foo', '');\n });\n\n this.assertText('OOF');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'foo', 'BORK');\n });\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('BORK');\n };\n\n _class.prototype['@test sexpr form does not update no matter what'] = function () {\n var _this9 = this;\n\n this.registerHelper('capitalize', function (args) {\n return args[0].toUpperCase();\n });\n\n this.render('{{capitalize (unbound foo)}}', {\n foo: 'bork'\n });\n\n this.assertText('BORK');\n\n this.runTask(function () {\n return _this9.rerender();\n });\n\n this.assertText('BORK');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this9.context, 'foo', 'oof');\n _this9.rerender();\n });\n\n this.assertText('BORK');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'foo', 'blip');\n });\n\n this.assertText('BORK');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this9.context, 'foo', 'bork');\n _this9.rerender();\n });\n\n this.assertText('BORK');\n };\n\n _class.prototype['@test sexpr in helper form does not update on parent re-render'] = function () {\n var _this10 = this;\n\n this.registerHelper('capitalize', function (params) {\n return params[0].toUpperCase();\n });\n\n this.registerHelper('doublize', function (params) {\n return params[0] + ' ' + params[0];\n });\n\n this.render('{{capitalize (unbound (doublize foo))}}', {\n foo: 'bork'\n });\n\n this.assertText('BORK BORK');\n\n this.runTask(function () {\n return _this10.rerender();\n });\n\n this.assertText('BORK BORK');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this10.context, 'foo', 'oof');\n _this10.rerender();\n });\n\n this.assertText('BORK BORK');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'foo', 'blip');\n });\n\n this.assertText('BORK BORK');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this10.context, 'foo', 'bork');\n _this10.rerender();\n });\n\n this.assertText('BORK BORK');\n };\n\n _class.prototype['@test should be able to render an unbound helper invocation'] = function () {\n var _this11 = this;\n\n this.registerHelper('repeat', function (_ref, _ref2) {\n var value = _ref[0];\n var count = _ref2.count;\n\n var a = [];\n while (a.length < count) {\n a.push(value);\n }\n return a.join('');\n });\n\n this.render('{{unbound (repeat foo count=bar)}} {{repeat foo count=bar}} {{unbound (repeat foo count=2)}} {{repeat foo count=4}}', {\n foo: 'X',\n bar: 5\n });\n\n this.assertText('XXXXX XXXXX XX XXXX');\n\n this.runTask(function () {\n return _this11.rerender();\n });\n\n this.assertText('XXXXX XXXXX XX XXXX');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'bar', 1);\n });\n\n this.assertText('XXXXX X XX XXXX');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'bar', 5);\n });\n\n this.assertText('XXXXX XXXXX XX XXXX');\n };\n\n _class.prototype['@test should be able to render an bound helper invocation mixed with static values'] = function () {\n var _this12 = this;\n\n this.registerHelper('surround', function (_ref3) {\n var prefix = _ref3[0],\n value = _ref3[1],\n suffix = _ref3[2];\n return prefix + '-' + value + '-' + suffix;\n });\n\n this.render((0, _abstractTestCase.strip)(_templateObject2), {\n model: {\n prefix: 'before',\n value: 'core',\n suffix: 'after'\n }\n });\n\n this.assertText('before-core-bar before-core-bar bar-core-after bar-core-after');\n\n this.runTask(function () {\n return _this12.rerender();\n });\n\n this.assertText('before-core-bar before-core-bar bar-core-after bar-core-after');\n\n this.runTask(function () {\n (0, _emberMetal.setProperties)(_this12.context.model, {\n prefix: 'beforeChanged',\n value: 'coreChanged',\n suffix: 'afterChanged'\n });\n });\n\n this.assertText('before-core-bar beforeChanged-coreChanged-bar bar-core-after bar-coreChanged-afterChanged');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this12.context, 'model', {\n prefix: 'before',\n value: 'core',\n suffix: 'after'\n });\n });\n\n this.assertText('before-core-bar before-core-bar bar-core-after bar-core-after');\n };\n\n _class.prototype['@test should be able to render unbound forms of multi-arg helpers'] = function () {\n var _this13 = this;\n\n this.registerHelper('fauxconcat', function (params) {\n return params.join('');\n });\n\n this.render('{{fauxconcat model.foo model.bar model.bing}} {{unbound (fauxconcat model.foo model.bar model.bing)}}', {\n model: {\n foo: 'a',\n bar: 'b',\n bing: 'c'\n }\n });\n\n this.assertText('abc abc');\n\n this.runTask(function () {\n return _this13.rerender();\n });\n\n this.assertText('abc abc');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'model.bar', 'X');\n });\n\n this.assertText('aXc abc');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'model', {\n foo: 'a',\n bar: 'b',\n bing: 'c'\n });\n });\n\n this.assertText('abc abc');\n };\n\n _class.prototype['@test should be able to render an unbound helper invocation for helpers with dependent keys'] = function () {\n var _this14 = this;\n\n this.registerHelper('capitalizeName', {\n destroy: function () {\n this.removeObserver('value.firstName');\n this._super.apply(this, arguments);\n },\n compute: function (_ref4) {\n var value = _ref4[0];\n\n if (this.get('value')) {\n this.removeObserver('value.firstName');\n }\n this.set('value', value);\n this.addObserver('value.firstName', this, this.recompute);\n return value ? (0, _emberMetal.get)(value, 'firstName').toUpperCase() : '';\n }\n });\n\n this.registerHelper('concatNames', {\n destroy: function () {\n this.teardown();\n this._super.apply(this, arguments);\n },\n teardown: function () {\n this.removeObserver('value.firstName');\n this.removeObserver('value.lastName');\n },\n compute: function (_ref5) {\n var value = _ref5[0];\n\n if (this.get('value')) {\n this.teardown();\n }\n this.set('value', value);\n this.addObserver('value.firstName', this, this.recompute);\n this.addObserver('value.lastName', this, this.recompute);\n return (value ? (0, _emberMetal.get)(value, 'firstName') : '') + (value ? (0, _emberMetal.get)(value, 'lastName') : '');\n }\n });\n\n this.render('{{capitalizeName person}} {{unbound (capitalizeName person)}} {{concatNames person}} {{unbound (concatNames person)}}', {\n person: {\n firstName: 'shooby',\n lastName: 'taylor'\n }\n });\n\n this.assertText('SHOOBY SHOOBY shoobytaylor shoobytaylor');\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n this.assertText('SHOOBY SHOOBY shoobytaylor shoobytaylor');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'person.firstName', 'sally');\n });\n\n this.assertText('SALLY SHOOBY sallytaylor shoobytaylor');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'person', {\n firstName: 'shooby',\n lastName: 'taylor'\n });\n });\n\n this.assertText('SHOOBY SHOOBY shoobytaylor shoobytaylor');\n };\n\n _class.prototype['@test should be able to render an unbound helper invocation in #each helper'] = function () {\n var _this15 = this;\n\n this.registerHelper('capitalize', function (params) {\n return params[0].toUpperCase();\n });\n\n this.render('{{#each people as |person|}}{{capitalize person.firstName}} {{unbound (capitalize person.firstName)}}{{/each}}', {\n people: (0, _emberRuntime.A)([{\n firstName: 'shooby',\n lastName: 'taylor'\n }, {\n firstName: 'cindy',\n lastName: 'taylor'\n }])\n });\n\n this.assertText('SHOOBY SHOOBYCINDY CINDY');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('SHOOBY SHOOBYCINDY CINDY');\n\n this.runTask(function () {\n return _this15.context.people.setEach('firstName', 'chad');\n });\n\n this.assertText('CHAD SHOOBYCHAD CINDY');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'people', (0, _emberRuntime.A)([{\n firstName: 'shooby',\n lastName: 'taylor'\n }, {\n firstName: 'cindy',\n lastName: 'taylor'\n }]));\n });\n\n this.assertText('SHOOBY SHOOBYCINDY CINDY');\n };\n\n _class.prototype['@test should be able to render an unbound helper invocation with bound hash options'] = function () {\n var _this16 = this;\n\n this.registerHelper('capitalizeName', {\n destroy: function () {\n this.removeObserver('value.firstName');\n this._super.apply(this, arguments);\n },\n compute: function (_ref6) {\n var value = _ref6[0];\n\n if (this.get('value')) {\n this.removeObserver('value.firstName');\n }\n this.set('value', value);\n this.addObserver('value.firstName', this, this.recompute);\n return value ? (0, _emberMetal.get)(value, 'firstName').toUpperCase() : '';\n }\n });\n\n this.registerHelper('concatNames', {\n destroy: function () {\n this.teardown();\n this._super.apply(this, arguments);\n },\n teardown: function () {\n this.removeObserver('value.firstName');\n this.removeObserver('value.lastName');\n },\n compute: function (_ref7) {\n var value = _ref7[0];\n\n if (this.get('value')) {\n this.teardown();\n }\n this.set('value', value);\n this.addObserver('value.firstName', this, this.recompute);\n this.addObserver('value.lastName', this, this.recompute);\n return (value ? (0, _emberMetal.get)(value, 'firstName') : '') + (value ? (0, _emberMetal.get)(value, 'lastName') : '');\n }\n });\n\n this.render('{{capitalizeName person}} {{unbound (capitalizeName person)}} {{concatNames person}} {{unbound (concatNames person)}}', {\n person: {\n firstName: 'shooby',\n lastName: 'taylor'\n }\n });\n\n this.assertText('SHOOBY SHOOBY shoobytaylor shoobytaylor');\n\n this.runTask(function () {\n return _this16.rerender();\n });\n\n this.assertText('SHOOBY SHOOBY shoobytaylor shoobytaylor');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'person.firstName', 'sally');\n });\n\n this.assertText('SALLY SHOOBY sallytaylor shoobytaylor');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'person', {\n firstName: 'shooby',\n lastName: 'taylor'\n });\n });\n\n this.assertText('SHOOBY SHOOBY shoobytaylor shoobytaylor');\n };\n\n _class.prototype['@test should be able to render bound form of a helper inside unbound form of same helper'] = function () {\n var _this17 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject3), {\n model: {\n foo: true,\n notfoo: false,\n bar: true\n }\n });\n\n this.assertText('truetrue');\n\n this.runTask(function () {\n return _this17.rerender();\n });\n\n this.assertText('truetrue');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'model.bar', false);\n });\n\n this.assertText('falsefalse');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this17.context, 'model', {\n foo: true,\n notfoo: false,\n bar: true\n });\n });\n\n this.assertText('truetrue');\n };\n\n _class.prototype['@test yielding unbound does not update'] = function () {\n var _this18 = this;\n\n var fooBarInstance = void 0;\n var FooBarComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n fooBarInstance = this;\n },\n\n model: { foo: 'bork' }\n });\n\n this.registerComponent('foo-bar', {\n ComponentClass: FooBarComponent,\n template: '{{yield (unbound model.foo)}}'\n });\n\n this.render('{{#foo-bar as |value|}}{{value}}{{/foo-bar}}');\n\n this.assertText('bork');\n\n this.runTask(function () {\n return _this18.rerender();\n });\n\n this.assertText('bork');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(fooBarInstance, 'model.foo', 'oof');\n });\n\n this.assertText('bork');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(fooBarInstance, 'model', { foo: 'bork' });\n });\n\n this.assertText('bork');\n };\n\n _class.prototype['@test yielding unbound hash does not update'] = function () {\n var _this19 = this;\n\n var fooBarInstance = void 0;\n var FooBarComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n fooBarInstance = this;\n },\n\n model: { foo: 'bork' }\n });\n\n this.registerComponent('foo-bar', {\n ComponentClass: FooBarComponent,\n template: '{{yield (unbound (hash foo=model.foo))}}'\n });\n\n this.render('{{#foo-bar as |value|}}{{value.foo}}{{/foo-bar}}');\n\n this.assertText('bork');\n\n this.runTask(function () {\n return _this19.rerender();\n });\n\n this.assertText('bork');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(fooBarInstance, 'model.foo', 'oof');\n });\n\n this.assertText('bork');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(fooBarInstance, 'model', { foo: 'bork' });\n });\n\n this.assertText('bork');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/helpers/yield-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-metal', 'ember-glimmer/tests/utils/helpers'], function (_emberBabel, _testCase, _emberMetal, _helpers) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Helpers test: {{yield}} helper', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test can yield to block'] = function () {\n var _this2 = this;\n\n this.registerComponent('yield-comp', {\n template: '[In layout:] {{yield}}'\n });\n\n this.render('{{#yield-comp}}[In Block:] {{object.title}}{{/yield-comp}}', {\n object: { title: 'Seattle' }\n });\n this.assertText('[In layout:] [In Block:] Seattle');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'object.title', 'Vancouver');\n });\n this.assertText('[In layout:] [In Block:] Vancouver');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'object', { title: 'Seattle' });\n });\n this.assertText('[In layout:] [In Block:] Seattle');\n };\n\n _class.prototype['@test templates should yield to block inside a nested component'] = function () {\n var _this3 = this;\n\n this.registerComponent('outer-comp', {\n template: '[In layout:] {{yield}}
'\n });\n this.registerComponent('inner-comp', {\n template: '{{#outer-comp}}[In Block:] {{object.title}}{{/outer-comp}}'\n });\n\n this.render('{{inner-comp object=object}}', {\n object: { title: 'Seattle' }\n });\n this.assertText('[In layout:] [In Block:] Seattle');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'object.title', 'Vancouver');\n });\n this.assertText('[In layout:] [In Block:] Vancouver');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'object', { title: 'Seattle' });\n });\n this.assertText('[In layout:] [In Block:] Seattle');\n };\n\n _class.prototype['@test templates should yield to block, when the yield is embedded in a each helper'] = function () {\n var _this4 = this;\n\n var list = [1, 2, 3];\n\n this.registerComponent('outer-comp', {\n template: '{{#each list as |item|}}{{yield}}{{/each}}'\n });\n\n this.render('{{#outer-comp list=list}}Hello{{/outer-comp}}', {\n list: list\n });\n this.assertText('HelloHelloHello');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'list', [4, 5]);\n });\n this.assertText('HelloHello');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'list', list);\n });\n this.assertText('HelloHelloHello');\n };\n\n _class.prototype['@test templates should yield to block, when the yield is embedded in a if helper'] = function () {\n var _this5 = this;\n\n this.registerComponent('outer-comp', {\n template: '{{#if boolean}}{{yield}}{{/if}}'\n });\n\n this.render('{{#outer-comp boolean=boolean}}Hello{{/outer-comp}}', {\n boolean: true\n });\n this.assertText('Hello');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'boolean', false);\n });\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'boolean', true);\n });\n this.assertText('Hello');\n };\n\n _class.prototype['@test simple curlies inside of a yielded clock should work when the yield is nested inside of another view'] = function () {\n var _this6 = this;\n\n this.registerComponent('kiwi-comp', {\n template: '{{#if falsy}}{{else}}{{yield}}{{/if}}'\n });\n\n this.render('{{#kiwi-comp}}{{text}}{{/kiwi-comp}}', { text: 'ohai' });\n this.assertText('ohai');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'text', 'portland');\n });\n this.assertText('portland');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'text', 'ohai');\n });\n this.assertText('ohai');\n };\n\n _class.prototype['@test nested simple curlies inside of a yielded block should work when the yield is nested inside of another view'] = function () {\n var _this7 = this;\n\n this.registerComponent('parent-comp', {\n template: '{{#if falsy}}{{else}}{{yield}}{{/if}}'\n });\n this.registerComponent('child-comp', {\n template: '{{#if falsy}}{{else}}{{text}}{{/if}}'\n });\n\n this.render('{{#parent-comp}}{{child-comp text=text}}{{/parent-comp}}', {\n text: 'ohai'\n });\n this.assertText('ohai');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'text', 'portland');\n });\n this.assertText('portland');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'text', 'ohai');\n });\n this.assertText('ohai');\n };\n\n _class.prototype['@test yielding to a non-existent block is not an error'] = function () {\n var _this8 = this;\n\n this.registerComponent('yielding-comp', { template: 'Hello:{{yield}}' });\n this.registerComponent('outer-comp', {\n template: '{{yielding-comp}} {{title}}'\n });\n\n this.render('{{outer-comp title=title}}', { title: 'Mr. Selden' });\n\n this.assertText('Hello: Mr. Selden');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'title', 'Mr. Chag');\n });\n this.assertText('Hello: Mr. Chag');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'title', 'Mr. Selden');\n });\n this.assertText('Hello: Mr. Selden');\n };\n\n _class.prototype['@test yield uses the original context'] = function () {\n var _this9 = this;\n\n var KiwiCompComponent = _helpers.Component.extend({ boundText: 'Inner' });\n\n this.registerComponent('kiwi-comp', {\n ComponentClass: KiwiCompComponent,\n template: '{{boundText}}
{{yield}}
'\n });\n\n this.render('{{#kiwi-comp}}{{boundText}}{{/kiwi-comp}}', {\n boundText: 'Original'\n });\n this.assertText('InnerOriginal');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'boundText', 'Otherworld');\n });\n this.assertText('InnerOtherworld');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'boundText', 'Original');\n });\n this.assertText('InnerOriginal');\n };\n\n _class.prototype[\"@test outer block param doesn't mask inner component property\"] = function () {\n var _this10 = this;\n\n var KiwiCompComponent = _helpers.Component.extend({ boundText: 'Inner' });\n\n this.registerComponent('kiwi-comp', {\n ComponentClass: KiwiCompComponent,\n template: '{{boundText}}
{{yield}}
'\n });\n\n this.render('{{#with boundText as |item|}}{{#kiwi-comp}}{{item}}{{/kiwi-comp}}{{/with}}', {\n boundText: 'Outer'\n });\n this.assertText('InnerOuter');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'boundText', 'Otherworld');\n });\n this.assertText('InnerOtherworld');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this10.context, 'boundText', 'Outer');\n });\n this.assertText('InnerOuter');\n };\n\n _class.prototype[\"@test inner block param doesn't mask yield property\"] = function () {\n var _this11 = this;\n\n var KiwiCompComponent = _helpers.Component.extend({ boundText: 'Inner' });\n\n this.registerComponent('kiwi-comp', {\n ComponentClass: KiwiCompComponent,\n template: '{{#with boundText as |item|}}{{item}}
{{yield}}
{{/with}}'\n });\n\n this.render('{{#kiwi-comp}}{{item}}{{/kiwi-comp}}', { item: 'Outer' });\n this.assertText('InnerOuter');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'item', 'Otherworld');\n });\n this.assertText('InnerOtherworld');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'item', 'Outer');\n });\n this.assertText('InnerOuter');\n };\n\n _class.prototype['@test can bind a block param to a component and use it in yield'] = function () {\n var _this12 = this;\n\n this.registerComponent('kiwi-comp', {\n template: '{{content}}
{{yield}}
'\n });\n\n this.render('{{#with boundText as |item|}}{{#kiwi-comp content=item}}{{item}}{{/kiwi-comp}}{{/with}}', { boundText: 'Outer' });\n this.assertText('OuterOuter');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'boundText', 'Update');\n });\n this.assertText('UpdateUpdate');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'boundText', 'Outer');\n });\n this.assertText('OuterOuter');\n };\n\n _class.prototype['@test yield should not introduce a view'] = function (assert) {\n var ParentCompComponent = _helpers.Component.extend({ isParentComponent: true });\n\n var ChildCompComponent = _helpers.Component.extend({\n didReceiveAttrs: function () {\n this._super();\n var parentView = this.get('parentView');\n\n assert.ok(parentView.get('isParentComponent'));\n }\n });\n\n this.registerComponent('parent-comp', {\n ComponentClass: ParentCompComponent,\n template: '{{yield}}'\n });\n this.registerComponent('child-comp', {\n ComponentClass: ChildCompComponent\n });\n\n this.render('{{#parent-comp}}{{child-comp}}{{/parent-comp}}');\n };\n\n _class.prototype['@test yield with nested components (#3220)'] = function () {\n var _this13 = this;\n\n this.registerComponent('inner-component', { template: '{{yield}}' });\n this.registerComponent('outer-component', {\n template: '{{#inner-component}}{{yield}} {{/inner-component}}'\n });\n\n this.render('{{#outer-component}}Hello {{boundText}}{{/outer-component}}', {\n boundText: 'world'\n });\n this.assertText('Hello world');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'boundText', 'update');\n });\n this.assertText('Hello update');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'boundText', 'world');\n });\n this.assertText('Hello world');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/input-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-metal'], function (_emberBabel, _testCase, _emberMetal) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Input element tests', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype.runAttributeTest = function (attributeName, values) {\n var _this2 = this;\n\n this.render(' ', { value: values[0] });\n this.assertAttributeHasValue(attributeName, values[0], attributeName + ' is set on initial render');\n\n this.runTask(function () {\n return _this2.rerender();\n });\n this.assertAttributeHasValue(attributeName, values[0], attributeName + ' is set on noop rerender');\n\n this.setComponentValue(values[1]);\n this.assertAttributeHasValue(attributeName, values[1], attributeName + ' is set on rerender');\n\n this.setComponentValue(values[0]);\n this.assertAttributeHasValue(attributeName, values[0], attributeName + ' can be set back to the initial value');\n };\n\n _class.prototype.runPropertyTest = function (propertyName, values) {\n var _this3 = this;\n\n this.render(' ', { value: values[0] });\n this.assertPropertyHasValue(propertyName, values[0], propertyName + ' is set on initial render');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n this.assertPropertyHasValue(propertyName, values[0], propertyName + ' is set on noop rerender');\n\n this.setComponentValue(values[1]);\n this.assertPropertyHasValue(propertyName, values[1], propertyName + ' is set on rerender');\n\n this.setComponentValue(values[0]);\n this.assertPropertyHasValue(propertyName, values[0], propertyName + ' can be set back to the initial value');\n };\n\n _class.prototype.runFalsyValueProperty = function (values) {\n var _this4 = this;\n\n var value = 'value';\n\n this.render(' ', { value: values[0] });\n this.assertPropertyHasValue(value, '', value + ' is set on initial render');\n\n this.runTask(function () {\n return _this4.rerender();\n });\n this.assertPropertyHasValue(value, '', value + ' is set on noop rerender');\n this.setComponentValue(values[1]);\n\n this.assertPropertyHasValue(value, values[1], value + ' is set on rerender');\n\n this.setComponentValue(values[0]);\n this.assertPropertyHasValue(value, '', value + ' can be set back to the initial value');\n };\n\n _class.prototype['@test input disabled attribute'] = function () {\n var _this5 = this;\n\n this.render(' ', { model: { value: false } });\n\n this.assert.equal(this.$inputElement().prop('disabled'), false);\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assert.equal(this.$inputElement().prop('disabled'), false);\n\n this.runTask(function () {\n return _this5.context.set('model.value', true);\n });\n\n this.assert.equal(this.$inputElement().prop('disabled'), true);\n this.assertHTML(' '); // Note the DOM output is \n\n this.runTask(function () {\n return _this5.context.set('model.value', 'wat');\n });\n\n this.assert.equal(this.$inputElement().prop('disabled'), true);\n this.assertHTML(' '); // Note the DOM output is \n\n this.runTask(function () {\n return _this5.context.set('model', { value: false });\n });\n\n this.assert.equal(this.$inputElement().prop('disabled'), false);\n this.assertHTML(' ');\n };\n\n _class.prototype['@test input value attribute'] = function () {\n this.runPropertyTest('value', ['foo', 'bar']);\n };\n\n _class.prototype['@test input placeholder attribute'] = function () {\n this.runAttributeTest('placeholder', ['foo', 'bar']);\n };\n\n _class.prototype['@test input name attribute'] = function () {\n this.runAttributeTest('name', ['nam', 'name']);\n };\n\n _class.prototype['@test input maxlength attribute'] = function () {\n this.runAttributeTest('maxlength', [2, 3]);\n };\n\n _class.prototype['@test input size attribute'] = function () {\n this.runAttributeTest('size', [2, 3]);\n };\n\n _class.prototype['@test input tabindex attribute'] = function () {\n this.runAttributeTest('tabindex', [2, 3]);\n };\n\n _class.prototype['@test null input value'] = function () {\n this.runFalsyValueProperty([null, 'hello']);\n };\n\n _class.prototype['@test undefined input value'] = function () {\n this.runFalsyValueProperty([undefined, 'hello']);\n };\n\n _class.prototype['@test undefined `toString` method as input value'] = function () {\n this.runFalsyValueProperty([Object.create(null), 'hello']);\n };\n\n _class.prototype['@test cursor position is not lost when updating content'] = function () {\n this.render(' ', { value: 'hola' });\n\n this.setDOMValue('hello');\n this.setSelectionRange(1, 3);\n\n this.setComponentValue('hello');\n\n this.assertSelectionRange(1, 3);\n\n // Note: We should eventually get around to testing reseting, however\n // browsers handle `selectionStart` and `selectionEnd` differently\n // when are synthetically testing movement of the cursor.\n };\n\n _class.prototype['@test input can be updated multiple times'] = function () {\n this.render(' ', { value: 'hola' });\n\n this.assertValue('hola', 'Value is initialised');\n\n this.setComponentValue('');\n this.assertValue('', 'Value is set in the DOM');\n\n this.setDOMValue('hola');\n this.setComponentValue('hola');\n this.assertValue('hola', 'Value is updated the first time');\n\n this.setComponentValue('');\n this.assertValue('', 'Value is updated the second time');\n };\n\n _class.prototype['@test DOM is SSOT if value is set'] = function () {\n this.render(' ', { value: 'hola' });\n\n this.assertValue('hola', 'Value is initialised');\n\n this.setComponentValue('hello');\n\n this.assertValue('hello', 'Value is initialised');\n\n this.setDOMValue('hola');\n\n this.assertValue('hola', 'DOM is used');\n\n this.setComponentValue('bye');\n\n this.assertValue('bye', 'Value is used');\n\n // Simulates setting the input to the same value as it already is which won't cause a rerender\n\n this.setDOMValue('hola');\n\n this.assertValue('hola', 'DOM is used');\n\n this.setComponentValue('hola');\n\n this.assertValue('hola', 'Value is used');\n };\n\n _class.prototype.setDOMValue = function (value) {\n this.inputElement().value = value;\n };\n\n _class.prototype.setComponentValue = function (value) {\n var _this6 = this;\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'value', value);\n });\n };\n\n _class.prototype.setSelectionRange = function (start, end) {\n this.inputElement().selectionStart = start;\n this.inputElement().selectionEnd = end;\n };\n\n _class.prototype.inputElement = function () {\n return this.$inputElement()[0];\n };\n\n _class.prototype.$inputElement = function () {\n return this.$('input');\n };\n\n _class.prototype.assertValue = function (value, message) {\n this.assertPropertyHasValue('value', value, message);\n };\n\n _class.prototype.assertAttributeHasValue = function (attribute, value, message) {\n this.assert.equal(this.$inputElement().attr(attribute), value, attribute + ' ' + message);\n };\n\n _class.prototype.assertPropertyHasValue = function (property, value, message) {\n this.assert.equal(this.$inputElement().prop(property), value, property + ' ' + message);\n };\n\n _class.prototype.assertSelectionRange = function (start, end) {\n this.assert.equal(this.inputElement().selectionStart, start);\n this.assert.equal(this.inputElement().selectionEnd, end);\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/mount-test', ['ember-babel', 'ember-owner', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers', '@ember/controller', 'ember-metal', '@ember/engine'], function (_emberBabel, _emberOwner, _testCase, _helpers, _controller, _emberMetal, _engine) {\n 'use strict';\n\n (0, _testCase.moduleFor)('{{mount}} single param assertion', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test it asserts that only a single param is passed'] = function () {\n var _this2 = this;\n\n expectAssertion(function () {\n _this2.render('{{mount \"chat\" \"foo\"}}');\n }, /You can only pass a single positional argument to the {{mount}} helper, e.g. {{mount \"chat-engine\"}}./i);\n };\n\n return _class;\n }(_testCase.RenderingTest));\n\n\n (0, _testCase.moduleFor)('{{mount}} assertions', function (_RenderingTest3) {\n (0, _emberBabel.inherits)(_class3, _RenderingTest3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest3.apply(this, arguments));\n }\n\n _class3.prototype['@test it asserts when an invalid engine name is provided'] = function () {\n var _this6 = this;\n\n expectAssertion(function () {\n _this6.render('{{mount engineName}}', { engineName: {} });\n }, /Invalid engine name '\\[object Object\\]' specified, engine name must be either a string, null or undefined./i);\n };\n\n _class3.prototype['@test it asserts that the specified engine is registered'] = function () {\n var _this7 = this;\n\n expectAssertion(function () {\n _this7.render('{{mount \"chat\"}}');\n }, /You used `{{mount 'chat'}}`, but the engine 'chat' can not be found./i);\n };\n\n return _class3;\n }(_testCase.RenderingTest));\n\n (0, _testCase.moduleFor)('{{mount}} test', function (_ApplicationTest) {\n (0, _emberBabel.inherits)(_class4, _ApplicationTest);\n\n function _class4() {\n\n var _this8 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTest.apply(this, arguments));\n\n var engineRegistrations = _this8.engineRegistrations = {};\n\n _this8.add('engine:chat', _engine.default.extend({\n router: null,\n\n init: function () {\n var _this9 = this;\n\n this._super.apply(this, arguments);\n\n Object.keys(engineRegistrations).forEach(function (fullName) {\n _this9.register(fullName, engineRegistrations[fullName]);\n });\n }\n }));\n\n _this8.addTemplate('index', '{{mount \"chat\"}}');\n return _this8;\n }\n\n _class4.prototype['@test it boots an engine, instantiates its application controller, and renders its application template'] = function (assert) {\n var _this10 = this;\n\n this.engineRegistrations['template:application'] = (0, _helpers.compile)('Chat here, {{username}} ', { moduleName: 'my-app/templates/application.hbs' });\n\n var controller = void 0;\n\n this.engineRegistrations['controller:application'] = _controller.default.extend({\n username: 'dgeb',\n\n init: function () {\n this._super();\n controller = this;\n }\n });\n\n return this.visit('/').then(function () {\n assert.ok(controller, \"engine's application controller has been instantiated\");\n\n var engineInstance = (0, _emberOwner.getOwner)(controller);\n assert.strictEqual((0, _engine.getEngineParent)(engineInstance), _this10.applicationInstance, 'engine instance has the application instance as its parent');\n\n _this10.assertInnerHTML('Chat here, dgeb ');\n\n _this10.runTask(function () {\n return (0, _emberMetal.set)(controller, 'username', 'chancancode');\n });\n\n _this10.assertInnerHTML('Chat here, chancancode ');\n\n _this10.runTask(function () {\n return (0, _emberMetal.set)(controller, 'username', 'dgeb');\n });\n\n _this10.assertInnerHTML('Chat here, dgeb ');\n });\n };\n\n _class4.prototype['@test it emits a useful backtracking re-render assertion message'] = function () {\n var _this11 = this;\n\n this.router.map(function () {\n this.route('route-with-mount');\n });\n\n this.addTemplate('index', '');\n this.addTemplate('route-with-mount', '{{mount \"chat\"}}');\n\n this.engineRegistrations['template:application'] = (0, _helpers.compile)('hi {{person.name}} [{{component-with-backtracking-set person=person}}]', { moduleName: 'my-app/templates/application.hbs' });\n this.engineRegistrations['controller:application'] = _controller.default.extend({\n person: { name: 'Alex' }\n });\n\n this.engineRegistrations['template:components/component-with-backtracking-set'] = (0, _helpers.compile)('[component {{person.name}}]', {\n moduleName: 'my-app/templates/components/component-with-backtracking-set.hbs'\n });\n this.engineRegistrations['component:component-with-backtracking-set'] = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.set('person.name', 'Ben');\n }\n });\n\n var expectedBacktrackingMessage = /modified \"person\\.name\" twice on \\[object Object\\] in a single render\\. It was rendered in \"template:my-app\\/templates\\/route-with-mount.hbs\" \\(in \"engine:chat\"\\) and modified in \"component:component-with-backtracking-set\" \\(in \"engine:chat\"\\)/;\n\n return this.visit('/').then(function () {\n expectAssertion(function () {\n _this11.visit('/route-with-mount');\n }, expectedBacktrackingMessage);\n });\n };\n\n _class4.prototype['@test it renders with a bound engine name'] = function () {\n var _this12 = this;\n\n this.router.map(function () {\n this.route('bound-engine-name');\n });\n var controller = void 0;\n this.add('controller:bound-engine-name', _controller.default.extend({\n engineName: null,\n init: function () {\n this._super();\n controller = this;\n }\n }));\n this.addTemplate('bound-engine-name', '{{mount engineName}}');\n\n this.add('engine:foo', _engine.default.extend({\n router: null,\n init: function () {\n this._super.apply(this, arguments);\n this.register('template:application', (0, _helpers.compile)('Foo Engine ', {\n moduleName: 'my-app/templates/application.hbs'\n }));\n }\n }));\n this.add('engine:bar', _engine.default.extend({\n router: null,\n init: function () {\n this._super.apply(this, arguments);\n this.register('template:application', (0, _helpers.compile)('Bar Engine ', {\n moduleName: 'my-app/templates/application.hbs'\n }));\n }\n }));\n\n return this.visit('/bound-engine-name').then(function () {\n _this12.assertInnerHTML('');\n\n _this12.runTask(function () {\n return (0, _emberMetal.set)(controller, 'engineName', 'foo');\n });\n\n _this12.assertInnerHTML('Foo Engine ');\n\n _this12.runTask(function () {\n return (0, _emberMetal.set)(controller, 'engineName', undefined);\n });\n\n _this12.assertInnerHTML('');\n\n _this12.runTask(function () {\n return (0, _emberMetal.set)(controller, 'engineName', 'foo');\n });\n\n _this12.assertInnerHTML('Foo Engine ');\n\n _this12.runTask(function () {\n return (0, _emberMetal.set)(controller, 'engineName', 'bar');\n });\n\n _this12.assertInnerHTML('Bar Engine ');\n\n _this12.runTask(function () {\n return (0, _emberMetal.set)(controller, 'engineName', 'foo');\n });\n\n _this12.assertInnerHTML('Foo Engine ');\n\n _this12.runTask(function () {\n return (0, _emberMetal.set)(controller, 'engineName', null);\n });\n\n _this12.assertInnerHTML('');\n });\n };\n\n _class4.prototype['@test it declares the event dispatcher as a singleton'] = function () {\n var _this13 = this;\n\n this.router.map(function () {\n this.route('engine-event-dispatcher-singleton');\n });\n\n var controller = void 0;\n var component = void 0;\n\n this.add('controller:engine-event-dispatcher-singleton', _controller.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n controller = this;\n }\n }));\n this.addTemplate('engine-event-dispatcher-singleton', '{{mount \"foo\"}}');\n\n this.add('engine:foo', _engine.default.extend({\n router: null,\n init: function () {\n this._super.apply(this, arguments);\n this.register('template:application', (0, _helpers.compile)('Foo Engine: {{tagless-component}} ', {\n moduleName: 'my-app/templates/application.hbs'\n }));\n this.register('component:tagless-component', _helpers.Component.extend({\n tagName: '',\n init: function () {\n this._super.apply(this, arguments);\n component = this;\n }\n }));\n this.register('template:components/tagless-component', (0, _helpers.compile)('Tagless Component', {\n moduleName: 'my-app/templates/components/tagless-component.hbs'\n }));\n }\n }));\n\n return this.visit('/engine-event-dispatcher-singleton').then(function () {\n _this13.assertInnerHTML('Foo Engine: Tagless Component ');\n\n var controllerOwnerEventDispatcher = (0, _emberOwner.getOwner)(controller).lookup('event_dispatcher:main');\n var taglessComponentOwnerEventDispatcher = (0, _emberOwner.getOwner)(component).lookup('event_dispatcher:main');\n\n _this13.assert.strictEqual(controllerOwnerEventDispatcher, taglessComponentOwnerEventDispatcher);\n });\n };\n\n return _class4;\n }(_testCase.ApplicationTest));\n\n (0, _testCase.moduleFor)('{{mount}} params tests', function (_ApplicationTest2) {\n (0, _emberBabel.inherits)(_class5, _ApplicationTest2);\n\n function _class5() {\n\n var _this14 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTest2.apply(this, arguments));\n\n _this14.add('engine:paramEngine', _engine.default.extend({\n router: null,\n init: function () {\n this._super.apply(this, arguments);\n this.register('template:application', (0, _helpers.compile)('Param Engine: {{model.foo}} ', {\n moduleName: 'my-app/templates/application.hbs'\n }));\n }\n }));\n return _this14;\n }\n\n _class5.prototype['@test it renders with static parameters'] = function () {\n var _this15 = this;\n\n this.router.map(function () {\n this.route('engine-params-static');\n });\n this.addTemplate('engine-params-static', '{{mount \"paramEngine\" model=(hash foo=\"bar\")}}');\n\n return this.visit('/engine-params-static').then(function () {\n _this15.assertInnerHTML('Param Engine: bar ');\n });\n };\n\n _class5.prototype['@test it renders with bound parameters'] = function () {\n var _this16 = this;\n\n this.router.map(function () {\n this.route('engine-params-bound');\n });\n var controller = void 0;\n this.add('controller:engine-params-bound', _controller.default.extend({\n boundParamValue: null,\n init: function () {\n this._super();\n controller = this;\n }\n }));\n this.addTemplate('engine-params-bound', '{{mount \"paramEngine\" model=(hash foo=boundParamValue)}}');\n\n return this.visit('/engine-params-bound').then(function () {\n _this16.assertInnerHTML('Param Engine: ');\n\n _this16.runTask(function () {\n return (0, _emberMetal.set)(controller, 'boundParamValue', 'bar');\n });\n\n _this16.assertInnerHTML('Param Engine: bar ');\n\n _this16.runTask(function () {\n return (0, _emberMetal.set)(controller, 'boundParamValue', undefined);\n });\n\n _this16.assertInnerHTML('Param Engine: ');\n\n _this16.runTask(function () {\n return (0, _emberMetal.set)(controller, 'boundParamValue', 'bar');\n });\n\n _this16.assertInnerHTML('Param Engine: bar ');\n\n _this16.runTask(function () {\n return (0, _emberMetal.set)(controller, 'boundParamValue', 'baz');\n });\n\n _this16.assertInnerHTML('Param Engine: baz ');\n\n _this16.runTask(function () {\n return (0, _emberMetal.set)(controller, 'boundParamValue', 'bar');\n });\n\n _this16.assertInnerHTML('Param Engine: bar ');\n\n _this16.runTask(function () {\n return (0, _emberMetal.set)(controller, 'boundParamValue', null);\n });\n\n _this16.assertInnerHTML('Param Engine: ');\n });\n };\n\n _class5.prototype['@test it renders contextual components passed as parameter values'] = function () {\n var _this17 = this;\n\n this.router.map(function () {\n this.route('engine-params-contextual-component');\n });\n\n this.addComponent('foo-component', {\n template: 'foo-component rendered! - {{app-bar-component}}'\n });\n this.addComponent('app-bar-component', {\n ComponentClass: _helpers.Component.extend({ tagName: '' }),\n template: 'rendered app-bar-component from the app'\n });\n this.add('engine:componentParamEngine', _engine.default.extend({\n router: null,\n init: function () {\n this._super.apply(this, arguments);\n this.register('template:application', (0, _helpers.compile)('{{model.foo}}', {\n moduleName: 'my-app/templates/application.hbs'\n }));\n }\n }));\n this.addTemplate('engine-params-contextual-component', '{{mount \"componentParamEngine\" model=(hash foo=(component \"foo-component\"))}}');\n\n return this.visit('/engine-params-contextual-component').then(function () {\n _this17.assertComponentElement(_this17.firstChild, {\n content: 'foo-component rendered! - rendered app-bar-component from the app'\n });\n });\n };\n\n return _class5;\n }(_testCase.ApplicationTest));\n});","enifed('ember-glimmer/tests/integration/outlet-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'internal-test-helpers', 'ember-metal'], function (_emberBabel, _testCase, _internalTestHelpers, _emberMetal) {\n 'use strict';\n\n (0, _testCase.moduleFor)('outlet view', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n\n var CoreOutlet = _this.owner.factoryFor('view:-outlet');\n\n _this.component = CoreOutlet.create();\n return _this;\n }\n\n _class.prototype['@test should not error when initial rendered template is undefined'] = function () {\n var _this2 = this;\n\n var outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'application',\n controller: undefined,\n template: undefined\n },\n\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this2.component.setOutletState(outletState);\n });\n\n (0, _internalTestHelpers.runAppend)(this.component);\n\n this.assertText('');\n };\n\n _class.prototype['@test should render the outlet when set after DOM insertion'] = function () {\n var _this3 = this;\n\n var outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'application',\n controller: undefined,\n template: undefined\n },\n\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this3.component.setOutletState(outletState);\n });\n\n (0, _internalTestHelpers.runAppend)(this.component);\n\n this.assertText('');\n\n this.registerTemplate('application', 'HI{{outlet}}');\n outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'application',\n controller: {},\n template: this.owner.lookup('template:application')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this3.component.setOutletState(outletState);\n });\n\n this.assertText('HI');\n\n this.assertStableRerender();\n\n this.registerTemplate('index', 'BYE
');\n outletState.outlets.main = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'index',\n controller: {},\n template: this.owner.lookup('template:index')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this3.component.setOutletState(outletState);\n });\n\n this.assertText('HIBYE');\n };\n\n _class.prototype['@test should render the outlet when set before DOM insertion'] = function () {\n var _this4 = this;\n\n this.registerTemplate('application', 'HI{{outlet}}');\n var outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'application',\n controller: {},\n template: this.owner.lookup('template:application')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this4.component.setOutletState(outletState);\n });\n\n (0, _internalTestHelpers.runAppend)(this.component);\n\n this.assertText('HI');\n\n this.assertStableRerender();\n\n this.registerTemplate('index', 'BYE
');\n outletState.outlets.main = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'index',\n controller: {},\n template: this.owner.lookup('template:index')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this4.component.setOutletState(outletState);\n });\n\n this.assertText('HIBYE');\n };\n\n _class.prototype['@test should support an optional name'] = function () {\n var _this5 = this;\n\n this.registerTemplate('application', 'HI {{outlet \"special\"}}');\n var outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'application',\n controller: {},\n template: this.owner.lookup('template:application')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this5.component.setOutletState(outletState);\n });\n\n (0, _internalTestHelpers.runAppend)(this.component);\n\n this.assertText('HI');\n\n this.assertStableRerender();\n\n this.registerTemplate('special', 'BYE
');\n outletState.outlets.special = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'special',\n controller: {},\n template: this.owner.lookup('template:special')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this5.component.setOutletState(outletState);\n });\n\n this.assertText('HIBYE');\n };\n\n _class.prototype['@test does not default outlet name when positional argument is present'] = function () {\n var _this6 = this;\n\n this.registerTemplate('application', 'HI {{outlet someUndefinedThing}}');\n var outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'application',\n controller: {},\n template: this.owner.lookup('template:application')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this6.component.setOutletState(outletState);\n });\n\n (0, _internalTestHelpers.runAppend)(this.component);\n\n this.assertText('HI');\n\n this.assertStableRerender();\n\n this.registerTemplate('special', 'BYE
');\n outletState.outlets.main = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'special',\n controller: {},\n template: this.owner.lookup('template:special')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this6.component.setOutletState(outletState);\n });\n\n this.assertText('HI');\n };\n\n _class.prototype['@test should support bound outlet name'] = function () {\n var _this7 = this;\n\n var controller = { outletName: 'foo' };\n this.registerTemplate('application', 'HI {{outlet outletName}}');\n var outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'application',\n controller: controller,\n template: this.owner.lookup('template:application')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this7.component.setOutletState(outletState);\n });\n\n (0, _internalTestHelpers.runAppend)(this.component);\n\n this.assertText('HI');\n\n this.assertStableRerender();\n\n this.registerTemplate('foo', 'FOO
');\n outletState.outlets.foo = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'foo',\n controller: {},\n template: this.owner.lookup('template:foo')\n },\n outlets: Object.create(null)\n };\n\n this.registerTemplate('bar', 'BAR
');\n outletState.outlets.bar = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'bar',\n controller: {},\n template: this.owner.lookup('template:bar')\n },\n outlets: Object.create(null)\n };\n\n this.runTask(function () {\n return _this7.component.setOutletState(outletState);\n });\n\n this.assertText('HIFOO');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(controller, 'outletName', 'bar');\n });\n\n this.assertText('HIBAR');\n };\n\n _class.prototype['@test outletState can pass through user code (liquid-fire initimate API) '] = function () {\n var _this8 = this;\n\n this.registerTemplate('outer', 'A{{#-with-dynamic-vars outletState=(identity (-get-dynamic-var \"outletState\"))}}B{{outlet}}D{{/-with-dynamic-vars}}E');\n this.registerTemplate('inner', 'C');\n\n // This looks like it doesn't do anything, but its presence\n // guarantees that the outletState gets converted from a reference\n // to a value and then back to a reference. That is what we're\n // testing here.\n this.registerHelper('identity', function (_ref) {\n var a = _ref[0];\n return a;\n });\n\n var outletState = {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'outer',\n controller: {},\n template: this.owner.lookup('template:outer')\n },\n outlets: {\n main: {\n render: {\n owner: this.owner,\n into: undefined,\n outlet: 'main',\n name: 'inner',\n controller: {},\n template: this.owner.lookup('template:inner')\n },\n outlets: Object.create(null)\n }\n }\n };\n\n this.runTask(function () {\n return _this8.component.setOutletState(outletState);\n });\n\n (0, _internalTestHelpers.runAppend)(this.component);\n\n this.assertText('ABCDE');\n\n this.assertStableRerender();\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/refinements-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-metal'], function (_emberBabel, _testCase, _abstractTestCase, _emberMetal) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with var as |foo|}}\\n {{foo}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |render|}}\\n {{render}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |outlet|}}\\n {{outlet}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |mount|}}\\n {{mount}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |component|}}\\n {{component}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |input|}}\\n {{input}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |-with-dynamic-vars|}}\\n {{-with-dynamic-vars}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |-in-element|}}\\n {{-in-element}}\\n {{/with}}'], ['\\n {{#with var as |foo|}}\\n {{foo}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |render|}}\\n {{render}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |outlet|}}\\n {{outlet}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |mount|}}\\n {{mount}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |component|}}\\n {{component}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |input|}}\\n {{input}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |-with-dynamic-vars|}}\\n {{-with-dynamic-vars}}\\n {{/with}}\\n\\n ---\\n\\n {{#with var as |-in-element|}}\\n {{-in-element}}\\n {{/with}}']);\n\n (0, _testCase.moduleFor)('syntax refinements', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test block params should not be refined'] = function () {\n var _this2 = this;\n\n this.registerHelper('foo', function () {\n return 'bar helper';\n });\n\n this.render((0, _abstractTestCase.strip)(_templateObject), { var: 'var' });\n\n this.assertText('var---var---var---var---var---var---var---var');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'var', 'RARRR!!!');\n });\n\n this.assertText('RARRR!!!---RARRR!!!---RARRR!!!---RARRR!!!---RARRR!!!---RARRR!!!---RARRR!!!---RARRR!!!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'var', 'var');\n });\n\n this.assertText('var---var---var---var---var---var---var---var');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/render-settled-test', ['ember-babel', 'internal-test-helpers', 'ember-glimmer', 'rsvp', '@ember/runloop'], function (_emberBabel, _internalTestHelpers, _emberGlimmer, _rsvp, _runloop) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['{{foo}}'], ['{{foo}}']);\n\n (0, _internalTestHelpers.moduleFor)('renderSettled', function (_RenderingTestCase) {\n (0, _emberBabel.inherits)(_class, _RenderingTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test resolves when no rendering is happening'] = function (assert) {\n return (0, _emberGlimmer.renderSettled)().then(function () {\n assert.ok(true, 'resolved even without rendering');\n });\n };\n\n _class.prototype['@test resolves renderers exist but no runloops are triggered'] = function (assert) {\n this.render((0, _internalTestHelpers.strip)(_templateObject), { foo: 'bar' });\n\n return (0, _emberGlimmer.renderSettled)().then(function () {\n assert.ok(true, 'resolved even without runloops');\n });\n };\n\n _class.prototype['@test does not create extraneous promises'] = function (assert) {\n var first = (0, _emberGlimmer.renderSettled)();\n var second = (0, _emberGlimmer.renderSettled)();\n\n assert.strictEqual(first, second);\n\n return (0, _rsvp.all)([first, second]);\n };\n\n _class.prototype['@test resolves when rendering has completed (after property update)'] = function () {\n var _this2 = this;\n\n this.render((0, _internalTestHelpers.strip)(_templateObject), { foo: 'bar' });\n\n this.assertText('bar');\n this.component.set('foo', 'baz');\n this.assertText('bar');\n\n return (0, _emberGlimmer.renderSettled)().then(function () {\n _this2.assertText('baz');\n });\n };\n\n _class.prototype['@test resolves in run loop when renderer has settled'] = function (assert) {\n var _this3 = this;\n\n assert.expect(3);\n\n this.render((0, _internalTestHelpers.strip)(_templateObject), { foo: 'bar' });\n\n this.assertText('bar');\n var promise = void 0;\n\n return (0, _runloop.run)(function () {\n (0, _runloop.schedule)('actions', null, function () {\n _this3.component.set('foo', 'set in actions');\n\n promise = (0, _emberGlimmer.renderSettled)().then(function () {\n _this3.assertText('set in afterRender');\n });\n\n (0, _runloop.schedule)('afterRender', null, function () {\n _this3.component.set('foo', 'set in afterRender');\n });\n });\n\n // still not updated here\n _this3.assertText('bar');\n\n return promise;\n });\n };\n\n return _class;\n }(_internalTestHelpers.RenderingTestCase));\n});","enifed('ember-glimmer/tests/integration/svg-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-metal', 'ember-glimmer/tests/utils/abstract-test-case'], function (_emberBabel, _testCase, _emberMetal, _abstractTestCase) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n \\n
\\n '], ['\\n \\n \\n
\\n ']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n \\n
\\n '], ['\\n \\n \\n
\\n ']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n \\n
\\n '], ['\\n \\n \\n
\\n ']),\n _templateObject4 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n \\n
\\n '], ['\\n \\n \\n
\\n ']),\n _templateObject5 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n \\n
\\n '], ['\\n \\n \\n
\\n ']);\n\n (0, _testCase.moduleFor)('SVG element tests', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test unquoted viewBox property is output'] = function (assert) {\n var _this2 = this;\n\n var viewBoxString = '0 0 100 100';\n\n this.render('
', {\n model: {\n viewBoxString: viewBoxString\n }\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject, viewBoxString));\n\n this.runTask(function () {\n return _this2.rerender();\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject, viewBoxString));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'model.viewBoxString', null);\n });\n\n assert.equal(this.firstChild.getAttribute('svg'), null);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'model', { viewBoxString: viewBoxString });\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject, viewBoxString));\n };\n\n _class.prototype['@test quoted viewBox property is output'] = function (assert) {\n var _this3 = this;\n\n var viewBoxString = '0 0 100 100';\n\n this.render('
', {\n model: {\n viewBoxString: viewBoxString\n }\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject, viewBoxString));\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject, viewBoxString));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'model.viewBoxString', null);\n });\n\n assert.equal(this.firstChild.getAttribute('svg'), null);\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'model', { viewBoxString: viewBoxString });\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject, viewBoxString));\n };\n\n _class.prototype['@test quoted viewBox property is concat'] = function () {\n var _this4 = this;\n\n var viewBoxString = '100 100';\n\n this.render('
', {\n model: {\n viewBoxString: viewBoxString\n }\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject2, viewBoxString));\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject2, viewBoxString));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'model.viewBoxString', '200 200');\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject3));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'model', { viewBoxString: viewBoxString });\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject2, viewBoxString));\n };\n\n _class.prototype['@test class is output'] = function () {\n var _this5 = this;\n\n this.render(\"
\", {\n model: {\n color: 'blue'\n }\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject4));\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject4));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model.color', 'yellow');\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject5));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'model', { color: 'blue' });\n });\n\n this.assertInnerHTML((0, _abstractTestCase.strip)(_templateObject4));\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/syntax/each-in-test', ['ember-babel', 'ember-metal', 'ember-glimmer/tests/utils/test-case', 'ember-runtime', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-utils', 'ember-glimmer/tests/utils/shared-conditional-tests'], function (_emberBabel, _emberMetal, _testCase, _emberRuntime, _abstractTestCase, _emberUtils, _sharedConditionalTests) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n {{#each-in categories as |category count|}}\\n {{category}}: {{count}} \\n {{/each-in}}\\n \\n '], ['\\n \\n {{#each-in categories as |category count|}}\\n {{category}}: {{count}} \\n {{/each-in}}\\n \\n ']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n Smartphones: 8203 \\n JavaScript Frameworks: Infinity \\n \\n '], ['\\n \\n Smartphones: 8203 \\n JavaScript Frameworks: Infinity \\n \\n ']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n Emberinios: 123456 \\n \\n '], ['\\n \\n Emberinios: 123456 \\n \\n ']),\n _templateObject4 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each-in arr as |key value|}}\\n [{{key}}:{{value}}]\\n {{/each-in}}'], ['\\n {{#each-in arr as |key value|}}\\n [{{key}}:{{value}}]\\n {{/each-in}}']),\n _templateObject5 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n Smartphones: 100 \\n JavaScript Frameworks: Infinity \\n Tweets: 443115 \\n \\n '], ['\\n \\n Smartphones: 100 \\n JavaScript Frameworks: Infinity \\n Tweets: 443115 \\n \\n ']),\n _templateObject6 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n Smartphones: 100 \\n Tablets: 20 \\n \\n '], ['\\n \\n Smartphones: 100 \\n Tablets: 20 \\n \\n ']),\n _templateObject7 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n {{#each-in map key=\"@identity\" as |key value|}}\\n {{key.name}}: {{value}} \\n {{/each-in}}\\n '], ['\\n \\n {{#each-in map key=\"@identity\" as |key value|}}\\n {{key.name}}: {{value}} \\n {{/each-in}}\\n ']),\n _templateObject8 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n one: foo \\n two: bar \\n \\n '], ['\\n \\n one: foo \\n two: bar \\n \\n ']),\n _templateObject9 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n \\n '], ['\\n \\n ']);\n\n function NonEmptyFunction() {}\n NonEmptyFunction.foo = 'bar';\n\n var NonEmptyConstructor = function () {};\n\n NonEmptyConstructor.foo = 'bar';\n\n var TogglingEachInTest = function (_TogglingSyntaxCondit) {\n (0, _emberBabel.inherits)(TogglingEachInTest, _TogglingSyntaxCondit);\n\n function TogglingEachInTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingSyntaxCondit.apply(this, arguments));\n }\n\n TogglingEachInTest.prototype.templateFor = function (_ref) {\n var cond = _ref.cond,\n truthy = _ref.truthy,\n falsy = _ref.falsy;\n\n return '{{#each-in ' + cond + ' as |key|}}' + truthy + '{{else}}' + falsy + '{{/each-in}}';\n };\n\n return TogglingEachInTest;\n }(_sharedConditionalTests.TogglingSyntaxConditionalsTest);\n\n var BasicEachInTest = function (_TogglingEachInTest) {\n (0, _emberBabel.inherits)(BasicEachInTest, _TogglingEachInTest);\n\n function BasicEachInTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingEachInTest.apply(this, arguments));\n }\n\n return BasicEachInTest;\n }(TogglingEachInTest);\n\n var BasicSyntaxTest = function (_BasicEachInTest) {\n (0, _emberBabel.inherits)(BasicSyntaxTest, _BasicEachInTest);\n\n function BasicSyntaxTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _BasicEachInTest.apply(this, arguments));\n }\n\n (0, _emberBabel.createClass)(BasicSyntaxTest, [{\n key: 'truthyValue',\n get: function () {\n return { 'Not Empty': 1 };\n }\n }, {\n key: 'falsyValue',\n get: function () {\n return {};\n }\n }]);\n return BasicSyntaxTest;\n }(BasicEachInTest);\n\n var EachInProxyTest = function (_TogglingEachInTest2) {\n (0, _emberBabel.inherits)(EachInProxyTest, _TogglingEachInTest2);\n\n function EachInProxyTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingEachInTest2.apply(this, arguments));\n }\n\n return EachInProxyTest;\n }(TogglingEachInTest);\n\n (0, _abstractTestCase.applyMixins)(BasicEachInTest, new _sharedConditionalTests.TruthyGenerator([{ foo: 1 }, _emberRuntime.Object.create({ 'Not Empty': 1 }), [1], NonEmptyFunction, NonEmptyConstructor]), new _sharedConditionalTests.FalsyGenerator([null, undefined, false, '', 0, [], function () {}, function () {}, {}, Object.create(null), Object.create({}), Object.create({ 'Not Empty': 1 }), _emberRuntime.Object.create()]));\n\n (0, _abstractTestCase.applyMixins)(EachInProxyTest, new _sharedConditionalTests.TruthyGenerator([_emberRuntime.ObjectProxy.create({ content: { 'Not empty': 1 } })]), new _sharedConditionalTests.FalsyGenerator([_emberRuntime.ObjectProxy.create(), _emberRuntime.ObjectProxy.create({ content: null }), _emberRuntime.ObjectProxy.create({ content: {} }), _emberRuntime.ObjectProxy.create({ content: Object.create(null) }), _emberRuntime.ObjectProxy.create({ content: Object.create({}) }), _emberRuntime.ObjectProxy.create({ content: Object.create({ 'Not Empty': 1 }) }), _emberRuntime.ObjectProxy.create({ content: _emberRuntime.Object.create() })]));\n\n // Truthy/Falsy tests\n (0, _testCase.moduleFor)('Syntax test: {{#each-in}} with `ObjectProxy`', function (_EachInProxyTest) {\n (0, _emberBabel.inherits)(_class, _EachInProxyTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachInProxyTest.apply(this, arguments));\n }\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'truthyValue',\n get: function () {\n return _emberRuntime.ObjectProxy.create({ content: { 'Not Empty': 1 } });\n }\n }, {\n key: 'falsyValue',\n get: function () {\n return _emberRuntime.ObjectProxy.create({ content: null });\n }\n }]);\n return _class;\n }(EachInProxyTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each-in}}', BasicSyntaxTest);\n\n // Rendering tests\n\n var AbstractEachInTest = function (_RenderingTest) {\n (0, _emberBabel.inherits)(AbstractEachInTest, _RenderingTest);\n\n function AbstractEachInTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n AbstractEachInTest.prototype.createHash = function () /* hash */{\n throw new Error('Not implemented: `createHash`');\n };\n\n AbstractEachInTest.prototype.makeHash = function (obj) {\n var _createHash = this.createHash(obj),\n hash = _createHash.hash,\n delegate = _createHash.delegate;\n\n this.hash = hash;\n this.delegate = delegate;\n return hash;\n };\n\n AbstractEachInTest.prototype.replaceHash = function (hash) {\n var _this7 = this;\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'hash', _this7.createHash(hash).hash);\n });\n };\n\n AbstractEachInTest.prototype.clear = function () {\n var _this8 = this;\n\n return this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'hash', _this8.createHash({}).hash);\n });\n };\n\n AbstractEachInTest.prototype.setProp = function (key, value) {\n var _this9 = this;\n\n return this.runTask(function () {\n return _this9.delegate.setProp(_this9.context, key, value);\n });\n };\n\n AbstractEachInTest.prototype.updateNestedValue = function (key, innerKey, value) {\n var _this10 = this;\n\n return this.runTask(function () {\n return _this10.delegate.updateNestedValue(_this10.context, key, innerKey, value);\n });\n };\n\n AbstractEachInTest.prototype.render = function (template) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.hash !== undefined) {\n context.hash = this.hash;\n }\n if (this.type !== undefined) {\n context.type = this.type;\n }\n context.secretKey = 'asd';\n\n return _RenderingTest.prototype.render.call(this, template, context);\n };\n\n return AbstractEachInTest;\n }(_testCase.RenderingTest);\n\n var EachInTest = function (_AbstractEachInTest) {\n (0, _emberBabel.inherits)(EachInTest, _AbstractEachInTest);\n\n function EachInTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractEachInTest.apply(this, arguments));\n }\n\n EachInTest.prototype['@test it repeats the given block for each item in the hash'] = function () {\n this.makeHash({ Smartphones: 8203, 'JavaScript Frameworks': Infinity });\n\n this.render('{{#each-in hash as |category count|}}{{category}}: {{count}} {{else}}Empty!{{/each-in}} ');\n\n this.assertText('Smartphones: 8203JavaScript Frameworks: Infinity');\n\n this.assertStableRerender();\n\n if (this.allowsSetProp) {\n // Not al backing data structures allow kvo tracking. Maps and Iterables don't\n this.setProp('Tweets', 100);\n\n this.assertText('Smartphones: 8203JavaScript Frameworks: InfinityTweets: 100');\n }\n\n this.clear();\n\n this.assertText('Empty!');\n };\n\n EachInTest.prototype['@test it can render sub-paths of each item'] = function (assert) {\n var _this12 = this;\n\n this.makeHash({\n Smartphones: { reports: { unitsSold: 8203 } },\n 'JavaScript Frameworks': { reports: { unitsSold: Infinity } }\n });\n\n this.render('{{#each-in hash as |category data|}}{{category}}: {{data.reports.unitsSold}} {{else}}Empty!{{/each-in}} ');\n\n this.assertText('Smartphones: 8203JavaScript Frameworks: Infinity');\n\n this.assertStableRerender();\n\n if (this.allowsSetProp) {\n this.setProp('Tweets', { reports: { unitsSold: 100 } });\n\n this.assertText('Smartphones: 8203JavaScript Frameworks: InfinityTweets: 100');\n }\n\n this.runTask(function () {\n return _this12.updateNestedValue('Smartphones', 'reports.unitsSold', 8204);\n });\n\n assert.ok(this.textValue().indexOf('Smartphones: 8204') > -1);\n\n this.clear();\n\n this.assertText('Empty!');\n };\n\n EachInTest.prototype['@test it can render duplicate items'] = function () {\n this.makeHash({\n Smartphones: 8203,\n Tablets: 8203,\n 'JavaScript Frameworks': Infinity,\n Bugs: Infinity\n });\n\n this.render('{{#each-in hash key=\\'@identity\\' as |category count|}}{{category}}: {{count}} {{/each-in}} ');\n\n this.assertText('Smartphones: 8203Tablets: 8203JavaScript Frameworks: InfinityBugs: Infinity');\n\n this.assertStableRerender();\n\n if (this.allowsSetProp) {\n this.setProp('Smartphones', 100);\n this.setProp('Tweets', 443115);\n this.assertText('Smartphones: 100Tablets: 8203JavaScript Frameworks: InfinityBugs: InfinityTweets: 443115');\n }\n\n this.clear();\n\n this.assertText('');\n };\n\n EachInTest.prototype['@test it repeats the given block when the hash is dynamic'] = function () {\n var _createHash2 = this.createHash({\n Smartphones: 8203,\n 'JavaScript Frameworks': Infinity\n }),\n categories = _createHash2.hash;\n\n var _createHash3 = this.createHash({\n Emberinios: 533462,\n Tweets: 7323\n }),\n otherCategories = _createHash3.hash;\n\n var context = {\n hashes: {\n categories: categories,\n otherCategories: otherCategories,\n type: 'categories'\n }\n };\n this.render('{{#each-in (get hashes hashes.type) as |category count|}}{{category}}: {{count}} {{else}}Empty!{{/each-in}} ', context);\n\n this.assertText('Smartphones: 8203JavaScript Frameworks: Infinity');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(context, 'hashes.type', 'otherCategories');\n });\n\n this.assertText('Emberinios: 533462Tweets: 7323');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(context, 'hashes.type', 'categories');\n });\n\n this.assertText('Smartphones: 8203JavaScript Frameworks: Infinity');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(context, 'hashes.type', 'nonExistent');\n });\n\n this.clear();\n\n this.assertText('Empty!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(context, 'hashes.type', 'categories');\n });\n\n this.assertText('Smartphones: 8203JavaScript Frameworks: Infinity');\n };\n\n EachInTest.prototype['@test keying off of `undefined` does not render'] = function () {\n this.makeHash({});\n\n this.render('{{#each-in hash as |key value|}}{{key}}: {{value.baz}}{{else}}Empty!{{/each-in}}');\n\n this.assertText('Empty!');\n\n this.assertStableRerender();\n\n this.replaceHash({ bar: { baz: 'Here!' } });\n\n this.assertText('bar: Here!');\n\n this.clear();\n\n this.assertText('Empty!');\n };\n\n EachInTest.prototype['@test it can render items with a key of empty string'] = function () {\n this.makeHash({ '': 'empty-string', a: 'a' });\n\n this.render('{{#each-in hash as |key value|}}{{key}}: {{value}} {{else}}Empty!{{/each-in}} ');\n\n this.assertText(': empty-stringa: a');\n\n this.assertStableRerender();\n\n this.clear();\n\n this.assertText('Empty!');\n };\n\n return EachInTest;\n }(AbstractEachInTest);\n\n (0, _testCase.moduleFor)('Syntax test: {{#each-in}} with POJOs', function (_EachInTest) {\n (0, _emberBabel.inherits)(_class2, _EachInTest);\n\n function _class2() {\n\n var _this13 = (0, _emberBabel.possibleConstructorReturn)(this, _EachInTest.apply(this, arguments));\n\n _this13.allowsSetProp = true;\n return _this13;\n }\n\n _class2.prototype.createHash = function (pojo) {\n return {\n hash: pojo,\n delegate: {\n setProp: function (context, key, value) {\n (0, _emberMetal.set)(context.hash, key, value);\n },\n updateNestedValue: function (context, key, innerKey, value) {\n var target = context.hash[key];\n (0, _emberMetal.set)(target, innerKey, value);\n }\n }\n };\n };\n\n _class2.prototype['@test it only iterates over an object\\'s own properties'] = function () {\n var protoCategories = {\n Smartphones: 8203,\n 'JavaScript Frameworks': Infinity\n };\n\n var categories = Object.create(protoCategories);\n categories['Televisions'] = 183;\n categories['Alarm Clocks'] = 999;\n\n this.render('{{#each-in categories as |category count|}}{{category}}: {{count}} {{else}}Empty!{{/each-in}} ', { categories: categories });\n\n this.assertText('Televisions: 183Alarm Clocks: 999');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n (0, _emberMetal.set)(protoCategories, 'Robots', 666);\n (0, _emberMetal.set)(categories, 'Tweets', 443115);\n });\n\n this.assertText('Televisions: 183Alarm Clocks: 999Tweets: 443115');\n\n categories = Object.create(protoCategories);\n categories['Televisions'] = 183;\n categories['Alarm Clocks'] = 999;\n };\n\n _class2.prototype['@test it does not observe direct property mutations (not going through set) on the object'] = function () {\n var _this14 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject), {\n categories: {\n Smartphones: 8203,\n 'JavaScript Frameworks': Infinity\n }\n });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject2));\n\n this.assertStableRerender();\n\n this.runTask(function () {\n var categories = (0, _emberMetal.get)(_this14.context, 'categories');\n delete categories.Smartphones;\n });\n\n this.assertInvariants();\n\n this.runTask(function () {\n var categories = (0, _emberMetal.get)(_this14.context, 'categories');\n categories['Emberinios'] = 123456;\n });\n\n this.assertInvariants();\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this14.context, 'categories', {\n Emberinios: 123456\n });\n });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject3));\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this14.context, 'categories', {\n Smartphones: 8203,\n 'JavaScript Frameworks': Infinity\n });\n });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject2));\n };\n\n _class2.prototype['@test it skips holes in sparse arrays'] = function () {\n var arr = [];\n arr[5] = 'foo';\n arr[6] = 'bar';\n\n this.render((0, _abstractTestCase.strip)(_templateObject4), { arr: arr });\n\n this.assertText('[5:foo][6:bar]');\n\n this.assertStableRerender();\n };\n\n _class2.prototype['@test it iterate over array with `in` instead of walking over elements'] = function () {\n var _this15 = this;\n\n var arr = [1, 2, 3];\n arr.foo = 'bar';\n\n this.render((0, _abstractTestCase.strip)(_templateObject4), { arr: arr });\n\n this.assertText('[0:1][1:2][2:3][foo:bar]');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('[0:1][1:2][2:3][foo:bar]');\n\n this.runTask(function () {\n (0, _emberMetal.set)(arr, 'zomg', 'lol');\n });\n\n this.assertText('[0:1][1:2][2:3][foo:bar][zomg:lol]');\n\n arr = [1, 2, 3];\n arr.foo = 'bar';\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'arr', arr);\n });\n\n this.assertText('[0:1][1:2][2:3][foo:bar]');\n };\n\n return _class2;\n }(EachInTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each-in}} with EmberObjects', function (_EachInTest2) {\n (0, _emberBabel.inherits)(_class3, _EachInTest2);\n\n function _class3() {\n\n var _this16 = (0, _emberBabel.possibleConstructorReturn)(this, _EachInTest2.apply(this, arguments));\n\n _this16.allowsSetProp = true;\n return _this16;\n }\n\n _class3.prototype.createHash = function (pojo) {\n var hash = _emberRuntime.Object.create(pojo);\n return {\n hash: hash,\n delegate: {\n setProp: function (context, key, value) {\n (0, _emberMetal.set)(context, 'hash.' + key, value);\n },\n updateNestedValue: function (context, key, innerKey, value) {\n var target = (0, _emberMetal.get)(context.hash, key);\n (0, _emberMetal.set)(target, innerKey, value);\n }\n }\n };\n };\n\n return _class3;\n }(EachInTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each-in}} with object proxies', function (_EachInTest3) {\n (0, _emberBabel.inherits)(_class4, _EachInTest3);\n\n function _class4() {\n\n var _this17 = (0, _emberBabel.possibleConstructorReturn)(this, _EachInTest3.apply(this, arguments));\n\n _this17.allowsSetProp = true;\n return _this17;\n }\n\n _class4.prototype.createHash = function (pojo) {\n var hash = _emberRuntime.ObjectProxy.create({ content: pojo });\n return {\n hash: hash,\n delegate: {\n setProp: function (context, key, value) {\n (0, _emberMetal.set)(context, 'hash.' + key, value);\n },\n updateNestedValue: function (context, key, innerKey, value) {\n var target = (0, _emberMetal.get)(context.hash, key);\n (0, _emberMetal.set)(target, innerKey, value);\n }\n }\n };\n };\n\n _class4.prototype['@test it iterates over the content, not the proxy'] = function () {\n var _this18 = this;\n\n var content = {\n Smartphones: 8203,\n 'JavaScript Frameworks': Infinity\n };\n\n var proxy = _emberRuntime.ObjectProxy.create({\n content: content,\n foo: 'bar'\n });\n\n this.render((0, _abstractTestCase.strip)(_templateObject), { categories: proxy });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject2));\n\n this.assertStableRerender();\n\n this.runTask(function () {\n (0, _emberMetal.set)(proxy, 'content.Smartphones', 100);\n (0, _emberMetal.set)(proxy, 'content.Tweets', 443115);\n });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject5));\n\n this.runTask(function () {\n (0, _emberMetal.set)(proxy, 'content', {\n Smartphones: 100,\n Tablets: 20\n });\n });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject6));\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this18.context, 'categories', _emberRuntime.ObjectProxy.create({\n content: {\n Smartphones: 8203,\n 'JavaScript Frameworks': Infinity\n }\n }));\n });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject2));\n };\n\n return _class4;\n }(EachInTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each-in}} with ES6 Maps', function (_EachInTest4) {\n (0, _emberBabel.inherits)(_class5, _EachInTest4);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachInTest4.apply(this, arguments));\n }\n\n _class5.prototype.createHash = function (pojo) {\n var map = new Map();\n Object.keys(pojo).forEach(function (key) {\n map.set(key, pojo[key]);\n });\n return {\n hash: map,\n delegate: {\n updateNestedValue: function (context, key, innerKey, value) {\n var target = context.hash.get(key);\n (0, _emberMetal.set)(target, innerKey, value);\n }\n }\n };\n };\n\n _class5.prototype['@test it supports having objects as keys on ES6 Maps'] = function () {\n var _this20 = this;\n\n var map = new Map();\n map.set({ name: 'one' }, 'foo');\n map.set({ name: 'two' }, 'bar');\n\n this.render((0, _abstractTestCase.strip)(_templateObject7), { map: map });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject8));\n\n this.assertStableRerender();\n\n this.runTask(function () {\n var map = new Map();\n map.set({ name: 'three' }, 'qux');\n (0, _emberMetal.set)(_this20.context, 'map', map);\n });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject9));\n };\n\n return _class5;\n }(EachInTest));\n\n if (_emberUtils.HAS_NATIVE_SYMBOL) {\n (0, _testCase.moduleFor)('Syntax test: {{#each-in}} with custom iterables', function (_EachInTest5) {\n (0, _emberBabel.inherits)(_class6, _EachInTest5);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachInTest5.apply(this, arguments));\n }\n\n _class6.prototype.createHash = function (pojo) {\n var _iterable;\n\n var ary = Object.keys(pojo).reduce(function (accum, key) {\n return accum.concat([[key, pojo[key]]]);\n }, []);\n var iterable = (_iterable = {}, _iterable[Symbol.iterator] = function () {\n return makeIterator(ary);\n }, _iterable);\n return {\n hash: iterable,\n delegate: {\n updateNestedValue: function (context, key, innerKey, value) {\n var ary = Array.from(context.hash);\n var target = ary.find(function (_ref2) {\n var k = _ref2[0];\n return k === key;\n })[1];\n (0, _emberMetal.set)(target, innerKey, value);\n }\n }\n };\n };\n\n return _class6;\n }(EachInTest));\n }\n\n // Utils\n function makeIterator(ary) {\n var index = 0;\n\n return {\n next: function () {\n return index < ary.length ? { value: ary[index++], done: false } : { done: true };\n }\n };\n }\n});","enifed('ember-glimmer/tests/integration/syntax/each-test', ['ember-babel', 'ember-metal', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer/tests/utils/test-case', 'ember-runtime', 'ember-glimmer/tests/utils/helpers', 'ember-utils', 'ember-glimmer/tests/utils/shared-conditional-tests'], function (_emberBabel, _emberMetal, _abstractTestCase, _testCase, _emberRuntime, _helpers, _emberUtils, _sharedConditionalTests) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each list as |item|}}\\n Prev \\n {{foo-bar item=item}}\\n Next \\n {{/each}}\\n '], ['\\n {{#each list as |item|}}\\n Prev \\n {{foo-bar item=item}}\\n Next \\n {{/each}}\\n ']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each content as |value|}}\\n {{value}}-\\n {{#each options as |option|}}\\n {{option.value}}:{{option.label}}\\n {{/each}}\\n {{/each}}\\n '], ['\\n {{#each content as |value|}}\\n {{value}}-\\n {{#each options as |option|}}\\n {{option.value}}:{{option.label}}\\n {{/each}}\\n {{/each}}\\n ']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each foo.bar.baz as |thing|}}\\n {{thing}}\\n {{/each}}'], ['\\n {{#each foo.bar.baz as |thing|}}\\n {{thing}}\\n {{/each}}']),\n _templateObject4 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#each list as |value key|}}\\n [{{key}}:{{value}}]\\n {{/each}}'], ['\\n {{#each list as |value key|}}\\n [{{key}}:{{value}}]\\n {{/each}}']),\n _templateObject5 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{page.title}} \\n\\n \\n {{#each model as |post|}}\\n {{post.title}} \\n {{/each}}\\n \\n '], ['\\n {{page.title}} \\n\\n \\n {{#each model as |post|}}\\n {{post.title}} \\n {{/each}}\\n \\n ']),\n _templateObject6 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n Blog Posts \\n\\n \\n Rails is omakase \\n Ember is omakase \\n \\n '], ['\\n Blog Posts \\n\\n \\n Rails is omakase \\n Ember is omakase \\n \\n ']),\n _templateObject7 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n Essays \\n\\n \\n Rails is omakase \\n Ember is omakase \\n \\n '], ['\\n Essays \\n\\n \\n Rails is omakase \\n Ember is omakase \\n \\n ']),\n _templateObject8 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n Think Pieces\\u2122 \\n\\n \\n Rails is omakase \\n Ember is omakase \\n \\n '], ['\\n Think Pieces\\u2122 \\n\\n \\n Rails is omakase \\n Ember is omakase \\n \\n ']);\n\n var ArrayDelegate = function () {\n function ArrayDelegate(content, target) {\n\n this._array = content;\n this._target = target || this;\n }\n\n // The following methods are APIs used by the tests\n\n ArrayDelegate.prototype.toArray = function () {\n return this._array.slice();\n };\n\n ArrayDelegate.prototype.objectAt = function (idx) {\n return this._array[idx];\n };\n\n ArrayDelegate.prototype.clear = function () {\n this._array.length = 0;\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.replace = function (idx, del, ins) {\n var _array;\n\n (_array = this._array).splice.apply(_array, [idx, del].concat(ins));\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.unshiftObject = function (obj) {\n this._array.unshift(obj);\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.unshiftObjects = function (arr) {\n var _array2;\n\n (_array2 = this._array).unshift.apply(_array2, arr);\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.pushObject = function (obj) {\n this._array.push(obj);\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.pushObjects = function (arr) {\n var _array3;\n\n (_array3 = this._array).push.apply(_array3, arr);\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.shiftObject = function () {\n var obj = this._array.shift();\n this.arrayContentDidChange();\n return obj;\n };\n\n ArrayDelegate.prototype.popObject = function () {\n var obj = this._array.pop();\n this.arrayContentDidChange();\n return obj;\n };\n\n ArrayDelegate.prototype.insertAt = function (idx, obj) {\n this._array.splice(idx, 0, obj);\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.removeAt = function (idx) {\n var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n this._array.splice(idx, len);\n this.arrayContentDidChange();\n };\n\n ArrayDelegate.prototype.arrayContentDidChange = function () {\n (0, _emberMetal.notifyPropertyChange)(this._target, '[]');\n (0, _emberMetal.notifyPropertyChange)(this._target, 'length');\n };\n\n ArrayDelegate.prototype.toString = function () {\n return '#<' + (this.constructor.name || 'UnknownArrayDelegate') + '>';\n };\n\n ArrayDelegate.prototype.toJSON = function () {\n return this.toString();\n };\n\n return ArrayDelegate;\n }();\n\n var makeSet = function () {\n // IE11 does not support `new Set(items);`\n var set = new Set([1, 2, 3]);\n\n if (set.size === 3) {\n return function (items) {\n return new Set(items);\n };\n } else {\n return function (items) {\n var s = new Set();\n items.forEach(function (value) {\n return s.add(value);\n });\n return s;\n };\n }\n }();\n\n var SetDelegate = function (_ArrayDelegate) {\n (0, _emberBabel.inherits)(SetDelegate, _ArrayDelegate);\n\n function SetDelegate(set) {\n\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ArrayDelegate.call(this, array, set));\n\n _this._set = set;\n return _this;\n }\n\n SetDelegate.prototype.arrayContentDidChange = function () {\n var _this2 = this;\n\n this._set.clear();\n this._array.forEach(function (value) {\n return _this2._set.add(value);\n });\n _ArrayDelegate.prototype.arrayContentDidChange.call(this);\n };\n\n return SetDelegate;\n }(ArrayDelegate);\n\n var ForEachable = function (_ArrayDelegate2) {\n (0, _emberBabel.inherits)(ForEachable, _ArrayDelegate2);\n\n function ForEachable() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ArrayDelegate2.apply(this, arguments));\n }\n\n ForEachable.prototype.forEach = function (callback) {\n this._array.forEach(callback);\n };\n\n (0, _emberBabel.createClass)(ForEachable, [{\n key: 'length',\n get: function () {\n return this._array.length;\n }\n }]);\n return ForEachable;\n }(ArrayDelegate);\n\n var ArrayIterable = void 0;\n\n if (_emberUtils.HAS_NATIVE_SYMBOL) {\n ArrayIterable = function (_ArrayDelegate3) {\n (0, _emberBabel.inherits)(ArrayIterable, _ArrayDelegate3);\n\n function ArrayIterable() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ArrayDelegate3.apply(this, arguments));\n }\n\n ArrayIterable.prototype[Symbol.iterator] = function () {\n return this._array[Symbol.iterator]();\n };\n\n return ArrayIterable;\n }(ArrayDelegate);\n }\n\n var TogglingEachTest = function (_TogglingSyntaxCondit) {\n (0, _emberBabel.inherits)(TogglingEachTest, _TogglingSyntaxCondit);\n\n function TogglingEachTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingSyntaxCondit.apply(this, arguments));\n }\n\n (0, _emberBabel.createClass)(TogglingEachTest, [{\n key: 'truthyValue',\n get: function () {\n return ['non-empty'];\n }\n }, {\n key: 'falsyValue',\n get: function () {\n return [];\n }\n }]);\n return TogglingEachTest;\n }(_sharedConditionalTests.TogglingSyntaxConditionalsTest);\n\n var BasicEachTest = function (_TogglingEachTest) {\n (0, _emberBabel.inherits)(BasicEachTest, _TogglingEachTest);\n\n function BasicEachTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingEachTest.apply(this, arguments));\n }\n\n return BasicEachTest;\n }(TogglingEachTest);\n\n var TRUTHY_CASES = [['hello'], (0, _emberRuntime.A)(['hello']), makeSet(['hello']), new ForEachable(['hello']), _emberRuntime.ArrayProxy.create({ content: ['hello'] }), _emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)(['hello']) })];\n\n var FALSY_CASES = [null, undefined, false, '', 0, [], (0, _emberRuntime.A)([]), makeSet([]), new ForEachable([]), _emberRuntime.ArrayProxy.create({ content: [] }), _emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)([]) })];\n\n if (_emberUtils.HAS_NATIVE_SYMBOL) {\n TRUTHY_CASES.push(new ArrayIterable(['hello']));\n FALSY_CASES.push(new ArrayIterable([]));\n }\n\n (0, _abstractTestCase.applyMixins)(BasicEachTest, new _sharedConditionalTests.TruthyGenerator(TRUTHY_CASES), new _sharedConditionalTests.FalsyGenerator(FALSY_CASES), _sharedConditionalTests.ArrayTestCases);\n\n (0, _testCase.moduleFor)('Syntax test: toggling {{#each}}', function (_BasicEachTest) {\n (0, _emberBabel.inherits)(_class, _BasicEachTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _BasicEachTest.apply(this, arguments));\n }\n\n _class.prototype.templateFor = function (_ref) {\n var cond = _ref.cond,\n truthy = _ref.truthy,\n falsy = _ref.falsy;\n\n return '{{#each ' + cond + '}}' + truthy + '{{else}}' + falsy + '{{/each}}';\n };\n\n return _class;\n }(BasicEachTest));\n\n (0, _testCase.moduleFor)('Syntax test: toggling {{#each as}}', function (_BasicEachTest2) {\n (0, _emberBabel.inherits)(_class2, _BasicEachTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _BasicEachTest2.apply(this, arguments));\n }\n\n _class2.prototype.templateFor = function (_ref2) {\n var cond = _ref2.cond,\n truthy = _ref2.truthy,\n falsy = _ref2.falsy;\n\n return '{{#each ' + cond + ' as |test|}}' + truthy + '{{else}}' + falsy + '{{/each}}';\n };\n\n return _class2;\n }(BasicEachTest));\n\n var EachEdgeCasesTest = function (_TogglingEachTest2) {\n (0, _emberBabel.inherits)(EachEdgeCasesTest, _TogglingEachTest2);\n\n function EachEdgeCasesTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingEachTest2.apply(this, arguments));\n }\n\n return EachEdgeCasesTest;\n }(TogglingEachTest);\n\n (0, _abstractTestCase.applyMixins)(EachEdgeCasesTest, new _sharedConditionalTests.FalsyGenerator([true, 'hello', 1, Object, function () {}, {}, { foo: 'bar' }, Object.create(null), Object.create({}), Object.create({ foo: 'bar' })]));\n\n (0, _testCase.moduleFor)('Syntax test: toggling {{#each}}', function (_EachEdgeCasesTest) {\n (0, _emberBabel.inherits)(_class3, _EachEdgeCasesTest);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachEdgeCasesTest.apply(this, arguments));\n }\n\n _class3.prototype.templateFor = function (_ref3) {\n var cond = _ref3.cond,\n truthy = _ref3.truthy,\n falsy = _ref3.falsy;\n\n return '{{#each ' + cond + '}}' + truthy + '{{else}}' + falsy + '{{/each}}';\n };\n\n return _class3;\n }(EachEdgeCasesTest));\n\n (0, _testCase.moduleFor)('Syntax test: toggling {{#each as}}', function (_EachEdgeCasesTest2) {\n (0, _emberBabel.inherits)(_class4, _EachEdgeCasesTest2);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachEdgeCasesTest2.apply(this, arguments));\n }\n\n _class4.prototype.templateFor = function (_ref4) {\n var cond = _ref4.cond,\n truthy = _ref4.truthy,\n falsy = _ref4.falsy;\n\n return '{{#each ' + cond + ' as |test|}}' + truthy + '{{else}}' + falsy + '{{/each}}';\n };\n\n return _class4;\n }(EachEdgeCasesTest));\n\n var AbstractEachTest = function (_RenderingTest) {\n (0, _emberBabel.inherits)(AbstractEachTest, _RenderingTest);\n\n function AbstractEachTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n AbstractEachTest.prototype.createList = function () /* items */{\n throw new Error('Not implemented: `createList`');\n };\n\n AbstractEachTest.prototype.makeList = function (items) {\n var _createList = this.createList(items),\n list = _createList.list,\n delegate = _createList.delegate;\n\n this.list = list;\n this.delegate = delegate;\n };\n\n AbstractEachTest.prototype.replaceList = function (list) {\n var _this13 = this;\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'list', _this13.createList(list).list);\n });\n };\n\n AbstractEachTest.prototype.forEach = function (callback) {\n return this.delegate.toArray().forEach(callback);\n };\n\n AbstractEachTest.prototype.objectAt = function (idx) {\n return this.delegate.objectAt(idx);\n };\n\n AbstractEachTest.prototype.clear = function () {\n return this.delegate.clear();\n };\n\n AbstractEachTest.prototype.replace = function (idx, del, ins) {\n return this.delegate.replace(idx, del, ins);\n };\n\n AbstractEachTest.prototype.unshiftObject = function (obj) {\n return this.delegate.unshiftObject(obj);\n };\n\n AbstractEachTest.prototype.unshiftObjects = function (arr) {\n return this.delegate.unshiftObjects(arr);\n };\n\n AbstractEachTest.prototype.pushObject = function (obj) {\n return this.delegate.pushObject(obj);\n };\n\n AbstractEachTest.prototype.pushObjects = function (arr) {\n return this.delegate.pushObjects(arr);\n };\n\n AbstractEachTest.prototype.shiftObject = function () {\n return this.delegate.shiftObject();\n };\n\n AbstractEachTest.prototype.popObject = function () {\n return this.delegate.popObject();\n };\n\n AbstractEachTest.prototype.insertAt = function (idx, obj) {\n return this.delegate.insertAt(idx, obj);\n };\n\n AbstractEachTest.prototype.removeAt = function (idx, len) {\n return this.delegate.removeAt(idx, len);\n };\n\n AbstractEachTest.prototype.render = function (template) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.list !== undefined) {\n context.list = this.list;\n }\n\n return _RenderingTest.prototype.render.call(this, template, context);\n };\n\n return AbstractEachTest;\n }(_testCase.RenderingTest);\n\n var EachTest = function (_AbstractEachTest) {\n (0, _emberBabel.inherits)(EachTest, _AbstractEachTest);\n\n function EachTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractEachTest.apply(this, arguments));\n }\n\n EachTest.prototype['@test it repeats the given block for each item in the array'] = function () {\n var _this15 = this;\n\n this.makeList([{ text: 'hello' }]);\n\n this.render('{{#each list as |item|}}{{item.text}}{{else}}Empty{{/each}}');\n\n this.assertText('hello');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('hello');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.objectAt(0), 'text', 'Hello');\n });\n\n this.assertText('Hello');\n\n this.runTask(function () {\n _this15.pushObject({ text: ' ' });\n _this15.pushObject({ text: 'World' });\n });\n\n this.assertText('Hello World');\n\n this.runTask(function () {\n _this15.pushObject({ text: 'Earth' });\n _this15.removeAt(1);\n _this15.insertAt(1, { text: 'Globe' });\n });\n\n this.assertText('HelloGlobeWorldEarth');\n\n this.runTask(function () {\n _this15.pushObject({ text: 'Planet' });\n _this15.removeAt(1);\n _this15.insertAt(1, { text: ' ' });\n _this15.pushObject({ text: ' ' });\n _this15.pushObject({ text: 'Earth' });\n _this15.removeAt(3);\n });\n\n this.assertText('Hello WorldPlanet Earth');\n\n this.runTask(function () {\n _this15.pushObject({ text: 'Globe' });\n _this15.removeAt(1);\n _this15.insertAt(1, { text: ' ' });\n _this15.pushObject({ text: ' ' });\n _this15.pushObject({ text: 'World' });\n _this15.removeAt(2);\n });\n\n this.assertText('Hello Planet EarthGlobe World');\n\n this.runTask(function () {\n return _this15.replace(2, 4, [{ text: 'my' }]);\n });\n\n this.assertText('Hello my World');\n\n this.runTask(function () {\n return _this15.clear();\n });\n\n this.assertText('Empty');\n\n this.replaceList([{ text: 'hello' }]);\n\n this.assertText('hello');\n };\n\n EachTest.prototype['@test it receives the index as the second parameter'] = function () {\n var _this16 = this;\n\n this.makeList([{ text: 'hello' }, { text: 'world' }]);\n\n this.render('{{#each list as |item index|}}[{{index}}. {{item.text}}]{{/each}}');\n\n this.assertText('[0. hello][1. world]');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this16.insertAt(1, { text: 'my' });\n });\n\n this.assertText('[0. hello][1. my][2. world]');\n\n this.replaceList([{ text: 'hello' }, { text: 'world' }]);\n\n this.assertText('[0. hello][1. world]');\n };\n\n EachTest.prototype['@test it accepts a string key'] = function () {\n var _this17 = this;\n\n this.makeList([{ text: 'hello' }, { text: 'world' }]);\n\n this.render('{{#each list key=\\'text\\' as |item|}}{{item.text}}{{/each}}');\n\n this.assertText('helloworld');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this17.pushObject({ text: 'again' });\n });\n\n this.assertText('helloworldagain');\n\n this.replaceList([{ text: 'hello' }, { text: 'world' }]);\n\n this.assertText('helloworld');\n };\n\n EachTest.prototype['@test it accepts a numeric key'] = function () {\n var _this18 = this;\n\n this.makeList([{ id: 1 }, { id: 2 }]);\n\n this.render('{{#each list key=\\'id\\' as |item|}}{{item.id}}{{/each}}');\n\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this18.pushObject({ id: 3 });\n });\n\n this.assertText('123');\n\n this.replaceList([{ id: 1 }, { id: 2 }]);\n\n this.assertText('12');\n };\n\n EachTest.prototype['@test it can specify @index as the key'] = function () {\n var _this19 = this;\n\n this.makeList([{ id: 1 }, { id: 2 }]);\n\n this.render('{{#each list key=\\'@index\\' as |item|}}{{item.id}}{{/each}}');\n\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this19.pushObject({ id: 3 });\n });\n\n this.assertText('123');\n\n this.replaceList([{ id: 1 }, { id: 2 }]);\n\n this.assertText('12');\n };\n\n EachTest.prototype['@test it can specify @identity as the key for arrays of primitives'] = function () {\n var _this20 = this;\n\n this.makeList([1, 2]);\n\n this.render('{{#each list key=\\'@identity\\' as |item|}}{{item}}{{/each}}');\n\n this.assertText('12');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this20.pushObject(3);\n });\n\n this.assertText('123');\n\n this.replaceList([1, 2]);\n\n this.assertText('12');\n };\n\n EachTest.prototype['@test it can specify @identity as the key for mixed arrays of objects and primitives'] = function () {\n var _this21 = this;\n\n this.makeList([1, { id: 2 }, 3]);\n\n this.render('{{#each list key=\\'@identity\\' as |item|}}{{if item.id item.id item}}{{/each}}');\n\n this.assertText('123');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this21.insertAt(2, { id: 4 });\n });\n\n this.assertText('1243');\n\n this.replaceList([1, { id: 2 }, 3]);\n\n this.assertText('123');\n };\n\n EachTest.prototype['@test it can render duplicate primitive items'] = function () {\n var _this22 = this;\n\n this.makeList(['a', 'a', 'a']);\n\n this.render('{{#each list as |item|}}{{item}}{{/each}}');\n\n this.assertText('aaa');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this22.pushObject('a');\n });\n\n this.assertText('aaaa');\n\n this.runTask(function () {\n return _this22.pushObject('a');\n });\n\n this.assertText('aaaaa');\n\n this.replaceList(['a', 'a', 'a']);\n\n this.assertText('aaa');\n };\n\n EachTest.prototype['@test updating and setting within #each'] = function () {\n var _this23 = this;\n\n this.makeList([{ value: 1 }, { value: 2 }, { value: 3 }]);\n\n var FooBarComponent = _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.isEven = true;\n this.tagName = 'li';\n },\n _isEven: function () {\n this.set('isEven', this.get('item.value') % 2 === 0);\n },\n didUpdate: function () {\n this._isEven();\n }\n });\n\n this.registerComponent('foo-bar', {\n ComponentClass: FooBarComponent,\n template: '{{#if isEven}}{{item.value}}{{/if}}'\n });\n\n this.render((0, _abstractTestCase.strip)(_templateObject));\n\n this.assertText('Prev1NextPrev2NextPrev3Next');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this23.objectAt(0), 'value', 3);\n });\n\n this.assertText('PrevNextPrev2NextPrev3Next');\n\n this.replaceList([{ value: 1 }, { value: 2 }, { value: 3 }]);\n\n this.assertText('Prev1NextPrev2NextPrev3Next');\n };\n\n EachTest.prototype['@test it can render duplicate objects'] = function () {\n var _this24 = this;\n\n var duplicateItem = { text: 'foo' };\n\n this.makeList([duplicateItem, duplicateItem, { text: 'bar' }, { text: 'baz' }]);\n\n this.render('{{#each list as |item|}}{{item.text}}{{/each}}');\n\n this.assertText('foofoobarbaz');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this24.pushObject(duplicateItem);\n });\n\n this.assertText('foofoobarbazfoo');\n\n this.runTask(function () {\n return _this24.pushObject(duplicateItem);\n });\n\n this.assertText('foofoobarbazfoofoo');\n\n this.replaceList([duplicateItem, duplicateItem, { text: 'bar' }, { text: 'baz' }]);\n\n this.assertText('foofoobarbaz');\n };\n\n EachTest.prototype['@test it maintains DOM stability when condition changes between objects with the same keys'] = function () {\n var _this25 = this;\n\n this.makeList([{ text: 'Hello' }, { text: ' ' }, { text: 'world' }]);\n\n this.render('{{#each list key=\"text\" as |item|}}{{item.text}}{{/each}}');\n\n this.assertText('Hello world');\n\n this.takeSnapshot();\n\n this.runTask(function () {\n _this25.popObject();\n _this25.popObject();\n _this25.pushObject({ text: ' ' });\n _this25.pushObject({ text: 'world' });\n });\n\n this.assertText('Hello world');\n\n this.assertInvariants();\n\n this.replaceList([{ text: 'Hello' }, { text: ' ' }, { text: 'world' }]);\n\n this.assertText('Hello world');\n\n this.assertInvariants();\n };\n\n EachTest.prototype['@test it maintains DOM stability for stable keys when list is updated'] = function () {\n var _this26 = this;\n\n this.makeList([{ text: 'Hello' }, { text: ' ' }, { text: 'world' }]);\n\n this.render('{{#each list key=\"text\" as |item|}}{{item.text}}{{/each}}');\n\n this.assertText('Hello world');\n\n this.assertStableRerender();\n\n var oldSnapshot = this.takeSnapshot();\n\n this.runTask(function () {\n _this26.unshiftObject({ text: ', ' });\n _this26.unshiftObject({ text: 'Hi' });\n _this26.pushObject({ text: '!' });\n _this26.pushObject({ text: 'earth' });\n });\n\n this.assertText('Hi, Hello world!earth');\n\n this.assertPartialInvariants(2, 5);\n\n this.replaceList([{ text: 'Hello' }, { text: ' ' }, { text: 'world' }]);\n\n this.assertText('Hello world');\n\n this.assertInvariants(oldSnapshot, this.takeSnapshot());\n };\n\n EachTest.prototype['@test it renders all items with duplicate key values'] = function () {\n var _this27 = this;\n\n this.makeList([{ text: 'Hello' }, { text: 'Hello' }, { text: 'Hello' }]);\n\n this.render('{{#each list key=\"text\" as |item|}}{{item.text}}{{/each}}');\n\n this.assertText('HelloHelloHello');\n\n this.runTask(function () {\n _this27.forEach(function (hash) {\n return (0, _emberMetal.set)(hash, 'text', 'Goodbye');\n });\n });\n\n this.assertText('GoodbyeGoodbyeGoodbye');\n\n this.replaceList([{ text: 'Hello' }, { text: 'Hello' }, { text: 'Hello' }]);\n\n this.assertText('HelloHelloHello');\n };\n\n EachTest.prototype['@test context is not changed to the inner scope inside an {{#each as}} block'] = function () {\n var _this28 = this;\n\n this.makeList([{ name: 'Chad' }, { name: 'Zack' }, { name: 'Asa' }]);\n\n this.render('{{name}}-{{#each list as |person|}}{{name}}{{/each}}-{{name}}', {\n name: 'Joel'\n });\n\n this.assertText('Joel-JoelJoelJoel-Joel');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this28.shiftObject();\n });\n\n this.assertText('Joel-JoelJoel-Joel');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this28.context, 'name', 'Godfrey');\n });\n\n this.assertText('Godfrey-GodfreyGodfrey-Godfrey');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this28.context, 'name', 'Joel');\n });\n this.replaceList([{ name: 'Chad' }, { name: 'Zack' }, { name: 'Asa' }]);\n\n this.assertText('Joel-JoelJoelJoel-Joel');\n };\n\n EachTest.prototype['@test can access the item and the original scope'] = function () {\n var _this29 = this;\n\n this.makeList([{ name: 'Tom Dale' }, { name: 'Yehuda Katz' }, { name: 'Godfrey Chan' }]);\n\n this.render('{{#each list key=\"name\" as |person|}}[{{title}}: {{person.name}}]{{/each}}', {\n title: 'Señor Engineer'\n });\n\n this.assertText('[Señor Engineer: Tom Dale][Señor Engineer: Yehuda Katz][Señor Engineer: Godfrey Chan]');\n\n this.runTask(function () {\n return _this29.rerender();\n });\n\n this.assertText('[Señor Engineer: Tom Dale][Señor Engineer: Yehuda Katz][Señor Engineer: Godfrey Chan]');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this29.objectAt(1), 'name', 'Stefan Penner');\n _this29.removeAt(0);\n _this29.pushObject({ name: 'Tom Dale' });\n _this29.insertAt(1, { name: 'Chad Hietala' });\n (0, _emberMetal.set)(_this29.context, 'title', 'Principal Engineer');\n });\n\n this.assertText('[Principal Engineer: Stefan Penner][Principal Engineer: Chad Hietala][Principal Engineer: Godfrey Chan][Principal Engineer: Tom Dale]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this29.context, 'title', 'Señor Engineer');\n });\n this.replaceList([{ name: 'Tom Dale' }, { name: 'Yehuda Katz' }, { name: 'Godfrey Chan' }]);\n\n this.assertText('[Señor Engineer: Tom Dale][Señor Engineer: Yehuda Katz][Señor Engineer: Godfrey Chan]');\n };\n\n EachTest.prototype['@test the scoped variable is not available outside the {{#each}} block.'] = function () {\n var _this30 = this;\n\n this.makeList(['Yehuda']);\n\n this.render('{{name}}-{{#each list as |name|}}{{name}}{{/each}}-{{name}}', {\n name: 'Stef'\n });\n\n this.assertText('Stef-Yehuda-Stef');\n\n this.runTask(function () {\n return _this30.rerender();\n });\n\n this.assertText('Stef-Yehuda-Stef');\n\n this.runTask(function () {\n return _this30.pushObjects([' ', 'Katz']);\n });\n\n this.assertText('Stef-Yehuda Katz-Stef');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this30.context, 'name', 'Tom');\n });\n\n this.assertText('Tom-Yehuda Katz-Tom');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this30.context, 'name', 'Stef');\n });\n this.replaceList(['Yehuda']);\n\n this.assertText('Stef-Yehuda-Stef');\n };\n\n EachTest.prototype['@test inverse template is displayed with context'] = function () {\n var _this31 = this;\n\n this.makeList([]);\n\n this.render('{{#each list as |thing|}}Has Thing{{else}}No Thing {{otherThing}}{{/each}}', {\n otherThing: 'bar'\n });\n\n this.assertText('No Thing bar');\n\n this.runTask(function () {\n return _this31.rerender();\n });\n\n this.assertText('No Thing bar');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'otherThing', 'biz');\n });\n\n this.assertText('No Thing biz');\n\n this.runTask(function () {\n return _this31.pushObject('non-empty');\n });\n\n this.assertText('Has Thing');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'otherThing', 'baz');\n });\n\n this.assertText('Has Thing');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this31.context, 'otherThing', 'bar');\n });\n this.replaceList([]);\n\n this.assertText('No Thing bar');\n };\n\n EachTest.prototype['@test content that are not initially present updates correctly GH#13983'] = function () {\n var _this32 = this;\n\n // The root cause of this bug is that Glimmer did not call `didInitializeChildren`\n // on the inserted `TryOpcode`, causing that `TryOpcode` to have an uninitialized\n // tag. Currently the only way to observe this the \"JUMP-IF-NOT-MODIFIED\", i.e. by\n // wrapping it in an component.\n\n this.registerComponent('x-wrapper', { template: '{{yield}}' });\n\n this.makeList([]);\n\n this.render('{{#x-wrapper}}{{#each list as |obj|}}[{{obj.text}}]{{/each}}{{/x-wrapper}}');\n\n this.assertText('');\n\n this.runTask(function () {\n return _this32.rerender();\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return _this32.pushObject({ text: 'foo' });\n });\n\n this.assertText('[foo]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this32.objectAt(0), 'text', 'FOO');\n });\n\n this.assertText('[FOO]');\n\n this.runTask(function () {\n return _this32.pushObject({ text: 'bar' });\n });\n\n this.assertText('[FOO][bar]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this32.objectAt(1), 'text', 'BAR');\n });\n\n this.assertText('[FOO][BAR]');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this32.objectAt(1), 'text', 'baz');\n });\n\n this.assertText('[FOO][baz]');\n\n this.runTask(function () {\n return _this32.replace(1, 1, [{ text: 'BAZ' }]);\n });\n\n this.assertText('[FOO][BAZ]');\n\n this.replaceList([]);\n\n this.assertText('');\n };\n\n EachTest.prototype['@test empty trusted content clears properly [GH#16314]'] = function () {\n var _this33 = this;\n\n this.makeList(['hello']);\n\n this.render('before {{#each list as |value|}}{{{value}}}{{/each}} after');\n\n this.assertText('before hello after');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return _this33.pushObjects([null, ' world']);\n });\n\n this.assertText('before hello world after');\n\n this.runTask(function () {\n return _this33.replace(1, 2, [undefined, ' world!']);\n });\n\n this.assertText('before hello world! after');\n\n this.runTask(function () {\n return _this33.replace(1, 2, [(0, _helpers.htmlSafe)(''), ' world!!']);\n });\n\n this.assertText('before hello world!! after');\n\n this.replaceList(['hello']);\n\n this.assertText('before hello after');\n };\n\n EachTest.prototype['@test re-using the same variable with different {{#each}} blocks does not override each other'] = function () {\n var _this34 = this;\n\n var admins = this.createList([{ name: 'Tom Dale' }]);\n var users = this.createList([{ name: 'Yehuda Katz' }]);\n\n this.render('Admin: {{#each admins key=\"name\" as |person|}}[{{person.name}}]{{/each}} User: {{#each users key=\"name\" as |person|}}[{{person.name}}]{{/each}}', {\n admins: admins.list,\n users: users.list\n });\n\n this.assertText('Admin: [Tom Dale] User: [Yehuda Katz]');\n\n this.runTask(function () {\n return _this34.rerender();\n });\n\n this.assertText('Admin: [Tom Dale] User: [Yehuda Katz]');\n\n this.runTask(function () {\n admins.delegate.pushObject({ name: 'Godfrey Chan' });\n (0, _emberMetal.set)(users.delegate.objectAt(0), 'name', 'Stefan Penner');\n });\n\n this.assertText('Admin: [Tom Dale][Godfrey Chan] User: [Stefan Penner]');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this34.context, 'admins', _this34.createList([{ name: 'Tom Dale' }]).list);\n (0, _emberMetal.set)(_this34.context, 'users', _this34.createList([{ name: 'Yehuda Katz' }]).list);\n });\n\n this.assertText('Admin: [Tom Dale] User: [Yehuda Katz]');\n };\n\n EachTest.prototype['@test an outer {{#each}}\\'s scoped variable does not clobber an inner {{#each}}\\'s property if they share the same name - Issue #1315'] = function () {\n var _this35 = this;\n\n var content = this.createList(['X', 'Y']);\n var options = this.createList([{ label: 'One', value: 1 }, { label: 'Two', value: 2 }]);\n\n this.render((0, _abstractTestCase.strip)(_templateObject2), {\n content: content.list,\n options: options.list\n });\n\n this.assertText('X-1:One2:TwoY-1:One2:Two');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n content.delegate.pushObject('Z');\n (0, _emberMetal.set)(options.delegate.objectAt(0), 'value', 0);\n });\n\n this.assertText('X-0:One2:TwoY-0:One2:TwoZ-0:One2:Two');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this35.context, 'content', _this35.createList(['X', 'Y']).list);\n (0, _emberMetal.set)(_this35.context, 'options', _this35.createList([{ label: 'One', value: 1 }, { label: 'Two', value: 2 }]).list);\n });\n\n this.assertText('X-1:One2:TwoY-1:One2:Two');\n };\n\n EachTest.prototype['@test the scoped variable is not available outside the {{#each}} block'] = function () {\n var _this36 = this;\n\n var first = this.createList(['Limbo']);\n var fifth = this.createList(['Wrath']);\n var ninth = this.createList(['Treachery']);\n\n this.render('{{ring}}-{{#each first as |ring|}}{{ring}}-{{#each fifth as |ring|}}{{ring}}-{{#each ninth as |ring|}}{{ring}}-{{/each}}{{ring}}-{{/each}}{{ring}}-{{/each}}{{ring}}', {\n ring: 'Greed',\n first: first.list,\n fifth: fifth.list,\n ninth: ninth.list\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n\n this.runTask(function () {\n return _this36.rerender();\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this36.context, 'ring', 'O');\n fifth.delegate.insertAt(0, 'D');\n });\n\n this.assertText('O-Limbo-D-Treachery-D-Wrath-Treachery-Wrath-Limbo-O');\n\n this.runTask(function () {\n first.delegate.pushObject('I');\n ninth.delegate.replace(0, 1, ['K']);\n });\n\n this.assertText('O-Limbo-D-K-D-Wrath-K-Wrath-Limbo-I-D-K-D-Wrath-K-Wrath-I-O');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this36.context, 'ring', 'Greed');\n (0, _emberMetal.set)(_this36.context, 'first', _this36.createList(['Limbo']).list);\n (0, _emberMetal.set)(_this36.context, 'fifth', _this36.createList(['Wrath']).list);\n (0, _emberMetal.set)(_this36.context, 'ninth', _this36.createList(['Treachery']).list);\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n };\n\n EachTest.prototype['@test it should support {{#each name as |foo|}}, then {{#each foo as |bar|}}'] = function () {\n var _this37 = this;\n\n var inner = this.createList(['caterpillar']);\n var outer = this.createList([inner.list]);\n\n this.render('{{#each name key=\"@index\" as |foo|}}{{#each foo as |bar|}}{{bar}}{{/each}}{{/each}}', {\n name: outer.list\n });\n\n this.assertText('caterpillar');\n\n this.runTask(function () {\n return _this37.rerender();\n });\n\n this.assertText('caterpillar');\n\n this.runTask(function () {\n inner.delegate.replace(0, 1, ['lady']);\n outer.delegate.pushObject(_this37.createList(['bird']).list);\n });\n\n this.assertText('ladybird');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this37.context, 'name', _this37.createList([_this37.createList(['caterpillar']).list]).list);\n });\n\n this.assertText('caterpillar');\n };\n\n return EachTest;\n }(AbstractEachTest);\n\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with native arrays', function (_EachTest) {\n (0, _emberBabel.inherits)(_class5, _EachTest);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachTest.apply(this, arguments));\n }\n\n _class5.prototype.createList = function (items) {\n return { list: items, delegate: new ArrayDelegate(items, items) };\n };\n\n return _class5;\n }(EachTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with emberA-wrapped arrays', function (_EachTest2) {\n (0, _emberBabel.inherits)(_class6, _EachTest2);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachTest2.apply(this, arguments));\n }\n\n _class6.prototype.createList = function (items) {\n var wrapped = (0, _emberRuntime.A)(items);\n return { list: wrapped, delegate: wrapped };\n };\n\n return _class6;\n }(EachTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with native Set', function (_EachTest3) {\n (0, _emberBabel.inherits)(_class7, _EachTest3);\n\n function _class7() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachTest3.apply(this, arguments));\n }\n\n _class7.prototype.createList = function (items) {\n var set = makeSet(items);\n return { list: set, delegate: new SetDelegate(set) };\n };\n\n _class7.prototype['@test it can render duplicate primitive items'] = function (assert) {\n assert.ok(true, 'not supported by Set');\n };\n\n _class7.prototype['@test it can render duplicate objects'] = function (assert) {\n assert.ok(true, 'not supported by Set');\n };\n\n return _class7;\n }(EachTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with array-like objects implementing forEach', function (_EachTest4) {\n (0, _emberBabel.inherits)(_class8, _EachTest4);\n\n function _class8() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachTest4.apply(this, arguments));\n }\n\n _class8.prototype.createList = function (items) {\n var forEachable = new ForEachable(items);\n return { list: forEachable, delegate: forEachable };\n };\n\n return _class8;\n }(EachTest));\n\n if (_emberUtils.HAS_NATIVE_SYMBOL) {\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with array-like objects implementing Symbol.iterator', function (_EachTest5) {\n (0, _emberBabel.inherits)(_class9, _EachTest5);\n\n function _class9() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachTest5.apply(this, arguments));\n }\n\n _class9.prototype.createList = function (items) {\n var iterable = new ArrayIterable(items);\n return { list: iterable, delegate: iterable };\n };\n\n return _class9;\n }(EachTest));\n }\n\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with array proxies, modifying itself', function (_EachTest6) {\n (0, _emberBabel.inherits)(_class10, _EachTest6);\n\n function _class10() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachTest6.apply(this, arguments));\n }\n\n _class10.prototype.createList = function (items) {\n var proxty = _emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)(items) });\n return { list: proxty, delegate: proxty };\n };\n\n return _class10;\n }(EachTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with array proxies, replacing its content', function (_EachTest7) {\n (0, _emberBabel.inherits)(_class11, _EachTest7);\n\n function _class11() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EachTest7.apply(this, arguments));\n }\n\n _class11.prototype.createList = function (items) {\n var wrapped = (0, _emberRuntime.A)(items);\n return {\n list: wrapped,\n delegate: _emberRuntime.ArrayProxy.create({ content: wrapped })\n };\n };\n\n return _class11;\n }(EachTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each as}} undefined path', function (_RenderingTest2) {\n (0, _emberBabel.inherits)(_class12, _RenderingTest2);\n\n function _class12() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest2.apply(this, arguments));\n }\n\n _class12.prototype['@test keying off of `undefined` does not render'] = function () {\n var _this46 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject3), { foo: {} });\n\n this.assertText('');\n\n this.runTask(function () {\n return _this46.rerender();\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this46.context, 'foo', { bar: { baz: ['Here!'] } });\n });\n\n this.assertText('Here!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this46.context, 'foo', {});\n });\n\n this.assertText('');\n };\n\n return _class12;\n }(_testCase.RenderingTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#each}} with sparse arrays', function (_RenderingTest3) {\n (0, _emberBabel.inherits)(_class13, _RenderingTest3);\n\n function _class13() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest3.apply(this, arguments));\n }\n\n _class13.prototype['@test it should itterate over holes'] = function () {\n var _this48 = this;\n\n var sparseArray = [];\n sparseArray[3] = 'foo';\n sparseArray[4] = 'bar';\n\n this.render((0, _abstractTestCase.strip)(_templateObject4), { list: (0, _emberRuntime.A)(sparseArray) });\n\n this.assertText('[0:][1:][2:][3:foo][4:bar]');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n var list = (0, _emberMetal.get)(_this48.context, 'list');\n list.pushObject('baz');\n });\n\n this.assertText('[0:][1:][2:][3:foo][4:bar][5:baz]');\n };\n\n return _class13;\n }(_testCase.RenderingTest));\n\n /* globals MutationObserver: false */\n if (typeof MutationObserver === 'function') {\n (0, _testCase.moduleFor)('Syntax test: {{#each as}} DOM mutation test', function (_RenderingTest4) {\n (0, _emberBabel.inherits)(_class14, _RenderingTest4);\n\n function _class14() {\n\n var _this49 = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest4.apply(this, arguments));\n\n _this49.observer = null;\n return _this49;\n }\n\n _class14.prototype.observe = function (element) {\n var observer = this.observer = new MutationObserver(function () {});\n observer.observe(element, { childList: true, characterData: true });\n };\n\n _class14.prototype.teardown = function () {\n if (this.observer) {\n this.observer.disconnect();\n }\n\n _RenderingTest4.prototype.teardown.call(this);\n };\n\n _class14.prototype.assertNoMutation = function () {\n this.assert.deepEqual(this.observer.takeRecords(), [], 'Expected no mutations');\n };\n\n _class14.prototype.expectMutations = function () {\n this.assert.ok(this.observer.takeRecords().length > 0, 'Expected some mutations');\n };\n\n _class14.prototype['@test {{#each}} should not mutate a subtree when the array has not changed [GH #14332]'] = function () {\n var _this50 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject5), { page: { title: 'Blog Posts' }, model: [{ title: 'Rails is omakase' }, { title: 'Ember is omakase' }] });\n\n this.assertHTML((0, _abstractTestCase.strip)(_templateObject6));\n\n this.observe(this.$('#posts')[0]);\n\n // MutationObserver is async\n return _emberRuntime.RSVP.Promise.resolve(function () {\n _this50.assertStableRerender();\n }).then(function () {\n _this50.assertNoMutation();\n\n _this50.runTask(function () {\n return (0, _emberMetal.set)(_this50.context, 'page', { title: 'Essays' });\n });\n\n _this50.assertHTML((0, _abstractTestCase.strip)(_templateObject7));\n }).then(function () {\n _this50.assertNoMutation();\n\n _this50.runTask(function () {\n return (0, _emberMetal.set)(_this50.context.page, 'title', 'Think Pieces™');\n });\n\n _this50.assertHTML((0, _abstractTestCase.strip)(_templateObject8));\n }).then(function () {\n // The last set is localized to the `page` object, so we do not expect Glimmer\n // to re-iterate the list\n _this50.assertNoMutation();\n });\n };\n\n return _class14;\n }(_testCase.RenderingTest));\n }\n});","enifed('ember-glimmer/tests/integration/syntax/experimental-syntax-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer'], function (_emberBabel, _testCase, _abstractTestCase, _emberGlimmer) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#-let obj as |bar|}}\\n {{bar}}\\n {{/-let}}\\n '], ['\\n {{#-let obj as |bar|}}\\n {{bar}}\\n {{/-let}}\\n ']);\n\n (0, _testCase.moduleFor)('registerMacros', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n\n var originalMacros = _emberGlimmer._experimentalMacros.slice();\n\n (0, _emberGlimmer._registerMacros)(function (blocks) {\n blocks.add('-let', function (params, hash, _default, inverse, builder) {\n builder.compileParams(params);\n builder.invokeStaticBlock(_default, params.length);\n });\n });\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n\n _this.originalMacros = originalMacros;\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _emberGlimmer._experimentalMacros.length = 0;\n this.originalMacros.forEach(function (macro) {\n return _emberGlimmer._experimentalMacros.push(macro);\n });\n\n _RenderingTest.prototype.teardown.call(this);\n };\n\n _class.prototype['@test allows registering custom syntax via private API'] = function () {\n this.render((0, _abstractTestCase.strip)(_templateObject), { obj: 'hello world!' });\n\n this.assertText('hello world!');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/syntax/if-unless-test', ['ember-babel', 'ember-glimmer/tests/utils/helpers', 'ember-runtime', 'ember-metal', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/shared-conditional-tests'], function (_emberBabel, _helpers, _emberRuntime, _emberMetal, _abstractTestCase, _testCase, _sharedConditionalTests) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#if cond}}\\n {{#each numbers as |number|}}\\n {{foo-bar number=number}}\\n {{/each}}\\n {{else}}\\n Nothing Here!\\n {{/if}}'], ['\\n {{#if cond}}\\n {{#each numbers as |number|}}\\n {{foo-bar number=number}}\\n {{/each}}\\n {{else}}\\n Nothing Here!\\n {{/if}}']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#if foo.bar.baz}}\\n Here!\\n {{else}}\\n Nothing Here!\\n {{/if}}'], ['\\n {{#if foo.bar.baz}}\\n Here!\\n {{else}}\\n Nothing Here!\\n {{/if}}']);\n\n (0, _testCase.moduleFor)('Syntax test: {{#if}} with inverse', function (_IfUnlessWithSyntaxTe) {\n (0, _emberBabel.inherits)(_class, _IfUnlessWithSyntaxTe);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessWithSyntaxTe.apply(this, arguments));\n }\n\n _class.prototype.templateFor = function (_ref) {\n var cond = _ref.cond,\n truthy = _ref.truthy,\n falsy = _ref.falsy;\n\n return '{{#if ' + cond + '}}' + truthy + '{{else}}' + falsy + '{{/if}}';\n };\n\n return _class;\n }(_sharedConditionalTests.IfUnlessWithSyntaxTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#unless}} with inverse', function (_IfUnlessWithSyntaxTe2) {\n (0, _emberBabel.inherits)(_class2, _IfUnlessWithSyntaxTe2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessWithSyntaxTe2.apply(this, arguments));\n }\n\n _class2.prototype.templateFor = function (_ref2) {\n var cond = _ref2.cond,\n truthy = _ref2.truthy,\n falsy = _ref2.falsy;\n\n return '{{#unless ' + cond + '}}' + falsy + '{{else}}' + truthy + '{{/unless}}';\n };\n\n return _class2;\n }(_sharedConditionalTests.IfUnlessWithSyntaxTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#if}} and {{#unless}} without inverse', function (_IfUnlessWithSyntaxTe3) {\n (0, _emberBabel.inherits)(_class3, _IfUnlessWithSyntaxTe3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessWithSyntaxTe3.apply(this, arguments));\n }\n\n _class3.prototype.templateFor = function (_ref3) {\n var cond = _ref3.cond,\n truthy = _ref3.truthy,\n falsy = _ref3.falsy;\n\n return '{{#if ' + cond + '}}' + truthy + '{{/if}}{{#unless ' + cond + '}}' + falsy + '{{/unless}}';\n };\n\n return _class3;\n }(_sharedConditionalTests.IfUnlessWithSyntaxTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#if}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class4, _RenderingTest);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class4.prototype['@test using `if` with an `{{each}}` destroys components when transitioning to and from inverse (GH #12267)'] = function (assert) {\n var _this5 = this;\n\n var destroyedChildrenCount = 0;\n\n this.registerComponent('foo-bar', {\n template: '{{number}}',\n ComponentClass: _helpers.Component.extend({\n willDestroy: function () {\n this._super();\n destroyedChildrenCount++;\n }\n })\n });\n\n this.render((0, _abstractTestCase.strip)(_templateObject), { cond: true, numbers: (0, _emberRuntime.A)([1, 2, 3]) });\n\n this.assertText('123');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertText('123');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'cond', false);\n });\n\n this.assertText('Nothing Here!');\n assert.equal(destroyedChildrenCount, 3, 'the children were properly destroyed');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'cond', true);\n });\n\n this.assertText('123');\n };\n\n _class4.prototype['@test looking up `undefined` property defaults to false'] = function () {\n var _this6 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject2), { foo: {} });\n\n this.assertText('Nothing Here!');\n\n this.runTask(function () {\n return _this6.rerender();\n });\n\n this.assertText('Nothing Here!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'foo', { bar: { baz: true } });\n });\n\n this.assertText('Here!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'foo', {});\n });\n\n this.assertText('Nothing Here!');\n };\n\n return _class4;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/syntax/in-element-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/test-helpers', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer', 'ember-metal'], function (_emberBabel, _testCase, _testHelpers, _abstractTestCase, _emberGlimmer, _emberMetal) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['{{#in-element el}}{{/in-element}}'], ['{{#in-element el}}{{/in-element}}']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#-in-element someElement}}\\n {{text}}\\n {{/-in-element}}\\n '], ['\\n {{#-in-element someElement}}\\n {{text}}\\n {{/-in-element}}\\n ']),\n _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#if showModal}}\\n {{#-in-element someElement}}\\n {{modal-display text=text}}\\n {{/-in-element}}\\n {{/if}}\\n '], ['\\n {{#if showModal}}\\n {{#-in-element someElement}}\\n {{modal-display text=text}}\\n {{/-in-element}}\\n {{/if}}\\n ']);\n\n (0, _testCase.moduleFor)('{{-in-element}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test using {{#in-element whatever}} asserts'] = function () {\n var _this2 = this;\n\n // the in-element keyword is not yet public API this test should be removed\n // once https://github.com/emberjs/rfcs/pull/287 lands and is enabled\n\n var el = document.createElement('div');\n expectAssertion(function () {\n _this2.render((0, _abstractTestCase.strip)(_templateObject), { el: el });\n }, /The {{in-element}} helper cannot be used. \\('-top-level' @ L1:C0\\)/);\n };\n\n _class.prototype['@test allows rendering into an external element'] = function () {\n var _this3 = this;\n\n var someElement = document.createElement('div');\n\n this.render((0, _abstractTestCase.strip)(_templateObject2), {\n someElement: someElement,\n text: 'Whoop!'\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n (0, _testHelpers.equalTokens)(someElement, 'Whoop!');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'text', 'Huzzah!!');\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n (0, _testHelpers.equalTokens)(someElement, 'Huzzah!!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'text', 'Whoop!');\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n (0, _testHelpers.equalTokens)(someElement, 'Whoop!');\n };\n\n _class.prototype['@test components are cleaned up properly'] = function (assert) {\n var _this4 = this;\n\n var hooks = [];\n\n var someElement = document.createElement('div');\n\n this.registerComponent('modal-display', {\n ComponentClass: _emberGlimmer.Component.extend({\n didInsertElement: function () {\n hooks.push('didInsertElement');\n },\n willDestroyElement: function () {\n hooks.push('willDestroyElement');\n }\n }),\n\n template: '{{text}}'\n });\n\n this.render((0, _abstractTestCase.strip)(_templateObject3), {\n someElement: someElement,\n text: 'Whoop!',\n showModal: false\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n (0, _testHelpers.equalTokens)(someElement, '');\n\n this.assertStableRerender();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'showModal', true);\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n this.assertComponentElement(someElement.firstChild, {\n content: 'Whoop!'\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'text', 'Huzzah!');\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n this.assertComponentElement(someElement.firstChild, {\n content: 'Huzzah!'\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'text', 'Whoop!');\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n this.assertComponentElement(someElement.firstChild, {\n content: 'Whoop!'\n });\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'showModal', false);\n });\n\n (0, _testHelpers.equalTokens)(this.element, '');\n (0, _testHelpers.equalTokens)(someElement, '');\n\n assert.deepEqual(hooks, ['didInsertElement', 'willDestroyElement']);\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/syntax/let-test', ['ember-babel', 'ember-metal', 'ember-runtime', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/abstract-test-case'], function (_emberBabel, _emberMetal, _emberRuntime, _testCase, _abstractTestCase) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#let foo.bar.baz as |thing|}}\\n value: \"{{thing}}\"\\n {{/let}}'], ['\\n {{#let foo.bar.baz as |thing|}}\\n value: \"{{thing}}\"\\n {{/let}}']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{name}}\\n {{#let committer1.name as |name|}}\\n [{{name}}\\n {{#let committer2.name as |name|}}\\n [{{name}}]\\n {{/let}}\\n {{name}}]\\n {{/let}}\\n {{name}}\\n {{#let committer2.name as |name|}}\\n [{{name}}\\n {{#let committer1.name as |name|}}\\n [{{name}}]\\n {{/let}}\\n {{name}}]\\n {{/let}}\\n {{name}}\\n '], ['\\n {{name}}\\n {{#let committer1.name as |name|}}\\n [{{name}}\\n {{#let committer2.name as |name|}}\\n [{{name}}]\\n {{/let}}\\n {{name}}]\\n {{/let}}\\n {{name}}\\n {{#let committer2.name as |name|}}\\n [{{name}}\\n {{#let committer1.name as |name|}}\\n [{{name}}]\\n {{/let}}\\n {{name}}]\\n {{/let}}\\n {{name}}\\n ']);\n\n (0, _testCase.moduleFor)('Syntax test: {{#let as}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype.templateFor = function (_ref) {\n var cond = _ref.cond,\n truthy = _ref.truthy,\n falsy = _ref.falsy;\n\n return '{{#let ' + cond + ' as |test|}}' + truthy + '{{else}}' + falsy + '{{/let}}';\n };\n\n _class.prototype['@test it renders the block if `undefined` is passed as an argument'] = function () {\n var _this2 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject), { foo: {} });\n\n this.assertText('value: \"\"');\n\n this.runTask(function () {\n return _this2.rerender();\n });\n\n this.assertText('value: \"\"');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'foo', { bar: { baz: 'Here!' } });\n });\n\n this.assertText('value: \"Here!\"');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'foo', {});\n });\n\n this.assertText('value: \"\"');\n };\n\n _class.prototype['@test it renders the block if arguments are falsey'] = function () {\n var _this3 = this;\n\n this.render('{{#let cond1 cond2 as |cond|}}value: \"{{cond1}}\"{{/let}}', {\n cond1: false\n });\n\n this.assertText('value: \"false\"');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('value: \"false\"');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'cond1', '');\n });\n\n this.assertText('value: \"\"');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'cond1', 0);\n });\n\n this.assertText('value: \"0\"');\n };\n\n _class.prototype['@test it yields multiple arguments in order'] = function () {\n var _this4 = this;\n\n this.render('{{#let foo bar baz.name as |a b c|}}{{a}} {{b}} {{c}}{{/let}}', {\n foo: 'Señor Engineer',\n bar: '',\n baz: { name: 'Dale' }\n });\n\n this.assertText('Señor Engineer Dale');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'bar', 'Tom');\n });\n\n this.assertText('Señor Engineer Tom Dale');\n };\n\n _class.prototype['@test can access alias and original scope'] = function () {\n var _this5 = this;\n\n this.render('{{#let person as |tom|}}{{title}}: {{tom.name}}{{/let}}', {\n title: 'Señor Engineer',\n person: { name: 'Tom Dale' }\n });\n\n this.assertText('Señor Engineer: Tom Dale');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertText('Señor Engineer: Tom Dale');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this5.context, 'person.name', 'Yehuda Katz');\n (0, _emberMetal.set)(_this5.context, 'title', 'Principal Engineer');\n });\n\n this.assertText('Principal Engineer: Yehuda Katz');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this5.context, 'person', { name: 'Tom Dale' });\n (0, _emberMetal.set)(_this5.context, 'title', 'Señor Engineer');\n });\n\n this.assertText('Señor Engineer: Tom Dale');\n };\n\n _class.prototype['@test the scoped variable is not available outside the {{#let}} block.'] = function () {\n var _this6 = this;\n\n this.render('{{name}}-{{#let other as |name|}}{{name}}{{/let}}-{{name}}', {\n name: 'Stef',\n other: 'Yehuda'\n });\n\n this.assertText('Stef-Yehuda-Stef');\n\n this.runTask(function () {\n return _this6.rerender();\n });\n\n this.assertText('Stef-Yehuda-Stef');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'other', 'Chad');\n });\n\n this.assertText('Stef-Chad-Stef');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'name', 'Tom');\n });\n\n this.assertText('Tom-Chad-Tom');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this6.context, 'name', 'Stef');\n (0, _emberMetal.set)(_this6.context, 'other', 'Yehuda');\n });\n\n this.assertText('Stef-Yehuda-Stef');\n };\n\n _class.prototype['@test can access alias of a proxy'] = function () {\n var _this7 = this;\n\n this.render('{{#let proxy as |person|}}{{person.name}}{{/let}}', {\n proxy: _emberRuntime.ObjectProxy.create({ content: { name: 'Tom Dale' } })\n });\n\n this.assertText('Tom Dale');\n\n this.runTask(function () {\n return _this7.rerender();\n });\n\n this.assertText('Tom Dale');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'proxy.name', 'Yehuda Katz');\n });\n\n this.assertText('Yehuda Katz');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'proxy.content', { name: 'Godfrey Chan' });\n });\n\n this.assertText('Godfrey Chan');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'proxy.content.name', 'Stefan Penner');\n });\n\n this.assertText('Stefan Penner');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'proxy.content', null);\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'proxy', _emberRuntime.ObjectProxy.create({ content: { name: 'Tom Dale' } }));\n });\n\n this.assertText('Tom Dale');\n };\n\n _class.prototype['@test can access alias of an array'] = function () {\n var _this8 = this;\n\n this.render('{{#let arrayThing as |words|}}{{#each words as |word|}}{{word}}{{/each}}{{/let}}', {\n arrayThing: (0, _emberRuntime.A)(['Hello', ' ', 'world'])\n });\n\n this.assertText('Hello world');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('Hello world');\n\n this.runTask(function () {\n var array = (0, _emberMetal.get)(_this8.context, 'arrayThing');\n array.replace(0, 1, ['Goodbye']);\n (0, _emberRuntime.removeAt)(array, 1);\n array.insertAt(1, ', ');\n array.pushObject('!');\n });\n\n this.assertText('Goodbye, world!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'arrayThing', ['Hello', ' ', 'world']);\n });\n\n this.assertText('Hello world');\n };\n\n _class.prototype['@test `attrs` can be used as a block param [GH#14678]'] = function () {\n var _this9 = this;\n\n this.render('{{#let hash as |attrs|}}[{{hash.foo}}-{{attrs.foo}}]{{/let}}', {\n hash: { foo: 'foo' }\n });\n\n this.assertText('[foo-foo]');\n\n this.runTask(function () {\n return _this9.rerender();\n });\n\n this.assertText('[foo-foo]');\n\n this.runTask(function () {\n return _this9.context.set('hash.foo', 'FOO');\n });\n\n this.assertText('[FOO-FOO]');\n\n this.runTask(function () {\n return _this9.context.set('hash.foo', 'foo');\n });\n\n this.assertText('[foo-foo]');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n\n (0, _testCase.moduleFor)('Syntax test: Multiple {{#let as}} helpers', function (_RenderingTest2) {\n (0, _emberBabel.inherits)(_class2, _RenderingTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest2.apply(this, arguments));\n }\n\n _class2.prototype['@test re-using the same variable with different {{#let}} blocks does not override each other'] = function () {\n var _this11 = this;\n\n this.render('Admin: {{#let admin as |person|}}{{person.name}}{{/let}} User: {{#let user as |person|}}{{person.name}}{{/let}}', {\n admin: { name: 'Tom Dale' },\n user: { name: 'Yehuda Katz' }\n });\n\n this.assertText('Admin: Tom Dale User: Yehuda Katz');\n\n this.runTask(function () {\n return _this11.rerender();\n });\n\n this.assertText('Admin: Tom Dale User: Yehuda Katz');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this11.context, 'admin.name', 'Godfrey Chan');\n (0, _emberMetal.set)(_this11.context, 'user.name', 'Stefan Penner');\n });\n\n this.assertText('Admin: Godfrey Chan User: Stefan Penner');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this11.context, 'admin', { name: 'Tom Dale' });\n (0, _emberMetal.set)(_this11.context, 'user', { name: 'Yehuda Katz' });\n });\n\n this.assertText('Admin: Tom Dale User: Yehuda Katz');\n };\n\n _class2.prototype['@test the scoped variable is not available outside the {{#let}} block'] = function () {\n var _this12 = this;\n\n this.render('{{ring}}-{{#let first as |ring|}}{{ring}}-{{#let fifth as |ring|}}{{ring}}-{{#let ninth as |ring|}}{{ring}}-{{/let}}{{ring}}-{{/let}}{{ring}}-{{/let}}{{ring}}', {\n ring: 'Greed',\n first: 'Limbo',\n fifth: 'Wrath',\n ninth: 'Treachery'\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n\n this.runTask(function () {\n return _this12.rerender();\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this12.context, 'ring', 'O');\n (0, _emberMetal.set)(_this12.context, 'fifth', 'D');\n });\n\n this.assertText('O-Limbo-D-Treachery-D-Limbo-O');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this12.context, 'first', 'I');\n (0, _emberMetal.set)(_this12.context, 'ninth', 'K');\n });\n\n this.assertText('O-I-D-K-D-I-O');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this12.context, 'ring', 'Greed');\n (0, _emberMetal.set)(_this12.context, 'first', 'Limbo');\n (0, _emberMetal.set)(_this12.context, 'fifth', 'Wrath');\n (0, _emberMetal.set)(_this12.context, 'ninth', 'Treachery');\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n };\n\n _class2.prototype['@test it should support {{#let name as |foo|}}, then {{#let foo as |bar|}}'] = function () {\n var _this13 = this;\n\n this.render('{{#let name as |foo|}}{{#let foo as |bar|}}{{bar}}{{/let}}{{/let}}', {\n name: 'caterpillar'\n });\n\n this.assertText('caterpillar');\n\n this.runTask(function () {\n return _this13.rerender();\n });\n\n this.assertText('caterpillar');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'name', 'butterfly');\n });\n\n this.assertText('butterfly');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this13.context, 'name', 'caterpillar');\n });\n\n this.assertText('caterpillar');\n };\n\n _class2.prototype['@test updating the context should update the alias'] = function () {\n var _this14 = this;\n\n this.render('{{#let this as |person|}}{{person.name}}{{/let}}', {\n name: 'Los Pivots'\n });\n\n this.assertText('Los Pivots');\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n this.assertText('Los Pivots');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'name', \"l'Pivots\");\n });\n\n this.assertText(\"l'Pivots\");\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'name', 'Los Pivots');\n });\n\n this.assertText('Los Pivots');\n };\n\n _class2.prototype['@test nested {{#let}} blocks should have access to root context'] = function () {\n var _this15 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject2), {\n name: 'ebryn',\n committer1: { name: 'trek' },\n committer2: { name: 'machty' }\n });\n\n this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'name', 'chancancode');\n });\n\n this.assertText('chancancode[trek[machty]trek]chancancode[machty[trek]machty]chancancode');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'committer1', { name: 'krisselden' });\n });\n\n this.assertText('chancancode[krisselden[machty]krisselden]chancancode[machty[krisselden]machty]chancancode');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this15.context, 'committer1.name', 'wycats');\n (0, _emberMetal.set)(_this15.context, 'committer2', { name: 'rwjblue' });\n });\n\n this.assertText('chancancode[wycats[rwjblue]wycats]chancancode[rwjblue[wycats]rwjblue]chancancode');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this15.context, 'name', 'ebryn');\n (0, _emberMetal.set)(_this15.context, 'committer1', { name: 'trek' });\n (0, _emberMetal.set)(_this15.context, 'committer2', { name: 'machty' });\n });\n\n this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn');\n };\n\n return _class2;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/syntax/with-dynamic-var-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/abstract-test-case'], function (_emberBabel, _testCase, _abstractTestCase) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#-with-dynamic-vars foo=\"bar\"}}\\n {{-get-dynamic-var \\'foo\\'}}\\n {{/-with-dynamic-vars}}\\n '], ['\\n {{#-with-dynamic-vars foo=\"bar\"}}\\n {{-get-dynamic-var \\'foo\\'}}\\n {{/-with-dynamic-vars}}\\n ']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#-with-dynamic-vars outletState=\"bar\"}}\\n {{-get-dynamic-var \\'outletState\\'}}\\n {{/-with-dynamic-vars}}\\n '], ['\\n {{#-with-dynamic-vars outletState=\"bar\"}}\\n {{-get-dynamic-var \\'outletState\\'}}\\n {{/-with-dynamic-vars}}\\n ']);\n\n (0, _testCase.moduleFor)('{{-with-dynamic-var}}', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test does not allow setting values other than outletState'] = function () {\n var _this2 = this;\n\n expectAssertion(function () {\n _this2.render((0, _abstractTestCase.strip)(_templateObject));\n }, /Using `-with-dynamic-scope` is only supported for `outletState` \\(you used `foo`\\)./);\n };\n\n _class.prototype['@test allows setting/getting outletState'] = function () {\n // this is simply asserting that we can write and read outletState\n // the actual value being used here is not what is used in real life\n // feel free to change the value being set and asserted as needed\n this.render((0, _abstractTestCase.strip)(_templateObject2));\n\n this.assertText('bar');\n };\n\n _class.prototype['@test does not allow setting values other than outletState'] = function () {\n var _this3 = this;\n\n expectAssertion(function () {\n _this3.render('{{-get-dynamic-var \\'foo\\'}}');\n }, /Using `-get-dynamic-scope` is only supported for `outletState` \\(you used `foo`\\)./);\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/integration/syntax/with-test', ['ember-babel', 'ember-metal', 'ember-runtime', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/shared-conditional-tests', 'ember-glimmer/tests/utils/abstract-test-case'], function (_emberBabel, _emberMetal, _emberRuntime, _testCase, _sharedConditionalTests, _abstractTestCase) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{#with foo.bar.baz as |thing|}}\\n {{thing}}\\n {{/with}}'], ['\\n {{#with foo.bar.baz as |thing|}}\\n {{thing}}\\n {{/with}}']),\n _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['\\n {{name}}\\n {{#with committer1.name as |name|}}\\n [{{name}}\\n {{#with committer2.name as |name|}}\\n [{{name}}]\\n {{/with}}\\n {{name}}]\\n {{/with}}\\n {{name}}\\n {{#with committer2.name as |name|}}\\n [{{name}}\\n {{#with committer1.name as |name|}}\\n [{{name}}]\\n {{/with}}\\n {{name}}]\\n {{/with}}\\n {{name}}\\n '], ['\\n {{name}}\\n {{#with committer1.name as |name|}}\\n [{{name}}\\n {{#with committer2.name as |name|}}\\n [{{name}}]\\n {{/with}}\\n {{name}}]\\n {{/with}}\\n {{name}}\\n {{#with committer2.name as |name|}}\\n [{{name}}\\n {{#with committer1.name as |name|}}\\n [{{name}}]\\n {{/with}}\\n {{name}}]\\n {{/with}}\\n {{name}}\\n ']);\n\n (0, _testCase.moduleFor)('Syntax test: {{#with}}', function (_IfUnlessWithSyntaxTe) {\n (0, _emberBabel.inherits)(_class, _IfUnlessWithSyntaxTe);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessWithSyntaxTe.apply(this, arguments));\n }\n\n _class.prototype.templateFor = function (_ref) {\n var cond = _ref.cond,\n truthy = _ref.truthy,\n falsy = _ref.falsy;\n\n return '{{#with ' + cond + '}}' + truthy + '{{else}}' + falsy + '{{/with}}';\n };\n\n return _class;\n }(_sharedConditionalTests.IfUnlessWithSyntaxTest));\n\n (0, _testCase.moduleFor)('Syntax test: {{#with as}}', function (_IfUnlessWithSyntaxTe2) {\n (0, _emberBabel.inherits)(_class2, _IfUnlessWithSyntaxTe2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _IfUnlessWithSyntaxTe2.apply(this, arguments));\n }\n\n _class2.prototype.templateFor = function (_ref2) {\n var cond = _ref2.cond,\n truthy = _ref2.truthy,\n falsy = _ref2.falsy;\n\n return '{{#with ' + cond + ' as |test|}}' + truthy + '{{else}}' + falsy + '{{/with}}';\n };\n\n _class2.prototype['@test keying off of `undefined` does not render'] = function () {\n var _this3 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject), { foo: {} });\n\n this.assertText('');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'foo', { bar: { baz: 'Here!' } });\n });\n\n this.assertText('Here!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'foo', {});\n });\n\n this.assertText('');\n };\n\n _class2.prototype['@test it renders and hides the given block based on the conditional'] = function () {\n var _this4 = this;\n\n this.render('{{#with cond1 as |cond|}}{{cond.greeting}}{{else}}False{{/with}}', {\n cond1: { greeting: 'Hello' }\n });\n\n this.assertText('Hello');\n\n this.runTask(function () {\n return _this4.rerender();\n });\n\n this.assertText('Hello');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'cond1.greeting', 'Hello world');\n });\n\n this.assertText('Hello world');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'cond1', false);\n });\n\n this.assertText('False');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'cond1', { greeting: 'Hello' });\n });\n\n this.assertText('Hello');\n };\n\n _class2.prototype['@test can access alias and original scope'] = function () {\n var _this5 = this;\n\n this.render('{{#with person as |tom|}}{{title}}: {{tom.name}}{{/with}}', {\n title: 'Señor Engineer',\n person: { name: 'Tom Dale' }\n });\n\n this.assertText('Señor Engineer: Tom Dale');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertText('Señor Engineer: Tom Dale');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this5.context, 'person.name', 'Yehuda Katz');\n (0, _emberMetal.set)(_this5.context, 'title', 'Principal Engineer');\n });\n\n this.assertText('Principal Engineer: Yehuda Katz');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this5.context, 'person', { name: 'Tom Dale' });\n (0, _emberMetal.set)(_this5.context, 'title', 'Señor Engineer');\n });\n\n this.assertText('Señor Engineer: Tom Dale');\n };\n\n _class2.prototype['@test the scoped variable is not available outside the {{#with}} block.'] = function () {\n var _this6 = this;\n\n this.render('{{name}}-{{#with other as |name|}}{{name}}{{/with}}-{{name}}', {\n name: 'Stef',\n other: 'Yehuda'\n });\n\n this.assertText('Stef-Yehuda-Stef');\n\n this.runTask(function () {\n return _this6.rerender();\n });\n\n this.assertText('Stef-Yehuda-Stef');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'other', 'Chad');\n });\n\n this.assertText('Stef-Chad-Stef');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this6.context, 'name', 'Tom');\n });\n\n this.assertText('Tom-Chad-Tom');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this6.context, 'name', 'Stef');\n (0, _emberMetal.set)(_this6.context, 'other', 'Yehuda');\n });\n\n this.assertText('Stef-Yehuda-Stef');\n };\n\n _class2.prototype['@test inverse template is displayed with context'] = function () {\n var _this7 = this;\n\n this.render('{{#with falsyThing as |thing|}}Has Thing{{else}}No Thing {{otherThing}}{{/with}}', {\n falsyThing: null,\n otherThing: 'bar'\n });\n\n this.assertText('No Thing bar');\n\n this.runTask(function () {\n return _this7.rerender();\n });\n\n this.assertText('No Thing bar');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'otherThing', 'biz');\n });\n\n this.assertText('No Thing biz');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'falsyThing', true);\n });\n\n this.assertText('Has Thing');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'otherThing', 'baz');\n });\n\n this.assertText('Has Thing');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this7.context, 'otherThing', 'bar');\n (0, _emberMetal.set)(_this7.context, 'falsyThing', null);\n });\n\n this.assertText('No Thing bar');\n };\n\n _class2.prototype['@test can access alias of a proxy'] = function () {\n var _this8 = this;\n\n this.render('{{#with proxy as |person|}}{{person.name}}{{/with}}', {\n proxy: _emberRuntime.ObjectProxy.create({ content: { name: 'Tom Dale' } })\n });\n\n this.assertText('Tom Dale');\n\n this.runTask(function () {\n return _this8.rerender();\n });\n\n this.assertText('Tom Dale');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'proxy.name', 'Yehuda Katz');\n });\n\n this.assertText('Yehuda Katz');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'proxy.content', { name: 'Godfrey Chan' });\n });\n\n this.assertText('Godfrey Chan');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'proxy.content.name', 'Stefan Penner');\n });\n\n this.assertText('Stefan Penner');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'proxy.content', null);\n });\n\n this.assertText('');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this8.context, 'proxy', _emberRuntime.ObjectProxy.create({ content: { name: 'Tom Dale' } }));\n });\n\n this.assertText('Tom Dale');\n };\n\n _class2.prototype['@test can access alias of an array'] = function () {\n var _this9 = this;\n\n this.render('{{#with arrayThing as |words|}}{{#each words as |word|}}{{word}}{{/each}}{{/with}}', {\n arrayThing: (0, _emberRuntime.A)(['Hello', ' ', 'world'])\n });\n\n this.assertText('Hello world');\n\n this.runTask(function () {\n return _this9.rerender();\n });\n\n this.assertText('Hello world');\n\n this.runTask(function () {\n var array = (0, _emberMetal.get)(_this9.context, 'arrayThing');\n array.replace(0, 1, ['Goodbye']);\n (0, _emberRuntime.removeAt)(array, 1);\n array.insertAt(1, ', ');\n array.pushObject('!');\n });\n\n this.assertText('Goodbye, world!');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'arrayThing', ['Hello', ' ', 'world']);\n });\n\n this.assertText('Hello world');\n };\n\n _class2.prototype['@test `attrs` can be used as a block param [GH#14678]'] = function () {\n var _this10 = this;\n\n this.render('{{#with hash as |attrs|}}[{{hash.foo}}-{{attrs.foo}}]{{/with}}', {\n hash: { foo: 'foo' }\n });\n\n this.assertText('[foo-foo]');\n\n this.runTask(function () {\n return _this10.rerender();\n });\n\n this.assertText('[foo-foo]');\n\n this.runTask(function () {\n return _this10.context.set('hash.foo', 'FOO');\n });\n\n this.assertText('[FOO-FOO]');\n\n this.runTask(function () {\n return _this10.context.set('hash.foo', 'foo');\n });\n\n this.assertText('[foo-foo]');\n };\n\n return _class2;\n }(_sharedConditionalTests.IfUnlessWithSyntaxTest));\n\n (0, _testCase.moduleFor)('Syntax test: Multiple {{#with as}} helpers', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class3, _RenderingTest);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class3.prototype['@test re-using the same variable with different {{#with}} blocks does not override each other'] = function () {\n var _this12 = this;\n\n this.render('Admin: {{#with admin as |person|}}{{person.name}}{{/with}} User: {{#with user as |person|}}{{person.name}}{{/with}}', {\n admin: { name: 'Tom Dale' },\n user: { name: 'Yehuda Katz' }\n });\n\n this.assertText('Admin: Tom Dale User: Yehuda Katz');\n\n this.runTask(function () {\n return _this12.rerender();\n });\n\n this.assertText('Admin: Tom Dale User: Yehuda Katz');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this12.context, 'admin.name', 'Godfrey Chan');\n (0, _emberMetal.set)(_this12.context, 'user.name', 'Stefan Penner');\n });\n\n this.assertText('Admin: Godfrey Chan User: Stefan Penner');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this12.context, 'admin', { name: 'Tom Dale' });\n (0, _emberMetal.set)(_this12.context, 'user', { name: 'Yehuda Katz' });\n });\n\n this.assertText('Admin: Tom Dale User: Yehuda Katz');\n };\n\n _class3.prototype['@test the scoped variable is not available outside the {{#with}} block'] = function () {\n var _this13 = this;\n\n this.render('{{ring}}-{{#with first as |ring|}}{{ring}}-{{#with fifth as |ring|}}{{ring}}-{{#with ninth as |ring|}}{{ring}}-{{/with}}{{ring}}-{{/with}}{{ring}}-{{/with}}{{ring}}', {\n ring: 'Greed',\n first: 'Limbo',\n fifth: 'Wrath',\n ninth: 'Treachery'\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n\n this.runTask(function () {\n return _this13.rerender();\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this13.context, 'ring', 'O');\n (0, _emberMetal.set)(_this13.context, 'fifth', 'D');\n });\n\n this.assertText('O-Limbo-D-Treachery-D-Limbo-O');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this13.context, 'first', 'I');\n (0, _emberMetal.set)(_this13.context, 'ninth', 'K');\n });\n\n this.assertText('O-I-D-K-D-I-O');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this13.context, 'ring', 'Greed');\n (0, _emberMetal.set)(_this13.context, 'first', 'Limbo');\n (0, _emberMetal.set)(_this13.context, 'fifth', 'Wrath');\n (0, _emberMetal.set)(_this13.context, 'ninth', 'Treachery');\n });\n\n this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed');\n };\n\n _class3.prototype['@test it should support {{#with name as |foo|}}, then {{#with foo as |bar|}}'] = function () {\n var _this14 = this;\n\n this.render('{{#with name as |foo|}}{{#with foo as |bar|}}{{bar}}{{/with}}{{/with}}', {\n name: 'caterpillar'\n });\n\n this.assertText('caterpillar');\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n this.assertText('caterpillar');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'name', 'butterfly');\n });\n\n this.assertText('butterfly');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'name', 'caterpillar');\n });\n\n this.assertText('caterpillar');\n };\n\n _class3.prototype['@test updating the context should update the alias'] = function () {\n var _this15 = this;\n\n this.render('{{#with this as |person|}}{{person.name}}{{/with}}', {\n name: 'Los Pivots'\n });\n\n this.assertText('Los Pivots');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('Los Pivots');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'name', \"l'Pivots\");\n });\n\n this.assertText(\"l'Pivots\");\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this15.context, 'name', 'Los Pivots');\n });\n\n this.assertText('Los Pivots');\n };\n\n _class3.prototype['@test nested {{#with}} blocks should have access to root context'] = function () {\n var _this16 = this;\n\n this.render((0, _abstractTestCase.strip)(_templateObject2), {\n name: 'ebryn',\n committer1: { name: 'trek' },\n committer2: { name: 'machty' }\n });\n\n this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn');\n\n this.runTask(function () {\n return _this16.rerender();\n });\n\n this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'name', 'chancancode');\n });\n\n this.assertText('chancancode[trek[machty]trek]chancancode[machty[trek]machty]chancancode');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this16.context, 'committer1', { name: 'krisselden' });\n });\n\n this.assertText('chancancode[krisselden[machty]krisselden]chancancode[machty[krisselden]machty]chancancode');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this16.context, 'committer1.name', 'wycats');\n (0, _emberMetal.set)(_this16.context, 'committer2', { name: 'rwjblue' });\n });\n\n this.assertText('chancancode[wycats[rwjblue]wycats]chancancode[rwjblue[wycats]rwjblue]chancancode');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this16.context, 'name', 'ebryn');\n (0, _emberMetal.set)(_this16.context, 'committer1', { name: 'trek' });\n (0, _emberMetal.set)(_this16.context, 'committer2', { name: 'machty' });\n });\n\n this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn');\n };\n\n return _class3;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/unit/outlet-test', ['ember-babel', 'ember-glimmer', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _emberGlimmer, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Glimmer OutletView', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test render in the render queue'] = function (assert) {\n var didAppendOutletView = 0;\n var expectedOutlet = '#foo.bar';\n\n var outletView = new _emberGlimmer.OutletView({}, {\n appendOutletView: function (view, target) {\n didAppendOutletView++;\n assert.equal(view, outletView);\n assert.equal(target, expectedOutlet);\n }\n });\n\n (0, _runloop.run)(function () {\n assert.equal(didAppendOutletView, 0, 'appendOutletView should not yet have been called (before appendTo)');\n outletView.appendTo(expectedOutlet);\n assert.equal(didAppendOutletView, 0, 'appendOutletView should not yet have been called (sync after appendTo)');\n\n (0, _runloop.schedule)('actions', function () {\n return assert.equal(didAppendOutletView, 0, 'appendOutletView should not yet have been called (in actions)');\n });\n (0, _runloop.schedule)('render', function () {\n return assert.equal(didAppendOutletView, 1, 'appendOutletView should be invoked in render');\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-glimmer/tests/unit/runtime-resolver-cache-test', ['ember-babel', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _testCase, _helpers, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _testCase.moduleFor)('ember-glimmer runtime resolver cache', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test a helper definition is only generated once'] = function (assert) {\n var _this2 = this;\n\n this.registerHelper('foo-bar', function () {\n return 'foo-bar helper!';\n });\n this.registerHelper('baz-qux', function () {\n return 'baz-qux helper!';\n });\n\n // assert precondition\n var state = this.getCacheCounters();\n assert.deepEqual(state, {\n templateCacheHits: 0,\n templateCacheMisses: 0,\n componentDefinitionCount: 0,\n helperDefinitionCount: 0\n }, 'precondition');\n\n this.render('\\n {{~#if cond~}}\\n {{foo-bar}}\\n {{~else~}}\\n {{baz-qux}}\\n {{~/if}}', {\n cond: true\n });\n\n this.assertText('foo-bar helper!');\n state = this.expectCacheChanges({ helperDefinitionCount: 1 }, state, 'calculate foo-bar helper only');\n\n // show component-two for the first time\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'cond', false);\n });\n\n this.assertText('baz-qux helper!');\n state = this.expectCacheChanges({\n helperDefinitionCount: 1\n }, state, 'calculate baz-qux helper, misses cache');\n\n // show foo-bar again\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'cond', true);\n });\n\n this.assertText('foo-bar helper!');\n state = this.expectCacheChanges({}, state, 'toggle back to foo-bar cache hit');\n\n // show baz-qux again\n this.runTask(function () {\n return (0, _emberMetal.set)(_this2.context, 'cond', false);\n });\n\n this.assertText('baz-qux helper!');\n state = this.expectCacheChanges({}, state, 'toggle back to baz-qux cache hit');\n };\n\n _class.prototype['@test a component definition is only generated once'] = function (assert) {\n var _this3 = this;\n\n // static layout\n this.registerComponent('component-one', { template: 'One' });\n this.registerComponent('component-two', {\n ComponentClass: _helpers.Component.extend(),\n template: 'Two'\n });\n\n // assert precondition\n var state = this.getCacheCounters();\n assert.deepEqual(state, {\n templateCacheHits: 0,\n templateCacheMisses: 0,\n componentDefinitionCount: 0,\n helperDefinitionCount: 0\n }, 'precondition');\n\n // show component-one for the first time\n this.render('{{component componentName}}', {\n componentName: 'component-one'\n });\n\n this.assertText('One');\n state = this.expectCacheChanges({ componentDefinitionCount: 1 }, state, 'test case component and component-one no change');\n\n // show component-two for the first time\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'componentName', 'component-two');\n });\n\n this.assertText('Two');\n state = this.expectCacheChanges({ componentDefinitionCount: 1 }, state, 'component-two first render');\n\n // show component-one again\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'componentName', 'component-one');\n });\n\n this.assertText('One');\n state = this.expectCacheChanges({}, state, 'toggle back to component-one no change');\n\n // show component-two again\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'componentName', 'component-two');\n });\n\n this.assertText('Two');\n state = this.expectCacheChanges({}, state, 'toggle back to component-two no change');\n };\n\n _class.prototype['@test each template is only compiled once'] = function (assert) {\n var _this4 = this,\n root2;\n\n // static layout\n this.registerComponent('component-one', { template: 'One' });\n\n // test directly import template factory onto late bound layout\n var Two = _helpers.Component.extend({\n layout: this.compile('Two')\n });\n this.registerComponent('component-two', { ComponentClass: Two });\n\n // inject layout onto component, share layout with component-one\n this.registerComponent('root-component', { ComponentClass: _helpers.Component });\n this.owner.inject('component:root-component', 'layout', 'template:components/component-one');\n\n // template instance shared between to template managers\n var rootFactory = this.owner.factoryFor('component:root-component');\n\n // assert precondition\n var state = this.getCacheCounters();\n assert.deepEqual(state, {\n templateCacheHits: 0,\n templateCacheMisses: 0,\n componentDefinitionCount: 0,\n helperDefinitionCount: 0\n }, 'precondition');\n\n // show component-one for the first time\n this.render('\\n {{~#if cond~}}\\n {{component-one}}\\n {{~else~}}\\n {{component-two}}\\n {{~/if}}', {\n cond: true\n });\n\n this.assertText('One');\n state = this.expectCacheChanges({ componentDefinitionCount: 1 }, state, 'test case component and component-one no change');\n\n // show component-two for the first time\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'cond', false);\n });\n\n this.assertText('Two');\n state = this.expectCacheChanges({\n templateCacheMisses: 1,\n componentDefinitionCount: 1\n }, state, 'component-two first render misses template cache');\n\n // show component-one again\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'cond', true);\n });\n\n this.assertText('One');\n state = this.expectCacheChanges({}, state, 'toggle back to component-one no change');\n\n // show component-two again\n this.runTask(function () {\n return (0, _emberMetal.set)(_this4.context, 'cond', false);\n });\n\n this.assertText('Two');\n state = this.expectCacheChanges({\n templateCacheHits: 1\n }, state, 'toggle back to component-two hits template cache');\n\n // render new root append\n var root = rootFactory.create();\n try {\n (0, _internalTestHelpers.runAppend)(root);\n this.assertText('TwoOne');\n // roots have different capabilities so this will hit\n state = this.expectCacheChanges({}, state, 'append root with component-one no change');\n\n // render new root append\n root2 = rootFactory.create();\n\n try {\n (0, _internalTestHelpers.runAppend)(root2);\n this.assertText('TwoOneOne');\n state = this.expectCacheChanges({}, state, 'append another root no change');\n } finally {\n (0, _internalTestHelpers.runDestroy)(root2);\n }\n } finally {\n (0, _internalTestHelpers.runDestroy)(root);\n }\n };\n\n _class.prototype.getCacheCounters = function () {\n var _runtimeResolver = this.runtimeResolver,\n templateCacheHits = _runtimeResolver.templateCacheHits,\n templateCacheMisses = _runtimeResolver.templateCacheMisses,\n componentDefinitionCount = _runtimeResolver.componentDefinitionCount,\n helperDefinitionCount = _runtimeResolver.helperDefinitionCount;\n\n return {\n templateCacheHits: templateCacheHits,\n templateCacheMisses: templateCacheMisses,\n componentDefinitionCount: componentDefinitionCount,\n helperDefinitionCount: helperDefinitionCount\n };\n };\n\n _class.prototype.expectCacheChanges = function (expected, lastState, message) {\n var state = this.getCacheCounters();\n var actual = diff(state, lastState);\n this.assert.deepEqual(actual, expected, message);\n return state;\n };\n\n return _class;\n }(_testCase.RenderingTest));\n\n function diff(state, lastState) {\n var res = {};\n Object.keys(state).forEach(function (key) {\n var delta = state[key] - lastState[key];\n if (delta !== 0) {\n res[key] = state[key] - lastState[key];\n }\n });\n return res;\n }\n});","enifed('ember-glimmer/tests/unit/template-factory-test', ['ember-babel', 'ember-template-compiler', 'ember-glimmer', 'ember-glimmer/tests/utils/test-case', 'ember-glimmer/tests/utils/helpers'], function (_emberBabel, _emberTemplateCompiler, _emberGlimmer, _testCase, _helpers) {\n 'use strict';\n\n (0, _testCase.moduleFor)('Template factory test', function (_RenderingTest) {\n (0, _emberBabel.inherits)(_class, _RenderingTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n _class.prototype['@test the template factory returned from precompile is the same as compile'] = function (assert) {\n var owner = this.owner;\n var runtimeResolver = this.runtimeResolver;\n\n var templateStr = 'Hello {{name}}';\n var options = { moduleName: 'my-app/templates/some-module.hbs' };\n\n var spec = (0, _emberTemplateCompiler.precompile)(templateStr, options);\n\n var module = new Function('exports', 'template', 'exports.default = template(' + spec + ');');\n var exports = {};\n module(exports, _emberGlimmer.template);\n var Precompiled = exports['default'];\n\n var Compiled = (0, _emberTemplateCompiler.compile)(templateStr, options);\n\n assert.equal(typeof Precompiled.create, 'function', 'precompiled is a factory');\n assert.ok(Precompiled.id, 'precompiled has id');\n\n assert.equal(typeof Compiled.create, 'function', 'compiled is a factory');\n assert.ok(Compiled.id, 'compiled has id');\n\n assert.equal(runtimeResolver.templateCacheMisses, 0, 'misses 0');\n assert.equal(runtimeResolver.templateCacheHits, 0, 'hits 0');\n\n var precompiled = runtimeResolver.createTemplate(Precompiled, owner);\n\n assert.equal(runtimeResolver.templateCacheMisses, 1, 'misses 1');\n assert.equal(runtimeResolver.templateCacheHits, 0, 'hits 0');\n\n var compiled = runtimeResolver.createTemplate(Compiled, owner);\n\n assert.equal(runtimeResolver.templateCacheMisses, 2, 'misses 2');\n assert.equal(runtimeResolver.templateCacheHits, 0, 'hits 0');\n\n assert.ok(typeof precompiled.spec !== 'string', 'Spec has been parsed');\n assert.ok(typeof compiled.spec !== 'string', 'Spec has been parsed');\n\n this.registerComponent('x-precompiled', {\n ComponentClass: _helpers.Component.extend({\n layout: Precompiled\n })\n });\n\n this.registerComponent('x-compiled', {\n ComponentClass: _helpers.Component.extend({\n layout: Compiled\n })\n });\n\n this.render('{{x-precompiled name=\"precompiled\"}} {{x-compiled name=\"compiled\"}}');\n\n assert.equal(runtimeResolver.templateCacheMisses, 2, 'misses 2');\n assert.equal(runtimeResolver.templateCacheHits, 2, 'hits 2');\n\n this.assertText('Hello precompiled Hello compiled');\n };\n\n return _class;\n }(_testCase.RenderingTest));\n});","enifed('ember-glimmer/tests/unit/utils/debug-stack-test', ['ember-babel', 'ember-glimmer', 'internal-test-helpers'], function (_emberBabel, _emberGlimmer, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Glimmer DebugStack', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test pushing and popping'] = function (assert) {\n assert.expect(0);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-glimmer/tests/utils/abstract-test-case', ['exports', 'internal-test-helpers'], function (exports, _internalTestHelpers) {\n 'use strict';\n\n Object.defineProperty(exports, 'TestCase', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.AbstractTestCase;\n }\n });\n Object.defineProperty(exports, 'applyMixins', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.applyMixins;\n }\n });\n Object.defineProperty(exports, 'strip', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.strip;\n }\n });\n});","enifed('ember-glimmer/tests/utils/helpers', ['exports', 'ember-template-compiler', 'ember-glimmer'], function (exports, _emberTemplateCompiler, _emberGlimmer) {\n 'use strict';\n\n Object.defineProperty(exports, 'compile', {\n enumerable: true,\n get: function () {\n return _emberTemplateCompiler.compile;\n }\n });\n Object.defineProperty(exports, 'precompile', {\n enumerable: true,\n get: function () {\n return _emberTemplateCompiler.precompile;\n }\n });\n Object.defineProperty(exports, 'INVOKE', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.INVOKE;\n }\n });\n Object.defineProperty(exports, 'Helper', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.Helper;\n }\n });\n Object.defineProperty(exports, 'helper', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.helper;\n }\n });\n Object.defineProperty(exports, 'Component', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.Component;\n }\n });\n Object.defineProperty(exports, 'LinkComponent', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.LinkComponent;\n }\n });\n Object.defineProperty(exports, 'InteractiveRenderer', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.InteractiveRenderer;\n }\n });\n Object.defineProperty(exports, 'InertRenderer', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.InertRenderer;\n }\n });\n Object.defineProperty(exports, 'htmlSafe', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.htmlSafe;\n }\n });\n Object.defineProperty(exports, 'SafeString', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.SafeString;\n }\n });\n Object.defineProperty(exports, 'DOMChanges', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.DOMChanges;\n }\n });\n Object.defineProperty(exports, 'isHTMLSafe', {\n enumerable: true,\n get: function () {\n return _emberGlimmer.isHTMLSafe;\n }\n });\n});","enifed('ember-glimmer/tests/utils/shared-conditional-tests', ['exports', 'ember-babel', '@ember/polyfills', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer/tests/utils/test-case', 'ember-metal', 'ember-runtime', 'ember-glimmer/tests/utils/helpers'], function (exports, _emberBabel, _polyfills, _abstractTestCase, _testCase, _emberMetal, _emberRuntime, _helpers) {\n 'use strict';\n\n exports.IfUnlessWithSyntaxTest = exports.TogglingSyntaxConditionalsTest = exports.IfUnlessHelperTest = exports.TogglingHelperConditionalsTest = exports.TogglingConditionalsTest = exports.ArrayTestCases = exports.ObjectTestCases = exports.BasicConditionalsTest = exports.StableFalsyGenerator = exports.StableTruthyGenerator = exports.FalsyGenerator = exports.TruthyGenerator = undefined;\n\n var _ObjectTestCases, _ArrayTestCases;\n\n var AbstractConditionalsTest = function (_RenderingTest) {\n (0, _emberBabel.inherits)(AbstractConditionalsTest, _RenderingTest);\n\n function AbstractConditionalsTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTest.apply(this, arguments));\n }\n\n AbstractConditionalsTest.prototype.wrapperFor = function (templates) {\n return templates.join('');\n };\n\n AbstractConditionalsTest.prototype.wrappedTemplateFor = function (options) {\n return this.wrapperFor([this.templateFor(options)]);\n };\n\n AbstractConditionalsTest.prototype.templateFor = function () /* { cond, truthy, falsy } */{\n // e.g. `{{#if ${cond}}}${truthy}{{else}}${falsy}{{/if}}`\n throw new Error('Not implemented: `templateFor`');\n };\n\n AbstractConditionalsTest.prototype.renderValues = function () /* ...values */{\n throw new Error('Not implemented: `renderValues`');\n };\n\n (0, _emberBabel.createClass)(AbstractConditionalsTest, [{\n key: 'truthyValue',\n get: function () {\n return true;\n }\n }, {\n key: 'falsyValue',\n get: function () {\n return false;\n }\n }]);\n return AbstractConditionalsTest;\n }(_testCase.RenderingTest);\n\n var AbstractGenerator = function () {\n function AbstractGenerator(cases) {\n\n this.cases = cases;\n }\n\n /* abstract */\n\n AbstractGenerator.prototype.generate = function () /* value, idx */{\n throw new Error('Not implemented: `generate`');\n };\n\n return AbstractGenerator;\n }();\n\n var TruthyGenerator = exports.TruthyGenerator = function (_AbstractGenerator) {\n (0, _emberBabel.inherits)(TruthyGenerator, _AbstractGenerator);\n\n function TruthyGenerator() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractGenerator.apply(this, arguments));\n }\n\n TruthyGenerator.prototype.generate = function (value, idx) {\n var _ref;\n\n return _ref = {}, _ref['@test it should consider ' + JSON.stringify(value) + ' truthy [' + idx + ']'] = function () {\n var _this3 = this;\n\n this.renderValues(value);\n\n this.assertText('T1');\n\n this.runTask(function () {\n return _this3.rerender();\n });\n\n this.assertText('T1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'cond1', _this3.falsyValue);\n });\n\n this.assertText('F1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this3.context, 'cond1', value);\n });\n\n this.assertText('T1');\n }, _ref;\n };\n\n return TruthyGenerator;\n }(AbstractGenerator);\n\n var FalsyGenerator = exports.FalsyGenerator = function (_AbstractGenerator2) {\n (0, _emberBabel.inherits)(FalsyGenerator, _AbstractGenerator2);\n\n function FalsyGenerator() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractGenerator2.apply(this, arguments));\n }\n\n FalsyGenerator.prototype.generate = function (value, idx) {\n var _ref2;\n\n return _ref2 = {}, _ref2['@test it should consider ' + JSON.stringify(value) + ' falsy [' + idx + ']'] = function () {\n var _this5 = this;\n\n this.renderValues(value);\n\n this.assertText('F1');\n\n this.runTask(function () {\n return _this5.rerender();\n });\n\n this.assertText('F1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'cond1', _this5.truthyValue);\n });\n\n this.assertText('T1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this5.context, 'cond1', value);\n });\n\n this.assertText('F1');\n }, _ref2;\n };\n\n return FalsyGenerator;\n }(AbstractGenerator);\n\n var StableTruthyGenerator = exports.StableTruthyGenerator = function (_TruthyGenerator) {\n (0, _emberBabel.inherits)(StableTruthyGenerator, _TruthyGenerator);\n\n function StableTruthyGenerator() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TruthyGenerator.apply(this, arguments));\n }\n\n StableTruthyGenerator.prototype.generate = function (value, idx) {\n var _assign;\n\n return (0, _polyfills.assign)(_TruthyGenerator.prototype.generate.call(this, value, idx), (_assign = {}, _assign['@test it maintains DOM stability when condition changes from ' + value + ' to another truthy value and back [' + idx + ']'] = function () {\n var _this7 = this;\n\n this.renderValues(value);\n\n this.assertText('T1');\n\n this.takeSnapshot();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'cond1', _this7.truthyValue);\n });\n\n this.assertText('T1');\n\n this.assertInvariants();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this7.context, 'cond1', value);\n });\n\n this.assertText('T1');\n\n this.assertInvariants();\n }, _assign));\n };\n\n return StableTruthyGenerator;\n }(TruthyGenerator);\n\n var StableFalsyGenerator = exports.StableFalsyGenerator = function (_FalsyGenerator) {\n (0, _emberBabel.inherits)(StableFalsyGenerator, _FalsyGenerator);\n\n function StableFalsyGenerator() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _FalsyGenerator.apply(this, arguments));\n }\n\n StableFalsyGenerator.prototype.generate = function (value, idx) {\n var _assign2;\n\n return (0, _polyfills.assign)(_FalsyGenerator.prototype.generate.call(this, value), (_assign2 = {}, _assign2['@test it maintains DOM stability when condition changes from ' + value + ' to another falsy value and back [' + idx + ']'] = function () {\n var _this9 = this;\n\n this.renderValues(value);\n\n this.assertText('F1');\n\n this.takeSnapshot();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'cond1', _this9.falsyValue);\n });\n\n this.assertText('F1');\n\n this.assertInvariants();\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this9.context, 'cond1', value);\n });\n\n this.assertText('F1');\n\n this.assertInvariants();\n }, _assign2));\n };\n\n return StableFalsyGenerator;\n }(FalsyGenerator);\n\n var ObjectProxyGenerator = function (_AbstractGenerator3) {\n (0, _emberBabel.inherits)(ObjectProxyGenerator, _AbstractGenerator3);\n\n function ObjectProxyGenerator() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractGenerator3.apply(this, arguments));\n }\n\n ObjectProxyGenerator.prototype.generate = function (value, idx) {\n var _ref3, _ref4;\n\n // This is inconsistent with our usual to-bool policy, but the current proxy implementation\n // simply uses !!content to determine truthiness\n if (value) {\n\n return _ref3 = {}, _ref3['@test it should consider an object proxy with `' + JSON.stringify(value) + '` truthy [' + idx + ']'] = function () {\n var _this11 = this;\n\n this.renderValues(_emberRuntime.ObjectProxy.create({ content: value }));\n\n this.assertText('T1');\n\n this.runTask(function () {\n return _this11.rerender();\n });\n\n this.assertText('T1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'cond1.content', _this11.falsyValue);\n });\n\n this.assertText('F1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this11.context, 'cond1', _emberRuntime.ObjectProxy.create({ content: value }));\n });\n\n this.assertText('T1');\n }, _ref3;\n } else {\n\n return _ref4 = {}, _ref4['@test it should consider an object proxy with `' + JSON.stringify(value) + '` falsy [' + idx + ']'] = function () {\n var _this12 = this;\n\n this.renderValues(_emberRuntime.ObjectProxy.create({ content: value }));\n\n this.assertText('F1');\n\n this.runTask(function () {\n return _this12.rerender();\n });\n\n this.assertText('F1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'cond1.content', _this12.truthyValue);\n });\n\n this.assertText('T1');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this12.context, 'cond1', _emberRuntime.ObjectProxy.create({ content: value }));\n });\n\n this.assertText('F1');\n }, _ref4;\n }\n };\n\n return ObjectProxyGenerator;\n }(AbstractGenerator);\n\n var BasicConditionalsTest = exports.BasicConditionalsTest = function (_AbstractConditionals) {\n (0, _emberBabel.inherits)(BasicConditionalsTest, _AbstractConditionals);\n\n function BasicConditionalsTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractConditionals.apply(this, arguments));\n }\n\n BasicConditionalsTest.prototype['@test it renders the corresponding block based on the conditional'] = function () {\n var _this14 = this;\n\n this.renderValues(this.truthyValue, this.falsyValue);\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return _this14.rerender();\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this14.context, 'cond1', _this14.falsyValue);\n });\n\n this.assertText('F1F2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this14.context, 'cond1', _this14.truthyValue);\n (0, _emberMetal.set)(_this14.context, 'cond2', _this14.truthyValue);\n });\n\n this.assertText('T1T2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this14.context, 'cond1', _this14.truthyValue);\n (0, _emberMetal.set)(_this14.context, 'cond2', _this14.falsyValue);\n });\n\n this.assertText('T1F2');\n };\n\n return BasicConditionalsTest;\n }(AbstractConditionalsTest);\n\n // Testing behaviors related to ember objects, object proxies, etc\n var ObjectTestCases = exports.ObjectTestCases = (_ObjectTestCases = {}, _ObjectTestCases['@test it considers object proxies without content falsy'] = function () {\n var _this15 = this;\n\n this.renderValues(_emberRuntime.ObjectProxy.create({ content: {} }), _emberRuntime.ObjectProxy.create({ content: _emberRuntime.Object.create() }), _emberRuntime.ObjectProxy.create({ content: null }));\n\n this.assertText('T1T2F3');\n\n this.runTask(function () {\n return _this15.rerender();\n });\n\n this.assertText('T1T2F3');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this15.context, 'cond1.content', null);\n (0, _emberMetal.set)(_this15.context, 'cond2.content', null);\n });\n\n this.assertText('F1F2F3');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this15.context, 'cond1.content', _emberRuntime.Object.create());\n (0, _emberMetal.set)(_this15.context, 'cond2.content', {});\n (0, _emberMetal.set)(_this15.context, 'cond3.content', { foo: 'bar' });\n });\n\n this.assertText('T1T2T3');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this15.context, 'cond1', _emberRuntime.ObjectProxy.create({ content: {} }));\n (0, _emberMetal.set)(_this15.context, 'cond2', _emberRuntime.ObjectProxy.create({ content: _emberRuntime.Object.create() }));\n (0, _emberMetal.set)(_this15.context, 'cond3', _emberRuntime.ObjectProxy.create({ content: null }));\n });\n\n this.assertText('T1T2F3');\n }, _ObjectTestCases);\n\n // Testing behaviors related to arrays and array proxies\n var ArrayTestCases = exports.ArrayTestCases = (_ArrayTestCases = {}, _ArrayTestCases['@test it considers empty arrays falsy'] = function () {\n var _this16 = this;\n\n this.renderValues((0, _emberRuntime.A)(['hello']), (0, _emberRuntime.A)());\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return _this16.rerender();\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return (0, _emberRuntime.removeAt)((0, _emberMetal.get)(_this16.context, 'cond1'), 0);\n });\n\n this.assertText('F1F2');\n\n this.runTask(function () {\n (0, _emberMetal.get)(_this16.context, 'cond1').pushObject('hello');\n (0, _emberMetal.get)(_this16.context, 'cond2').pushObjects([1]);\n });\n\n this.assertText('T1T2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this16.context, 'cond1', (0, _emberRuntime.A)(['hello']));\n (0, _emberMetal.set)(_this16.context, 'cond2', (0, _emberRuntime.A)());\n });\n\n this.assertText('T1F2');\n }, _ArrayTestCases['@test it considers array proxies without content falsy'] = function () {\n var _this17 = this;\n\n this.renderValues(_emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)(['hello']) }), _emberRuntime.ArrayProxy.create({ content: null }));\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return _this17.rerender();\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this17.context, 'cond1.content', null);\n (0, _emberMetal.set)(_this17.context, 'cond2.content', null);\n });\n\n this.assertText('F1F2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this17.context, 'cond1.content', (0, _emberRuntime.A)(['hello']));\n (0, _emberMetal.set)(_this17.context, 'cond2.content', (0, _emberRuntime.A)([1]));\n });\n\n this.assertText('T1T2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this17.context, 'cond1', _emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)(['hello']) }));\n (0, _emberMetal.set)(_this17.context, 'cond2', _emberRuntime.ArrayProxy.create({ content: null }));\n });\n\n this.assertText('T1F2');\n }, _ArrayTestCases['@test it considers array proxies with empty arrays falsy'] = function () {\n var _this18 = this;\n\n this.renderValues(_emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)(['hello']) }), _emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)() }));\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return _this18.rerender();\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return (0, _emberRuntime.removeAt)((0, _emberMetal.get)(_this18.context, 'cond1.content'), 0);\n });\n\n this.assertText('F1F2');\n\n this.runTask(function () {\n (0, _emberMetal.get)(_this18.context, 'cond1.content').pushObject('hello');\n (0, _emberMetal.get)(_this18.context, 'cond2.content').pushObjects([1]);\n });\n\n this.assertText('T1T2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this18.context, 'cond1', _emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)(['hello']) }));\n (0, _emberMetal.set)(_this18.context, 'cond2', _emberRuntime.ArrayProxy.create({ content: (0, _emberRuntime.A)() }));\n });\n\n this.assertText('T1F2');\n }, _ArrayTestCases);\n\n var IfUnlessWithTestCases = [new StableTruthyGenerator([true, ' ', 'hello', 'false', 'null', 'undefined', 1, ['hello'], (0, _emberRuntime.A)(['hello']), {}, { foo: 'bar' }, _emberRuntime.Object.create(), _emberRuntime.Object.create({ foo: 'bar' }), _emberRuntime.ObjectProxy.create({ content: true }), Object, function () {},\n /*jshint -W053 */\n new String('hello'), new String(''), new Boolean(true), new Boolean(false),\n /*jshint +W053 */\n new Date()]), new StableFalsyGenerator([false, null, undefined, '', 0, [], (0, _emberRuntime.A)(), _emberRuntime.ObjectProxy.create({ content: undefined })]), new ObjectProxyGenerator([true, ' ', 'hello', 'false', 'null', 'undefined', 1, ['hello'], (0, _emberRuntime.A)(['hello']), _emberRuntime.ArrayProxy.create({ content: ['hello'] }), _emberRuntime.ArrayProxy.create({ content: [] }), {}, { foo: 'bar' }, _emberRuntime.Object.create(), _emberRuntime.Object.create({ foo: 'bar' }), _emberRuntime.ObjectProxy.create({ content: true }), _emberRuntime.ObjectProxy.create({ content: undefined }),\n /*jshint -W053 */\n new String('hello'), new String(''), new Boolean(true), new Boolean(false),\n /*jshint +W053 */\n new Date(), false, null, undefined, '', 0, [], (0, _emberRuntime.A)()]), ObjectTestCases, ArrayTestCases];\n\n // Testing behaviors shared across the \"toggling\" conditionals, i.e. {{#if}},\n // {{#unless}}, {{#with}}, {{#each}}, {{#each-in}}, (if) and (unless)\n\n var TogglingConditionalsTest = exports.TogglingConditionalsTest = function (_BasicConditionalsTes) {\n (0, _emberBabel.inherits)(TogglingConditionalsTest, _BasicConditionalsTes);\n\n function TogglingConditionalsTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _BasicConditionalsTes.apply(this, arguments));\n }\n\n return TogglingConditionalsTest;\n }(BasicConditionalsTest);\n\n var TogglingHelperConditionalsTest = exports.TogglingHelperConditionalsTest = function (_TogglingConditionals) {\n (0, _emberBabel.inherits)(TogglingHelperConditionalsTest, _TogglingConditionals);\n\n function TogglingHelperConditionalsTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingConditionals.apply(this, arguments));\n }\n\n TogglingHelperConditionalsTest.prototype.renderValues = function () {\n var templates = [],\n i;\n var context = {};\n\n for (i = 1; i <= arguments.length; i++) {\n templates.push(this.templateFor({ cond: 'cond' + i, truthy: 't' + i, falsy: 'f' + i }));\n context['t' + i] = 'T' + i;\n context['f' + i] = 'F' + i;\n context['cond' + i] = arguments.length <= i - 1 ? undefined : arguments[i - 1];\n }\n\n var wrappedTemplate = this.wrapperFor(templates);\n this.render(wrappedTemplate, context);\n };\n\n TogglingHelperConditionalsTest.prototype['@test it has access to the outer scope from both templates'] = function () {\n var _this21 = this;\n\n var template = this.wrapperFor([this.templateFor({ cond: 'cond1', truthy: 'truthy', falsy: 'falsy' }), this.templateFor({ cond: 'cond2', truthy: 'truthy', falsy: 'falsy' })]);\n\n this.render(template, {\n cond1: this.truthyValue,\n cond2: this.falsyValue,\n truthy: 'YES',\n falsy: 'NO'\n });\n\n this.assertText('YESNO');\n\n this.runTask(function () {\n return _this21.rerender();\n });\n\n this.assertText('YESNO');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this21.context, 'truthy', 'YASS');\n (0, _emberMetal.set)(_this21.context, 'falsy', 'NOPE');\n });\n\n this.assertText('YASSNOPE');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this21.context, 'cond1', _this21.falsyValue);\n (0, _emberMetal.set)(_this21.context, 'cond2', _this21.truthyValue);\n });\n\n this.assertText('NOPEYASS');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this21.context, 'truthy', 'YES');\n (0, _emberMetal.set)(_this21.context, 'falsy', 'NO');\n (0, _emberMetal.set)(_this21.context, 'cond1', _this21.truthyValue);\n (0, _emberMetal.set)(_this21.context, 'cond2', _this21.falsyValue);\n });\n\n this.assertText('YESNO');\n };\n\n TogglingHelperConditionalsTest.prototype['@test it does not update when the unbound helper is used'] = function () {\n var _this22 = this;\n\n var template = this.wrapperFor([this.templateFor({\n cond: '(unbound cond1)',\n truthy: '\"T1\"',\n falsy: '\"F1\"'\n }), this.templateFor({\n cond: '(unbound cond2)',\n truthy: '\"T2\"',\n falsy: '\"F2\"'\n })]);\n\n this.render(template, { cond1: this.truthyValue, cond2: this.falsyValue });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return _this22.rerender();\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this22.context, 'cond1', _this22.falsyValue);\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this22.context, 'cond1', _this22.truthyValue);\n (0, _emberMetal.set)(_this22.context, 'cond2', _this22.truthyValue);\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this22.context, 'cond1', _this22.truthyValue);\n (0, _emberMetal.set)(_this22.context, 'cond2', _this22.falsyValue);\n });\n\n this.assertText('T1F2');\n };\n\n TogglingHelperConditionalsTest.prototype['@test evaluation should be lazy'] = function (assert) {\n var _this23 = this;\n\n var truthyEvaluated = void 0;\n var falsyEvaluated = void 0;\n\n var withoutEvaluatingTruthy = function (callback) {\n truthyEvaluated = false;\n callback();\n assert.ok(!truthyEvaluated, 'x-truthy is not evaluated');\n };\n\n var withoutEvaluatingFalsy = function (callback) {\n falsyEvaluated = false;\n callback();\n assert.ok(!falsyEvaluated, 'x-falsy is not evaluated');\n };\n\n this.registerHelper('x-truthy', {\n compute: function () {\n truthyEvaluated = true;\n return 'T';\n }\n });\n\n this.registerHelper('x-falsy', {\n compute: function () {\n falsyEvaluated = true;\n return 'F';\n }\n });\n\n var template = this.wrappedTemplateFor({\n cond: 'cond',\n truthy: '(x-truthy)',\n falsy: '(x-falsy)'\n });\n\n withoutEvaluatingFalsy(function () {\n return _this23.render(template, { cond: _this23.truthyValue });\n });\n\n this.assertText('T');\n\n withoutEvaluatingFalsy(function () {\n return _this23.runTask(function () {\n return _this23.rerender();\n });\n });\n\n this.assertText('T');\n\n withoutEvaluatingTruthy(function () {\n return _this23.runTask(function () {\n return (0, _emberMetal.set)(_this23.context, 'cond', _this23.falsyValue);\n });\n });\n\n this.assertText('F');\n\n withoutEvaluatingTruthy(function () {\n return _this23.runTask(function () {\n return _this23.rerender();\n });\n });\n\n this.assertText('F');\n\n withoutEvaluatingFalsy(function () {\n return _this23.runTask(function () {\n return (0, _emberMetal.set)(_this23.context, 'cond', _this23.truthyValue);\n });\n });\n\n this.assertText('T');\n };\n\n return TogglingHelperConditionalsTest;\n }(TogglingConditionalsTest);\n\n var IfUnlessHelperTest = exports.IfUnlessHelperTest = function (_TogglingHelperCondit) {\n (0, _emberBabel.inherits)(IfUnlessHelperTest, _TogglingHelperCondit);\n\n function IfUnlessHelperTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingHelperCondit.apply(this, arguments));\n }\n\n return IfUnlessHelperTest;\n }(TogglingHelperConditionalsTest);\n\n _abstractTestCase.applyMixins.apply(undefined, [IfUnlessHelperTest].concat(IfUnlessWithTestCases));\n\n // Testing behaviors shared across the \"toggling\" syntatical constructs,\n // i.e. {{#if}}, {{#unless}}, {{#with}}, {{#each}} and {{#each-in}}\n\n var TogglingSyntaxConditionalsTest = exports.TogglingSyntaxConditionalsTest = function (_TogglingConditionals2) {\n (0, _emberBabel.inherits)(TogglingSyntaxConditionalsTest, _TogglingConditionals2);\n\n function TogglingSyntaxConditionalsTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingConditionals2.apply(this, arguments));\n }\n\n TogglingSyntaxConditionalsTest.prototype.renderValues = function () {\n var templates = [],\n i;\n var context = {};\n\n for (i = 1; i <= arguments.length; i++) {\n templates.push(this.templateFor({\n cond: 'cond' + i,\n truthy: '{{t}}' + i,\n falsy: '{{f}}' + i\n }));\n context['cond' + i] = arguments.length <= i - 1 ? undefined : arguments[i - 1];\n }\n\n var wrappedTemplate = this.wrapperFor(templates);\n this.render(wrappedTemplate, (0, _polyfills.assign)({ t: 'T', f: 'F' }, context));\n };\n\n TogglingSyntaxConditionalsTest.prototype['@test it does not update when the unbound helper is used'] = function () {\n var _this26 = this;\n\n var template = '' + this.templateFor({\n cond: '(unbound cond1)',\n truthy: 'T1',\n falsy: 'F1'\n }) + this.templateFor({\n cond: '(unbound cond2)',\n truthy: 'T2',\n falsy: 'F2'\n });\n\n this.render(template, { cond1: this.truthyValue, cond2: this.falsyValue });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return _this26.rerender();\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n return (0, _emberMetal.set)(_this26.context, 'cond1', _this26.falsyValue);\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this26.context, 'cond1', _this26.truthyValue);\n (0, _emberMetal.set)(_this26.context, 'cond2', _this26.truthyValue);\n });\n\n this.assertText('T1F2');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this26.context, 'cond1', _this26.truthyValue);\n (0, _emberMetal.set)(_this26.context, 'cond2', _this26.falsyValue);\n });\n\n this.assertText('T1F2');\n };\n\n TogglingSyntaxConditionalsTest.prototype['@test it has access to the outer scope from both templates'] = function () {\n var _this27 = this;\n\n var template = this.wrapperFor([this.templateFor({\n cond: 'cond1',\n truthy: '{{truthy}}',\n falsy: '{{falsy}}'\n }), this.templateFor({\n cond: 'cond2',\n truthy: '{{truthy}}',\n falsy: '{{falsy}}'\n })]);\n\n this.render(template, {\n cond1: this.truthyValue,\n cond2: this.falsyValue,\n truthy: 'YES',\n falsy: 'NO'\n });\n\n this.assertText('YESNO');\n\n this.runTask(function () {\n return _this27.rerender();\n });\n\n this.assertText('YESNO');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this27.context, 'truthy', 'YASS');\n (0, _emberMetal.set)(_this27.context, 'falsy', 'NOPE');\n });\n\n this.assertText('YASSNOPE');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this27.context, 'cond1', _this27.falsyValue);\n (0, _emberMetal.set)(_this27.context, 'cond2', _this27.truthyValue);\n });\n\n this.assertText('NOPEYASS');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this27.context, 'truthy', 'YES');\n (0, _emberMetal.set)(_this27.context, 'falsy', 'NO');\n (0, _emberMetal.set)(_this27.context, 'cond1', _this27.truthyValue);\n (0, _emberMetal.set)(_this27.context, 'cond2', _this27.falsyValue);\n });\n\n this.assertText('YESNO');\n };\n\n TogglingSyntaxConditionalsTest.prototype['@test it updates correctly when enclosing another conditional'] = function () {\n var _this28 = this;\n\n // This tests whether the outer conditional tracks its bounds correctly as its inner bounds changes\n var inner = this.templateFor({\n cond: 'inner',\n truthy: 'T-inner',\n falsy: 'F-inner'\n });\n var template = this.wrappedTemplateFor({\n cond: 'outer',\n truthy: inner,\n falsy: 'F-outer'\n });\n\n this.render(template, { outer: this.truthyValue, inner: this.truthyValue });\n\n this.assertText('T-inner');\n\n this.runTask(function () {\n return _this28.rerender();\n });\n\n this.assertText('T-inner');\n\n // Changes the inner bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this28.context, 'inner', _this28.falsyValue);\n });\n\n this.assertText('F-inner');\n\n // Now rerender the outer conditional, which require first clearing its bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this28.context, 'outer', _this28.falsyValue);\n });\n\n this.assertText('F-outer');\n };\n\n TogglingSyntaxConditionalsTest.prototype['@test it updates correctly when enclosing #each'] = function () {\n var _this29 = this;\n\n // This tests whether the outer conditional tracks its bounds correctly as its inner bounds changes\n var template = this.wrappedTemplateFor({\n cond: 'outer',\n truthy: '{{#each inner as |text|}}{{text}}{{/each}}',\n falsy: 'F-outer'\n });\n\n this.render(template, {\n outer: this.truthyValue,\n inner: ['inner', '-', 'before']\n });\n\n this.assertText('inner-before');\n\n this.runTask(function () {\n return _this29.rerender();\n });\n\n this.assertText('inner-before');\n\n // Changes the inner bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this29.context, 'inner', ['inner-after']);\n });\n\n this.assertText('inner-after');\n\n // Now rerender the outer conditional, which require first clearing its bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this29.context, 'outer', _this29.falsyValue);\n });\n\n this.assertText('F-outer');\n\n // Reset\n this.runTask(function () {\n (0, _emberMetal.set)(_this29.context, 'inner', ['inner-again']);\n (0, _emberMetal.set)(_this29.context, 'outer', _this29.truthyValue);\n });\n\n this.assertText('inner-again');\n\n // Now clear the inner bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this29.context, 'inner', []);\n });\n\n this.assertText('');\n\n // Now rerender the outer conditional, which require first clearing its bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this29.context, 'outer', _this29.falsyValue);\n });\n\n this.assertText('F-outer');\n };\n\n TogglingSyntaxConditionalsTest.prototype['@test it updates correctly when enclosing triple-curlies'] = function () {\n var _this30 = this;\n\n // This tests whether the outer conditional tracks its bounds correctly as its inner bounds changes\n var template = this.wrappedTemplateFor({\n cond: 'outer',\n truthy: '{{{inner}}}',\n falsy: 'F-outer'\n });\n\n this.render(template, {\n outer: this.truthyValue,\n inner: 'inner -before '\n });\n\n this.assertText('inner-before');\n\n this.runTask(function () {\n return _this30.rerender();\n });\n\n this.assertText('inner-before');\n\n // Changes the inner bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this30.context, 'inner', 'inner-after
');\n });\n\n this.assertText('inner-after');\n\n // Now rerender the outer conditional, which require first clearing its bounds\n this.runTask(function () {\n return (0, _emberMetal.set)(_this30.context, 'outer', _this30.falsyValue);\n });\n\n this.assertText('F-outer');\n };\n\n TogglingSyntaxConditionalsTest.prototype['@test child conditional should not render children if parent conditional becomes false'] = function (assert) {\n var _this31 = this;\n\n var childCreated = false;\n\n this.registerComponent('foo-bar', {\n template: 'foo-bar',\n ComponentClass: _helpers.Component.extend({\n init: function () {\n this._super.apply(this, arguments);\n childCreated = true;\n }\n })\n });\n\n var innerTemplate = this.templateFor({\n cond: 'cond2',\n truthy: '{{foo-bar}}',\n falsy: ''\n });\n var wrappedTemplate = this.wrappedTemplateFor({\n cond: 'cond1',\n truthy: innerTemplate,\n falsy: ''\n });\n\n this.render(wrappedTemplate, {\n cond1: this.truthyValue,\n cond2: this.falsyValue\n });\n\n assert.ok(!childCreated);\n this.assertText('');\n\n this.runTask(function () {\n return _this31.rerender();\n });\n\n assert.ok(!childCreated);\n this.assertText('');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this31.context, 'cond2', _this31.truthyValue);\n (0, _emberMetal.set)(_this31.context, 'cond1', _this31.falsyValue);\n });\n\n assert.ok(!childCreated);\n this.assertText('');\n\n this.runTask(function () {\n (0, _emberMetal.set)(_this31.context, 'cond2', _this31.falsyValue);\n (0, _emberMetal.set)(_this31.context, 'cond1', _this31.truthyValue);\n });\n\n assert.ok(!childCreated);\n this.assertText('');\n };\n\n TogglingSyntaxConditionalsTest.prototype['@test evaluation should be lazy'] = function (assert) {\n var _this32 = this;\n\n var truthyEvaluated = void 0;\n var falsyEvaluated = void 0;\n\n var withoutEvaluatingTruthy = function (callback) {\n truthyEvaluated = false;\n callback();\n assert.ok(!truthyEvaluated, 'x-truthy is not evaluated');\n };\n\n var withoutEvaluatingFalsy = function (callback) {\n falsyEvaluated = false;\n callback();\n assert.ok(!falsyEvaluated, 'x-falsy is not evaluated');\n };\n\n this.registerHelper('x-truthy', {\n compute: function () {\n truthyEvaluated = true;\n return 'T';\n }\n });\n\n this.registerHelper('x-falsy', {\n compute: function () {\n falsyEvaluated = true;\n return 'F';\n }\n });\n\n var template = this.wrappedTemplateFor({\n cond: 'cond',\n truthy: '{{x-truthy}}',\n falsy: '{{x-falsy}}'\n });\n\n withoutEvaluatingFalsy(function () {\n return _this32.render(template, { cond: _this32.truthyValue });\n });\n\n this.assertText('T');\n\n withoutEvaluatingFalsy(function () {\n return _this32.runTask(function () {\n return _this32.rerender();\n });\n });\n\n this.assertText('T');\n\n withoutEvaluatingTruthy(function () {\n return _this32.runTask(function () {\n return (0, _emberMetal.set)(_this32.context, 'cond', _this32.falsyValue);\n });\n });\n\n this.assertText('F');\n\n withoutEvaluatingTruthy(function () {\n return _this32.runTask(function () {\n return _this32.rerender();\n });\n });\n\n this.assertText('F');\n\n withoutEvaluatingFalsy(function () {\n return _this32.runTask(function () {\n return (0, _emberMetal.set)(_this32.context, 'cond', _this32.truthyValue);\n });\n });\n\n this.assertText('T');\n };\n\n return TogglingSyntaxConditionalsTest;\n }(TogglingConditionalsTest);\n\n var IfUnlessWithSyntaxTest = exports.IfUnlessWithSyntaxTest = function (_TogglingSyntaxCondit) {\n (0, _emberBabel.inherits)(IfUnlessWithSyntaxTest, _TogglingSyntaxCondit);\n\n function IfUnlessWithSyntaxTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TogglingSyntaxCondit.apply(this, arguments));\n }\n\n return IfUnlessWithSyntaxTest;\n }(TogglingSyntaxConditionalsTest);\n\n _abstractTestCase.applyMixins.apply(undefined, [IfUnlessWithSyntaxTest].concat(IfUnlessWithTestCases));\n});","enifed('ember-glimmer/tests/utils/string-test', ['ember-babel', 'ember-glimmer/tests/utils/helpers', 'ember-glimmer/tests/utils/abstract-test-case', 'ember-glimmer/tests/utils/test-case'], function (_emberBabel, _helpers, _abstractTestCase, _testCase) {\n 'use strict';\n\n (0, _testCase.moduleFor)('SafeString', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test htmlSafe should return an instance of SafeString'] = function () {\n var safeString = (0, _helpers.htmlSafe)('you need to be more bold ');\n\n this.assert.ok(safeString instanceof _helpers.SafeString, 'should be a SafeString');\n };\n\n _class.prototype['@test htmlSafe should return an empty string for null'] = function () {\n var safeString = (0, _helpers.htmlSafe)(null);\n\n this.assert.equal(safeString instanceof _helpers.SafeString, true, 'should be a SafeString');\n this.assert.equal(safeString.toString(), '', 'should return an empty string');\n };\n\n _class.prototype['@test htmlSafe should return an instance of SafeString'] = function () {\n var safeString = (0, _helpers.htmlSafe)();\n\n this.assert.equal(safeString instanceof _helpers.SafeString, true, 'should be a SafeString');\n this.assert.equal(safeString.toString(), '', 'should return an empty string');\n };\n\n return _class;\n }(_abstractTestCase.TestCase));\n\n (0, _testCase.moduleFor)('SafeString isHTMLSafe', function (_TestCase2) {\n (0, _emberBabel.inherits)(_class2, _TestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test isHTMLSafe should detect SafeString'] = function () {\n var safeString = (0, _helpers.htmlSafe)('Emphasize the important things.');\n\n this.assert.ok((0, _helpers.isHTMLSafe)(safeString));\n };\n\n _class2.prototype['@test isHTMLSafe should not detect SafeString on primatives'] = function () {\n this.assert.notOk((0, _helpers.isHTMLSafe)('Hello World'));\n this.assert.notOk((0, _helpers.isHTMLSafe)({}));\n this.assert.notOk((0, _helpers.isHTMLSafe)([]));\n this.assert.notOk((0, _helpers.isHTMLSafe)(10));\n this.assert.notOk((0, _helpers.isHTMLSafe)(null));\n };\n\n return _class2;\n }(_abstractTestCase.TestCase));\n});","enifed('ember-glimmer/tests/utils/test-case', ['exports', 'internal-test-helpers'], function (exports, _internalTestHelpers) {\n 'use strict';\n\n Object.defineProperty(exports, 'TestCase', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.AbstractTestCase;\n }\n });\n Object.defineProperty(exports, 'ApplicationTest', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.ApplicationTestCase;\n }\n });\n Object.defineProperty(exports, 'RenderingTest', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.RenderingTestCase;\n }\n });\n Object.defineProperty(exports, 'moduleFor', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.moduleFor;\n }\n });\n});","enifed('ember-glimmer/tests/utils/test-helpers', ['exports', 'internal-test-helpers'], function (exports, _internalTestHelpers) {\n 'use strict';\n\n Object.defineProperty(exports, 'styles', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.styles;\n }\n });\n Object.defineProperty(exports, 'classes', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.classes;\n }\n });\n Object.defineProperty(exports, 'equalTokens', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.equalTokens;\n }\n });\n Object.defineProperty(exports, 'equalsElement', {\n enumerable: true,\n get: function () {\n return _internalTestHelpers.equalsElement;\n }\n });\n});","enifed('ember-meta/tests/meta_test', ['ember-babel', 'internal-test-helpers', 'ember-meta'], function (_emberBabel, _internalTestHelpers, _emberMeta) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.meta', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should return the same hash for an object'] = function (assert) {\n var obj = {};\n\n (0, _emberMeta.meta)(obj).foo = 'bar';\n\n assert.equal((0, _emberMeta.meta)(obj).foo, 'bar', 'returns same hash with multiple calls to Ember.meta()');\n };\n\n _class.prototype['@test meta is not enumerable'] = function (assert) {\n var proto = void 0,\n obj = void 0,\n props = void 0,\n prop = void 0;\n proto = { foo: 'bar' };\n (0, _emberMeta.meta)(proto);\n obj = Object.create(proto);\n (0, _emberMeta.meta)(obj);\n obj.bar = 'baz';\n props = [];\n for (prop in obj) {\n props.push(prop);\n }\n assert.deepEqual(props.sort(), ['bar', 'foo']);\n if (typeof JSON !== 'undefined' && 'stringify' in JSON) {\n try {\n JSON.stringify(obj);\n } catch (e) {\n assert.ok(false, 'meta should not fail JSON.stringify');\n }\n }\n };\n\n _class.prototype['@test meta.listeners basics'] = function (assert) {\n var t = {};\n var m = (0, _emberMeta.meta)({});\n m.addToListeners('hello', t, 'm', 0);\n var matching = m.matchingListeners('hello');\n assert.equal(matching.length, 3);\n assert.equal(matching[0], t);\n m.removeFromListeners('hello', t, 'm');\n matching = m.matchingListeners('hello');\n assert.equal(matching, undefined);\n };\n\n _class.prototype['@test meta.listeners inheritance'] = function (assert) {\n var target = {};\n var parent = {};\n var parentMeta = (0, _emberMeta.meta)(parent);\n parentMeta.addToListeners('hello', target, 'm', 0);\n\n var child = Object.create(parent);\n var m = (0, _emberMeta.meta)(child);\n\n var matching = m.matchingListeners('hello');\n assert.equal(matching.length, 3);\n assert.equal(matching[0], target);\n assert.equal(matching[1], 'm');\n assert.equal(matching[2], 0);\n m.removeFromListeners('hello', target, 'm');\n matching = m.matchingListeners('hello');\n assert.equal(matching, undefined);\n matching = parentMeta.matchingListeners('hello');\n assert.equal(matching.length, 3);\n };\n\n _class.prototype['@test meta.listeners deduplication'] = function (assert) {\n var t = {};\n var m = (0, _emberMeta.meta)({});\n m.addToListeners('hello', t, 'm', 0);\n m.addToListeners('hello', t, 'm', 0);\n var matching = m.matchingListeners('hello');\n assert.equal(matching.length, 3);\n assert.equal(matching[0], t);\n };\n\n _class.prototype['@test meta.writeWatching issues useful error after destroy'] = function () {\n var targetMeta = (0, _emberMeta.meta)({\n toString: function () {\n return '';\n }\n });\n\n targetMeta.destroy();\n\n expectAssertion(function () {\n targetMeta.writeWatching('hello', 1);\n }, 'Cannot update watchers for `hello` on `` after it has been destroyed.');\n };\n\n _class.prototype['@test meta.writableTag issues useful error after destroy'] = function () {\n var targetMeta = (0, _emberMeta.meta)({\n toString: function () {\n return '';\n }\n });\n\n targetMeta.destroy();\n\n expectAssertion(function () {\n targetMeta.writableTag(function () {});\n }, 'Cannot create a new tag for `` after it has been destroyed.');\n };\n\n _class.prototype['@test meta.writableChainWatchers issues useful error after destroy'] = function () {\n var targetMeta = (0, _emberMeta.meta)({\n toString: function () {\n return '';\n }\n });\n\n targetMeta.destroy();\n\n expectAssertion(function () {\n targetMeta.writableChainWatchers(function () {});\n }, 'Cannot create a new chain watcher for `` after it has been destroyed.');\n };\n\n _class.prototype['@test meta.writableChains issues useful error after destroy'] = function () {\n var targetMeta = (0, _emberMeta.meta)({\n toString: function () {\n return '';\n }\n });\n\n targetMeta.destroy();\n\n expectAssertion(function () {\n targetMeta.writableChains(function () {});\n }, 'Cannot create a new chains for `` after it has been destroyed.');\n };\n\n _class.prototype['@test meta.writeValues issues useful error after destroy'] = function () {\n var targetMeta = (0, _emberMeta.meta)({\n toString: function () {\n return '';\n }\n });\n\n targetMeta.destroy();\n\n expectAssertion(function () {\n targetMeta.writeValues('derp', 'ohai');\n }, 'Cannot set the value of `derp` on `` after it has been destroyed.');\n };\n\n _class.prototype['@test meta.writeDeps issues useful error after destroy'] = function () {\n var targetMeta = (0, _emberMeta.meta)({\n toString: function () {\n return '';\n }\n });\n\n targetMeta.destroy();\n\n expectAssertion(function () {\n targetMeta.writeDeps('derp', 'ohai', 1);\n }, 'Cannot modify dependent keys for `ohai` on `` after it has been destroyed.');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/accessors/get_path_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var obj = void 0;\n\n (0, _internalTestHelpers.moduleFor)('get with path', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n obj = {\n foo: {\n bar: {\n baz: { biff: 'BIFF' }\n }\n },\n foothis: {\n bar: {\n baz: { biff: 'BIFF' }\n }\n },\n falseValue: false,\n emptyString: '',\n Wuz: {\n nar: 'foo'\n },\n nullValue: null\n };\n return _this;\n }\n\n _class.prototype.teardown = function () {\n obj = undefined;\n };\n\n _class.prototype['@test [obj, foo] -> obj.foo'] = function (assert) {\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), obj.foo);\n };\n\n _class.prototype['@test [obj, foo.bar] -> obj.foo.bar'] = function (assert) {\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo.bar'), obj.foo.bar);\n };\n\n _class.prototype['@test [obj, foothis.bar] -> obj.foothis.bar'] = function (assert) {\n assert.deepEqual((0, _emberMetal.get)(obj, 'foothis.bar'), obj.foothis.bar);\n };\n\n _class.prototype['@test [obj, falseValue.notDefined] -> (undefined)'] = function (assert) {\n assert.strictEqual((0, _emberMetal.get)(obj, 'falseValue.notDefined'), undefined);\n };\n\n _class.prototype['@test [obj, emptyString.length] -> 0'] = function (assert) {\n assert.strictEqual((0, _emberMetal.get)(obj, 'emptyString.length'), 0);\n };\n\n _class.prototype['@test [obj, nullValue.notDefined] -> (undefined)'] = function (assert) {\n assert.strictEqual((0, _emberMetal.get)(obj, 'nullValue.notDefined'), undefined);\n };\n\n _class.prototype['@test [obj, Wuz] -> obj.Wuz'] = function (assert) {\n assert.deepEqual((0, _emberMetal.get)(obj, 'Wuz'), obj.Wuz);\n };\n\n _class.prototype['@test [obj, Wuz.nar] -> obj.Wuz.nar'] = function (assert) {\n assert.deepEqual((0, _emberMetal.get)(obj, 'Wuz.nar'), obj.Wuz.nar);\n };\n\n _class.prototype['@test [obj, Foo] -> (undefined)'] = function (assert) {\n assert.strictEqual((0, _emberMetal.get)(obj, 'Foo'), undefined);\n };\n\n _class.prototype['@test [obj, Foo.bar] -> (undefined)'] = function (assert) {\n assert.strictEqual((0, _emberMetal.get)(obj, 'Foo.bar'), undefined);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/accessors/get_properties_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('getProperties', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test can retrieve a hash of properties from an object via an argument list or array of property names'] = function (assert) {\n var obj = {\n firstName: 'Steve',\n lastName: 'Jobs',\n companyName: 'Apple, Inc.'\n };\n\n assert.deepEqual((0, _emberMetal.getProperties)(obj, 'firstName', 'lastName'), {\n firstName: 'Steve',\n lastName: 'Jobs'\n });\n assert.deepEqual((0, _emberMetal.getProperties)(obj, 'firstName', 'lastName'), {\n firstName: 'Steve',\n lastName: 'Jobs'\n });\n assert.deepEqual((0, _emberMetal.getProperties)(obj, 'lastName'), { lastName: 'Jobs' });\n assert.deepEqual((0, _emberMetal.getProperties)(obj), {});\n assert.deepEqual((0, _emberMetal.getProperties)(obj, ['firstName', 'lastName']), {\n firstName: 'Steve',\n lastName: 'Jobs'\n });\n assert.deepEqual((0, _emberMetal.getProperties)(obj, ['firstName']), {\n firstName: 'Steve'\n });\n assert.deepEqual((0, _emberMetal.getProperties)(obj, []), {});\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/accessors/get_test', ['ember-babel', 'ember-environment', 'ember-runtime', 'ember-metal', 'internal-test-helpers', '@ember/runloop'], function (_emberBabel, _emberEnvironment, _emberRuntime, _emberMetal, _internalTestHelpers, _runloop) {\n 'use strict';\n\n function aget(x, y) {\n return x[y];\n }\n\n (0, _internalTestHelpers.moduleFor)('get', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should get arbitrary properties on an object'] = function (assert) {\n var obj = {\n string: 'string',\n number: 23,\n boolTrue: true,\n boolFalse: false,\n nullValue: null\n };\n\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n assert.equal((0, _emberMetal.get)(obj, key), obj[key], key);\n }\n };\n\n _class.prototype['@test implicitly computing the values of descriptors on properties is deprecated'] = function (assert) {\n var cp = (0, _emberMetal.computed)(function () {\n return 'value';\n });\n var obj = {\n cp: cp,\n toString: function () {\n return 'myobject';\n }\n };\n\n var result = void 0;\n\n expectDeprecation(function () {\n result = (0, _emberMetal.get)(obj, 'cp');\n }, /\\[DEPRECATED\\] computed property 'cp' was not set on object 'myobject' via 'defineProperty'/);\n\n assert.equal(result, 'value', 'descriptor');\n };\n\n _class.prototype['@test should retrieve a number key on an object'] = function (assert) {\n\n assert.equal((0, _emberMetal.get)({ 1: 'first' }, 1), 'first');\n };\n\n _class.prototype['@test should retrieve an array index'] = function (assert) {\n var arr = ['first', 'second'];\n\n assert.equal((0, _emberMetal.get)(arr, 0), 'first');\n assert.equal((0, _emberMetal.get)(arr, 1), 'second');\n };\n\n _class.prototype['@test should retrieve an empty string key on an object'] = function (assert) {\n\n assert.equal((0, _emberMetal.get)({ '': 'empty-string' }, ''), 'empty-string');\n };\n\n _class.prototype['@test should return undefined when passed an empty string if that key does not exist on an object'] = function (assert) {\n\n assert.equal((0, _emberMetal.get)({ tomster: true }, ''), undefined);\n };\n\n _class.prototype['@test should not access a property more than once'] = function (assert) {\n var count = 0;\n var obj = {\n get id() {\n return ++count;\n }\n };\n\n (0, _emberMetal.get)(obj, 'id');\n\n assert.equal(count, 1);\n };\n\n _class.prototype['@test should call unknownProperty on watched values if the value is undefined using getFromEmberMetal()/set()'] = function (assert) {\n assert.equal((0, _emberMetal.get)({\n unknownProperty: function (key) {\n assert.equal(key, 'foo', 'should pass key');\n return 'FOO';\n }\n }, 'foo'), 'FOO', 'should return value from unknown');\n };\n\n _class.prototype['@test should call unknownProperty on watched values if the value is undefined using accessors'] = function (assert) {\n var obj;\n\n if (_emberEnvironment.ENV.USES_ACCESSORS) {\n obj = {\n unknownProperty: function (key) {\n assert.equal(key, 'foo', 'should pass key');\n return 'FOO';\n }\n };\n\n assert.equal(aget(obj, 'foo'), 'FOO', 'should return value from unknown');\n } else {\n assert.ok('SKIPPING ACCESSORS');\n }\n };\n\n _class.prototype['@test get works with paths correctly'] = function (assert) {\n var func = function () {};\n func.bar = 'awesome';\n\n var destroyedObj = _emberRuntime.Object.create({ bar: 'great' });\n (0, _runloop.run)(function () {\n return destroyedObj.destroy();\n });\n\n assert.equal((0, _emberMetal.get)({ foo: null }, 'foo.bar'), undefined);\n assert.equal((0, _emberMetal.get)({ foo: { bar: 'hello' } }, 'foo.bar.length'), 5);\n assert.equal((0, _emberMetal.get)({ foo: func }, 'foo.bar'), 'awesome');\n assert.equal((0, _emberMetal.get)({ foo: func }, 'foo.bar.length'), 7);\n assert.equal((0, _emberMetal.get)({}, 'foo.bar.length'), undefined);\n assert.equal((0, _emberMetal.get)(function () {}, 'foo.bar.length'), undefined);\n assert.equal((0, _emberMetal.get)('', 'foo.bar.length'), undefined);\n assert.equal((0, _emberMetal.get)({ foo: destroyedObj }, 'foo.bar'), undefined);\n };\n\n _class.prototype['@test warn on attempts to call get with no arguments'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)('aProperty');\n }, /Get must be called with two arguments;/i);\n };\n\n _class.prototype['@test warn on attempts to call get with only one argument'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)('aProperty');\n }, /Get must be called with two arguments;/i);\n };\n\n _class.prototype['@test warn on attempts to call get with more then two arguments'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)({}, 'aProperty', true);\n }, /Get must be called with two arguments;/i);\n };\n\n _class.prototype['@test warn on attempts to get a property of undefined'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)(undefined, 'aProperty');\n }, /Cannot call get with 'aProperty' on an undefined object/i);\n };\n\n _class.prototype['@test warn on attempts to get a property path of undefined'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)(undefined, 'aProperty.on.aPath');\n }, /Cannot call get with 'aProperty.on.aPath' on an undefined object/);\n };\n\n _class.prototype['@test warn on attempts to get a property of null'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)(null, 'aProperty');\n }, /Cannot call get with 'aProperty' on an undefined object/);\n };\n\n _class.prototype['@test warn on attempts to get a property path of null'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)(null, 'aProperty.on.aPath');\n }, /Cannot call get with 'aProperty.on.aPath' on an undefined object/);\n };\n\n _class.prototype['@test warn on attempts to use get with an unsupported property path'] = function () {\n var obj = {};\n expectAssertion(function () {\n return (0, _emberMetal.get)(obj, null);\n }, /The key provided to get must be a string or number, you passed null/);\n expectAssertion(function () {\n return (0, _emberMetal.get)(obj, NaN);\n }, /The key provided to get must be a string or number, you passed NaN/);\n expectAssertion(function () {\n return (0, _emberMetal.get)(obj, undefined);\n }, /The key provided to get must be a string or number, you passed undefined/);\n expectAssertion(function () {\n return (0, _emberMetal.get)(obj, false);\n }, /The key provided to get must be a string or number, you passed false/);\n };\n\n _class.prototype['@test (regression) watched properties on unmodified inherited objects should still return their original value'] = function (assert) {\n var MyMixin = _emberMetal.Mixin.create({\n someProperty: 'foo',\n propertyDidChange: (0, _emberMetal.observer)('someProperty', function () {})\n });\n\n var baseObject = MyMixin.apply({});\n var theRealObject = Object.create(baseObject);\n\n assert.equal((0, _emberMetal.get)(theRealObject, 'someProperty'), 'foo', 'should return the set value, not false');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('getWithDefault', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test should get arbitrary properties on an object'] = function (assert) {\n var obj = {\n string: 'string',\n number: 23,\n boolTrue: true,\n boolFalse: false,\n nullValue: null\n };\n\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n assert.equal((0, _emberMetal.getWithDefault)(obj, key, 'fail'), obj[key], key);\n }\n\n obj = {\n undef: undefined\n };\n\n assert.equal((0, _emberMetal.getWithDefault)(obj, 'undef', 'default'), 'default', 'explicit undefined retrieves the default');\n assert.equal((0, _emberMetal.getWithDefault)(obj, 'not-present', 'default'), 'default', 'non-present key retrieves the default');\n };\n\n _class2.prototype['@test should call unknownProperty if defined and value is undefined'] = function (assert) {\n var obj = {\n count: 0,\n unknownProperty: function (key) {\n assert.equal(key, 'foo', 'should pass key');\n this.count++;\n return 'FOO';\n }\n };\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'FOO', 'should return value from unknown');\n assert.equal(obj.count, 1, 'should have invoked');\n };\n\n _class2.prototype['@test if unknownProperty is present, it is called using getFromEmberMetal()/set()'] = function (assert) {\n var obj = {\n unknownProperty: function (key) {\n if (key === 'foo') {\n assert.equal(key, 'foo', 'should pass key');\n return 'FOO';\n }\n }\n };\n assert.equal((0, _emberMetal.getWithDefault)(obj, 'foo', 'fail'), 'FOO', 'should return value from unknownProperty');\n assert.equal((0, _emberMetal.getWithDefault)(obj, 'bar', 'default'), 'default', 'should convert undefined from unknownProperty into default');\n };\n\n _class2.prototype['@test if unknownProperty is present, it is called using accessors'] = function (assert) {\n var obj;\n\n if (_emberEnvironment.ENV.USES_ACCESSORS) {\n obj = {\n unknownProperty: function (key) {\n if (key === 'foo') {\n assert.equal(key, 'foo', 'should pass key');\n return 'FOO';\n }\n }\n };\n\n assert.equal(aget(obj, 'foo', 'fail'), 'FOO', 'should return value from unknownProperty');\n assert.equal(aget(obj, 'bar', 'default'), 'default', 'should convert undefined from unknownProperty into default');\n } else {\n assert.ok('SKIPPING ACCESSORS');\n }\n };\n\n _class2.prototype['@test (regression) watched properties on unmodified inherited objects should still return their original value'] = function (assert) {\n var MyMixin = _emberMetal.Mixin.create({\n someProperty: 'foo',\n propertyDidChange: (0, _emberMetal.observer)('someProperty', function () {\n /* nothing to do */\n })\n });\n\n var baseObject = MyMixin.apply({});\n var theRealObject = Object.create(baseObject);\n\n assert.equal((0, _emberMetal.getWithDefault)(theRealObject, 'someProperty', 'fail'), 'foo', 'should return the set value, not false');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/accessors/mandatory_setters_test', ['ember-metal', 'ember-meta', 'internal-test-helpers'], function (_emberMetal, _emberMeta) {\n 'use strict';\n});","enifed('ember-metal/tests/accessors/set_path_test', ['ember-babel', 'ember-environment', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var originalLookup = _emberEnvironment.context.lookup;\n var lookup = void 0;\n\n var obj = void 0;\n function commonSetup() {\n _emberEnvironment.context.lookup = lookup = {};\n obj = {\n foo: {\n bar: {\n baz: { biff: 'BIFF' }\n }\n }\n };\n }\n\n function commonTeardown() {\n _emberEnvironment.context.lookup = originalLookup;\n obj = null;\n }\n\n (0, _internalTestHelpers.moduleFor)('set with path', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n commonSetup();\n return _this;\n }\n\n _class.prototype.teardown = function () {\n commonTeardown();\n };\n\n _class.prototype['@test [Foo, bar] -> Foo.bar'] = function (assert) {\n lookup.Foo = {\n toString: function () {\n return 'Foo';\n }\n }; // Behave like an Ember.Namespace\n\n (0, _emberMetal.set)(lookup.Foo, 'bar', 'baz');\n assert.equal((0, _emberMetal.get)(lookup.Foo, 'bar'), 'baz');\n };\n\n _class.prototype['@test [obj, foo] -> obj.foo'] = function (assert) {\n (0, _emberMetal.set)(obj, 'foo', 'BAM');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'BAM');\n };\n\n _class.prototype['@test [obj, foo.bar] -> obj.foo.bar'] = function (assert) {\n (0, _emberMetal.set)(obj, 'foo.bar', 'BAM');\n assert.equal((0, _emberMetal.get)(obj, 'foo.bar'), 'BAM');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('set with path - deprecated', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.call(this));\n\n commonSetup();\n return _this2;\n }\n\n _class2.prototype.teardown = function () {\n commonTeardown();\n };\n\n _class2.prototype['@test [obj, bla.bla] gives a proper exception message'] = function (assert) {\n try {\n (0, _emberMetal.set)(obj, 'bla.bla', 'BAM');\n } catch (ex) {\n assert.equal(ex.message, 'Property set failed: object in path \"bla\" could not be found.');\n }\n };\n\n _class2.prototype['@test [obj, foo.baz.bat] -> EXCEPTION'] = function (assert) {\n assert.throws(function () {\n return (0, _emberMetal.set)(obj, 'foo.baz.bat', 'BAM');\n });\n };\n\n _class2.prototype['@test [obj, foo.baz.bat] -> EXCEPTION'] = function (assert) {\n (0, _emberMetal.trySet)(obj, 'foo.baz.bat', 'BAM');\n assert.ok(true, 'does not raise');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/accessors/set_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('set', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function () {\n (0, _emberMetal.setHasViews)(function () {\n return false;\n });\n };\n\n _class.prototype['@test should set arbitrary properties on an object'] = function (assert) {\n var obj = {\n string: 'string',\n number: 23,\n boolTrue: true,\n boolFalse: false,\n nullValue: null,\n undefinedValue: undefined\n };\n\n var newObj = {};\n\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) {\n continue;\n }\n\n assert.equal((0, _emberMetal.set)(newObj, key, obj[key]), obj[key], 'should return value');\n assert.ok(key in newObj, 'should have key');\n assert.ok(newObj.hasOwnProperty(key), 'should have key');\n assert.equal((0, _emberMetal.get)(newObj, key), obj[key], 'should set value');\n }\n };\n\n _class.prototype['@test should set a number key on an object'] = function (assert) {\n var obj = {};\n\n (0, _emberMetal.set)(obj, 1, 'first');\n assert.equal(obj[1], 'first');\n };\n\n _class.prototype['@test should set an array index'] = function (assert) {\n var arr = ['first', 'second'];\n\n (0, _emberMetal.set)(arr, 1, 'lol');\n assert.deepEqual(arr, ['first', 'lol']);\n };\n\n _class.prototype['@test should call setUnknownProperty if defined and value is undefined'] = function (assert) {\n var obj = {\n count: 0,\n\n unknownProperty: function () {\n assert.ok(false, 'should not invoke unknownProperty if setUnknownProperty is defined');\n },\n setUnknownProperty: function (key, value) {\n assert.equal(key, 'foo', 'should pass key');\n assert.equal(value, 'BAR', 'should pass key');\n this.count++;\n return 'FOO';\n }\n };\n\n assert.equal((0, _emberMetal.set)(obj, 'foo', 'BAR'), 'BAR', 'should return set value');\n assert.equal(obj.count, 1, 'should have invoked');\n };\n\n _class.prototype['@test warn on attempts to call set with undefined as object'] = function () {\n expectAssertion(function () {\n return (0, _emberMetal.set)(undefined, 'aProperty', 'BAM');\n }, /Cannot call set with 'aProperty' on an undefined object./);\n };\n\n _class.prototype['@test warn on attempts to call set with null as object'] = function () {\n expectAssertion(function () {\n return (0, _emberMetal.set)(null, 'aProperty', 'BAM');\n }, /Cannot call set with 'aProperty' on an undefined object./);\n };\n\n _class.prototype['@test warn on attempts to use set with an unsupported property path'] = function () {\n var obj = {};\n expectAssertion(function () {\n return (0, _emberMetal.set)(obj, null, 42);\n }, /The key provided to set must be a string or number, you passed null/);\n expectAssertion(function () {\n return (0, _emberMetal.set)(obj, NaN, 42);\n }, /The key provided to set must be a string or number, you passed NaN/);\n expectAssertion(function () {\n return (0, _emberMetal.set)(obj, undefined, 42);\n }, /The key provided to set must be a string or number, you passed undefined/);\n expectAssertion(function () {\n return (0, _emberMetal.set)(obj, false, 42);\n }, /The key provided to set must be a string or number, you passed false/);\n };\n\n _class.prototype['@test warn on attempts of calling set on a destroyed object'] = function () {\n var obj = { isDestroyed: true };\n\n expectAssertion(function () {\n return (0, _emberMetal.set)(obj, 'favoriteFood', 'hot dogs');\n }, 'calling set on destroyed object: [object Object].favoriteFood = hot dogs');\n };\n\n _class.prototype['@test does not trigger auto-run assertion for objects that have not been tagged'] = function (assert) {\n (0, _emberMetal.setHasViews)(function () {\n return true;\n });\n var obj = {};\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n\n assert.equal(obj.foo, 'bar');\n };\n\n _class.prototype['@test does not warn on attempts of calling set on a destroyed object with `trySet`'] = function (assert) {\n var obj = { isDestroyed: true };\n\n (0, _emberMetal.trySet)(obj, 'favoriteFood', 'hot dogs');\n assert.equal(obj.favoriteFood, undefined, 'does not set and does not error');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/alias_test', ['ember-babel', 'ember-metal', 'ember-meta', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _emberMeta, _internalTestHelpers) {\n 'use strict';\n\n var obj = void 0,\n count = void 0;\n\n function incrementCount() {\n count++;\n }\n\n (0, _internalTestHelpers.moduleFor)('ember-metal/alias', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n obj = { foo: { faz: 'FOO' } };\n count = 0;\n };\n\n _class.prototype.afterEach = function () {\n obj = null;\n };\n\n _class.prototype['@test should proxy get to alt key'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz'));\n assert.equal((0, _emberMetal.get)(obj, 'bar'), 'FOO');\n };\n\n _class.prototype['@test should proxy set to alt key'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz'));\n (0, _emberMetal.set)(obj, 'bar', 'BAR');\n assert.equal((0, _emberMetal.get)(obj, 'foo.faz'), 'BAR');\n };\n\n _class.prototype['@test old dependent keys should not trigger property changes'] = function (assert) {\n var obj1 = Object.create(null);\n (0, _emberMetal.defineProperty)(obj1, 'foo', null, null);\n (0, _emberMetal.defineProperty)(obj1, 'bar', (0, _emberMetal.alias)('foo'));\n (0, _emberMetal.defineProperty)(obj1, 'baz', (0, _emberMetal.alias)('foo'));\n (0, _emberMetal.defineProperty)(obj1, 'baz', (0, _emberMetal.alias)('bar')); // redefine baz\n (0, _emberMetal.addObserver)(obj1, 'baz', incrementCount);\n\n (0, _emberMetal.set)(obj1, 'foo', 'FOO');\n assert.equal(count, 1);\n\n (0, _emberMetal.removeObserver)(obj1, 'baz', incrementCount);\n\n (0, _emberMetal.set)(obj1, 'foo', 'OOF');\n assert.equal(count, 1);\n };\n\n _class.prototype['@test inheriting an observer of the alias from the prototype then\\n redefining the alias on the instance to another property dependent on same key\\n does not call the observer twice'] = function (assert) {\n var obj1 = Object.create(null);\n\n (0, _emberMeta.meta)(obj1).proto = obj1;\n\n (0, _emberMetal.defineProperty)(obj1, 'foo', null, null);\n (0, _emberMetal.defineProperty)(obj1, 'bar', (0, _emberMetal.alias)('foo'));\n (0, _emberMetal.defineProperty)(obj1, 'baz', (0, _emberMetal.alias)('foo'));\n (0, _emberMetal.addObserver)(obj1, 'baz', incrementCount);\n\n var obj2 = Object.create(obj1);\n (0, _emberMetal.defineProperty)(obj2, 'baz', (0, _emberMetal.alias)('bar')); // override baz\n\n (0, _emberMetal.set)(obj2, 'foo', 'FOO');\n assert.equal(count, 1);\n\n (0, _emberMetal.removeObserver)(obj2, 'baz', incrementCount);\n\n (0, _emberMetal.set)(obj2, 'foo', 'OOF');\n assert.equal(count, 1);\n };\n\n _class.prototype['@test an observer of the alias works if added after defining the alias'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz'));\n (0, _emberMetal.addObserver)(obj, 'bar', incrementCount);\n assert.ok((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n (0, _emberMetal.set)(obj, 'foo.faz', 'BAR');\n assert.equal(count, 1);\n };\n\n _class.prototype['@test an observer of the alias works if added before defining the alias'] = function (assert) {\n (0, _emberMetal.addObserver)(obj, 'bar', incrementCount);\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz'));\n assert.ok((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n (0, _emberMetal.set)(obj, 'foo.faz', 'BAR');\n assert.equal(count, 1);\n };\n\n _class.prototype['@test object with alias is dirtied if interior object of alias is set after consumption'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz'));\n (0, _emberMetal.get)(obj, 'bar');\n\n var tag = (0, _emberMetal.tagFor)(obj);\n var tagValue = tag.value();\n (0, _emberMetal.set)(obj, 'foo.faz', 'BAR');\n\n assert.ok(!tag.validate(tagValue), 'setting the aliased key should dirty the object');\n };\n\n _class.prototype['@test setting alias on self should fail assertion'] = function () {\n expectAssertion(function () {\n return (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('bar'));\n }, \"Setting alias 'bar' on self\");\n };\n\n _class.prototype['@test destroyed alias does not disturb watch count'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz'));\n\n assert.equal((0, _emberMetal.get)(obj, 'bar'), 'FOO');\n assert.ok((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n\n (0, _emberMetal.defineProperty)(obj, 'bar', null);\n\n assert.notOk((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n };\n\n _class.prototype['@test setting on oneWay alias does not disturb watch count'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz').oneWay());\n\n assert.equal((0, _emberMetal.get)(obj, 'bar'), 'FOO');\n assert.ok((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n\n (0, _emberMetal.set)(obj, 'bar', null);\n\n assert.notOk((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n };\n\n _class.prototype['@test redefined alias with observer does not disturb watch count'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz').oneWay());\n\n assert.equal((0, _emberMetal.get)(obj, 'bar'), 'FOO');\n assert.ok((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n\n (0, _emberMetal.addObserver)(obj, 'bar', incrementCount);\n\n assert.equal(count, 0);\n\n (0, _emberMetal.set)(obj, 'bar', null);\n\n assert.equal(count, 1);\n assert.notOk((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.alias)('foo.faz'));\n\n assert.equal(count, 1);\n assert.ok((0, _emberMetal.isWatching)(obj, 'foo.faz'));\n\n (0, _emberMetal.set)(obj, 'foo.faz', 'great');\n\n assert.equal(count, 2);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/chains_test', ['ember-babel', 'ember-metal', 'ember-meta', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _emberMeta, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Chains', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test finishChains should properly copy chains from prototypes to instances'] = function (assert) {\n\n var obj = {};\n (0, _emberMetal.addObserver)(obj, 'foo.bar', null, function () {});\n\n var childObj = Object.create(obj);\n\n var parentMeta = (0, _emberMeta.meta)(obj);\n var childMeta = (0, _emberMeta.meta)(childObj);\n\n (0, _emberMetal.finishChains)(childMeta);\n\n assert.ok(parentMeta.readableChains() !== childMeta.readableChains(), 'The chains object is copied');\n };\n\n _class.prototype['@test does not observe primitive values'] = function (assert) {\n var obj = {\n foo: { bar: 'STRING' }\n };\n\n (0, _emberMetal.addObserver)(obj, 'foo.bar.baz', null, function () {});\n var meta = (0, _emberMeta.peekMeta)(obj);\n assert.notOk(meta._object);\n };\n\n _class.prototype['@test observer and CP chains'] = function (assert) {\n var obj = {};\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)('qux.[]', function () {}));\n (0, _emberMetal.defineProperty)(obj, 'qux', (0, _emberMetal.computed)(function () {}));\n\n // create DK chains\n (0, _emberMetal.get)(obj, 'foo');\n\n // create observer chain\n (0, _emberMetal.addObserver)(obj, 'qux.length', function () {});\n\n /*\n +-----+\n | qux | root CP\n +-----+\n ^\n +------+-----+\n | |\n +--------+ +----+\n | length | | [] | chainWatchers\n +--------+ +----+\n observer CP(foo, 'qux.[]')\n */\n\n // invalidate qux\n (0, _emberMetal.notifyPropertyChange)(obj, 'qux');\n\n // CP chain is blown away\n\n /*\n +-----+\n | qux | root CP\n +-----+\n ^\n +------+xxxxxx\n | x\n +--------+ xxxxxx\n | length | x [] x chainWatchers\n +--------+ xxxxxx\n observer CP(foo, 'qux.[]')\n */\n\n (0, _emberMetal.get)(obj, 'qux'); // CP chain re-recreated\n assert.ok(true, 'no crash');\n };\n\n _class.prototype['@test checks cache correctly'] = function (assert) {\n var obj = {};\n var parentChainNode = new _emberMetal.ChainNode(null, null, obj);\n var chainNode = new _emberMetal.ChainNode(parentChainNode, 'foo');\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {\n return undefined;\n }));\n (0, _emberMetal.get)(obj, 'foo');\n\n assert.strictEqual(chainNode.value(), undefined);\n };\n\n _class.prototype['@test chains are watched correctly'] = function (assert) {\n var obj = { foo: { bar: { baz: 1 } } };\n\n (0, _emberMetal.watch)(obj, 'foo.bar.baz');\n\n assert.equal((0, _emberMetal.watcherCount)(obj, 'foo'), 1);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'foo.bar'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'foo.bar.baz'), 1);\n assert.equal((0, _emberMetal.watcherCount)(obj.foo, 'bar'), 1);\n assert.equal((0, _emberMetal.watcherCount)(obj.foo, 'bar.baz'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.foo.bar, 'baz'), 1);\n\n (0, _emberMetal.unwatch)(obj, 'foo.bar.baz');\n\n assert.equal((0, _emberMetal.watcherCount)(obj, 'foo'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'foo.bar'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'foo.bar.baz'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.foo, 'bar'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.foo, 'bar.baz'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.foo.bar, 'baz'), 0);\n };\n\n _class.prototype['@test chains with single character keys are watched correctly'] = function (assert) {\n var obj = { a: { b: { c: 1 } } };\n\n (0, _emberMetal.watch)(obj, 'a.b.c');\n\n assert.equal((0, _emberMetal.watcherCount)(obj, 'a'), 1);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'a.b'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'a.b.c'), 1);\n assert.equal((0, _emberMetal.watcherCount)(obj.a, 'b'), 1);\n assert.equal((0, _emberMetal.watcherCount)(obj.a, 'b.c'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.a.b, 'c'), 1);\n\n (0, _emberMetal.unwatch)(obj, 'a.b.c');\n\n assert.equal((0, _emberMetal.watcherCount)(obj, 'a'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'a.b'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj, 'a.b.c'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.a, 'b'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.a, 'b.c'), 0);\n assert.equal((0, _emberMetal.watcherCount)(obj.a.b, 'c'), 0);\n };\n\n _class.prototype['@test writable chains is not defined more than once'] = function (assert) {\n assert.expect(0);\n\n var Base = function () {\n function Base() {\n\n (0, _emberMetal.finishChains)((0, _emberMeta.meta)(this));\n }\n\n Base.prototype.didChange = function () {};\n\n return Base;\n }();\n\n Base.prototype.foo = {\n bar: {\n baz: {\n value: 123\n }\n }\n };\n\n // Define a standard computed property, which will eventually setup dependencies\n (0, _emberMetal.defineProperty)(Base.prototype, 'bar', (0, _emberMetal.computed)('foo.bar', {\n get: function () {\n return this.foo.bar;\n }\n }));\n\n // Define some aliases, which will proxy chains along\n (0, _emberMetal.defineProperty)(Base.prototype, 'baz', (0, _emberMetal.alias)('bar.baz'));\n (0, _emberMetal.defineProperty)(Base.prototype, 'value', (0, _emberMetal.alias)('baz.value'));\n\n // Define an observer, which will eagerly attempt to setup chains and watch\n // their values. This follows the aliases eagerly, and forces the first\n // computed to actually set up its values/dependencies for chains. If\n // writableChains was not already defined, this results in multiple root\n // chain nodes being defined on the same object meta.\n (0, _emberMetal.addObserver)(Base.prototype, 'value', null, 'didChange');\n\n var Child = function (_Base) {\n (0, _emberBabel.inherits)(Child, _Base);\n\n function Child() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _Base.apply(this, arguments));\n }\n\n return Child;\n }(Base);\n\n var childObj = new Child();\n\n (0, _emberMetal.set)(childObj, 'foo.bar', {\n baz: {\n value: 456\n }\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/computed_test', ['ember-babel', 'ember-runtime', 'ember-metal', 'ember-meta', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberMetal, _emberMeta, _internalTestHelpers) {\n 'use strict';\n\n var obj = void 0,\n count = void 0;\n\n (0, _internalTestHelpers.moduleFor)('computed', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test computed property should be an instance of descriptor'] = function (assert) {\n assert.ok((0, _emberMetal.computed)(function () {}) instanceof _emberMetal.Descriptor);\n };\n\n _class.prototype['@test computed properties assert the presence of a getter or setter function'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.computed)('nogetternorsetter', {});\n }, 'Computed properties must receive a getter or a setter, you passed none.');\n };\n\n _class.prototype['@test computed properties check for the presence of a function or configuration object'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.computed)('nolastargument');\n }, 'computed expects a function or an object as last argument.');\n };\n\n _class.prototype['@test computed properties defined with an object only allow `get` and `set` keys'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.computed)({\n get: function () {},\n set: function () {},\n other: function () {}\n });\n }, 'Config object passed to computed can only contain `get` and `set` keys.');\n };\n\n _class.prototype['@test computed property can be accessed without `get`'] = function (assert) {\n var obj = {};\n var count = 0;\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function (key) {\n count++;\n return 'computed ' + key;\n }));\n\n assert.equal(obj.foo, 'computed foo', 'should return value');\n assert.equal(count, 1, 'should have invoked computed property');\n };\n\n _class.prototype['@test `notifyPropertyChange` works for a computed property not setup using Ember.defineProperty #GH16427'] = function (assert) {\n var obj = {\n a: 50,\n b: (0, _emberMetal.computed)(function () {\n return this.a / 5;\n })\n };\n\n expectDeprecation(function () {\n assert.equal((0, _emberMetal.get)(obj, 'b'), 10);\n });\n\n obj.a = 10;\n (0, _emberMetal.notifyPropertyChange)(obj, 'b');\n\n assert.equal(obj.b, 2);\n };\n\n _class.prototype['@test set works for a computed property not setup using Ember.defineProperty'] = function (assert) {\n var obj = {\n a: 50,\n b: (0, _emberMetal.computed)('a', {\n get: function () {\n return this.a * 2;\n },\n set: function (_, value) {\n (0, _emberMetal.set)(this, 'a', value / 2);\n return value;\n }\n })\n };\n\n assert.equal(obj.a, 50);\n\n expectDeprecation(function () {\n (0, _emberMetal.set)(obj, 'b', 80);\n });\n\n assert.equal(obj.b, 80);\n assert.equal(obj.a, 40);\n\n (0, _emberMetal.set)(obj, 'a', 100);\n\n assert.equal(obj.a, 100);\n assert.equal(obj.b, 200);\n };\n\n _class.prototype['@test defining computed property should invoke property on get'] = function (assert) {\n var obj = {};\n var count = 0;\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function (key) {\n count++;\n return 'computed ' + key;\n }));\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'computed foo', 'should return value');\n assert.equal(count, 1, 'should have invoked computed property');\n };\n\n _class.prototype['@test defining computed property should invoke property on set'] = function (assert) {\n var obj = {};\n var count = 0;\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)({\n get: function (key) {\n return this['__' + key];\n },\n set: function (key, value) {\n count++;\n this['__' + key] = 'computed ' + value;\n return this['__' + key];\n }\n }));\n\n assert.equal((0, _emberMetal.set)(obj, 'foo', 'bar'), 'bar', 'should return set value');\n assert.equal(count, 1, 'should have invoked computed property');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'computed bar', 'should return new value');\n };\n\n _class.prototype['@test defining a computed property with a dependent key ending with @each is expanded to []'] = function (assert) {\n var cp = (0, _emberMetal.computed)('blazo.@each', function () {});\n\n assert.deepEqual(cp._dependentKeys, ['blazo.[]']);\n\n cp = (0, _emberMetal.computed)('qux', 'zoopa.@each', function () {});\n\n assert.deepEqual(cp._dependentKeys, ['qux', 'zoopa.[]']);\n };\n\n _class.prototype['@test defining a computed property with a dependent key more than one level deep beyond @each is not supported'] = function () {\n expectNoWarning(function () {\n (0, _emberMetal.computed)('todos', function () {});\n });\n\n expectNoWarning(function () {\n (0, _emberMetal.computed)('todos.@each.owner', function () {});\n });\n\n expectWarning(function () {\n (0, _emberMetal.computed)('todos.@each.owner.name', function () {});\n }, /You used the key \"todos\\.@each\\.owner\\.name\" which is invalid\\. /);\n\n expectWarning(function () {\n (0, _emberMetal.computed)('todos.@each.owner.@each.name', function () {});\n }, /You used the key \"todos\\.@each\\.owner\\.@each\\.name\" which is invalid\\. /);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n var objA = void 0,\n objB = void 0;\n (0, _internalTestHelpers.moduleFor)('computed should inherit through prototype', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function () {\n objA = { __foo: 'FOO' };\n (0, _emberMetal.defineProperty)(objA, 'foo', (0, _emberMetal.computed)({\n get: function (key) {\n return this['__' + key];\n },\n set: function (key, value) {\n this['__' + key] = 'computed ' + value;\n return this['__' + key];\n }\n }));\n\n objB = Object.create(objA);\n objB.__foo = 'FOO'; // make a copy;\n };\n\n _class2.prototype.afterEach = function () {\n objA = objB = null;\n };\n\n _class2.prototype['@test using get() and set()'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'FOO', 'should get FOO from A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'FOO', 'should get FOO from B');\n\n (0, _emberMetal.set)(objA, 'foo', 'BIFF');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'computed BIFF', 'should change A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'FOO', 'should NOT change B');\n\n (0, _emberMetal.set)(objB, 'foo', 'bar');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'computed bar', 'should change B');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'computed BIFF', 'should NOT change A');\n\n (0, _emberMetal.set)(objA, 'foo', 'BAZ');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'computed BAZ', 'should change A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'computed bar', 'should NOT change B');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('redefining computed property to normal', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype.beforeEach = function () {\n objA = { __foo: 'FOO' };\n (0, _emberMetal.defineProperty)(objA, 'foo', (0, _emberMetal.computed)({\n get: function (key) {\n return this['__' + key];\n },\n set: function (key, value) {\n this['__' + key] = 'computed ' + value;\n return this['__' + key];\n }\n }));\n\n objB = Object.create(objA);\n (0, _emberMetal.defineProperty)(objB, 'foo'); // make this just a normal property.\n };\n\n _class3.prototype.afterEach = function () {\n objA = objB = null;\n };\n\n _class3.prototype['@test using get() and set()'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'FOO', 'should get FOO from A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), undefined, 'should get undefined from B');\n\n (0, _emberMetal.set)(objA, 'foo', 'BIFF');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'computed BIFF', 'should change A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), undefined, 'should NOT change B');\n\n (0, _emberMetal.set)(objB, 'foo', 'bar');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'bar', 'should change B');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'computed BIFF', 'should NOT change A');\n\n (0, _emberMetal.set)(objA, 'foo', 'BAZ');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'computed BAZ', 'should change A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'bar', 'should NOT change B');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('redefining computed property to another property', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype.beforeEach = function () {\n objA = { __foo: 'FOO' };\n (0, _emberMetal.defineProperty)(objA, 'foo', (0, _emberMetal.computed)({\n get: function (key) {\n return this['__' + key];\n },\n set: function (key, value) {\n this['__' + key] = 'A ' + value;\n return this['__' + key];\n }\n }));\n\n objB = Object.create(objA);\n objB.__foo = 'FOO';\n (0, _emberMetal.defineProperty)(objB, 'foo', (0, _emberMetal.computed)({\n get: function (key) {\n return this['__' + key];\n },\n set: function (key, value) {\n this['__' + key] = 'B ' + value;\n return this['__' + key];\n }\n }));\n };\n\n _class4.prototype.afterEach = function () {\n objA = objB = null;\n };\n\n _class4.prototype['@test using get() and set()'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'FOO', 'should get FOO from A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'FOO', 'should get FOO from B');\n\n (0, _emberMetal.set)(objA, 'foo', 'BIFF');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'A BIFF', 'should change A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'FOO', 'should NOT change B');\n\n (0, _emberMetal.set)(objB, 'foo', 'bar');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'B bar', 'should change B');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'A BIFF', 'should NOT change A');\n\n (0, _emberMetal.set)(objA, 'foo', 'BAZ');\n assert.equal((0, _emberMetal.get)(objA, 'foo'), 'A BAZ', 'should change A');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'B bar', 'should NOT change B');\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('computed - metadata', function (_AbstractTestCase5) {\n (0, _emberBabel.inherits)(_class5, _AbstractTestCase5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase5.apply(this, arguments));\n }\n\n _class5.prototype['@test can set metadata on a computed property'] = function (assert) {\n var computedProperty = (0, _emberMetal.computed)(function () {});\n computedProperty.meta({ key: 'keyValue' });\n\n assert.equal(computedProperty.meta().key, 'keyValue', 'saves passed meta hash to the _meta property');\n };\n\n _class5.prototype['@test meta should return an empty hash if no meta is set'] = function (assert) {\n var computedProperty = (0, _emberMetal.computed)(function () {});\n assert.deepEqual(computedProperty.meta(), {}, 'returned value is an empty hash');\n };\n\n return _class5;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // CACHEABLE\n //\n\n (0, _internalTestHelpers.moduleFor)('computed - cacheable', function (_AbstractTestCase6) {\n (0, _emberBabel.inherits)(_class6, _AbstractTestCase6);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase6.apply(this, arguments));\n }\n\n _class6.prototype.beforeEach = function () {\n obj = {};\n count = 0;\n var func = function () {\n count++;\n return 'bar ' + count;\n };\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)({ get: func, set: func }));\n };\n\n _class6.prototype.afterEach = function () {\n obj = count = null;\n };\n\n _class6.prototype['@test cacheable should cache'] = function (assert) {\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'first get');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'second get');\n assert.equal(count, 1, 'should only invoke once');\n };\n\n _class6.prototype['@test modifying a cacheable property should update cache'] = function (assert) {\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'first get');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'second get');\n\n assert.equal((0, _emberMetal.set)(obj, 'foo', 'baz'), 'baz', 'setting');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 2', 'third get');\n assert.equal(count, 2, 'should not invoke again');\n };\n\n _class6.prototype['@test inherited property should not pick up cache'] = function (assert) {\n var objB = Object.create(obj);\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'obj first get');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'bar 2', 'objB first get');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'obj second get');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'bar 2', 'objB second get');\n\n (0, _emberMetal.set)(obj, 'foo', 'baz'); // modify A\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 3', 'obj third get');\n assert.equal((0, _emberMetal.get)(objB, 'foo'), 'bar 2', 'objB third get');\n };\n\n _class6.prototype['@test getCachedValueFor should return the cached value'] = function (assert) {\n assert.equal((0, _emberMetal.getCachedValueFor)(obj, 'foo'), undefined, 'should not yet be a cached value');\n\n (0, _emberMetal.get)(obj, 'foo');\n\n assert.equal((0, _emberMetal.getCachedValueFor)(obj, 'foo'), 'bar 1', 'should retrieve cached value');\n };\n\n _class6.prototype['@test getCachedValueFor should return falsy cached values'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'falsy', (0, _emberMetal.computed)(function () {\n return false;\n }));\n\n assert.equal((0, _emberMetal.getCachedValueFor)(obj, 'falsy'), undefined, 'should not yet be a cached value');\n\n (0, _emberMetal.get)(obj, 'falsy');\n\n assert.equal((0, _emberMetal.getCachedValueFor)(obj, 'falsy'), false, 'should retrieve cached value');\n };\n\n _class6.prototype['@test setting a cached computed property passes the old value as the third argument'] = function (assert) {\n var obj = {\n foo: 0\n };\n\n var receivedOldValue = void 0;\n\n (0, _emberMetal.defineProperty)(obj, 'plusOne', (0, _emberMetal.computed)({\n get: function () {},\n set: function (key, value, oldValue) {\n receivedOldValue = oldValue;\n return value;\n }\n }).property('foo'));\n\n (0, _emberMetal.set)(obj, 'plusOne', 1);\n assert.strictEqual(receivedOldValue, undefined, 'oldValue should be undefined');\n\n (0, _emberMetal.set)(obj, 'plusOne', 2);\n assert.strictEqual(receivedOldValue, 1, 'oldValue should be 1');\n\n (0, _emberMetal.set)(obj, 'plusOne', 3);\n assert.strictEqual(receivedOldValue, 2, 'oldValue should be 2');\n };\n\n return _class6;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // DEPENDENT KEYS\n //\n\n (0, _internalTestHelpers.moduleFor)('computed - dependentkey', function (_AbstractTestCase7) {\n (0, _emberBabel.inherits)(_class7, _AbstractTestCase7);\n\n function _class7() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase7.apply(this, arguments));\n }\n\n _class7.prototype.beforeEach = function () {\n obj = { bar: 'baz' };\n count = 0;\n var getterAndSetter = function () {\n count++;\n (0, _emberMetal.get)(this, 'bar');\n return 'bar ' + count;\n };\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)({\n get: getterAndSetter,\n set: getterAndSetter\n }).property('bar'));\n };\n\n _class7.prototype.afterEach = function () {\n obj = count = null;\n };\n\n _class7.prototype['@test should lazily watch dependent keys on set'] = function (assert) {\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'precond not watching dependent key');\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), true, 'lazily watching dependent key');\n };\n\n _class7.prototype['@test should lazily watch dependent keys on get'] = function (assert) {\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'precond not watching dependent key');\n (0, _emberMetal.get)(obj, 'foo');\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), true, 'lazily watching dependent key');\n };\n\n _class7.prototype['@test local dependent key should invalidate cache'] = function (assert) {\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'precond not watching dependent key');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'get once');\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), true, 'lazily setup watching dependent key');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'cached retrieve');\n\n (0, _emberMetal.set)(obj, 'bar', 'BIFF'); // should invalidate foo\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 2', 'should recache');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 2', 'cached retrieve');\n };\n\n _class7.prototype['@test should invalidate multiple nested dependent keys'] = function (assert) {\n var count = 0;\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.computed)(function () {\n count++;\n (0, _emberMetal.get)(this, 'baz');\n return 'baz ' + count;\n }).property('baz'));\n\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'precond not watching dependent key');\n assert.equal((0, _emberMetal.isWatching)(obj, 'baz'), false, 'precond not watching dependent key');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'get once');\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), true, 'lazily setup watching dependent key');\n assert.equal((0, _emberMetal.isWatching)(obj, 'baz'), true, 'lazily setup watching dependent key');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1', 'cached retrieve');\n\n (0, _emberMetal.set)(obj, 'baz', 'BIFF'); // should invalidate bar -> foo\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'should not be watching dependent key after cache cleared');\n assert.equal((0, _emberMetal.isWatching)(obj, 'baz'), false, 'should not be watching dependent key after cache cleared');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 2', 'should recache');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 2', 'cached retrieve');\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), true, 'lazily setup watching dependent key');\n assert.equal((0, _emberMetal.isWatching)(obj, 'baz'), true, 'lazily setup watching dependent key');\n };\n\n _class7.prototype['@test circular keys should not blow up'] = function (assert) {\n var func = function () {\n count++;\n return 'bar ' + count;\n };\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.computed)({ get: func, set: func }).property('foo'));\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {\n count++;\n return 'foo ' + count;\n }).property('bar'));\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 1', 'get once');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 1', 'cached retrieve');\n\n (0, _emberMetal.set)(obj, 'bar', 'BIFF'); // should invalidate bar -> foo -> bar\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 3', 'should recache');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 3', 'cached retrieve');\n };\n\n _class7.prototype['@test redefining a property should undo old dependent keys'] = function (assert) {\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'precond not watching dependent key');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar 1');\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), true, 'lazily watching dependent key');\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {\n count++;\n return 'baz ' + count;\n }).property('baz'));\n\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'after redefining should not be watching dependent key');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'baz 2');\n\n (0, _emberMetal.set)(obj, 'bar', 'BIFF'); // should not kill cache\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'baz 2');\n\n (0, _emberMetal.set)(obj, 'baz', 'BOP');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'baz 3');\n };\n\n _class7.prototype['@test can watch multiple dependent keys specified declaratively via brace expansion'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {\n count++;\n return 'foo ' + count;\n }).property('qux.{bar,baz}'));\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 1', 'get once');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 1', 'cached retrieve');\n\n (0, _emberMetal.set)(obj, 'qux', {});\n (0, _emberMetal.set)(obj, 'qux.bar', 'bar'); // invalidate foo\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 2', 'foo invalidated from bar');\n\n (0, _emberMetal.set)(obj, 'qux.baz', 'baz'); // invalidate foo\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 3', 'foo invalidated from baz');\n\n (0, _emberMetal.set)(obj, 'qux.quux', 'quux'); // do not invalidate foo\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo 3', 'foo not invalidated by quux');\n };\n\n _class7.prototype['@test throws assertion if brace expansion notation has spaces'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.defineProperty)(obj, 'roo', (0, _emberMetal.computed)(function () {\n count++;\n return 'roo ' + count;\n }).property('fee.{bar, baz,bop , }'));\n }, /cannot contain spaces/);\n };\n\n _class7.prototype['@test throws an assertion if an uncached `get` is called after object is destroyed'] = function (assert) {\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'precond not watching dependent key');\n\n var meta = (0, _emberMeta.meta)(obj);\n meta.destroy();\n\n obj.toString = function () {\n return '';\n };\n\n expectAssertion(function () {\n (0, _emberMetal.get)(obj, 'foo');\n }, 'Cannot modify dependent keys for `foo` on `` after it has been destroyed.');\n\n assert.equal((0, _emberMetal.isWatching)(obj, 'bar'), false, 'deps were not updated');\n };\n\n return _class7;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // CHAINED DEPENDENT KEYS\n //\n\n var func = void 0;\n\n (0, _internalTestHelpers.moduleFor)('computed - dependentkey with chained properties', function (_AbstractTestCase8) {\n (0, _emberBabel.inherits)(_class8, _AbstractTestCase8);\n\n function _class8() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase8.apply(this, arguments));\n }\n\n _class8.prototype.beforeEach = function () {\n obj = {\n foo: {\n bar: {\n baz: {\n biff: 'BIFF'\n }\n }\n }\n };\n\n count = 0;\n func = function () {\n count++;\n return (0, _emberMetal.get)(obj, 'foo.bar.baz.biff') + ' ' + count;\n };\n };\n\n _class8.prototype.afterEach = function () {\n obj = count = func = null;\n };\n\n _class8.prototype['@test depending on simple chain'] = function (assert) {\n // assign computed property\n (0, _emberMetal.defineProperty)(obj, 'prop', (0, _emberMetal.computed)(func).property('foo.bar.baz.biff'));\n\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BIFF 1');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 2');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 2');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar'), 'baz', { biff: 'BLOB' });\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BLOB 3');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BLOB 3');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 4');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 4');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo'), 'bar', { baz: { biff: 'BOOM' } });\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BOOM 5');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BOOM 5');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 6');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 6');\n\n (0, _emberMetal.set)(obj, 'foo', { bar: { baz: { biff: 'BLARG' } } });\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BLARG 7');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BLARG 7');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 8');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'BUZZ 8');\n\n (0, _emberMetal.defineProperty)(obj, 'prop');\n (0, _emberMetal.set)(obj, 'prop', 'NONE');\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'NONE');\n\n (0, _emberMetal.set)(obj, 'foo', { bar: { baz: { biff: 'BLARG' } } });\n assert.equal((0, _emberMetal.get)(obj, 'prop'), 'NONE'); // should do nothing\n assert.equal(count, 8, 'should be not have invoked computed again');\n };\n\n _class8.prototype['@test chained dependent keys should evaluate computed properties lazily'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj.foo.bar, 'b', (0, _emberMetal.computed)(func));\n (0, _emberMetal.defineProperty)(obj.foo, 'c', (0, _emberMetal.computed)(function () {}).property('bar.b'));\n assert.equal(count, 0, 'b should not run');\n };\n\n return _class8;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // improved-cp-syntax\n //\n\n (0, _internalTestHelpers.moduleFor)('computed - improved cp syntax', function (_AbstractTestCase9) {\n (0, _emberBabel.inherits)(_class9, _AbstractTestCase9);\n\n function _class9() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase9.apply(this, arguments));\n }\n\n _class9.prototype['@test setter and getters are passed using an object'] = function (assert) {\n var testObj = _emberRuntime.Object.extend({\n a: '1',\n b: '2',\n aInt: (0, _emberMetal.computed)('a', {\n get: function (keyName) {\n assert.equal(keyName, 'aInt', 'getter receives the keyName');\n return parseInt(this.get('a'));\n },\n set: function (keyName, value, oldValue) {\n assert.equal(keyName, 'aInt', 'setter receives the keyName');\n assert.equal(value, 123, 'setter receives the new value');\n assert.equal(oldValue, 1, 'setter receives the old value');\n this.set('a', '' + value); // side effect\n return parseInt(this.get('a'));\n }\n })\n }).create();\n\n assert.ok(testObj.get('aInt') === 1, 'getter works');\n testObj.set('aInt', 123);\n assert.ok(testObj.get('a') === '123', 'setter works');\n assert.ok(testObj.get('aInt') === 123, 'cp has been updated too');\n };\n\n _class9.prototype['@test setter can be omited'] = function (assert) {\n var testObj = _emberRuntime.Object.extend({\n a: '1',\n b: '2',\n aInt: (0, _emberMetal.computed)('a', {\n get: function (keyName) {\n assert.equal(keyName, 'aInt', 'getter receives the keyName');\n return parseInt(this.get('a'));\n }\n })\n }).create();\n\n assert.ok(testObj.get('aInt') === 1, 'getter works');\n assert.ok(testObj.get('a') === '1');\n testObj.set('aInt', '123');\n assert.ok(testObj.get('aInt') === '123', 'cp has been updated too');\n };\n\n _class9.prototype['@test getter can be omited'] = function (assert) {\n var testObj = _emberRuntime.Object.extend({\n com: (0, _emberMetal.computed)({\n set: function (key, value) {\n return value;\n }\n })\n }).create();\n\n assert.ok(testObj.get('com') === undefined);\n testObj.set('com', '123');\n assert.ok(testObj.get('com') === '123', 'cp has been updated');\n };\n\n _class9.prototype['@test the return value of the setter gets cached'] = function (assert) {\n var testObj = _emberRuntime.Object.extend({\n a: '1',\n sampleCP: (0, _emberMetal.computed)('a', {\n get: function () {\n assert.ok(false, 'The getter should not be invoked');\n return 'get-value';\n },\n set: function () {\n return 'set-value';\n }\n })\n }).create();\n\n testObj.set('sampleCP', 'abcd');\n assert.ok(testObj.get('sampleCP') === 'set-value', 'The return value of the CP was cached');\n };\n\n return _class9;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // BUGS\n //\n\n (0, _internalTestHelpers.moduleFor)('computed edge cases', function (_AbstractTestCase10) {\n (0, _emberBabel.inherits)(_class10, _AbstractTestCase10);\n\n function _class10() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase10.apply(this, arguments));\n }\n\n _class10.prototype['@test adding a computed property should show up in key iteration'] = function (assert) {\n var obj = {};\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {}));\n\n var found = [];\n for (var key in obj) {\n found.push(key);\n }\n assert.ok(found.indexOf('foo') >= 0, 'should find computed property in iteration found=' + found);\n assert.ok('foo' in obj, 'foo in obj should pass');\n };\n\n _class10.prototype[\"@test when setting a value after it had been retrieved empty don't pass function UNDEFINED as oldValue\"] = function (assert) {\n var obj = {};\n var oldValueIsNoFunction = true;\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)({\n get: function () {},\n set: function (key, value, oldValue) {\n if (typeof oldValue === 'function') {\n oldValueIsNoFunction = false;\n }\n return undefined;\n }\n }));\n\n (0, _emberMetal.get)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'foo', undefined);\n\n assert.ok(oldValueIsNoFunction);\n };\n\n return _class10;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('computed - setter', function (_AbstractTestCase11) {\n (0, _emberBabel.inherits)(_class11, _AbstractTestCase11);\n\n function _class11() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase11.apply(this, arguments));\n }\n\n _class11.prototype['@test setting a watched computed property'] = function (assert) {\n var obj = {\n firstName: 'Yehuda',\n lastName: 'Katz'\n };\n\n (0, _emberMetal.defineProperty)(obj, 'fullName', (0, _emberMetal.computed)({\n get: function () {\n return (0, _emberMetal.get)(this, 'firstName') + ' ' + (0, _emberMetal.get)(this, 'lastName');\n },\n set: function (key, value) {\n var values = value.split(' ');\n (0, _emberMetal.set)(this, 'firstName', values[0]);\n (0, _emberMetal.set)(this, 'lastName', values[1]);\n return value;\n }\n }).property('firstName', 'lastName'));\n\n var fullNameDidChange = 0;\n var firstNameDidChange = 0;\n var lastNameDidChange = 0;\n (0, _emberMetal.addObserver)(obj, 'fullName', function () {\n fullNameDidChange++;\n });\n (0, _emberMetal.addObserver)(obj, 'firstName', function () {\n firstNameDidChange++;\n });\n (0, _emberMetal.addObserver)(obj, 'lastName', function () {\n lastNameDidChange++;\n });\n\n assert.equal((0, _emberMetal.get)(obj, 'fullName'), 'Yehuda Katz');\n\n (0, _emberMetal.set)(obj, 'fullName', 'Yehuda Katz');\n\n (0, _emberMetal.set)(obj, 'fullName', 'Kris Selden');\n\n assert.equal((0, _emberMetal.get)(obj, 'fullName'), 'Kris Selden');\n assert.equal((0, _emberMetal.get)(obj, 'firstName'), 'Kris');\n assert.equal((0, _emberMetal.get)(obj, 'lastName'), 'Selden');\n\n assert.equal(fullNameDidChange, 1);\n assert.equal(firstNameDidChange, 1);\n assert.equal(lastNameDidChange, 1);\n };\n\n _class11.prototype['@test setting a cached computed property that modifies the value you give it'] = function (assert) {\n var obj = {\n foo: 0\n };\n\n (0, _emberMetal.defineProperty)(obj, 'plusOne', (0, _emberMetal.computed)({\n get: function () {\n return (0, _emberMetal.get)(this, 'foo') + 1;\n },\n set: function (key, value) {\n (0, _emberMetal.set)(this, 'foo', value);\n return value + 1;\n }\n }).property('foo'));\n\n var plusOneDidChange = 0;\n (0, _emberMetal.addObserver)(obj, 'plusOne', function () {\n plusOneDidChange++;\n });\n\n assert.equal((0, _emberMetal.get)(obj, 'plusOne'), 1);\n (0, _emberMetal.set)(obj, 'plusOne', 1);\n assert.equal((0, _emberMetal.get)(obj, 'plusOne'), 2);\n (0, _emberMetal.set)(obj, 'plusOne', 1);\n assert.equal((0, _emberMetal.get)(obj, 'plusOne'), 2);\n\n assert.equal(plusOneDidChange, 1);\n\n (0, _emberMetal.set)(obj, 'foo', 5);\n assert.equal((0, _emberMetal.get)(obj, 'plusOne'), 6);\n\n assert.equal(plusOneDidChange, 2);\n };\n\n return _class11;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('computed - default setter', function (_AbstractTestCase12) {\n (0, _emberBabel.inherits)(_class12, _AbstractTestCase12);\n\n function _class12() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase12.apply(this, arguments));\n }\n\n _class12.prototype[\"@test when setting a value on a computed property that doesn't handle sets\"] = function (assert) {\n var obj = {};\n var observerFired = false;\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {\n return 'foo';\n }));\n\n (0, _emberMetal.addObserver)(obj, 'foo', null, function () {\n return observerFired = true;\n });\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar', 'The set value is properly returned');\n assert.ok(typeof obj.foo === 'string', 'The computed property was removed');\n assert.ok(observerFired, 'The observer was still notified');\n };\n\n return _class12;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('computed - readOnly', function (_AbstractTestCase13) {\n (0, _emberBabel.inherits)(_class13, _AbstractTestCase13);\n\n function _class13() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase13.apply(this, arguments));\n }\n\n _class13.prototype['@test is chainable'] = function (assert) {\n var cp = (0, _emberMetal.computed)(function () {}).readOnly();\n\n assert.ok(cp instanceof _emberMetal.Descriptor);\n assert.ok(cp instanceof _emberMetal.ComputedProperty);\n };\n\n _class13.prototype['@test throws assertion if called over a CP with a setter defined with the new syntax'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.computed)({\n get: function () {},\n set: function () {}\n }).readOnly();\n }, /Computed properties that define a setter using the new syntax cannot be read-only/);\n };\n\n _class13.prototype['@test protects against setting'] = function (assert) {\n var obj = {};\n\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.computed)(function () {\n return 'barValue';\n }).readOnly());\n\n assert.equal((0, _emberMetal.get)(obj, 'bar'), 'barValue');\n\n assert.throws(function () {\n (0, _emberMetal.set)(obj, 'bar', 'newBar');\n }, /Cannot set read\\-only property \"bar\" on object:/);\n\n assert.equal((0, _emberMetal.get)(obj, 'bar'), 'barValue');\n };\n\n return _class13;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/descriptor_test', ['ember-babel', 'ember-runtime', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var classes = [function () {\n _class.module = function (title) {\n return title + ': using defineProperty on an object directly';\n };\n\n function _class() {\n\n this.object = {};\n }\n\n _class.prototype.install = function (key, desc, assert) {\n var object = this.object;\n\n (0, _emberMetal.defineProperty)(object, key, desc);\n\n assert.ok(object.hasOwnProperty(key));\n };\n\n _class.prototype.set = function (key, value) {\n this.object[key] = value;\n };\n\n _class.prototype.finalize = function () {\n return this.object;\n };\n\n _class.prototype.source = function () {\n return this.object;\n };\n\n return _class;\n }(), function () {\n _class2.module = function (title) {\n return title + ': using defineProperty on a prototype';\n };\n\n function _class2() {\n\n this.proto = {};\n }\n\n _class2.prototype.install = function (key, desc, assert) {\n var proto = this.proto;\n\n (0, _emberMetal.defineProperty)(proto, key, desc);\n\n assert.ok(proto.hasOwnProperty(key));\n };\n\n _class2.prototype.set = function (key, value) {\n this.proto[key] = value;\n };\n\n _class2.prototype.finalize = function () {\n return Object.create(this.proto);\n };\n\n _class2.prototype.source = function () {\n return this.proto;\n };\n\n return _class2;\n }(), function () {\n _class3.module = function (title) {\n return title + ': in EmberObject.extend()';\n };\n\n function _class3() {\n\n this.klass = null;\n this.props = {};\n }\n\n _class3.prototype.install = function (key, desc) {\n this.props[key] = desc;\n };\n\n _class3.prototype.set = function (key, value) {\n this.props[key] = value;\n };\n\n _class3.prototype.finalize = function () {\n this.klass = _emberRuntime.Object.extend(this.props);\n return this.klass.create();\n };\n\n _class3.prototype.source = function () {\n return this.klass.prototype;\n };\n\n return _class3;\n }(), function () {\n _class4.module = function (title) {\n return title + ': in EmberObject.extend() through a mixin';\n };\n\n function _class4() {\n\n this.klass = null;\n this.props = {};\n }\n\n _class4.prototype.install = function (key, desc) {\n this.props[key] = desc;\n };\n\n _class4.prototype.set = function (key, value) {\n this.props[key] = value;\n };\n\n _class4.prototype.finalize = function () {\n this.klass = _emberRuntime.Object.extend(_emberMetal.Mixin.create(this.props));\n return this.klass.create();\n };\n\n _class4.prototype.source = function () {\n return this.klass.prototype;\n };\n\n return _class4;\n }(), function () {\n _class5.module = function (title) {\n return title + ': inherited from another EmberObject super class';\n };\n\n function _class5() {\n\n this.superklass = null;\n this.props = {};\n }\n\n _class5.prototype.install = function (key, desc) {\n this.props[key] = desc;\n };\n\n _class5.prototype.set = function (key, value) {\n this.props[key] = value;\n };\n\n _class5.prototype.finalize = function () {\n this.superklass = _emberRuntime.Object.extend(this.props);\n return this.superklass.extend().create();\n };\n\n _class5.prototype.source = function () {\n return this.superklass.prototype;\n };\n\n return _class5;\n }()];\n\n classes.forEach(function (TestClass) {\n (0, _internalTestHelpers.moduleFor)(TestClass.module('ember-metal/descriptor'), function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class6, _AbstractTestCase);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class6.prototype['@test defining a configurable property'] = function (assert) {\n var factory = new TestClass(assert);\n\n factory.install('foo', (0, _emberMetal.descriptor)({ configurable: true, value: 'bar' }), assert);\n\n var obj = factory.finalize();\n\n assert.equal(obj.foo, 'bar');\n\n var source = factory.source();\n\n delete source.foo;\n\n assert.strictEqual(obj.foo, undefined);\n\n Object.defineProperty(source, 'foo', { configurable: true, value: 'baz' });\n\n assert.equal(obj.foo, 'baz');\n };\n\n _class6.prototype['@test defining a non-configurable property'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({ configurable: false, value: 'bar' }), assert);\n\n var obj = factory.finalize();\n\n assert.equal(obj.foo, 'bar');\n\n var source = factory.source();\n\n assert.throws(function () {\n return delete source.foo;\n }, TypeError);\n\n assert.throws(function () {\n return Object.defineProperty(source, 'foo', {\n configurable: true,\n value: 'baz'\n });\n }, TypeError);\n\n assert.equal(obj.foo, 'bar');\n };\n\n _class6.prototype['@test defining an enumerable property'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({ enumerable: true, value: 'bar' }), assert);\n\n var obj = factory.finalize();\n\n assert.equal(obj.foo, 'bar');\n\n var source = factory.source();\n\n assert.ok(Object.keys(source).indexOf('foo') !== -1);\n };\n\n _class6.prototype['@test defining a non-enumerable property'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({ enumerable: false, value: 'bar' }), assert);\n\n var obj = factory.finalize();\n\n assert.equal(obj.foo, 'bar');\n\n var source = factory.source();\n\n assert.ok(Object.keys(source).indexOf('foo') === -1);\n };\n\n _class6.prototype['@test defining a writable property'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({ writable: true, value: 'bar' }), assert);\n\n var obj = factory.finalize();\n\n assert.equal(obj.foo, 'bar');\n\n var source = factory.source();\n\n source.foo = 'baz';\n\n assert.equal(obj.foo, 'baz');\n\n obj.foo = 'bat';\n\n assert.equal(obj.foo, 'bat');\n };\n\n _class6.prototype['@test defining a non-writable property'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({ writable: false, value: 'bar' }), assert);\n\n var obj = factory.finalize();\n\n assert.equal(obj.foo, 'bar');\n\n var source = factory.source();\n\n assert.throws(function () {\n return source.foo = 'baz';\n }, TypeError);\n assert.throws(function () {\n return obj.foo = 'baz';\n }, TypeError);\n\n assert.equal(obj.foo, 'bar');\n };\n\n _class6.prototype['@test defining a getter'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({\n get: function () {\n return this.__foo__;\n }\n }), assert);\n\n factory.set('__foo__', 'bar');\n\n var obj = factory.finalize();\n\n assert.equal(obj.foo, 'bar');\n\n obj.__foo__ = 'baz';\n\n assert.equal(obj.foo, 'baz');\n };\n\n _class6.prototype['@test defining a setter'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({\n set: function (value) {\n this.__foo__ = value;\n }\n }), assert);\n\n factory.set('__foo__', 'bar');\n\n var obj = factory.finalize();\n\n assert.equal(obj.__foo__, 'bar');\n\n obj.foo = 'baz';\n\n assert.equal(obj.__foo__, 'baz');\n };\n\n _class6.prototype['@test combining multiple setter and getters'] = function (assert) {\n var factory = new TestClass(assert);\n factory.install('foo', (0, _emberMetal.descriptor)({\n get: function () {\n return this.__foo__;\n },\n\n set: function (value) {\n this.__foo__ = value;\n }\n }), assert);\n\n factory.set('__foo__', 'foo');\n\n factory.install('bar', (0, _emberMetal.descriptor)({\n get: function () {\n return this.__bar__;\n },\n\n set: function (value) {\n this.__bar__ = value;\n }\n }), assert);\n\n factory.set('__bar__', 'bar');\n\n factory.install('fooBar', (0, _emberMetal.descriptor)({\n get: function () {\n return this.foo + '-' + this.bar;\n }\n }), assert);\n\n var obj = factory.finalize();\n\n assert.equal(obj.fooBar, 'foo-bar');\n\n obj.foo = 'FOO';\n\n assert.equal(obj.fooBar, 'FOO-bar');\n\n obj.__bar__ = 'BAR';\n\n assert.equal(obj.fooBar, 'FOO-BAR');\n\n assert.throws(function () {\n return obj.fooBar = 'foobar';\n }, TypeError);\n\n assert.equal(obj.fooBar, 'FOO-BAR');\n };\n\n return _class6;\n }(_internalTestHelpers.AbstractTestCase));\n });\n});","enifed('ember-metal/tests/events_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/props/events_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test listener should receive event - removing should remove'] = function (assert) {\n var obj = {};\n var count = 0;\n\n function F() {\n count++;\n }\n\n (0, _emberMetal.addListener)(obj, 'event!', F);\n assert.equal(count, 0, 'nothing yet');\n\n (0, _emberMetal.sendEvent)(obj, 'event!');\n assert.equal(count, 1, 'received event');\n\n (0, _emberMetal.removeListener)(obj, 'event!', F);\n\n count = 0;\n (0, _emberMetal.sendEvent)(obj, 'event!');\n assert.equal(count, 0, 'received event');\n };\n\n _class.prototype['@test listeners should be inherited'] = function (assert) {\n var obj = {};\n var count = 0;\n var F = function () {\n count++;\n };\n\n (0, _emberMetal.addListener)(obj, 'event!', F);\n\n var obj2 = Object.create(obj);\n\n assert.equal(count, 0, 'nothing yet');\n\n (0, _emberMetal.sendEvent)(obj2, 'event!');\n assert.equal(count, 1, 'received event');\n\n (0, _emberMetal.removeListener)(obj2, 'event!', F);\n\n count = 0;\n (0, _emberMetal.sendEvent)(obj2, 'event!');\n assert.equal(count, 0, 'did not receive event');\n\n (0, _emberMetal.sendEvent)(obj, 'event!');\n assert.equal(count, 1, 'should still invoke on parent');\n };\n\n _class.prototype['@test adding a listener more than once should only invoke once'] = function (assert) {\n var obj = {};\n var count = 0;\n function F() {\n count++;\n }\n (0, _emberMetal.addListener)(obj, 'event!', F);\n (0, _emberMetal.addListener)(obj, 'event!', F);\n\n (0, _emberMetal.sendEvent)(obj, 'event!');\n assert.equal(count, 1, 'should only invoke once');\n };\n\n _class.prototype['@test adding a listener with a target should invoke with target'] = function (assert) {\n var obj = {};\n var target = void 0;\n\n target = {\n count: 0,\n method: function () {\n this.count++;\n }\n };\n\n (0, _emberMetal.addListener)(obj, 'event!', target, target.method);\n (0, _emberMetal.sendEvent)(obj, 'event!');\n assert.equal(target.count, 1, 'should invoke');\n };\n\n _class.prototype['@test adding a listener with string method should lookup method on event delivery'] = function (assert) {\n var obj = {};\n var target = void 0;\n\n target = {\n count: 0,\n method: function () {}\n };\n\n (0, _emberMetal.addListener)(obj, 'event!', target, 'method');\n (0, _emberMetal.sendEvent)(obj, 'event!');\n assert.equal(target.count, 0, 'should invoke but do nothing');\n\n target.method = function () {\n this.count++;\n };\n (0, _emberMetal.sendEvent)(obj, 'event!');\n assert.equal(target.count, 1, 'should invoke now');\n };\n\n _class.prototype['@test calling sendEvent with extra params should be passed to listeners'] = function (assert) {\n var obj = {};\n var params = null;\n (0, _emberMetal.addListener)(obj, 'event!', function () {\n params = Array.prototype.slice.call(arguments);\n });\n\n (0, _emberMetal.sendEvent)(obj, 'event!', ['foo', 'bar']);\n assert.deepEqual(params, ['foo', 'bar'], 'params should be saved');\n };\n\n _class.prototype['@test hasListeners tells you if there are listeners for a given event'] = function (assert) {\n var obj = {};\n\n function F() {}\n function F2() {}\n\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), false, 'no listeners at first');\n\n (0, _emberMetal.addListener)(obj, 'event!', F);\n (0, _emberMetal.addListener)(obj, 'event!', F2);\n\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), true, 'has listeners');\n\n (0, _emberMetal.removeListener)(obj, 'event!', F);\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), true, 'has listeners');\n\n (0, _emberMetal.removeListener)(obj, 'event!', F2);\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), false, 'has no more listeners');\n\n (0, _emberMetal.addListener)(obj, 'event!', F);\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), true, 'has listeners');\n };\n\n _class.prototype['@test calling removeListener without method should remove all listeners'] = function (assert) {\n var obj = {};\n\n\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), false, 'no listeners at first');\n\n (0, _emberMetal.addListener)(obj, 'event!', function () {});\n (0, _emberMetal.addListener)(obj, 'event!', function () {});\n\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), true, 'has listeners');\n (0, _emberMetal.removeListener)(obj, 'event!');\n\n assert.equal((0, _emberMetal.hasListeners)(obj, 'event!'), false, 'has no more listeners');\n };\n\n _class.prototype['@test a listener can be added as part of a mixin'] = function (assert) {\n var triggered = 0;\n var MyMixin = _emberMetal.Mixin.create({\n foo1: (0, _emberMetal.on)('bar', function () {\n triggered++;\n }),\n\n foo2: (0, _emberMetal.on)('bar', function () {\n triggered++;\n })\n });\n\n var obj = {};\n MyMixin.apply(obj);\n\n (0, _emberMetal.sendEvent)(obj, 'bar');\n assert.equal(triggered, 2, 'should invoke listeners');\n };\n\n _class.prototype['@test \\'on\\' asserts for invalid arguments'] = function () {\n expectAssertion(function () {\n _emberMetal.Mixin.create({\n foo1: (0, _emberMetal.on)('bar')\n });\n }, 'on expects function as last argument');\n\n expectAssertion(function () {\n _emberMetal.Mixin.create({\n foo1: (0, _emberMetal.on)(function () {})\n });\n }, 'on called without valid event names');\n };\n\n _class.prototype['@test a listener added as part of a mixin may be overridden'] = function (assert) {\n var triggered = 0;\n var FirstMixin = _emberMetal.Mixin.create({\n foo: (0, _emberMetal.on)('bar', function () {\n triggered++;\n })\n });\n var SecondMixin = _emberMetal.Mixin.create({\n foo: (0, _emberMetal.on)('baz', function () {\n triggered++;\n })\n });\n\n var obj = {};\n FirstMixin.apply(obj);\n SecondMixin.apply(obj);\n\n (0, _emberMetal.sendEvent)(obj, 'bar');\n assert.equal(triggered, 0, 'should not invoke from overridden property');\n\n (0, _emberMetal.sendEvent)(obj, 'baz');\n assert.equal(triggered, 1, 'should invoke from subclass property');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/expand_properties_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var foundProperties = [];\n\n function addProperty(property) {\n foundProperties.push(property);\n }\n\n (0, _internalTestHelpers.moduleFor)('Property Brace Expansion Test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n foundProperties = [];\n };\n\n _class.prototype['@test Properties without expansions are unaffected'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('a', addProperty);\n (0, _emberMetal.expandProperties)('a.b', addProperty);\n (0, _emberMetal.expandProperties)('a.b.[]', addProperty);\n (0, _emberMetal.expandProperties)('a.b.@each.c', addProperty);\n\n assert.deepEqual(['a', 'a.b', 'a.b.[]', 'a.b.@each.c'].sort(), foundProperties.sort());\n };\n\n _class.prototype['@test A single expansion at the end expands properly'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('a.b.{c,d}', addProperty);\n\n assert.deepEqual(['a.b.c', 'a.b.d'].sort(), foundProperties.sort());\n };\n\n _class.prototype['@test A property with only a brace expansion expands correctly'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('{a,b,c}', addProperty);\n\n assert.deepEqual(['a', 'b', 'c'].sort(), foundProperties.sort());\n };\n\n _class.prototype['@test Expansions with single properties only expand once'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('a.b.{c}.d.{e}', addProperty);\n\n assert.deepEqual(['a.b.c.d.e'], foundProperties);\n };\n\n _class.prototype['@test A single brace expansion expands correctly'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('a.{b,c,d}.e', addProperty);\n\n assert.deepEqual(['a.b.e', 'a.c.e', 'a.d.e'].sort(), foundProperties.sort());\n };\n\n _class.prototype['@test Multiple brace expansions work correctly'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('{a,b,c}.d.{e,f}.g', addProperty);\n\n assert.deepEqual(['a.d.e.g', 'a.d.f.g', 'b.d.e.g', 'b.d.f.g', 'c.d.e.g', 'c.d.f.g'].sort(), foundProperties.sort());\n };\n\n _class.prototype['@test A property with only brace expansions expands correctly'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('{a,b,c}.{d}.{e,f}', addProperty);\n\n assert.deepEqual(['a.d.e', 'a.d.f', 'b.d.e', 'b.d.f', 'c.d.e', 'c.d.f'].sort(), foundProperties.sort());\n };\n\n _class.prototype['@test Nested brace expansions are not allowed'] = function () {\n\n ['a.{b.{c,d}}', 'a.{{b}.c}', 'a.{b,c}.{d.{e,f}.g', 'a.{b.{c}', 'a.{b,c}}', 'model.{bar,baz'].forEach(function (invalidProperties) {\n expectAssertion(function () {\n return (0, _emberMetal.expandProperties)(invalidProperties, addProperty);\n });\n }, /Brace expanded properties have to be balanced and cannot be nested/);\n };\n\n _class.prototype['@test A property with no braces does not expand'] = function (assert) {\n assert.expect(1);\n\n (0, _emberMetal.expandProperties)('a,b,c.d.e,f', addProperty);\n\n assert.deepEqual(foundProperties, ['a,b,c.d.e,f']);\n };\n\n _class.prototype['@test A pattern must be a string'] = function (assert) {\n assert.expect(1);\n\n expectAssertion(function () {\n (0, _emberMetal.expandProperties)([1, 2], addProperty);\n }, /A computed property key must be a string/);\n };\n\n _class.prototype['@test A pattern must not contain a space'] = function (assert) {\n assert.expect(1);\n\n expectAssertion(function () {\n (0, _emberMetal.expandProperties)('{a, b}', addProperty);\n }, /Brace expanded properties cannot contain spaces, e.g. \"user.{firstName, lastName}\" should be \"user.{firstName,lastName}\"/);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/injected_property_test', ['ember-babel', 'ember-owner', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('InjectedProperty', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test injected properties should be descriptors'] = function (assert) {\n assert.ok(new _emberMetal.InjectedProperty() instanceof _emberMetal.Descriptor);\n };\n\n _class.prototype['@test injected properties should be overridable'] = function (assert) {\n var obj = {};\n (0, _emberMetal.defineProperty)(obj, 'foo', new _emberMetal.InjectedProperty());\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar', 'should return the overridden value');\n };\n\n _class.prototype['@test getting on an object without an owner or container should fail assertion'] = function () {\n var obj = {};\n (0, _emberMetal.defineProperty)(obj, 'foo', new _emberMetal.InjectedProperty('type', 'name'));\n\n expectAssertion(function () {\n (0, _emberMetal.get)(obj, 'foo');\n }, /Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container./);\n };\n\n _class.prototype['@test getting on an object without an owner but with a container should not fail'] = function (assert) {\n var obj = {\n container: {\n lookup: function (key) {\n assert.ok(true, 'should call container.lookup');\n return key;\n }\n }\n };\n\n (0, _emberMetal.defineProperty)(obj, 'foo', new _emberMetal.InjectedProperty('type', 'name'));\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'type:name', 'should return the value of container.lookup');\n };\n\n _class.prototype['@test getting should return a lookup on the container'] = function (assert) {\n assert.expect(2);\n\n var obj = {};\n\n (0, _emberOwner.setOwner)(obj, {\n lookup: function (key) {\n assert.ok(true, 'should call container.lookup');\n return key;\n }\n });\n\n (0, _emberMetal.defineProperty)(obj, 'foo', new _emberMetal.InjectedProperty('type', 'name'));\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'type:name', 'should return the value of container.lookup');\n };\n\n _class.prototype['@test omitting the lookup name should default to the property name'] = function (assert) {\n var obj = {};\n\n (0, _emberOwner.setOwner)(obj, {\n lookup: function (key) {\n return key;\n }\n });\n\n (0, _emberMetal.defineProperty)(obj, 'foo', new _emberMetal.InjectedProperty('type'));\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'type:foo', 'should lookup the type using the property name');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/is_blank_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('isBlank', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test isBlank'] = function (assert) {\n\n assert.equal(true, (0, _emberMetal.isBlank)(null), 'for null');\n assert.equal(true, (0, _emberMetal.isBlank)(undefined), 'for undefined');\n assert.equal(true, (0, _emberMetal.isBlank)(''), 'for an empty String');\n assert.equal(true, (0, _emberMetal.isBlank)(' '), 'for a whitespace String');\n assert.equal(true, (0, _emberMetal.isBlank)('\\n\\t'), 'for another whitespace String');\n assert.equal(false, (0, _emberMetal.isBlank)('\\n\\t Hi'), 'for a String with whitespaces');\n assert.equal(false, (0, _emberMetal.isBlank)(true), 'for true');\n assert.equal(false, (0, _emberMetal.isBlank)(false), 'for false');\n assert.equal(false, (0, _emberMetal.isBlank)('string'), 'for a String');\n assert.equal(false, (0, _emberMetal.isBlank)(function () {}), 'for a Function');\n assert.equal(false, (0, _emberMetal.isBlank)(0), 'for 0');\n assert.equal(true, (0, _emberMetal.isBlank)([]), 'for an empty Array');\n assert.equal(false, (0, _emberMetal.isBlank)({}), 'for an empty Object');\n assert.equal(true, (0, _emberMetal.isBlank)({ length: 0 }), \"for an Object that has zero 'length'\");\n assert.equal(false, (0, _emberMetal.isBlank)([1, 2, 3]), 'for a non-empty array');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/is_empty_test', ['ember-babel', 'ember-metal', '@ember/map', '@ember/map/lib/ordered-set', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _map, _orderedSet, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('isEmpty', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test isEmpty'] = function (assert) {\n\n assert.equal(true, (0, _emberMetal.isEmpty)(null), 'for null');\n assert.equal(true, (0, _emberMetal.isEmpty)(undefined), 'for undefined');\n assert.equal(true, (0, _emberMetal.isEmpty)(''), 'for an empty String');\n assert.equal(false, (0, _emberMetal.isEmpty)(' '), 'for a whitespace String');\n assert.equal(false, (0, _emberMetal.isEmpty)('\\n\\t'), 'for another whitespace String');\n assert.equal(false, (0, _emberMetal.isEmpty)(true), 'for true');\n assert.equal(false, (0, _emberMetal.isEmpty)(false), 'for false');\n assert.equal(false, (0, _emberMetal.isEmpty)('string'), 'for a String');\n assert.equal(false, (0, _emberMetal.isEmpty)(function () {}), 'for a Function');\n assert.equal(false, (0, _emberMetal.isEmpty)(0), 'for 0');\n assert.equal(true, (0, _emberMetal.isEmpty)([]), 'for an empty Array');\n assert.equal(false, (0, _emberMetal.isEmpty)({}), 'for an empty Object');\n assert.equal(true, (0, _emberMetal.isEmpty)({ length: 0 }), \"for an Object that has zero 'length'\");\n };\n\n _class.prototype['@test isEmpty Map'] = function (assert) {\n expectDeprecation(function () {\n var map = new _map.default();\n assert.equal(true, (0, _emberMetal.isEmpty)(map), 'Empty map is empty');\n map.set('foo', 'bar');\n assert.equal(false, (0, _emberMetal.isEmpty)(map), 'Map is not empty');\n }, 'Use of @ember/Map is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n };\n\n _class.prototype['@test isEmpty Ember.OrderedSet'] = function (assert) {\n expectDeprecation(function () {\n var orderedSet = new _orderedSet.default();\n assert.equal(true, (0, _emberMetal.isEmpty)(orderedSet), 'Empty ordered set is empty');\n orderedSet.add('foo');\n assert.equal(false, (0, _emberMetal.isEmpty)(orderedSet), 'Ordered set is not empty');\n }, 'Use of @ember/OrderedSet is deprecated. Please use native `Map` instead', { id: 'ember-map-deprecation', until: '3.5.0' });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/is_none_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('isNone', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test isNone'] = function (assert) {\n\n assert.equal(true, (0, _emberMetal.isNone)(null), 'for null');\n assert.equal(true, (0, _emberMetal.isNone)(undefined), 'for undefined');\n assert.equal(false, (0, _emberMetal.isNone)(''), 'for an empty String');\n assert.equal(false, (0, _emberMetal.isNone)(true), 'for true');\n assert.equal(false, (0, _emberMetal.isNone)(false), 'for false');\n assert.equal(false, (0, _emberMetal.isNone)('string'), 'for a String');\n assert.equal(false, (0, _emberMetal.isNone)(function () {}), 'for a Function');\n assert.equal(false, (0, _emberMetal.isNone)(0), 'for 0');\n assert.equal(false, (0, _emberMetal.isNone)([]), 'for an empty Array');\n assert.equal(false, (0, _emberMetal.isNone)({}), 'for an empty Object');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/is_present_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('isPresent', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test isPresent'] = function (assert) {\n\n assert.equal(false, (0, _emberMetal.isPresent)(), 'for no params');\n assert.equal(false, (0, _emberMetal.isPresent)(null), 'for null');\n assert.equal(false, (0, _emberMetal.isPresent)(undefined), 'for undefined');\n assert.equal(false, (0, _emberMetal.isPresent)(''), 'for an empty String');\n assert.equal(false, (0, _emberMetal.isPresent)(' '), 'for a whitespace String');\n assert.equal(false, (0, _emberMetal.isPresent)('\\n\\t'), 'for another whitespace String');\n assert.equal(true, (0, _emberMetal.isPresent)('\\n\\t Hi'), 'for a String with whitespaces');\n assert.equal(true, (0, _emberMetal.isPresent)(true), 'for true');\n assert.equal(true, (0, _emberMetal.isPresent)(false), 'for false');\n assert.equal(true, (0, _emberMetal.isPresent)('string'), 'for a String');\n assert.equal(true, (0, _emberMetal.isPresent)(function () {}), 'for a Function');\n assert.equal(true, (0, _emberMetal.isPresent)(0), 'for 0');\n assert.equal(false, (0, _emberMetal.isPresent)([]), 'for an empty Array');\n assert.equal(true, (0, _emberMetal.isPresent)({}), 'for an empty Object');\n assert.equal(false, (0, _emberMetal.isPresent)({ length: 0 }), \"for an Object that has zero 'length'\");\n assert.equal(true, (0, _emberMetal.isPresent)([1, 2, 3]), 'for a non-empty array');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/libraries_test', ['ember-babel', '@ember/debug', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _debug, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var libs = void 0,\n registry = void 0; /* globals EmberDev */\n\n var originalWarn = (0, _debug.getDebugFunction)('warn');\n function noop() {}\n\n (0, _internalTestHelpers.moduleFor)('Libraries registry', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n libs = new _emberMetal.Libraries();\n registry = libs._registry;\n };\n\n _class.prototype.afterEach = function () {\n libs = null;\n registry = null;\n\n (0, _debug.setDebugFunction)('warn', originalWarn);\n };\n\n _class.prototype['@test core libraries come before other libraries'] = function (assert) {\n assert.expect(2);\n\n libs.register('my-lib', '2.0.0a');\n libs.registerCoreLibrary('DS', '1.0.0-beta.2');\n\n assert.equal(registry[0].name, 'DS');\n assert.equal(registry[1].name, 'my-lib');\n };\n\n _class.prototype['@test only the first registration of a library is stored'] = function (assert) {\n assert.expect(3);\n\n // overwrite warn to supress the double registration warning (see https://github.com/emberjs/ember.js/issues/16391)\n (0, _debug.setDebugFunction)('warn', noop);\n libs.register('magic', 1.23);\n libs.register('magic', 2.23);\n\n assert.equal(registry[0].name, 'magic');\n assert.equal(registry[0].version, 1.23);\n assert.equal(registry.length, 1);\n };\n\n _class.prototype['@test isRegistered returns correct value'] = function (assert) {\n assert.expect(0);\n };\n\n _class.prototype['@test attempting to register a library that is already registered warns you'] = function (assert) {\n if (EmberDev && EmberDev.runningProdBuild) {\n assert.ok(true, 'Logging does not occur in production builds');\n return;\n }\n\n assert.expect(1);\n\n libs.register('magic', 1.23);\n\n (0, _debug.setDebugFunction)('warn', function (msg, test) {\n if (!test) {\n assert.equal(msg, 'Library \"magic\" is already registered with Ember.');\n }\n });\n\n // Should warn us\n libs.register('magic', 2.23);\n };\n\n _class.prototype['@test libraries can be de-registered'] = function (assert) {\n assert.expect(2);\n\n libs.register('lib1', '1.0.0b');\n libs.register('lib2', '1.0.0b');\n libs.register('lib3', '1.0.0b');\n\n libs.deRegister('lib1');\n libs.deRegister('lib3');\n\n assert.equal(registry[0].name, 'lib2');\n assert.equal(registry.length, 1);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/main_test', ['ember-babel', 'ember/version', 'internal-test-helpers'], function (_emberBabel, _version, _internalTestHelpers) {\n 'use strict';\n\n // From https://github.com/semver/semver.org/issues/59 & https://regex101.com/r/vW1jA8/6\n\n var SEMVER_REGEX = /^((?:0|(?:[1-9]\\d*)))\\.((?:0|(?:[1-9]\\d*)))\\.((?:0|(?:[1-9]\\d*)))(?:-([0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*))?$/;\n\n (0, _internalTestHelpers.moduleFor)('ember-metal/core/main', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.VERSION is in alignment with SemVer v2.0.0'] = function (assert) {\n assert.ok(SEMVER_REGEX.test(_version.default), 'Ember.VERSION (' + _version.default + ')is valid SemVer v2.0.0');\n };\n\n _class.prototype['@test SEMVER_REGEX properly validates and invalidates version numbers'] = function (assert) {\n function validateVersionString(versionString, expectedResult) {\n assert.equal(SEMVER_REGEX.test(versionString), expectedResult);\n }\n\n // Positive test cases\n validateVersionString('1.11.3', true);\n validateVersionString('1.0.0-beta.16.1', true);\n validateVersionString('1.12.1+canary.aba1412', true);\n validateVersionString('2.0.0-beta.1+canary.bb344775', true);\n validateVersionString('3.1.0-foobarBaz+30d70bd3', true);\n\n // Negative test cases\n validateVersionString('1.11.3.aba18a', false);\n validateVersionString('1.11', false);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/alias_method_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n function validateAliasMethod(assert, obj) {\n assert.equal(obj.fooMethod(), 'FOO', 'obj.fooMethod()');\n assert.equal(obj.barMethod(), 'FOO', 'obj.barMethod should be a copy of foo');\n }\n\n (0, _internalTestHelpers.moduleFor)('aliasMethod', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test methods of another name are aliased when the mixin is applied'] = function (assert) {\n var MyMixin = _emberMetal.Mixin.create({\n fooMethod: function () {\n return 'FOO';\n },\n\n barMethod: (0, _emberMetal.aliasMethod)('fooMethod')\n });\n\n var obj = MyMixin.apply({});\n validateAliasMethod(assert, obj);\n };\n\n _class.prototype['@test should follow aliasMethods all the way down'] = function (assert) {\n var MyMixin = _emberMetal.Mixin.create({\n bar: (0, _emberMetal.aliasMethod)('foo'), baz: function () {\n return 'baz';\n },\n\n foo: (0, _emberMetal.aliasMethod)('baz')\n });\n\n var obj = MyMixin.apply({});\n assert.equal((0, _emberMetal.get)(obj, 'bar')(), 'baz', 'should have followed aliasMethods');\n };\n\n _class.prototype['@test should alias methods from other dependent mixins'] = function (assert) {\n var BaseMixin = _emberMetal.Mixin.create({\n fooMethod: function () {\n return 'FOO';\n }\n });\n\n var MyMixin = _emberMetal.Mixin.create(BaseMixin, {\n barMethod: (0, _emberMetal.aliasMethod)('fooMethod')\n });\n\n var obj = MyMixin.apply({});\n validateAliasMethod(assert, obj);\n };\n\n _class.prototype['@test should alias methods from other mixins applied at same time'] = function (assert) {\n var BaseMixin = _emberMetal.Mixin.create({\n fooMethod: function () {\n return 'FOO';\n }\n });\n\n var MyMixin = _emberMetal.Mixin.create({\n barMethod: (0, _emberMetal.aliasMethod)('fooMethod')\n });\n\n var obj = (0, _emberMetal.mixin)({}, BaseMixin, MyMixin);\n validateAliasMethod(assert, obj);\n };\n\n _class.prototype['@test should alias methods from mixins already applied on object'] = function (assert) {\n var BaseMixin = _emberMetal.Mixin.create({\n quxMethod: function () {\n return 'qux';\n }\n });\n\n var MyMixin = _emberMetal.Mixin.create({\n bar: (0, _emberMetal.aliasMethod)('foo'),\n barMethod: (0, _emberMetal.aliasMethod)('fooMethod')\n });\n\n var obj = {\n fooMethod: function () {\n return 'FOO';\n }\n };\n\n BaseMixin.apply(obj);\n MyMixin.apply(obj);\n\n validateAliasMethod(assert, obj);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/apply_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n function K() {}\n\n (0, _internalTestHelpers.moduleFor)('Mixin.apply', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test using apply() should apply properties'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({ foo: 'FOO', baz: K });\n var obj = {};\n (0, _emberMetal.mixin)(obj, MixinA);\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'FOO', 'should apply foo');\n assert.equal((0, _emberMetal.get)(obj, 'baz'), K, 'should apply foo');\n };\n\n _class.prototype['@test applying anonymous properties'] = function (assert) {\n var obj = {};\n (0, _emberMetal.mixin)(obj, {\n foo: 'FOO',\n baz: K\n });\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'FOO', 'should apply foo');\n assert.equal((0, _emberMetal.get)(obj, 'baz'), K, 'should apply foo');\n };\n\n _class.prototype['@test applying null values'] = function () {\n expectAssertion(function () {\n return (0, _emberMetal.mixin)({}, null);\n });\n };\n\n _class.prototype['@test applying a property with an undefined value'] = function (assert) {\n var obj = { tagName: '' };\n (0, _emberMetal.mixin)(obj, { tagName: undefined });\n\n assert.strictEqual((0, _emberMetal.get)(obj, 'tagName'), '');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/computed_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n function K() {\n return this;\n }\n\n (0, _internalTestHelpers.moduleFor)('Mixin Computed Properties', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test overriding computed properties'] = function (assert) {\n var MixinA = void 0,\n MixinB = void 0,\n MixinC = void 0,\n MixinD = void 0;\n var obj = void 0;\n\n MixinA = _emberMetal.Mixin.create({\n aProp: (0, _emberMetal.computed)(function () {\n return 'A';\n })\n });\n\n MixinB = _emberMetal.Mixin.create(MixinA, {\n aProp: (0, _emberMetal.computed)(function () {\n return this._super.apply(this, arguments) + 'B';\n })\n });\n\n MixinC = _emberMetal.Mixin.create(MixinA, {\n aProp: (0, _emberMetal.computed)(function () {\n return this._super.apply(this, arguments) + 'C';\n })\n });\n\n MixinD = _emberMetal.Mixin.create({\n aProp: (0, _emberMetal.computed)(function () {\n return this._super.apply(this, arguments) + 'D';\n })\n });\n\n obj = {};\n MixinB.apply(obj);\n assert.equal((0, _emberMetal.get)(obj, 'aProp'), 'AB', 'should expose super for B');\n\n obj = {};\n MixinC.apply(obj);\n assert.equal((0, _emberMetal.get)(obj, 'aProp'), 'AC', 'should expose super for C');\n\n obj = {};\n\n MixinA.apply(obj);\n MixinD.apply(obj);\n assert.equal((0, _emberMetal.get)(obj, 'aProp'), 'AD', 'should define super for D');\n\n obj = {};\n (0, _emberMetal.defineProperty)(obj, 'aProp', (0, _emberMetal.computed)(function () {\n return 'obj';\n }));\n MixinD.apply(obj);\n assert.equal((0, _emberMetal.get)(obj, 'aProp'), 'objD', 'should preserve original computed property');\n };\n\n _class.prototype['@test calling set on overridden computed properties'] = function (assert) {\n var SuperMixin = void 0,\n SubMixin = void 0;\n var obj = void 0;\n\n var superGetOccurred = false;\n var superSetOccurred = false;\n\n SuperMixin = _emberMetal.Mixin.create({\n aProp: (0, _emberMetal.computed)({\n get: function () {\n superGetOccurred = true;\n },\n set: function () {\n superSetOccurred = true;\n }\n })\n });\n\n SubMixin = _emberMetal.Mixin.create(SuperMixin, {\n aProp: (0, _emberMetal.computed)({\n get: function () {\n return this._super.apply(this, arguments);\n },\n set: function () {\n return this._super.apply(this, arguments);\n }\n })\n });\n\n obj = {};\n SubMixin.apply(obj);\n\n (0, _emberMetal.set)(obj, 'aProp', 'set thyself');\n assert.ok(superSetOccurred, 'should pass set to _super');\n\n superSetOccurred = false; // reset the set assertion\n\n obj = {};\n SubMixin.apply(obj);\n\n (0, _emberMetal.get)(obj, 'aProp');\n assert.ok(superGetOccurred, 'should pass get to _super');\n\n (0, _emberMetal.set)(obj, 'aProp', 'set thyself');\n assert.ok(superSetOccurred, 'should pass set to _super after getting');\n };\n\n _class.prototype['@test setter behavior works properly when overriding computed properties'] = function (assert) {\n var obj = {};\n\n var MixinA = _emberMetal.Mixin.create({\n cpWithSetter2: (0, _emberMetal.computed)(K),\n cpWithSetter3: (0, _emberMetal.computed)(K),\n cpWithoutSetter: (0, _emberMetal.computed)(K)\n });\n\n var cpWasCalled = false;\n\n var MixinB = _emberMetal.Mixin.create({\n cpWithSetter2: (0, _emberMetal.computed)({\n get: K,\n set: function () {\n cpWasCalled = true;\n }\n }),\n\n cpWithSetter3: (0, _emberMetal.computed)({\n get: K,\n set: function () {\n cpWasCalled = true;\n }\n }),\n\n cpWithoutSetter: (0, _emberMetal.computed)(function () {\n cpWasCalled = true;\n })\n });\n\n MixinA.apply(obj);\n MixinB.apply(obj);\n\n (0, _emberMetal.set)(obj, 'cpWithSetter2', 'test');\n assert.ok(cpWasCalled, 'The computed property setter was called when defined with two args');\n cpWasCalled = false;\n\n (0, _emberMetal.set)(obj, 'cpWithSetter3', 'test');\n assert.ok(cpWasCalled, 'The computed property setter was called when defined with three args');\n cpWasCalled = false;\n\n (0, _emberMetal.set)(obj, 'cpWithoutSetter', 'test');\n assert.equal((0, _emberMetal.get)(obj, 'cpWithoutSetter'), 'test', 'The default setter was called, the value is correct');\n assert.ok(!cpWasCalled, 'The default setter was called, not the CP itself');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/concatenated_properties_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Mixin concatenatedProperties', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test defining concatenated properties should concat future version'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n concatenatedProperties: ['foo'],\n foo: ['a', 'b', 'c']\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: ['d', 'e', 'f']\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), ['a', 'b', 'c', 'd', 'e', 'f']);\n };\n\n _class.prototype['@test defining concatenated properties should concat future version'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n concatenatedProperties: null\n });\n\n var MixinB = _emberMetal.Mixin.create({\n concatenatedProperties: null\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB);\n\n assert.deepEqual(obj.concatenatedProperties, []);\n };\n\n _class.prototype['@test concatenatedProperties should be concatenated'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n concatenatedProperties: ['foo'],\n foo: ['a', 'b', 'c']\n });\n\n var MixinB = _emberMetal.Mixin.create({\n concatenatedProperties: 'bar',\n foo: ['d', 'e', 'f'],\n bar: [1, 2, 3]\n });\n\n var MixinC = _emberMetal.Mixin.create({\n bar: [4, 5, 6]\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB, MixinC);\n assert.deepEqual((0, _emberMetal.get)(obj, 'concatenatedProperties'), ['foo', 'bar'], 'get concatenatedProperties');\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), ['a', 'b', 'c', 'd', 'e', 'f'], 'get foo');\n assert.deepEqual((0, _emberMetal.get)(obj, 'bar'), [1, 2, 3, 4, 5, 6], 'get bar');\n };\n\n _class.prototype['@test adding a prop that is not an array should make array'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n concatenatedProperties: ['foo'],\n foo: [1, 2, 3]\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: 4\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), [1, 2, 3, 4]);\n };\n\n _class.prototype['@test adding a prop that is not an array should make array'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n concatenatedProperties: ['foo'],\n foo: 'bar'\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), ['bar']);\n };\n\n _class.prototype['@test adding a non-concatenable property that already has a defined value should result in an array with both values'] = function (assert) {\n var mixinA = _emberMetal.Mixin.create({\n foo: 1\n });\n\n var mixinB = _emberMetal.Mixin.create({\n concatenatedProperties: ['foo'],\n foo: 2\n });\n\n var obj = (0, _emberMetal.mixin)({}, mixinA, mixinB);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), [1, 2]);\n };\n\n _class.prototype['@test adding a concatenable property that already has a defined value should result in a concatenated value'] = function (assert) {\n var mixinA = _emberMetal.Mixin.create({\n foobar: 'foo'\n });\n\n var mixinB = _emberMetal.Mixin.create({\n concatenatedProperties: ['foobar'],\n foobar: 'bar'\n });\n\n var obj = (0, _emberMetal.mixin)({}, mixinA, mixinB);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foobar'), ['foo', 'bar']);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/detect_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Mixin.detect', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test detect() finds a directly applied mixin'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create();\n var obj = {};\n\n assert.equal(MixinA.detect(obj), false, 'MixinA.detect(obj) before apply()');\n\n MixinA.apply(obj);\n assert.equal(MixinA.detect(obj), true, 'MixinA.detect(obj) after apply()');\n };\n\n _class.prototype['@test detect() finds nested mixins'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({});\n var MixinB = _emberMetal.Mixin.create(MixinA);\n var obj = {};\n\n assert.equal(MixinA.detect(obj), false, 'MixinA.detect(obj) before apply()');\n\n MixinB.apply(obj);\n assert.equal(MixinA.detect(obj), true, 'MixinA.detect(obj) after apply()');\n };\n\n _class.prototype['@test detect() finds mixins on other mixins'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({});\n var MixinB = _emberMetal.Mixin.create(MixinA);\n assert.equal(MixinA.detect(MixinB), true, 'MixinA is part of MixinB');\n assert.equal(MixinB.detect(MixinA), false, 'MixinB is not part of MixinA');\n };\n\n _class.prototype['@test detect handles null values'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create();\n assert.equal(MixinA.detect(null), false);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/introspection_test', ['ember-babel', 'ember-utils', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var PrivateProperty = _emberMetal.Mixin.create({\n _foo: '_FOO'\n }); // NOTE: A previous iteration differentiated between public and private props\n // as well as methods vs props. We are just keeping these for testing; the\n // current impl doesn't care about the differences as much...\n\n var PublicProperty = _emberMetal.Mixin.create({\n foo: 'FOO'\n });\n var PrivateMethod = _emberMetal.Mixin.create({\n _fooMethod: function () {}\n });\n var PublicMethod = _emberMetal.Mixin.create({\n fooMethod: function () {}\n });\n var BarProperties = _emberMetal.Mixin.create({\n _bar: '_BAR',\n bar: 'bar'\n });\n var BarMethods = _emberMetal.Mixin.create({\n _barMethod: function () {},\n barMethod: function () {}\n });\n\n var Combined = _emberMetal.Mixin.create(BarProperties, BarMethods);\n\n var obj = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Basic introspection', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n obj = {};\n (0, _emberMetal.mixin)(obj, PrivateProperty, PublicProperty, PrivateMethod, PublicMethod, Combined);\n };\n\n _class.prototype['@test Ember.mixins()'] = function (assert) {\n function mapGuids(ary) {\n return ary.map(function (x) {\n return (0, _emberUtils.guidFor)(x);\n });\n }\n\n assert.deepEqual(mapGuids(_emberMetal.Mixin.mixins(obj)), mapGuids([PrivateProperty, PublicProperty, PrivateMethod, PublicMethod, Combined, BarProperties, BarMethods]), 'should return included mixins');\n };\n\n _class.prototype['@test setting a NAME_KEY on a mixin does not error'] = function (assert) {\n assert.expect(0);\n\n var instance = _emberMetal.Mixin.create();\n instance[_emberUtils.NAME_KEY] = 'My special name!';\n };\n\n _class.prototype['@test setting a NAME_KEY on a mixin instance does not error'] = function (assert) {\n var _Mixin$create;\n\n assert.expect(0);\n\n _emberMetal.Mixin.create((_Mixin$create = {}, _Mixin$create[_emberUtils.NAME_KEY] = 'My special name', _Mixin$create));\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/merged_properties_test', ['ember-babel', 'ember-runtime', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Mixin mergedProperties', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test defining mergedProperties should merge future version'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n mergedProperties: ['foo'],\n foo: { a: true, b: true, c: true }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: { d: true, e: true, f: true }\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), {\n a: true,\n b: true,\n c: true,\n d: true,\n e: true,\n f: true\n });\n };\n\n _class.prototype['@test defining mergedProperties on future mixin should merged into past'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n foo: { a: true, b: true, c: true }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n mergedProperties: ['foo'],\n foo: { d: true, e: true, f: true }\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), {\n a: true,\n b: true,\n c: true,\n d: true,\n e: true,\n f: true\n });\n };\n\n _class.prototype['@test defining mergedProperties with null properties should keep properties null'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n mergedProperties: ['foo'],\n foo: null\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: null\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB);\n assert.equal((0, _emberMetal.get)(obj, 'foo'), null);\n };\n\n _class.prototype[\"@test mergedProperties' properties can get overwritten\"] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n mergedProperties: ['foo'],\n foo: { a: 1 }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: { a: 2 }\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB);\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), { a: 2 });\n };\n\n _class.prototype['@test mergedProperties should be concatenated'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n mergedProperties: ['foo'],\n foo: { a: true, b: true, c: true }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n mergedProperties: 'bar',\n foo: { d: true, e: true, f: true },\n bar: { a: true, l: true }\n });\n\n var MixinC = _emberMetal.Mixin.create({\n bar: { e: true, x: true }\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB, MixinC);\n assert.deepEqual((0, _emberMetal.get)(obj, 'mergedProperties'), ['foo', 'bar'], 'get mergedProperties');\n assert.deepEqual((0, _emberMetal.get)(obj, 'foo'), { a: true, b: true, c: true, d: true, e: true, f: true }, 'get foo');\n assert.deepEqual((0, _emberMetal.get)(obj, 'bar'), { a: true, l: true, e: true, x: true }, 'get bar');\n };\n\n _class.prototype['@test mergedProperties should exist even if not explicitly set on create'] = function (assert) {\n var AnObj = _emberRuntime.Object.extend({\n mergedProperties: ['options'],\n options: {\n a: 'a',\n b: {\n c: 'ccc'\n }\n }\n });\n\n var obj = AnObj.create({\n options: {\n a: 'A'\n }\n });\n\n assert.equal((0, _emberMetal.get)(obj, 'options').a, 'A');\n assert.equal((0, _emberMetal.get)(obj, 'options').b.c, 'ccc');\n };\n\n _class.prototype['@test defining mergedProperties at create time should not modify the prototype'] = function (assert) {\n var AnObj = _emberRuntime.Object.extend({\n mergedProperties: ['options'],\n options: {\n a: 1\n }\n });\n\n var objA = AnObj.create({\n options: {\n a: 2\n }\n });\n var objB = AnObj.create({\n options: {\n a: 3\n }\n });\n\n assert.equal((0, _emberMetal.get)(objA, 'options').a, 2);\n assert.equal((0, _emberMetal.get)(objB, 'options').a, 3);\n };\n\n _class.prototype[\"@test mergedProperties' overwriting methods can call _super\"] = function (assert) {\n assert.expect(4);\n\n var MixinA = _emberMetal.Mixin.create({\n mergedProperties: ['foo'],\n foo: {\n meth: function (a) {\n assert.equal(a, 'WOOT', \"_super successfully called MixinA's `foo.meth` method\");\n return 'WAT';\n }\n }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: {\n meth: function () {\n assert.ok(true, \"MixinB's `foo.meth` method called\");\n return this._super.apply(this, arguments);\n }\n }\n });\n\n var MixinC = _emberMetal.Mixin.create({\n foo: {\n meth: function (a) {\n assert.ok(true, \"MixinC's `foo.meth` method called\");\n return this._super(a);\n }\n }\n });\n\n var obj = (0, _emberMetal.mixin)({}, MixinA, MixinB, MixinC);\n assert.equal(obj.foo.meth('WOOT'), 'WAT');\n };\n\n _class.prototype['@test Merging an Array should raise an error'] = function (assert) {\n assert.expect(1);\n\n var MixinA = _emberMetal.Mixin.create({\n mergedProperties: ['foo'],\n foo: { a: true, b: true, c: true }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: ['a']\n });\n\n expectAssertion(function () {\n (0, _emberMetal.mixin)({}, MixinA, MixinB);\n }, 'You passed in `[\"a\"]` as the value for `foo` but `foo` cannot be an Array');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/method_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Mixin Methods', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test defining simple methods'] = function (assert) {\n var MixinA = void 0,\n obj = void 0,\n props = void 0;\n\n props = {\n publicMethod: function () {\n return 'publicMethod';\n },\n _privateMethod: function () {\n return 'privateMethod';\n }\n };\n\n MixinA = _emberMetal.Mixin.create(props);\n obj = {};\n MixinA.apply(obj);\n\n // but should be defined\n assert.equal(props.publicMethod(), 'publicMethod', 'publicMethod is func');\n assert.equal(props._privateMethod(), 'privateMethod', 'privateMethod is func');\n };\n\n _class.prototype['@test overriding public methods'] = function (assert) {\n var MixinA = void 0,\n MixinB = void 0,\n MixinD = void 0,\n MixinF = void 0,\n obj = void 0;\n\n MixinA = _emberMetal.Mixin.create({\n publicMethod: function () {\n return 'A';\n }\n });\n\n MixinB = _emberMetal.Mixin.create(MixinA, {\n publicMethod: function () {\n return this._super.apply(this, arguments) + 'B';\n }\n });\n\n MixinD = _emberMetal.Mixin.create(MixinA, {\n publicMethod: function () {\n return this._super.apply(this, arguments) + 'D';\n }\n });\n\n MixinF = _emberMetal.Mixin.create({\n publicMethod: function () {\n return this._super.apply(this, arguments) + 'F';\n }\n });\n\n obj = {};\n MixinB.apply(obj);\n assert.equal(obj.publicMethod(), 'AB', 'should define super for A and B');\n\n obj = {};\n MixinD.apply(obj);\n assert.equal(obj.publicMethod(), 'AD', 'should define super for A and B');\n\n obj = {};\n MixinA.apply(obj);\n MixinF.apply(obj);\n assert.equal(obj.publicMethod(), 'AF', 'should define super for A and F');\n\n obj = {\n publicMethod: function () {\n return 'obj';\n }\n };\n MixinF.apply(obj);\n assert.equal(obj.publicMethod(), 'objF', 'should define super for F');\n };\n\n _class.prototype['@test overriding inherited objects'] = function (assert) {\n var cnt = 0;\n var MixinA = _emberMetal.Mixin.create({\n foo: function () {\n cnt++;\n }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: function () {\n this._super.apply(this, arguments);\n cnt++;\n }\n });\n\n var objA = {};\n MixinA.apply(objA);\n\n var objB = Object.create(objA);\n MixinB.apply(objB);\n\n cnt = 0;\n objB.foo();\n assert.equal(cnt, 2, 'should invoke both methods');\n\n cnt = 0;\n objA.foo();\n assert.equal(cnt, 1, 'should not screw w/ parent obj');\n };\n\n _class.prototype['@test Including the same mixin more than once will only run once'] = function (assert) {\n var cnt = 0;\n var MixinA = _emberMetal.Mixin.create({\n foo: function () {\n cnt++;\n }\n });\n\n var MixinB = _emberMetal.Mixin.create(MixinA, {\n foo: function () {\n this._super.apply(this, arguments);\n }\n });\n\n var MixinC = _emberMetal.Mixin.create(MixinA, {\n foo: function () {\n this._super.apply(this, arguments);\n }\n });\n\n var MixinD = _emberMetal.Mixin.create(MixinB, MixinC, MixinA, {\n foo: function () {\n this._super.apply(this, arguments);\n }\n });\n\n var obj = {};\n MixinD.apply(obj);\n MixinA.apply(obj); // try to apply again..\n\n cnt = 0;\n obj.foo();\n\n assert.equal(cnt, 1, 'should invoke MixinA.foo one time');\n };\n\n _class.prototype['@test _super from a single mixin with no superclass does not error'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n foo: function () {\n this._super.apply(this, arguments);\n }\n });\n\n var obj = {};\n MixinA.apply(obj);\n\n obj.foo();\n assert.ok(true);\n };\n\n _class.prototype['@test _super from a first-of-two mixins with no superclass function does not error'] = function (assert) {\n // _super was previously calling itself in the second assertion.\n // Use remaining count of calls to ensure it doesn't loop indefinitely.\n var remaining = 3;\n var MixinA = _emberMetal.Mixin.create({\n foo: function () {\n if (remaining-- > 0) {\n this._super.apply(this, arguments);\n }\n }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: function () {\n this._super.apply(this, arguments);\n }\n });\n\n var obj = {};\n MixinA.apply(obj);\n MixinB.apply(obj);\n\n obj.foo();\n assert.ok(true);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // CONFLICTS\n //\n (0, _internalTestHelpers.moduleFor)('Method Conflicts', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test overriding toString'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n toString: function () {\n return 'FOO';\n }\n });\n\n var obj = {};\n MixinA.apply(obj);\n assert.equal(obj.toString(), 'FOO', 'should override toString w/o error');\n\n obj = {};\n (0, _emberMetal.mixin)(obj, {\n toString: function () {\n return 'FOO';\n }\n });\n assert.equal(obj.toString(), 'FOO', 'should override toString w/o error');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // BUGS\n //\n (0, _internalTestHelpers.moduleFor)('system/mixin/method_test BUGS', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype['@test applying several mixins at once with sup already defined causes infinite loop'] = function (assert) {\n var cnt = 0;\n var MixinA = _emberMetal.Mixin.create({\n foo: function () {\n cnt++;\n }\n });\n\n var MixinB = _emberMetal.Mixin.create({\n foo: function () {\n this._super.apply(this, arguments);\n cnt++;\n }\n });\n\n var MixinC = _emberMetal.Mixin.create({\n foo: function () {\n this._super.apply(this, arguments);\n cnt++;\n }\n });\n\n var obj = {};\n (0, _emberMetal.mixin)(obj, MixinA); // sup already exists\n (0, _emberMetal.mixin)(obj, MixinB, MixinC); // must be more than one mixin\n\n cnt = 0;\n obj.foo();\n assert.equal(cnt, 3, 'should invoke all 3 methods');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/observer_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Mixin observer', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test global observer helper'] = function (assert) {\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test global observer helper takes multiple params'] = function (assert) {\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar', 'baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n (0, _emberMetal.set)(obj, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 2, 'should invoke observer after change');\n };\n\n _class.prototype['@test replacing observer should remove old observer'] = function (assert) {\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var Mixin2 = _emberMetal.Mixin.create({\n foo: (0, _emberMetal.observer)('baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 10);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin, Mixin2);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer after change');\n\n (0, _emberMetal.set)(obj, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 10, 'should invoke observer after change');\n };\n\n _class.prototype['@test observing chain with property before'] = function (assert) {\n var obj2 = { baz: 'baz' };\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n bar: obj2,\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj2, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observing chain with property after'] = function (assert) {\n var obj2 = { baz: 'baz' };\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n }),\n bar: obj2\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj2, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observing chain with property in mixin applied later'] = function (assert) {\n var obj2 = { baz: 'baz' };\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var MyMixin2 = _emberMetal.Mixin.create({ bar: obj2 });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n MyMixin2.apply(obj);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj2, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observing chain with existing property'] = function (assert) {\n var obj2 = { baz: 'baz' };\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({ bar: obj2 }, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj2, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observing chain with property in mixin before'] = function (assert) {\n var obj2 = { baz: 'baz' };\n var MyMixin2 = _emberMetal.Mixin.create({ bar: obj2 });\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin2, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj2, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observing chain with property in mixin after'] = function (assert) {\n var obj2 = { baz: 'baz' };\n var MyMixin2 = _emberMetal.Mixin.create({ bar: obj2 });\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin, MyMixin2);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj2, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observing chain with overridden property'] = function (assert) {\n var obj2 = { baz: 'baz' };\n var obj3 = { baz: 'foo' };\n\n var MyMixin2 = _emberMetal.Mixin.create({ bar: obj3 });\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = (0, _emberMetal.mixin)({ bar: obj2 }, MyMixin, MyMixin2);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n assert.equal((0, _emberMetal.isWatching)(obj2, 'baz'), false, 'should not be watching baz');\n assert.equal((0, _emberMetal.isWatching)(obj3, 'baz'), true, 'should be watching baz');\n\n (0, _emberMetal.set)(obj2, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer after change');\n\n (0, _emberMetal.set)(obj3, 'baz', 'BEAR');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/reopen_test', ['ember-babel', 'ember-runtime', 'ember-metal', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberMetal, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Mixin#reopen', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test using reopen() to add more properties to a simple'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({ foo: 'FOO', baz: 'BAZ' });\n MixinA.reopen({ bar: 'BAR', foo: 'FOO2' });\n var obj = {};\n MixinA.apply(obj);\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'FOO2', 'mixin() should override');\n assert.equal((0, _emberMetal.get)(obj, 'baz'), 'BAZ', 'preserve MixinA props');\n assert.equal((0, _emberMetal.get)(obj, 'bar'), 'BAR', 'include MixinB props');\n };\n\n _class.prototype['@test using reopen() and calling _super where there is not a super function does not cause infinite recursion'] = function (assert) {\n var Taco = _emberRuntime.Object.extend({\n createBreakfast: function () {\n // There is no original createBreakfast function.\n // Calling the wrapped _super function here\n // used to end in an infinite call loop\n this._super.apply(this, arguments);\n return 'Breakfast!';\n }\n });\n\n Taco.reopen({\n createBreakfast: function () {\n return this._super.apply(this, arguments);\n }\n });\n\n var taco = Taco.create();\n\n var result = void 0;\n (0, _runloop.run)(function () {\n try {\n result = taco.createBreakfast();\n } catch (e) {\n result = 'Your breakfast was interrupted by an infinite stack error.';\n }\n });\n\n assert.equal(result, 'Breakfast!');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/mixin/without_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('without', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test without should create a new mixin excluding named properties'] = function (assert) {\n var MixinA = _emberMetal.Mixin.create({\n foo: 'FOO',\n bar: 'BAR'\n });\n\n var MixinB = MixinA.without('bar');\n\n var obj = {};\n MixinB.apply(obj);\n\n assert.equal(obj.foo, 'FOO', 'should defined foo');\n assert.equal(obj.bar, undefined, 'should not define bar');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/namespace_search_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('NamespaceSearch', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test classToString: null as this inside class must not throw error'] = function (assert) {\n var mixin = _emberMetal.Mixin.create();\n assert.equal(mixin.toString(), '(unknown)', 'this = null should be handled on Mixin.toString() call');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/observer_test', ['ember-babel', 'ember-environment', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n function K() {}\n\n // ..........................................................\n // ADD OBSERVER\n //\n\n (0, _internalTestHelpers.moduleFor)('addObserver', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test observer should assert to invalid input'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.observer)(function () {});\n }, 'observer called without valid path');\n\n expectAssertion(function () {\n (0, _emberMetal.observer)(null);\n }, 'observer called without a function');\n };\n\n _class.prototype['@test observer should fire when property is modified'] = function (assert) {\n var obj = {};\n var count = 0;\n\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar', 'should invoke AFTER value changed');\n count++;\n });\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(count, 1, 'should have invoked observer');\n };\n\n _class.prototype['@test observer should fire when dependent property is modified'] = function (assert) {\n var obj = { bar: 'bar' };\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {\n return (0, _emberMetal.get)(this, 'bar').toUpperCase();\n }).property('bar'));\n\n (0, _emberMetal.get)(obj, 'foo');\n\n var count = 0;\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'BAZ', 'should have invoked after prop change');\n count++;\n });\n\n (0, _emberMetal.set)(obj, 'bar', 'baz');\n assert.equal(count, 1, 'should have invoked observer');\n };\n\n _class.prototype['@test observer should continue to fire after dependent properties are accessed'] = function (assert) {\n var observerCount = 0,\n i;\n var obj = {};\n\n (0, _emberMetal.defineProperty)(obj, 'prop', (0, _emberMetal.computed)(function () {\n return Math.random();\n }));\n (0, _emberMetal.defineProperty)(obj, 'anotherProp', (0, _emberMetal.computed)('prop', function () {\n return (0, _emberMetal.get)(this, 'prop') + Math.random();\n }));\n\n (0, _emberMetal.addObserver)(obj, 'prop', function () {\n observerCount++;\n });\n\n (0, _emberMetal.get)(obj, 'anotherProp');\n\n for (i = 0; i < 10; i++) {\n (0, _emberMetal.notifyPropertyChange)(obj, 'prop');\n }\n\n assert.equal(observerCount, 10, 'should continue to fire indefinitely');\n };\n\n _class.prototype['@test observer added declaratively via brace expansion should fire when property changes'] = function (assert) {\n var _obj, _count;\n\n if (_emberEnvironment.ENV.EXTEND_PROTOTYPES.Function) {\n _obj = {};\n _count = 0;\n\n\n (0, _emberMetal.mixin)(_obj, {\n observeFooAndBar: function () {\n _count++;\n }.observes('{foo,bar}')\n });\n\n (0, _emberMetal.set)(_obj, 'foo', 'foo');\n assert.equal(_count, 1, 'observer specified via brace expansion invoked on property change');\n\n (0, _emberMetal.set)(_obj, 'bar', 'bar');\n assert.equal(_count, 2, 'observer specified via brace expansion invoked on property change');\n\n (0, _emberMetal.set)(_obj, 'baz', 'baz');\n assert.equal(_count, 2, 'observer not invoked on unspecified property');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test observer specified declaratively via brace expansion should fire when dependent property changes'] = function (assert) {\n var _obj2, _count2;\n\n if (_emberEnvironment.ENV.EXTEND_PROTOTYPES.Function) {\n _obj2 = { baz: 'Initial' };\n _count2 = 0;\n\n\n (0, _emberMetal.defineProperty)(_obj2, 'foo', (0, _emberMetal.computed)(function () {\n return (0, _emberMetal.get)(this, 'bar').toLowerCase();\n }).property('bar'));\n\n (0, _emberMetal.defineProperty)(_obj2, 'bar', (0, _emberMetal.computed)(function () {\n return (0, _emberMetal.get)(this, 'baz').toUpperCase();\n }).property('baz'));\n\n (0, _emberMetal.mixin)(_obj2, {\n fooAndBarWatcher: function () {\n _count2++;\n }.observes('{foo,bar}')\n });\n\n (0, _emberMetal.get)(_obj2, 'foo');\n (0, _emberMetal.set)(_obj2, 'baz', 'Baz');\n // fire once for foo, once for bar\n assert.equal(_count2, 2, 'observer specified via brace expansion invoked on dependent property change');\n\n (0, _emberMetal.set)(_obj2, 'quux', 'Quux');\n assert.equal(_count2, 2, 'observer not fired on unspecified property');\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test observers watching multiple properties via brace expansion should fire when the properties change'] = function (assert) {\n var obj = {};\n var count = 0;\n\n (0, _emberMetal.mixin)(obj, {\n observeFooAndBar: (0, _emberMetal.observer)('{foo,bar}', function () {\n count++;\n })\n });\n\n (0, _emberMetal.set)(obj, 'foo', 'foo');\n assert.equal(count, 1, 'observer specified via brace expansion invoked on property change');\n\n (0, _emberMetal.set)(obj, 'bar', 'bar');\n assert.equal(count, 2, 'observer specified via brace expansion invoked on property change');\n\n (0, _emberMetal.set)(obj, 'baz', 'baz');\n assert.equal(count, 2, 'observer not invoked on unspecified property');\n };\n\n _class.prototype['@test observers watching multiple properties via brace expansion should fire when dependent properties change'] = function (assert) {\n var obj = { baz: 'Initial' };\n var count = 0;\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)(function () {\n return (0, _emberMetal.get)(this, 'bar').toLowerCase();\n }).property('bar'));\n\n (0, _emberMetal.defineProperty)(obj, 'bar', (0, _emberMetal.computed)(function () {\n return (0, _emberMetal.get)(this, 'baz').toUpperCase();\n }).property('baz'));\n\n (0, _emberMetal.mixin)(obj, {\n fooAndBarWatcher: (0, _emberMetal.observer)('{foo,bar}', function () {\n count++;\n })\n });\n\n (0, _emberMetal.get)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'baz', 'Baz');\n // fire once for foo, once for bar\n assert.equal(count, 2, 'observer specified via brace expansion invoked on dependent property change');\n\n (0, _emberMetal.set)(obj, 'quux', 'Quux');\n assert.equal(count, 2, 'observer not fired on unspecified property');\n };\n\n _class.prototype['@test nested observers should fire in order'] = function (assert) {\n var obj = { foo: 'foo', bar: 'bar' };\n var fooCount = 0;\n var barCount = 0;\n\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n fooCount++;\n });\n (0, _emberMetal.addObserver)(obj, 'bar', function () {\n (0, _emberMetal.set)(obj, 'foo', 'BAZ');\n assert.equal(fooCount, 1, 'fooCount should have fired already');\n barCount++;\n });\n\n (0, _emberMetal.set)(obj, 'bar', 'BIFF');\n assert.equal(barCount, 1, 'barCount should have fired');\n assert.equal(fooCount, 1, 'foo should have fired');\n };\n\n _class.prototype['@test removing an chain observer on change should not fail'] = function (assert) {\n var foo = { bar: 'bar' };\n var obj1 = { foo: foo };\n var obj2 = { foo: foo };\n\n var obj4 = { foo: foo };\n var count1 = 0;\n var count2 = 0;\n var count3 = 0;\n var count4 = 0;\n\n function observer1() {\n count1++;\n }\n function observer2() {\n count2++;\n }\n function observer3() {\n count3++;\n (0, _emberMetal.removeObserver)(obj1, 'foo.bar', observer1);\n (0, _emberMetal.removeObserver)(obj2, 'foo.bar', observer2);\n (0, _emberMetal.removeObserver)(obj4, 'foo.bar', observer4);\n }\n function observer4() {\n count4++;\n }\n\n (0, _emberMetal.addObserver)(obj1, 'foo.bar', observer1);\n (0, _emberMetal.addObserver)(obj2, 'foo.bar', observer2);\n (0, _emberMetal.addObserver)({ foo: foo }, 'foo.bar', observer3);\n (0, _emberMetal.addObserver)(obj4, 'foo.bar', observer4);\n\n (0, _emberMetal.set)(foo, 'bar', 'baz');\n\n assert.equal(count1, 1, 'observer1 fired');\n assert.equal(count2, 1, 'observer2 fired');\n assert.equal(count3, 1, 'observer3 fired');\n assert.equal(count4, 0, 'observer4 did not fire');\n };\n\n _class.prototype['@test deferring property change notifications'] = function (assert) {\n var obj = { foo: 'foo' };\n var fooCount = 0;\n\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n fooCount++;\n });\n\n (0, _emberMetal.beginPropertyChanges)();\n (0, _emberMetal.set)(obj, 'foo', 'BIFF');\n (0, _emberMetal.set)(obj, 'foo', 'BAZ');\n (0, _emberMetal.endPropertyChanges)();\n\n assert.equal(fooCount, 1, 'foo should have fired once');\n };\n\n _class.prototype['@test deferring property change notifications safely despite exceptions'] = function (assert) {\n var obj = { foo: 'foo' };\n var fooCount = 0;\n var exc = new Error('Something unexpected happened!');\n\n assert.expect(2);\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n fooCount++;\n });\n\n try {\n (0, _emberMetal.changeProperties)(function () {\n (0, _emberMetal.set)(obj, 'foo', 'BIFF');\n (0, _emberMetal.set)(obj, 'foo', 'BAZ');\n throw exc;\n });\n } catch (err) {\n if (err !== exc) {\n throw err;\n }\n }\n\n assert.equal(fooCount, 1, 'foo should have fired once');\n\n (0, _emberMetal.changeProperties)(function () {\n (0, _emberMetal.set)(obj, 'foo', 'BIFF2');\n (0, _emberMetal.set)(obj, 'foo', 'BAZ2');\n });\n\n assert.equal(fooCount, 2, 'foo should have fired again once');\n };\n\n _class.prototype['@test addObserver should propagate through prototype'] = function (assert) {\n var obj = { foo: 'foo', count: 0 };\n var obj2 = void 0;\n\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n this.count++;\n });\n obj2 = Object.create(obj);\n\n (0, _emberMetal.set)(obj2, 'foo', 'bar');\n\n assert.equal(obj2.count, 1, 'should have invoked observer on inherited');\n assert.equal(obj.count, 0, 'should not have invoked observer on parent');\n\n obj2.count = 0;\n (0, _emberMetal.set)(obj, 'foo', 'baz');\n assert.equal(obj.count, 1, 'should have invoked observer on parent');\n assert.equal(obj2.count, 0, 'should not have invoked observer on inherited');\n };\n\n _class.prototype['@test addObserver should respect targets with methods'] = function (assert) {\n var observed = { foo: 'foo' };\n\n var target1 = {\n count: 0,\n\n didChange: function (obj, keyName) {\n var value = (0, _emberMetal.get)(obj, keyName);\n assert.equal(this, target1, 'should invoke with this');\n assert.equal(obj, observed, 'param1 should be observed object');\n assert.equal(keyName, 'foo', 'param2 should be keyName');\n assert.equal(value, 'BAZ', 'param3 should new value');\n this.count++;\n }\n };\n\n var target2 = {\n count: 0,\n\n didChange: function (obj, keyName) {\n var value = (0, _emberMetal.get)(obj, keyName);\n assert.equal(this, target2, 'should invoke with this');\n assert.equal(obj, observed, 'param1 should be observed object');\n assert.equal(keyName, 'foo', 'param2 should be keyName');\n assert.equal(value, 'BAZ', 'param3 should new value');\n this.count++;\n }\n };\n\n (0, _emberMetal.addObserver)(observed, 'foo', target1, 'didChange');\n (0, _emberMetal.addObserver)(observed, 'foo', target2, target2.didChange);\n\n (0, _emberMetal.set)(observed, 'foo', 'BAZ');\n assert.equal(target1.count, 1, 'target1 observer should have fired');\n assert.equal(target2.count, 1, 'target2 observer should have fired');\n };\n\n _class.prototype['@test addObserver should allow multiple objects to observe a property'] = function (assert) {\n var observed = { foo: 'foo' };\n\n var target1 = {\n count: 0,\n\n didChange: function () {\n this.count++;\n }\n };\n\n var target2 = {\n count: 0,\n\n didChange: function () {\n this.count++;\n }\n };\n\n (0, _emberMetal.addObserver)(observed, 'foo', target1, 'didChange');\n (0, _emberMetal.addObserver)(observed, 'foo', target2, 'didChange');\n\n (0, _emberMetal.set)(observed, 'foo', 'BAZ');\n assert.equal(target1.count, 1, 'target1 observer should have fired');\n assert.equal(target2.count, 1, 'target2 observer should have fired');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // REMOVE OBSERVER\n //\n\n (0, _internalTestHelpers.moduleFor)('removeObserver', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test removing observer should stop firing'] = function (assert) {\n var obj = {};\n var count = 0;\n function F() {\n count++;\n }\n (0, _emberMetal.addObserver)(obj, 'foo', F);\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(count, 1, 'should have invoked observer');\n\n (0, _emberMetal.removeObserver)(obj, 'foo', F);\n\n (0, _emberMetal.set)(obj, 'foo', 'baz');\n assert.equal(count, 1, \"removed observer shouldn't fire\");\n };\n\n _class2.prototype['@test local observers can be removed'] = function (assert) {\n var barObserved = 0;\n\n var MyMixin = _emberMetal.Mixin.create({\n foo1: (0, _emberMetal.observer)('bar', function () {\n barObserved++;\n }),\n\n foo2: (0, _emberMetal.observer)('bar', function () {\n barObserved++;\n })\n });\n\n var obj = {};\n MyMixin.apply(obj);\n\n (0, _emberMetal.set)(obj, 'bar', 'HI!');\n assert.equal(barObserved, 2, 'precond - observers should be fired');\n\n (0, _emberMetal.removeObserver)(obj, 'bar', null, 'foo1');\n\n barObserved = 0;\n (0, _emberMetal.set)(obj, 'bar', 'HI AGAIN!');\n\n assert.equal(barObserved, 1, 'removed observers should not be called');\n };\n\n _class2.prototype['@test removeObserver should respect targets with methods'] = function (assert) {\n var observed = { foo: 'foo' };\n\n var target1 = {\n count: 0,\n\n didChange: function () {\n this.count++;\n }\n };\n\n var target2 = {\n count: 0,\n\n didChange: function () {\n this.count++;\n }\n };\n\n (0, _emberMetal.addObserver)(observed, 'foo', target1, 'didChange');\n (0, _emberMetal.addObserver)(observed, 'foo', target2, target2.didChange);\n\n (0, _emberMetal.set)(observed, 'foo', 'BAZ');\n assert.equal(target1.count, 1, 'target1 observer should have fired');\n assert.equal(target2.count, 1, 'target2 observer should have fired');\n\n (0, _emberMetal.removeObserver)(observed, 'foo', target1, 'didChange');\n (0, _emberMetal.removeObserver)(observed, 'foo', target2, target2.didChange);\n\n target1.count = target2.count = 0;\n (0, _emberMetal.set)(observed, 'foo', 'BAZ');\n assert.equal(target1.count, 0, 'target1 observer should not fire again');\n assert.equal(target2.count, 0, 'target2 observer should not fire again');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // CHAINED OBSERVERS\n //\n\n var obj = void 0,\n count = void 0;\n\n (0, _internalTestHelpers.moduleFor)('addObserver - dependentkey with chained properties', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype.beforeEach = function () {\n obj = {\n foo: {\n bar: {\n baz: {\n biff: 'BIFF'\n }\n }\n },\n Capital: {\n foo: {\n bar: {\n baz: {\n biff: 'BIFF'\n }\n }\n }\n }\n };\n\n count = 0;\n };\n\n _class3.prototype.afterEach = function () {\n obj = count = null;\n };\n\n _class3.prototype['@test depending on a chain with a computed property'] = function (assert) {\n (0, _emberMetal.defineProperty)(obj, 'computed', (0, _emberMetal.computed)(function () {\n return { foo: 'bar' };\n }));\n\n var changed = 0;\n (0, _emberMetal.addObserver)(obj, 'computed.foo', function () {\n changed++;\n });\n\n assert.equal((0, _emberMetal.getCachedValueFor)(obj, 'computed'), undefined, 'addObserver should not compute CP');\n\n (0, _emberMetal.set)(obj, 'computed.foo', 'baz');\n\n assert.equal(changed, 1, 'should fire observer');\n };\n\n _class3.prototype['@test depending on a simple chain'] = function (assert) {\n var val = void 0;\n (0, _emberMetal.addObserver)(obj, 'foo.bar.baz.biff', function (target, key) {\n val = (0, _emberMetal.get)(target, key);\n count++;\n });\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal(val, 'BUZZ');\n assert.equal(count, 1);\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar'), 'baz', { biff: 'BLARG' });\n assert.equal(val, 'BLARG');\n assert.equal(count, 2);\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo'), 'bar', { baz: { biff: 'BOOM' } });\n assert.equal(val, 'BOOM');\n assert.equal(count, 3);\n\n (0, _emberMetal.set)(obj, 'foo', { bar: { baz: { biff: 'BLARG' } } });\n assert.equal(val, 'BLARG');\n assert.equal(count, 4);\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal(val, 'BUZZ');\n assert.equal(count, 5);\n\n var foo = (0, _emberMetal.get)(obj, 'foo');\n\n (0, _emberMetal.set)(obj, 'foo', 'BOO');\n assert.equal(val, undefined);\n assert.equal(count, 6);\n\n (0, _emberMetal.set)(foo.bar.baz, 'biff', 'BOOM');\n assert.equal(count, 6, 'should be not have invoked observer');\n };\n\n _class3.prototype['@test depending on a chain with a capitalized first key'] = function (assert) {\n var val = void 0;\n\n (0, _emberMetal.addObserver)(obj, 'Capital.foo.bar.baz.biff', function (target, key) {\n val = (0, _emberMetal.get)(obj, key);\n count++;\n });\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'Capital.foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal(val, 'BUZZ');\n assert.equal(count, 1);\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'Capital.foo.bar'), 'baz', { biff: 'BLARG' });\n assert.equal(val, 'BLARG');\n assert.equal(count, 2);\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'Capital.foo'), 'bar', { baz: { biff: 'BOOM' } });\n assert.equal(val, 'BOOM');\n assert.equal(count, 3);\n\n (0, _emberMetal.set)(obj, 'Capital.foo', { bar: { baz: { biff: 'BLARG' } } });\n assert.equal(val, 'BLARG');\n assert.equal(count, 4);\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj, 'Capital.foo.bar.baz'), 'biff', 'BUZZ');\n assert.equal(val, 'BUZZ');\n assert.equal(count, 5);\n\n var foo = (0, _emberMetal.get)(obj, 'foo');\n\n (0, _emberMetal.set)(obj, 'Capital.foo', 'BOO');\n assert.equal(val, undefined);\n assert.equal(count, 6);\n\n (0, _emberMetal.set)(foo.bar.baz, 'biff', 'BOOM');\n assert.equal(count, 6, 'should be not have invoked observer');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // SETTING IDENTICAL VALUES\n //\n\n (0, _internalTestHelpers.moduleFor)('props/observer_test - setting identical values', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype['@test setting simple prop should not trigger'] = function (assert) {\n var obj = { foo: 'bar' };\n var count = 0;\n\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n count++;\n });\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(count, 0, 'should not trigger observer');\n\n (0, _emberMetal.set)(obj, 'foo', 'baz');\n assert.equal(count, 1, 'should trigger observer');\n\n (0, _emberMetal.set)(obj, 'foo', 'baz');\n assert.equal(count, 1, 'should not trigger observer again');\n };\n\n _class4.prototype['@test setting a cached computed property whose value has changed should trigger'] = function (assert) {\n var obj = {};\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)({\n get: function () {\n return (0, _emberMetal.get)(this, 'baz');\n },\n set: function (key, value) {\n return value;\n }\n }).property('baz'));\n\n var count = 0;\n\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n count++;\n });\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(count, 1);\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar');\n\n (0, _emberMetal.set)(obj, 'baz', 'qux');\n assert.equal(count, 2);\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'qux');\n\n (0, _emberMetal.get)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(count, 3);\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar');\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('changeProperties', function (_AbstractTestCase5) {\n (0, _emberBabel.inherits)(_class5, _AbstractTestCase5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase5.apply(this, arguments));\n }\n\n _class5.prototype['@test observers added/removed during changeProperties should do the right thing.'] = function (assert) {\n var obj = {\n foo: 0\n };\n function Observer() {\n this.didChangeCount = 0;\n }\n Observer.prototype = {\n add: function () {\n (0, _emberMetal.addObserver)(obj, 'foo', this, 'didChange');\n },\n remove: function () {\n (0, _emberMetal.removeObserver)(obj, 'foo', this, 'didChange');\n },\n didChange: function () {\n this.didChangeCount++;\n }\n };\n var addedBeforeFirstChangeObserver = new Observer();\n var addedAfterFirstChangeObserver = new Observer();\n var addedAfterLastChangeObserver = new Observer();\n var removedBeforeFirstChangeObserver = new Observer();\n var removedBeforeLastChangeObserver = new Observer();\n var removedAfterLastChangeObserver = new Observer();\n removedBeforeFirstChangeObserver.add();\n removedBeforeLastChangeObserver.add();\n removedAfterLastChangeObserver.add();\n (0, _emberMetal.changeProperties)(function () {\n removedBeforeFirstChangeObserver.remove();\n addedBeforeFirstChangeObserver.add();\n\n (0, _emberMetal.set)(obj, 'foo', 1);\n\n assert.equal(addedBeforeFirstChangeObserver.didChangeCount, 0, 'addObserver called before the first change is deferred');\n\n addedAfterFirstChangeObserver.add();\n removedBeforeLastChangeObserver.remove();\n\n (0, _emberMetal.set)(obj, 'foo', 2);\n\n assert.equal(addedAfterFirstChangeObserver.didChangeCount, 0, 'addObserver called after the first change is deferred');\n\n addedAfterLastChangeObserver.add();\n removedAfterLastChangeObserver.remove();\n });\n\n assert.equal(removedBeforeFirstChangeObserver.didChangeCount, 0, 'removeObserver called before the first change sees none');\n assert.equal(addedBeforeFirstChangeObserver.didChangeCount, 1, 'addObserver called before the first change sees only 1');\n assert.equal(addedAfterFirstChangeObserver.didChangeCount, 1, 'addObserver called after the first change sees 1');\n assert.equal(addedAfterLastChangeObserver.didChangeCount, 1, 'addObserver called after the last change sees 1');\n assert.equal(removedBeforeLastChangeObserver.didChangeCount, 0, 'removeObserver called before the last change sees none');\n assert.equal(removedAfterLastChangeObserver.didChangeCount, 0, 'removeObserver called after the last change sees none');\n };\n\n _class5.prototype['@test calling changeProperties while executing deferred observers works correctly'] = function (assert) {\n var obj = { foo: 0 };\n var fooDidChange = 0;\n\n (0, _emberMetal.addObserver)(obj, 'foo', function () {\n fooDidChange++;\n (0, _emberMetal.changeProperties)(function () {});\n });\n\n (0, _emberMetal.changeProperties)(function () {\n (0, _emberMetal.set)(obj, 'foo', 1);\n });\n\n assert.equal(fooDidChange, 1);\n };\n\n return _class5;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Keys behavior with observers', function (_AbstractTestCase6) {\n (0, _emberBabel.inherits)(_class6, _AbstractTestCase6);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase6.apply(this, arguments));\n }\n\n _class6.prototype['@test should not leak properties on the prototype'] = function (assert) {\n function Beer() {}\n Beer.prototype.type = 'ipa';\n\n var beer = new Beer();\n\n (0, _emberMetal.addObserver)(beer, 'type', K);\n assert.deepEqual(Object.keys(beer), []);\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n };\n\n _class6.prototype['@test observing a non existent property'] = function (assert) {\n function Beer() {}\n Beer.prototype.type = 'ipa';\n\n var beer = new Beer();\n\n (0, _emberMetal.addObserver)(beer, 'brand', K);\n\n assert.deepEqual(Object.keys(beer), []);\n\n (0, _emberMetal.set)(beer, 'brand', 'Corona');\n assert.deepEqual(Object.keys(beer), ['brand']);\n\n (0, _emberMetal.removeObserver)(beer, 'brand', K);\n };\n\n _class6.prototype['@test with observers switched on and off'] = function (assert) {\n function Beer() {}\n Beer.prototype.type = 'ipa';\n\n var beer = new Beer();\n\n (0, _emberMetal.addObserver)(beer, 'type', K);\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n\n assert.deepEqual(Object.keys(beer), []);\n };\n\n _class6.prototype['@test observers switched on and off with setter in between'] = function (assert) {\n function Beer() {}\n Beer.prototype.type = 'ipa';\n\n var beer = new Beer();\n\n (0, _emberMetal.addObserver)(beer, 'type', K);\n (0, _emberMetal.set)(beer, 'type', 'ale');\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n\n assert.deepEqual(Object.keys(beer), ['type']);\n };\n\n _class6.prototype['@test observer switched on and off and then setter'] = function (assert) {\n function Beer() {}\n Beer.prototype.type = 'ipa';\n\n var beer = new Beer();\n\n (0, _emberMetal.addObserver)(beer, 'type', K);\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n (0, _emberMetal.set)(beer, 'type', 'ale');\n\n assert.deepEqual(Object.keys(beer), ['type']);\n };\n\n _class6.prototype['@test observers switched on and off with setter in between (observed property is not shadowing)'] = function (assert) {\n function Beer() {}\n\n var beer = new Beer();\n (0, _emberMetal.set)(beer, 'type', 'ale');\n assert.deepEqual(Object.keys(beer), ['type'], 'only set');\n\n var otherBeer = new Beer();\n (0, _emberMetal.addObserver)(otherBeer, 'type', K);\n (0, _emberMetal.set)(otherBeer, 'type', 'ale');\n assert.deepEqual(Object.keys(otherBeer), ['type'], 'addObserver -> set');\n\n var yetAnotherBeer = new Beer();\n (0, _emberMetal.addObserver)(yetAnotherBeer, 'type', K);\n (0, _emberMetal.set)(yetAnotherBeer, 'type', 'ale');\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n assert.deepEqual(Object.keys(yetAnotherBeer), ['type'], 'addObserver -> set -> removeObserver');\n\n var itsMyLastBeer = new Beer();\n (0, _emberMetal.set)(itsMyLastBeer, 'type', 'ale');\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n assert.deepEqual(Object.keys(itsMyLastBeer), ['type'], 'set -> removeObserver');\n };\n\n _class6.prototype['@test observers switched on and off with setter in between (observed property is shadowing one on the prototype)'] = function (assert) {\n function Beer() {}\n Beer.prototype.type = 'ipa';\n\n var beer = new Beer();\n (0, _emberMetal.set)(beer, 'type', 'ale');\n assert.deepEqual(Object.keys(beer), ['type'], 'after set');\n\n var otherBeer = new Beer();\n (0, _emberMetal.addObserver)(otherBeer, 'type', K);\n (0, _emberMetal.set)(otherBeer, 'type', 'ale');\n assert.deepEqual(Object.keys(otherBeer), ['type'], 'addObserver -> set');\n\n var yetAnotherBeer = new Beer();\n (0, _emberMetal.addObserver)(yetAnotherBeer, 'type', K);\n (0, _emberMetal.set)(yetAnotherBeer, 'type', 'ale');\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n assert.deepEqual(Object.keys(yetAnotherBeer), ['type'], 'addObserver -> set -> removeObserver');\n\n var itsMyLastBeer = new Beer();\n (0, _emberMetal.set)(itsMyLastBeer, 'type', 'ale');\n (0, _emberMetal.removeObserver)(beer, 'type', K);\n assert.deepEqual(Object.keys(itsMyLastBeer), ['type'], 'set -> removeObserver');\n };\n\n return _class6;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/performance_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n /*\n This test file is designed to capture performance regressions related to\n deferred computation. Things like run loops, computed properties, and bindings\n should run the minimum amount of times to achieve best performance, so any\n bugs that cause them to get evaluated more than necessary should be put here.\n */\n\n (0, _internalTestHelpers.moduleFor)('Computed Properties - Number of times evaluated', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test computed properties that depend on multiple properties should run only once per run loop'] = function (assert) {\n var obj = { a: 'a', b: 'b', c: 'c' };\n var cpCount = 0;\n var obsCount = 0;\n\n (0, _emberMetal.defineProperty)(obj, 'abc', (0, _emberMetal.computed)(function (key) {\n cpCount++;\n return 'computed ' + key;\n }).property('a', 'b', 'c'));\n\n (0, _emberMetal.get)(obj, 'abc');\n\n cpCount = 0;\n\n (0, _emberMetal.addObserver)(obj, 'abc', function () {\n obsCount++;\n });\n\n (0, _emberMetal.beginPropertyChanges)();\n (0, _emberMetal.set)(obj, 'a', 'aa');\n (0, _emberMetal.set)(obj, 'b', 'bb');\n (0, _emberMetal.set)(obj, 'c', 'cc');\n (0, _emberMetal.endPropertyChanges)();\n\n (0, _emberMetal.get)(obj, 'abc');\n\n assert.equal(cpCount, 1, 'The computed property is only invoked once');\n assert.equal(obsCount, 1, 'The observer is only invoked once');\n };\n\n _class.prototype['@test computed properties are not executed if they are the last segment of an observer chain pain'] = function (assert) {\n var foo = { bar: { baz: {} } };\n\n var count = 0;\n\n (0, _emberMetal.defineProperty)(foo.bar.baz, 'bam', (0, _emberMetal.computed)(function () {\n count++;\n }));\n\n (0, _emberMetal.addObserver)(foo, 'bar.baz.bam', function () {});\n\n (0, _emberMetal.notifyPropertyChange)((0, _emberMetal.get)(foo, 'bar.baz'), 'bam');\n\n assert.equal(count, 0, 'should not have recomputed property');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/properties_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('defineProperty', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test toString'] = function (assert) {\n var obj = {};\n (0, _emberMetal.defineProperty)(obj, 'toString', undefined, function () {\n return 'FOO';\n });\n assert.equal(obj.toString(), 'FOO', 'should replace toString');\n };\n\n _class.prototype['@test for data properties, didDefineProperty hook should be called if implemented'] = function (assert) {\n assert.expect(2);\n\n (0, _emberMetal.defineProperty)({\n didDefineProperty: function (obj, keyName, value) {\n assert.equal(keyName, 'foo', 'key name should be foo');\n assert.equal(value, 'bar', 'value should be bar');\n }\n }, 'foo', undefined, 'bar');\n };\n\n _class.prototype['@test for computed properties, didDefineProperty hook should be called if implemented'] = function (assert) {\n assert.expect(2);\n\n var computedProperty = (0, _emberMetal.computed)(function () {\n return this;\n });\n\n (0, _emberMetal.defineProperty)({\n didDefineProperty: function (obj, keyName, value) {\n assert.equal(keyName, 'foo', 'key name should be foo');\n assert.strictEqual(value, computedProperty, 'value should be passed as computed property');\n }\n }, 'foo', computedProperty);\n };\n\n _class.prototype['@test for descriptor properties, didDefineProperty hook should be called if implemented'] = function (assert) {\n assert.expect(2);\n\n var descriptor = {\n writable: true,\n configurable: false,\n enumerable: true,\n value: 42\n };\n\n (0, _emberMetal.defineProperty)({\n didDefineProperty: function (obj, keyName, value) {\n assert.equal(keyName, 'answer', 'key name should be answer');\n assert.strictEqual(value, descriptor, 'value should be passed as descriptor');\n }\n }, 'answer', descriptor);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Ember.deprecateProperty', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test enables access to deprecated property and returns the value of the new property'] = function (assert) {\n assert.expect(3);\n var obj = { foo: 'bar' };\n\n (0, _emberMetal.deprecateProperty)(obj, 'baz', 'foo', { id: 'baz-deprecation', until: 'some.version' });\n\n expectDeprecation();\n assert.equal(obj.baz, obj.foo, 'baz and foo are equal');\n\n obj.foo = 'blammo';\n assert.equal(obj.baz, obj.foo, 'baz and foo are equal');\n };\n\n _class2.prototype['@test deprecatedKey is not enumerable'] = function (assert) {\n assert.expect(2);\n var obj = { foo: 'bar', blammo: 'whammy' };\n\n (0, _emberMetal.deprecateProperty)(obj, 'baz', 'foo', { id: 'baz-deprecation', until: 'some.version' });\n\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n assert.notEqual(prop, 'baz');\n }\n }\n };\n\n _class2.prototype['@test enables setter to deprecated property and updates the value of the new property'] = function (assert) {\n assert.expect(3);\n var obj = { foo: 'bar' };\n\n (0, _emberMetal.deprecateProperty)(obj, 'baz', 'foo', { id: 'baz-deprecation', until: 'some.version' });\n\n expectDeprecation();\n obj.baz = 'bloop';\n assert.equal(obj.foo, 'bloop', 'updating baz updates foo');\n assert.equal(obj.baz, obj.foo, 'baz and foo are equal');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/property_did_change_hook', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('PROPERTY_DID_CHANGE', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test alias and cp'] = function (assert) {\n var _obj;\n\n var counts = {};\n var obj = (_obj = {\n child: {}\n }, _obj[_emberMetal.PROPERTY_DID_CHANGE] = function (keyName) {\n counts[keyName] = (counts[keyName] || 0) + 1;\n }, _obj);\n\n (0, _emberMetal.defineProperty)(obj, 'cost', (0, _emberMetal.alias)('child.cost'));\n (0, _emberMetal.defineProperty)(obj, 'tax', (0, _emberMetal.alias)('child.tax'));\n\n (0, _emberMetal.defineProperty)(obj, 'total', (0, _emberMetal.computed)('cost', 'tax', {\n get: function () {\n return (0, _emberMetal.get)(this, 'cost') + (0, _emberMetal.get)(this, 'tax');\n }\n }));\n\n assert.ok(!(0, _emberMetal.isWatching)(obj, 'child.cost'), 'precond alias target `child.cost` is not watched');\n assert.equal((0, _emberMetal.get)(obj, 'cost'), undefined);\n // this is how PROPERTY_DID_CHANGE will get notified\n assert.ok((0, _emberMetal.isWatching)(obj, 'child.cost'), 'alias target `child.cost` is watched after consumption');\n\n assert.ok(!(0, _emberMetal.isWatching)(obj, 'child.tax'), 'precond alias target `child.tax` is not watched');\n assert.equal((0, _emberMetal.get)(obj, 'tax'), undefined);\n // this is how PROPERTY_DID_CHANGE will get notified\n assert.ok((0, _emberMetal.isWatching)(obj, 'child.tax'), 'alias target `child.cost` is watched after consumption');\n\n // increments the watching count on the alias itself to 1\n assert.ok(isNaN((0, _emberMetal.get)(obj, 'total')), 'total is initialized');\n\n // decrements the watching count on the alias itself to 0\n (0, _emberMetal.set)(obj, 'child', {\n cost: 399.0,\n tax: 32.93\n });\n\n // this should have called PROPERTY_DID_CHANGE for all of them\n assert.equal(counts['cost'], 1, 'PROPERTY_DID_CHANGE called with cost');\n assert.equal(counts['tax'], 1, 'PROPERTY_DID_CHANGE called with tax');\n assert.equal(counts['total'], 1, 'PROPERTY_DID_CHANGE called with total');\n\n // we should still have a dependency installed\n assert.ok((0, _emberMetal.isWatching)(obj, 'child.cost'), 'watching child.cost');\n assert.ok((0, _emberMetal.isWatching)(obj, 'child.tax'), 'watching child.tax');\n\n (0, _emberMetal.set)(obj, 'child', {\n cost: 100.0,\n tax: 10.0\n });\n\n assert.equal(counts['cost'], 2, 'PROPERTY_DID_CHANGE called with cost');\n assert.equal(counts['tax'], 2, 'PROPERTY_DID_CHANGE called with tax');\n assert.equal(counts['total'], 1, 'PROPERTY_DID_CHANGE called with total');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/set_properties_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('setProperties', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test supports setting multiple attributes at once'] = function (assert) {\n assert.deepEqual((0, _emberMetal.setProperties)(null, null), null, 'noop for null properties and null object');\n assert.deepEqual((0, _emberMetal.setProperties)(undefined, undefined), undefined, 'noop for undefined properties and undefined object');\n\n assert.deepEqual((0, _emberMetal.setProperties)({}), undefined, 'noop for no properties');\n assert.deepEqual((0, _emberMetal.setProperties)({}, undefined), undefined, 'noop for undefined');\n assert.deepEqual((0, _emberMetal.setProperties)({}, null), null, 'noop for null');\n assert.deepEqual((0, _emberMetal.setProperties)({}, NaN), NaN, 'noop for NaN');\n assert.deepEqual((0, _emberMetal.setProperties)({}, {}), {}, 'meh');\n\n var props = (0, _emberMetal.setProperties)({}, { foo: undefined });\n assert.deepEqual(props, { foo: undefined }, 'Setting undefined value');\n assert.ok('foo' in props, 'Setting undefined value');\n assert.deepEqual(Object.keys(props), ['foo'], 'Setting undefined value');\n\n assert.deepEqual((0, _emberMetal.setProperties)({}, { foo: 1 }), { foo: 1 }, 'Set a single property');\n\n assert.deepEqual((0, _emberMetal.setProperties)({}, { foo: 1, bar: 1 }), { foo: 1, bar: 1 }, 'Set multiple properties');\n\n assert.deepEqual((0, _emberMetal.setProperties)({ foo: 2, baz: 2 }, { foo: 1 }), { foo: 1 }, 'Set one of multiple properties');\n\n assert.deepEqual((0, _emberMetal.setProperties)({ foo: 2, baz: 2 }, { bar: 2 }), {\n bar: 2\n }, 'Set an additional, previously unset property');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/tracked/computed_test', ['ember-metal/tests/tracked/support', 'ember-metal', 'internal-test-helpers'], function () {\n 'use strict';\n});","enifed('ember-metal/tests/tracked/get_test', ['ember-metal', 'ember-metal/tests/tracked/support', 'internal-test-helpers'], function () {\n 'use strict';\n});","enifed('ember-metal/tests/tracked/set_test', ['ember-metal', 'internal-test-helpers', 'ember-metal/tests/tracked/support'], function () {\n 'use strict';\n});","enifed('ember-metal/tests/tracked/support', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n 'use strict';\n\n exports.createTracked = function (values) {\n var proto = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n function Class() {\n for (var prop in values) {\n this[prop] = values[prop];\n }\n }\n\n for (var prop in values) {\n Object.defineProperty(proto, prop, (0, _emberMetal.tracked)(proto, prop, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: values[prop]\n }));\n }\n\n Class.prototype = proto;\n\n return new Class();\n };\n exports.createWithDescriptors = function (values) {\n var descriptor;\n\n function Class() {}\n\n for (var prop in values) {\n descriptor = Object.getOwnPropertyDescriptor(values, prop);\n\n Object.defineProperty(Class.prototype, prop, (0, _emberMetal.tracked)(Class.prototype, prop, descriptor));\n }\n\n return new Class();\n };\n});","enifed('ember-metal/tests/tracked/validation_test', ['ember-metal', 'internal-test-helpers'], function (_emberMetal) {\n 'use strict';\n});","enifed('ember-metal/tests/watching/is_watching_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n function testObserver(assert, setup, teardown) {\n var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'key';\n\n var obj = {};\n function fn() {}\n\n assert.equal((0, _emberMetal.isWatching)(obj, key), false, 'precond - isWatching is false by default');\n setup(obj, key, fn);\n assert.equal((0, _emberMetal.isWatching)(obj, key), true, 'isWatching is true when observers are added');\n teardown(obj, key, fn);\n assert.equal((0, _emberMetal.isWatching)(obj, key), false, 'isWatching is false after observers are removed');\n }\n\n (0, _internalTestHelpers.moduleFor)('isWatching', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test isWatching is true for regular local observers'] = function (assert) {\n testObserver(assert, function (obj, key, fn) {\n _emberMetal.Mixin.create({\n didChange: (0, _emberMetal.observer)(key, fn)\n }).apply(obj);\n }, function (obj, key, fn) {\n return (0, _emberMetal.removeObserver)(obj, key, obj, fn);\n });\n };\n\n _class.prototype['@test isWatching is true for nonlocal observers'] = function (assert) {\n testObserver(assert, function (obj, key, fn) {\n (0, _emberMetal.addObserver)(obj, key, obj, fn);\n }, function (obj, key, fn) {\n return (0, _emberMetal.removeObserver)(obj, key, obj, fn);\n });\n };\n\n _class.prototype['@test isWatching is true for chained observers'] = function (assert) {\n testObserver(assert, function (obj, key, fn) {\n (0, _emberMetal.addObserver)(obj, key + '.bar', obj, fn);\n }, function (obj, key, fn) {\n (0, _emberMetal.removeObserver)(obj, key + '.bar', obj, fn);\n });\n };\n\n _class.prototype['@test isWatching is true for computed properties'] = function (assert) {\n testObserver(assert, function (obj, key, fn) {\n (0, _emberMetal.defineProperty)(obj, 'computed', (0, _emberMetal.computed)(fn).property(key));\n (0, _emberMetal.get)(obj, 'computed');\n }, function (obj) {\n return (0, _emberMetal.defineProperty)(obj, 'computed', null);\n });\n };\n\n _class.prototype['@test isWatching is true for chained computed properties'] = function (assert) {\n testObserver(assert, function (obj, key, fn) {\n (0, _emberMetal.defineProperty)(obj, 'computed', (0, _emberMetal.computed)(fn).property(key + '.bar'));\n (0, _emberMetal.get)(obj, 'computed');\n }, function (obj) {\n return (0, _emberMetal.defineProperty)(obj, 'computed', null);\n });\n };\n\n _class.prototype[\"@test isWatching is true for 'length' property on object\"] = function (assert) {\n testObserver(assert, function (obj, key, fn) {\n (0, _emberMetal.defineProperty)(obj, 'length', null, '26.2 miles');\n (0, _emberMetal.addObserver)(obj, 'length', obj, fn);\n }, function (obj, key, fn) {\n return (0, _emberMetal.removeObserver)(obj, 'length', obj, fn);\n }, 'length');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/watching/unwatch_test', ['ember-babel', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var didCount = void 0;\n\n function addListeners(obj, keyPath) {\n (0, _emberMetal.addListener)(obj, keyPath + ':change', function () {\n return didCount++;\n });\n }\n\n (0, _internalTestHelpers.moduleFor)('unwatch', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n didCount = 0;\n };\n\n _class.prototype['@test unwatching a computed property - regular get/set'] = function (assert) {\n var obj = {};\n\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)({\n get: function () {\n return this.__foo;\n },\n set: function (keyName, value) {\n this.__foo = value;\n return this.__foo;\n }\n }));\n addListeners(obj, 'foo');\n\n (0, _emberMetal.watch)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(didCount, 1, 'should have invoked didCount');\n\n (0, _emberMetal.unwatch)(obj, 'foo');\n didCount = 0;\n (0, _emberMetal.set)(obj, 'foo', 'BAZ');\n assert.equal(didCount, 0, 'should NOT have invoked didCount');\n };\n\n _class.prototype['@test unwatching a regular property - regular get/set'] = function (assert) {\n var obj = { foo: 'BIFF' };\n addListeners(obj, 'foo');\n\n (0, _emberMetal.watch)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(didCount, 1, 'should have invoked didCount');\n\n (0, _emberMetal.unwatch)(obj, 'foo');\n didCount = 0;\n (0, _emberMetal.set)(obj, 'foo', 'BAZ');\n assert.equal(didCount, 0, 'should NOT have invoked didCount');\n };\n\n _class.prototype['@test unwatching should be nested'] = function (assert) {\n var obj = { foo: 'BIFF' };\n addListeners(obj, 'foo');\n\n (0, _emberMetal.watch)(obj, 'foo');\n (0, _emberMetal.watch)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(didCount, 1, 'should have invoked didCount');\n\n (0, _emberMetal.unwatch)(obj, 'foo');\n didCount = 0;\n (0, _emberMetal.set)(obj, 'foo', 'BAZ');\n assert.equal(didCount, 1, 'should NOT have invoked didCount');\n\n (0, _emberMetal.unwatch)(obj, 'foo');\n didCount = 0;\n (0, _emberMetal.set)(obj, 'foo', 'BAZ');\n assert.equal(didCount, 0, 'should NOT have invoked didCount');\n };\n\n _class.prototype['@test unwatching \"length\" property on an object'] = function (assert) {\n var obj = { foo: 'RUN' };\n addListeners(obj, 'length');\n\n // Can watch length when it is undefined\n (0, _emberMetal.watch)(obj, 'length');\n (0, _emberMetal.set)(obj, 'length', '10k');\n assert.equal(didCount, 1, 'should have invoked didCount');\n\n // Should stop watching despite length now being defined (making object 'array-like')\n (0, _emberMetal.unwatch)(obj, 'length');\n didCount = 0;\n (0, _emberMetal.set)(obj, 'length', '5k');\n assert.equal(didCount, 0, 'should NOT have invoked didCount');\n };\n\n _class.prototype['@test unwatching should not destroy non MANDATORY_SETTER descriptor'] = function (assert) {\n var obj = {\n get foo() {\n return 'RUN';\n }\n };\n\n assert.equal(obj.foo, 'RUN', 'obj.foo');\n (0, _emberMetal.watch)(obj, 'foo');\n assert.equal(obj.foo, 'RUN', 'obj.foo after watch');\n (0, _emberMetal.unwatch)(obj, 'foo');\n assert.equal(obj.foo, 'RUN', 'obj.foo after unwatch');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-metal/tests/watching/watch_test', ['ember-babel', 'ember-environment', 'ember-metal', 'ember-meta', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _emberMetal, _emberMeta, _internalTestHelpers) {\n 'use strict';\n\n var didCount = void 0,\n didKeys = void 0,\n originalLookup = void 0;\n\n function addListeners(obj, keyPath) {\n (0, _emberMetal.addListener)(obj, keyPath + ':change', function () {\n didCount++;\n didKeys.push(keyPath);\n });\n }\n\n (0, _internalTestHelpers.moduleFor)('watch', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n didCount = 0;\n didKeys = [];\n\n originalLookup = _emberEnvironment.context.lookup;\n _emberEnvironment.context.lookup = {};\n };\n\n _class.prototype.afterEach = function () {\n _emberEnvironment.context.lookup = originalLookup;\n };\n\n _class.prototype['@test watching a computed property'] = function (assert) {\n var obj = {};\n (0, _emberMetal.defineProperty)(obj, 'foo', (0, _emberMetal.computed)({\n get: function () {\n return this.__foo;\n },\n set: function (keyName, value) {\n if (value !== undefined) {\n this.__foo = value;\n }\n return this.__foo;\n }\n }));\n addListeners(obj, 'foo');\n\n (0, _emberMetal.watch)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(didCount, 1, 'should have invoked didCount');\n };\n\n _class.prototype['@test watching a regular defined property'] = function (assert) {\n var obj = { foo: 'baz' };\n addListeners(obj, 'foo');\n\n (0, _emberMetal.watch)(obj, 'foo');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'baz', 'should have original prop');\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n assert.equal(didCount, 1, 'should have invoked didCount');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar', 'should get new value');\n assert.equal(obj.foo, 'bar', 'property should be accessible on obj');\n };\n\n _class.prototype['@test watching a regular undefined property'] = function (assert) {\n var obj = {};\n addListeners(obj, 'foo');\n\n (0, _emberMetal.watch)(obj, 'foo');\n\n assert.equal('foo' in obj, false, 'precond undefined');\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n\n assert.equal(didCount, 1, 'should have invoked didCount');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar', 'should get new value');\n assert.equal(obj.foo, 'bar', 'property should be accessible on obj');\n };\n\n _class.prototype['@test watches should inherit'] = function (assert) {\n var obj = { foo: 'baz' };\n var objB = Object.create(obj);\n\n addListeners(obj, 'foo');\n (0, _emberMetal.watch)(obj, 'foo');\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'baz', 'should have original prop');\n\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n (0, _emberMetal.set)(objB, 'foo', 'baz');\n assert.equal(didCount, 2, 'should have invoked didCount once only');\n };\n\n _class.prototype['@test watching an object THEN defining it should work also'] = function (assert) {\n var obj = {};\n addListeners(obj, 'foo');\n\n (0, _emberMetal.watch)(obj, 'foo');\n\n (0, _emberMetal.defineProperty)(obj, 'foo');\n (0, _emberMetal.set)(obj, 'foo', 'bar');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar', 'should have set');\n assert.equal(didCount, 1, 'should have invoked didChange once');\n };\n\n _class.prototype['@test watching a chain then defining the property'] = function (assert) {\n var obj = {};\n var foo = { bar: 'bar' };\n addListeners(obj, 'foo.bar');\n addListeners(foo, 'bar');\n\n (0, _emberMetal.watch)(obj, 'foo.bar');\n\n (0, _emberMetal.defineProperty)(obj, 'foo', undefined, foo);\n (0, _emberMetal.set)(foo, 'bar', 'baz');\n\n assert.deepEqual(didKeys, ['foo.bar', 'bar'], 'should have invoked didChange with bar, foo.bar');\n assert.equal(didCount, 2, 'should have invoked didChange twice');\n };\n\n _class.prototype['@test watching a chain then defining the nested property'] = function (assert) {\n var bar = {};\n var obj = { foo: bar };\n var baz = { baz: 'baz' };\n addListeners(obj, 'foo.bar.baz');\n addListeners(baz, 'baz');\n\n (0, _emberMetal.watch)(obj, 'foo.bar.baz');\n\n (0, _emberMetal.defineProperty)(bar, 'bar', undefined, baz);\n (0, _emberMetal.set)(baz, 'baz', 'BOO');\n\n assert.deepEqual(didKeys, ['foo.bar.baz', 'baz'], 'should have invoked didChange with bar, foo.bar');\n assert.equal(didCount, 2, 'should have invoked didChange twice');\n };\n\n _class.prototype['@test watching an object value then unwatching should restore old value'] = function (assert) {\n var obj = { foo: { bar: { baz: { biff: 'BIFF' } } } };\n addListeners(obj, 'foo.bar.baz.biff');\n\n (0, _emberMetal.watch)(obj, 'foo.bar.baz.biff');\n\n var foo = (0, _emberMetal.get)(obj, 'foo');\n assert.equal((0, _emberMetal.get)((0, _emberMetal.get)((0, _emberMetal.get)(foo, 'bar'), 'baz'), 'biff'), 'BIFF', 'biff should exist');\n\n (0, _emberMetal.unwatch)(obj, 'foo.bar.baz.biff');\n assert.equal((0, _emberMetal.get)((0, _emberMetal.get)((0, _emberMetal.get)(foo, 'bar'), 'baz'), 'biff'), 'BIFF', 'biff should exist');\n };\n\n _class.prototype['@test when watching another object, destroy should remove chain watchers from the other object'] = function (assert) {\n var objA = {};\n var objB = { foo: 'bar' };\n objA.b = objB;\n addListeners(objA, 'b.foo');\n\n (0, _emberMetal.watch)(objA, 'b.foo');\n\n var meta_objB = (0, _emberMeta.meta)(objB);\n var chainNode = (0, _emberMeta.meta)(objA).readableChains().chains.b.chains.foo;\n\n assert.equal(meta_objB.peekWatching('foo'), 1, 'should be watching foo');\n assert.equal(meta_objB.readableChainWatchers().has('foo', chainNode), true, 'should have chain watcher');\n\n (0, _emberMeta.deleteMeta)(objA);\n\n assert.equal(meta_objB.peekWatching('foo'), 0, 'should not be watching foo');\n assert.equal(meta_objB.readableChainWatchers().has('foo', chainNode), false, 'should not have chain watcher');\n };\n\n _class.prototype['@test watching \"length\" property on an object'] = function (assert) {\n var obj = { length: '26.2 miles' };\n addListeners(obj, 'length');\n\n (0, _emberMetal.watch)(obj, 'length');\n assert.equal((0, _emberMetal.get)(obj, 'length'), '26.2 miles', 'should have original prop');\n\n (0, _emberMetal.set)(obj, 'length', '10k');\n assert.equal(didCount, 1, 'should have invoked didCount');\n\n assert.equal((0, _emberMetal.get)(obj, 'length'), '10k', 'should get new value');\n assert.equal(obj.length, '10k', 'property should be accessible on obj');\n };\n\n _class.prototype['@test watching \"length\" property on an array'] = function (assert) {\n var arr = [];\n addListeners(arr, 'length');\n\n (0, _emberMetal.watch)(arr, 'length');\n assert.equal((0, _emberMetal.get)(arr, 'length'), 0, 'should have original prop');\n\n (0, _emberMetal.set)(arr, 'length', '10');\n assert.equal(didCount, 1, 'should NOT have invoked didCount');\n\n assert.equal((0, _emberMetal.get)(arr, 'length'), 10, 'should get new value');\n assert.equal(arr.length, 10, 'property should be accessible on arr');\n };\n\n _class.prototype['@test watch + ES5 getter'] = function (assert) {\n var parent = { b: 1 };\n var child = {\n get b() {\n return parent.b;\n }\n };\n\n assert.equal(parent.b, 1, 'parent.b should be 1');\n assert.equal(child.b, 1, 'child.b should be 1');\n assert.equal((0, _emberMetal.get)(child, 'b'), 1, 'get(child, \"b\") should be 1');\n\n (0, _emberMetal.watch)(child, 'b');\n\n assert.equal(parent.b, 1, 'parent.b should be 1 (after watch)');\n assert.equal(child.b, 1, 'child.b should be 1 (after watch)');\n\n assert.equal((0, _emberMetal.get)(child, 'b'), 1, 'get(child, \"b\") should be 1 (after watch)');\n };\n\n _class.prototype['@test watch + set + no-descriptor'] = function (assert) {\n var child = {};\n\n assert.equal(child.b, undefined, 'child.b ');\n assert.equal((0, _emberMetal.get)(child, 'b'), undefined, 'get(child, \"b\")');\n\n (0, _emberMetal.watch)(child, 'b');\n (0, _emberMetal.set)(child, 'b', 1);\n\n assert.equal(child.b, 1, 'child.b (after watch)');\n assert.equal((0, _emberMetal.get)(child, 'b'), 1, 'get(child, \"b\") (after watch)');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/ext/controller_test', ['ember-babel', 'ember-owner', '@ember/controller', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _controller, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-routing/ext/controller', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype[\"@test transitionToRoute considers an engine's mountPoint\"] = function (assert) {\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n routable: true,\n mountPoint: 'foo.bar'\n }\n });\n\n var controller = _controller.default.create({ target: {\n transitionTo: function (route) {\n return route;\n }\n } });\n (0, _emberOwner.setOwner)(controller, engineInstance);\n\n assert.strictEqual(controller.transitionToRoute('application'), 'foo.bar.application', 'properly prefixes application route');\n assert.strictEqual(controller.transitionToRoute('posts'), 'foo.bar.posts', 'properly prefixes child routes');\n assert.throws(function () {\n return controller.transitionToRoute('/posts');\n }, 'throws when trying to use a url');\n\n var queryParams = {};\n assert.strictEqual(controller.transitionToRoute(queryParams), queryParams, 'passes query param only transitions through');\n };\n\n _class.prototype[\"@test replaceRoute considers an engine's mountPoint\"] = function (assert) {\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n routable: true,\n mountPoint: 'foo.bar'\n }\n });\n\n var controller = _controller.default.create({ target: {\n replaceWith: function (route) {\n return route;\n }\n } });\n (0, _emberOwner.setOwner)(controller, engineInstance);\n\n assert.strictEqual(controller.replaceRoute('application'), 'foo.bar.application', 'properly prefixes application route');\n assert.strictEqual(controller.replaceRoute('posts'), 'foo.bar.posts', 'properly prefixes child routes');\n assert.throws(function () {\n return controller.replaceRoute('/posts');\n }, 'throws when trying to use a url');\n\n var queryParams = {};\n assert.strictEqual(controller.replaceRoute(queryParams), queryParams, 'passes query param only transitions through');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/location/auto_location_test', ['ember-babel', 'ember-owner', '@ember/polyfills', 'ember-browser-environment', '@ember/runloop', 'ember-metal', 'ember-routing/lib/location/auto_location', 'ember-routing/lib/location/history_location', 'ember-routing/lib/location/hash_location', 'ember-routing/lib/location/none_location', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _polyfills, _emberBrowserEnvironment, _runloop, _emberMetal, _auto_location, _history_location, _hash_location, _none_location, _internalTestHelpers) {\n 'use strict';\n\n function mockBrowserLocation(overrides, assert) {\n return (0, _polyfills.assign)({\n href: 'http://test.com/',\n pathname: '/',\n hash: '',\n search: '',\n replace: function () {\n assert.ok(false, 'location.replace should not be called during testing');\n }\n }, overrides);\n }\n\n function mockBrowserHistory(overrides, assert) {\n return (0, _polyfills.assign)({\n pushState: function () {\n assert.ok(false, 'history.pushState should not be called during testing');\n },\n replaceState: function () {\n assert.ok(false, 'history.replaceState should not be called during testing');\n }\n }, overrides);\n }\n\n function createLocation(location, history) {\n var _AutoLocation$create;\n\n owner = (0, _internalTestHelpers.buildOwner)();\n\n owner.register('location:history', _history_location.default);\n owner.register('location:hash', _hash_location.default);\n owner.register('location:none', _none_location.default);\n\n var autolocation = _auto_location.default.create((_AutoLocation$create = {}, _AutoLocation$create[_emberOwner.OWNER] = owner, _AutoLocation$create.location = location, _AutoLocation$create.history = history, _AutoLocation$create.global = {}, _AutoLocation$create));\n\n return autolocation;\n }\n\n var location = void 0,\n owner = void 0;\n\n (0, _internalTestHelpers.moduleFor)('AutoLocation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function () {\n if (owner) {\n (0, _runloop.run)(owner, 'destroy');\n owner = location = undefined;\n }\n };\n\n _class.prototype['@test AutoLocation should have the `global`'] = function (assert) {\n var location = _auto_location.default.create();\n\n assert.ok(location.global, 'has a global defined');\n assert.strictEqual(location.global, _emberBrowserEnvironment.window, 'has the environments window global');\n };\n\n _class.prototype[\"@test AutoLocation should return concrete implementation's value for `getURL`\"] = function (assert) {\n var browserLocation = mockBrowserLocation({}, assert);\n var browserHistory = mockBrowserHistory({}, assert);\n\n location = createLocation(browserLocation, browserHistory);\n location.detect();\n\n var concreteImplementation = (0, _emberMetal.get)(location, 'concreteImplementation');\n\n concreteImplementation.getURL = function () {\n return '/lincoln/park';\n };\n\n assert.equal(location.getURL(), '/lincoln/park');\n };\n\n _class.prototype['@test AutoLocation should use a HistoryLocation instance when pushStates is supported'] = function (assert) {\n var browserLocation = mockBrowserLocation({}, assert);\n var browserHistory = mockBrowserHistory({}, assert);\n\n location = createLocation(browserLocation, browserHistory);\n location.detect();\n\n assert.ok((0, _emberMetal.get)(location, 'concreteImplementation') instanceof _history_location.default);\n };\n\n _class.prototype['@test AutoLocation should use a HashLocation instance when pushStates are not supported, but hashchange events are and the URL is already in the HashLocation format'] = function (assert) {\n var browserLocation = mockBrowserLocation({\n hash: '#/testd'\n }, assert);\n\n location = createLocation(browserLocation);\n location.global = {\n onhashchange: function () {}\n };\n\n location.detect();\n assert.ok((0, _emberMetal.get)(location, 'concreteImplementation') instanceof _hash_location.default);\n };\n\n _class.prototype['@test AutoLocation should use a NoneLocation instance when neither history nor hashchange are supported.'] = function (assert) {\n location = createLocation(mockBrowserLocation({}, assert));\n location.detect();\n\n assert.ok((0, _emberMetal.get)(location, 'concreteImplementation') instanceof _none_location.default);\n };\n\n _class.prototype[\"@test AutoLocation should use an index path (i.e. '/') without any location.hash as OK for HashLocation\"] = function (assert) {\n var browserLocation = mockBrowserLocation({\n href: 'http://test.com/',\n pathname: '/',\n hash: '',\n search: '',\n replace: function () {\n assert.ok(false, 'location.replace should not be called');\n }\n }, assert);\n\n location = createLocation(browserLocation);\n location.global = {\n onhashchange: function () {}\n };\n\n location.detect();\n\n assert.ok((0, _emberMetal.get)(location, 'concreteImplementation') instanceof _hash_location.default, 'uses a HashLocation');\n };\n\n _class.prototype['@test AutoLocation should transform the URL for hashchange-only browsers viewing a HistoryLocation-formatted path'] = function (assert) {\n assert.expect(3);\n\n var browserLocation = mockBrowserLocation({\n hash: '',\n hostname: 'test.com',\n href: 'http://test.com/test',\n pathname: '/test',\n protocol: 'http:',\n port: '',\n search: '',\n replace: function (path) {\n assert.equal(path, 'http://test.com/#/test', 'location.replace should be called with normalized HashLocation path');\n }\n }, assert);\n\n var location = createLocation(browserLocation);\n location.global = {\n onhashchange: function () {}\n };\n\n location.detect();\n\n assert.ok((0, _emberMetal.get)(location, 'concreteImplementation') instanceof _none_location.default, 'NoneLocation should be used while we attempt to location.replace()');\n assert.equal((0, _emberMetal.get)(location, 'cancelRouterSetup'), true, 'cancelRouterSetup should be set so the router knows.');\n };\n\n _class.prototype['@test AutoLocation should replace the URL for pushState-supported browsers viewing a HashLocation-formatted url'] = function (assert) {\n assert.expect(2);\n var browserLocation = mockBrowserLocation({\n hash: '#/test',\n hostname: 'test.com',\n href: 'http://test.com/#/test',\n pathname: '/',\n protocol: 'http:',\n port: '',\n search: ''\n }, assert);\n\n var browserHistory = mockBrowserHistory({\n replaceState: function (state, title, path) {\n assert.equal(path, '/test', 'history.replaceState should be called with normalized HistoryLocation url');\n }\n }, assert);\n\n var location = createLocation(browserLocation, browserHistory);\n location.detect();\n\n assert.ok((0, _emberMetal.get)(location, 'concreteImplementation'), _history_location.default);\n };\n\n _class.prototype['@test AutoLocation requires any rootURL given to end in a trailing forward slash'] = function (assert) {\n var browserLocation = mockBrowserLocation({}, assert);\n var expectedMsg = /rootURL must end with a trailing forward slash e.g. \"\\/app\\/\"/;\n\n location = createLocation(browserLocation);\n location.rootURL = 'app';\n\n expectAssertion(function () {\n location.detect();\n }, expectedMsg);\n\n location.rootURL = '/app';\n expectAssertion(function () {\n location.detect();\n }, expectedMsg);\n\n // Note the trailing whitespace\n location.rootURL = '/app/ ';\n expectAssertion(function () {\n location.detect();\n }, expectedMsg);\n };\n\n _class.prototype['@test AutoLocation provides its rootURL to the concreteImplementation'] = function (assert) {\n var browserLocation = mockBrowserLocation({\n pathname: '/some/subdir/derp'\n }, assert);\n var browserHistory = mockBrowserHistory({}, assert);\n\n location = createLocation(browserLocation, browserHistory);\n location.rootURL = '/some/subdir/';\n\n location.detect();\n\n var concreteLocation = (0, _emberMetal.get)(location, 'concreteImplementation');\n assert.equal(location.rootURL, concreteLocation.rootURL);\n };\n\n _class.prototype['@test getHistoryPath() should return a normalized, HistoryLocation-supported path'] = function (assert) {\n var browserLocation = mockBrowserLocation({\n href: 'http://test.com/app/about?foo=bar#foo',\n pathname: '/app/about',\n search: '?foo=bar',\n hash: '#foo'\n }, assert);\n\n assert.equal((0, _auto_location.getHistoryPath)('/app/', browserLocation), '/app/about?foo=bar#foo', 'URLs already in HistoryLocation form should come out the same');\n\n browserLocation = mockBrowserLocation({\n href: 'http://test.com/app/#/about?foo=bar#foo',\n pathname: '/app/',\n search: '',\n hash: '#/about?foo=bar#foo'\n }, assert);\n assert.equal((0, _auto_location.getHistoryPath)('/app/', browserLocation), '/app/about?foo=bar#foo', 'HashLocation formed URLs should be normalized');\n\n browserLocation = mockBrowserLocation({\n href: 'http://test.com/app/#about?foo=bar#foo',\n pathname: '/app/',\n search: '',\n hash: '#about?foo=bar#foo'\n }, assert);\n assert.equal((0, _auto_location.getHistoryPath)('/app', browserLocation), '/app/#about?foo=bar#foo', \"URLs with a hash not following #/ convention shouldn't be normalized as a route\");\n };\n\n _class.prototype['@test getHashPath() should return a normalized, HashLocation-supported path'] = function (assert) {\n var browserLocation = mockBrowserLocation({\n href: 'http://test.com/app/#/about?foo=bar#foo',\n pathname: '/app/',\n search: '',\n hash: '#/about?foo=bar#foo'\n }, assert);\n assert.equal((0, _auto_location.getHashPath)('/app/', browserLocation), '/app/#/about?foo=bar#foo', 'URLs already in HistoryLocation form should come out the same');\n\n browserLocation = mockBrowserLocation({\n href: 'http://test.com/app/about?foo=bar#foo',\n pathname: '/app/about',\n search: '?foo=bar',\n hash: '#foo'\n }, assert);\n assert.equal((0, _auto_location.getHashPath)('/app/', browserLocation), '/app/#/about?foo=bar#foo', 'HistoryLocation formed URLs should be normalized');\n\n browserLocation = mockBrowserLocation({\n href: 'http://test.com/app/#about?foo=bar#foo',\n pathname: '/app/',\n search: '',\n hash: '#about?foo=bar#foo'\n }, assert);\n\n assert.equal((0, _auto_location.getHashPath)('/app/', browserLocation), '/app/#/#about?foo=bar#foo', \"URLs with a hash not following #/ convention shouldn't be normalized as a route\");\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/location/hash_location_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-routing/lib/location/hash_location', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _hash_location, _internalTestHelpers) {\n 'use strict';\n\n var location = void 0;\n\n function createLocation(options, assert) {\n var HashTestLocation = _hash_location.default.extend({\n _location: {\n href: 'http://test.com/',\n pathname: '/',\n hash: '',\n search: '',\n replace: function () {\n assert.ok(false, 'location.replace should not be called during testing');\n }\n }\n });\n\n if (!options) {\n options = {};\n }\n location = HashTestLocation.create(options);\n }\n\n function mockBrowserLocation(path) {\n // This is a neat trick to auto-magically extract the hostname from any\n // url by letting the browser do the work ;)\n var tmp = document.createElement('a');\n tmp.href = path;\n\n var protocol = !tmp.protocol || tmp.protocol === ':' ? 'http' : tmp.protocol;\n var pathname = tmp.pathname.match(/^\\//) ? tmp.pathname : '/' + tmp.pathname;\n\n return {\n hash: tmp.hash,\n host: tmp.host || 'localhost',\n hostname: tmp.hostname || 'localhost',\n href: tmp.href,\n pathname: pathname,\n port: tmp.port || '',\n protocol: protocol,\n search: tmp.search\n };\n }\n\n function triggerHashchange() {\n var event = document.createEvent('HTMLEvents');\n event.initEvent('hashchange', true, false);\n window.dispatchEvent(event);\n }\n\n (0, _internalTestHelpers.moduleFor)('HashLocation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function () {\n (0, _runloop.run)(function () {\n if (location) {\n location.destroy();\n }\n });\n };\n\n _class.prototype['@test HashLocation.getURL() returns the current url'] = function (assert) {\n createLocation({\n _location: mockBrowserLocation('/#/foo/bar')\n }, assert);\n\n assert.equal(location.getURL(), '/foo/bar');\n };\n\n _class.prototype['@test HashLocation.getURL() includes extra hashes'] = function (assert) {\n createLocation({\n _location: mockBrowserLocation('/#/foo#bar#car')\n }, assert);\n\n assert.equal(location.getURL(), '/foo#bar#car');\n };\n\n _class.prototype['@test HashLocation.getURL() assumes location.hash without #/ prefix is not a route path'] = function (assert) {\n createLocation({\n _location: mockBrowserLocation('/#foo#bar')\n }, assert);\n\n assert.equal(location.getURL(), '/#foo#bar');\n };\n\n _class.prototype['@test HashLocation.getURL() returns a normal forward slash when there is no location.hash'] = function (assert) {\n createLocation({\n _location: mockBrowserLocation('/')\n }, assert);\n\n assert.equal(location.getURL(), '/');\n };\n\n _class.prototype['@test HashLocation.setURL() correctly sets the url'] = function (assert) {\n createLocation({}, assert);\n\n location.setURL('/bar');\n\n assert.equal((0, _emberMetal.get)(location, 'location.hash'), '/bar');\n assert.equal((0, _emberMetal.get)(location, 'lastSetURL'), '/bar');\n };\n\n _class.prototype['@test HashLocation.replaceURL() correctly replaces to the path with a page reload'] = function (assert) {\n assert.expect(2);\n\n createLocation({\n _location: {\n replace: function (path) {\n assert.equal(path, '#/foo');\n }\n }\n }, assert);\n\n location.replaceURL('/foo');\n\n assert.equal((0, _emberMetal.get)(location, 'lastSetURL'), '/foo');\n };\n\n _class.prototype['@test HashLocation.onUpdateURL callback executes as expected'] = function (assert) {\n assert.expect(1);\n\n createLocation({\n _location: mockBrowserLocation('/#/foo/bar')\n }, assert);\n\n location.onUpdateURL(function (param) {\n assert.equal(param, '/foo/bar', 'path is passed as param');\n });\n\n triggerHashchange();\n };\n\n _class.prototype[\"@test HashLocation.onUpdateURL doesn't execute callback if lastSetURL === path\"] = function (assert) {\n assert.expect(0);\n\n createLocation({\n _location: {\n href: '/#/foo/bar'\n },\n lastSetURL: '/foo/bar'\n }, assert);\n\n location.onUpdateURL(function () {\n assert.ok(false, 'callback should not be called');\n });\n\n triggerHashchange();\n };\n\n _class.prototype['@test HashLocation.formatURL() prepends a # to the provided string'] = function (assert) {\n createLocation({}, assert);\n\n assert.equal(location.formatURL('/foo#bar'), '#/foo#bar');\n };\n\n _class.prototype['@test HashLocation.willDestroy() cleans up hashchange event listener'] = function (assert) {\n assert.expect(1);\n\n createLocation({}, assert);\n\n location.onUpdateURL(function () {\n assert.ok(true, 'should invoke callback once');\n });\n\n triggerHashchange();\n\n (0, _runloop.run)(location, 'destroy');\n location = null;\n\n triggerHashchange();\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/location/history_location_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-routing/lib/location/history_location', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _history_location, _internalTestHelpers) {\n 'use strict';\n\n var FakeHistory = void 0,\n HistoryTestLocation = void 0,\n location = void 0;\n\n function createLocation(options) {\n if (!options) {\n options = {};\n }\n location = HistoryTestLocation.create(options);\n }\n\n function mockBrowserLocation(path) {\n // This is a neat trick to auto-magically extract the hostname from any\n // url by letting the browser do the work ;)\n var tmp = document.createElement('a');\n tmp.href = path;\n\n var protocol = !tmp.protocol || tmp.protocol === ':' ? 'http' : tmp.protocol;\n var pathname = tmp.pathname.match(/^\\//) ? tmp.pathname : '/' + tmp.pathname;\n\n return {\n hash: tmp.hash,\n host: tmp.host || 'localhost',\n hostname: tmp.hostname || 'localhost',\n href: tmp.href,\n pathname: pathname,\n port: tmp.port || '',\n protocol: protocol,\n search: tmp.search\n };\n }\n\n (0, _internalTestHelpers.moduleFor)('HistoryLocation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n FakeHistory = {\n state: null,\n _states: [],\n replaceState: function (state) {\n this.state = state;\n this._states[0] = state;\n },\n pushState: function (state) {\n this.state = state;\n this._states.unshift(state);\n }\n };\n\n HistoryTestLocation = _history_location.default.extend({\n history: FakeHistory\n });\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _runloop.run)(function () {\n if (location) {\n location.destroy();\n }\n });\n };\n\n _class.prototype['@test HistoryLocation initState does not get fired on init'] = function (assert) {\n assert.expect(1);\n\n HistoryTestLocation.reopen({\n init: function () {\n assert.ok(true, 'init was called');\n this._super.apply(this, arguments);\n },\n initState: function () {\n assert.ok(false, 'initState() should not be called automatically');\n }\n });\n\n createLocation();\n };\n\n _class.prototype[\"@test webkit doesn't fire popstate on page load\"] = function (assert) {\n assert.expect(1);\n\n HistoryTestLocation.reopen({\n initState: function () {\n this._super.apply(this, arguments);\n // these two should be equal to be able\n // to successfully detect webkit initial popstate\n assert.equal(this._previousURL, this.getURL());\n }\n });\n\n createLocation();\n location.initState();\n };\n\n _class.prototype['@test base URL is removed when retrieving the current pathname'] = function (assert) {\n assert.expect(1);\n\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/base/foo/bar'));\n (0, _emberMetal.set)(this, 'baseURL', '/base/');\n },\n initState: function () {\n this._super.apply(this, arguments);\n\n assert.equal(this.getURL(), '/foo/bar');\n }\n });\n\n createLocation();\n location.initState();\n };\n\n _class.prototype['@test base URL is preserved when moving around'] = function (assert) {\n assert.expect(2);\n\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/base/foo/bar'));\n (0, _emberMetal.set)(this, 'baseURL', '/base/');\n }\n });\n\n createLocation();\n location.initState();\n location.setURL('/one/two');\n\n assert.equal(location._historyState.path, '/base/one/two');\n assert.ok(location._historyState.uuid);\n };\n\n _class.prototype['@test setURL continues to set even with a null state (iframes may set this)'] = function (assert) {\n createLocation();\n location.initState();\n\n FakeHistory.pushState(null);\n location.setURL('/three/four');\n\n assert.equal(location._historyState.path, '/three/four');\n assert.ok(location._historyState.uuid);\n };\n\n _class.prototype['@test replaceURL continues to set even with a null state (iframes may set this)'] = function (assert) {\n createLocation();\n location.initState();\n\n FakeHistory.pushState(null);\n location.replaceURL('/three/four');\n\n assert.equal(location._historyState.path, '/three/four');\n assert.ok(location._historyState.uuid);\n };\n\n _class.prototype['@test HistoryLocation.getURL() returns the current url, excluding both rootURL and baseURL'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/base/foo/bar'));\n (0, _emberMetal.set)(this, 'rootURL', '/app/');\n (0, _emberMetal.set)(this, 'baseURL', '/base/');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/foo/bar');\n };\n\n _class.prototype['@test HistoryLocation.getURL() returns the current url, does not remove rootURL if its not at start of url'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/foo/bar/baz'));\n (0, _emberMetal.set)(this, 'rootURL', '/bar/');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/foo/bar/baz');\n };\n\n _class.prototype['@test HistoryLocation.getURL() will not remove the rootURL when only a partial match'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/bars/baz'));\n (0, _emberMetal.set)(this, 'rootURL', '/bar/');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/bars/baz');\n };\n\n _class.prototype['@test HistoryLocation.getURL() returns the current url, does not remove baseURL if its not at start of url'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/foo/bar/baz'));\n (0, _emberMetal.set)(this, 'baseURL', '/bar/');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/foo/bar/baz');\n };\n\n _class.prototype['@test HistoryLocation.getURL() will not remove the baseURL when only a partial match'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/bars/baz'));\n (0, _emberMetal.set)(this, 'baseURL', '/bar/');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/bars/baz');\n };\n\n _class.prototype['@test HistoryLocation.getURL() includes location.search'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/foo/bar?time=morphin'));\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/foo/bar?time=morphin');\n };\n\n _class.prototype['@test HistoryLocation.getURL() includes location.hash'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/foo/bar#pink-power-ranger'));\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/foo/bar#pink-power-ranger');\n };\n\n _class.prototype['@test HistoryLocation.getURL() includes location.hash and location.search'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/foo/bar?time=morphin#pink-power-ranger'));\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/foo/bar?time=morphin#pink-power-ranger');\n };\n\n _class.prototype['@test HistoryLocation.getURL() drops duplicate slashes'] = function (assert) {\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n var location = mockBrowserLocation('//');\n location.pathname = '//'; // mockBrowserLocation does not allow for `//`, so force it\n (0, _emberMetal.set)(this, 'location', location);\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/');\n };\n\n _class.prototype['@test Existing state is preserved on init'] = function (assert) {\n var existingState = {\n path: '/route/path',\n uuid: 'abcd'\n };\n\n FakeHistory.state = existingState;\n\n HistoryTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'location', mockBrowserLocation('/route/path'));\n }\n });\n\n createLocation();\n location.initState();\n assert.deepEqual(location.getState(), existingState);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/location/none_location_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-routing/lib/location/none_location', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _none_location, _internalTestHelpers) {\n 'use strict';\n\n var NoneTestLocation = void 0,\n location = void 0;\n\n function createLocation(options) {\n if (!options) {\n options = {};\n }\n location = NoneTestLocation.create(options);\n }\n\n (0, _internalTestHelpers.moduleFor)('NoneLocation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n NoneTestLocation = _none_location.default.extend({});\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _runloop.run)(function () {\n if (location) {\n location.destroy();\n }\n });\n };\n\n _class.prototype['@test NoneLocation.formatURL() returns the current url always appending rootURL'] = function (assert) {\n NoneTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'rootURL', '/en/');\n }\n });\n\n createLocation();\n\n assert.equal(location.formatURL('/foo/bar'), '/en/foo/bar');\n };\n\n _class.prototype['@test NoneLocation.getURL() returns the current path minus rootURL'] = function (assert) {\n NoneTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'rootURL', '/foo/');\n (0, _emberMetal.set)(this, 'path', '/foo/bar');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/bar');\n };\n\n _class.prototype['@test NoneLocation.getURL() will remove the rootURL only from the beginning of a url'] = function (assert) {\n NoneTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'rootURL', '/bar/');\n (0, _emberMetal.set)(this, 'path', '/foo/bar/baz');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/foo/bar/baz');\n };\n\n _class.prototype['@test NoneLocation.getURL() will not remove the rootURL when only a partial match'] = function (assert) {\n NoneTestLocation.reopen({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'rootURL', '/bar/');\n (0, _emberMetal.set)(this, 'path', '/bars/baz');\n }\n });\n\n createLocation();\n\n assert.equal(location.getURL(), '/bars/baz');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/location/util_test', ['ember-babel', '@ember/polyfills', 'ember-routing/lib/location/util', 'internal-test-helpers'], function (_emberBabel, _polyfills, _util, _internalTestHelpers) {\n 'use strict';\n\n function mockBrowserLocation(overrides, assert) {\n return (0, _polyfills.assign)({\n href: 'http://test.com/',\n pathname: '/',\n hash: '',\n search: '',\n replace: function () {\n assert.ok(false, 'location.replace should not be called during testing');\n }\n }, overrides);\n }\n\n (0, _internalTestHelpers.moduleFor)('Location Utilities', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test replacePath cannot be used to redirect to a different origin'] = function (assert) {\n assert.expect(1);\n\n var expectedURL = void 0;\n\n expectedURL = 'http://emberjs.com:1337//google.com';\n (0, _util.replacePath)({\n protocol: 'http:',\n hostname: 'emberjs.com',\n port: '1337',\n\n replace: function (url) {\n assert.equal(url, expectedURL);\n }\n }, '//google.com');\n };\n\n _class.prototype['@test getPath() should normalize location.pathname, making sure it always returns a leading slash'] = function (assert) {\n var location = mockBrowserLocation({ pathname: 'test' }, assert);\n assert.equal((0, _util.getPath)(location), '/test', 'When there is no leading slash, one is added.');\n\n location = mockBrowserLocation({ pathname: '/test' }, assert);\n assert.equal((0, _util.getPath)(location), '/test', \"When a leading slash is already there, it isn't added again\");\n };\n\n _class.prototype['@test getQuery() should return location.search as-is'] = function (assert) {\n var location = mockBrowserLocation({ search: '?foo=bar' }, assert);\n assert.equal((0, _util.getQuery)(location), '?foo=bar');\n };\n\n _class.prototype['@test getFullPath() should return full pathname including query and hash'] = function (assert) {\n var location = mockBrowserLocation({\n href: 'http://test.com/about?foo=bar#foo',\n pathname: '/about',\n search: '?foo=bar',\n hash: '#foo'\n }, assert);\n\n assert.equal((0, _util.getFullPath)(location), '/about?foo=bar#foo');\n };\n\n _class.prototype['@test Feature-Detecting onhashchange'] = function (assert) {\n assert.equal((0, _util.supportsHashChange)(undefined, {\n onhashchange: function () {}\n }), true, 'When not in IE, use onhashchange existence as evidence of the feature');\n assert.equal((0, _util.supportsHashChange)(undefined, {}), false, 'When not in IE, use onhashchange absence as evidence of the feature absence');\n assert.equal((0, _util.supportsHashChange)(7, {\n onhashchange: function () {}\n }), false, 'When in IE7 compatibility mode, never report existence of the feature');\n assert.equal((0, _util.supportsHashChange)(8, {\n onhashchange: function () {}\n }), true, 'When in IE8+, use onhashchange existence as evidence of the feature');\n };\n\n _class.prototype['@test Feature-detecting the history API'] = function (assert) {\n assert.equal((0, _util.supportsHistory)('', { pushState: true }), true, 'returns true if not Android Gingerbread and history.pushState exists');\n assert.equal((0, _util.supportsHistory)('', {}), false, \"returns false if history.pushState doesn't exist\");\n assert.equal((0, _util.supportsHistory)('', undefined), false, \"returns false if history doesn't exist\");\n\n assert.equal((0, _util.supportsHistory)('Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1', { pushState: true }), false, 'returns false if Android 2.x stock browser (not Chrome) claiming to support pushState');\n\n assert.equal((0, _util.supportsHistory)('Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; GT-N7000 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', { pushState: true }), false, 'returns false for Android 4.0.x stock browser (not Chrome) claiming to support pushState');\n\n assert.equal((0, _util.supportsHistory)('Mozilla/5.0 (Linux; U; Android 20.3.5; en-us; HTC Vision Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1', { pushState: true }), true, 'returns true if Android version begins with 2, but is greater than 2');\n\n assert.equal((0, _util.supportsHistory)('Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19', { pushState: true }), true, 'returns true for Chrome (not stock browser) on Android 4.0.x');\n\n // Windows Phone UA and History API: https://github.com/Modernizr/Modernizr/issues/1471\n assert.equal((0, _util.supportsHistory)('Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; Microsoft; Virtual) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537', { pushState: true }), true, 'returns true for Windows Phone 8.1 with misleading user agent string');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/system/cache_test', ['ember-babel', 'ember-routing/lib/system/cache', 'internal-test-helpers'], function (_emberBabel, _cache, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('BucketCache', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n _this.cache = new _cache.default();\n return _this;\n }\n\n _class.prototype['@test has - returns false when bucket is not in cache'] = function (assert) {\n assert.strictEqual(this.cache.has('foo'), false);\n assert.strictEqual(this.cache.has('constructor'), false);\n };\n\n _class.prototype['@test has - returns true when bucket is in cache'] = function (assert) {\n var token = {};\n\n this.cache.stash('foo', 'bar', token);\n this.cache.stash('constructor', 'bar', token);\n\n assert.strictEqual(this.cache.has('foo'), true);\n assert.strictEqual(this.cache.has('constructor'), true);\n };\n\n _class.prototype['@test lookup - returns stashed value if key does exist in bucket'] = function (assert) {\n var token = {};\n\n\n this.cache.stash('foo', 'bar', token);\n\n assert.strictEqual(this.cache.lookup('foo', 'bar', {}), token);\n };\n\n _class.prototype['@test lookup - returns default value if key does not exist in bucket'] = function (assert) {\n var defaultValue = {};\n\n this.cache.stash('foo', 'bar', {});\n\n assert.strictEqual(this.cache.lookup('foo', 'boo', defaultValue), defaultValue);\n assert.strictEqual(this.cache.lookup('foo', 'constructor', defaultValue), defaultValue);\n };\n\n _class.prototype['@test lookup - returns default value if bucket does not exist'] = function (assert) {\n var defaultValue = {};\n\n assert.strictEqual(this.cache.lookup('boo', 'bar', defaultValue), defaultValue);\n assert.strictEqual(this.cache.lookup('constructor', 'bar', defaultValue), defaultValue);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/system/controller_for_test', ['ember-babel', '@ember/controller', 'ember-routing/lib/system/controller_for', 'ember-routing/lib/system/generate_controller', 'internal-test-helpers', '@ember/debug'], function (_emberBabel, _controller, _controller_for, _generate_controller, _internalTestHelpers, _debug) {\n 'use strict';\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n var noop = function () {};\n\n (0, _internalTestHelpers.moduleFor)('controllerFor', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n (0, _debug.setDebugFunction)('debug', noop);\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n }\n\n _class.prototype.teardown = function () {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n };\n\n _class.prototype['@test controllerFor should lookup for registered controllers'] = function (assert) {\n var _this2 = this;\n\n this.add('controller:app', _controller.default.extend());\n\n return this.visit('/').then(function () {\n var appInstance = _this2.applicationInstance;\n var appController = appInstance.lookup('controller:app');\n var controller = (0, _controller_for.default)(appInstance, 'app');\n assert.equal(appController, controller, 'should find app controller');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('generateController', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n (0, _debug.setDebugFunction)('debug', noop);\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.call(this));\n }\n\n _class2.prototype.teardown = function () {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n };\n\n _class2.prototype['@test generateController should return Controller'] = function (assert) {\n var _this4 = this;\n\n return this.visit('/').then(function () {\n var controller = (0, _generate_controller.default)(_this4.applicationInstance, 'home');\n assert.ok(controller instanceof _controller.default, 'should return controller');\n });\n };\n\n _class2.prototype['@test generateController should return controller:basic if resolved'] = function (assert) {\n var _this5 = this;\n\n var BasicController = _controller.default.extend();\n this.add('controller:basic', BasicController);\n\n return this.visit('/').then(function () {\n var controller = (0, _generate_controller.default)(_this5.applicationInstance, 'home');\n assert.ok(controller instanceof BasicController, 'should return controller');\n });\n };\n\n _class2.prototype['@test generateController should return controller:basic if registered'] = function (assert) {\n var _this6 = this;\n\n var BasicController = _controller.default.extend();\n this.application.register('controller:basic', BasicController);\n\n return this.visit('/').then(function () {\n var controller = (0, _generate_controller.default)(_this6.applicationInstance, 'home');\n\n assert.ok(controller instanceof BasicController, 'should return base class of controller');\n });\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember-routing/tests/system/dsl_test', ['ember-babel', 'ember-owner', 'ember-routing/lib/system/router', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _router, _internalTestHelpers) {\n 'use strict';\n\n var Router = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Ember Router DSL', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n Router = _router.default.extend();\n return _this;\n }\n\n _class.prototype.teardown = function () {\n Router = null;\n };\n\n _class.prototype['@test should fail when using a reserved route name'] = function (assert) {\n var reservedNames = ['basic', 'application'];\n\n assert.expect(reservedNames.length);\n\n reservedNames.forEach(function (reservedName) {\n expectAssertion(function () {\n Router = _router.default.extend();\n\n Router.map(function () {\n this.route(reservedName);\n });\n\n var router = Router.create();\n router._initRouterJs();\n }, \"'\" + reservedName + \"' cannot be used as a route name.\");\n });\n };\n\n _class.prototype['@test [GH#16642] better error when using a colon in a route name'] = function () {\n expectAssertion(function () {\n Router = _router.default.extend();\n\n Router.map(function () {\n this.route('resource/:id');\n });\n\n var router = Router.create();\n router._initRouterJs();\n }, \"'resource/:id' is not a valid route name. It cannot contain a ':'. You may want to use the 'path' option instead.\");\n };\n\n _class.prototype['@test should retain resource namespace if nested with routes'] = function (assert) {\n Router = Router.map(function () {\n this.route('bleep', function () {\n this.route('bloop', function () {\n this.route('blork');\n });\n });\n });\n\n var router = Router.create();\n router._initRouterJs();\n\n assert.ok(router._routerMicrolib.recognizer.names['bleep'], 'parent name was used as base of nested routes');\n assert.ok(router._routerMicrolib.recognizer.names['bleep.bloop'], 'parent name was used as base of nested routes');\n assert.ok(router._routerMicrolib.recognizer.names['bleep.bloop.blork'], 'parent name was used as base of nested routes');\n };\n\n _class.prototype['@test should add loading and error routes if _isRouterMapResult is true'] = function (assert) {\n Router.map(function () {\n this.route('blork');\n });\n\n var router = Router.create({\n _hasModuleBasedResolver: function () {\n return true;\n }\n });\n\n router._initRouterJs();\n\n assert.ok(router._routerMicrolib.recognizer.names['blork'], 'main route was created');\n assert.ok(router._routerMicrolib.recognizer.names['blork_loading'], 'loading route was added');\n assert.ok(router._routerMicrolib.recognizer.names['blork_error'], 'error route was added');\n };\n\n _class.prototype['@test should not add loading and error routes if _isRouterMapResult is false'] = function (assert) {\n Router.map(function () {\n this.route('blork');\n });\n\n var router = Router.create();\n router._initRouterJs(false);\n\n assert.ok(router._routerMicrolib.recognizer.names['blork'], 'main route was created');\n assert.ok(!router._routerMicrolib.recognizer.names['blork_loading'], 'loading route was not added');\n assert.ok(!router._routerMicrolib.recognizer.names['blork_error'], 'error route was not added');\n };\n\n _class.prototype['@test should reset namespace of loading and error routes for routes with resetNamespace'] = function (assert) {\n Router.map(function () {\n this.route('blork', function () {\n this.route('blorp');\n this.route('bleep', { resetNamespace: true });\n });\n });\n\n var router = Router.create({\n _hasModuleBasedResolver: function () {\n return true;\n }\n });\n\n router._initRouterJs();\n\n assert.ok(router._routerMicrolib.recognizer.names['blork.blorp'], 'nested route was created');\n assert.ok(router._routerMicrolib.recognizer.names['blork.blorp_loading'], 'nested loading route was added');\n assert.ok(router._routerMicrolib.recognizer.names['blork.blorp_error'], 'nested error route was added');\n\n assert.ok(router._routerMicrolib.recognizer.names['bleep'], 'reset route was created');\n assert.ok(router._routerMicrolib.recognizer.names['bleep_loading'], 'reset loading route was added');\n assert.ok(router._routerMicrolib.recognizer.names['bleep_error'], 'reset error route was added');\n\n assert.ok(!router._routerMicrolib.recognizer.names['blork.bleep'], 'nested reset route was not created');\n assert.ok(!router._routerMicrolib.recognizer.names['blork.bleep_loading'], 'nested reset loading route was not added');\n assert.ok(!router._routerMicrolib.recognizer.names['blork.bleep_error'], 'nested reset error route was not added');\n };\n\n _class.prototype['@test should throw an error when defining a route serializer outside an engine'] = function (assert) {\n Router.map(function () {\n var _this2 = this;\n\n assert.throws(function () {\n _this2.route('posts', { serialize: function () {} });\n }, /Defining a route serializer on route 'posts' outside an Engine is not allowed/);\n });\n\n Router.create()._initRouterJs();\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Ember Router DSL with engines', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n var _this3 = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.call(this));\n\n Router = _router.default.extend();\n return _this3;\n }\n\n _class2.prototype.teardown = function () {\n Router = null;\n };\n\n _class2.prototype['@test should allow mounting of engines'] = function (assert) {\n assert.expect(3);\n\n Router = Router.map(function () {\n this.route('bleep', function () {\n this.route('bloop', function () {\n this.mount('chat');\n });\n });\n });\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: { routable: true }\n });\n\n var router = Router.create();\n (0, _emberOwner.setOwner)(router, engineInstance);\n router._initRouterJs();\n\n assert.ok(router._routerMicrolib.recognizer.names['bleep'], 'parent name was used as base of nested routes');\n assert.ok(router._routerMicrolib.recognizer.names['bleep.bloop'], 'parent name was used as base of nested routes');\n assert.ok(router._routerMicrolib.recognizer.names['bleep.bloop.chat'], 'parent name was used as base of mounted engine');\n };\n\n _class2.prototype['@test should allow mounting of engines at a custom path'] = function (assert) {\n assert.expect(1);\n\n Router = Router.map(function () {\n this.route('bleep', function () {\n this.route('bloop', function () {\n this.mount('chat', { path: 'custom-chat' });\n });\n });\n });\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: { routable: true }\n });\n\n var router = Router.create();\n (0, _emberOwner.setOwner)(router, engineInstance);\n router._initRouterJs();\n\n assert.deepEqual(router._routerMicrolib.recognizer.names['bleep.bloop.chat'].segments.slice(1, 4).map(function (s) {\n return s.value;\n }), ['bleep', 'bloop', 'custom-chat'], 'segments are properly associated with mounted engine');\n };\n\n _class2.prototype['@test should allow aliasing of engine names with `as`'] = function (assert) {\n assert.expect(1);\n\n Router = Router.map(function () {\n this.route('bleep', function () {\n this.route('bloop', function () {\n this.mount('chat', { as: 'blork' });\n });\n });\n });\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: { routable: true }\n });\n\n var router = Router.create();\n (0, _emberOwner.setOwner)(router, engineInstance);\n router._initRouterJs();\n\n assert.deepEqual(router._routerMicrolib.recognizer.names['bleep.bloop.blork'].segments.slice(1, 4).map(function (s) {\n return s.value;\n }), ['bleep', 'bloop', 'blork'], 'segments are properly associated with mounted engine with aliased name');\n };\n\n _class2.prototype['@test should add loading and error routes to a mount if _isRouterMapResult is true'] = function (assert) {\n Router.map(function () {\n this.mount('chat');\n });\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: { routable: true }\n });\n\n var router = Router.create({\n _hasModuleBasedResolver: function () {\n return true;\n }\n });\n (0, _emberOwner.setOwner)(router, engineInstance);\n router._initRouterJs();\n\n assert.ok(router._routerMicrolib.recognizer.names['chat'], 'main route was created');\n assert.ok(router._routerMicrolib.recognizer.names['chat_loading'], 'loading route was added');\n assert.ok(router._routerMicrolib.recognizer.names['chat_error'], 'error route was added');\n };\n\n _class2.prototype['@test should add loading and error routes to a mount alias if _isRouterMapResult is true'] = function (assert) {\n Router.map(function () {\n this.mount('chat', { as: 'shoutbox' });\n });\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: { routable: true }\n });\n\n var router = Router.create({\n _hasModuleBasedResolver: function () {\n return true;\n }\n });\n (0, _emberOwner.setOwner)(router, engineInstance);\n router._initRouterJs();\n\n assert.ok(router._routerMicrolib.recognizer.names['shoutbox'], 'main route was created');\n assert.ok(router._routerMicrolib.recognizer.names['shoutbox_loading'], 'loading route was added');\n assert.ok(router._routerMicrolib.recognizer.names['shoutbox_error'], 'error route was added');\n };\n\n _class2.prototype['@test should not add loading and error routes to a mount if _isRouterMapResult is false'] = function (assert) {\n Router.map(function () {\n this.mount('chat');\n });\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: { routable: true }\n });\n\n var router = Router.create();\n (0, _emberOwner.setOwner)(router, engineInstance);\n router._initRouterJs(false);\n\n assert.ok(router._routerMicrolib.recognizer.names['chat'], 'main route was created');\n assert.ok(!router._routerMicrolib.recognizer.names['chat_loading'], 'loading route was not added');\n assert.ok(!router._routerMicrolib.recognizer.names['chat_error'], 'error route was not added');\n };\n\n _class2.prototype['@test should reset namespace of loading and error routes for mounts with resetNamespace'] = function (assert) {\n Router.map(function () {\n this.route('news', function () {\n this.mount('chat');\n this.mount('blog', { resetNamespace: true });\n });\n });\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: { routable: true }\n });\n\n var router = Router.create({\n _hasModuleBasedResolver: function () {\n return true;\n }\n });\n (0, _emberOwner.setOwner)(router, engineInstance);\n router._initRouterJs();\n\n assert.ok(router._routerMicrolib.recognizer.names['news.chat'], 'nested route was created');\n assert.ok(router._routerMicrolib.recognizer.names['news.chat_loading'], 'nested loading route was added');\n assert.ok(router._routerMicrolib.recognizer.names['news.chat_error'], 'nested error route was added');\n\n assert.ok(router._routerMicrolib.recognizer.names['blog'], 'reset route was created');\n assert.ok(router._routerMicrolib.recognizer.names['blog_loading'], 'reset loading route was added');\n assert.ok(router._routerMicrolib.recognizer.names['blog_error'], 'reset error route was added');\n\n assert.ok(!router._routerMicrolib.recognizer.names['news.blog'], 'nested reset route was not created');\n assert.ok(!router._routerMicrolib.recognizer.names['news.blog_loading'], 'nested reset loading route was not added');\n assert.ok(!router._routerMicrolib.recognizer.names['news.blog_error'], 'nested reset error route was not added');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/system/route_test', ['ember-babel', 'ember-owner', 'internal-test-helpers', '@ember/service', 'ember-runtime', 'ember-routing/lib/system/route'], function (_emberBabel, _emberOwner, _internalTestHelpers, _service, _emberRuntime, _route) {\n 'use strict';\n\n var route = void 0,\n routeOne = void 0,\n routeTwo = void 0,\n lookupHash = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Route', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n route = _route.default.create();\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _AbstractTestCase.prototype.teardown.call(this);\n (0, _internalTestHelpers.runDestroy)(route);\n route = routeOne = routeTwo = lookupHash = undefined;\n };\n\n _class.prototype['@test default store utilizes the container to acquire the model factory'] = function (assert) {\n assert.expect(4);\n\n var Post = _emberRuntime.Object.extend();\n var post = {};\n\n Post.reopenClass({\n find: function () {\n return post;\n }\n });\n\n var owner = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n hasRegistration: function () {\n return true;\n },\n factoryFor: function (fullName) {\n assert.equal(fullName, 'model:post', 'correct factory was looked up');\n\n return {\n class: Post,\n create: function () {\n return Post.create();\n }\n };\n }\n }\n });\n (0, _emberOwner.setOwner)(route, owner);\n\n route.set('_qp', null);\n\n assert.equal(route.model({ post_id: 1 }), post);\n assert.equal(route.findModel('post', 1), post, '#findModel returns the correct post');\n\n (0, _internalTestHelpers.runDestroy)(owner);\n };\n\n _class.prototype[\"@test 'store' can be injected by data persistence frameworks\"] = function (assert) {\n assert.expect(8);\n (0, _internalTestHelpers.runDestroy)(route);\n\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n var post = {\n id: 1\n };\n\n var Store = _emberRuntime.Object.extend({\n find: function (type, value) {\n assert.ok(true, 'injected model was called');\n assert.equal(type, 'post', 'correct type was called');\n assert.equal(value, 1, 'correct value was called');\n return post;\n }\n });\n\n owner.register('route:index', _route.default);\n owner.register('store:main', Store);\n\n owner.inject('route', 'store', 'store:main');\n\n route = owner.lookup('route:index');\n\n assert.equal(route.model({ post_id: 1 }), post, '#model returns the correct post');\n assert.equal(route.findModel('post', 1), post, '#findModel returns the correct post');\n\n (0, _internalTestHelpers.runDestroy)(owner);\n };\n\n _class.prototype[\"@test assert if 'store.find' method is not found\"] = function () {\n (0, _internalTestHelpers.runDestroy)(route);\n\n var owner = (0, _internalTestHelpers.buildOwner)();\n var Post = _emberRuntime.Object.extend();\n\n owner.register('route:index', _route.default);\n owner.register('model:post', Post);\n\n route = owner.lookup('route:index');\n\n expectAssertion(function () {\n route.findModel('post', 1);\n }, 'Post has no method `find`.');\n\n (0, _internalTestHelpers.runDestroy)(owner);\n };\n\n _class.prototype['@test asserts if model class is not found'] = function () {\n (0, _internalTestHelpers.runDestroy)(route);\n\n var owner = (0, _internalTestHelpers.buildOwner)();\n owner.register('route:index', _route.default);\n\n route = owner.lookup('route:index');\n\n expectAssertion(function () {\n route.model({ post_id: 1 });\n }, /You used the dynamic segment post_id in your route undefined, but .Post did not exist and you did not override your route\\'s `model` hook./);\n\n (0, _internalTestHelpers.runDestroy)(owner);\n };\n\n _class.prototype[\"@test 'store' does not need to be injected\"] = function (assert) {\n (0, _internalTestHelpers.runDestroy)(route);\n\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n owner.register('route:index', _route.default);\n\n route = owner.lookup('route:index');\n\n ignoreAssertion(function () {\n route.model({ post_id: 1 });\n });\n\n assert.ok(true, 'no error was raised');\n\n (0, _internalTestHelpers.runDestroy)(owner);\n };\n\n _class.prototype[\"@test modelFor doesn't require the router\"] = function (assert) {\n var owner = (0, _internalTestHelpers.buildOwner)();\n (0, _emberOwner.setOwner)(route, owner);\n\n var foo = { name: 'foo' };\n\n var FooRoute = _route.default.extend({\n currentModel: foo\n });\n\n owner.register('route:foo', FooRoute);\n\n assert.strictEqual(route.modelFor('foo'), foo);\n\n (0, _internalTestHelpers.runDestroy)(owner);\n };\n\n _class.prototype[\"@test modelFor doesn't require the routerMicrolib\"] = function (assert) {\n var route = _route.default.create({\n _router: { _routerMicrolib: null }\n });\n\n var owner = (0, _internalTestHelpers.buildOwner)();\n (0, _emberOwner.setOwner)(route, owner);\n\n var foo = { name: 'foo' };\n\n var FooRoute = _route.default.extend({\n currentModel: foo\n });\n\n owner.register('route:foo', FooRoute);\n\n assert.strictEqual(route.modelFor('foo'), foo);\n\n (0, _internalTestHelpers.runDestroy)(owner);\n };\n\n _class.prototype['@test .send just calls an action if the router is absent'] = function (assert) {\n assert.expect(7);\n var route = _route.default.extend({\n actions: {\n returnsTrue: function (foo, bar) {\n assert.equal(foo, 1);\n assert.equal(bar, 2);\n assert.equal(this, route);\n return true;\n },\n returnsFalse: function () {\n assert.ok(true, 'returnsFalse was called');\n return false;\n }\n }\n }).create();\n\n assert.equal(true, route.send('returnsTrue', 1, 2));\n assert.equal(false, route.send('returnsFalse'));\n assert.equal(undefined, route.send('nonexistent', 1, 2, 3));\n\n (0, _internalTestHelpers.runDestroy)(route);\n };\n\n _class.prototype['@test .send just calls an action if the routers internal router property is absent'] = function (assert) {\n assert.expect(7);\n var route = _route.default.extend({\n router: {},\n actions: {\n returnsTrue: function (foo, bar) {\n assert.equal(foo, 1);\n assert.equal(bar, 2);\n assert.equal(this, route);\n return true;\n },\n returnsFalse: function () {\n assert.ok(true, 'returnsFalse was called');\n return false;\n }\n }\n }).create();\n\n assert.equal(true, route.send('returnsTrue', 1, 2));\n assert.equal(false, route.send('returnsFalse'));\n assert.equal(undefined, route.send('nonexistent', 1, 2, 3));\n\n (0, _internalTestHelpers.runDestroy)(route);\n };\n\n _class.prototype['@test .send asserts if called on a destroyed route'] = function () {\n route.routeName = 'rip-alley';\n (0, _internalTestHelpers.runDestroy)(route);\n\n expectAssertion(function () {\n route.send('trigger-me-dead');\n }, \"Attempted to call .send() with the action 'trigger-me-dead' on the destroyed route 'rip-alley'.\");\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Route serialize', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n\n var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.call(this));\n\n route = _route.default.create();\n return _this2;\n }\n\n _class2.prototype.teardown = function () {\n (0, _internalTestHelpers.runDestroy)(route);\n };\n\n _class2.prototype['@test returns the models properties if params does not include *_id'] = function (assert) {\n\n assert.deepEqual(route.serialize({ id: 2, firstName: 'Ned', lastName: 'Ryerson' }, ['firstName', 'lastName']), { firstName: 'Ned', lastName: 'Ryerson' }, 'serialized correctly');\n };\n\n _class2.prototype['@test returns model.id if params include *_id'] = function (assert) {\n\n assert.deepEqual(route.serialize({ id: 2 }, ['post_id']), { post_id: 2 }, 'serialized correctly');\n };\n\n _class2.prototype['@test returns checks for existence of model.post_id before trying model.id'] = function (assert) {\n\n assert.deepEqual(route.serialize({ post_id: 3 }, ['post_id']), { post_id: 3 }, 'serialized correctly');\n };\n\n _class2.prototype['@test returns undefined if model is not set'] = function (assert) {\n assert.equal(route.serialize(undefined, ['post_id']), undefined, 'serialized correctly');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Route interaction', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n\n var _this3 = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.call(this));\n\n var owner = {\n lookup: function (fullName) {\n return lookupHash[fullName];\n }\n };\n\n routeOne = _route.default.create({ routeName: 'one' });\n routeTwo = _route.default.create({ routeName: 'two' });\n\n (0, _emberOwner.setOwner)(routeOne, owner);\n (0, _emberOwner.setOwner)(routeTwo, owner);\n\n lookupHash = {\n 'route:one': routeOne,\n 'route:two': routeTwo\n };\n return _this3;\n }\n\n _class3.prototype.teardown = function () {\n (0, _internalTestHelpers.runDestroy)(routeOne);\n (0, _internalTestHelpers.runDestroy)(routeTwo);\n };\n\n _class3.prototype['@test route._qp does not crash if the controller has no QP, or setProperties'] = function (assert) {\n lookupHash['controller:test'] = {};\n\n routeOne.controllerName = 'test';\n var qp = routeOne.get('_qp');\n\n assert.deepEqual(qp.map, {}, 'map should be empty');\n assert.deepEqual(qp.propertyNames, [], 'property names should be empty');\n assert.deepEqual(qp.qps, [], 'qps is should be empty');\n };\n\n _class3.prototype[\"@test controllerFor uses route's controllerName if specified\"] = function (assert) {\n var testController = {};\n lookupHash['controller:test'] = testController;\n\n routeOne.controllerName = 'test';\n\n assert.equal(routeTwo.controllerFor('one'), testController);\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Route injected properties', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype['@test services can be injected into routes'] = function (assert) {\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n owner.register('route:application', _route.default.extend({\n authService: (0, _service.inject)('auth')\n }));\n\n owner.register('service:auth', _service.default.extend());\n\n var appRoute = owner.lookup('route:application');\n var authService = owner.lookup('service:auth');\n\n assert.equal(authService, appRoute.get('authService'), 'service.auth is injected');\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Route with engines', function (_AbstractTestCase5) {\n (0, _emberBabel.inherits)(_class5, _AbstractTestCase5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase5.apply(this, arguments));\n }\n\n _class5.prototype[\"@test paramsFor considers an engine's mountPoint\"] = function (assert) {\n var router = {\n _deserializeQueryParams: function () {},\n\n _routerMicrolib: {\n state: {\n handlerInfos: [{ name: 'posts' }],\n params: {\n 'foo.bar': { a: 'b' },\n 'foo.bar.posts': { c: 'd' }\n }\n }\n }\n };\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n routable: true,\n\n mountPoint: 'foo.bar',\n\n lookup: function (name) {\n if (name === 'route:posts') {\n return postsRoute;\n } else if (name === 'route:application') {\n return applicationRoute;\n }\n }\n }\n });\n\n var applicationRoute = _route.default.create({\n _router: router,\n routeName: 'application',\n fullRouteName: 'foo.bar'\n });\n var postsRoute = _route.default.create({\n _router: router,\n routeName: 'posts',\n fullRouteName: 'foo.bar.posts'\n });\n var route = _route.default.create({ _router: router });\n\n (0, _emberOwner.setOwner)(applicationRoute, engineInstance);\n (0, _emberOwner.setOwner)(postsRoute, engineInstance);\n (0, _emberOwner.setOwner)(route, engineInstance);\n\n assert.deepEqual(route.paramsFor('application'), { a: 'b' }, 'params match for root `application` route in engine');\n assert.deepEqual(route.paramsFor('posts'), { c: 'd' }, 'params match for `posts` route in engine');\n };\n\n _class5.prototype[\"@test modelFor considers an engine's mountPoint\"] = function (assert) {\n var applicationModel = { id: '1' };\n var postsModel = { id: '2' };\n\n var router = {\n _routerMicrolib: {\n activeTransition: {\n resolvedModels: {\n 'foo.bar': applicationModel,\n 'foo.bar.posts': postsModel\n }\n }\n }\n };\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n routable: true,\n\n mountPoint: 'foo.bar',\n\n lookup: function (name) {\n if (name === 'route:posts') {\n return postsRoute;\n } else if (name === 'route:application') {\n return applicationRoute;\n }\n }\n }\n });\n\n var applicationRoute = _route.default.create({\n _router: router,\n routeName: 'application'\n });\n var postsRoute = _route.default.create({\n _router: router,\n routeName: 'posts'\n });\n var route = _route.default.create({ _router: router });\n\n (0, _emberOwner.setOwner)(applicationRoute, engineInstance);\n (0, _emberOwner.setOwner)(postsRoute, engineInstance);\n (0, _emberOwner.setOwner)(route, engineInstance);\n\n assert.strictEqual(route.modelFor('application'), applicationModel);\n assert.strictEqual(route.modelFor('posts'), postsModel);\n };\n\n _class5.prototype[\"@test transitionTo considers an engine's mountPoint\"] = function (assert) {\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n routable: true,\n mountPoint: 'foo.bar'\n }\n });\n\n var route = _route.default.create({ _router: {\n transitionTo: function (route) {\n return route;\n }\n } });\n (0, _emberOwner.setOwner)(route, engineInstance);\n\n assert.strictEqual(route.transitionTo('application'), 'foo.bar.application', 'properly prefixes application route');\n assert.strictEqual(route.transitionTo('posts'), 'foo.bar.posts', 'properly prefixes child routes');\n assert.throws(function () {\n return route.transitionTo('/posts');\n }, 'throws when trying to use a url');\n\n var queryParams = {};\n assert.strictEqual(route.transitionTo(queryParams), queryParams, 'passes query param only transitions through');\n };\n\n _class5.prototype[\"@test intermediateTransitionTo considers an engine's mountPoint\"] = function (assert) {\n var lastRoute = void 0;\n\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n routable: true,\n mountPoint: 'foo.bar'\n }\n });\n\n var route = _route.default.create({ _router: {\n intermediateTransitionTo: function (route) {\n lastRoute = route;\n }\n } });\n (0, _emberOwner.setOwner)(route, engineInstance);\n\n route.intermediateTransitionTo('application');\n assert.strictEqual(lastRoute, 'foo.bar.application', 'properly prefixes application route');\n\n route.intermediateTransitionTo('posts');\n assert.strictEqual(lastRoute, 'foo.bar.posts', 'properly prefixes child routes');\n\n assert.throws(function () {\n return route.intermediateTransitionTo('/posts');\n }, 'throws when trying to use a url');\n\n var queryParams = {};\n route.intermediateTransitionTo(queryParams);\n assert.strictEqual(lastRoute, queryParams, 'passes query param only transitions through');\n };\n\n _class5.prototype[\"@test replaceWith considers an engine's mountPoint\"] = function (assert) {\n\n var engineInstance = (0, _internalTestHelpers.buildOwner)({\n ownerOptions: {\n routable: true,\n mountPoint: 'foo.bar'\n }\n });\n\n var route = _route.default.create({ _router: {\n replaceWith: function (route) {\n return route;\n }\n } });\n (0, _emberOwner.setOwner)(route, engineInstance);\n\n assert.strictEqual(route.replaceWith('application'), 'foo.bar.application', 'properly prefixes application route');\n assert.strictEqual(route.replaceWith('posts'), 'foo.bar.posts', 'properly prefixes child routes');\n assert.throws(function () {\n return route.replaceWith('/posts');\n }, 'throws when trying to use a url');\n\n var queryParams = {};\n assert.strictEqual(route.replaceWith(queryParams), queryParams, 'passes query param only transitions through');\n };\n\n _class5.prototype['@test `router` is a deprecated one-way alias to `_router`'] = function (assert) {\n var router = {};\n var route = _route.default.create({ _router: router });\n expectDeprecation(function () {\n return assert.equal(route.router, router);\n }, 'Route#router is an intimate API that has been renamed to Route#_router. However you might want to consider using the router service');\n };\n\n return _class5;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/system/router_test', ['ember-babel', 'ember-owner', 'ember-routing/lib/location/hash_location', 'ember-routing/lib/location/history_location', 'ember-routing/lib/location/auto_location', 'ember-routing/lib/location/none_location', 'ember-routing/lib/system/router', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _hash_location, _history_location, _auto_location, _none_location, _router, _internalTestHelpers) {\n 'use strict';\n\n var owner = void 0;\n\n function createRouter(settings) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var CustomRouter = _router.default.extend();\n var router = CustomRouter.create(settings);\n\n if (!options.skipOwner) {\n (0, _emberOwner.setOwner)(router, owner);\n }\n\n if (!options.disableSetup) {\n router.setupRouter();\n }\n\n return router;\n }\n\n (0, _internalTestHelpers.moduleFor)('Ember Router', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n owner = (0, _internalTestHelpers.buildOwner)();\n\n //register the HashLocation (the default)\n owner.register('location:hash', _hash_location.default);\n owner.register('location:history', _history_location.default);\n owner.register('location:auto', _auto_location.default);\n owner.register('location:none', _none_location.default);\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _internalTestHelpers.runDestroy)(owner);\n owner = null;\n };\n\n _class.prototype['@test can create a router without an owner'] = function (assert) {\n createRouter(undefined, { disableSetup: true, skipOwner: true });\n\n assert.ok(true, 'no errors were thrown when creating without a container');\n };\n\n _class.prototype['@test [GH#15237] EmberError is imported correctly'] = function (assert) {\n // If we get the right message it means Error is being imported correctly.\n assert.throws(function () {\n (0, _router.triggerEvent)(null, false, []);\n }, /because your app hasn't finished transitioning/);\n };\n\n _class.prototype['@test should not create a router.js instance upon init'] = function (assert) {\n var router = createRouter(undefined, { disableSetup: true });\n\n assert.ok(!router._routerMicrolib);\n };\n\n _class.prototype['@test should not reify location until setupRouter is called'] = function (assert) {\n var router = createRouter(undefined, { disableSetup: true });\n assert.equal(typeof router.location, 'string', 'location is specified as a string');\n\n router.setupRouter();\n\n assert.equal(typeof router.location, 'object', 'location is reified into an object');\n };\n\n _class.prototype['@test should destroy its location upon destroying the routers owner.'] = function (assert) {\n var router = createRouter();\n var location = router.get('location');\n\n (0, _internalTestHelpers.runDestroy)(owner);\n\n assert.ok(location.isDestroyed, 'location should be destroyed');\n };\n\n _class.prototype['@test should instantiate its location with its `rootURL`'] = function (assert) {\n var router = createRouter({\n rootURL: '/rootdir/'\n });\n var location = router.get('location');\n\n assert.equal(location.get('rootURL'), '/rootdir/');\n };\n\n _class.prototype['@test replacePath should be called with the right path'] = function (assert) {\n assert.expect(1);\n\n var location = owner.lookup('location:auto');\n\n location.location = {\n href: 'http://test.com/rootdir/welcome',\n origin: 'http://test.com',\n pathname: '/rootdir/welcome',\n hash: '',\n search: '',\n replace: function (url) {\n assert.equal(url, 'http://test.com/rootdir/#/welcome');\n }\n };\n location.global = {\n onhashchange: function () {}\n };\n location.history = null;\n\n createRouter({\n location: 'auto',\n rootURL: '/rootdir/'\n });\n };\n\n _class.prototype['@test Router._routePath should consume identical prefixes'] = function (assert) {\n createRouter();\n\n function routePath() {\n var handlerInfos = Array.prototype.slice.call(arguments).map(function (s) {\n return { name: s };\n });\n handlerInfos.unshift({ name: 'ignored' });\n\n return _router.default._routePath(handlerInfos);\n }\n\n assert.equal(routePath('foo'), 'foo');\n assert.equal(routePath('foo', 'bar', 'baz'), 'foo.bar.baz');\n assert.equal(routePath('foo', 'foo.bar'), 'foo.bar');\n assert.equal(routePath('foo', 'foo.bar', 'foo.bar.baz'), 'foo.bar.baz');\n assert.equal(routePath('foo', 'foo.bar', 'foo.bar.baz.wow'), 'foo.bar.baz.wow');\n assert.equal(routePath('foo', 'foo.bar.baz.wow'), 'foo.bar.baz.wow');\n assert.equal(routePath('foo.bar', 'bar.baz.wow'), 'foo.bar.baz.wow');\n\n // This makes no sense, not trying to handle it, just\n // making sure it doesn't go boom.\n assert.equal(routePath('foo.bar.baz', 'foo'), 'foo.bar.baz.foo');\n };\n\n _class.prototype['@test Router should cancel routing setup when the Location class says so via cancelRouterSetup'] = function (assert) {\n assert.expect(0);\n\n var router = void 0;\n\n\n owner.register('location:fake', {\n cancelRouterSetup: true,\n create: function () {\n return this;\n }\n });\n\n router = createRouter({\n location: 'fake',\n\n _setupRouter: function () {\n assert.ok(false, '_setupRouter should not be called');\n }\n });\n\n router.startRouting();\n };\n\n _class.prototype[\"@test AutoLocation should replace the url when it's not in the preferred format\"] = function (assert) {\n assert.expect(1);\n\n var location = owner.lookup('location:auto');\n\n location.location = {\n href: 'http://test.com/rootdir/welcome',\n origin: 'http://test.com',\n pathname: '/rootdir/welcome',\n hash: '',\n search: '',\n replace: function (url) {\n assert.equal(url, 'http://test.com/rootdir/#/welcome');\n }\n };\n location.history = null;\n location.global = {\n onhashchange: function () {}\n };\n\n createRouter({\n location: 'auto',\n rootURL: '/rootdir/'\n });\n };\n\n _class.prototype['@test Router#handleURL should remove any #hashes before doing URL transition'] = function (assert) {\n assert.expect(2);\n\n var router = createRouter({\n _doURLTransition: function (routerJsMethod, url) {\n assert.equal(routerJsMethod, 'handleURL');\n assert.equal(url, '/foo/bar?time=morphin');\n }\n });\n\n router.handleURL('/foo/bar?time=morphin#pink-power-ranger');\n };\n\n _class.prototype['@test Router#triggerEvent allows actions to bubble when returning true'] = function (assert) {\n assert.expect(2);\n\n (0, _router.triggerEvent)([{\n name: 'application',\n handler: {\n actions: {\n loading: function () {\n assert.ok(false, 'loading not handled by application route');\n }\n }\n }\n }, {\n name: 'about',\n handler: {\n actions: {\n loading: function () {\n assert.ok(true, 'loading handled by about route');\n return false;\n }\n }\n }\n }, {\n name: 'about.me',\n handler: {\n actions: {\n loading: function () {\n assert.ok(true, 'loading handled by about.me route');\n return true;\n }\n }\n }\n }], false, ['loading']);\n };\n\n _class.prototype['@test Router#triggerEvent ignores handlers that have not loaded yet'] = function (assert) {\n assert.expect(1);\n\n var handlerInfos = [{\n name: 'about',\n handler: {\n actions: {\n loading: function () {\n assert.ok(true, 'loading handled by about route');\n }\n }\n }\n }, {\n name: 'about.me',\n handler: undefined\n }];\n\n (0, _router.triggerEvent)(handlerInfos, false, ['loading']);\n };\n\n _class.prototype['@test transitionTo should throw an error when called after owner is destroyed'] = function () {\n var router = createRouter();\n\n (0, _internalTestHelpers.runDestroy)(router);\n\n router.currentRouteName = 'route-a';\n\n expectAssertion(function () {\n router.transitionTo('route-b');\n }, \"A transition was attempted from 'route-a' to 'route-b' but the application instance has already been destroyed.\");\n\n expectAssertion(function () {\n router.transitionTo('./route-b/1');\n }, \"A transition was attempted from 'route-a' to './route-b/1' but the application instance has already been destroyed.\");\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-routing/tests/utils_test', ['ember-babel', 'ember-routing/lib/utils', 'internal-test-helpers'], function (_emberBabel, _utils, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Routing query parameter utils - normalizeControllerQueryParams', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test converts array style into verbose object style'] = function (assert) {\n var paramName = 'foo';\n\n var normalized = (0, _utils.normalizeControllerQueryParams)([paramName]);\n\n assert.ok(normalized[paramName], 'turns the query param name into key');\n assert.equal(normalized[paramName].as, null, \"includes a blank alias in 'as' key\");\n assert.equal(normalized[paramName].scope, 'model', 'defaults scope to model');\n };\n\n _class.prototype[\"@test converts object style [{foo: 'an_alias'}]\"] = function (assert) {\n var paramName = 'foo';\n\n var normalized = (0, _utils.normalizeControllerQueryParams)([{ foo: 'an_alias' }]);\n\n assert.ok(normalized[paramName], 'retains the query param name as key');\n assert.equal(normalized[paramName].as, 'an_alias', \"includes the provided alias in 'as' key\");\n assert.equal(normalized[paramName].scope, 'model', 'defaults scope to model');\n };\n\n _class.prototype[\"@test retains maximally verbose object style [{foo: {as: 'foo'}}]\"] = function (assert) {\n var paramName = 'foo';\n\n var normalized = (0, _utils.normalizeControllerQueryParams)([{ foo: { as: 'an_alias' } }]);\n\n assert.ok(normalized[paramName], 'retains the query param name as key');\n assert.equal(normalized[paramName].as, 'an_alias', \"includes the provided alias in 'as' key\");\n assert.equal(normalized[paramName].scope, 'model', 'defaults scope to model');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/array/any-test', ['ember-babel', 'ember-runtime/lib/mixins/array', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _array, _internalTestHelpers, _array2) {\n 'use strict';\n\n var AnyTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AnyTests, _AbstractTestCase);\n\n function AnyTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n AnyTests.prototype['@test any should should invoke callback on each item as long as you return false'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var found = [];\n var result = void 0;\n\n result = obj.any(function (i) {\n found.push(i);\n return false;\n });\n\n this.assert.equal(result, false, 'return value of obj.any');\n this.assert.deepEqual(found, ary, 'items passed during any() should match');\n };\n\n AnyTests.prototype['@test any should stop invoking when you return true'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var cnt = ary.length - 2;\n var exp = cnt;\n var found = [];\n var result = void 0;\n\n result = obj.any(function (i) {\n found.push(i);\n return --cnt <= 0;\n });\n this.assert.equal(result, true, 'return value of obj.any');\n this.assert.equal(found.length, exp, 'should invoke proper number of times');\n this.assert.deepEqual(found, ary.slice(0, -2), 'items passed during any() should match');\n };\n\n AnyTests.prototype['@test any should return true if any object matches the callback'] = function () {\n var obj = (0, _array.A)([0, 1, 2]);\n var result = void 0;\n\n result = obj.any(function (i) {\n return !!i;\n });\n this.assert.equal(result, true, 'return value of obj.any');\n };\n\n AnyTests.prototype['@test any should produce correct results even if the matching element is undefined'] = function (assert) {\n var obj = (0, _array.A)([undefined]);\n var result = void 0;\n\n result = obj.any(function () {\n return true;\n });\n assert.equal(result, true, 'return value of obj.any');\n };\n\n return AnyTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array2.runArrayTests)('any', AnyTests);\n});","enifed('ember-runtime/tests/array/compact-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var CompactTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(CompactTests, _AbstractTestCase);\n\n function CompactTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n CompactTests.prototype['@test removes null and undefined values from enumerable'] = function () {\n var obj = this.newObject([null, 1, false, '', undefined, 0, null]);\n var ary = obj.compact();\n this.assert.deepEqual(ary, [1, false, '', 0]);\n };\n\n return CompactTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('compact', CompactTests);\n});","enifed('ember-runtime/tests/array/every-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-runtime/lib/system/object'], function (_emberBabel, _internalTestHelpers, _array, _object) {\n 'use strict';\n\n var EveryTest = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(EveryTest, _AbstractTestCase);\n\n function EveryTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n EveryTest.prototype['@test every should should invoke callback on each item as long as you return true'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var found = [];\n var result = void 0;\n\n result = obj.every(function (i) {\n found.push(i);\n return true;\n });\n this.assert.equal(result, true, 'return value of obj.every');\n this.assert.deepEqual(found, ary, 'items passed during every() should match');\n };\n\n EveryTest.prototype['@test every should stop invoking when you return false'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var cnt = ary.length - 2;\n var exp = cnt;\n var found = [];\n var result = void 0;\n\n result = obj.every(function (i) {\n found.push(i);\n return --cnt > 0;\n });\n this.assert.equal(result, false, 'return value of obj.every');\n this.assert.equal(found.length, exp, 'should invoke proper number of times');\n this.assert.deepEqual(found, ary.slice(0, -2), 'items passed during every() should match');\n };\n\n return EveryTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n var IsEveryTest = function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(IsEveryTest, _AbstractTestCase2);\n\n function IsEveryTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n IsEveryTest.prototype['@test should return true of every property matches'] = function () {\n var obj = this.newObject([{ foo: 'foo', bar: 'BAZ' }, _object.default.create({ foo: 'foo', bar: 'bar' })]);\n\n this.assert.equal(obj.isEvery('foo', 'foo'), true, 'isEvery(foo)');\n this.assert.equal(obj.isEvery('bar', 'bar'), false, 'isEvery(bar)');\n };\n\n IsEveryTest.prototype['@test should return true of every property is true'] = function () {\n var obj = this.newObject([{ foo: 'foo', bar: true }, _object.default.create({ foo: 'bar', bar: false })]);\n\n // different values - all eval to true\n this.assert.equal(obj.isEvery('foo'), true, 'isEvery(foo)');\n this.assert.equal(obj.isEvery('bar'), false, 'isEvery(bar)');\n };\n\n IsEveryTest.prototype['@test should return true if every property matches null'] = function () {\n var obj = this.newObject([{ foo: null, bar: 'BAZ' }, _object.default.create({ foo: null, bar: null })]);\n\n this.assert.equal(obj.isEvery('foo', null), true, \"isEvery('foo', null)\");\n this.assert.equal(obj.isEvery('bar', null), false, \"isEvery('bar', null)\");\n };\n\n IsEveryTest.prototype['@test should return true if every property is undefined'] = function () {\n var obj = this.newObject([{ foo: undefined, bar: 'BAZ' }, _object.default.create({ bar: undefined })]);\n\n this.assert.equal(obj.isEvery('foo', undefined), true, \"isEvery('foo', undefined)\");\n this.assert.equal(obj.isEvery('bar', undefined), false, \"isEvery('bar', undefined)\");\n };\n\n return IsEveryTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('every', EveryTest);\n (0, _array.runArrayTests)('isEvery', IsEveryTest);\n});","enifed('ember-runtime/tests/array/filter-test', ['ember-babel', 'ember-runtime/lib/system/object', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _object, _internalTestHelpers, _array) {\n 'use strict';\n\n var FilterTest = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(FilterTest, _AbstractTestCase);\n\n function FilterTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n FilterTest.prototype['@test filter should invoke on each item'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var cnt = ary.length - 2;\n var found = [];\n var result = void 0;\n\n // return true on all but the last two\n result = obj.filter(function (i) {\n found.push(i);\n return --cnt >= 0;\n });\n this.assert.deepEqual(found, ary, 'should have invoked on each item');\n this.assert.deepEqual(result, ary.slice(0, -2), 'filtered array should exclude items');\n };\n\n return FilterTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n var FilterByTest = function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(FilterByTest, _AbstractTestCase2);\n\n function FilterByTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n FilterByTest.prototype['@test should filter based on object'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ foo: 'foo', bar: 'BAZ' }, _object.default.create({ foo: 'foo', bar: 'bar' })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.filterBy('foo', 'foo'), ary, 'filterBy(foo)');\n this.assert.deepEqual(obj.filterBy('bar', 'bar'), [ary[1]], 'filterBy(bar)');\n };\n\n FilterByTest.prototype['@test should include in result if property is true'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ foo: 'foo', bar: true }, _object.default.create({ foo: 'bar', bar: false })];\n\n obj = this.newObject(ary);\n\n // different values - all eval to true\n this.assert.deepEqual(obj.filterBy('foo'), ary, 'filterBy(foo)');\n this.assert.deepEqual(obj.filterBy('bar'), [ary[0]], 'filterBy(bar)');\n };\n\n FilterByTest.prototype['@test should filter on second argument if provided'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 2 }), { name: 'obj3', foo: 2 }, _object.default.create({ name: 'obj4', foo: 3 })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.filterBy('foo', 3), [ary[0], ary[3]], \"filterBy('foo', 3)')\");\n };\n\n FilterByTest.prototype['@test should correctly filter null second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: null }), { name: 'obj3', foo: null }, _object.default.create({ name: 'obj4', foo: 3 })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.filterBy('foo', null), [ary[1], ary[2]], \"filterBy('foo', 3)')\");\n };\n\n FilterByTest.prototype['@test should not return all objects on undefined second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 2 })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.filterBy('foo', undefined), [], \"filterBy('foo', 3)')\");\n };\n\n FilterByTest.prototype['@test should correctly filter explicit undefined second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 3 }), { name: 'obj3', foo: undefined }, _object.default.create({ name: 'obj4', foo: undefined }), { name: 'obj5' }, _object.default.create({ name: 'obj6' })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.filterBy('foo', undefined), ary.slice(2), \"filterBy('foo', 3)')\");\n };\n\n FilterByTest.prototype['@test should not match undefined properties without second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 3 }), { name: 'obj3', foo: undefined }, _object.default.create({ name: 'obj4', foo: undefined }), { name: 'obj5' }, _object.default.create({ name: 'obj6' })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.filterBy('foo'), ary.slice(0, 2), \"filterBy('foo', 3)')\");\n };\n\n return FilterByTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('filter', FilterTest);\n (0, _array.runArrayTests)('filter', FilterByTest);\n});","enifed('ember-runtime/tests/array/find-test', ['ember-babel', 'ember-runtime/lib/system/object', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _object, _internalTestHelpers, _array) {\n 'use strict';\n\n var FindTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(FindTests, _AbstractTestCase);\n\n function FindTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n FindTests.prototype['@test find should invoke callback on each item as long as you return false'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var found = [];\n var result = void 0;\n\n result = obj.find(function (i) {\n found.push(i);\n return false;\n });\n this.assert.equal(result, undefined, 'return value of obj.find');\n this.assert.deepEqual(found, ary, 'items passed during find() should match');\n };\n\n FindTests.prototype['@test every should stop invoking when you return true'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var cnt = ary.length - 2;\n var exp = cnt;\n var found = [];\n var result = void 0;\n\n result = obj.find(function (i) {\n found.push(i);\n return --cnt >= 0;\n });\n this.assert.equal(result, ary[exp - 1], 'return value of obj.find');\n this.assert.equal(found.length, exp, 'should invoke proper number of times');\n this.assert.deepEqual(found, ary.slice(0, -2), 'items passed during find() should match');\n };\n\n return FindTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n var FindByTests = function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(FindByTests, _AbstractTestCase2);\n\n function FindByTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n FindByTests.prototype['@test should return first object of property matches'] = function () {\n var ary = void 0,\n obj = void 0;\n\n ary = [{ foo: 'foo', bar: 'BAZ' }, _object.default.create({ foo: 'foo', bar: 'bar' })];\n\n obj = this.newObject(ary);\n\n this.assert.equal(obj.findBy('foo', 'foo'), ary[0], 'findBy(foo)');\n this.assert.equal(obj.findBy('bar', 'bar'), ary[1], 'findBy(bar)');\n };\n\n FindByTests.prototype['@test should return first object with truthy prop'] = function () {\n var ary = void 0,\n obj = void 0;\n\n ary = [{ foo: 'foo', bar: false }, _object.default.create({ foo: 'bar', bar: true })];\n\n obj = this.newObject(ary);\n\n // different values - all eval to true\n this.assert.equal(obj.findBy('foo'), ary[0], 'findBy(foo)');\n this.assert.equal(obj.findBy('bar'), ary[1], 'findBy(bar)');\n };\n\n FindByTests.prototype['@test should return first null property match'] = function () {\n var ary = void 0,\n obj = void 0;\n\n ary = [{ foo: null, bar: 'BAZ' }, _object.default.create({ foo: null, bar: null })];\n\n obj = this.newObject(ary);\n\n this.assert.equal(obj.findBy('foo', null), ary[0], \"findBy('foo', null)\");\n this.assert.equal(obj.findBy('bar', null), ary[1], \"findBy('bar', null)\");\n };\n\n FindByTests.prototype['@test should return first undefined property match'] = function () {\n var ary = void 0,\n obj = void 0;\n\n ary = [{ foo: undefined, bar: 'BAZ' }, _object.default.create({})];\n\n obj = this.newObject(ary);\n\n this.assert.equal(obj.findBy('foo', undefined), ary[0], \"findBy('foo', undefined)\");\n this.assert.equal(obj.findBy('bar', undefined), ary[1], \"findBy('bar', undefined)\");\n };\n\n return FindByTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('find', FindTests);\n (0, _array.runArrayTests)('findBy', FindByTests);\n});","enifed('ember-runtime/tests/array/firstObject-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var FirstObjectTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(FirstObjectTests, _AbstractTestCase);\n\n function FirstObjectTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n FirstObjectTests.prototype['@test returns first item in enumerable'] = function () {\n var obj = this.newObject();\n this.assert.equal((0, _emberMetal.get)(obj, 'firstObject'), this.toArray(obj)[0]);\n };\n\n FirstObjectTests.prototype['@test returns undefined if enumerable is empty'] = function () {\n var obj = this.newObject([]);\n this.assert.equal((0, _emberMetal.get)(obj, 'firstObject'), undefined);\n };\n\n FirstObjectTests.prototype['@test can not be set'] = function () {\n var obj = this.newObject([]);\n\n this.assert.equal((0, _emberMetal.get)(obj, 'firstObject'), this.toArray(obj)[0]);\n\n this.assert.throws(function () {\n (0, _emberMetal.set)(obj, 'firstObject', 'foo!');\n }, /Cannot set read-only property \"firstObject\" on object/);\n };\n\n return FirstObjectTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('firstObject', FirstObjectTests);\n});","enifed('ember-runtime/tests/array/forEach-test', ['ember-babel', 'ember-utils', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberUtils, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var ForEachTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ForEachTests, _AbstractTestCase);\n\n function ForEachTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ForEachTests.prototype['@test forEach should iterate over list'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var found = [];\n\n obj.forEach(function (i) {\n return found.push(i);\n });\n this.assert.deepEqual(found, ary, 'items passed during forEach should match');\n };\n\n ForEachTests.prototype['@test forEach should iterate over list after mutation'] = function () {\n if ((0, _emberMetal.get)(this, 'canTestMutation')) {\n this.assert.expect(0);\n return;\n }\n\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var found = [];\n\n obj.forEach(function (i) {\n return found.push(i);\n });\n this.assert.deepEqual(found, ary, 'items passed during forEach should match');\n\n this.mutate(obj);\n ary = this.toArray(obj);\n found = [];\n\n obj.forEach(function (i) {\n return found.push(i);\n });\n this.assert.deepEqual(found, ary, 'items passed during forEach should match');\n };\n\n ForEachTests.prototype['@test 2nd target parameter'] = function () {\n var _this2 = this;\n\n var obj = this.newObject();\n var target = this;\n\n obj.forEach(function () {\n // ES6TODO: When transpiled we will end up with \"use strict\" which disables automatically binding to the global context.\n // Therefore, the following test can never pass in strict mode unless we modify the `map` function implementation to\n // use `Ember.lookup` if target is not specified.\n //\n // equal(guidFor(this), guidFor(global), 'should pass the global object as this if no context');\n });\n\n obj.forEach(function () {\n _this2.assert.equal((0, _emberUtils.guidFor)(_this2), (0, _emberUtils.guidFor)(target), 'should pass target as this if context');\n }, target);\n };\n\n ForEachTests.prototype['@test callback params'] = function () {\n var _this3 = this;\n\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var loc = 0;\n\n obj.forEach(function (item, idx, enumerable) {\n _this3.assert.equal(item, ary[loc], 'item param');\n _this3.assert.equal(idx, loc, 'idx param');\n _this3.assert.equal((0, _emberUtils.guidFor)(enumerable), (0, _emberUtils.guidFor)(obj), 'enumerable param');\n loc++;\n });\n };\n\n return ForEachTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('forEach', ForEachTests);\n});","enifed('ember-runtime/tests/array/includes-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var IncludesTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(IncludesTests, _AbstractTestCase);\n\n function IncludesTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n IncludesTests.prototype['@test includes returns correct value if startAt is positive'] = function () {\n var data = (0, _array.newFixture)(3);\n var obj = this.newObject(data);\n\n this.assert.equal(obj.includes(data[1], 1), true, 'should return true if included');\n this.assert.equal(obj.includes(data[0], 1), false, 'should return false if not included');\n };\n\n IncludesTests.prototype['@test includes returns correct value if startAt is negative'] = function () {\n var data = (0, _array.newFixture)(3);\n var obj = this.newObject(data);\n\n this.assert.equal(obj.includes(data[1], -2), true, 'should return true if included');\n this.assert.equal(obj.includes(data[0], -2), false, 'should return false if not included');\n };\n\n IncludesTests.prototype['@test includes returns true if startAt + length is still negative'] = function () {\n var data = (0, _array.newFixture)(1);\n var obj = this.newObject(data);\n\n this.assert.equal(obj.includes(data[0], -2), true, 'should return true if included');\n this.assert.equal(obj.includes((0, _array.newFixture)(1), -2), false, 'should return false if not included');\n };\n\n IncludesTests.prototype['@test includes returns false if startAt out of bounds'] = function () {\n var data = (0, _array.newFixture)(1);\n var obj = this.newObject(data);\n\n this.assert.equal(obj.includes(data[0], 2), false, 'should return false if startAt >= length');\n this.assert.equal(obj.includes((0, _array.newFixture)(1), 2), false, 'should return false if startAt >= length');\n };\n\n return IncludesTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('includes', IncludesTests);\n});","enifed('ember-runtime/tests/array/indexOf-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var IndexOfTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(IndexOfTests, _AbstractTestCase);\n\n function IndexOfTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n IndexOfTests.prototype['@test should return index of object'] = function () {\n var expected = (0, _array.newFixture)(3),\n idx;\n var obj = this.newObject(expected);\n\n\n for (idx = 0; idx < 3; idx++) {\n this.assert.equal(obj.indexOf(expected[idx]), idx, 'obj.indexOf(' + expected[idx] + ') should match idx');\n }\n };\n\n IndexOfTests.prototype['@test should return -1 when requesting object not in index'] = function () {\n var obj = this.newObject((0, _array.newFixture)(3));\n\n\n this.assert.equal(obj.indexOf({}), -1, 'obj.indexOf(foo) should be < 0');\n };\n\n return IndexOfTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('indexOf', IndexOfTests);\n});","enifed('ember-runtime/tests/array/invoke-test', ['ember-babel', 'ember-runtime/index', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _index, _internalTestHelpers, _array) {\n 'use strict';\n\n var InvokeTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(InvokeTests, _AbstractTestCase);\n\n function InvokeTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n InvokeTests.prototype['@test invoke should call on each object that implements'] = function () {\n var cnt = void 0,\n ary = void 0,\n obj = void 0;\n\n function F(amt) {\n cnt += amt === undefined ? 1 : amt;\n }\n cnt = 0;\n ary = [{ foo: F }, _index.Object.create({ foo: F }),\n\n // NOTE: does not impl foo - invoke should just skip\n _index.Object.create({ bar: F }), { foo: F }];\n\n obj = this.newObject(ary);\n obj.invoke('foo');\n this.assert.equal(cnt, 3, 'should have invoked 3 times');\n\n cnt = 0;\n obj.invoke('foo', 2);\n this.assert.equal(cnt, 6, 'should have invoked 3 times, passing param');\n };\n\n InvokeTests.prototype['@test invoke should return an array containing the results of each invoked method'] = function (assert) {\n var obj = this.newObject([{\n foo: function () {\n return 'one';\n }\n }, {}, // intentionally not including `foo` method\n {\n foo: function () {\n return 'two';\n }\n }]);\n\n var result = obj.invoke('foo');\n assert.deepEqual(result, ['one', undefined, 'two']);\n };\n\n InvokeTests.prototype['@test invoke should return an extended array (aka Ember.A)'] = function (assert) {\n var obj = this.newObject([{\n foo: function () {}\n }, {\n foo: function () {}\n }]);\n\n var result = obj.invoke('foo');\n\n assert.ok(_index.NativeArray.detect(result), 'NativeArray has been applied');\n };\n\n return InvokeTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('invoke', InvokeTests);\n});","enifed('ember-runtime/tests/array/isAny-test', ['ember-babel', 'ember-runtime/lib/system/object', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _object, _internalTestHelpers, _array) {\n 'use strict';\n\n var IsAnyTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(IsAnyTests, _AbstractTestCase);\n\n function IsAnyTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n IsAnyTests.prototype['@test should return true of any property matches'] = function () {\n var obj = this.newObject([{ foo: 'foo', bar: 'BAZ' }, _object.default.create({ foo: 'foo', bar: 'bar' })]);\n\n this.assert.equal(obj.isAny('foo', 'foo'), true, 'isAny(foo)');\n this.assert.equal(obj.isAny('bar', 'bar'), true, 'isAny(bar)');\n this.assert.equal(obj.isAny('bar', 'BIFF'), false, 'isAny(BIFF)');\n };\n\n IsAnyTests.prototype['@test should return true of any property is true'] = function () {\n var obj = this.newObject([{ foo: 'foo', bar: true }, _object.default.create({ foo: 'bar', bar: false })]);\n\n // different values - all eval to true\n this.assert.equal(obj.isAny('foo'), true, 'isAny(foo)');\n this.assert.equal(obj.isAny('bar'), true, 'isAny(bar)');\n this.assert.equal(obj.isAny('BIFF'), false, 'isAny(biff)');\n };\n\n IsAnyTests.prototype['@test should return true if any property matches null'] = function () {\n var obj = this.newObject([{ foo: null, bar: 'bar' }, _object.default.create({ foo: 'foo', bar: null })]);\n\n this.assert.equal(obj.isAny('foo', null), true, \"isAny('foo', null)\");\n this.assert.equal(obj.isAny('bar', null), true, \"isAny('bar', null)\");\n };\n\n IsAnyTests.prototype['@test should return true if any property is undefined'] = function () {\n var obj = this.newObject([{ foo: undefined, bar: 'bar' }, _object.default.create({ foo: 'foo' })]);\n\n this.assert.equal(obj.isAny('foo', undefined), true, \"isAny('foo', undefined)\");\n this.assert.equal(obj.isAny('bar', undefined), true, \"isAny('bar', undefined)\");\n };\n\n IsAnyTests.prototype['@test should not match undefined properties without second argument'] = function () {\n var obj = this.newObject([{ foo: undefined }, _object.default.create({})]);\n\n this.assert.equal(obj.isAny('foo'), false, \"isAny('foo', undefined)\");\n };\n\n return IsAnyTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('isAny', IsAnyTests);\n});","enifed('ember-runtime/tests/array/lastIndexOf-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var LastIndexOfTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(LastIndexOfTests, _AbstractTestCase);\n\n function LastIndexOfTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n LastIndexOfTests.prototype[\"@test should return index of object's last occurrence\"] = function () {\n var expected = (0, _array.newFixture)(3),\n idx;\n var obj = this.newObject(expected);\n\n\n for (idx = 0; idx < 3; idx++) {\n this.assert.equal(obj.lastIndexOf(expected[idx]), idx, 'obj.lastIndexOf(' + expected[idx] + ') should match idx');\n }\n };\n\n LastIndexOfTests.prototype[\"@test should return index of object's last occurrence even startAt search location is equal to length\"] = function () {\n var expected = (0, _array.newFixture)(3),\n idx;\n var obj = this.newObject(expected);\n var len = 3;\n\n for (idx = 0; idx < len; idx++) {\n this.assert.equal(obj.lastIndexOf(expected[idx], len), idx, 'obj.lastIndexOfs(' + expected[idx] + ') should match idx');\n }\n };\n\n LastIndexOfTests.prototype[\"@test should return index of object's last occurrence even startAt search location is greater than length\"] = function () {\n var expected = (0, _array.newFixture)(3),\n idx;\n var obj = this.newObject(expected);\n var len = 3;\n\n for (idx = 0; idx < len; idx++) {\n this.assert.equal(obj.lastIndexOf(expected[idx], len + 1), idx, 'obj.lastIndexOf(' + expected[idx] + ') should match idx');\n }\n };\n\n LastIndexOfTests.prototype['@test should return -1 when no match is found'] = function () {\n var obj = this.newObject((0, _array.newFixture)(3));\n\n\n this.assert.equal(obj.lastIndexOf({}), -1, 'obj.lastIndexOf(foo) should be -1');\n };\n\n LastIndexOfTests.prototype['@test should return -1 when no match is found even startAt search location is equal to length'] = function () {\n var obj = this.newObject((0, _array.newFixture)(3));\n\n\n this.assert.equal(obj.lastIndexOf({}, (0, _emberMetal.get)(obj, 'length')), -1, 'obj.lastIndexOf(foo) should be -1');\n };\n\n LastIndexOfTests.prototype['@test should return -1 when no match is found even startAt search location is greater than length'] = function () {\n var obj = this.newObject((0, _array.newFixture)(3));\n\n\n this.assert.equal(obj.lastIndexOf({}, (0, _emberMetal.get)(obj, 'length') + 1), -1, 'obj.lastIndexOf(foo) should be -1');\n };\n\n return LastIndexOfTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('lastIndexOf', LastIndexOfTests);\n});","enifed('ember-runtime/tests/array/lastObject-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-metal'], function (_emberBabel, _internalTestHelpers, _array, _emberMetal) {\n 'use strict';\n\n var LastObjectTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(LastObjectTests, _AbstractTestCase);\n\n function LastObjectTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n LastObjectTests.prototype['@test returns last item in enumerable'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n\n this.assert.equal((0, _emberMetal.get)(obj, 'lastObject'), ary[ary.length - 1]);\n };\n\n LastObjectTests.prototype['@test returns undefined if enumerable is empty'] = function () {\n var obj = this.newObject([]);\n\n this.assert.equal((0, _emberMetal.get)(obj, 'lastObject'), undefined);\n };\n\n LastObjectTests.prototype['@test can not be set'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj);\n\n this.assert.equal((0, _emberMetal.get)(obj, 'lastObject'), ary[ary.length - 1]);\n\n this.assert.throws(function () {\n (0, _emberMetal.set)(obj, 'lastObject', 'foo!');\n }, /Cannot set read-only property \"lastObject\" on object/);\n };\n\n return LastObjectTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('lastObject', LastObjectTests);\n});","enifed('ember-runtime/tests/array/map-test', ['ember-babel', 'ember-utils', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-metal'], function (_emberBabel, _emberUtils, _internalTestHelpers, _array, _emberMetal) {\n 'use strict';\n\n var mapFunc = function (item) {\n return item ? item.toString() : null;\n };\n\n var MapTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(MapTests, _AbstractTestCase);\n\n function MapTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n MapTests.prototype['@test map should iterate over list'] = function () {\n var obj = this.newObject();\n var ary = this.toArray(obj).map(mapFunc);\n var found = [];\n\n found = obj.map(mapFunc);\n this.assert.deepEqual(found, ary, 'mapped arrays should match');\n };\n\n MapTests.prototype['@test map should iterate over list after mutation'] = function () {\n if ((0, _emberMetal.get)(this, 'canTestMutation')) {\n this.assert.expect(0);\n return;\n }\n\n var obj = this.newObject();\n var ary = this.toArray(obj).map(mapFunc);\n var found = void 0;\n\n found = obj.map(mapFunc);\n this.assert.deepEqual(found, ary, 'items passed during forEach should match');\n\n this.mutate(obj);\n ary = this.toArray(obj).map(mapFunc);\n found = obj.map(mapFunc);\n this.assert.deepEqual(found, ary, 'items passed during forEach should match');\n };\n\n MapTests.prototype['@test 2nd target parameter'] = function () {\n var _this2 = this;\n\n var obj = this.newObject();\n var target = this;\n\n obj.map(function () {\n // ES6TODO: When transpiled we will end up with \"use strict\" which disables automatically binding to the global context.\n // Therefore, the following test can never pass in strict mode unless we modify the `map` function implementation to\n // use `Ember.lookup` if target is not specified.\n //\n // equal(guidFor(this), guidFor(global), 'should pass the global object as this if no context');\n });\n\n obj.map(function () {\n _this2.assert.equal((0, _emberUtils.guidFor)(_this2), (0, _emberUtils.guidFor)(target), 'should pass target as this if context');\n }, target);\n };\n\n MapTests.prototype['@test callback params'] = function () {\n var _this3 = this;\n\n var obj = this.newObject();\n var ary = this.toArray(obj);\n var loc = 0;\n\n obj.map(function (item, idx, enumerable) {\n _this3.assert.equal(item, ary[loc], 'item param');\n _this3.assert.equal(idx, loc, 'idx param');\n _this3.assert.equal((0, _emberUtils.guidFor)(enumerable), (0, _emberUtils.guidFor)(obj), 'enumerable param');\n loc++;\n });\n };\n\n return MapTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('map', MapTests);\n});","enifed('ember-runtime/tests/array/mapBy-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var MapByTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(MapByTests, _AbstractTestCase);\n\n function MapByTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n MapByTests.prototype['@test get value of each property'] = function () {\n var obj = this.newObject([{ a: 1 }, { a: 2 }]);\n this.assert.equal(obj.mapBy('a').join(''), '12');\n };\n\n MapByTests.prototype['@test should work also through getEach alias'] = function () {\n var obj = this.newObject([{ a: 1 }, { a: 2 }]);\n this.assert.equal(obj.getEach('a').join(''), '12');\n };\n\n return MapByTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('mapBy', MapByTests);\n});","enifed('ember-runtime/tests/array/objectAt-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var ObjectAtTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ObjectAtTests, _AbstractTestCase);\n\n function ObjectAtTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ObjectAtTests.prototype['@test should return object at specified index'] = function () {\n var expected = (0, _array.newFixture)(3),\n idx;\n var obj = this.newObject(expected);\n var len = expected.length;\n\n for (idx = 0; idx < len; idx++) {\n this.assert.equal(obj.objectAt(idx), expected[idx], 'obj.objectAt(' + idx + ') should match');\n }\n };\n\n ObjectAtTests.prototype['@test should return undefined when requesting objects beyond index'] = function () {\n var obj = void 0;\n\n obj = this.newObject((0, _array.newFixture)(3));\n this.assert.equal(obj.objectAt(obj, 5), undefined, 'should return undefined for obj.objectAt(5) when len = 3');\n\n obj = this.newObject([]);\n this.assert.equal(obj.objectAt(obj, 0), undefined, 'should return undefined for obj.objectAt(0) when len = 0');\n };\n\n return ObjectAtTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('objectAt', ObjectAtTests);\n});","enifed('ember-runtime/tests/array/reduce-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var ReduceTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ReduceTests, _AbstractTestCase);\n\n function ReduceTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ReduceTests.prototype['@test collects a summary value from an enumeration'] = function () {\n var obj = this.newObject([1, 2, 3]);\n var res = obj.reduce(function (previousValue, item) {\n return previousValue + item;\n }, 0);\n this.assert.equal(res, 6);\n };\n\n ReduceTests.prototype['@test passes index of item to callback'] = function () {\n var obj = this.newObject([1, 2, 3]);\n var res = obj.reduce(function (previousValue, item, index) {\n return previousValue + index;\n }, 0);\n this.assert.equal(res, 3);\n };\n\n ReduceTests.prototype['@test passes enumerable object to callback'] = function () {\n var obj = this.newObject([1, 2, 3]);\n var res = obj.reduce(function (previousValue, item, index, enumerable) {\n return enumerable;\n }, 0);\n this.assert.equal(res, obj);\n };\n\n return ReduceTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('reduce', ReduceTests);\n});","enifed('ember-runtime/tests/array/reject-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-runtime/lib/system/object'], function (_emberBabel, _internalTestHelpers, _array, _object) {\n 'use strict';\n\n var RejectTest = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(RejectTest, _AbstractTestCase);\n\n function RejectTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n RejectTest.prototype['@test should reject any item that does not meet the condition'] = function () {\n var obj = this.newObject([1, 2, 3, 4]);\n var result = void 0;\n\n result = obj.reject(function (i) {\n return i < 3;\n });\n this.assert.deepEqual(result, [3, 4], 'reject the correct items');\n };\n\n RejectTest.prototype['@test should be the inverse of filter'] = function () {\n var obj = this.newObject([1, 2, 3, 4]);\n var isEven = function (i) {\n return i % 2 === 0;\n };\n var filtered = void 0,\n rejected = void 0;\n\n filtered = obj.filter(isEven);\n rejected = obj.reject(isEven);\n\n this.assert.deepEqual(filtered, [2, 4], 'filtered evens');\n this.assert.deepEqual(rejected, [1, 3], 'rejected evens');\n };\n\n return RejectTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n var RejectByTest = function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(RejectByTest, _AbstractTestCase2);\n\n function RejectByTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n RejectByTest.prototype['@test should reject based on object'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ foo: 'foo', bar: 'BAZ' }, _object.default.create({ foo: 'foo', bar: 'bar' })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.rejectBy('foo', 'foo'), [], 'rejectBy(foo)');\n this.assert.deepEqual(obj.rejectBy('bar', 'bar'), [ary[0]], 'rejectBy(bar)');\n };\n\n RejectByTest.prototype['@test should include in result if property is false'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ foo: false, bar: true }, _object.default.create({ foo: false, bar: false })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.rejectBy('foo'), ary, 'rejectBy(foo)');\n this.assert.deepEqual(obj.rejectBy('bar'), [ary[1]], 'rejectBy(bar)');\n };\n\n RejectByTest.prototype['@test should reject on second argument if provided'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 2 }), { name: 'obj3', foo: 2 }, _object.default.create({ name: 'obj4', foo: 3 })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.rejectBy('foo', 3), [ary[1], ary[2]], \"rejectBy('foo', 3)')\");\n };\n\n RejectByTest.prototype['@test should correctly reject null second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: null }), { name: 'obj3', foo: null }, _object.default.create({ name: 'obj4', foo: 3 })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.rejectBy('foo', null), [ary[0], ary[3]], \"rejectBy('foo', null)')\");\n };\n\n RejectByTest.prototype['@test should correctly reject undefined second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 2 })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.rejectBy('bar', undefined), [], \"rejectBy('bar', undefined)')\");\n };\n\n RejectByTest.prototype['@test should correctly reject explicit undefined second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 3 }), { name: 'obj3', foo: undefined }, _object.default.create({ name: 'obj4', foo: undefined }), { name: 'obj5' }, _object.default.create({ name: 'obj6' })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.rejectBy('foo', undefined), ary.slice(0, 2), \"rejectBy('foo', undefined)')\");\n };\n\n RejectByTest.prototype['@test should match undefined, null, or false properties without second argument'] = function () {\n var obj = void 0,\n ary = void 0;\n\n ary = [{ name: 'obj1', foo: 3 }, _object.default.create({ name: 'obj2', foo: 3 }), { name: 'obj3', foo: undefined }, _object.default.create({ name: 'obj4', foo: undefined }), { name: 'obj5' }, _object.default.create({ name: 'obj6' }), { name: 'obj7', foo: null }, _object.default.create({ name: 'obj8', foo: null }), { name: 'obj9', foo: false }, _object.default.create({ name: 'obj10', foo: false })];\n\n obj = this.newObject(ary);\n\n this.assert.deepEqual(obj.rejectBy('foo'), ary.slice(2), \"rejectBy('foo')')\");\n };\n\n return RejectByTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('reject', RejectTest);\n (0, _array.runArrayTests)('rejectBy', RejectByTest);\n});","enifed('ember-runtime/tests/array/sortBy-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var SortByTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(SortByTests, _AbstractTestCase);\n\n function SortByTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n SortByTests.prototype['@test sort by value of property'] = function () {\n var obj = this.newObject([{ a: 2 }, { a: 1 }]);\n var sorted = obj.sortBy('a');\n\n this.assert.equal((0, _emberMetal.get)(sorted[0], 'a'), 1);\n this.assert.equal((0, _emberMetal.get)(sorted[1], 'a'), 2);\n };\n\n SortByTests.prototype['@test supports multiple propertyNames'] = function () {\n var obj = this.newObject([{ a: 1, b: 2 }, { a: 1, b: 1 }]);\n var sorted = obj.sortBy('a', 'b');\n\n this.assert.equal((0, _emberMetal.get)(sorted[0], 'b'), 1);\n this.assert.equal((0, _emberMetal.get)(sorted[1], 'b'), 2);\n };\n\n return SortByTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('sortBy', SortByTests);\n});","enifed('ember-runtime/tests/array/toArray-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var ToArrayTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ToArrayTests, _AbstractTestCase);\n\n function ToArrayTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ToArrayTests.prototype['@test toArray should convert to an array'] = function () {\n var obj = this.newObject();\n this.assert.deepEqual(obj.toArray(), this.toArray(obj));\n };\n\n return ToArrayTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('toArray', ToArrayTests);\n});","enifed('ember-runtime/tests/array/uniq-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var UniqTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(UniqTests, _AbstractTestCase);\n\n function UniqTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n UniqTests.prototype['@test should return new instance with duplicates removed'] = function () {\n var before = void 0,\n after = void 0,\n obj = void 0,\n ret = void 0;\n\n after = (0, _array.newFixture)(3);\n before = [after[0], after[1], after[2], after[1], after[0]];\n obj = this.newObject(before);\n before = obj.toArray(); // in case of set before will be different...\n\n ret = obj.uniq();\n this.assert.deepEqual(this.toArray(ret), after, 'should have removed item');\n this.assert.deepEqual(this.toArray(obj), before, 'should not have changed original');\n };\n\n UniqTests.prototype['@test should return duplicate of same content if no duplicates found'] = function () {\n var obj = void 0,\n ret = void 0;\n obj = this.newObject((0, _array.newFixture)(3));\n ret = obj.uniq(void 0);\n this.assert.ok(ret !== obj, 'should not be same object');\n this.assert.deepEqual(this.toArray(ret), this.toArray(obj), 'should be the same content');\n };\n\n return UniqTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('uniq', UniqTests);\n});","enifed('ember-runtime/tests/array/uniqBy-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var UniqByTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(UniqByTests, _AbstractTestCase);\n\n function UniqByTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n UniqByTests.prototype['@test should return new instance with duplicates removed'] = function () {\n var numbers = this.newObject([{ id: 1, value: 'one' }, { id: 2, value: 'two' }, { id: 1, value: 'one' }]);\n this.assert.deepEqual(numbers.uniqBy('id'), [{ id: 1, value: 'one' }, { id: 2, value: 'two' }]);\n };\n\n UniqByTests.prototype['@test supports function as key'] = function () {\n var _this2 = this,\n _arguments = arguments;\n\n var numbers = this.newObject([{ id: 1, value: 'boom' }, { id: 2, value: 'boom' }, { id: 1, value: 'doom' }]);\n\n this.assert.deepEqual(numbers.uniqBy(function (val) {\n _this2.assert.equal(_arguments.length, 1);\n return val.value;\n }), [{ id: 1, value: 'boom' }, { id: 1, value: 'doom' }]);\n };\n\n return UniqByTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('uniqBy', UniqByTests);\n});","enifed('ember-runtime/tests/array/without-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var WithoutTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(WithoutTests, _AbstractTestCase);\n\n function WithoutTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n WithoutTests.prototype['@test should return new instance with item removed'] = function () {\n var before = void 0,\n after = void 0,\n obj = void 0,\n ret = void 0;\n\n before = (0, _array.newFixture)(3);\n after = [before[0], before[2]];\n obj = this.newObject(before);\n\n ret = obj.without(before[1]);\n this.assert.deepEqual(this.toArray(ret), after, 'should have removed item');\n this.assert.deepEqual(this.toArray(obj), before, 'should not have changed original');\n };\n\n WithoutTests.prototype['@test should remove NaN value'] = function () {\n var before = void 0,\n after = void 0,\n obj = void 0,\n ret = void 0;\n\n before = [].concat((0, _array.newFixture)(2), [NaN]);\n after = [before[0], before[1]];\n obj = this.newObject(before);\n\n ret = obj.without(NaN);\n this.assert.deepEqual(this.toArray(ret), after, 'should have removed item');\n };\n\n WithoutTests.prototype['@test should return same instance if object not found'] = function () {\n var item = void 0,\n obj = void 0,\n ret = void 0;\n\n item = (0, _array.newFixture)(1)[0];\n obj = this.newObject((0, _array.newFixture)(3));\n\n ret = obj.without(item);\n this.assert.equal(ret, obj, 'should be same instance');\n };\n\n return WithoutTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('without', WithoutTests);\n});","enifed('ember-runtime/tests/copyable-array/copy-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var CopyTest = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(CopyTest, _AbstractTestCase);\n\n function CopyTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n CopyTest.prototype['@test should return an equivalent copy'] = function () {\n var obj = this.newObject();\n var copy = obj.copy();\n this.assert.ok(this.isEqual(obj, copy), 'old object and new object should be equivalent');\n };\n\n return CopyTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('copy', CopyTest, 'CopyableNativeArray', 'CopyableArray');\n});","enifed('ember-runtime/tests/core/compare_test', ['ember-babel', 'ember-runtime/lib/type-of', 'ember-runtime/lib/system/object', 'ember-runtime/lib/compare', 'ember-runtime/lib/mixins/comparable', 'internal-test-helpers'], function (_emberBabel, _typeOf, _object, _compare, _comparable, _internalTestHelpers) {\n 'use strict';\n\n var data = [];\n var Comp = _object.default.extend(_comparable.default);\n\n Comp.reopenClass({\n compare: function (obj) {\n return obj.get('val');\n }\n });\n\n (0, _internalTestHelpers.moduleFor)('Ember.compare()', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n data[0] = null;\n data[1] = false;\n data[2] = true;\n data[3] = -12;\n data[4] = 3.5;\n data[5] = 'a string';\n data[6] = 'another string';\n data[7] = 'last string';\n data[8] = [1, 2];\n data[9] = [1, 2, 3];\n data[10] = [1, 3];\n data[11] = { a: 'hash' };\n data[12] = _object.default.create();\n data[13] = function (a) {\n return a;\n };\n data[14] = new Date('2012/01/01');\n data[15] = new Date('2012/06/06');\n };\n\n _class.prototype['@test ordering should work'] = function (assert) {\n var suspect = void 0,\n comparable = void 0,\n failureMessage = void 0,\n suspectIndex = void 0,\n comparableIndex = void 0;\n\n for (suspectIndex = 0; suspectIndex < data.length; suspectIndex++) {\n suspect = data[suspectIndex];\n\n assert.equal((0, _compare.default)(suspect, suspect), 0, suspectIndex + ' should equal itself');\n\n for (comparableIndex = suspectIndex + 1; comparableIndex < data.length; comparableIndex++) {\n comparable = data[comparableIndex];\n\n failureMessage = 'data[' + suspectIndex + '] (' + (0, _typeOf.typeOf)(suspect) + ') should be smaller than data[' + comparableIndex + '] (' + (0, _typeOf.typeOf)(comparable) + ')';\n\n assert.equal((0, _compare.default)(suspect, comparable), -1, failureMessage);\n }\n }\n };\n\n _class.prototype['@test comparables should return values in the range of -1, 0, 1'] = function (assert) {\n var negOne = Comp.create({\n val: -1\n });\n\n var zero = Comp.create({\n val: 0\n });\n\n var one = Comp.create({\n val: 1\n });\n\n assert.equal((0, _compare.default)(negOne, 'a'), -1, 'First item comparable - returns -1 (not negated)');\n assert.equal((0, _compare.default)(zero, 'b'), 0, 'First item comparable - returns 0 (not negated)');\n assert.equal((0, _compare.default)(one, 'c'), 1, 'First item comparable - returns 1 (not negated)');\n\n assert.equal((0, _compare.default)('a', negOne), 1, 'Second item comparable - returns -1 (negated)');\n assert.equal((0, _compare.default)('b', zero), 0, 'Second item comparable - returns 0 (negated)');\n assert.equal((0, _compare.default)('c', one), -1, 'Second item comparable - returns 1 (negated)');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/core/copy_test', ['ember-babel', 'ember-runtime/lib/copy', 'internal-test-helpers'], function (_emberBabel, _copy, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember Copy Method', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.copy null'] = function (assert) {\n var obj = { field: null };\n var copied = null;\n expectDeprecation(function () {\n copied = (0, _copy.default)(obj, true);\n }, 'Use ember-copy addon instead of copy method and Copyable mixin.');\n assert.equal(copied.field, null, 'null should still be null');\n };\n\n _class.prototype['@test Ember.copy date'] = function (assert) {\n var date = new Date(2014, 7, 22);\n var dateCopy = null;\n expectDeprecation(function () {\n dateCopy = (0, _copy.default)(date);\n }, 'Use ember-copy addon instead of copy method and Copyable mixin.');\n assert.equal(date.getTime(), dateCopy.getTime(), 'dates should be equivalent');\n };\n\n _class.prototype['@test Ember.copy null prototype object'] = function (assert) {\n var obj = Object.create(null);\n\n obj.foo = 'bar';\n var copied = null;\n expectDeprecation(function () {\n copied = (0, _copy.default)(obj);\n }, 'Use ember-copy addon instead of copy method and Copyable mixin.');\n\n assert.equal(copied.foo, 'bar', 'bar should still be bar');\n };\n\n _class.prototype['@test Ember.copy Array'] = function (assert) {\n var array = [1, null, new Date(2015, 9, 9), 'four'];\n var arrayCopy = null;\n expectDeprecation(function () {\n arrayCopy = (0, _copy.default)(array);\n }, 'Use ember-copy addon instead of copy method and Copyable mixin.');\n\n assert.deepEqual(array, arrayCopy, 'array content cloned successfully in new array');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/core/isEqual_test', ['ember-babel', 'ember-runtime/lib/is-equal', 'internal-test-helpers'], function (_emberBabel, _isEqual, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('isEqual', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test undefined and null'] = function (assert) {\n assert.ok((0, _isEqual.default)(undefined, undefined), 'undefined is equal to undefined');\n assert.ok(!(0, _isEqual.default)(undefined, null), 'undefined is not equal to null');\n assert.ok((0, _isEqual.default)(null, null), 'null is equal to null');\n assert.ok(!(0, _isEqual.default)(null, undefined), 'null is not equal to undefined');\n };\n\n _class.prototype['@test strings should be equal'] = function (assert) {\n assert.ok(!(0, _isEqual.default)('Hello', 'Hi'), 'different Strings are unequal');\n assert.ok((0, _isEqual.default)('Hello', 'Hello'), 'same Strings are equal');\n };\n\n _class.prototype['@test numericals should be equal'] = function (assert) {\n assert.ok((0, _isEqual.default)(24, 24), 'same numbers are equal');\n assert.ok(!(0, _isEqual.default)(24, 21), 'different numbers are inequal');\n };\n\n _class.prototype['@test dates should be equal'] = function (assert) {\n assert.ok((0, _isEqual.default)(new Date(1985, 7, 22), new Date(1985, 7, 22)), 'same dates are equal');\n assert.ok(!(0, _isEqual.default)(new Date(2014, 7, 22), new Date(1985, 7, 22)), 'different dates are not equal');\n };\n\n _class.prototype['@test array should be equal'] = function (assert) {\n // NOTE: We don't test for array contents -- that would be too expensive.\n assert.ok(!(0, _isEqual.default)([1, 2], [1, 2]), 'two array instances with the same values should not be equal');\n assert.ok(!(0, _isEqual.default)([1, 2], [1]), 'two array instances with different values should not be equal');\n };\n\n _class.prototype['@test first object implements isEqual should use it'] = function (assert) {\n assert.ok((0, _isEqual.default)({\n isEqual: function () {\n return true;\n }\n }, null), 'should return true always');\n\n var obj = {\n isEqual: function () {\n return false;\n }\n };\n assert.equal((0, _isEqual.default)(obj, obj), false, 'should return false because isEqual returns false');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/core/is_array_test', ['ember-babel', 'ember-runtime/lib/mixins/array', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/system/object', 'ember-browser-environment', 'internal-test-helpers'], function (_emberBabel, _array, _array_proxy, _object, _emberBrowserEnvironment, _internalTestHelpers) {\n 'use strict';\n\n var global = undefined;\n\n (0, _internalTestHelpers.moduleFor)('Ember Type Checking', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.isArray'] = function (assert) {\n var arrayProxy = _array_proxy.default.create({ content: (0, _array.A)() });\n\n assert.equal((0, _array.isArray)([1, 2, 3]), true, '[1,2,3]');\n assert.equal((0, _array.isArray)(23), false, '23');\n assert.equal((0, _array.isArray)(['Hello', 'Hi']), true, '[\"Hello\", \"Hi\"]');\n assert.equal((0, _array.isArray)('Hello'), false, '\"Hello\"');\n assert.equal((0, _array.isArray)({}), false, '{}');\n assert.equal((0, _array.isArray)({ length: 12 }), true, '{ length: 12 }');\n assert.equal((0, _array.isArray)({ length: 'yes' }), false, '{ length: \"yes\" }');\n assert.equal((0, _array.isArray)(global), false, 'global');\n assert.equal((0, _array.isArray)(function () {}), false, 'function() {}');\n assert.equal((0, _array.isArray)(arrayProxy), true, '[]');\n };\n\n _class.prototype['@test Ember.isArray does not trigger proxy assertion when probing for length GH#16495'] = function (assert) {\n var instance = _object.default.extend({\n unknownProperty: function () {\n return false;\n }\n }).create();\n\n assert.equal((0, _array.isArray)(instance), false);\n };\n\n _class.prototype['@test Ember.isArray(fileList)'] = function (assert) {\n var fileListElement, fileList;\n\n if (_emberBrowserEnvironment.window && typeof _emberBrowserEnvironment.window.FileList === 'function') {\n fileListElement = document.createElement('input');\n\n fileListElement.type = 'file';\n fileList = fileListElement.files;\n\n assert.equal((0, _array.isArray)(fileList), false, 'fileList');\n } else {\n assert.ok(true, 'FileList is not present on window');\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/core/is_empty_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _array_proxy, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.isEmpty', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.isEmpty'] = function (assert) {\n var arrayProxy = _array_proxy.default.create({ content: (0, _array.A)() });\n\n assert.equal(true, (0, _emberMetal.isEmpty)(arrayProxy), 'for an ArrayProxy that has empty content');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/core/type_of_test', ['ember-babel', 'ember-runtime/lib/type-of', 'ember-runtime/lib/system/object', 'ember-browser-environment', 'internal-test-helpers'], function (_emberBabel, _typeOf, _object, _emberBrowserEnvironment, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember Type Checking', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.typeOf'] = function (assert) {\n var MockedDate = function () {};\n MockedDate.prototype = new Date();\n\n var mockedDate = new MockedDate();\n var date = new Date();\n var error = new Error('boum');\n\n var instance = _object.default.create({\n method: function () {}\n });\n\n assert.equal((0, _typeOf.typeOf)(), 'undefined', 'undefined');\n assert.equal((0, _typeOf.typeOf)(null), 'null', 'null');\n assert.equal((0, _typeOf.typeOf)('Cyril'), 'string', 'Cyril');\n assert.equal((0, _typeOf.typeOf)(101), 'number', '101');\n assert.equal((0, _typeOf.typeOf)(true), 'boolean', 'true');\n assert.equal((0, _typeOf.typeOf)([1, 2, 90]), 'array', '[1,2,90]');\n assert.equal((0, _typeOf.typeOf)(/abc/), 'regexp', '/abc/');\n assert.equal((0, _typeOf.typeOf)(date), 'date', 'new Date()');\n assert.equal((0, _typeOf.typeOf)(mockedDate), 'date', 'mocked date');\n assert.equal((0, _typeOf.typeOf)(error), 'error', 'error');\n assert.equal((0, _typeOf.typeOf)({ a: 'b' }), 'object', 'object');\n assert.equal((0, _typeOf.typeOf)(undefined), 'undefined', 'item of type undefined');\n assert.equal((0, _typeOf.typeOf)(null), 'null', 'item of type null');\n assert.equal((0, _typeOf.typeOf)([1, 2, 3]), 'array', 'item of type array');\n assert.equal((0, _typeOf.typeOf)({}), 'object', 'item of type object');\n assert.equal((0, _typeOf.typeOf)(instance), 'instance', 'item of type instance');\n assert.equal((0, _typeOf.typeOf)(instance.method), 'function', 'item of type function');\n assert.equal((0, _typeOf.typeOf)(_object.default.extend()), 'class', 'item of type class');\n assert.equal((0, _typeOf.typeOf)(new Error()), 'error', 'item of type error');\n };\n\n _class.prototype['@test Ember.typeOf(fileList)'] = function (assert) {\n var fileListElement, fileList;\n\n if (_emberBrowserEnvironment.window && typeof _emberBrowserEnvironment.window.FileList === 'function') {\n fileListElement = document.createElement('input');\n\n fileListElement.type = 'file';\n fileList = fileListElement.files;\n\n assert.equal((0, _typeOf.typeOf)(fileList), 'filelist', 'item of type filelist');\n } else {\n assert.ok(true, 'FileList is not present on window');\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/ext/function_test', ['ember-babel', 'ember-environment', 'ember-metal', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/evented', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _emberMetal, _object, _evented, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Function.prototype.observes() helper', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test global observer helper takes multiple params'] = function (assert) {\n if (!_emberEnvironment.ENV.EXTEND_PROTOTYPES.Function) {\n assert.ok('undefined' === typeof Function.prototype.observes, 'Function.prototype helper disabled');\n return;\n }\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n\n foo: function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n }.observes('bar', 'baz')\n });\n\n var obj = (0, _emberMetal.mixin)({}, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n (0, _emberMetal.set)(obj, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 2, 'should invoke observer after change');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Function.prototype.on() helper', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test sets up an event listener, and can trigger the function on multiple events'] = function (assert) {\n if (!_emberEnvironment.ENV.EXTEND_PROTOTYPES.Function) {\n assert.ok('undefined' === typeof Function.prototype.on, 'Function.prototype helper disabled');\n return;\n }\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n\n foo: function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n }.on('bar', 'baz')\n });\n\n var obj = (0, _emberMetal.mixin)({}, _evented.default, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke listener immediately');\n\n obj.trigger('bar');\n obj.trigger('baz');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 2, 'should invoke listeners when events trigger');\n };\n\n _class2.prototype['@test can be chained with observes'] = function (assert) {\n if (!_emberEnvironment.ENV.EXTEND_PROTOTYPES.Function) {\n assert.ok('Function.prototype helper disabled');\n return;\n }\n\n var MyMixin = _emberMetal.Mixin.create({\n count: 0,\n bay: 'bay',\n foo: function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n }.observes('bay').on('bar')\n });\n\n var obj = (0, _emberMetal.mixin)({}, _evented.default, MyMixin);\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke listener immediately');\n\n (0, _emberMetal.set)(obj, 'bay', 'BAY');\n obj.trigger('bar');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 2, 'should invoke observer and listener');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Function.prototype.property() helper', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype['@test sets up a ComputedProperty'] = function (assert) {\n if (!_emberEnvironment.ENV.EXTEND_PROTOTYPES.Function) {\n assert.ok('undefined' === typeof Function.prototype.property, 'Function.prototype helper disabled');\n return;\n }\n\n var MyClass = _object.default.extend({\n firstName: null,\n lastName: null,\n fullName: function () {\n return (0, _emberMetal.get)(this, 'firstName') + ' ' + (0, _emberMetal.get)(this, 'lastName');\n }.property('firstName', 'lastName')\n });\n\n var obj = MyClass.create({ firstName: 'Fred', lastName: 'Flinstone' });\n assert.equal((0, _emberMetal.get)(obj, 'fullName'), 'Fred Flinstone', 'should return the computed value');\n\n (0, _emberMetal.set)(obj, 'firstName', 'Wilma');\n assert.equal((0, _emberMetal.get)(obj, 'fullName'), 'Wilma Flinstone', 'should return the new computed value');\n\n (0, _emberMetal.set)(obj, 'lastName', '');\n assert.equal((0, _emberMetal.get)(obj, 'fullName'), 'Wilma ', 'should return the new computed value');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/ext/rsvp_test', ['ember-babel', '@ember/runloop', 'ember-error-handling', 'ember-runtime/lib/ext/rsvp', '@ember/debug', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberErrorHandling, _rsvp, _debug, _internalTestHelpers) {\n 'use strict';\n\n var ORIGINAL_ONERROR = (0, _emberErrorHandling.getOnerror)();\n\n (0, _internalTestHelpers.moduleFor)('Ember.RSVP', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.afterEach = function () {\n (0, _emberErrorHandling.setOnerror)(ORIGINAL_ONERROR);\n };\n\n _class.prototype['@test Ensure that errors thrown from within a promise are sent to the console'] = function (assert) {\n var error = new Error('Error thrown in a promise for testing purposes.');\n\n try {\n (0, _runloop.run)(function () {\n new _rsvp.default.Promise(function () {\n throw error;\n });\n });\n assert.ok(false, 'expected assertion to be thrown');\n } catch (e) {\n assert.equal(e, error, 'error was re-thrown');\n }\n };\n\n _class.prototype['@test TransitionAborted errors are not re-thrown'] = function (assert) {\n assert.expect(1);\n\n\n (0, _runloop.run)(_rsvp.default, 'reject', { name: 'TransitionAborted' });\n\n assert.ok(true, 'did not throw an error when dealing with TransitionAborted');\n };\n\n _class.prototype['@test Can reject with non-Error object'] = function (assert) {\n var wasEmberTesting = (0, _debug.isTesting)();\n (0, _debug.setTesting)(false);\n assert.expect(1);\n\n try {\n (0, _runloop.run)(_rsvp.default, 'reject', 'foo');\n } catch (e) {\n assert.equal(e, 'foo', 'should throw with rejection message');\n } finally {\n (0, _debug.setTesting)(wasEmberTesting);\n }\n };\n\n _class.prototype['@test Can reject with no arguments'] = function (assert) {\n var wasEmberTesting = (0, _debug.isTesting)();\n (0, _debug.setTesting)(false);\n assert.expect(1);\n\n try {\n (0, _runloop.run)(_rsvp.default, 'reject');\n } catch (e) {\n assert.ok(false, 'should not throw');\n } finally {\n (0, _debug.setTesting)(wasEmberTesting);\n }\n\n assert.ok(true);\n };\n\n _class.prototype['@test rejections like jqXHR which have errorThrown property work'] = function (assert) {\n assert.expect(2);\n\n var wasEmberTesting = (0, _debug.isTesting)(),\n _actualError,\n _jqXHR;\n var wasOnError = (0, _emberErrorHandling.getOnerror)();\n\n try {\n (0, _debug.setTesting)(false);\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.equal(error, _actualError, 'expected the real error on the jqXHR');\n assert.equal(error.__reason_with_error_thrown__, _jqXHR, 'also retains a helpful reference to the rejection reason');\n });\n\n _actualError = new Error('OMG what really happened');\n _jqXHR = {\n errorThrown: _actualError\n };\n\n\n (0, _runloop.run)(_rsvp.default, 'reject', _jqXHR);\n } finally {\n (0, _emberErrorHandling.setOnerror)(wasOnError);\n (0, _debug.setTesting)(wasEmberTesting);\n }\n };\n\n _class.prototype['@test rejections where the errorThrown is a string should wrap the sting in an error object'] = function (assert) {\n assert.expect(2);\n\n var wasEmberTesting = (0, _debug.isTesting)(),\n _actualError2,\n _jqXHR2;\n var wasOnError = (0, _emberErrorHandling.getOnerror)();\n\n try {\n (0, _debug.setTesting)(false);\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.equal(error.message, _actualError2, 'expected the real error on the jqXHR');\n assert.equal(error.__reason_with_error_thrown__, _jqXHR2, 'also retains a helpful reference to the rejection reason');\n });\n\n _actualError2 = 'OMG what really happened';\n _jqXHR2 = {\n errorThrown: _actualError2\n };\n\n\n (0, _runloop.run)(_rsvp.default, 'reject', _jqXHR2);\n } finally {\n (0, _emberErrorHandling.setOnerror)(wasOnError);\n (0, _debug.setTesting)(wasEmberTesting);\n }\n };\n\n _class.prototype['@test rejections can be serialized to JSON'] = function (assert) {\n assert.expect(2);\n\n var wasEmberTesting = (0, _debug.isTesting)(),\n _jqXHR3;\n var wasOnError = (0, _emberErrorHandling.getOnerror)();\n\n try {\n (0, _debug.setTesting)(false);\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.equal(error.message, 'a fail');\n assert.ok(JSON.stringify(error), 'Error can be serialized');\n });\n\n _jqXHR3 = {\n errorThrown: new Error('a fail')\n };\n\n\n (0, _runloop.run)(_rsvp.default, 'reject', _jqXHR3);\n } finally {\n (0, _emberErrorHandling.setOnerror)(wasOnError);\n (0, _debug.setTesting)(wasEmberTesting);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n var reason = 'i failed';\n function ajax() {\n return new _rsvp.default.Promise(function (resolve) {\n setTimeout(resolve, 0); // fake true / foreign async\n });\n }\n\n (0, _internalTestHelpers.moduleFor)('Ember.test: rejection assertions', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test unambigiously unhandled rejection'] = function (assert) {\n assert.throws(function () {\n (0, _runloop.run)(function () {\n _rsvp.default.Promise.reject(reason);\n }); // something is funky, we should likely assert\n }, reason);\n };\n\n _class2.prototype['@test sync handled'] = function (assert) {\n (0, _runloop.run)(function () {\n _rsvp.default.Promise.reject(reason).catch(function () {});\n }); // handled, we shouldn't need to assert.\n assert.ok(true, 'reached end of test');\n };\n\n _class2.prototype['@test handled within the same micro-task (via Ember.RVP.Promise)'] = function (assert) {\n (0, _runloop.run)(function () {\n var rejection = _rsvp.default.Promise.reject(reason);\n _rsvp.default.Promise.resolve(1).then(function () {\n return rejection.catch(function () {});\n });\n }); // handled, we shouldn't need to assert.\n assert.ok(true, 'reached end of test');\n };\n\n _class2.prototype['@test handled within the same micro-task (via direct run-loop)'] = function (assert) {\n (0, _runloop.run)(function () {\n var rejection = _rsvp.default.Promise.reject(reason);\n (0, _runloop.schedule)('afterRender', function () {\n return rejection.catch(function () {});\n });\n }); // handled, we shouldn't need to assert.\n assert.ok(true, 'reached end of test');\n };\n\n _class2.prototype['@test handled in the next microTask queue flush (next)'] = function (assert) {\n assert.expect(2);\n var done = assert.async();\n\n assert.throws(function () {\n (0, _runloop.run)(function () {\n var rejection = _rsvp.default.Promise.reject(reason);\n\n (0, _runloop.next)(function () {\n rejection.catch(function () {});\n assert.ok(true, 'reached end of test');\n done();\n });\n });\n }, reason);\n\n // a promise rejection survived a full flush of the run-loop without being handled\n // this is very likely an issue.\n };\n\n _class2.prototype['@test handled in the same microTask Queue flush do to data locality'] = function (assert) {\n // an ambiguous scenario, this may or may not assert\n // it depends on the locality of `user#1`\n var store = {\n find: function () {\n return _rsvp.default.Promise.resolve(1);\n }\n };\n (0, _runloop.run)(function () {\n var rejection = _rsvp.default.Promise.reject(reason);\n store.find('user', 1).then(function () {\n return rejection.catch(function () {});\n });\n });\n\n assert.ok(true, 'reached end of test');\n };\n\n _class2.prototype['@test handled in a different microTask Queue flush do to data locality'] = function (assert) {\n var done = assert.async();\n // an ambiguous scenario, this may or may not assert\n // it depends on the locality of `user#1`\n var store = {\n find: function () {\n return ajax();\n }\n };\n assert.throws(function () {\n (0, _runloop.run)(function () {\n var rejection = _rsvp.default.Promise.reject(reason);\n store.find('user', 1).then(function () {\n rejection.catch(function () {});\n assert.ok(true, 'reached end of test');\n done();\n });\n });\n }, reason);\n };\n\n _class2.prototype['@test handled in the next microTask queue flush (ajax example)'] = function (assert) {\n var done = assert.async();\n\n assert.throws(function () {\n (0, _runloop.run)(function () {\n var rejection = _rsvp.default.Promise.reject(reason);\n ajax().then(function () {\n rejection.catch(function () {});\n assert.ok(true, 'reached end of test');\n done();\n });\n });\n }, reason);\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/helpers/array', ['exports', 'ember-babel', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'ember-utils', 'ember-metal', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/copyable', 'internal-test-helpers'], function (exports, _emberBabel, _array_proxy, _array, _emberUtils, _emberMetal, _object, _copyable, _internalTestHelpers) {\n 'use strict';\n\n exports.newFixture = newFixture;\n exports.newObjectsFixture = function (cnt) {\n var ret = [];\n var item = void 0;\n while (--cnt >= 0) {\n item = {};\n (0, _emberUtils.guidFor)(item);\n ret.push(item);\n }\n return ret;\n };\n exports.runArrayTests = function (name, Tests) {\n var _len2, types, _key2;\n\n for (_len2 = arguments.length, types = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n types[_key2 - 2] = arguments[_key2];\n }\n\n if (types.length > 0) {\n types.forEach(function (type) {\n switch (type) {\n case 'ArrayProxy':\n (0, _internalTestHelpers.moduleFor)('ArrayProxy: ' + name, Tests, ArrayProxyHelpers);\n break;\n case 'EmberArray':\n (0, _internalTestHelpers.moduleFor)('EmberArray: ' + name, Tests, EmberArrayHelpers);\n break;\n case 'MutableArray':\n (0, _internalTestHelpers.moduleFor)('MutableArray: ' + name, Tests, EmberArrayHelpers);\n break;\n case 'CopyableArray':\n (0, _internalTestHelpers.moduleFor)('CopyableArray: ' + name, Tests, CopyableArray);\n break;\n case 'CopyableNativeArray':\n (0, _internalTestHelpers.moduleFor)('CopyableNativeArray: ' + name, Tests, CopyableNativeArray);\n break;\n case 'NativeArray':\n (0, _internalTestHelpers.moduleFor)('NativeArray: ' + name, Tests, EmberArrayHelpers);\n break;\n }\n });\n } else {\n (0, _internalTestHelpers.moduleFor)('ArrayProxy: ' + name, Tests, ArrayProxyHelpers);\n (0, _internalTestHelpers.moduleFor)('EmberArray: ' + name, Tests, EmberArrayHelpers);\n (0, _internalTestHelpers.moduleFor)('MutableArray: ' + name, Tests, MutableArrayHelpers);\n (0, _internalTestHelpers.moduleFor)('NativeArray: ' + name, Tests, NativeArrayHelpers);\n }\n };\n function newFixture(cnt) {\n var ret = [];\n while (--cnt >= 0) {\n ret.push((0, _emberUtils.generateGuid)());\n }\n\n return ret;\n }\n\n var ArrayTestsObserverClass = _object.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.isEnabled = true;\n this.reset();\n },\n reset: function () {\n this._keys = {};\n this._values = {};\n this._before = null;\n this._after = null;\n return this;\n },\n observe: function (obj) {\n var _len, keys, _key, loc;\n\n if (obj.addObserver) {\n for (_len = arguments.length, keys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n keys[_key - 1] = arguments[_key];\n }\n\n loc = keys.length;\n\n\n while (--loc >= 0) {\n obj.addObserver(keys[loc], this, 'propertyDidChange');\n }\n } else {\n this.isEnabled = false;\n }\n return this;\n },\n observeArray: function (obj) {\n (0, _emberMetal.addArrayObserver)(obj, this);\n return this;\n },\n stopObserveArray: function (obj) {\n (0, _emberMetal.removeArrayObserver)(obj, this);\n return this;\n },\n propertyDidChange: function (target, key, value) {\n if (this._keys[key] === undefined) {\n this._keys[key] = 0;\n }\n this._keys[key]++;\n this._values[key] = value;\n },\n arrayWillChange: function () {\n this.assert.equal(this._before, null, 'should only call once');\n this._before = Array.prototype.slice.call(arguments);\n },\n arrayDidChange: function () {\n this.assert.equal(this._after, null, 'should only call once');\n this._after = Array.prototype.slice.call(arguments);\n },\n validate: function (key, value) {\n if (!this.isEnabled) {\n return true;\n }\n\n if (!this._keys[key]) {\n return false;\n }\n\n if (arguments.length > 1) {\n return this._values[key] === value;\n } else {\n return true;\n }\n },\n timesCalled: function (key) {\n return this._keys[key] || 0;\n }\n });\n\n var AbstractArrayHelper = function () {\n function AbstractArrayHelper() {}\n\n AbstractArrayHelper.prototype.beforeEach = function (assert) {\n this.assert = assert;\n };\n\n AbstractArrayHelper.prototype.newObject = function (ary) {\n return ary ? ary.slice() : newFixture(3);\n };\n\n AbstractArrayHelper.prototype.toArray = function (obj) {\n return obj.slice();\n };\n\n AbstractArrayHelper.prototype.newObserver = function () {\n var ret = ArrayTestsObserverClass.create({\n assert: this.assert\n });\n\n if (arguments.length > 0) {\n ret.observe.apply(ret, arguments);\n }\n\n return ret;\n };\n\n return AbstractArrayHelper;\n }();\n\n var NativeArrayHelpers = function (_AbstractArrayHelper) {\n (0, _emberBabel.inherits)(NativeArrayHelpers, _AbstractArrayHelper);\n\n function NativeArrayHelpers() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractArrayHelper.apply(this, arguments));\n }\n\n NativeArrayHelpers.prototype.newObject = function (ary) {\n return (0, _array.A)(_AbstractArrayHelper.prototype.newObject.call(this, ary));\n };\n\n NativeArrayHelpers.prototype.mutate = function (obj) {\n obj.pushObject(obj.length + 1);\n };\n\n return NativeArrayHelpers;\n }(AbstractArrayHelper);\n\n var CopyableNativeArray = function (_AbstractArrayHelper2) {\n (0, _emberBabel.inherits)(CopyableNativeArray, _AbstractArrayHelper2);\n\n function CopyableNativeArray() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractArrayHelper2.apply(this, arguments));\n }\n\n CopyableNativeArray.prototype.newObject = function () {\n return (0, _array.A)([(0, _emberUtils.generateGuid)()]);\n };\n\n CopyableNativeArray.prototype.isEqual = function (a, b) {\n if (!(a instanceof Array)) {\n return false;\n }\n\n if (!(b instanceof Array)) {\n return false;\n }\n\n if (a.length !== b.length) {\n return false;\n }\n\n return a[0] === b[0];\n };\n\n return CopyableNativeArray;\n }(AbstractArrayHelper);\n\n var CopyableArray = function (_AbstractArrayHelper3) {\n (0, _emberBabel.inherits)(CopyableArray, _AbstractArrayHelper3);\n\n function CopyableArray() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractArrayHelper3.apply(this, arguments));\n }\n\n CopyableArray.prototype.newObject = function () {\n return new CopyableObject();\n };\n\n CopyableArray.prototype.isEqual = function (a, b) {\n if (!(a instanceof CopyableObject) || !(b instanceof CopyableObject)) {\n return false;\n }\n\n return (0, _emberMetal.get)(a, 'id') === (0, _emberMetal.get)(b, 'id');\n };\n\n return CopyableArray;\n }(AbstractArrayHelper);\n\n var ArrayProxyHelpers = function (_AbstractArrayHelper4) {\n (0, _emberBabel.inherits)(ArrayProxyHelpers, _AbstractArrayHelper4);\n\n function ArrayProxyHelpers() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractArrayHelper4.apply(this, arguments));\n }\n\n ArrayProxyHelpers.prototype.newObject = function (ary) {\n return _array_proxy.default.create({ content: (0, _array.A)(_AbstractArrayHelper4.prototype.newObject.call(this, ary)) });\n };\n\n ArrayProxyHelpers.prototype.mutate = function (obj) {\n obj.pushObject((0, _emberMetal.get)(obj, 'length') + 1);\n };\n\n ArrayProxyHelpers.prototype.toArray = function (obj) {\n return obj.toArray ? obj.toArray() : obj.slice();\n };\n\n return ArrayProxyHelpers;\n }(AbstractArrayHelper);\n\n /*\n Implement a basic fake mutable array. This validates that any non-native\n enumerable can impl this API.\n */\n var TestArray = _object.default.extend(_array.default, {\n _content: null,\n\n init: function () {\n this._content = this._content || [];\n },\n addObject: function (obj) {\n var idx = this._content.length;\n (0, _emberMetal.arrayContentWillChange)(this, idx, 0, 1);\n this._content.push(obj);\n (0, _emberMetal.arrayContentDidChange)(this, idx, 0, 1);\n },\n removeFirst: function () {\n (0, _emberMetal.arrayContentWillChange)(this, 0, 1, 0);\n this._content.shift();\n (0, _emberMetal.arrayContentDidChange)(this, 0, 1, 0);\n },\n objectAt: function (idx) {\n return this._content[idx];\n },\n\n length: (0, _emberMetal.computed)(function () {\n return this._content.length;\n })\n });\n\n /*\n Implement a basic fake mutable array. This validates that any non-native\n enumerable can impl this API.\n */\n var TestMutableArray = _object.default.extend(_array.MutableArray, {\n _content: null,\n\n init: function () {\n var ary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n this._content = (0, _array.A)(ary);\n },\n replace: function (idx, amt, objects) {\n var args = objects ? objects.slice() : [];\n var removeAmt = amt;\n var addAmt = args.length;\n\n (0, _emberMetal.arrayContentWillChange)(this, idx, removeAmt, addAmt);\n\n args.unshift(amt);\n args.unshift(idx);\n this._content.splice.apply(this._content, args);\n (0, _emberMetal.arrayContentDidChange)(this, idx, removeAmt, addAmt);\n return this;\n },\n objectAt: function (idx) {\n return this._content[idx];\n },\n\n length: (0, _emberMetal.computed)(function () {\n return this._content.length;\n }),\n\n slice: function () {\n return this._content.slice();\n }\n });\n\n var CopyableObject = _object.default.extend(_copyable.default, {\n id: null,\n\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'id', (0, _emberUtils.generateGuid)());\n },\n copy: function () {\n var ret = new CopyableObject();\n (0, _emberMetal.set)(ret, 'id', (0, _emberMetal.get)(this, 'id'));\n return ret;\n }\n });\n\n var MutableArrayHelpers = function (_NativeArrayHelpers) {\n (0, _emberBabel.inherits)(MutableArrayHelpers, _NativeArrayHelpers);\n\n function MutableArrayHelpers() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _NativeArrayHelpers.apply(this, arguments));\n }\n\n MutableArrayHelpers.prototype.newObject = function (ary) {\n return new TestMutableArray(_NativeArrayHelpers.prototype.newObject.call(this, ary));\n };\n\n MutableArrayHelpers.prototype.mutate = function (obj) {\n obj.addObject(this.getFixture(1)[0]);\n };\n\n return MutableArrayHelpers;\n }(NativeArrayHelpers);\n\n var EmberArrayHelpers = function (_MutableArrayHelpers) {\n (0, _emberBabel.inherits)(EmberArrayHelpers, _MutableArrayHelpers);\n\n function EmberArrayHelpers() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _MutableArrayHelpers.apply(this, arguments));\n }\n\n EmberArrayHelpers.prototype.newObject = function (ary) {\n return new TestArray(_MutableArrayHelpers.prototype.newObject.call(this, ary));\n };\n\n return EmberArrayHelpers;\n }(MutableArrayHelpers);\n});","enifed('ember-runtime/tests/inject_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('inject', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test attempting to inject a nonexistent container key should error'] = function () {\n var owner = (0, _internalTestHelpers.buildOwner)();\n var AnObject = _object.default.extend({\n foo: new _emberMetal.InjectedProperty('bar', 'baz')\n });\n\n owner.register('foo:main', AnObject);\n\n expectAssertion(function () {\n owner.lookup('foo:main');\n }, /Attempting to inject an unknown injection: 'bar:baz'/);\n };\n\n _class.prototype['@test factories should return a list of lazy injection full names'] = function (assert) {\n assert.expect(0);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/legacy_1x/mixins/observable/chained_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _object, _array, _internalTestHelpers) {\n 'use strict';\n\n /*\n NOTE: This test is adapted from the 1.x series of unit tests. The tests\n are the same except for places where we intend to break the API we instead\n validate that we warn the developer appropriately.\n \n CHANGES FROM 1.6:\n \n * changed obj.set() and obj.get() to Ember.set() and Ember.get()\n * changed obj.addObserver() to addObserver()\n */\n\n (0, _internalTestHelpers.moduleFor)('Ember.Observable - Observing with @each', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test chained observers on enumerable properties are triggered when the observed property of any item changes'] = function (assert) {\n var family = _object.default.create({ momma: null });\n var momma = _object.default.create({ children: [] });\n\n var child1 = _object.default.create({ name: 'Bartholomew' });\n var child2 = _object.default.create({ name: 'Agnes' });\n var child3 = _object.default.create({ name: 'Dan' });\n var child4 = _object.default.create({ name: 'Nancy' });\n\n (0, _emberMetal.set)(family, 'momma', momma);\n (0, _emberMetal.set)(momma, 'children', (0, _array.A)([child1, child2, child3]));\n\n var observerFiredCount = 0;\n (0, _emberMetal.addObserver)(family, 'momma.children.@each.name', this, function () {\n observerFiredCount++;\n });\n\n observerFiredCount = 0;\n (0, _runloop.run)(function () {\n return (0, _emberMetal.get)(momma, 'children').setEach('name', 'Juan');\n });\n assert.equal(observerFiredCount, 3, 'observer fired after changing child names');\n\n observerFiredCount = 0;\n (0, _runloop.run)(function () {\n return (0, _emberMetal.get)(momma, 'children').pushObject(child4);\n });\n assert.equal(observerFiredCount, 1, 'observer fired after adding a new item');\n\n observerFiredCount = 0;\n (0, _runloop.run)(function () {\n return (0, _emberMetal.set)(child4, 'name', 'Herbert');\n });\n assert.equal(observerFiredCount, 1, 'observer fired after changing property on new object');\n\n (0, _emberMetal.set)(momma, 'children', []);\n\n observerFiredCount = 0;\n (0, _runloop.run)(function () {\n return (0, _emberMetal.set)(child1, 'name', 'Hanna');\n });\n assert.equal(observerFiredCount, 0, 'observer did not fire after removing changing property on a removed object');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/legacy_1x/mixins/observable/observable_test', ['ember-babel', 'ember-environment', '@ember/runloop', 'ember-metal', '@ember/string', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/observable', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _runloop, _emberMetal, _string, _object, _observable, _array, _internalTestHelpers) {\n 'use strict';\n\n /*\n NOTE: This test is adapted from the 1.x series of unit tests. The tests\n are the same except for places where we intend to break the API we instead\n validate that we warn the developer appropriately.\n \n CHANGES FROM 1.6:\n \n * Added ObservableObject which applies the Ember.Observable mixin.\n * Changed reference to Ember.T_FUNCTION to 'function'\n * Changed all references to sc_super to this._super(...arguments)\n * Changed Ember.objectForPropertyPath() to Ember.getPath()\n * Removed allPropertiesDidChange test - no longer supported\n * Changed test that uses 'ObjectE' as path to 'objectE' to reflect new\n rule on using capital letters for property paths.\n * Removed test passing context to addObserver. context param is no longer\n supported.\n * removed test in observer around line 862 that expected key/value to be\n the last item in the chained path. Should be root and chained path\n \n */\n\n // ========================================================================\n // Ember.Observable Tests\n // ========================================================================\n\n var object, ObjectC, ObjectD, objectA, objectB, lookup;\n\n var ObservableObject = _object.default.extend(_observable.default);\n var originalLookup = _emberEnvironment.context.lookup;\n\n // ..........................................................\n // GET()\n //\n\n (0, _internalTestHelpers.moduleFor)('object.get()', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n object = ObservableObject.extend(_observable.default, {\n computed: (0, _emberMetal.computed)(function () {\n return 'value';\n }).volatile(),\n method: function () {\n return 'value';\n },\n unknownProperty: function (key) {\n this.lastUnknownProperty = key;\n return 'unknown';\n }\n }).create({\n normal: 'value',\n numberVal: 24,\n toggleVal: true,\n nullProperty: null\n });\n };\n\n _class.prototype['@test should get normal properties'] = function (assert) {\n assert.equal(object.get('normal'), 'value');\n };\n\n _class.prototype['@test should call computed properties and return their result'] = function (assert) {\n assert.equal(object.get('computed'), 'value');\n };\n\n _class.prototype['@test should return the function for a non-computed property'] = function (assert) {\n var value = object.get('method');\n assert.equal(typeof value, 'function');\n };\n\n _class.prototype['@test should return null when property value is null'] = function (assert) {\n assert.equal(object.get('nullProperty'), null);\n };\n\n _class.prototype['@test should call unknownProperty when value is undefined'] = function (assert) {\n assert.equal(object.get('unknown'), 'unknown');\n assert.equal(object.lastUnknownProperty, 'unknown');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n // ..........................................................\n // Ember.GET()\n //\n (0, _internalTestHelpers.moduleFor)('Ember.get()', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function () {\n objectA = ObservableObject.extend({\n computed: (0, _emberMetal.computed)(function () {\n return 'value';\n }).volatile(),\n method: function () {\n return 'value';\n },\n unknownProperty: function (key) {\n this.lastUnknownProperty = key;\n return 'unknown';\n }\n }).create({\n normal: 'value',\n numberVal: 24,\n toggleVal: true,\n nullProperty: null\n });\n\n objectB = {\n normal: 'value',\n nullProperty: null\n };\n };\n\n _class2.prototype['@test should get normal properties on Ember.Observable'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objectA, 'normal'), 'value');\n };\n\n _class2.prototype['@test should call computed properties on Ember.Observable and return their result'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objectA, 'computed'), 'value');\n };\n\n _class2.prototype['@test should return the function for a non-computed property on Ember.Observable'] = function (assert) {\n var value = (0, _emberMetal.get)(objectA, 'method');\n assert.equal(typeof value, 'function');\n };\n\n _class2.prototype['@test should return null when property value is null on Ember.Observable'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objectA, 'nullProperty'), null);\n };\n\n _class2.prototype['@test should call unknownProperty when value is undefined on Ember.Observable'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objectA, 'unknown'), 'unknown');\n assert.equal(objectA.lastUnknownProperty, 'unknown');\n };\n\n _class2.prototype['@test should get normal properties on standard objects'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objectB, 'normal'), 'value');\n };\n\n _class2.prototype['@test should return null when property is null on standard objects'] = function (assert) {\n assert.equal((0, _emberMetal.get)(objectB, 'nullProperty'), null);\n };\n\n _class2.prototype['@test raise if the provided object is undefined'] = function () {\n expectAssertion(function () {\n (0, _emberMetal.get)(undefined, 'key');\n }, /Cannot call get with 'key' on an undefined object/i);\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Ember.get() with paths', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype['@test should return a property at a given path relative to the passed object'] = function (assert) {\n var foo = ObservableObject.create({\n bar: ObservableObject.extend({\n baz: (0, _emberMetal.computed)(function () {\n return 'blargh';\n }).volatile()\n }).create()\n });\n\n assert.equal((0, _emberMetal.get)(foo, 'bar.baz'), 'blargh');\n };\n\n _class3.prototype['@test should return a property at a given path relative to the passed object - JavaScript hash'] = function (assert) {\n\n assert.equal((0, _emberMetal.get)({\n bar: {\n baz: 'blargh'\n }\n }, 'bar.baz'), 'blargh');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // SET()\n //\n\n (0, _internalTestHelpers.moduleFor)('object.set()', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype.beforeEach = function () {\n object = ObservableObject.extend({\n computed: (0, _emberMetal.computed)({\n get: function () {\n return this._computed;\n },\n set: function (key, value) {\n this._computed = value;\n return this._computed;\n }\n }).volatile(),\n\n method: function (key, value) {\n if (value !== undefined) {\n this._method = value;\n }\n return this._method;\n },\n unknownProperty: function () {\n return this._unknown;\n },\n setUnknownProperty: function (key, value) {\n this._unknown = value;\n return this._unknown;\n },\n\n // normal property\n normal: 'value',\n\n // computed property\n _computed: 'computed',\n // method, but not a property\n _method: 'method',\n // null property\n nullProperty: null,\n\n // unknown property\n _unknown: 'unknown'\n }).create();\n };\n\n _class4.prototype['@test should change normal properties and return the value'] = function (assert) {\n var ret = object.set('normal', 'changed');\n assert.equal(object.get('normal'), 'changed');\n assert.equal(ret, 'changed');\n };\n\n _class4.prototype['@test should call computed properties passing value and return the value'] = function (assert) {\n var ret = object.set('computed', 'changed');\n assert.equal(object.get('_computed'), 'changed');\n assert.equal(ret, 'changed');\n };\n\n _class4.prototype['@test should change normal properties when passing undefined'] = function (assert) {\n var ret = object.set('normal', undefined);\n assert.equal(object.get('normal'), undefined);\n assert.equal(ret, undefined);\n };\n\n _class4.prototype['@test should replace the function for a non-computed property and return the value'] = function (assert) {\n var ret = object.set('method', 'changed');\n assert.equal(object.get('_method'), 'method'); // make sure this was NOT run\n assert.ok(typeof object.get('method') !== 'function');\n assert.equal(ret, 'changed');\n };\n\n _class4.prototype['@test should replace prover when property value is null'] = function (assert) {\n var ret = object.set('nullProperty', 'changed');\n assert.equal(object.get('nullProperty'), 'changed');\n assert.equal(ret, 'changed');\n };\n\n _class4.prototype['@test should call unknownProperty with value when property is undefined'] = function (assert) {\n var ret = object.set('unknown', 'changed');\n assert.equal(object.get('_unknown'), 'changed');\n assert.equal(ret, 'changed');\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // COMPUTED PROPERTIES\n //\n\n (0, _internalTestHelpers.moduleFor)('Computed properties', function (_AbstractTestCase5) {\n (0, _emberBabel.inherits)(_class5, _AbstractTestCase5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase5.apply(this, arguments));\n }\n\n _class5.prototype.beforeEach = function () {\n lookup = _emberEnvironment.context.lookup = {};\n\n object = ObservableObject.extend({\n computed: (0, _emberMetal.computed)({\n get: function () {\n this.computedCalls.push('getter-called');\n return 'computed';\n },\n set: function (key, value) {\n this.computedCalls.push(value);\n }\n }).volatile(),\n\n computedCached: (0, _emberMetal.computed)({\n get: function () {\n this.computedCachedCalls.push('getter-called');\n return 'computedCached';\n },\n\n set: function (key, value) {\n this.computedCachedCalls.push(value);\n }\n }),\n\n dependent: (0, _emberMetal.computed)({\n get: function () {\n this.dependentCalls.push('getter-called');\n return 'dependent';\n },\n set: function (key, value) {\n this.dependentCalls.push(value);\n }\n }).property('changer').volatile(),\n dependentFront: (0, _emberMetal.computed)('changer', {\n get: function () {\n this.dependentFrontCalls.push('getter-called');\n return 'dependentFront';\n },\n set: function (key, value) {\n this.dependentFrontCalls.push(value);\n }\n }).volatile(),\n dependentCached: (0, _emberMetal.computed)({\n get: function () {\n this.dependentCachedCalls.push('getter-called!');\n return 'dependentCached';\n },\n set: function (key, value) {\n this.dependentCachedCalls.push(value);\n }\n }).property('changer'),\n\n inc: (0, _emberMetal.computed)('changer', function () {\n return this.incCallCount++;\n }),\n\n nestedInc: (0, _emberMetal.computed)(function () {\n (0, _emberMetal.get)(this, 'inc');\n return this.nestedIncCallCount++;\n }).property('inc'),\n\n isOn: (0, _emberMetal.computed)({\n get: function () {\n return this.get('state') === 'on';\n },\n set: function () {\n this.set('state', 'on');\n return this.get('state') === 'on';\n }\n }).property('state').volatile(),\n\n isOff: (0, _emberMetal.computed)({\n get: function () {\n return this.get('state') === 'off';\n },\n set: function () {\n this.set('state', 'off');\n return this.get('state') === 'off';\n }\n }).property('state').volatile()\n }).create({\n computedCalls: [],\n computedCachedCalls: [],\n changer: 'foo',\n dependentCalls: [],\n dependentFrontCalls: [],\n dependentCachedCalls: [],\n incCallCount: 0,\n nestedIncCallCount: 0,\n state: 'on'\n });\n };\n\n _class5.prototype.afterEach = function () {\n _emberEnvironment.context.lookup = originalLookup;\n };\n\n _class5.prototype['@test getting values should call function return value'] = function (assert) {\n // get each property twice. Verify return.\n var keys = (0, _string.w)('computed computedCached dependent dependentFront dependentCached');\n\n keys.forEach(function (key) {\n assert.equal(object.get(key), key, 'Try #1: object.get(' + key + ') should run function');\n assert.equal(object.get(key), key, 'Try #2: object.get(' + key + ') should run function');\n });\n\n // verify each call count. cached should only be called once\n (0, _string.w)('computedCalls dependentFrontCalls dependentCalls').forEach(function (key) {\n assert.equal(object[key].length, 2, 'non-cached property ' + key + ' should be called 2x');\n });\n\n (0, _string.w)('computedCachedCalls dependentCachedCalls').forEach(function (key) {\n assert.equal(object[key].length, 1, 'non-cached property ' + key + ' should be called 1x');\n });\n };\n\n _class5.prototype['@test setting values should call function return value'] = function (assert) {\n // get each property twice. Verify return.\n var keys = (0, _string.w)('computed dependent dependentFront computedCached dependentCached');\n var values = (0, _string.w)('value1 value2');\n\n keys.forEach(function (key) {\n assert.equal(object.set(key, values[0]), values[0], 'Try #1: object.set(' + key + ', ' + values[0] + ') should run function');\n\n assert.equal(object.set(key, values[1]), values[1], 'Try #2: object.set(' + key + ', ' + values[1] + ') should run function');\n\n assert.equal(object.set(key, values[1]), values[1], 'Try #3: object.set(' + key + ', ' + values[1] + ') should not run function since it is setting same value as before');\n });\n\n // verify each call count. cached should only be called once\n keys.forEach(function (key) {\n var calls = object[key + 'Calls'];\n var idx, expectedLength;\n\n // Cached properties first check their cached value before setting the\n // property. Other properties blindly call set.\n expectedLength = 3;\n assert.equal(calls.length, expectedLength, 'set(' + key + ') should be called the right amount of times');\n for (idx = 0; idx < 2; idx++) {\n assert.equal(calls[idx], values[idx], 'call #' + (idx + 1) + ' to set(' + key + ') should have passed value ' + values[idx]);\n }\n });\n };\n\n _class5.prototype['@test notify change should clear cache'] = function (assert) {\n // call get several times to collect call count\n object.get('computedCached'); // should run func\n object.get('computedCached'); // should not run func\n\n object.notifyPropertyChange('computedCached');\n\n object.get('computedCached'); // should run again\n assert.equal(object.computedCachedCalls.length, 2, 'should have invoked method 2x');\n };\n\n _class5.prototype['@test change dependent should clear cache'] = function (assert) {\n // call get several times to collect call count\n var ret1 = object.get('inc'); // should run func\n assert.equal(object.get('inc'), ret1, 'multiple calls should not run cached prop');\n\n object.set('changer', 'bar');\n\n assert.equal(object.get('inc'), ret1 + 1, 'should increment after dependent key changes'); // should run again\n };\n\n _class5.prototype['@test just notifying change of dependent should clear cache'] = function (assert) {\n // call get several times to collect call count\n var ret1 = object.get('inc'); // should run func\n assert.equal(object.get('inc'), ret1, 'multiple calls should not run cached prop');\n\n object.notifyPropertyChange('changer');\n\n assert.equal(object.get('inc'), ret1 + 1, 'should increment after dependent key changes'); // should run again\n };\n\n _class5.prototype['@test changing dependent should clear nested cache'] = function (assert) {\n // call get several times to collect call count\n var ret1 = object.get('nestedInc'); // should run func\n assert.equal(object.get('nestedInc'), ret1, 'multiple calls should not run cached prop');\n\n object.set('changer', 'bar');\n\n assert.equal(object.get('nestedInc'), ret1 + 1, 'should increment after dependent key changes'); // should run again\n };\n\n _class5.prototype['@test just notifying change of dependent should clear nested cache'] = function (assert) {\n // call get several times to collect call count\n var ret1 = object.get('nestedInc'); // should run func\n assert.equal(object.get('nestedInc'), ret1, 'multiple calls should not run cached prop');\n\n object.notifyPropertyChange('changer');\n\n assert.equal(object.get('nestedInc'), ret1 + 1, 'should increment after dependent key changes'); // should run again\n };\n\n _class5.prototype['@test change dependent should clear cache when observers of dependent are called'] = function (assert) {\n // call get several times to collect call count\n var ret1 = object.get('inc'); // should run func\n assert.equal(object.get('inc'), ret1, 'multiple calls should not run cached prop');\n\n // add observer to verify change...\n object.addObserver('inc', this, function () {\n assert.equal(object.get('inc'), ret1 + 1, 'should increment after dependent key changes'); // should run again\n });\n\n // now run\n object.set('changer', 'bar');\n };\n\n _class5.prototype['@test setting one of two computed properties that depend on a third property should clear the kvo cache'] = function (assert) {\n // we have to call set twice to fill up the cache\n object.set('isOff', true);\n object.set('isOn', true);\n\n // setting isOff to true should clear the kvo cache\n object.set('isOff', true);\n assert.equal(object.get('isOff'), true, 'object.isOff should be true');\n assert.equal(object.get('isOn'), false, 'object.isOn should be false');\n };\n\n _class5.prototype['@test dependent keys should be able to be specified as property paths'] = function (assert) {\n var depObj = ObservableObject.extend({\n menuPrice: (0, _emberMetal.computed)(function () {\n return this.get('menu.price');\n }).property('menu.price')\n }).create({\n menu: ObservableObject.create({\n price: 5\n })\n });\n\n assert.equal(depObj.get('menuPrice'), 5, 'precond - initial value returns 5');\n\n depObj.set('menu.price', 6);\n\n assert.equal(depObj.get('menuPrice'), 6, 'cache is properly invalidated after nested property changes');\n };\n\n _class5.prototype['@test cacheable nested dependent keys should clear after their dependencies update'] = function (assert) {\n assert.ok(true);\n\n var DepObj;\n\n (0, _runloop.run)(function () {\n lookup.DepObj = DepObj = ObservableObject.extend({\n price: (0, _emberMetal.computed)('restaurant.menu.price', function () {\n return this.get('restaurant.menu.price');\n })\n }).create({\n restaurant: ObservableObject.create({\n menu: ObservableObject.create({\n price: 5\n })\n })\n });\n });\n\n assert.equal(DepObj.get('price'), 5, 'precond - computed property is correct');\n\n (0, _runloop.run)(function () {\n DepObj.set('restaurant.menu.price', 10);\n });\n assert.equal(DepObj.get('price'), 10, 'cacheable computed properties are invalidated even if no run loop occurred');\n\n (0, _runloop.run)(function () {\n DepObj.set('restaurant.menu.price', 20);\n });\n assert.equal(DepObj.get('price'), 20, 'cacheable computed properties are invalidated after a second get before a run loop');\n assert.equal(DepObj.get('price'), 20, 'precond - computed properties remain correct after a run loop');\n\n (0, _runloop.run)(function () {\n DepObj.set('restaurant.menu', ObservableObject.create({\n price: 15\n }));\n });\n\n assert.equal(DepObj.get('price'), 15, 'cacheable computed properties are invalidated after a middle property changes');\n\n (0, _runloop.run)(function () {\n DepObj.set('restaurant.menu', ObservableObject.create({\n price: 25\n }));\n });\n\n assert.equal(DepObj.get('price'), 25, 'cacheable computed properties are invalidated after a middle property changes again, before a run loop');\n };\n\n return _class5;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // OBSERVABLE OBJECTS\n //\n\n (0, _internalTestHelpers.moduleFor)('Observable objects & object properties ', function (_AbstractTestCase6) {\n (0, _emberBabel.inherits)(_class6, _AbstractTestCase6);\n\n function _class6() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase6.apply(this, arguments));\n }\n\n _class6.prototype.beforeEach = function () {\n object = ObservableObject.extend({\n getEach: function () {\n var keys = ['normal', 'abnormal'],\n idx;\n var ret = [];\n for (idx = 0; idx < keys.length; idx++) {\n ret[ret.length] = this.get(keys[idx]);\n }\n return ret;\n },\n newObserver: function () {\n this.abnormal = 'changedValueObserved';\n },\n\n testObserver: (0, _emberMetal.observer)('normal', function () {\n this.abnormal = 'removedObserver';\n }),\n\n testArrayObserver: (0, _emberMetal.observer)('normalArray.[]', function () {\n this.abnormal = 'notifiedObserver';\n })\n }).create({\n normal: 'value',\n abnormal: 'zeroValue',\n numberVal: 24,\n toggleVal: true,\n observedProperty: 'beingWatched',\n testRemove: 'observerToBeRemoved',\n normalArray: (0, _array.A)([1, 2, 3, 4, 5])\n });\n };\n\n _class6.prototype['@test incrementProperty and decrementProperty'] = function (assert) {\n var newValue = object.incrementProperty('numberVal');\n\n assert.equal(25, newValue, 'numerical value incremented');\n object.numberVal = 24;\n newValue = object.decrementProperty('numberVal');\n assert.equal(23, newValue, 'numerical value decremented');\n object.numberVal = 25;\n newValue = object.incrementProperty('numberVal', 5);\n assert.equal(30, newValue, 'numerical value incremented by specified increment');\n object.numberVal = 25;\n newValue = object.incrementProperty('numberVal', -5);\n assert.equal(20, newValue, 'minus numerical value incremented by specified increment');\n object.numberVal = 25;\n newValue = object.incrementProperty('numberVal', 0);\n assert.equal(25, newValue, 'zero numerical value incremented by specified increment');\n\n expectAssertion(function () {\n newValue = object.incrementProperty('numberVal', 0 - void 0); // Increment by NaN\n }, /Must pass a numeric value to incrementProperty/i);\n\n expectAssertion(function () {\n newValue = object.incrementProperty('numberVal', 'Ember'); // Increment by non-numeric String\n }, /Must pass a numeric value to incrementProperty/i);\n\n expectAssertion(function () {\n newValue = object.incrementProperty('numberVal', 1 / 0); // Increment by Infinity\n }, /Must pass a numeric value to incrementProperty/i);\n\n assert.equal(25, newValue, 'Attempting to increment by non-numeric values should not increment value');\n\n object.numberVal = 25;\n newValue = object.decrementProperty('numberVal', 5);\n assert.equal(20, newValue, 'numerical value decremented by specified increment');\n object.numberVal = 25;\n newValue = object.decrementProperty('numberVal', -5);\n assert.equal(30, newValue, 'minus numerical value decremented by specified increment');\n object.numberVal = 25;\n newValue = object.decrementProperty('numberVal', 0);\n assert.equal(25, newValue, 'zero numerical value decremented by specified increment');\n\n expectAssertion(function () {\n newValue = object.decrementProperty('numberVal', 0 - void 0); // Decrement by NaN\n }, /Must pass a numeric value to decrementProperty/i);\n\n expectAssertion(function () {\n newValue = object.decrementProperty('numberVal', 'Ember'); // Decrement by non-numeric String\n }, /Must pass a numeric value to decrementProperty/i);\n\n expectAssertion(function () {\n newValue = object.decrementProperty('numberVal', 1 / 0); // Decrement by Infinity\n }, /Must pass a numeric value to decrementProperty/i);\n\n assert.equal(25, newValue, 'Attempting to decrement by non-numeric values should not decrement value');\n };\n\n _class6.prototype['@test toggle function, should be boolean'] = function (assert) {\n assert.equal(object.toggleProperty('toggleVal', true, false), object.get('toggleVal'));\n assert.equal(object.toggleProperty('toggleVal', true, false), object.get('toggleVal'));\n assert.equal(object.toggleProperty('toggleVal', undefined, undefined), object.get('toggleVal'));\n };\n\n _class6.prototype['@test should notify array observer when array changes'] = function (assert) {\n (0, _emberMetal.get)(object, 'normalArray').replace(0, 0, [6]);\n assert.equal(object.abnormal, 'notifiedObserver', 'observer should be notified');\n };\n\n return _class6;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('object.addObserver()', function (_AbstractTestCase7) {\n (0, _emberBabel.inherits)(_class7, _AbstractTestCase7);\n\n function _class7() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase7.apply(this, arguments));\n }\n\n _class7.prototype.beforeEach = function () {\n ObjectC = ObservableObject.create({\n objectE: ObservableObject.create({\n propertyVal: 'chainedProperty'\n }),\n\n normal: 'value',\n normal1: 'zeroValue',\n normal2: 'dependentValue',\n incrementor: 10,\n\n action: function () {\n this.normal1 = 'newZeroValue';\n },\n observeOnceAction: function () {\n this.incrementor = this.incrementor + 1;\n },\n chainedObserver: function () {\n this.normal2 = 'chainedPropertyObserved';\n }\n });\n };\n\n _class7.prototype['@test should register an observer for a property'] = function (assert) {\n ObjectC.addObserver('normal', ObjectC, 'action');\n ObjectC.set('normal', 'newValue');\n assert.equal(ObjectC.normal1, 'newZeroValue');\n };\n\n _class7.prototype['@test should register an observer for a property - Special case of chained property'] = function (assert) {\n ObjectC.addObserver('objectE.propertyVal', ObjectC, 'chainedObserver');\n ObjectC.objectE.set('propertyVal', 'chainedPropertyValue');\n assert.equal('chainedPropertyObserved', ObjectC.normal2);\n ObjectC.normal2 = 'dependentValue';\n ObjectC.set('objectE', '');\n assert.equal('chainedPropertyObserved', ObjectC.normal2);\n };\n\n return _class7;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('object.removeObserver()', function (_AbstractTestCase8) {\n (0, _emberBabel.inherits)(_class8, _AbstractTestCase8);\n\n function _class8() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase8.apply(this, arguments));\n }\n\n _class8.prototype.beforeEach = function () {\n ObjectD = ObservableObject.create({\n objectF: ObservableObject.create({\n propertyVal: 'chainedProperty'\n }),\n\n normal: 'value',\n normal1: 'zeroValue',\n normal2: 'dependentValue',\n ArrayKeys: ['normal', 'normal1'],\n\n addAction: function () {\n this.normal1 = 'newZeroValue';\n },\n removeAction: function () {\n this.normal2 = 'newDependentValue';\n },\n removeChainedObserver: function () {\n this.normal2 = 'chainedPropertyObserved';\n },\n\n observableValue: 'hello world',\n\n observer1: function () {\n // Just an observer\n },\n observer2: function () {\n this.removeObserver('observableValue', null, 'observer1');\n this.removeObserver('observableValue', null, 'observer2');\n this.hasObserverFor('observableValue'); // Tickle 'getMembers()'\n this.removeObserver('observableValue', null, 'observer3');\n },\n observer3: function () {\n // Just an observer\n }\n });\n };\n\n _class8.prototype['@test should unregister an observer for a property'] = function (assert) {\n ObjectD.addObserver('normal', ObjectD, 'addAction');\n ObjectD.set('normal', 'newValue');\n assert.equal(ObjectD.normal1, 'newZeroValue');\n\n ObjectD.set('normal1', 'zeroValue');\n\n ObjectD.removeObserver('normal', ObjectD, 'addAction');\n ObjectD.set('normal', 'newValue');\n assert.equal(ObjectD.normal1, 'zeroValue');\n };\n\n _class8.prototype[\"@test should unregister an observer for a property - special case when key has a '.' in it.\"] = function (assert) {\n ObjectD.addObserver('objectF.propertyVal', ObjectD, 'removeChainedObserver');\n ObjectD.objectF.set('propertyVal', 'chainedPropertyValue');\n ObjectD.removeObserver('objectF.propertyVal', ObjectD, 'removeChainedObserver');\n ObjectD.normal2 = 'dependentValue';\n ObjectD.objectF.set('propertyVal', 'removedPropertyValue');\n assert.equal('dependentValue', ObjectD.normal2);\n ObjectD.set('objectF', '');\n assert.equal('dependentValue', ObjectD.normal2);\n };\n\n _class8.prototype['@test removing an observer inside of an observer shouldn’t cause any problems'] = function (assert) {\n // The observable system should be protected against clients removing\n // observers in the middle of observer notification.\n var encounteredError = false;\n try {\n ObjectD.addObserver('observableValue', null, 'observer1');\n ObjectD.addObserver('observableValue', null, 'observer2');\n ObjectD.addObserver('observableValue', null, 'observer3');\n (0, _runloop.run)(function () {\n ObjectD.set('observableValue', 'hi world');\n });\n } catch (e) {\n encounteredError = true;\n }\n assert.equal(encounteredError, false);\n };\n\n return _class8;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/legacy_1x/mixins/observable/propertyChanges_test', ['ember-babel', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/observable', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _object, _observable, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n /*\n NOTE: This test is adapted from the 1.x series of unit tests. The tests\n are the same except for places where we intend to break the API we instead\n validate that we warn the developer appropriately.\n \n CHANGES FROM 1.6:\n \n * Create ObservableObject which includes Ember.Observable\n * Remove test that tests internal _kvo_changeLevel property. This is an\n implementation detail.\n * Remove test for allPropertiesDidChange\n * Removed star observer test. no longer supported\n * Removed property revision test. no longer supported\n */\n\n // ========================================================================\n // Ember.Observable Tests\n // ========================================================================\n\n var ObservableObject = _object.default.extend(_observable.default);\n\n var ObjectA = void 0;\n\n (0, _internalTestHelpers.moduleFor)('object.propertyChanges', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n ObjectA = ObservableObject.extend({\n action: (0, _emberMetal.observer)('foo', function () {\n this.set('prop', 'changedPropValue');\n }),\n notifyAction: (0, _emberMetal.observer)('newFoo', function () {\n this.set('newProp', 'changedNewPropValue');\n }),\n\n notifyAllAction: (0, _emberMetal.observer)('prop', function () {\n this.set('newFoo', 'changedNewFooValue');\n }),\n\n starObserver: function (target, key) {\n this.starProp = key;\n }\n }).create({\n starProp: null,\n\n foo: 'fooValue',\n prop: 'propValue',\n\n newFoo: 'newFooValue',\n newProp: 'newPropValue'\n });\n };\n\n _class.prototype['@test should observe the changes within the nested begin / end property changes'] = function (assert) {\n //start the outer nest\n ObjectA.beginPropertyChanges();\n\n // Inner nest\n ObjectA.beginPropertyChanges();\n ObjectA.set('foo', 'changeFooValue');\n\n assert.equal(ObjectA.prop, 'propValue');\n ObjectA.endPropertyChanges();\n\n //end inner nest\n ObjectA.set('prop', 'changePropValue');\n assert.equal(ObjectA.newFoo, 'newFooValue');\n\n //close the outer nest\n ObjectA.endPropertyChanges();\n\n assert.equal(ObjectA.prop, 'changedPropValue');\n assert.equal(ObjectA.newFoo, 'changedNewFooValue');\n };\n\n _class.prototype['@test should observe the changes within the begin and end property changes'] = function (assert) {\n ObjectA.beginPropertyChanges();\n ObjectA.set('foo', 'changeFooValue');\n\n assert.equal(ObjectA.prop, 'propValue');\n ObjectA.endPropertyChanges();\n\n assert.equal(ObjectA.prop, 'changedPropValue');\n };\n\n _class.prototype['@test should indicate that the property of an object has just changed'] = function (assert) {\n //change the value of foo.\n ObjectA.set('foo', 'changeFooValue');\n\n // Indicate the subscribers of foo that the value has just changed\n ObjectA.notifyPropertyChange('foo', null);\n\n // Values of prop has just changed\n assert.equal(ObjectA.prop, 'changedPropValue');\n };\n\n _class.prototype['@test should notify that the property of an object has changed'] = function (assert) {\n // Notify to its subscriber that the values of 'newFoo' will be changed. In this\n // case the observer is \"newProp\". Therefore this will call the notifyAction function\n // and value of \"newProp\" will be changed.\n ObjectA.notifyPropertyChange('newFoo', 'fooValue');\n\n //value of newProp changed.\n assert.equal(ObjectA.newProp, 'changedNewPropValue');\n };\n\n _class.prototype['@test should invalidate function property cache when notifyPropertyChange is called'] = function (assert) {\n var a = ObservableObject.extend({\n b: (0, _emberMetal.computed)({\n get: function () {\n return this._b;\n },\n set: function (key, value) {\n this._b = value;\n return this;\n }\n }).volatile()\n }).create({\n _b: null\n });\n\n a.set('b', 'foo');\n assert.equal(a.get('b'), 'foo', 'should have set the correct value for property b');\n\n a._b = 'bar';\n a.notifyPropertyChange('b');\n a.set('b', 'foo');\n assert.equal(a.get('b'), 'foo', 'should have invalidated the cache so that the newly set value is actually set');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/legacy_1x/system/object/base_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n /*\n NOTE: This test is adapted from the 1.x series of unit tests. The tests\n are the same except for places where we intend to break the API we instead\n validate that we warn the developer appropriately.\n \n CHANGES FROM 1.6:\n \n * Changed get(obj, ) and set(obj, ) to Ember.get() and Ember.set()\n * Removed obj.instanceOf() and obj.kindOf() tests. use obj instanceof Foo\n instead\n * Removed respondsTo() and tryToPerform() tests. Can be brought back in a\n utils package.\n * Removed destroy() test. You can impl yourself but not built in\n * Changed Class.subclassOf() test to Class.detect()\n * Remove broken test for 'superclass' property.\n * Removed obj.didChangeFor()\n */\n\n // ========================================================================\n // EmberObject Base Tests\n // ========================================================================\n\n var obj = void 0,\n obj1 = void 0; // global variables\n\n (0, _internalTestHelpers.moduleFor)('A new EmberObject instance', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n obj = _object.default.create({\n foo: 'bar',\n total: 12345,\n aMethodThatExists: function () {},\n aMethodThatReturnsTrue: function () {\n return true;\n },\n aMethodThatReturnsFoobar: function () {\n return 'Foobar';\n },\n aMethodThatReturnsFalse: function () {\n return false;\n }\n });\n };\n\n _class.prototype.afterEach = function () {\n obj = undefined;\n };\n\n _class.prototype['@test Should return its properties when requested using EmberObject#get'] = function (assert) {\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar');\n assert.equal((0, _emberMetal.get)(obj, 'total'), 12345);\n };\n\n _class.prototype['@test Should allow changing of those properties by calling EmberObject#set'] = function (assert) {\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'bar');\n assert.equal((0, _emberMetal.get)(obj, 'total'), 12345);\n\n (0, _emberMetal.set)(obj, 'foo', 'Chunky Bacon');\n (0, _emberMetal.set)(obj, 'total', 12);\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'Chunky Bacon');\n assert.equal((0, _emberMetal.get)(obj, 'total'), 12);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('EmberObject superclass and subclasses', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function () {\n obj = _object.default.extend({\n method1: function () {\n return 'hello';\n }\n });\n obj1 = obj.extend();\n };\n\n _class2.prototype.afterEach = function () {\n obj = undefined;\n obj1 = undefined;\n };\n\n _class2.prototype['@test Checking the detect() function on an object and its subclass'] = function (assert) {\n assert.equal(obj.detect(obj1), true);\n assert.equal(obj1.detect(obj), false);\n };\n\n _class2.prototype['@test Checking the detectInstance() function on an object and its subclass'] = function (assert) {\n assert.ok(_object.default.detectInstance(obj.create()));\n assert.ok(obj.detectInstance(obj.create()));\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/legacy_1x/system/object/concatenated_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n /*\n NOTE: This test is adapted from the 1.x series of unit tests. The tests\n are the same except for places where we intend to break the API we instead\n validate that we warn the developer appropriately.\n \n CHANGES FROM 1.6:\n \n * changed get(obj, ) and set(obj, ) to Ember.get() and Ember.set()\n * converted uses of obj.isEqual() to use deepEqual() test since isEqual is not\n always defined\n */\n\n function K() {\n return this;\n }\n\n var klass = void 0;\n\n (0, _internalTestHelpers.moduleFor)('EmberObject Concatenated Properties', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n klass = _object.default.extend({\n concatenatedProperties: ['values', 'functions'],\n values: ['a', 'b', 'c'],\n functions: [K]\n });\n };\n\n _class.prototype['@test concatenates instances'] = function (assert) {\n var obj = klass.create({\n values: ['d', 'e', 'f']\n });\n\n var values = (0, _emberMetal.get)(obj, 'values');\n var expected = ['a', 'b', 'c', 'd', 'e', 'f'];\n\n assert.deepEqual(values, expected, 'should concatenate values property (expected: ' + expected + ', got: ' + values + ')');\n };\n\n _class.prototype['@test concatenates subclasses'] = function (assert) {\n var subKlass = klass.extend({\n values: ['d', 'e', 'f']\n });\n var obj = subKlass.create();\n\n var values = (0, _emberMetal.get)(obj, 'values');\n var expected = ['a', 'b', 'c', 'd', 'e', 'f'];\n\n assert.deepEqual(values, expected, 'should concatenate values property (expected: ' + expected + ', got: ' + values + ')');\n };\n\n _class.prototype['@test concatenates reopen'] = function (assert) {\n klass.reopen({\n values: ['d', 'e', 'f']\n });\n var obj = klass.create();\n\n var values = (0, _emberMetal.get)(obj, 'values');\n var expected = ['a', 'b', 'c', 'd', 'e', 'f'];\n\n assert.deepEqual(values, expected, 'should concatenate values property (expected: ' + expected + ', got: ' + values + ')');\n };\n\n _class.prototype['@test concatenates mixin'] = function (assert) {\n var subKlass = klass.extend({\n values: ['d', 'e']\n }, {\n values: ['f']\n });\n var obj = subKlass.create();\n\n var values = (0, _emberMetal.get)(obj, 'values');\n var expected = ['a', 'b', 'c', 'd', 'e', 'f'];\n\n assert.deepEqual(values, expected, 'should concatenate values property (expected: ' + expected + ', got: ' + values + ')');\n };\n\n _class.prototype['@test concatenates reopen, subclass, and instance'] = function (assert) {\n klass.reopen({ values: ['d'] });\n var subKlass = klass.extend({ values: ['e'] });\n var obj = subKlass.create({ values: ['f'] });\n\n var values = (0, _emberMetal.get)(obj, 'values');\n var expected = ['a', 'b', 'c', 'd', 'e', 'f'];\n\n assert.deepEqual(values, expected, 'should concatenate values property (expected: ' + expected + ', got: ' + values + ')');\n };\n\n _class.prototype['@test concatenates subclasses when the values are functions'] = function (assert) {\n var subKlass = klass.extend({\n functions: K\n });\n var obj = subKlass.create();\n\n var values = (0, _emberMetal.get)(obj, 'functions');\n var expected = [K, K];\n\n assert.deepEqual(values, expected, 'should concatenate functions property (expected: ' + expected + ', got: ' + values + ')');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/array_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _array, _internalTestHelpers) {\n 'use strict';\n\n /*\n Implement a basic fake mutable array. This validates that any non-native\n enumerable can impl this API.\n */\n\n var TestArray = _object.default.extend(_array.default, {\n _content: null,\n\n init: function () {\n this._content = this._content || [];\n },\n addObject: function (obj) {\n var idx = this._content.length;\n (0, _emberMetal.arrayContentWillChange)(this, idx, 0, 1);\n this._content.push(obj);\n (0, _emberMetal.arrayContentDidChange)(this, idx, 0, 1);\n },\n removeFirst: function () {\n (0, _emberMetal.arrayContentWillChange)(this, 0, 1, 0);\n this._content.shift();\n (0, _emberMetal.arrayContentDidChange)(this, 0, 1, 0);\n },\n objectAt: function (idx) {\n return this._content[idx];\n },\n\n length: (0, _emberMetal.computed)(function () {\n return this._content.length;\n })\n });\n\n (0, _internalTestHelpers.moduleFor)('Ember.Array', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test the return value of slice has Ember.Array applied'] = function (assert) {\n var x = _object.default.extend(_array.default).create({\n length: 0\n });\n var y = x.slice(1);\n assert.equal(_array.default.detect(y), true, 'mixin should be applied');\n };\n\n _class.prototype['@test slice supports negative index arguments'] = function (assert) {\n var testArray = new TestArray({ _content: [1, 2, 3, 4] });\n\n assert.deepEqual(testArray.slice(-2), [3, 4], 'slice(-2)');\n assert.deepEqual(testArray.slice(-2, -1), [3], 'slice(-2, -1');\n assert.deepEqual(testArray.slice(-2, -2), [], 'slice(-2, -2)');\n assert.deepEqual(testArray.slice(-1, -2), [], 'slice(-1, -2)');\n\n assert.deepEqual(testArray.slice(-4, 1), [1], 'slice(-4, 1)');\n assert.deepEqual(testArray.slice(-4, 5), [1, 2, 3, 4], 'slice(-4, 5)');\n assert.deepEqual(testArray.slice(-4), [1, 2, 3, 4], 'slice(-4)');\n\n assert.deepEqual(testArray.slice(0, -1), [1, 2, 3], 'slice(0, -1)');\n assert.deepEqual(testArray.slice(0, -4), [], 'slice(0, -4)');\n assert.deepEqual(testArray.slice(0, -3), [1], 'slice(0, -3)');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // CONTENT DID CHANGE\n //\n\n var DummyArray = _object.default.extend(_array.default, {\n length: 0,\n objectAt: function (idx) {\n return 'ITEM-' + idx;\n }\n });\n\n var obj = void 0,\n observer = void 0;\n\n // ..........................................................\n // NOTIFY ARRAY OBSERVERS\n //\n\n (0, _internalTestHelpers.moduleFor)('mixins/array/arrayContent[Will|Did]Change', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test should notify observers of []'] = function (assert) {\n obj = DummyArray.extend({\n enumerablePropertyDidChange: (0, _emberMetal.observer)('[]', function () {\n this._count++;\n })\n }).create({\n _count: 0\n });\n\n assert.equal(obj._count, 0, 'should not have invoked yet');\n\n (0, _emberMetal.arrayContentWillChange)(obj, 0, 1, 1);\n (0, _emberMetal.arrayContentDidChange)(obj, 0, 1, 1);\n\n assert.equal(obj._count, 1, 'should have invoked');\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // NOTIFY CHANGES TO LENGTH\n //\n\n (0, _internalTestHelpers.moduleFor)('notify observers of length', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype.beforeEach = function (assert) {\n obj = DummyArray.extend({\n lengthDidChange: (0, _emberMetal.observer)('length', function () {\n this._after++;\n })\n }).create({\n _after: 0\n });\n\n assert.equal(obj._after, 0, 'should not have fired yet');\n };\n\n _class3.prototype.afterEach = function () {\n obj = null;\n };\n\n _class3.prototype['@test should notify observers when call with no params'] = function (assert) {\n (0, _emberMetal.arrayContentWillChange)(obj);\n assert.equal(obj._after, 0);\n\n (0, _emberMetal.arrayContentDidChange)(obj);\n assert.equal(obj._after, 1);\n };\n\n _class3.prototype['@test should not notify when passed lengths are same'] = function (assert) {\n (0, _emberMetal.arrayContentWillChange)(obj, 0, 1, 1);\n assert.equal(obj._after, 0);\n\n (0, _emberMetal.arrayContentDidChange)(obj, 0, 1, 1);\n assert.equal(obj._after, 0);\n };\n\n _class3.prototype['@test should notify when passed lengths are different'] = function (assert) {\n (0, _emberMetal.arrayContentWillChange)(obj, 0, 1, 2);\n assert.equal(obj._after, 0);\n\n (0, _emberMetal.arrayContentDidChange)(obj, 0, 1, 2);\n assert.equal(obj._after, 1);\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // NOTIFY ARRAY OBSERVER\n //\n\n (0, _internalTestHelpers.moduleFor)('notify array observers', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype.beforeEach = function (assert) {\n obj = DummyArray.create();\n\n observer = _object.default.extend({\n arrayWillChange: function () {\n assert.equal(this._before, null); // should only call once\n this._before = Array.prototype.slice.call(arguments);\n },\n arrayDidChange: function () {\n assert.equal(this._after, null); // should only call once\n this._after = Array.prototype.slice.call(arguments);\n }\n }).create({\n _before: null,\n _after: null\n });\n\n (0, _emberMetal.addArrayObserver)(obj, observer);\n };\n\n _class4.prototype.afterEach = function () {\n obj = observer = null;\n };\n\n _class4.prototype['@test should notify array observers when called with no params'] = function (assert) {\n (0, _emberMetal.arrayContentWillChange)(obj);\n assert.deepEqual(observer._before, [obj, 0, -1, -1]);\n\n (0, _emberMetal.arrayContentDidChange)(obj);\n assert.deepEqual(observer._after, [obj, 0, -1, -1]);\n };\n\n _class4.prototype['@test should notify when called with same length items'] = function (assert) {\n (0, _emberMetal.arrayContentWillChange)(obj, 0, 1, 1);\n assert.deepEqual(observer._before, [obj, 0, 1, 1]);\n\n (0, _emberMetal.arrayContentDidChange)(obj, 0, 1, 1);\n assert.deepEqual(observer._after, [obj, 0, 1, 1]);\n };\n\n _class4.prototype['@test should notify when called with diff length items'] = function (assert) {\n (0, _emberMetal.arrayContentWillChange)(obj, 0, 2, 1);\n assert.deepEqual(observer._before, [obj, 0, 2, 1]);\n\n (0, _emberMetal.arrayContentDidChange)(obj, 0, 2, 1);\n assert.deepEqual(observer._after, [obj, 0, 2, 1]);\n };\n\n _class4.prototype['@test removing array observer should disable'] = function (assert) {\n (0, _emberMetal.removeArrayObserver)(obj, observer);\n (0, _emberMetal.arrayContentWillChange)(obj);\n assert.deepEqual(observer._before, null);\n\n (0, _emberMetal.arrayContentDidChange)(obj);\n assert.deepEqual(observer._after, null);\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n\n // ..........................................................\n // @each\n //\n\n var ary = void 0;\n\n (0, _internalTestHelpers.moduleFor)('EmberArray.@each support', function (_AbstractTestCase5) {\n (0, _emberBabel.inherits)(_class5, _AbstractTestCase5);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase5.apply(this, arguments));\n }\n\n _class5.prototype.beforeEach = function () {\n ary = new TestArray({\n _content: [{ isDone: true, desc: 'Todo 1' }, { isDone: false, desc: 'Todo 2' }, { isDone: true, desc: 'Todo 3' }, { isDone: false, desc: 'Todo 4' }]\n });\n };\n\n _class5.prototype.afterEach = function () {\n ary = null;\n };\n\n _class5.prototype['@test adding an object should notify (@each.isDone)'] = function (assert) {\n var called = 0;\n\n var observerObject = _object.default.create({\n wasCalled: function () {\n called++;\n }\n });\n\n (0, _emberMetal.addObserver)(ary, '@each.isDone', observerObject, 'wasCalled');\n\n ary.addObject(_object.default.create({\n desc: 'foo',\n isDone: false\n }));\n\n assert.equal(called, 1, 'calls observer when object is pushed');\n };\n\n _class5.prototype['@test getting @each is deprecated'] = function (assert) {\n assert.expect(1);\n\n expectDeprecation(function () {\n (0, _emberMetal.get)(ary, '@each');\n }, /Getting the '@each' property on object .* is deprecated/);\n };\n\n _class5.prototype['@test @each is readOnly'] = function (assert) {\n assert.expect(1);\n\n assert.throws(function () {\n (0, _emberMetal.set)(ary, '@each', 'foo');\n }, /Cannot set read-only property \"@each\"/);\n };\n\n _class5.prototype['@test using @each to observe arrays that does not return objects raise error'] = function (assert) {\n var called = 0;\n\n var observerObject = _object.default.create({\n wasCalled: function () {\n called++;\n }\n });\n\n ary = TestArray.create({\n objectAt: function (idx) {\n return (0, _emberMetal.get)(this._content[idx], 'desc');\n }\n });\n\n (0, _emberMetal.addObserver)(ary, '@each.isDone', observerObject, 'wasCalled');\n\n expectAssertion(function () {\n ary.addObject(_object.default.create({\n desc: 'foo',\n isDone: false\n }));\n }, /When using @each to observe the array/);\n\n assert.equal(called, 0, 'not calls observer when object is pushed');\n };\n\n _class5.prototype['@test modifying the array should also indicate the isDone prop itself has changed'] = function (assert) {\n // NOTE: we never actually get the '@each.isDone' property here. This is\n // important because it tests the case where we don't have an isDone\n // EachArray materialized but just want to know when the property has\n // changed.\n var each = void 0;\n expectDeprecation(function () {\n each = (0, _emberMetal.get)(ary, '@each');\n });\n var count = 0;\n\n (0, _emberMetal.addObserver)(each, 'isDone', function () {\n return count++;\n });\n\n count = 0;\n var item = (0, _emberMetal.objectAt)(ary, 2);\n (0, _emberMetal.set)(item, 'isDone', !(0, _emberMetal.get)(item, 'isDone'));\n assert.equal(count, 1, '@each.isDone should have notified');\n };\n\n _class5.prototype['@test `objectAt` returns correct object'] = function (assert) {\n var arr = ['first', 'second', 'third', 'fourth'];\n assert.equal((0, _emberMetal.objectAt)(arr, 2), 'third');\n assert.equal((0, _emberMetal.objectAt)(arr, 4), undefined);\n };\n\n _class5.prototype['@test should be clear caches for computed properties that have dependent keys on arrays that are changed after object initialization'] = function (assert) {\n var obj = _object.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'resources', (0, _array.A)());\n },\n\n common: (0, _emberMetal.computed)('resources.@each.common', function () {\n return (0, _emberMetal.get)((0, _emberMetal.objectAt)((0, _emberMetal.get)(this, 'resources'), 0), 'common');\n })\n }).create();\n\n (0, _emberMetal.get)(obj, 'resources').pushObject(_object.default.create({ common: 'HI!' }));\n assert.equal('HI!', (0, _emberMetal.get)(obj, 'common'));\n\n (0, _emberMetal.set)((0, _emberMetal.objectAt)((0, _emberMetal.get)(obj, 'resources'), 0), 'common', 'BYE!');\n assert.equal('BYE!', (0, _emberMetal.get)(obj, 'common'));\n };\n\n _class5.prototype['@test observers that contain @each in the path should fire only once the first time they are accessed'] = function (assert) {\n var count = 0;\n\n var obj = _object.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n // Observer does not fire on init\n (0, _emberMetal.set)(this, 'resources', (0, _array.A)());\n },\n\n commonDidChange: (0, _emberMetal.observer)('resources.@each.common', function () {\n return count++;\n })\n }).create();\n\n // Observer fires second time when new object is added\n (0, _emberMetal.get)(obj, 'resources').pushObject(_object.default.create({ common: 'HI!' }));\n // Observer fires third time when property on an object is changed\n (0, _emberMetal.set)((0, _emberMetal.objectAt)((0, _emberMetal.get)(obj, 'resources'), 0), 'common', 'BYE!');\n\n assert.equal(count, 2, 'observers should only be called once');\n };\n\n return _class5;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/comparable_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'ember-runtime/lib/compare', 'ember-runtime/lib/mixins/comparable', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _compare, _comparable, _internalTestHelpers) {\n 'use strict';\n\n var Rectangle = _object.default.extend(_comparable.default, {\n length: 0,\n width: 0,\n\n area: function () {\n return (0, _emberMetal.get)(this, 'length') * (0, _emberMetal.get)(this, 'width');\n },\n compare: function (a, b) {\n return (0, _compare.default)(a.area(), b.area());\n }\n });\n\n var r1 = void 0,\n r2 = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Comparable', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n r1 = Rectangle.create({ length: 6, width: 12 });\n r2 = Rectangle.create({ length: 6, width: 13 });\n };\n\n _class.prototype['@test should be comparable and return the correct result'] = function (assert) {\n assert.equal(_comparable.default.detect(r1), true);\n assert.equal((0, _compare.default)(r1, r1), 0);\n assert.equal((0, _compare.default)(r1, r2), -1);\n assert.equal((0, _compare.default)(r2, r1), 1);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/container_proxy_test', ['ember-babel', 'ember-owner', 'container', 'ember-runtime/lib/mixins/container_proxy', 'ember-runtime/lib/system/object', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _container, _container_proxy, _object, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-runtime/mixins/container_proxy', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n this.Owner = _object.default.extend(_container_proxy.default);\n this.instance = this.Owner.create();\n\n this.registry = new _container.Registry();\n\n this.instance.__container__ = new _container.Container(this.registry, {\n owner: this.instance\n });\n };\n\n _class.prototype['@test provides ownerInjection helper method'] = function (assert) {\n var result = this.instance.ownerInjection();\n\n assert.equal(result[_emberOwner.OWNER], this.instance, 'returns an object with the OWNER symbol');\n };\n\n _class.prototype['@test actions queue completes before destruction'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n this.registry.register('service:auth', _object.default.extend({\n willDestroy: function () {\n assert.ok((0, _emberOwner.getOwner)(this).lookup('service:auth'), 'can still lookup');\n }\n }));\n\n var service = this.instance.lookup('service:auth');\n\n (0, _runloop.run)(function () {\n (0, _runloop.schedule)('actions', service, 'destroy');\n _this2.instance.destroy();\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/enumerable_test', ['ember-babel', 'ember-runtime/lib/mixins/enumerable', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _enumerable, _array_proxy, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Enumerable', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should be mixed into A()'] = function (assert) {\n assert.ok(_enumerable.default.detect((0, _array.A)()));\n };\n\n _class.prototype['@test should be mixed into ArrayProxy'] = function (assert) {\n assert.ok(_enumerable.default.detect(_array_proxy.default.create()));\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/evented_test', ['ember-babel', 'ember-runtime/lib/mixins/evented', 'ember-runtime/lib/system/core_object', 'internal-test-helpers'], function (_emberBabel, _evented, _core_object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.Evented', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test works properly on proxy-ish objects'] = function (assert) {\n var eventedProxyObj = _core_object.default.extend(_evented.default, {\n unknownProperty: function () {\n return true;\n }\n }).create();\n\n var noop = function () {};\n\n eventedProxyObj.on('foo', noop);\n eventedProxyObj.off('foo', noop);\n\n assert.ok(true, 'An assertion was triggered');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/mutable_enumerable_test', ['ember-babel', 'ember-runtime/lib/mixins/mutable_enumerable', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _mutable_enumerable, _array_proxy, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('MutableEnumerable', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should be mixed into A()'] = function (assert) {\n assert.ok(_mutable_enumerable.default.detect((0, _array.A)()));\n };\n\n _class.prototype['@test should be mixed into ArrayProxy'] = function (assert) {\n assert.ok(_mutable_enumerable.default.detect(_array_proxy.default.create()));\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/observable_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('mixins/observable', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should be able to use getProperties to get a POJO of provided keys'] = function (assert) {\n var obj = _object.default.create({\n firstName: 'Steve',\n lastName: 'Jobs',\n companyName: 'Apple, Inc.'\n });\n\n var pojo = obj.getProperties('firstName', 'lastName');\n assert.equal('Steve', pojo.firstName);\n assert.equal('Jobs', pojo.lastName);\n };\n\n _class.prototype['@test should be able to use getProperties with array parameter to get a POJO of provided keys'] = function (assert) {\n var obj = _object.default.create({\n firstName: 'Steve',\n lastName: 'Jobs',\n companyName: 'Apple, Inc.'\n });\n\n var pojo = obj.getProperties(['firstName', 'lastName']);\n assert.equal('Steve', pojo.firstName);\n assert.equal('Jobs', pojo.lastName);\n };\n\n _class.prototype['@test should be able to use setProperties to set multiple properties at once'] = function (assert) {\n var obj = _object.default.create({\n firstName: 'Steve',\n lastName: 'Jobs',\n companyName: 'Apple, Inc.'\n });\n\n obj.setProperties({ firstName: 'Tim', lastName: 'Cook' });\n assert.equal('Tim', obj.get('firstName'));\n assert.equal('Cook', obj.get('lastName'));\n };\n\n _class.prototype['@test calling setProperties completes safely despite exceptions'] = function (assert) {\n var exc = new Error('Something unexpected happened!');\n var obj = _object.default.extend({\n companyName: (0, _emberMetal.computed)({\n get: function () {\n return 'Apple, Inc.';\n },\n set: function () {\n throw exc;\n }\n })\n }).create({\n firstName: 'Steve',\n lastName: 'Jobs'\n });\n\n var firstNameChangedCount = 0;\n\n (0, _emberMetal.addObserver)(obj, 'firstName', function () {\n return firstNameChangedCount++;\n });\n\n try {\n obj.setProperties({\n firstName: 'Tim',\n lastName: 'Cook',\n companyName: 'Fruit Co., Inc.'\n });\n } catch (err) {\n if (err !== exc) {\n throw err;\n }\n }\n\n assert.equal(firstNameChangedCount, 1, 'firstName should have fired once');\n };\n\n _class.prototype['@test should be able to retrieve cached values of computed properties without invoking the computed property'] = function (assert) {\n var obj = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'foo';\n })\n }).create({\n bar: 'bar'\n });\n\n assert.equal(obj.cacheFor('foo'), undefined, 'should return undefined if no value has been cached');\n (0, _emberMetal.get)(obj, 'foo');\n\n assert.equal((0, _emberMetal.get)(obj, 'foo'), 'foo', 'precond - should cache the value');\n assert.equal(obj.cacheFor('foo'), 'foo', 'should return the cached value after it is invoked');\n\n assert.equal(obj.cacheFor('bar'), undefined, 'returns undefined if the value is not a computed property');\n };\n\n _class.prototype['@test incrementProperty should work even if value is number in string'] = function (assert) {\n var obj = _object.default.create({\n age: '24'\n });\n obj.incrementProperty('age');\n assert.equal(25, obj.get('age'));\n };\n\n _class.prototype['@test propertyWillChange triggers a deprecation warning'] = function () {\n var obj = _object.default.create();\n\n expectDeprecation(function () {\n obj.propertyWillChange('foo');\n }, /'propertyWillChange' is deprecated and has no effect. It is safe to remove this call./);\n };\n\n _class.prototype['@test propertyDidChange triggers a deprecation warning'] = function () {\n var obj = _object.default.create();\n\n expectDeprecation(function () {\n obj.propertyDidChange('foo');\n }, /'propertyDidChange' is deprecated in favor of 'notifyPropertyChange'. It is safe to change this call to 'notifyPropertyChange'./);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/promise_proxy_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-runtime/lib/system/object_proxy', 'ember-runtime/lib/mixins/promise_proxy', 'ember-runtime/lib/ext/rsvp', 'rsvp', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _object_proxy, _promise_proxy, _rsvp, _rsvp2, _internalTestHelpers) {\n 'use strict';\n\n var ObjectPromiseProxy = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Ember.PromiseProxy - ObjectProxy', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n ObjectPromiseProxy = _object_proxy.default.extend(_promise_proxy.default);\n };\n\n _class.prototype.afterEach = function () {\n _rsvp2.on('error', _rsvp.onerrorDefault);\n };\n\n _class.prototype['@test present on ember namespace'] = function (assert) {\n assert.ok(_promise_proxy.default, 'expected PromiseProxyMixin to exist');\n };\n\n _class.prototype['@test no promise, invoking then should raise'] = function (assert) {\n var proxy = ObjectPromiseProxy.create();\n\n assert.throws(function () {\n proxy.then(function () {\n return this;\n }, function () {\n return this;\n });\n }, new RegExp(\"PromiseProxy's promise must be set\"));\n };\n\n _class.prototype['@test fulfillment'] = function (assert) {\n var value = {\n firstName: 'stef',\n lastName: 'penner'\n };\n\n var deferred = _rsvp2.defer();\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n var didFulfillCount = 0;\n var didRejectCount = 0;\n\n proxy.then(function () {\n return didFulfillCount++;\n }, function () {\n return didRejectCount++;\n });\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), undefined, 'expects the proxy to have no content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), undefined, 'expects the proxy to have no reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), true, 'expects the proxy to indicate that it is loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), false, 'expects the proxy to indicate that it is not settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n\n assert.equal(didFulfillCount, 0, 'should not yet have been fulfilled');\n assert.equal(didRejectCount, 0, 'should not yet have been rejected');\n\n (0, _runloop.run)(deferred, 'resolve', value);\n\n assert.equal(didFulfillCount, 1, 'should have been fulfilled');\n assert.equal(didRejectCount, 0, 'should not have been rejected');\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), value, 'expects the proxy to have content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), undefined, 'expects the proxy to still have no reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), false, 'expects the proxy to indicate that it is no longer loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), true, 'expects the proxy to indicate that it is settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), true, 'expects the proxy to indicate that it is fulfilled');\n\n (0, _runloop.run)(deferred, 'resolve', value);\n\n assert.equal(didFulfillCount, 1, 'should still have been only fulfilled once');\n assert.equal(didRejectCount, 0, 'should still not have been rejected');\n\n (0, _runloop.run)(deferred, 'reject', value);\n\n assert.equal(didFulfillCount, 1, 'should still have been only fulfilled once');\n assert.equal(didRejectCount, 0, 'should still not have been rejected');\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), value, 'expects the proxy to have still have same content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), undefined, 'expects the proxy still to have no reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), false, 'expects the proxy to indicate that it is no longer loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), true, 'expects the proxy to indicate that it is settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), true, 'expects the proxy to indicate that it is fulfilled');\n\n // rest of the promise semantics are tested in directly in RSVP\n };\n\n _class.prototype['@test rejection'] = function (assert) {\n var reason = new Error('failure');\n var deferred = _rsvp2.defer();\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n var didFulfillCount = 0;\n var didRejectCount = 0;\n\n proxy.then(function () {\n return didFulfillCount++;\n }, function () {\n return didRejectCount++;\n });\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), undefined, 'expects the proxy to have no content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), undefined, 'expects the proxy to have no reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), true, 'expects the proxy to indicate that it is loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), false, 'expects the proxy to indicate that it is not settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n\n assert.equal(didFulfillCount, 0, 'should not yet have been fulfilled');\n assert.equal(didRejectCount, 0, 'should not yet have been rejected');\n\n (0, _runloop.run)(deferred, 'reject', reason);\n\n assert.equal(didFulfillCount, 0, 'should not yet have been fulfilled');\n assert.equal(didRejectCount, 1, 'should have been rejected');\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), undefined, 'expects the proxy to have no content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), reason, 'expects the proxy to have a reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), false, 'expects the proxy to indicate that it is not longer loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), true, 'expects the proxy to indicate that it is settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), true, 'expects the proxy to indicate that it is rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n\n (0, _runloop.run)(deferred, 'reject', reason);\n\n assert.equal(didFulfillCount, 0, 'should stll not yet have been fulfilled');\n assert.equal(didRejectCount, 1, 'should still remain rejected');\n\n (0, _runloop.run)(deferred, 'resolve', 1);\n\n assert.equal(didFulfillCount, 0, 'should stll not yet have been fulfilled');\n assert.equal(didRejectCount, 1, 'should still remain rejected');\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), undefined, 'expects the proxy to have no content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), reason, 'expects the proxy to have a reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), false, 'expects the proxy to indicate that it is not longer loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), true, 'expects the proxy to indicate that it is settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), true, 'expects the proxy to indicate that it is rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n };\n\n _class.prototype['@test rejection without specifying reason'] = function (assert) {\n var deferred = _rsvp2.defer();\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n var didFulfillCount = 0;\n var didRejectCount = 0;\n\n proxy.then(function () {\n return didFulfillCount++;\n }, function () {\n return didRejectCount++;\n });\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), undefined, 'expects the proxy to have no content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), undefined, 'expects the proxy to have no reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), true, 'expects the proxy to indicate that it is loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), false, 'expects the proxy to indicate that it is not settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n\n assert.equal(didFulfillCount, 0, 'should not yet have been fulfilled');\n assert.equal(didRejectCount, 0, 'should not yet have been rejected');\n\n (0, _runloop.run)(deferred, 'reject');\n\n assert.equal(didFulfillCount, 0, 'should not yet have been fulfilled');\n assert.equal(didRejectCount, 1, 'should have been rejected');\n\n assert.equal((0, _emberMetal.get)(proxy, 'content'), undefined, 'expects the proxy to have no content');\n assert.equal((0, _emberMetal.get)(proxy, 'reason'), undefined, 'expects the proxy to have a reason');\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), false, 'expects the proxy to indicate that it is not longer loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), true, 'expects the proxy to indicate that it is settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), true, 'expects the proxy to indicate that it is rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n };\n\n _class.prototype[\"@test unhandled rejects still propagate to RSVP.on('error', ...) \"] = function (assert) {\n assert.expect(1);\n\n _rsvp2.on('error', onerror);\n _rsvp2.off('error', _rsvp.onerrorDefault);\n\n var expectedReason = new Error('failure');\n var deferred = _rsvp2.defer();\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n proxy.get('promise');\n\n function onerror(reason) {\n assert.equal(reason, expectedReason, 'expected reason');\n }\n\n _rsvp2.on('error', onerror);\n _rsvp2.off('error', _rsvp.onerrorDefault);\n\n (0, _runloop.run)(deferred, 'reject', expectedReason);\n\n _rsvp2.on('error', _rsvp.onerrorDefault);\n _rsvp2.off('error', onerror);\n\n (0, _runloop.run)(deferred, 'reject', expectedReason);\n\n _rsvp2.on('error', _rsvp.onerrorDefault);\n _rsvp2.off('error', onerror);\n };\n\n _class.prototype['@test should work with promise inheritance'] = function (assert) {\n var PromiseSubclass = function (_RSVP$Promise) {\n (0, _emberBabel.inherits)(PromiseSubclass, _RSVP$Promise);\n\n function PromiseSubclass() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RSVP$Promise.apply(this, arguments));\n }\n\n return PromiseSubclass;\n }(_rsvp2.Promise);\n\n var proxy = ObjectPromiseProxy.create({\n promise: new PromiseSubclass(function () {})\n });\n\n assert.ok(proxy.then() instanceof PromiseSubclass, 'promise proxy respected inheritance');\n };\n\n _class.prototype['@test should reset isFulfilled and isRejected when promise is reset'] = function (assert) {\n var deferred = _rsvp.default.defer();\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), true, 'expects the proxy to indicate that it is loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), false, 'expects the proxy to indicate that it is not settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n\n (0, _runloop.run)(deferred, 'resolve');\n\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), false, 'expects the proxy to indicate that it is no longer loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), true, 'expects the proxy to indicate that it is settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), true, 'expects the proxy to indicate that it is fulfilled');\n\n var anotherDeferred = _rsvp.default.defer();\n proxy.set('promise', anotherDeferred.promise);\n\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), true, 'expects the proxy to indicate that it is loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), false, 'expects the proxy to indicate that it is not settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), false, 'expects the proxy to indicate that it is not rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n\n (0, _runloop.run)(anotherDeferred, 'reject');\n\n assert.equal((0, _emberMetal.get)(proxy, 'isPending'), false, 'expects the proxy to indicate that it is not longer loading');\n assert.equal((0, _emberMetal.get)(proxy, 'isSettled'), true, 'expects the proxy to indicate that it is settled');\n assert.equal((0, _emberMetal.get)(proxy, 'isRejected'), true, 'expects the proxy to indicate that it is rejected');\n assert.equal((0, _emberMetal.get)(proxy, 'isFulfilled'), false, 'expects the proxy to indicate that it is not fulfilled');\n };\n\n _class.prototype['@test should have content when isFulfilled is set'] = function (assert) {\n var deferred = _rsvp.default.defer();\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n proxy.addObserver('isFulfilled', function () {\n return assert.equal((0, _emberMetal.get)(proxy, 'content'), true);\n });\n\n (0, _runloop.run)(deferred, 'resolve', true);\n };\n\n _class.prototype['@test should have reason when isRejected is set'] = function (assert) {\n var error = new Error('Y U REJECT?!?');\n var deferred = _rsvp.default.defer();\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n proxy.addObserver('isRejected', function () {\n return assert.equal((0, _emberMetal.get)(proxy, 'reason'), error);\n });\n\n try {\n (0, _runloop.run)(deferred, 'reject', error);\n } catch (e) {\n assert.equal(e, error);\n }\n };\n\n _class.prototype['@test should not error if promise is resolved after proxy has been destroyed'] = function (assert) {\n var deferred = _rsvp.default.defer();\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n proxy.then(function () {}, function () {});\n\n (0, _runloop.run)(proxy, 'destroy');\n\n (0, _runloop.run)(deferred, 'resolve', true);\n\n assert.ok(true, 'resolving the promise after the proxy has been destroyed does not raise an error');\n };\n\n _class.prototype['@test should not error if promise is rejected after proxy has been destroyed'] = function (assert) {\n var deferred = _rsvp.default.defer();\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n proxy.then(function () {}, function () {});\n\n (0, _runloop.run)(proxy, 'destroy');\n\n (0, _runloop.run)(deferred, 'reject', 'some reason');\n\n assert.ok(true, 'rejecting the promise after the proxy has been destroyed does not raise an error');\n };\n\n _class.prototype['@test promise chain is not broken if promised is resolved after proxy has been destroyed'] = function (assert) {\n var deferred = _rsvp.default.defer();\n var expectedValue = {};\n var receivedValue = void 0;\n var didResolveCount = 0;\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n proxy.then(function (value) {\n receivedValue = value;\n didResolveCount++;\n }, function () {});\n\n (0, _runloop.run)(proxy, 'destroy');\n\n (0, _runloop.run)(deferred, 'resolve', expectedValue);\n\n assert.equal(didResolveCount, 1, 'callback called');\n assert.equal(receivedValue, expectedValue, 'passed value is the value the promise was resolved with');\n };\n\n _class.prototype['@test promise chain is not broken if promised is rejected after proxy has been destroyed'] = function (assert) {\n var deferred = _rsvp.default.defer();\n var expectedReason = 'some reason';\n var receivedReason = void 0;\n var didRejectCount = 0;\n\n var proxy = ObjectPromiseProxy.create({\n promise: deferred.promise\n });\n\n proxy.then(function () {}, function (reason) {\n receivedReason = reason;\n didRejectCount++;\n });\n\n (0, _runloop.run)(proxy, 'destroy');\n\n (0, _runloop.run)(deferred, 'reject', expectedReason);\n\n assert.equal(didRejectCount, 1, 'callback called');\n assert.equal(receivedReason, expectedReason, 'passed reason is the reason the promise was rejected for');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mixins/target_action_support_test', ['ember-babel', 'ember-environment', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/target_action_support', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _object, _target_action_support, _internalTestHelpers) {\n 'use strict';\n\n var originalLookup = _emberEnvironment.context.lookup;\n var lookup = void 0;\n\n (0, _internalTestHelpers.moduleFor)('TargetActionSupport', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n _emberEnvironment.context.lookup = lookup = {};\n };\n\n _class.prototype.afterEach = function () {\n _emberEnvironment.context.lookup = originalLookup;\n };\n\n _class.prototype['@test it should return false if no target or action are specified'] = function (assert) {\n assert.expect(1);\n\n var obj = _object.default.extend(_target_action_support.default).create();\n\n assert.ok(false === obj.triggerAction(), 'no target or action was specified');\n };\n\n _class.prototype['@test it should support actions specified as strings'] = function (assert) {\n assert.expect(2);\n\n var obj = _object.default.extend(_target_action_support.default).create({\n target: _object.default.create({\n anEvent: function () {\n assert.ok(true, 'anEvent method was called');\n }\n }),\n\n action: 'anEvent'\n });\n\n assert.ok(true === obj.triggerAction(), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should invoke the send() method on objects that implement it'] = function (assert) {\n assert.expect(3);\n\n var obj = _object.default.extend(_target_action_support.default).create({\n target: _object.default.create({\n send: function (evt, context) {\n assert.equal(evt, 'anEvent', 'send() method was invoked with correct event name');\n assert.equal(context, obj, 'send() method was invoked with correct context');\n }\n }),\n\n action: 'anEvent'\n });\n\n assert.ok(true === obj.triggerAction(), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should find targets specified using a property path'] = function (assert) {\n assert.expect(2);\n\n var Test = {};\n lookup.Test = Test;\n\n Test.targetObj = _object.default.create({\n anEvent: function () {\n assert.ok(true, 'anEvent method was called on global object');\n }\n });\n\n var myObj = _object.default.extend(_target_action_support.default).create({\n target: 'Test.targetObj',\n action: 'anEvent'\n });\n\n assert.ok(true === myObj.triggerAction(), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should use an actionContext object specified as a property on the object'] = function (assert) {\n assert.expect(2);\n var obj = _object.default.extend(_target_action_support.default).create({\n action: 'anEvent',\n actionContext: {},\n target: _object.default.create({\n anEvent: function (ctx) {\n assert.ok(obj.actionContext === ctx, 'anEvent method was called with the expected context');\n }\n })\n });\n assert.ok(true === obj.triggerAction(), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should raise a deprecation warning when targetObject is specified and used'] = function (assert) {\n assert.expect(4);\n var obj = void 0;\n expectDeprecation(function () {\n obj = _object.default.extend(_target_action_support.default).create({\n action: 'anEvent',\n actionContext: {},\n targetObject: _object.default.create({\n anEvent: function (ctx) {\n assert.ok(obj.actionContext === ctx, 'anEvent method was called with the expected context');\n }\n })\n });\n }, /Usage of `targetObject` is deprecated. Please use `target` instead./);\n assert.ok(true === obj.triggerAction(), 'a valid targetObject and action were specified');\n expectDeprecation(function () {\n return obj.get('targetObject');\n }, /Usage of `targetObject` is deprecated. Please use `target` instead./);\n };\n\n _class.prototype['@test it should find an actionContext specified as a property path'] = function (assert) {\n assert.expect(2);\n\n var Test = {};\n lookup.Test = Test;\n Test.aContext = {};\n\n var obj = _object.default.extend(_target_action_support.default).create({\n action: 'anEvent',\n actionContext: 'Test.aContext',\n target: _object.default.create({\n anEvent: function (ctx) {\n assert.ok(Test.aContext === ctx, 'anEvent method was called with the expected context');\n }\n })\n });\n\n assert.ok(true === obj.triggerAction(), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should use the target specified in the argument'] = function (assert) {\n assert.expect(2);\n var targetObj = _object.default.create({\n anEvent: function () {\n assert.ok(true, 'anEvent method was called');\n }\n });\n var obj = _object.default.extend(_target_action_support.default).create({\n action: 'anEvent'\n });\n\n assert.ok(true === obj.triggerAction({ target: targetObj }), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should use the action specified in the argument'] = function (assert) {\n assert.expect(2);\n\n var obj = _object.default.extend(_target_action_support.default).create({\n target: _object.default.create({\n anEvent: function () {\n assert.ok(true, 'anEvent method was called');\n }\n })\n });\n assert.ok(true === obj.triggerAction({ action: 'anEvent' }), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should use the actionContext specified in the argument'] = function (assert) {\n assert.expect(2);\n var context = {};\n var obj = _object.default.extend(_target_action_support.default).create({\n target: _object.default.create({\n anEvent: function (ctx) {\n assert.ok(context === ctx, 'anEvent method was called with the expected context');\n }\n }),\n action: 'anEvent'\n });\n\n assert.ok(true === obj.triggerAction({ actionContext: context }), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should allow multiple arguments from actionContext'] = function (assert) {\n assert.expect(3);\n var param1 = 'someParam';\n var param2 = 'someOtherParam';\n var obj = _object.default.extend(_target_action_support.default).create({\n target: _object.default.create({\n anEvent: function (first, second) {\n assert.ok(first === param1, 'anEvent method was called with the expected first argument');\n assert.ok(second === param2, 'anEvent method was called with the expected second argument');\n }\n }),\n action: 'anEvent'\n });\n\n assert.ok(true === obj.triggerAction({ actionContext: [param1, param2] }), 'a valid target and action were specified');\n };\n\n _class.prototype['@test it should use a null value specified in the actionContext argument'] = function (assert) {\n assert.expect(2);\n var obj = _object.default.extend(_target_action_support.default).create({\n target: _object.default.create({\n anEvent: function (ctx) {\n assert.ok(null === ctx, 'anEvent method was called with the expected context (null)');\n }\n }),\n action: 'anEvent'\n });\n assert.ok(true === obj.triggerAction({ actionContext: null }), 'a valid target and action were specified');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/mutable-array/addObject-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var AddObjectTest = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AddObjectTest, _AbstractTestCase);\n\n function AddObjectTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n AddObjectTest.prototype['@test should return receiver'] = function () {\n var before = (0, _array.newFixture)(3);\n var obj = this.newObject(before);\n this.assert.equal(obj.addObject(before[1]), obj, 'should return receiver');\n };\n\n AddObjectTest.prototype['@test [A,B].addObject(C) => [A,B,C] + notify'] = function () {\n var before = (0, _array.newFixture)(2);\n var item = (0, _array.newFixture)(1)[0];\n var after = [before[0], before[1], item];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.addObject(item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n }\n };\n\n AddObjectTest.prototype['@test [A,B,C].addObject(A) => [A,B,C] + NO notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = before;\n var item = before[0];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.addObject(item); // note: item in set\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.validate('[]'), false, 'should NOT have notified []');\n this.assert.equal(observer.validate('@each'), false, 'should NOT have notified @each');\n this.assert.equal(observer.validate('length'), false, 'should NOT have notified length');\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n }\n };\n\n return AddObjectTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('addObject', AddObjectTest, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/clear-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var ClearTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ClearTests, _AbstractTestCase);\n\n function ClearTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ClearTests.prototype['@test [].clear() => [] + notify'] = function () {\n var after = [];\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.clear(), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.validate('[]'), false, 'should NOT have notified [] once');\n this.assert.equal(observer.validate('@each'), false, 'should NOT have notified @each once');\n this.assert.equal(observer.validate('length'), false, 'should NOT have notified length once');\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n ClearTests.prototype['@test [X].clear() => [] + notify'] = function () {\n var obj, before, after, observer;\n\n before = (0, _array.newFixture)(1);\n after = [];\n obj = this.newObject(before);\n observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.clear(), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n return ClearTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('clear', ClearTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/insertAt-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var InsertAtTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(InsertAtTests, _AbstractTestCase);\n\n function InsertAtTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n InsertAtTests.prototype['@test [].insertAt(0, X) => [X] + notify'] = function () {\n var after = (0, _array.newFixture)(1);\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.insertAt(0, after[0]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] did change once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each did change once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length did change once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject did change once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject did change once');\n };\n\n InsertAtTests.prototype['@test [].insertAt(200,X) => OUT_OF_RANGE_EXCEPTION exception'] = function () {\n var obj = this.newObject([]);\n var that = this;\n\n this.assert.throws(function () {\n return obj.insertAt(200, that.newFixture(1)[0]);\n }, Error);\n };\n\n InsertAtTests.prototype['@test [A].insertAt(0, X) => [X,A] + notify'] = function () {\n var item = (0, _array.newFixture)(1)[0];\n var before = (0, _array.newFixture)(1);\n var after = [item, before[0]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.insertAt(0, item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n InsertAtTests.prototype['@test [A].insertAt(1, X) => [A,X] + notify'] = function () {\n var item = (0, _array.newFixture)(1)[0];\n var before = (0, _array.newFixture)(1);\n var after = [before[0], item];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.insertAt(1, item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n };\n\n InsertAtTests.prototype['@test [A].insertAt(200,X) => OUT_OF_RANGE exception'] = function () {\n var obj = this.newObject((0, _array.newFixture)(1));\n var that = this;\n\n this.assert.throws(function () {\n return obj.insertAt(200, that.newFixture(1)[0]);\n }, Error);\n };\n\n InsertAtTests.prototype['@test [A,B,C].insertAt(0,X) => [X,A,B,C] + notify'] = function () {\n var item = (0, _array.newFixture)(1)[0];\n var before = (0, _array.newFixture)(3);\n var after = [item, before[0], before[1], before[2]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.insertAt(0, item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n InsertAtTests.prototype['@test [A,B,C].insertAt(1,X) => [A,X,B,C] + notify'] = function () {\n var item = (0, _array.newFixture)(1)[0];\n var before = (0, _array.newFixture)(3);\n var after = [before[0], item, before[1], before[2]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n var objectAtCalls = [];\n\n var objectAt = obj.objectAt;\n obj.objectAt = function (ix) {\n objectAtCalls.push(ix);\n return objectAt.call(obj, ix);\n };\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n objectAtCalls.splice(0, objectAtCalls.length);\n\n obj.insertAt(1, item);\n this.assert.deepEqual(objectAtCalls, [], 'objectAt is not called when only inserting items');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n InsertAtTests.prototype['@test [A,B,C].insertAt(3,X) => [A,B,C,X] + notify'] = function () {\n var item = (0, _array.newFixture)(1)[0];\n var before = (0, _array.newFixture)(3);\n var after = [before[0], before[1], before[2], item];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.insertAt(3, item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n };\n\n return InsertAtTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('instertAt', InsertAtTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/popObject-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var PopObjectTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(PopObjectTests, _AbstractTestCase);\n\n function PopObjectTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n PopObjectTests.prototype['@test [].popObject() => [] + returns undefined + NO notify'] = function () {\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.popObject(), undefined, 'popObject results');\n\n this.assert.deepEqual(this.toArray(obj), [], 'post item results');\n\n this.assert.equal(observer.validate('[]'), false, 'should NOT have notified []');\n this.assert.equal(observer.validate('@each'), false, 'should NOT have notified @each');\n this.assert.equal(observer.validate('length'), false, 'should NOT have notified length');\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n PopObjectTests.prototype['@test [X].popObject() => [] + notify'] = function () {\n var before = (0, _array.newFixture)(1);\n var after = [];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n var ret = obj.popObject();\n\n this.assert.equal(ret, before[0], 'return object');\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n PopObjectTests.prototype['@test [A,B,C].popObject() => [A,B] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = [before[0], before[1]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n var ret = obj.popObject();\n\n this.assert.equal(ret, before[2], 'return object');\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n };\n\n return PopObjectTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('popObject', PopObjectTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/pushObject-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var PushObjectTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(PushObjectTests, _AbstractTestCase);\n\n function PushObjectTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n PushObjectTests.prototype['@test returns pushed object'] = function () {\n var exp = (0, _array.newFixture)(1)[0];\n var obj = this.newObject([]);\n\n this.assert.equal(obj.pushObject(exp), exp, 'should return pushed object');\n };\n\n PushObjectTests.prototype['@test [].pushObject(X) => [X] + notify'] = function () {\n var after = (0, _array.newFixture)(1);\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.pushObject(after[0]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n PushObjectTests.prototype['@test [A,B,C].pushObject(X) => [A,B,C,X] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var item = (0, _array.newFixture)(1)[0];\n var after = [before[0], before[1], before[2], item];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.pushObject(item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n };\n\n PushObjectTests.prototype['@test [A,B,C,C].pushObject(A) => [A,B,C,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var item = before[2]; // note same object as current tail. should end up twice\n var after = [before[0], before[1], before[2], item];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.pushObject(item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), true, 'should have notified lastObject');\n };\n\n return PushObjectTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('pushObject', PushObjectTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/pushObjects-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var PushObjectsTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(PushObjectsTests, _AbstractTestCase);\n\n function PushObjectsTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n PushObjectsTests.prototype['@test should raise exception if not Ember.Enumerable is passed to pushObjects'] = function () {\n var obj = this.newObject([]);\n\n expectAssertion(function () {\n return obj.pushObjects('string');\n });\n };\n\n return PushObjectsTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('pushObjects', PushObjectsTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/removeAt-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-runtime/lib/mixins/array', 'ember-metal'], function (_emberBabel, _internalTestHelpers, _array, _array2, _emberMetal) {\n 'use strict';\n\n var RemoveAtTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(RemoveAtTests, _AbstractTestCase);\n\n function RemoveAtTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n RemoveAtTests.prototype['@test removeAt([X], 0) => [] + notify'] = function () {\n var before = (0, _array.newFixture)(1);\n var after = [];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal((0, _array2.removeAt)(obj, 0), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n RemoveAtTests.prototype['@test removeAt([], 200) => OUT_OF_RANGE_EXCEPTION exception'] = function () {\n var obj = this.newObject([]);\n this.assert.throws(function () {\n return (0, _array2.removeAt)(obj, 200);\n }, Error);\n };\n\n RemoveAtTests.prototype['@test removeAt([A,B], 0) => [B] + notify'] = function () {\n var before = (0, _array.newFixture)(2);\n var after = [before[1]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal((0, _array2.removeAt)(obj, 0), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n RemoveAtTests.prototype['@test removeAt([A,B], 1) => [A] + notify'] = function () {\n var before = (0, _array.newFixture)(2);\n var after = [before[0]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal((0, _array2.removeAt)(obj, 1), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n };\n\n RemoveAtTests.prototype['@test removeAt([A,B,C], 1) => [A,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = [before[0], before[2]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal((0, _array2.removeAt)(obj, 1), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n RemoveAtTests.prototype['@test removeAt([A,B,C,D], 1,2) => [A,D] + notify'] = function () {\n var before = (0, _array.newFixture)(4);\n var after = [before[0], before[3]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal((0, _array2.removeAt)(obj, 1, 2), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n RemoveAtTests.prototype['@test [A,B,C,D].removeAt(1,2) => [A,D] + notify'] = function () {\n var obj, before, after, observer;\n\n before = (0, _array.newFixture)(4);\n after = [before[0], before[3]];\n obj = this.newObject(before);\n observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.removeAt(1, 2), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n return RemoveAtTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('removeAt', RemoveAtTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/removeObject-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array) {\n 'use strict';\n\n var RemoveObjectTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(RemoveObjectTests, _AbstractTestCase);\n\n function RemoveObjectTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n RemoveObjectTests.prototype['@test should return receiver'] = function () {\n var before = (0, _array.newFixture)(3);\n var obj = this.newObject(before);\n\n this.assert.equal(obj.removeObject(before[1]), obj, 'should return receiver');\n };\n\n RemoveObjectTests.prototype['@test [A,B,C].removeObject(B) => [A,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = [before[0], before[2]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.removeObject(before[1]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n }\n };\n\n RemoveObjectTests.prototype['@test [A,B,C].removeObject(D) => [A,B,C]'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = before;\n var item = (0, _array.newFixture)(1)[0];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.removeObject(item); // note: item not in set\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.validate('[]'), false, 'should NOT have notified []');\n this.assert.equal(observer.validate('@each'), false, 'should NOT have notified @each');\n this.assert.equal(observer.validate('length'), false, 'should NOT have notified length');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n }\n };\n\n return RemoveObjectTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('removeObject', RemoveObjectTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/removeObjects-test', ['ember-babel', 'ember-metal', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-runtime/lib/mixins/array'], function (_emberBabel, _emberMetal, _internalTestHelpers, _array, _array2) {\n 'use strict';\n\n var RemoveObjectsTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(RemoveObjectsTests, _AbstractTestCase);\n\n function RemoveObjectsTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n RemoveObjectsTests.prototype['@test should return receiver'] = function () {\n var before = (0, _array2.A)((0, _array.newFixture)(3));\n var obj = before;\n\n this.assert.equal(obj.removeObjects(before[1]), obj, 'should return receiver');\n };\n\n RemoveObjectsTests.prototype['@test [A,B,C].removeObjects([B]) => [A,C] + notify'] = function () {\n var before = (0, _array2.A)((0, _array.newFixture)(3));\n var after = [before[0], before[2]];\n var obj = before;\n var observer = this.newObserver(obj, '[]', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); // Prime the cache\n\n obj.removeObjects([before[1]]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n }\n };\n\n RemoveObjectsTests.prototype['@test [{A},{B},{C}].removeObjects([{B}]) => [{A},{C}] + notify'] = function () {\n var before = (0, _array2.A)((0, _array.newObjectsFixture)(3));\n var after = [before[0], before[2]];\n var obj = before;\n var observer = this.newObserver(obj, '[]', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); // Prime the cache\n\n obj.removeObjects([before[1]]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n }\n };\n\n RemoveObjectsTests.prototype['@test [A,B,C].removeObjects([A,B]) => [C] + notify'] = function () {\n var before = (0, _array2.A)((0, _array.newFixture)(3));\n var after = [before[2]];\n var obj = before;\n var observer = this.newObserver(obj, '[]', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); // Prime the cache\n\n obj.removeObjects([before[0], before[1]]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n }\n };\n\n RemoveObjectsTests.prototype['@test [{A},{B},{C}].removeObjects([{A},{B}]) => [{C}] + notify'] = function () {\n var before = (0, _array2.A)((0, _array.newObjectsFixture)(3));\n var after = [before[2]];\n var obj = before;\n var observer = this.newObserver(obj, '[]', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); // Prime the cache\n\n obj.removeObjects([before[0], before[1]]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n }\n };\n\n RemoveObjectsTests.prototype['@test [A,B,C].removeObjects([A,B,C]) => [] + notify'] = function () {\n var before = (0, _array2.A)((0, _array.newFixture)(3));\n var after = [];\n var obj = before;\n var observer = this.newObserver(obj, '[]', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); // Prime the cache\n\n obj.removeObjects([before[0], before[1], before[2]]);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject');\n }\n };\n\n RemoveObjectsTests.prototype['@test [{A},{B},{C}].removeObjects([{A},{B},{C}]) => [] + notify'] = function () {\n var before = (0, _array2.A)((0, _array.newObjectsFixture)(3));\n var after = [];\n var obj = before;\n var observer = this.newObserver(obj, '[]', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); // Prime the cache\n\n obj.removeObjects(before);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), 1, 'should have notified lastObject');\n }\n };\n\n RemoveObjectsTests.prototype['@test [A,B,C].removeObjects([D]) => [A,B,C]'] = function () {\n var before = (0, _array2.A)((0, _array.newFixture)(3));\n var after = before;\n var item = (0, _array.newFixture)(1)[0];\n var obj = before;\n var observer = this.newObserver(obj, '[]', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); // Prime the cache\n\n obj.removeObjects([item]); // Note: item not in set\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n if (observer.isEnabled) {\n this.assert.equal(observer.validate('[]'), false, 'should NOT have notified []');\n this.assert.equal(observer.validate('length'), false, 'should NOT have notified length');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n }\n };\n\n return RemoveObjectsTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('removeObjects', RemoveObjectsTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/replace-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _array) {\n 'use strict';\n\n var ReplaceTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ReplaceTests, _AbstractTestCase);\n\n function ReplaceTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ReplaceTests.prototype[\"@test [].replace(0,0,'X') => ['X'] + notify\"] = function () {\n var exp = (0, _array.newFixture)(1);\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.replace(0, 0, exp);\n\n this.assert.deepEqual(this.toArray(obj), exp, 'post item results');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n ReplaceTests.prototype['@test [].replace(0,0,\"X\") => [\"X\"] + avoid calling objectAt and notifying fistObject/lastObject when not in cache'] = function () {\n var obj, exp, observer;\n var called = 0;\n exp = (0, _array.newFixture)(1);\n obj = this.newObject([]);\n obj.objectAt = function () {\n called++;\n };\n observer = this.newObserver(obj, 'firstObject', 'lastObject');\n\n obj.replace(0, 0, exp);\n\n this.assert.equal(called, 0, 'should NOT have called objectAt upon replace when firstObject/lastObject are not cached');\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject since not cached');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject since not cached');\n };\n\n ReplaceTests.prototype['@test [A,B,C,D].replace(1,2,X) => [A,X,D] + notify'] = function () {\n var before = (0, _array.newFixture)(4);\n var replace = (0, _array.newFixture)(1);\n var after = [before[0], replace[0], before[3]];\n\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.replace(1, 2, replace);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n ReplaceTests.prototype['@test [A,B,C,D].replace(1,2,[X,Y]) => [A,X,Y,D] + notify'] = function () {\n var before = (0, _array.newFixture)(4);\n var replace = (0, _array.newFixture)(2);\n var after = [before[0], replace[0], replace[1], before[3]];\n\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.replace(1, 2, replace);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.validate('length'), false, 'should NOT have notified length');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n ReplaceTests.prototype['@test [A,B].replace(1,0,[X,Y]) => [A,X,Y,B] + notify'] = function () {\n var before = (0, _array.newFixture)(2);\n var replace = (0, _array.newFixture)(2);\n var after = [before[0], replace[0], replace[1], before[1]];\n\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.replace(1, 0, replace);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n ReplaceTests.prototype['@test [A,B,C,D].replace(2,2) => [A,B] + notify'] = function () {\n var before = (0, _array.newFixture)(4);\n var after = [before[0], before[1]];\n\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.replace(2, 2);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n };\n\n ReplaceTests.prototype['@test [A,B,C,D].replace(-1,1) => [A,B,C] + notify'] = function () {\n var before = (0, _array.newFixture)(4);\n var after = [before[0], before[1], before[2]];\n\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.replace(-1, 1);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n };\n\n ReplaceTests.prototype['@test Adding object should notify array observer'] = function () {\n var fixtures = (0, _array.newFixture)(4);\n var obj = this.newObject(fixtures);\n var observer = this.newObserver(obj).observeArray(obj);\n var item = (0, _array.newFixture)(1)[0];\n\n obj.replace(2, 2, [item]);\n\n this.assert.deepEqual(observer._before, [obj, 2, 2, 1], 'before');\n this.assert.deepEqual(observer._after, [obj, 2, 2, 1], 'after');\n };\n\n return ReplaceTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('replace', ReplaceTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/reverseObjects-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-metal'], function (_emberBabel, _internalTestHelpers, _array, _emberMetal) {\n 'use strict';\n\n var ReverseObjectsTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ReverseObjectsTests, _AbstractTestCase);\n\n function ReverseObjectsTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ReverseObjectsTests.prototype['@test [A,B,C].reverseObjects() => [] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = [before[2], before[1], before[0]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.reverseObjects(), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 0, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n return ReverseObjectsTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('reverseObjects', ReverseObjectsTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/setObjects-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-metal'], function (_emberBabel, _internalTestHelpers, _array, _emberMetal) {\n 'use strict';\n\n var SetObjectsTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(SetObjectsTests, _AbstractTestCase);\n\n function SetObjectsTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n SetObjectsTests.prototype['@test [A,B,C].setObjects([]) = > [] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = [];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.setObjects(after), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n SetObjectsTests.prototype['@test [A,B,C].setObjects([D, E, F, G]) = > [D, E, F, G] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = (0, _array.newFixture)(4);\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.setObjects(after), obj, 'return self');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n return SetObjectsTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('setObjects', SetObjectsTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/shiftObject-test', ['ember-babel', 'internal-test-helpers', 'ember-runtime/tests/helpers/array', 'ember-metal'], function (_emberBabel, _internalTestHelpers, _array, _emberMetal) {\n 'use strict';\n\n var ShiftObjectTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ShiftObjectTests, _AbstractTestCase);\n\n function ShiftObjectTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n ShiftObjectTests.prototype['@test [].shiftObject() => [] + returns undefined + NO notify'] = function () {\n var after = [];\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.shiftObject(), undefined);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.validate('[]', undefined, 1), false, 'should NOT have notified [] once');\n this.assert.equal(observer.validate('@each', undefined, 1), false, 'should NOT have notified @each once');\n this.assert.equal(observer.validate('length', undefined, 1), false, 'should NOT have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), false, 'should NOT have notified firstObject once');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n ShiftObjectTests.prototype['@test [X].shiftObject() => [] + notify'] = function () {\n var before = (0, _array.newFixture)(1);\n var after = [];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.shiftObject(), before[0], 'should return object');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n ShiftObjectTests.prototype['@test [A,B,C].shiftObject() => [B,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var after = [before[1], before[2]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n this.assert.equal(obj.shiftObject(), before[0], 'should return object');\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject once');\n };\n\n return ShiftObjectTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('shiftObject', ShiftObjectTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/unshiftObject-test', ['ember-babel', 'internal-test-helpers', 'ember-metal', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _emberMetal, _array) {\n 'use strict';\n\n var UnshiftObjectTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(UnshiftObjectTests, _AbstractTestCase);\n\n function UnshiftObjectTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n UnshiftObjectTests.prototype['@test returns unshifted object'] = function () {\n var obj = this.newObject([]);\n var item = (0, _array.newFixture)(1)[0];\n\n this.assert.equal(obj.unshiftObject(item), item, 'should return unshifted object');\n };\n\n UnshiftObjectTests.prototype['@test [].unshiftObject(X) => [X] + notify'] = function () {\n var item = (0, _array.newFixture)(1)[0];\n var after = [item];\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.unshiftObject(item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n UnshiftObjectTests.prototype['@test [A,B,C].unshiftObject(X) => [X,A,B,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var item = (0, _array.newFixture)(1)[0];\n var after = [item, before[0], before[1], before[2]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.unshiftObject(item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n UnshiftObjectTests.prototype['@test [A,B,C].unshiftObject(A) => [A,A,B,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var item = before[0]; // note same object as current head. should end up twice\n var after = [item, before[0], before[1], before[2]];\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.unshiftObject(item);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), true, 'should have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n return UnshiftObjectTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('unshiftObject', UnshiftObjectTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/mutable-array/unshiftObjects-test', ['ember-babel', 'internal-test-helpers', 'ember-metal', 'ember-runtime/tests/helpers/array'], function (_emberBabel, _internalTestHelpers, _emberMetal, _array) {\n 'use strict';\n\n var UnshiftObjectsTests = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(UnshiftObjectsTests, _AbstractTestCase);\n\n function UnshiftObjectsTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n UnshiftObjectsTests.prototype['@test returns receiver'] = function () {\n var obj = this.newObject([]);\n var items = (0, _array.newFixture)(3);\n\n this.assert.equal(obj.unshiftObjects(items), obj, 'should return receiver');\n };\n\n UnshiftObjectsTests.prototype['@test [].unshiftObjects([A,B,C]) => [A,B,C] + notify'] = function () {\n var items = (0, _array.newFixture)(3);\n var obj = this.newObject([]);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.unshiftObjects(items);\n\n this.assert.deepEqual(this.toArray(obj), items, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), items.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n this.assert.equal(observer.timesCalled('lastObject'), 1, 'should have notified lastObject once');\n };\n\n UnshiftObjectsTests.prototype['@test [A,B,C].unshiftObjects([X,Y]) => [X,Y,A,B,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var items = (0, _array.newFixture)(2);\n var after = items.concat(before);\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.unshiftObjects(items);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n this.assert.equal(observer.timesCalled('firstObject'), 1, 'should have notified firstObject once');\n\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n UnshiftObjectsTests.prototype['@test [A,B,C].unshiftObjects([A,B]) => [A,B,A,B,C] + notify'] = function () {\n var before = (0, _array.newFixture)(3);\n var items = [before[0], before[1]]; // note same object as current head. should end up twice\n var after = items.concat(before);\n var obj = this.newObject(before);\n var observer = this.newObserver(obj, '[]', '@each', 'length', 'firstObject', 'lastObject');\n\n obj.getProperties('firstObject', 'lastObject'); /* Prime the cache */\n\n obj.unshiftObjects(items);\n\n this.assert.deepEqual(this.toArray(obj), after, 'post item results');\n this.assert.equal((0, _emberMetal.get)(obj, 'length'), after.length, 'length');\n\n this.assert.equal(observer.timesCalled('[]'), 1, 'should have notified [] once');\n this.assert.equal(observer.timesCalled('@each'), 0, 'should not have notified @each once');\n this.assert.equal(observer.timesCalled('length'), 1, 'should have notified length once');\n\n this.assert.equal(observer.validate('firstObject'), true, 'should NOT have notified firstObject');\n this.assert.equal(observer.validate('lastObject'), false, 'should NOT have notified lastObject');\n };\n\n return UnshiftObjectsTests;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _array.runArrayTests)('unshiftObjects', UnshiftObjectsTests, 'MutableArray', 'NativeArray', 'ArrayProxy');\n});","enifed('ember-runtime/tests/system/array_proxy/arranged_content_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _array_proxy, _array, _internalTestHelpers) {\n 'use strict';\n\n var array = void 0;\n\n (0, _internalTestHelpers.moduleFor)('ArrayProxy - arrangedContent', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n (0, _runloop.run)(function () {\n array = _array_proxy.default.extend({\n arrangedContent: (0, _emberMetal.computed)('content.[]', function () {\n var content = this.get('content');\n return content && (0, _array.A)(content.slice().sort(function (a, b) {\n if (a == null) {\n a = -1;\n }\n if (b == null) {\n b = -1;\n }\n return b - a;\n }));\n })\n }).create({\n content: (0, _array.A)([1, 2, 4, 5])\n });\n });\n };\n\n _class.prototype.afterEach = function () {\n (0, _runloop.run)(function () {\n return array.destroy();\n });\n };\n\n _class.prototype['@test compact - returns arrangedContent without nulls and undefined'] = function (assert) {\n (0, _runloop.run)(function () {\n return array.set('content', (0, _array.A)([1, 3, null, 2, undefined]));\n });\n\n assert.deepEqual(array.compact(), [3, 2, 1]);\n };\n\n _class.prototype['@test indexOf - returns index of object in arrangedContent'] = function (assert) {\n assert.equal(array.indexOf(4), 1, 'returns arranged index');\n };\n\n _class.prototype['@test lastIndexOf - returns last index of object in arrangedContent'] = function (assert) {\n array.get('content').pushObject(4);\n assert.equal(array.lastIndexOf(4), 2, 'returns last arranged index');\n };\n\n _class.prototype['@test objectAt - returns object at index in arrangedContent'] = function (assert) {\n assert.equal((0, _emberMetal.objectAt)(array, 1), 4, 'returns object at index');\n };\n\n _class.prototype['@test objectAtContent - returns object at index in arrangedContent'] = function (assert) {\n assert.equal(array.objectAtContent(1), 4, 'returns object at index');\n };\n\n _class.prototype['@test objectsAt - returns objects at indices in arrangedContent'] = function (assert) {\n assert.deepEqual(array.objectsAt([0, 2, 4]), [5, 2, undefined], 'returns objects at indices');\n };\n\n _class.prototype['@test replace - mutating an arranged ArrayProxy is not allowed'] = function () {\n expectAssertion(function () {\n array.replace(0, 0, [3]);\n }, /Mutating an arranged ArrayProxy is not allowed/);\n };\n\n _class.prototype['@test replaceContent - does a standard array replace on content'] = function (assert) {\n (0, _runloop.run)(function () {\n return array.replaceContent(1, 2, [3]);\n });\n assert.deepEqual(array.get('content'), [1, 3, 5]);\n };\n\n _class.prototype['@test slice - returns a slice of the arrangedContent'] = function (assert) {\n assert.deepEqual(array.slice(1, 3), [4, 2], 'returns sliced arrangedContent');\n };\n\n _class.prototype['@test toArray - returns copy of arrangedContent'] = function (assert) {\n assert.deepEqual(array.toArray(), [5, 4, 2, 1]);\n };\n\n _class.prototype['@test without - returns arrangedContent without object'] = function (assert) {\n assert.deepEqual(array.without(2), [5, 4, 1], 'returns arranged without object');\n };\n\n _class.prototype['@test lastObject - returns last arranged object'] = function (assert) {\n assert.equal(array.get('lastObject'), 1, 'returns last arranged object');\n };\n\n _class.prototype['@test firstObject - returns first arranged object'] = function (assert) {\n assert.equal(array.get('firstObject'), 5, 'returns first arranged object');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ArrayProxy - arrangedContent matching content', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function () {\n (0, _runloop.run)(function () {\n array = _array_proxy.default.create({\n content: (0, _array.A)([1, 2, 4, 5])\n });\n });\n };\n\n _class2.prototype.afterEach = function () {\n (0, _runloop.run)(function () {\n array.destroy();\n });\n };\n\n _class2.prototype['@test insertAt - inserts object at specified index'] = function (assert) {\n (0, _runloop.run)(function () {\n array.insertAt(2, 3);\n });\n assert.deepEqual(array.get('content'), [1, 2, 3, 4, 5]);\n };\n\n _class2.prototype['@test replace - does a standard array replace'] = function (assert) {\n (0, _runloop.run)(function () {\n array.replace(1, 2, [3]);\n });\n assert.deepEqual(array.get('content'), [1, 3, 5]);\n };\n\n _class2.prototype['@test reverseObjects - reverses content'] = function (assert) {\n (0, _runloop.run)(function () {\n array.reverseObjects();\n });\n assert.deepEqual(array.get('content'), [5, 4, 2, 1]);\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ArrayProxy - arrangedContent with transforms', function (_AbstractTestCase3) {\n (0, _emberBabel.inherits)(_class3, _AbstractTestCase3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase3.apply(this, arguments));\n }\n\n _class3.prototype.beforeEach = function () {\n (0, _runloop.run)(function () {\n array = _array_proxy.default.extend({\n arrangedContent: (0, _emberMetal.computed)(function () {\n var content = this.get('content');\n return content && (0, _array.A)(content.slice().sort(function (a, b) {\n if (a == null) {\n a = -1;\n }\n if (b == null) {\n b = -1;\n }\n return b - a;\n }));\n }).property('content.[]'),\n\n objectAtContent: function (idx) {\n var obj = (0, _emberMetal.objectAt)(this.get('arrangedContent'), idx);\n return obj && obj.toString();\n }\n }).create({\n content: (0, _array.A)([1, 2, 4, 5])\n });\n });\n };\n\n _class3.prototype.afterEach = function () {\n (0, _runloop.run)(function () {\n array.destroy();\n });\n };\n\n _class3.prototype['@test indexOf - returns index of object in arrangedContent'] = function (assert) {\n assert.equal(array.indexOf('4'), 1, 'returns arranged index');\n };\n\n _class3.prototype['@test lastIndexOf - returns last index of object in arrangedContent'] = function (assert) {\n array.get('content').pushObject(4);\n assert.equal(array.lastIndexOf('4'), 2, 'returns last arranged index');\n };\n\n _class3.prototype['@test objectAt - returns object at index in arrangedContent'] = function (assert) {\n assert.equal((0, _emberMetal.objectAt)(array, 1), '4', 'returns object at index');\n };\n\n _class3.prototype['@test objectAtContent - returns object at index in arrangedContent'] = function (assert) {\n assert.equal(array.objectAtContent(1), '4', 'returns object at index');\n };\n\n _class3.prototype['@test objectsAt - returns objects at indices in arrangedContent'] = function (assert) {\n assert.deepEqual(array.objectsAt([0, 2, 4]), ['5', '2', undefined], 'returns objects at indices');\n };\n\n _class3.prototype['@test slice - returns a slice of the arrangedContent'] = function (assert) {\n assert.deepEqual(array.slice(1, 3), ['4', '2'], 'returns sliced arrangedContent');\n };\n\n _class3.prototype['@test toArray - returns copy of arrangedContent'] = function (assert) {\n assert.deepEqual(array.toArray(), ['5', '4', '2', '1']);\n };\n\n _class3.prototype['@test without - returns arrangedContent without object'] = function (assert) {\n assert.deepEqual(array.without('2'), ['5', '4', '1'], 'returns arranged without object');\n };\n\n _class3.prototype['@test lastObject - returns last arranged object'] = function (assert) {\n assert.equal(array.get('lastObject'), '1', 'returns last arranged object');\n };\n\n _class3.prototype['@test firstObject - returns first arranged object'] = function (assert) {\n assert.equal(array.get('firstObject'), '5', 'returns first arranged object');\n };\n\n return _class3;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ArrayProxy - with transforms', function (_AbstractTestCase4) {\n (0, _emberBabel.inherits)(_class4, _AbstractTestCase4);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase4.apply(this, arguments));\n }\n\n _class4.prototype.beforeEach = function () {\n (0, _runloop.run)(function () {\n array = _array_proxy.default.extend({\n objectAtContent: function (idx) {\n var obj = (0, _emberMetal.objectAt)(this.get('arrangedContent'), idx);\n return obj && obj.toString();\n }\n }).create({\n content: (0, _array.A)([1, 2, 4, 5])\n });\n });\n };\n\n _class4.prototype.afterEach = function () {\n (0, _runloop.run)(function () {\n array.destroy();\n });\n };\n\n _class4.prototype['@test popObject - removes last object in arrangedContent'] = function (assert) {\n var popped = array.popObject();\n assert.equal(popped, '5', 'returns last object');\n assert.deepEqual(array.toArray(), ['1', '2', '4'], 'removes from content');\n };\n\n _class4.prototype['@test removeObject - removes object from content'] = function (assert) {\n array.removeObject('2');\n assert.deepEqual(array.toArray(), ['1', '4', '5']);\n };\n\n _class4.prototype['@test removeObjects - removes objects from content'] = function (assert) {\n array.removeObjects(['2', '4', '6']);\n assert.deepEqual(array.toArray(), ['1', '5']);\n };\n\n _class4.prototype['@test shiftObject - removes from start of arrangedContent'] = function (assert) {\n var shifted = array.shiftObject();\n assert.equal(shifted, '1', 'returns first object');\n assert.deepEqual(array.toArray(), ['2', '4', '5'], 'removes object from content');\n };\n\n return _class4;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/array_proxy/array_observer_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _array_proxy, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ArrayProxy - array observers', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test mutating content'] = function (assert) {\n assert.expect(4);\n\n var content = (0, _array.A)(['x', 'y', 'z']);\n var proxy = _array_proxy.default.create({ content: content });\n\n proxy.addArrayObserver({\n arrayWillChange: function (proxy, startIndex, removeCount, addCount) {\n assert.deepEqual([startIndex, removeCount, addCount], [1, 1, 3]);\n assert.deepEqual(proxy.toArray(), ['x', 'y', 'z']);\n },\n arrayDidChange: function (proxy, startIndex, removeCount, addCount) {\n assert.deepEqual([startIndex, removeCount, addCount], [1, 1, 3]);\n assert.deepEqual(proxy.toArray(), ['x', 'a', 'b', 'c', 'z']);\n }\n });\n\n proxy.toArray();\n content.replace(1, 1, ['a', 'b', 'c']);\n };\n\n _class.prototype['@test assigning content'] = function (assert) {\n assert.expect(4);\n\n var content = (0, _array.A)(['x', 'y', 'z']);\n var proxy = _array_proxy.default.create({ content: content });\n\n proxy.addArrayObserver({\n arrayWillChange: function (proxy, startIndex, removeCount, addCount) {\n assert.deepEqual([startIndex, removeCount, addCount], [0, 3, 5]);\n assert.deepEqual(proxy.toArray(), ['x', 'y', 'z']);\n },\n arrayDidChange: function (proxy, startIndex, removeCount, addCount) {\n assert.deepEqual([startIndex, removeCount, addCount], [0, 3, 5]);\n assert.deepEqual(proxy.toArray(), ['a', 'b', 'c', 'd', 'e']);\n }\n });\n\n proxy.toArray();\n (0, _emberMetal.set)(proxy, 'content', (0, _array.A)(['a', 'b', 'c', 'd', 'e']));\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/array_proxy/content_change_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _array_proxy, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ArrayProxy - content change', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype[\"@test The ArrayProxy doesn't explode when assigned a destroyed object\"] = function (assert) {\n var proxy1 = _array_proxy.default.create();\n var proxy2 = _array_proxy.default.create();\n\n (0, _runloop.run)(function () {\n return proxy1.destroy();\n });\n\n (0, _emberMetal.set)(proxy2, 'content', proxy1);\n\n assert.ok(true, 'No exception was raised');\n };\n\n _class.prototype['@test should update if content changes while change events are deferred'] = function (assert) {\n var proxy = _array_proxy.default.create();\n\n assert.deepEqual(proxy.toArray(), []);\n\n (0, _emberMetal.changeProperties)(function () {\n proxy.set('content', (0, _array.A)([1, 2, 3]));\n assert.deepEqual(proxy.toArray(), [1, 2, 3]);\n });\n };\n\n _class.prototype['@test objectAt recomputes the object cache correctly'] = function (assert) {\n var indexes = [];\n\n var proxy = _array_proxy.default.extend({\n objectAtContent: function (index) {\n indexes.push(index);\n return this.content[index];\n }\n }).create({\n content: (0, _array.A)([1, 2, 3, 4, 5])\n });\n\n assert.deepEqual(indexes, []);\n assert.deepEqual(proxy.objectAt(0), 1);\n assert.deepEqual(indexes, [0, 1, 2, 3, 4]);\n\n indexes.length = 0;\n proxy.set('content', (0, _array.A)([1, 2, 3]));\n assert.deepEqual(proxy.objectAt(0), 1);\n assert.deepEqual(indexes, [0, 1, 2]);\n\n indexes.length = 0;\n proxy.content.replace(2, 0, [4, 5]);\n assert.deepEqual(proxy.objectAt(0), 1);\n assert.deepEqual(proxy.objectAt(1), 2);\n assert.deepEqual(indexes, []);\n assert.deepEqual(proxy.objectAt(2), 4);\n assert.deepEqual(indexes, [2, 3, 4]);\n };\n\n _class.prototype['@test negative indexes are handled correctly'] = function (assert) {\n var indexes = [];\n\n var proxy = _array_proxy.default.extend({\n objectAtContent: function (index) {\n indexes.push(index);\n return this.content[index];\n }\n }).create({\n content: (0, _array.A)([1, 2, 3, 4, 5])\n });\n\n assert.deepEqual(proxy.toArray(), [1, 2, 3, 4, 5]);\n\n indexes.length = 0;\n\n proxy.content.replace(-1, 0, [7]);\n proxy.content.replace(-2, 0, [6]);\n\n assert.deepEqual(proxy.toArray(), [1, 2, 3, 4, 6, 7, 5]);\n assert.deepEqual(indexes, [4, 5, 6]);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/array_proxy/length_test', ['ember-babel', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/system/object', 'ember-metal', '@ember/object/computed', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _array_proxy, _object, _emberMetal, _computed, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.ArrayProxy - content change (length)', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should update length for null content'] = function (assert) {\n var proxy = _array_proxy.default.create({\n content: (0, _array.A)([1, 2, 3])\n });\n\n assert.equal(proxy.get('length'), 3, 'precond - length is 3');\n\n proxy.set('content', null);\n\n assert.equal(proxy.get('length'), 0, 'length updates');\n };\n\n _class.prototype['@test should update length for null content when there is a computed property watching length'] = function (assert) {\n var proxy = _array_proxy.default.extend({\n isEmpty: (0, _computed.not)('length')\n }).create({\n content: (0, _array.A)([1, 2, 3])\n });\n\n assert.equal(proxy.get('length'), 3, 'precond - length is 3');\n\n // Consume computed property that depends on length\n proxy.get('isEmpty');\n\n // update content\n proxy.set('content', null);\n\n assert.equal(proxy.get('length'), 0, 'length updates');\n };\n\n _class.prototype['@test getting length does not recompute the object cache'] = function (assert) {\n var indexes = [];\n\n var proxy = _array_proxy.default.extend({\n objectAtContent: function (index) {\n indexes.push(index);\n return this.content[index];\n }\n }).create({\n content: (0, _array.A)([1, 2, 3, 4, 5])\n });\n\n assert.equal((0, _emberMetal.get)(proxy, 'length'), 5);\n assert.deepEqual(indexes, []);\n\n indexes.length = 0;\n proxy.set('content', (0, _array.A)([6, 7, 8]));\n assert.equal((0, _emberMetal.get)(proxy, 'length'), 3);\n assert.deepEqual(indexes, []);\n\n indexes.length = 0;\n proxy.content.replace(1, 0, [1, 2, 3]);\n assert.equal((0, _emberMetal.get)(proxy, 'length'), 6);\n assert.deepEqual(indexes, []);\n };\n\n _class.prototype['@test accessing length after content set to null'] = function (assert) {\n var obj = _array_proxy.default.create({ content: ['foo', 'bar'] });\n\n assert.equal(obj.length, 2, 'precond');\n\n (0, _emberMetal.set)(obj, 'content', null);\n\n assert.equal(obj.length, 0, 'length is 0 without content');\n assert.deepEqual(obj.content, null, 'content was updated');\n };\n\n _class.prototype['@test accessing length after content set to null in willDestroy'] = function (assert) {\n var obj = _array_proxy.default.extend({\n willDestroy: function () {\n this.set('content', null);\n this._super.apply(this, arguments);\n }\n }).create({\n content: ['foo', 'bar']\n });\n\n assert.equal(obj.length, 2, 'precond');\n\n this.runTask(function () {\n return obj.destroy();\n });\n\n assert.equal(obj.length, 0, 'length is 0 without content');\n assert.deepEqual(obj.content, null, 'content was updated');\n };\n\n _class.prototype['@test setting length to 0'] = function (assert) {\n var obj = _array_proxy.default.create({ content: ['foo', 'bar'] });\n\n assert.equal(obj.length, 2, 'precond');\n\n (0, _emberMetal.set)(obj, 'length', 0);\n\n assert.equal(obj.length, 0, 'length was updated');\n assert.deepEqual(obj.content, [], 'content length was truncated');\n };\n\n _class.prototype['@test setting length to smaller value'] = function (assert) {\n var obj = _array_proxy.default.create({ content: ['foo', 'bar'] });\n\n assert.equal(obj.length, 2, 'precond');\n\n (0, _emberMetal.set)(obj, 'length', 1);\n\n assert.equal(obj.length, 1, 'length was updated');\n assert.deepEqual(obj.content, ['foo'], 'content length was truncated');\n };\n\n _class.prototype['@test setting length to larger value'] = function (assert) {\n var obj = _array_proxy.default.create({ content: ['foo', 'bar'] });\n\n assert.equal(obj.length, 2, 'precond');\n\n (0, _emberMetal.set)(obj, 'length', 3);\n\n assert.equal(obj.length, 3, 'length was updated');\n assert.deepEqual(obj.content, ['foo', 'bar', undefined], 'content length was updated');\n };\n\n _class.prototype['@test setting length after content set to null'] = function (assert) {\n var obj = _array_proxy.default.create({ content: ['foo', 'bar'] });\n\n assert.equal(obj.length, 2, 'precond');\n\n (0, _emberMetal.set)(obj, 'content', null);\n assert.equal(obj.length, 0, 'length was updated');\n\n (0, _emberMetal.set)(obj, 'length', 0);\n assert.equal(obj.length, 0, 'length is still updated');\n };\n\n _class.prototype['@test setting length to greater than zero'] = function (assert) {\n var obj = _array_proxy.default.create({ content: ['foo', 'bar'] });\n\n assert.equal(obj.length, 2, 'precond');\n\n (0, _emberMetal.set)(obj, 'length', 1);\n\n assert.equal(obj.length, 1, 'length was updated');\n assert.deepEqual(obj.content, ['foo'], 'content length was truncated');\n };\n\n _class.prototype['@test array proxy + aliasedProperty complex test'] = function (assert) {\n var aCalled = void 0,\n bCalled = void 0,\n cCalled = void 0,\n dCalled = void 0,\n eCalled = void 0;\n\n aCalled = bCalled = cCalled = dCalled = eCalled = 0;\n\n var obj = _object.default.extend({\n colors: (0, _computed.oneWay)('model'),\n length: (0, _computed.oneWay)('colors.length'),\n\n a: (0, _emberMetal.observer)('length', function () {\n return aCalled++;\n }),\n b: (0, _emberMetal.observer)('colors.length', function () {\n return bCalled++;\n }),\n c: (0, _emberMetal.observer)('colors.content.length', function () {\n return cCalled++;\n }),\n d: (0, _emberMetal.observer)('colors.[]', function () {\n return dCalled++;\n }),\n e: (0, _emberMetal.observer)('colors.content.[]', function () {\n return eCalled++;\n })\n }).create();\n\n obj.set('model', _array_proxy.default.create({\n content: (0, _array.A)(['red', 'yellow', 'blue'])\n }));\n\n assert.equal(obj.get('colors.content.length'), 3);\n assert.equal(obj.get('colors.length'), 3);\n assert.equal(obj.get('length'), 3);\n\n assert.equal(aCalled, 1, 'expected observer `length` to be called ONCE');\n assert.equal(bCalled, 1, 'expected observer `colors.length` to be called ONCE');\n assert.equal(cCalled, 1, 'expected observer `colors.content.length` to be called ONCE');\n assert.equal(dCalled, 1, 'expected observer `colors.[]` to be called ONCE');\n assert.equal(eCalled, 1, 'expected observer `colors.content.[]` to be called ONCE');\n\n obj.get('colors').pushObjects(['green', 'red']);\n\n assert.equal(obj.get('colors.content.length'), 5);\n assert.equal(obj.get('colors.length'), 5);\n assert.equal(obj.get('length'), 5);\n\n assert.equal(aCalled, 2, 'expected observer `length` to be called TWICE');\n assert.equal(bCalled, 2, 'expected observer `colors.length` to be called TWICE');\n assert.equal(cCalled, 2, 'expected observer `colors.content.length` to be called TWICE');\n assert.equal(dCalled, 2, 'expected observer `colors.[]` to be called TWICE');\n assert.equal(eCalled, 2, 'expected observer `colors.content.[]` to be called TWICE');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/array_proxy/watching_and_listening_test', ['ember-babel', 'ember-meta', 'ember-metal', 'ember-runtime/lib/system/array_proxy', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _emberMeta, _emberMetal, _array_proxy, _array, _internalTestHelpers) {\n 'use strict';\n\n function sortedListenersFor(obj, eventName) {\n var listeners = (0, _emberMeta.peekMeta)(obj).matchingListeners(eventName) || [],\n i;\n\n var keys = [];\n for (i = 0; i < listeners.length; i += 3) {\n keys.push(listeners[i + 1]);\n }\n return keys.sort();\n }\n\n (0, _internalTestHelpers.moduleFor)('ArrayProxy - watching and listening', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test setting \\'content\\' adds listeners correctly'] = function (assert) {\n var content = (0, _array.A)();\n var proxy = _array_proxy.default.create();\n\n assert.deepEqual(sortedListenersFor(content, '@array:before'), []);\n assert.deepEqual(sortedListenersFor(content, '@array:change'), []);\n\n proxy.set('content', content);\n\n assert.deepEqual(sortedListenersFor(content, '@array:before'), ['_arrangedContentArrayWillChange']);\n assert.deepEqual(sortedListenersFor(content, '@array:change'), ['_arrangedContentArrayDidChange']);\n };\n\n _class.prototype['@test changing \\'content\\' adds and removes listeners correctly'] = function (assert) {\n var content1 = (0, _array.A)();\n var content2 = (0, _array.A)();\n var proxy = _array_proxy.default.create({ content: content1 });\n\n assert.deepEqual(sortedListenersFor(content1, '@array:before'), ['_arrangedContentArrayWillChange']);\n assert.deepEqual(sortedListenersFor(content1, '@array:change'), ['_arrangedContentArrayDidChange']);\n\n proxy.set('content', content2);\n\n assert.deepEqual(sortedListenersFor(content1, '@array:before'), []);\n assert.deepEqual(sortedListenersFor(content1, '@array:change'), []);\n assert.deepEqual(sortedListenersFor(content2, '@array:before'), ['_arrangedContentArrayWillChange']);\n assert.deepEqual(sortedListenersFor(content2, '@array:change'), ['_arrangedContentArrayDidChange']);\n };\n\n _class.prototype['@test regression test for https://github.com/emberjs/ember.js/issues/12475'] = function (assert) {\n var item1a = { id: 1 };\n var item1b = { id: 2 };\n var item1c = { id: 3 };\n var content1 = (0, _array.A)([item1a, item1b, item1c]);\n\n var proxy = _array_proxy.default.create({ content: content1 });\n var obj = { proxy: proxy };\n\n (0, _emberMetal.defineProperty)(obj, 'ids', (0, _emberMetal.computed)('proxy.@each.id', function () {\n return (0, _emberMetal.get)(this, 'proxy').mapBy('id');\n }));\n\n // These manually added observers are to simulate the observers added by the\n // rendering process in a template like:\n //\n // {{#each items as |item|}}\n // {{item.id}}\n // {{/each}}\n (0, _emberMetal.addObserver)(item1a, 'id', function () {});\n (0, _emberMetal.addObserver)(item1b, 'id', function () {});\n (0, _emberMetal.addObserver)(item1c, 'id', function () {});\n\n // The EachProxy has not yet been consumed. Only the manually added\n // observers are watching.\n assert.equal((0, _emberMetal.watcherCount)(item1a, 'id'), 1);\n assert.equal((0, _emberMetal.watcherCount)(item1b, 'id'), 1);\n assert.equal((0, _emberMetal.watcherCount)(item1c, 'id'), 1);\n\n // Consume the each proxy. This causes the EachProxy to add two observers\n // per item: one for \"before\" events and one for \"after\" events.\n assert.deepEqual((0, _emberMetal.get)(obj, 'ids'), [1, 2, 3]);\n\n // For each item, the two each proxy observers and one manual added observer\n // are watching.\n assert.equal((0, _emberMetal.watcherCount)(item1a, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item1b, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item1c, 'id'), 2);\n\n // This should be a no-op because observers do not fire if the value\n // 1. is an object and 2. is the same as the old value.\n proxy.set('content', content1);\n\n assert.equal((0, _emberMetal.watcherCount)(item1a, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item1b, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item1c, 'id'), 2);\n\n // This is repeated to catch the regression. It should still be a no-op.\n proxy.set('content', content1);\n\n assert.equal((0, _emberMetal.watcherCount)(item1a, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item1b, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item1c, 'id'), 2);\n\n // Set the content to a new array with completely different items and\n // repeat the process.\n var item2a = { id: 4 };\n var item2b = { id: 5 };\n var item2c = { id: 6 };\n var content2 = (0, _array.A)([item2a, item2b, item2c]);\n\n (0, _emberMetal.addObserver)(item2a, 'id', function () {});\n (0, _emberMetal.addObserver)(item2b, 'id', function () {});\n (0, _emberMetal.addObserver)(item2c, 'id', function () {});\n\n proxy.set('content', content2);\n\n assert.deepEqual((0, _emberMetal.get)(obj, 'ids'), [4, 5, 6]);\n\n assert.equal((0, _emberMetal.watcherCount)(item2a, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item2b, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item2c, 'id'), 2);\n\n // Ensure that the observers added by the EachProxy on all items in the\n // first content array have been torn down.\n assert.equal((0, _emberMetal.watcherCount)(item1a, 'id'), 1);\n assert.equal((0, _emberMetal.watcherCount)(item1b, 'id'), 1);\n assert.equal((0, _emberMetal.watcherCount)(item1c, 'id'), 1);\n\n proxy.set('content', content2);\n\n assert.equal((0, _emberMetal.watcherCount)(item2a, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item2b, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item2c, 'id'), 2);\n\n proxy.set('content', content2);\n\n assert.equal((0, _emberMetal.watcherCount)(item2a, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item2b, 'id'), 2);\n assert.equal((0, _emberMetal.watcherCount)(item2c, 'id'), 2);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/core_object_test', ['ember-babel', 'ember-owner', 'ember-metal', 'ember-runtime/lib/system/core_object', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _emberMetal, _core_object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.CoreObject', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test works with new (one arg)'] = function (assert) {\n var obj = new _core_object.default({\n firstName: 'Stef',\n lastName: 'Penner'\n });\n\n assert.equal(obj.firstName, 'Stef');\n assert.equal(obj.lastName, 'Penner');\n };\n\n _class.prototype['@test works with new (> 1 arg)'] = function (assert) {\n var obj = new _core_object.default({\n firstName: 'Stef',\n lastName: 'Penner'\n }, {\n other: 'name'\n });\n\n assert.equal(obj.firstName, 'Stef');\n assert.equal(obj.lastName, 'Penner');\n\n assert.equal(obj.other, undefined); // doesn't support multiple pojo' to the constructor\n };\n\n _class.prototype['@test toString should be not be added as a property when calling toString()'] = function (assert) {\n var obj = new _core_object.default({\n firstName: 'Foo',\n lastName: 'Bar'\n });\n\n obj.toString();\n\n assert.notOk(obj.hasOwnProperty('toString'), 'Calling toString() should not create a toString class property');\n };\n\n _class.prototype['@test should not trigger proxy assertion when retrieving a proxy with (GH#16263)'] = function (assert) {\n var someProxyishThing = _core_object.default.extend({\n unknownProperty: function () {\n return true;\n }\n }).create();\n\n var obj = new _core_object.default({\n someProxyishThing: someProxyishThing\n });\n\n var proxy = (0, _emberMetal.get)(obj, 'someProxyishThing');\n assert.equal((0, _emberMetal.get)(proxy, 'lolol'), true, 'should be able to get data from a proxy');\n };\n\n _class.prototype['@test should not trigger proxy assertion when retrieving a re-registered proxy (GH#16610)'] = function (assert) {\n var owner = (0, _internalTestHelpers.buildOwner)();\n\n var someProxyishThing = _core_object.default.extend({\n unknownProperty: function () {\n return true;\n }\n }).create();\n\n // emulates ember-engines's process of registering services provided\n // by the host app down to the engine\n owner.register('thing:one', someProxyishThing, { instantiate: false });\n\n assert.equal(owner.lookup('thing:one'), someProxyishThing);\n };\n\n _class.prototype['@test should not trigger proxy assertion when probing for a \"symbol\"'] = function (assert) {\n var proxy = _core_object.default.extend({\n unknownProperty: function () {\n return true;\n }\n }).create();\n\n assert.equal((0, _emberMetal.get)(proxy, 'lolol'), true, 'should be able to get data from a proxy');\n\n // should not trigger an assertion\n (0, _emberOwner.getOwner)(proxy);\n };\n\n _class.prototype['@test can use getOwner in a proxy init GH#16484'] = function (assert) {\n var owner = {};\n var options = {};\n (0, _emberOwner.setOwner)(options, owner);\n\n _core_object.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n var localOwner = (0, _emberOwner.getOwner)(this);\n\n assert.equal(localOwner, owner, 'should be able to `getOwner` in init');\n },\n unknownProperty: function () {\n return undefined;\n }\n }).create(options);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/namespace/base_test', ['ember-babel', 'ember-environment', '@ember/runloop', 'ember-metal', 'ember-utils', 'ember-runtime/lib/system/object', 'ember-runtime/lib/system/namespace', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _runloop, _emberMetal, _emberUtils, _object, _namespace, _internalTestHelpers) {\n 'use strict';\n\n var originalLookup = _emberEnvironment.context.lookup;\n var lookup = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Namespace', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n (0, _emberMetal.setNamespaceSearchDisabled)(false);\n\n lookup = _emberEnvironment.context.lookup = {};\n };\n\n _class.prototype.afterEach = function () {\n (0, _emberMetal.setNamespaceSearchDisabled)(false);\n\n for (var prop in lookup) {\n if (lookup[prop]) {\n (0, _runloop.run)(lookup[prop], 'destroy');\n }\n }\n\n _emberEnvironment.context.lookup = originalLookup;\n };\n\n _class.prototype['@test Namespace should be a subclass of EmberObject'] = function (assert) {\n assert.ok(_object.default.detect(_namespace.default));\n };\n\n _class.prototype['@test Namespace should be duck typed'] = function (assert) {\n var namespace = _namespace.default.create();\n try {\n assert.ok((0, _emberMetal.get)(namespace, 'isNamespace'), 'isNamespace property is true');\n } finally {\n (0, _runloop.run)(namespace, 'destroy');\n }\n };\n\n _class.prototype['@test Namespace is found and named'] = function (assert) {\n var nsA = lookup.NamespaceA = _namespace.default.create();\n assert.equal(nsA.toString(), 'NamespaceA', 'namespaces should have a name if they are on lookup');\n\n var nsB = lookup.NamespaceB = _namespace.default.create();\n assert.equal(nsB.toString(), 'NamespaceB', 'namespaces work if created after the first namespace processing pass');\n };\n\n _class.prototype['@test Classes under an Namespace are properly named'] = function (assert) {\n var nsA = lookup.NamespaceA = _namespace.default.create();\n nsA.Foo = _object.default.extend();\n assert.equal(nsA.Foo.toString(), 'NamespaceA.Foo', 'Classes pick up their parent namespace');\n\n nsA.Bar = _object.default.extend();\n assert.equal(nsA.Bar.toString(), 'NamespaceA.Bar', 'New Classes get the naming treatment too');\n\n var nsB = lookup.NamespaceB = _namespace.default.create();\n nsB.Foo = _object.default.extend();\n assert.equal(nsB.Foo.toString(), 'NamespaceB.Foo', 'Classes in new namespaces get the naming treatment');\n };\n\n _class.prototype['@test Lowercase namespaces are no longer supported'] = function (assert) {\n var nsC = lookup.namespaceC = _namespace.default.create();\n assert.equal(nsC.toString(), (0, _emberUtils.guidFor)(nsC));\n };\n\n _class.prototype['@test A namespace can be assigned a custom name'] = function (assert) {\n var nsA = _namespace.default.create({\n name: 'NamespaceA'\n }),\n nsB;\n\n try {\n nsB = lookup.NamespaceB = _namespace.default.create({\n name: 'CustomNamespaceB'\n });\n\n\n nsA.Foo = _object.default.extend();\n nsB.Foo = _object.default.extend();\n\n assert.equal(nsA.Foo.toString(), 'NamespaceA.Foo', \"The namespace's name is used when the namespace is not in the lookup object\");\n assert.equal(nsB.Foo.toString(), 'CustomNamespaceB.Foo', \"The namespace's name is used when the namespace is in the lookup object\");\n } finally {\n (0, _runloop.run)(nsA, 'destroy');\n }\n };\n\n _class.prototype['@test Calling namespace.nameClasses() eagerly names all classes'] = function (assert) {\n (0, _emberMetal.setNamespaceSearchDisabled)(true);\n\n var namespace = lookup.NS = _namespace.default.create();\n\n namespace.ClassA = _object.default.extend();\n namespace.ClassB = _object.default.extend();\n\n _namespace.default.processAll();\n\n assert.equal(namespace.ClassA.toString(), 'NS.ClassA');\n assert.equal(namespace.ClassB.toString(), 'NS.ClassB');\n };\n\n _class.prototype['@test A namespace can be looked up by its name'] = function (assert) {\n var NS = lookup.NS = _namespace.default.create();\n var UI = lookup.UI = _namespace.default.create();\n var CF = lookup.CF = _namespace.default.create();\n\n assert.equal(_namespace.default.byName('NS'), NS);\n assert.equal(_namespace.default.byName('UI'), UI);\n assert.equal(_namespace.default.byName('CF'), CF);\n };\n\n _class.prototype['@test A nested namespace can be looked up by its name'] = function (assert) {\n var UI = lookup.UI = _namespace.default.create();\n UI.Nav = _namespace.default.create();\n\n assert.equal(_namespace.default.byName('UI.Nav'), UI.Nav);\n\n (0, _runloop.run)(UI.Nav, 'destroy');\n };\n\n _class.prototype['@test Destroying a namespace before caching lookup removes it from the list of namespaces'] = function (assert) {\n var CF = lookup.CF = _namespace.default.create();\n\n (0, _runloop.run)(CF, 'destroy');\n assert.equal(_namespace.default.byName('CF'), undefined, 'namespace can not be found after destroyed');\n };\n\n _class.prototype['@test Destroying a namespace after looking up removes it from the list of namespaces'] = function (assert) {\n var CF = lookup.CF = _namespace.default.create();\n\n assert.equal(_namespace.default.byName('CF'), CF, 'precondition - namespace can be looked up by name');\n\n (0, _runloop.run)(CF, 'destroy');\n assert.equal(_namespace.default.byName('CF'), undefined, 'namespace can not be found after destroyed');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/native_array/a_test', ['ember-babel', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.A', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.A'] = function (assert) {\n assert.deepEqual((0, _array.A)([1, 2]), [1, 2], 'array values were not be modified');\n assert.deepEqual((0, _array.A)(), [], 'returned an array with no arguments');\n assert.deepEqual((0, _array.A)(null), [], 'returned an array with a null argument');\n assert.ok(_array.default.detect((0, _array.A)()), 'returned an ember array');\n assert.ok(_array.default.detect((0, _array.A)([1, 2])), 'returned an ember array');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/native_array/copyable_suite_test', ['ember-babel', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('NativeArray Copyable', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test deep copy is respected'] = function (assert) {\n var array = (0, _array.A)([{ id: 1 }, { id: 2 }, { id: 3 }]);\n var copiedArray = void 0;\n\n expectDeprecation(function () {\n copiedArray = array.copy(true);\n }, 'Using `NativeArray#copy` is deprecated');\n\n assert.deepEqual(copiedArray, array, 'copied array is equivalent');\n assert.ok(copiedArray[0] !== array[0], 'objects inside should be unique');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/native_array/replace_test', ['ember-babel', 'ember-runtime/lib/mixins/array', 'internal-test-helpers'], function (_emberBabel, _array, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('NativeArray.replace', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test raises assertion if third argument is not an array'] = function () {\n expectAssertion(function () {\n (0, _array.A)([1, 2, 3]).replace(1, 1, '');\n }, 'The third argument to replace needs to be an array.');\n };\n\n _class.prototype['@test it does not raise an assertion if third parameter is not passed'] = function (assert) {\n assert.deepEqual((0, _array.A)([1, 2, 3]).replace(1, 2), (0, _array.A)([1]), 'no assertion raised');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/computed_test', ['ember-babel', 'ember-metal', '@ember/object/computed', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _computed, _object, _internalTestHelpers) {\n 'use strict';\n\n function K() {\n return this;\n }\n\n function testWithDefault(assert, expect, x, y, z) {\n assert.equal((0, _emberMetal.get)(x, y), expect);\n assert.equal((0, _emberMetal.getWithDefault)(x, y, z), expect);\n assert.equal(x.getWithDefault(y, z), expect);\n }\n\n (0, _internalTestHelpers.moduleFor)('EmberObject computed property', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test computed property on instance'] = function (assert) {\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'FOO';\n })\n });\n\n testWithDefault(assert, 'FOO', new MyClass(), 'foo');\n };\n\n _class.prototype['@test computed property on subclass'] = function (assert) {\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'FOO';\n })\n });\n\n var Subclass = MyClass.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'BAR';\n })\n });\n\n testWithDefault(assert, 'BAR', new Subclass(), 'foo');\n };\n\n _class.prototype['@test replacing computed property with regular val'] = function (assert) {\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'FOO';\n })\n });\n\n var Subclass = MyClass.extend({\n foo: 'BAR'\n });\n\n testWithDefault(assert, 'BAR', new Subclass(), 'foo');\n };\n\n _class.prototype['@test complex depndent keys'] = function (assert) {\n var MyClass = _object.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'bar', { baz: 'BIFF' });\n },\n\n count: 0,\n\n foo: (0, _emberMetal.computed)(function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n return (0, _emberMetal.get)((0, _emberMetal.get)(this, 'bar'), 'baz') + ' ' + (0, _emberMetal.get)(this, 'count');\n }).property('bar.baz')\n });\n\n var Subclass = MyClass.extend({\n count: 20\n });\n\n var obj1 = new MyClass();\n var obj2 = new Subclass();\n\n testWithDefault(assert, 'BIFF 1', obj1, 'foo');\n testWithDefault(assert, 'BIFF 21', obj2, 'foo');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj1, 'bar'), 'baz', 'BLARG');\n\n testWithDefault(assert, 'BLARG 2', obj1, 'foo');\n testWithDefault(assert, 'BIFF 21', obj2, 'foo');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj2, 'bar'), 'baz', 'BOOM');\n\n testWithDefault(assert, 'BLARG 2', obj1, 'foo');\n testWithDefault(assert, 'BOOM 22', obj2, 'foo');\n };\n\n _class.prototype['@test complex dependent keys changing complex dependent keys'] = function (assert) {\n var MyClass = _object.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'bar', { baz: 'BIFF' });\n },\n\n count: 0,\n\n foo: (0, _emberMetal.computed)(function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n return (0, _emberMetal.get)((0, _emberMetal.get)(this, 'bar'), 'baz') + ' ' + (0, _emberMetal.get)(this, 'count');\n }).property('bar.baz')\n });\n\n var Subclass = MyClass.extend({\n init: function () {\n this._super.apply(this, arguments);\n (0, _emberMetal.set)(this, 'bar2', { baz: 'BIFF2' });\n },\n\n count: 0,\n\n foo: (0, _emberMetal.computed)(function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n return (0, _emberMetal.get)((0, _emberMetal.get)(this, 'bar2'), 'baz') + ' ' + (0, _emberMetal.get)(this, 'count');\n }).property('bar2.baz')\n });\n\n var obj2 = new Subclass();\n\n testWithDefault(assert, 'BIFF2 1', obj2, 'foo');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj2, 'bar'), 'baz', 'BLARG');\n testWithDefault(assert, 'BIFF2 1', obj2, 'foo'); // should not invalidate property\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj2, 'bar2'), 'baz', 'BLARG');\n testWithDefault(assert, 'BLARG 2', obj2, 'foo'); // should not invalidate property\n };\n\n _class.prototype['@test can retrieve metadata for a computed property'] = function (assert) {\n var MyClass = _object.default.extend({\n computedProperty: (0, _emberMetal.computed)(function () {}).meta({ key: 'keyValue' })\n });\n\n assert.equal((0, _emberMetal.get)(MyClass.metaForProperty('computedProperty'), 'key'), 'keyValue', 'metadata saved on the computed property can be retrieved');\n\n var ClassWithNoMetadata = _object.default.extend({\n computedProperty: (0, _emberMetal.computed)(function () {}).volatile(),\n\n staticProperty: 12\n });\n\n assert.equal(typeof ClassWithNoMetadata.metaForProperty('computedProperty'), 'object', 'returns empty hash if no metadata has been saved');\n\n expectAssertion(function () {\n ClassWithNoMetadata.metaForProperty('nonexistentProperty');\n }, \"metaForProperty() could not find a computed property with key 'nonexistentProperty'.\");\n\n expectAssertion(function () {\n ClassWithNoMetadata.metaForProperty('staticProperty');\n }, \"metaForProperty() could not find a computed property with key 'staticProperty'.\");\n };\n\n _class.prototype['@test overriding a computed property with null removes it from eachComputedProperty iteration'] = function (assert) {\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {}),\n\n fooDidChange: (0, _emberMetal.observer)('foo', function () {}),\n\n bar: (0, _emberMetal.computed)(function () {})\n });\n\n var SubClass = MyClass.extend({\n foo: null\n });\n\n var list = [];\n\n SubClass.eachComputedProperty(function (name) {\n return list.push(name);\n });\n\n assert.deepEqual(list.sort(), ['bar'], 'overridding with null removes from eachComputedProperty listing');\n };\n\n _class.prototype['@test can iterate over a list of computed properties for a class'] = function (assert) {\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {}),\n\n fooDidChange: (0, _emberMetal.observer)('foo', function () {}),\n\n bar: (0, _emberMetal.computed)(function () {}),\n\n qux: (0, _emberMetal.alias)('foo')\n });\n\n var SubClass = MyClass.extend({\n baz: (0, _emberMetal.computed)(function () {})\n });\n\n SubClass.reopen({\n bat: (0, _emberMetal.computed)(function () {}).meta({ iAmBat: true })\n });\n\n var list = [];\n\n MyClass.eachComputedProperty(function (name) {\n list.push(name);\n });\n\n assert.deepEqual(list.sort(), ['bar', 'foo', 'qux'], 'watched and unwatched computed properties are iterated');\n\n list = [];\n\n SubClass.eachComputedProperty(function (name, meta) {\n list.push(name);\n\n if (name === 'bat') {\n assert.deepEqual(meta, { iAmBat: true });\n } else {\n assert.deepEqual(meta, {});\n }\n });\n\n assert.deepEqual(list.sort(), ['bar', 'bat', 'baz', 'foo', 'qux'], 'all inherited properties are included');\n };\n\n _class.prototype['@test list of properties updates when an additional property is added (such cache busting)'] = function (assert) {\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(K),\n\n fooDidChange: (0, _emberMetal.observer)('foo', function () {}),\n\n bar: (0, _emberMetal.computed)(K)\n });\n\n var list = [];\n\n MyClass.eachComputedProperty(function (name) {\n list.push(name);\n });\n\n assert.deepEqual(list.sort(), ['bar', 'foo'].sort(), 'expected two computed properties');\n\n MyClass.reopen({\n baz: (0, _emberMetal.computed)(K)\n });\n\n MyClass.create(); // force apply mixins\n\n list = [];\n\n MyClass.eachComputedProperty(function (name) {\n list.push(name);\n });\n\n assert.deepEqual(list.sort(), ['bar', 'foo', 'baz'].sort(), 'expected three computed properties');\n\n (0, _emberMetal.defineProperty)(MyClass.prototype, 'qux', (0, _emberMetal.computed)(K));\n\n list = [];\n\n MyClass.eachComputedProperty(function (name) {\n list.push(name);\n });\n\n assert.deepEqual(list.sort(), ['bar', 'foo', 'baz', 'qux'].sort(), 'expected four computed properties');\n };\n\n _class.prototype['@test Calling _super in call outside the immediate function of a CP getter works'] = function (assert) {\n\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'FOO';\n })\n });\n\n var SubClass = MyClass.extend({\n foo: function (callback) {\n return (0, _emberMetal.computed)(function () {\n return callback.call(this);\n });\n }(function () {\n return this._super();\n })\n });\n\n assert.ok((0, _emberMetal.get)(SubClass.create(), 'foo'), 'FOO', 'super value is fetched');\n };\n\n _class.prototype['@test Calling _super in apply outside the immediate function of a CP getter works'] = function (assert) {\n\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'FOO';\n })\n });\n\n var SubClass = MyClass.extend({\n foo: function (callback) {\n return (0, _emberMetal.computed)(function () {\n return callback.apply(this);\n });\n }(function () {\n return this._super();\n })\n });\n\n assert.ok((0, _emberMetal.get)(SubClass.create(), 'foo'), 'FOO', 'super value is fetched');\n };\n\n _class.prototype['@test observing computed.reads prop and overriding it in create() works'] = function (assert) {\n var Obj = _object.default.extend({\n name: (0, _computed.oneWay)('model.name'),\n nameDidChange: (0, _emberMetal.observer)('name', function () {})\n });\n\n var obj1 = Obj.create({ name: '1' });\n var obj2 = Obj.create({ name: '2' });\n\n assert.equal(obj1.get('name'), '1');\n assert.equal(obj2.get('name'), '2');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/create_test', ['ember-babel', 'ember-owner', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberOwner, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('EmberObject.create', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test simple properties are set'] = function (assert) {\n var o = _object.default.create({ ohai: 'there' });\n assert.equal(o.get('ohai'), 'there');\n };\n\n _class.prototype['@test calls computed property setters'] = function (assert) {\n var MyClass = _object.default.extend({\n foo: (0, _emberMetal.computed)({\n get: function () {\n return \"this is not the value you're looking for\";\n },\n set: function (key, value) {\n return value;\n }\n })\n });\n\n var o = MyClass.create({ foo: 'bar' });\n assert.equal(o.get('foo'), 'bar');\n };\n\n _class.prototype['@test sets up mandatory setters for watched simple properties'] = function (assert) {\n assert.expect(0);\n };\n\n _class.prototype['@test calls setUnknownProperty if defined'] = function (assert) {\n var setUnknownPropertyCalled = false;\n\n var MyClass = _object.default.extend({\n setUnknownProperty: function () /* key, value */{\n setUnknownPropertyCalled = true;\n }\n });\n\n MyClass.create({ foo: 'bar' });\n assert.ok(setUnknownPropertyCalled, 'setUnknownProperty was called');\n };\n\n _class.prototype['@test throws if you try to define a computed property'] = function () {\n expectAssertion(function () {\n _object.default.create({\n foo: (0, _emberMetal.computed)(function () {})\n });\n }, 'EmberObject.create no longer supports defining computed properties. Define computed properties using extend() or reopen() before calling create().');\n };\n\n _class.prototype['@test throws if you try to call _super in a method'] = function () {\n expectAssertion(function () {\n _object.default.create({\n foo: function () {\n this._super.apply(this, arguments);\n }\n });\n }, 'EmberObject.create no longer supports defining methods that call _super.');\n };\n\n _class.prototype[\"@test throws if you try to 'mixin' a definition\"] = function () {\n var myMixin = _emberMetal.Mixin.create({\n adder: function (arg1, arg2) {\n return arg1 + arg2;\n }\n });\n\n expectAssertion(function () {\n _object.default.create(myMixin);\n }, 'EmberObject.create no longer supports mixing in other definitions, use .extend & .create separately instead.');\n };\n\n _class.prototype['@test inherits properties from passed in EmberObject'] = function (assert) {\n var baseObj = _object.default.create({ foo: 'bar' });\n var secondaryObj = _object.default.create(baseObj);\n\n assert.equal(secondaryObj.foo, baseObj.foo, 'Em.O.create inherits properties from EmberObject parameter');\n };\n\n _class.prototype['@test throws if you try to pass anything a string as a parameter'] = function () {\n\n expectAssertion(function () {\n return _object.default.create('some-string');\n }, 'EmberObject.create only accepts objects.');\n };\n\n _class.prototype['@test EmberObject.create can take undefined as a parameter'] = function (assert) {\n var o = _object.default.create(undefined);\n assert.deepEqual(_object.default.create(), o);\n };\n\n _class.prototype['@test can use getOwner in a proxy init GH#16484'] = function (assert) {\n var owner = {};\n var options = {};\n (0, _emberOwner.setOwner)(options, owner);\n\n _object.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n var localOwner = (0, _emberOwner.getOwner)(this);\n\n assert.equal(localOwner, owner, 'should be able to `getOwner` in init');\n },\n unknownProperty: function () {\n return undefined;\n }\n }).create(options);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/destroy_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-meta', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _emberMeta, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-runtime/system/object/destroy_test', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should schedule objects to be destroyed at the end of the run loop'] = function (assert) {\n var obj = _object.default.create();\n var meta = void 0;\n\n (0, _runloop.run)(function () {\n obj.destroy();\n meta = (0, _emberMeta.peekMeta)(obj);\n assert.ok(meta, 'meta is not destroyed immediately');\n assert.ok((0, _emberMetal.get)(obj, 'isDestroying'), 'object is marked as destroying immediately');\n assert.ok(!(0, _emberMetal.get)(obj, 'isDestroyed'), 'object is not destroyed immediately');\n });\n\n meta = (0, _emberMeta.peekMeta)(obj);\n assert.ok((0, _emberMetal.get)(obj, 'isDestroyed'), 'object is destroyed after run loop finishes');\n };\n\n _class.prototype['@test should raise an exception when modifying watched properties on a destroyed object'] = function (assert) {\n assert.expect(0);\n };\n\n _class.prototype['@test observers should not fire after an object has been destroyed'] = function (assert) {\n var count = 0;\n var obj = _object.default.extend({\n fooDidChange: (0, _emberMetal.observer)('foo', function () {\n count++;\n })\n }).create();\n\n obj.set('foo', 'bar');\n\n assert.equal(count, 1, 'observer was fired once');\n\n (0, _runloop.run)(function () {\n (0, _emberMetal.beginPropertyChanges)();\n obj.set('foo', 'quux');\n obj.destroy();\n (0, _emberMetal.endPropertyChanges)();\n });\n\n assert.equal(count, 1, 'observer was not called after object was destroyed');\n };\n\n _class.prototype['@test destroyed objects should not see each others changes during teardown but a long lived object should'] = function (assert) {\n var shouldChange = 0;\n var shouldNotChange = 0;\n\n var objs = {};\n\n var A = _object.default.extend({\n objs: objs,\n isAlive: true,\n willDestroy: function () {\n this.set('isAlive', false);\n },\n\n bDidChange: (0, _emberMetal.observer)('objs.b.isAlive', function () {\n shouldNotChange++;\n }),\n cDidChange: (0, _emberMetal.observer)('objs.c.isAlive', function () {\n shouldNotChange++;\n })\n });\n\n var B = _object.default.extend({\n objs: objs,\n isAlive: true,\n willDestroy: function () {\n this.set('isAlive', false);\n },\n\n aDidChange: (0, _emberMetal.observer)('objs.a.isAlive', function () {\n shouldNotChange++;\n }),\n cDidChange: (0, _emberMetal.observer)('objs.c.isAlive', function () {\n shouldNotChange++;\n })\n });\n\n var C = _object.default.extend({\n objs: objs,\n isAlive: true,\n willDestroy: function () {\n this.set('isAlive', false);\n },\n\n aDidChange: (0, _emberMetal.observer)('objs.a.isAlive', function () {\n shouldNotChange++;\n }),\n bDidChange: (0, _emberMetal.observer)('objs.b.isAlive', function () {\n shouldNotChange++;\n })\n });\n\n var LongLivedObject = _object.default.extend({\n objs: objs,\n isAliveDidChange: (0, _emberMetal.observer)('objs.a.isAlive', function () {\n shouldChange++;\n })\n });\n\n objs.a = new A();\n\n objs.b = new B();\n\n objs.c = new C();\n\n new LongLivedObject();\n\n (0, _runloop.run)(function () {\n var keys = Object.keys(objs),\n i;\n for (i = 0; i < keys.length; i++) {\n objs[keys[i]].destroy();\n }\n });\n\n assert.equal(shouldNotChange, 0, 'destroyed graph objs should not see change in willDestroy');\n assert.equal(shouldChange, 1, 'long lived should see change in willDestroy');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/detectInstance_test', ['ember-babel', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/object/detectInstance', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test detectInstance detects instances correctly'] = function (assert) {\n var A = _object.default.extend();\n var B = A.extend();\n var C = A.extend();\n\n var o = _object.default.create();\n var a = A.create();\n var b = B.create();\n var c = C.create();\n\n assert.ok(_object.default.detectInstance(o), 'o is an instance of EmberObject');\n assert.ok(_object.default.detectInstance(a), 'a is an instance of EmberObject');\n assert.ok(_object.default.detectInstance(b), 'b is an instance of EmberObject');\n assert.ok(_object.default.detectInstance(c), 'c is an instance of EmberObject');\n\n assert.ok(!A.detectInstance(o), 'o is not an instance of A');\n assert.ok(A.detectInstance(a), 'a is an instance of A');\n assert.ok(A.detectInstance(b), 'b is an instance of A');\n assert.ok(A.detectInstance(c), 'c is an instance of A');\n\n assert.ok(!B.detectInstance(o), 'o is not an instance of B');\n assert.ok(!B.detectInstance(a), 'a is not an instance of B');\n assert.ok(B.detectInstance(b), 'b is an instance of B');\n assert.ok(!B.detectInstance(c), 'c is not an instance of B');\n\n assert.ok(!C.detectInstance(o), 'o is not an instance of C');\n assert.ok(!C.detectInstance(a), 'a is not an instance of C');\n assert.ok(!C.detectInstance(b), 'b is not an instance of C');\n assert.ok(C.detectInstance(c), 'c is an instance of C');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/detect_test', ['ember-babel', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/object/detect', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test detect detects classes correctly'] = function (assert) {\n var A = _object.default.extend();\n var B = A.extend();\n var C = A.extend();\n\n assert.ok(_object.default.detect(_object.default), 'EmberObject is an EmberObject class');\n assert.ok(_object.default.detect(A), 'A is an EmberObject class');\n assert.ok(_object.default.detect(B), 'B is an EmberObject class');\n assert.ok(_object.default.detect(C), 'C is an EmberObject class');\n\n assert.ok(!A.detect(_object.default), 'EmberObject is not an A class');\n assert.ok(A.detect(A), 'A is an A class');\n assert.ok(A.detect(B), 'B is an A class');\n assert.ok(A.detect(C), 'C is an A class');\n\n assert.ok(!B.detect(_object.default), 'EmberObject is not a B class');\n assert.ok(!B.detect(A), 'A is not a B class');\n assert.ok(B.detect(B), 'B is a B class');\n assert.ok(!B.detect(C), 'C is not a B class');\n\n assert.ok(!C.detect(_object.default), 'EmberObject is not a C class');\n assert.ok(!C.detect(A), 'A is not a C class');\n assert.ok(!C.detect(B), 'B is not a C class');\n assert.ok(C.detect(C), 'C is a C class');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/es-compatibility-test', ['ember-babel', 'ember-runtime/lib/system/object', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _object, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('EmberObject ES Compatibility', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test extending an Ember.Object'] = function (assert) {\n var calls = [];\n\n var MyObject = function (_EmberObject) {\n (0, _emberBabel.inherits)(MyObject, _EmberObject);\n\n function MyObject() {\n\n calls.push('constructor');\n\n var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _EmberObject.apply(this, arguments));\n\n _this2.postInitProperty = 'post-init-property';\n return _this2;\n }\n\n MyObject.prototype.init = function () {\n var _EmberObject$prototyp;\n\n calls.push('init');\n (_EmberObject$prototyp = _EmberObject.prototype.init).call.apply(_EmberObject$prototyp, [this].concat(Array.prototype.slice.call(arguments)));\n this.initProperty = 'init-property';\n };\n\n return MyObject;\n }(_object.default);\n\n var myObject = MyObject.create({ passedProperty: 'passed-property' });\n\n assert.deepEqual(calls, ['constructor', 'init'], 'constructor then init called (create)');\n assert.equal(myObject.postInitProperty, 'post-init-property', 'constructor property available on instance (create)');\n assert.equal(myObject.initProperty, 'init-property', 'init property available on instance (create)');\n assert.equal(myObject.passedProperty, 'passed-property', 'passed property available on instance (create)');\n calls = [];\n myObject = new MyObject({ passedProperty: 'passed-property' });\n\n assert.deepEqual(calls, ['constructor', 'init'], 'constructor then init called (new)');\n assert.equal(myObject.postInitProperty, 'post-init-property', 'constructor property available on instance (new)');\n assert.equal(myObject.initProperty, 'init-property', 'init property available on instance (new)');\n assert.equal(myObject.passedProperty, 'passed-property', 'passed property available on instance (new)');\n };\n\n _class.prototype['@test normal method super'] = function (assert) {\n var calls = [];\n\n var Foo = _object.default.extend({\n method: function () {\n calls.push('foo');\n }\n });\n\n var Bar = Foo.extend({\n method: function () {\n this._super();\n calls.push('bar');\n }\n });\n\n var Baz = function (_Bar) {\n (0, _emberBabel.inherits)(Baz, _Bar);\n\n function Baz() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _Bar.apply(this, arguments));\n }\n\n Baz.prototype.method = function () {\n _Bar.prototype.method.call(this);\n calls.push('baz');\n };\n\n return Baz;\n }(Bar);\n\n var Qux = Baz.extend({\n method: function () {\n this._super();\n calls.push('qux');\n }\n });\n\n var Quux = Qux.extend({\n method: function () {\n this._super();\n calls.push('quux');\n }\n });\n\n var Corge = function (_Quux) {\n (0, _emberBabel.inherits)(Corge, _Quux);\n\n function Corge() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _Quux.apply(this, arguments));\n }\n\n Corge.prototype.method = function () {\n _Quux.prototype.method.call(this);\n calls.push('corge');\n };\n\n return Corge;\n }(Quux);\n\n var callValues = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge'];\n\n [Foo, Bar, Baz, Qux, Quux, Corge].forEach(function (Class, index) {\n calls = [];\n new Class().method();\n\n assert.deepEqual(calls, callValues.slice(0, index + 1), 'chain of static methods called with super');\n });\n };\n\n _class.prototype['@test static method super'] = function (assert) {\n var calls = void 0;\n\n var Foo = _object.default.extend();\n Foo.reopenClass({\n method: function () {\n calls.push('foo');\n }\n });\n\n var Bar = Foo.extend();\n Bar.reopenClass({\n method: function () {\n this._super();\n calls.push('bar');\n }\n });\n\n var Baz = function (_Bar2) {\n (0, _emberBabel.inherits)(Baz, _Bar2);\n\n function Baz() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _Bar2.apply(this, arguments));\n }\n\n Baz.method = function () {\n _Bar2.method.call(this);\n calls.push('baz');\n };\n\n return Baz;\n }(Bar);\n\n var Qux = Baz.extend();\n Qux.reopenClass({\n method: function () {\n this._super();\n calls.push('qux');\n }\n });\n\n var Quux = Qux.extend();\n Quux.reopenClass({\n method: function () {\n this._super();\n calls.push('quux');\n }\n });\n\n var Corge = function (_Quux2) {\n (0, _emberBabel.inherits)(Corge, _Quux2);\n\n function Corge() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _Quux2.apply(this, arguments));\n }\n\n Corge.method = function () {\n _Quux2.method.call(this);\n calls.push('corge');\n };\n\n return Corge;\n }(Quux);\n\n var callValues = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge'];\n\n [Foo, Bar, Baz, Qux, Quux, Corge].forEach(function (Class, index) {\n calls = [];\n Class.method();\n\n assert.deepEqual(calls, callValues.slice(0, index + 1), 'chain of static methods called with super');\n });\n };\n\n _class.prototype['@test using mixins'] = function (assert) {\n var Mixin1 = _emberMetal.Mixin.create({\n property1: 'data-1'\n });\n\n var Mixin2 = _emberMetal.Mixin.create({\n property2: 'data-2'\n });\n\n var MyObject = function (_EmberObject$extend) {\n (0, _emberBabel.inherits)(MyObject, _EmberObject$extend);\n\n function MyObject() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EmberObject$extend.apply(this, arguments));\n }\n\n return MyObject;\n }(_object.default.extend(Mixin1, Mixin2));\n\n var myObject = new MyObject();\n assert.equal(myObject.property1, 'data-1', 'includes the first mixin');\n assert.equal(myObject.property2, 'data-2', 'includes the second mixin');\n };\n\n _class.prototype['@test using instanceof'] = function (assert) {\n var MyObject = function (_EmberObject2) {\n (0, _emberBabel.inherits)(MyObject, _EmberObject2);\n\n function MyObject() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EmberObject2.apply(this, arguments));\n }\n\n return MyObject;\n }(_object.default);\n\n var myObject1 = MyObject.create();\n var myObject2 = new MyObject();\n\n assert.ok(myObject1 instanceof MyObject);\n assert.ok(myObject1 instanceof _object.default);\n\n assert.ok(myObject2 instanceof MyObject);\n assert.ok(myObject2 instanceof _object.default);\n };\n\n _class.prototype['@test extending an ES subclass of EmberObject'] = function (assert) {\n var calls = [];\n\n var SubEmberObject = function (_EmberObject3) {\n (0, _emberBabel.inherits)(SubEmberObject, _EmberObject3);\n\n function SubEmberObject() {\n\n calls.push('constructor');\n return (0, _emberBabel.possibleConstructorReturn)(this, _EmberObject3.apply(this, arguments));\n }\n\n SubEmberObject.prototype.init = function () {\n var _EmberObject3$prototy;\n\n calls.push('init');\n (_EmberObject3$prototy = _EmberObject3.prototype.init).call.apply(_EmberObject3$prototy, [this].concat(Array.prototype.slice.call(arguments)));\n };\n\n return SubEmberObject;\n }(_object.default);\n\n var MyObject = function (_SubEmberObject) {\n (0, _emberBabel.inherits)(MyObject, _SubEmberObject);\n\n function MyObject() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _SubEmberObject.apply(this, arguments));\n }\n\n return MyObject;\n }(SubEmberObject);\n\n MyObject.create();\n assert.deepEqual(calls, ['constructor', 'init'], 'constructor then init called (create)');\n\n calls = [];\n new MyObject();\n assert.deepEqual(calls, ['constructor', 'init'], 'constructor then init called (new)');\n };\n\n _class.prototype['@test calling extend on an ES subclass of EmberObject'] = function (assert) {\n var calls = [];\n\n var SubEmberObject = function (_EmberObject4) {\n (0, _emberBabel.inherits)(SubEmberObject, _EmberObject4);\n\n function SubEmberObject() {\n\n calls.push('before constructor');\n\n var _this11 = (0, _emberBabel.possibleConstructorReturn)(this, _EmberObject4.apply(this, arguments));\n\n calls.push('after constructor');\n _this11.foo = 123;\n return _this11;\n }\n\n SubEmberObject.prototype.init = function () {\n var _EmberObject4$prototy;\n\n calls.push('init');\n (_EmberObject4$prototy = _EmberObject4.prototype.init).call.apply(_EmberObject4$prototy, [this].concat(Array.prototype.slice.call(arguments)));\n };\n\n return SubEmberObject;\n }(_object.default);\n\n var MyObject = SubEmberObject.extend({});\n\n MyObject.create();\n assert.deepEqual(calls, ['before constructor', 'init', 'after constructor'], 'constructor then init called (create)');\n\n calls = [];\n new MyObject();\n assert.deepEqual(calls, ['before constructor', 'init', 'after constructor'], 'constructor then init called (new)');\n\n var obj = MyObject.create({\n foo: 456,\n bar: 789\n });\n\n assert.equal(obj.foo, 123, 'sets class fields on instance correctly');\n assert.equal(obj.bar, 789, 'sets passed in properties on instance correctly');\n };\n\n _class.prototype['@test calling metaForProperty on a native class works'] = function (assert) {\n assert.expect(0);\n\n var SubEmberObject = function (_EmberObject5) {\n (0, _emberBabel.inherits)(SubEmberObject, _EmberObject5);\n\n function SubEmberObject() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EmberObject5.apply(this, arguments));\n }\n\n return SubEmberObject;\n }(_object.default);\n\n (0, _emberMetal.defineProperty)(SubEmberObject.prototype, 'foo', (0, _emberMetal.computed)('foo', {\n get: function () {\n return 'bar';\n }\n }));\n\n // able to get meta without throwing an error\n SubEmberObject.metaForProperty('foo');\n };\n\n _class.prototype['@test super and _super interop between old and new methods'] = function (assert) {\n var calls = [];\n var changes = [];\n var events = [];\n var lastProps = void 0;\n\n var A = function (_EmberObject6) {\n (0, _emberBabel.inherits)(A, _EmberObject6);\n\n function A() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _EmberObject6.apply(this, arguments));\n }\n\n A.prototype.init = function (props) {\n calls.push('A init');\n lastProps = props;\n };\n\n return A;\n }(_object.default);\n\n var Mixin1 = _emberMetal.Mixin.create({\n init: function () {\n calls.push('Mixin1 init before _super');\n this._super.apply(this, arguments);\n calls.push('Mixin1 init after _super');\n }\n });\n\n var Mixin2 = _emberMetal.Mixin.create({\n init: function () {\n calls.push('Mixin2 init before _super');\n this._super.apply(this, arguments);\n calls.push('Mixin2 init after _super');\n }\n });\n\n var B = function (_A$extend) {\n (0, _emberBabel.inherits)(B, _A$extend);\n\n function B() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _A$extend.apply(this, arguments));\n }\n\n B.prototype.init = function () {\n var _A$extend$prototype$i;\n\n calls.push('B init before super.init');\n (_A$extend$prototype$i = _A$extend.prototype.init).call.apply(_A$extend$prototype$i, [this].concat(Array.prototype.slice.call(arguments)));\n calls.push('B init after super.init');\n };\n\n B.prototype.onSomeEvent = function (evt) {\n events.push('B onSomeEvent ' + evt);\n };\n\n B.prototype.fullNameDidChange = function () {\n changes.push('B fullNameDidChange');\n };\n\n return B;\n }(A.extend(Mixin1, Mixin2));\n\n // // define a CP\n (0, _emberMetal.defineProperty)(B.prototype, 'full', (0, _emberMetal.computed)('first', 'last', {\n get: function () {\n return this.first + ' ' + this.last;\n }\n }));\n\n // Only string observers are allowed for prototypes\n (0, _emberMetal.addObserver)(B.prototype, 'full', null, 'fullNameDidChange');\n\n // Only string listeners are allowed for prototypes\n (0, _emberMetal.addListener)(B.prototype, 'someEvent', null, 'onSomeEvent');\n\n B.reopen({\n init: function () {\n calls.push('reopen init before _super');\n this._super.apply(this, arguments);\n calls.push('reopen init after _super');\n }\n });\n\n var C = B.extend({\n init: function () {\n calls.push('C init before _super');\n this._super.apply(this, arguments);\n calls.push('C init after _super');\n },\n onSomeEvent: function (evt) {\n calls.push('C onSomeEvent before _super');\n this._super(evt);\n calls.push('C onSomeEvent after _super');\n },\n fullNameDidChange: function () {\n calls.push('C fullNameDidChange before _super');\n this._super();\n calls.push('C fullNameDidChange after _super');\n }\n });\n\n var D = function (_C) {\n (0, _emberBabel.inherits)(D, _C);\n\n function D(props) {\n\n if (props.last === undefined) {\n props.last = 'Jackson';\n }\n return (0, _emberBabel.possibleConstructorReturn)(this, _C.call(this, props));\n }\n\n D.prototype.init = function () {\n var _C$prototype$init;\n\n calls.push('D init before super.init');\n (_C$prototype$init = _C.prototype.init).call.apply(_C$prototype$init, [this].concat(Array.prototype.slice.call(arguments)));\n calls.push('D init after super.init');\n };\n\n D.prototype.onSomeEvent = function (evt) {\n events.push('D onSomeEvent before super.onSomeEvent');\n _C.prototype.onSomeEvent.call(this, evt);\n events.push('D onSomeEvent after super.onSomeEvent');\n };\n\n D.prototype.fullNameDidChange = function () {\n changes.push('D fullNameDidChange before super.fullNameDidChange');\n _C.prototype.fullNameDidChange.call(this);\n changes.push('D fullNameDidChange after super.fullNameDidChange');\n };\n\n D.prototype.triggerSomeEvent = function () {\n var _len, args, _key;\n\n for (_len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n (0, _emberMetal.sendEvent)(this, 'someEvent', args);\n };\n\n return D;\n }(C);\n\n assert.deepEqual(calls, [], 'nothing has been called');\n assert.deepEqual(changes, [], 'full has not changed');\n assert.deepEqual(events, [], 'onSomeEvent has not been triggered');\n\n var d = D.create({ first: 'Robert' });\n\n assert.deepEqual(calls, ['D init before super.init', 'C init before _super', 'reopen init before _super', 'B init before super.init', 'Mixin2 init before _super', 'Mixin1 init before _super', 'A init', 'Mixin1 init after _super', 'Mixin2 init after _super', 'B init after super.init', 'reopen init after _super', 'C init after _super', 'D init after super.init']);\n assert.deepEqual(changes, [], 'full has not changed');\n assert.deepEqual(events, [], 'onSomeEvent has not been triggered');\n\n assert.deepEqual(lastProps, {\n first: 'Robert',\n last: 'Jackson'\n });\n\n assert.equal(d.full, 'Robert Jackson');\n\n d.setProperties({ first: 'Kris', last: 'Selden' });\n assert.deepEqual(changes, ['D fullNameDidChange before super.fullNameDidChange', 'B fullNameDidChange', 'D fullNameDidChange after super.fullNameDidChange']);\n\n assert.equal(d.full, 'Kris Selden');\n\n d.triggerSomeEvent('event arg');\n assert.deepEqual(events, ['D onSomeEvent before super.onSomeEvent', 'B onSomeEvent event arg', 'D onSomeEvent after super.onSomeEvent']);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/events_test', ['ember-babel', 'ember-runtime/lib/system/object', 'ember-runtime/lib/mixins/evented', 'internal-test-helpers'], function (_emberBabel, _object, _evented, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Object events', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test a listener can be added to an object'] = function (assert) {\n var count = 0;\n var F = function () {\n count++;\n };\n\n var obj = _object.default.extend(_evented.default).create();\n\n obj.on('event!', F);\n obj.trigger('event!');\n\n assert.equal(count, 1, 'the event was triggered');\n\n obj.trigger('event!');\n\n assert.equal(count, 2, 'the event was triggered');\n };\n\n _class.prototype['@test a listener can be added and removed automatically the first time it is triggered'] = function (assert) {\n var count = 0;\n var F = function () {\n count++;\n };\n\n var obj = _object.default.extend(_evented.default).create();\n\n obj.one('event!', F);\n obj.trigger('event!');\n\n assert.equal(count, 1, 'the event was triggered');\n\n obj.trigger('event!');\n\n assert.equal(count, 1, 'the event was not triggered again');\n };\n\n _class.prototype['@test triggering an event can have arguments'] = function (assert) {\n var self = void 0,\n args = void 0;\n\n var obj = _object.default.extend(_evented.default).create();\n\n obj.on('event!', function () {\n args = [].slice.call(arguments);\n self = this;\n });\n\n obj.trigger('event!', 'foo', 'bar');\n\n assert.deepEqual(args, ['foo', 'bar']);\n assert.equal(self, obj);\n };\n\n _class.prototype['@test a listener can be added and removed automatically and have arguments'] = function (assert) {\n var self = void 0,\n args = void 0;\n var count = 0;\n\n var obj = _object.default.extend(_evented.default).create();\n\n obj.one('event!', function () {\n args = [].slice.call(arguments);\n self = this;\n count++;\n });\n\n obj.trigger('event!', 'foo', 'bar');\n\n assert.deepEqual(args, ['foo', 'bar']);\n assert.equal(self, obj);\n assert.equal(count, 1, 'the event is triggered once');\n\n obj.trigger('event!', 'baz', 'bat');\n\n assert.deepEqual(args, ['foo', 'bar']);\n assert.equal(count, 1, 'the event was not triggered again');\n assert.equal(self, obj);\n };\n\n _class.prototype['@test binding an event can specify a different target'] = function (assert) {\n var self = void 0,\n args = void 0;\n\n var obj = _object.default.extend(_evented.default).create();\n var target = {};\n\n obj.on('event!', target, function () {\n args = [].slice.call(arguments);\n self = this;\n });\n\n obj.trigger('event!', 'foo', 'bar');\n\n assert.deepEqual(args, ['foo', 'bar']);\n assert.equal(self, target);\n };\n\n _class.prototype['@test a listener registered with one can take method as string and can be added with different target'] = function (assert) {\n var count = 0;\n var target = {};\n target.fn = function () {\n count++;\n };\n\n var obj = _object.default.extend(_evented.default).create();\n\n obj.one('event!', target, 'fn');\n obj.trigger('event!');\n\n assert.equal(count, 1, 'the event was triggered');\n\n obj.trigger('event!');\n\n assert.equal(count, 1, 'the event was not triggered again');\n };\n\n _class.prototype['@test a listener registered with one can be removed with off'] = function (assert) {\n var obj = _object.default.extend(_evented.default, {\n F: function () {}\n }).create();\n var F = function () {};\n\n obj.one('event!', F);\n obj.one('event!', obj, 'F');\n\n assert.equal(obj.has('event!'), true, 'has events');\n\n obj.off('event!', F);\n obj.off('event!', obj, 'F');\n\n assert.equal(obj.has('event!'), false, 'has no more events');\n };\n\n _class.prototype['@test adding and removing listeners should be chainable'] = function (assert) {\n var obj = _object.default.extend(_evented.default).create();\n var F = function () {};\n\n var ret = obj.on('event!', F);\n assert.equal(ret, obj, '#on returns self');\n\n ret = obj.off('event!', F);\n assert.equal(ret, obj, '#off returns self');\n\n ret = obj.one('event!', F);\n assert.equal(ret, obj, '#one returns self');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/extend_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('EmberObject.extend', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Basic extend'] = function (assert) {\n var SomeClass = _object.default.extend({ foo: 'BAR' });\n assert.ok(SomeClass.isClass, 'A class has isClass of true');\n var obj = new SomeClass();\n assert.equal(obj.foo, 'BAR');\n };\n\n _class.prototype['@test Sub-subclass'] = function (assert) {\n var SomeClass = _object.default.extend({ foo: 'BAR' });\n var AnotherClass = SomeClass.extend({ bar: 'FOO' });\n var obj = new AnotherClass();\n assert.equal(obj.foo, 'BAR');\n assert.equal(obj.bar, 'FOO');\n };\n\n _class.prototype['@test Overriding a method several layers deep'] = function (assert) {\n var SomeClass = _object.default.extend({\n fooCnt: 0,\n foo: function () {\n this.fooCnt++;\n },\n\n barCnt: 0,\n bar: function () {\n this.barCnt++;\n }\n });\n\n var AnotherClass = SomeClass.extend({\n barCnt: 0,\n bar: function () {\n this.barCnt++;\n this._super.apply(this, arguments);\n }\n });\n\n var FinalClass = AnotherClass.extend({\n fooCnt: 0,\n foo: function () {\n this.fooCnt++;\n this._super.apply(this, arguments);\n }\n });\n\n var obj = new FinalClass();\n obj.foo();\n obj.bar();\n assert.equal(obj.fooCnt, 2, 'should invoke both');\n assert.equal(obj.barCnt, 2, 'should invoke both');\n\n // Try overriding on create also\n obj = FinalClass.extend({\n foo: function () {\n this.fooCnt++;\n this._super.apply(this, arguments);\n }\n }).create();\n\n obj.foo();\n obj.bar();\n assert.equal(obj.fooCnt, 3, 'should invoke final as well');\n assert.equal(obj.barCnt, 2, 'should invoke both');\n };\n\n _class.prototype['@test With concatenatedProperties'] = function (assert) {\n var SomeClass = _object.default.extend({\n things: 'foo',\n concatenatedProperties: ['things']\n });\n var AnotherClass = SomeClass.extend({ things: 'bar' });\n var YetAnotherClass = SomeClass.extend({ things: 'baz' });\n var some = new SomeClass();\n var another = new AnotherClass();\n var yetAnother = new YetAnotherClass();\n assert.deepEqual(some.get('things'), ['foo'], 'base class should have just its value');\n assert.deepEqual(another.get('things'), ['foo', 'bar'], \"subclass should have base class' and its own\");\n assert.deepEqual(yetAnother.get('things'), ['foo', 'baz'], \"subclass should have base class' and its own\");\n };\n\n _class.prototype['@test With concatenatedProperties class properties'] = function (assert) {\n var SomeClass = _object.default.extend();\n SomeClass.reopenClass({\n concatenatedProperties: ['things'],\n things: 'foo'\n });\n var AnotherClass = SomeClass.extend();\n AnotherClass.reopenClass({ things: 'bar' });\n var YetAnotherClass = SomeClass.extend();\n YetAnotherClass.reopenClass({ things: 'baz' });\n var some = new SomeClass();\n var another = new AnotherClass();\n var yetAnother = new YetAnotherClass();\n assert.deepEqual((0, _emberMetal.get)(some.constructor, 'things'), ['foo'], 'base class should have just its value');\n assert.deepEqual((0, _emberMetal.get)(another.constructor, 'things'), ['foo', 'bar'], \"subclass should have base class' and its own\");\n assert.deepEqual((0, _emberMetal.get)(yetAnother.constructor, 'things'), ['foo', 'baz'], \"subclass should have base class' and its own\");\n };\n\n _class.prototype['@test Overriding a computed property with an observer'] = function (assert) {\n var Parent = _object.default.extend({\n foo: (0, _emberMetal.computed)(function () {\n return 'FOO';\n })\n });\n\n var seen = [];\n\n var Child = Parent.extend({\n foo: (0, _emberMetal.observer)('bar', function () {\n seen.push(this.get('bar'));\n })\n });\n\n var child = Child.create({ bar: 0 });\n\n assert.deepEqual(seen, []);\n\n child.set('bar', 1);\n\n assert.deepEqual(seen, [1]);\n\n child.set('bar', 2);\n\n assert.deepEqual(seen, [1, 2]);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/observer_test', ['ember-babel', '@ember/runloop', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('EmberObject observer', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test observer on class'] = function (assert) {\n var MyClass = _object.default.extend({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = new MyClass();\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observer on subclass'] = function (assert) {\n var MyClass = _object.default.extend({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var Subclass = MyClass.extend({\n foo: (0, _emberMetal.observer)('baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = new Subclass();\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer after change');\n\n (0, _emberMetal.set)(obj, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observer on instance'] = function (assert) {\n var obj = _object.default.extend({\n foo: (0, _emberMetal.observer)('bar', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n }).create({\n count: 0\n });\n\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observer on instance overriding class'] = function (assert) {\n var MyClass = _object.default.extend({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj = MyClass.extend({\n foo: (0, _emberMetal.observer)('baz', function () {\n // <-- change property we observe\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n }).create();\n\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer immediately');\n\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer after change');\n\n (0, _emberMetal.set)(obj, 'baz', 'BAZ');\n assert.equal((0, _emberMetal.get)(obj, 'count'), 1, 'should invoke observer after change');\n };\n\n _class.prototype['@test observer should not fire after being destroyed'] = function (assert) {\n var obj = _object.default.extend({\n count: 0,\n foo: (0, _emberMetal.observer)('bar', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n }).create();\n\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'precond - should not invoke observer immediately');\n\n (0, _runloop.run)(function () {\n return obj.destroy();\n });\n\n expectAssertion(function () {\n (0, _emberMetal.set)(obj, 'bar', 'BAZ');\n }, 'calling set on destroyed object: ' + obj + '.bar = BAZ');\n\n assert.equal((0, _emberMetal.get)(obj, 'count'), 0, 'should not invoke observer after change');\n };\n\n _class.prototype['@test chain observer on class'] = function (assert) {\n var MyClass = _object.default.extend({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj1 = MyClass.create({\n bar: { baz: 'biff' }\n });\n\n var obj2 = MyClass.create({\n bar: { baz: 'biff2' }\n });\n\n assert.equal((0, _emberMetal.get)(obj1, 'count'), 0, 'should not invoke yet');\n assert.equal((0, _emberMetal.get)(obj2, 'count'), 0, 'should not invoke yet');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj1, 'bar'), 'baz', 'BIFF1');\n assert.equal((0, _emberMetal.get)(obj1, 'count'), 1, 'should invoke observer on obj1');\n assert.equal((0, _emberMetal.get)(obj2, 'count'), 0, 'should not invoke yet');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj2, 'bar'), 'baz', 'BIFF2');\n assert.equal((0, _emberMetal.get)(obj1, 'count'), 1, 'should not invoke again');\n assert.equal((0, _emberMetal.get)(obj2, 'count'), 1, 'should invoke observer on obj2');\n };\n\n _class.prototype['@test chain observer on class'] = function (assert) {\n var MyClass = _object.default.extend({\n count: 0,\n\n foo: (0, _emberMetal.observer)('bar.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n });\n\n var obj1 = MyClass.extend().create({\n bar: { baz: 'biff' }\n });\n\n var obj2 = MyClass.extend({\n foo: (0, _emberMetal.observer)('bar2.baz', function () {\n (0, _emberMetal.set)(this, 'count', (0, _emberMetal.get)(this, 'count') + 1);\n })\n }).create({\n bar: { baz: 'biff2' },\n bar2: { baz: 'biff3' }\n });\n\n assert.equal((0, _emberMetal.get)(obj1, 'count'), 0, 'should not invoke yet');\n assert.equal((0, _emberMetal.get)(obj2, 'count'), 0, 'should not invoke yet');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj1, 'bar'), 'baz', 'BIFF1');\n assert.equal((0, _emberMetal.get)(obj1, 'count'), 1, 'should invoke observer on obj1');\n assert.equal((0, _emberMetal.get)(obj2, 'count'), 0, 'should not invoke yet');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj2, 'bar'), 'baz', 'BIFF2');\n assert.equal((0, _emberMetal.get)(obj1, 'count'), 1, 'should not invoke again');\n assert.equal((0, _emberMetal.get)(obj2, 'count'), 0, 'should not invoke yet');\n\n (0, _emberMetal.set)((0, _emberMetal.get)(obj2, 'bar2'), 'baz', 'BIFF3');\n assert.equal((0, _emberMetal.get)(obj1, 'count'), 1, 'should not invoke again');\n assert.equal((0, _emberMetal.get)(obj2, 'count'), 1, 'should invoke observer on obj2');\n };\n\n _class.prototype['@test chain observer on class that has a reference to an uninitialized object will finish chains that reference it'] = function (assert) {\n var changed = false;\n\n var ChildClass = _object.default.extend({\n parent: null,\n parentOneTwoDidChange: (0, _emberMetal.observer)('parent.one.two', function () {\n changed = true;\n })\n });\n\n var ParentClass = _object.default.extend({\n one: {\n two: 'old'\n },\n init: function () {\n this.child = ChildClass.create({\n parent: this\n });\n }\n });\n\n var parent = new ParentClass();\n\n assert.equal(changed, false, 'precond');\n\n (0, _emberMetal.set)(parent, 'one.two', 'new');\n\n assert.equal(changed, true, 'child should have been notified of change to path');\n\n (0, _emberMetal.set)(parent, 'one', { two: 'newer' });\n\n assert.equal(changed, true, 'child should have been notified of change to path');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/reopenClass_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/object/reopenClass', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test adds new properties to subclass'] = function (assert) {\n var Subclass = _object.default.extend();\n Subclass.reopenClass({\n foo: function () {\n return 'FOO';\n },\n\n bar: 'BAR'\n });\n\n assert.equal(Subclass.foo(), 'FOO', 'Adds method');\n assert.equal((0, _emberMetal.get)(Subclass, 'bar'), 'BAR', 'Adds property');\n };\n\n _class.prototype['@test class properties inherited by subclasses'] = function (assert) {\n var Subclass = _object.default.extend();\n Subclass.reopenClass({\n foo: function () {\n return 'FOO';\n },\n\n bar: 'BAR'\n });\n\n var SubSub = Subclass.extend();\n\n assert.equal(SubSub.foo(), 'FOO', 'Adds method');\n assert.equal((0, _emberMetal.get)(SubSub, 'bar'), 'BAR', 'Adds property');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/reopen_test', ['ember-babel', 'ember-metal', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('system/core_object/reopen', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test adds new properties to subclass instance'] = function (assert) {\n var Subclass = _object.default.extend();\n Subclass.reopen({\n foo: function () {\n return 'FOO';\n },\n\n bar: 'BAR'\n });\n\n assert.equal(new Subclass().foo(), 'FOO', 'Adds method');\n assert.equal((0, _emberMetal.get)(new Subclass(), 'bar'), 'BAR', 'Adds property');\n };\n\n _class.prototype['@test reopened properties inherited by subclasses'] = function (assert) {\n var Subclass = _object.default.extend();\n var SubSub = Subclass.extend();\n\n Subclass.reopen({\n foo: function () {\n return 'FOO';\n },\n\n bar: 'BAR'\n });\n\n assert.equal(new SubSub().foo(), 'FOO', 'Adds method');\n assert.equal((0, _emberMetal.get)(new SubSub(), 'bar'), 'BAR', 'Adds property');\n };\n\n _class.prototype['@test allows reopening already instantiated classes'] = function (assert) {\n var Subclass = _object.default.extend();\n\n Subclass.create();\n\n Subclass.reopen({\n trololol: true\n });\n\n assert.equal(Subclass.create().get('trololol'), true, 'reopen works');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/strict-mode-test', ['ember-babel', 'ember-runtime/lib/system/object', 'internal-test-helpers'], function (_emberBabel, _object, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('strict mode tests', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test __superWrapper does not throw errors in strict mode'] = function (assert) {\n var Foo = _object.default.extend({\n blah: function () {\n return 'foo';\n }\n });\n\n var Bar = Foo.extend({\n blah: function () {\n return 'bar';\n },\n callBlah: function () {\n var blah = this.blah;\n\n return blah();\n }\n });\n\n var bar = Bar.create();\n\n assert.equal(bar.callBlah(), 'bar', 'can call local function without call/apply');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object/toString_test', ['ember-babel', '@ember/runloop', 'ember-utils', 'ember-environment', 'ember-runtime/lib/system/object', 'ember-runtime/lib/system/namespace', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberUtils, _emberEnvironment, _object, _namespace, _internalTestHelpers) {\n 'use strict';\n\n var originalLookup = _emberEnvironment.context.lookup;\n var lookup = void 0;\n\n (0, _internalTestHelpers.moduleFor)('system/object/toString', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n _emberEnvironment.context.lookup = lookup = {};\n };\n\n _class.prototype.afterEach = function () {\n _emberEnvironment.context.lookup = originalLookup;\n };\n\n _class.prototype['@test toString() returns the same value if called twice'] = function (assert) {\n var Foo = _namespace.default.create();\n Foo.toString = function () {\n return 'Foo';\n };\n\n Foo.Bar = _object.default.extend();\n\n assert.equal(Foo.Bar.toString(), 'Foo.Bar');\n assert.equal(Foo.Bar.toString(), 'Foo.Bar');\n\n var obj = Foo.Bar.create();\n\n assert.equal(obj.toString(), '');\n assert.equal(obj.toString(), '');\n\n assert.equal(Foo.Bar.toString(), 'Foo.Bar');\n\n (0, _runloop.run)(Foo, 'destroy');\n };\n\n _class.prototype['@test toString on a class returns a useful value when nested in a namespace'] = function (assert) {\n var obj = void 0;\n\n var Foo = _namespace.default.create();\n Foo.toString = function () {\n return 'Foo';\n };\n\n Foo.Bar = _object.default.extend();\n assert.equal(Foo.Bar.toString(), 'Foo.Bar');\n\n obj = Foo.Bar.create();\n assert.equal(obj.toString(), '');\n\n Foo.Baz = Foo.Bar.extend();\n assert.equal(Foo.Baz.toString(), 'Foo.Baz');\n\n obj = Foo.Baz.create();\n assert.equal(obj.toString(), '');\n\n obj = Foo.Bar.create();\n assert.equal(obj.toString(), '');\n\n (0, _runloop.run)(Foo, 'destroy');\n };\n\n _class.prototype['@test toString on a namespace finds the namespace in lookup'] = function (assert) {\n var Foo = lookup.Foo = _namespace.default.create();\n\n assert.equal(Foo.toString(), 'Foo');\n\n (0, _runloop.run)(Foo, 'destroy');\n };\n\n _class.prototype['@test toString on a namespace finds the namespace in lookup'] = function (assert) {\n var Foo = lookup.Foo = _namespace.default.create();\n var obj = void 0;\n\n Foo.Bar = _object.default.extend();\n\n assert.equal(Foo.Bar.toString(), 'Foo.Bar');\n\n obj = Foo.Bar.create();\n assert.equal(obj.toString(), '');\n\n (0, _runloop.run)(Foo, 'destroy');\n };\n\n _class.prototype['@test toString on a namespace falls back to modulePrefix, if defined'] = function (assert) {\n var Foo = _namespace.default.create({ modulePrefix: 'foo' });\n\n assert.equal(Foo.toString(), 'foo');\n\n (0, _runloop.run)(Foo, 'destroy');\n };\n\n _class.prototype['@test toString includes toStringExtension if defined'] = function (assert) {\n var Foo = _object.default.extend({\n toStringExtension: function () {\n return 'fooey';\n }\n });\n var foo = Foo.create();\n var Bar = _object.default.extend({});\n var bar = Bar.create();\n\n // simulate these classes being defined on a Namespace\n (0, _emberUtils.setName)(Foo, 'Foo');\n (0, _emberUtils.setName)(Bar, 'Bar');\n\n assert.equal(bar.toString(), '', 'does not include toStringExtension part');\n assert.equal(foo.toString(), '', 'Includes toStringExtension result');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-runtime/tests/system/object_proxy_test', ['ember-babel', 'ember-metal', 'ember-utils', 'ember-runtime/lib/system/object_proxy', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _emberUtils, _object_proxy, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ObjectProxy', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test should not proxy properties passed to create'] = function (assert) {\n var Proxy = _object_proxy.default.extend({\n cp: (0, _emberMetal.computed)({\n get: function () {\n return this._cp;\n },\n set: function (key, value) {\n this._cp = value;\n return this._cp;\n }\n })\n });\n var proxy = Proxy.create({\n prop: 'Foo',\n cp: 'Bar'\n });\n\n assert.equal((0, _emberMetal.get)(proxy, 'prop'), 'Foo', 'should not have tried to proxy set');\n assert.equal(proxy._cp, 'Bar', 'should use CP setter');\n };\n\n _class.prototype['@test should proxy properties to content'] = function (assert) {\n var content = {\n firstName: 'Tom',\n lastName: 'Dale',\n unknownProperty: function (key) {\n return key + ' unknown';\n }\n };\n var proxy = _object_proxy.default.create();\n\n assert.equal((0, _emberMetal.get)(proxy, 'firstName'), undefined, 'get on proxy without content should return undefined');\n expectAssertion(function () {\n (0, _emberMetal.set)(proxy, 'firstName', 'Foo');\n }, /Cannot delegate set\\('firstName', Foo\\) to the 'content'/i);\n\n (0, _emberMetal.set)(proxy, 'content', content);\n\n assert.equal((0, _emberMetal.get)(proxy, 'firstName'), 'Tom', 'get on proxy with content should forward to content');\n assert.equal((0, _emberMetal.get)(proxy, 'lastName'), 'Dale', 'get on proxy with content should forward to content');\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'foo unknown', 'get on proxy with content should forward to content');\n\n (0, _emberMetal.set)(proxy, 'lastName', 'Huda');\n\n assert.equal((0, _emberMetal.get)(content, 'lastName'), 'Huda', 'content should have new value from set on proxy');\n assert.equal((0, _emberMetal.get)(proxy, 'lastName'), 'Huda', 'proxy should have new value from set on proxy');\n\n (0, _emberMetal.set)(proxy, 'content', { firstName: 'Yehuda', lastName: 'Katz' });\n\n assert.equal((0, _emberMetal.get)(proxy, 'firstName'), 'Yehuda', 'proxy should reflect updated content');\n assert.equal((0, _emberMetal.get)(proxy, 'lastName'), 'Katz', 'proxy should reflect updated content');\n };\n\n _class.prototype['@test getting proxied properties with Ember.get should work'] = function (assert) {\n var proxy = _object_proxy.default.create({\n content: {\n foo: 'FOO'\n }\n });\n\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'FOO');\n };\n\n _class.prototype['@test JSON.stringify doens\\'t assert'] = function (assert) {\n var proxy = _object_proxy.default.create({\n content: {\n foo: 'FOO'\n }\n });\n\n assert.equal(JSON.stringify(proxy), JSON.stringify({ content: { foo: 'FOO' } }));\n };\n\n _class.prototype['@test calling a function on the proxy avoids the assertion'] = function (assert) {\n assert.expect(0);\n };\n\n _class.prototype['@test setting a property on the proxy avoids the assertion'] = function (assert) {\n var proxy = _object_proxy.default.create({\n toJSON: undefined,\n content: {\n toJSON: function () {\n return 'hello';\n }\n }\n });\n\n assert.equal(JSON.stringify(proxy), JSON.stringify({ content: 'hello' }));\n };\n\n _class.prototype['@test setting a property on the proxy\\'s prototype avoids the assertion'] = function (assert) {\n var proxy = _object_proxy.default.extend({\n toJSON: null\n }).create({\n content: {\n toJSON: function () {\n return 'hello';\n }\n }\n });\n\n assert.equal(JSON.stringify(proxy), JSON.stringify({ content: 'hello' }));\n };\n\n _class.prototype['@test getting proxied properties with [] should be an error'] = function (assert) {\n assert.expect(0);\n };\n\n _class.prototype['@test should work with watched properties'] = function (assert) {\n var content1 = { firstName: 'Tom', lastName: 'Dale' };\n var content2 = { firstName: 'Yehuda', lastName: 'Katz' };\n var count = 0;\n var last = void 0;\n\n var Proxy = _object_proxy.default.extend({\n fullName: (0, _emberMetal.computed)(function () {\n var firstName = this.get('firstName');\n var lastName = this.get('lastName');\n\n if (firstName && lastName) {\n return firstName + ' ' + lastName;\n }\n return firstName || lastName;\n }).property('firstName', 'lastName')\n });\n\n var proxy = Proxy.create();\n\n (0, _emberMetal.addObserver)(proxy, 'fullName', function () {\n last = (0, _emberMetal.get)(proxy, 'fullName');\n count++;\n });\n\n // proxy without content returns undefined\n assert.equal((0, _emberMetal.get)(proxy, 'fullName'), undefined);\n\n // setting content causes all watched properties to change\n (0, _emberMetal.set)(proxy, 'content', content1);\n // both dependent keys changed\n assert.equal(count, 2);\n assert.equal(last, 'Tom Dale');\n\n // setting property in content causes proxy property to change\n (0, _emberMetal.set)(content1, 'lastName', 'Huda');\n assert.equal(count, 3);\n assert.equal(last, 'Tom Huda');\n\n // replacing content causes all watched properties to change\n (0, _emberMetal.set)(proxy, 'content', content2);\n // both dependent keys changed\n assert.equal(count, 5);\n assert.equal(last, 'Yehuda Katz');\n // content1 is no longer watched\n assert.ok(!(0, _emberMetal.isWatching)(content1, 'firstName'), 'not watching firstName');\n assert.ok(!(0, _emberMetal.isWatching)(content1, 'lastName'), 'not watching lastName');\n\n // setting property in new content\n (0, _emberMetal.set)(content2, 'firstName', 'Tomhuda');\n assert.equal(last, 'Tomhuda Katz');\n assert.equal(count, 6);\n\n // setting property in proxy syncs with new content\n (0, _emberMetal.set)(proxy, 'lastName', 'Katzdale');\n assert.equal(count, 7);\n assert.equal(last, 'Tomhuda Katzdale');\n assert.equal((0, _emberMetal.get)(content2, 'firstName'), 'Tomhuda');\n assert.equal((0, _emberMetal.get)(content2, 'lastName'), 'Katzdale');\n };\n\n _class.prototype['@test set and get should work with paths'] = function (assert) {\n var proxy = _object_proxy.default.create({ content: { foo: { bar: 'baz' } } });\n var count = 0;\n\n proxy.set('foo.bar', 'hello');\n assert.equal(proxy.get('foo.bar'), 'hello');\n assert.equal(proxy.get('content.foo.bar'), 'hello');\n\n proxy.addObserver('foo.bar', function () {\n count++;\n });\n\n proxy.set('foo.bar', 'bye');\n\n assert.equal(count, 1);\n assert.equal(proxy.get('foo.bar'), 'bye');\n assert.equal(proxy.get('content.foo.bar'), 'bye');\n };\n\n _class.prototype['@test should transition between watched and unwatched strategies'] = function (assert) {\n var content = { foo: 'foo' };\n var proxy = _object_proxy.default.create({ content: content });\n var count = 0;\n\n function observer() {\n count++;\n }\n\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'foo');\n\n (0, _emberMetal.set)(content, 'foo', 'bar');\n\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'bar');\n\n (0, _emberMetal.set)(proxy, 'foo', 'foo');\n\n assert.equal((0, _emberMetal.get)(content, 'foo'), 'foo');\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'foo');\n\n (0, _emberMetal.addObserver)(proxy, 'foo', observer);\n\n assert.equal(count, 0);\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'foo');\n\n (0, _emberMetal.set)(content, 'foo', 'bar');\n\n assert.equal(count, 1);\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'bar');\n\n (0, _emberMetal.set)(proxy, 'foo', 'foo');\n\n assert.equal(count, 2);\n assert.equal((0, _emberMetal.get)(content, 'foo'), 'foo');\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'foo');\n\n (0, _emberMetal.removeObserver)(proxy, 'foo', observer);\n\n (0, _emberMetal.set)(content, 'foo', 'bar');\n\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'bar');\n\n (0, _emberMetal.set)(proxy, 'foo', 'foo');\n\n assert.equal((0, _emberMetal.get)(content, 'foo'), 'foo');\n assert.equal((0, _emberMetal.get)(proxy, 'foo'), 'foo');\n };\n\n _class.prototype['@test setting `undefined` to a proxied content property should override its existing value'] = function (assert) {\n var proxyObject = _object_proxy.default.create({\n content: {\n prop: 'emberjs'\n }\n });\n (0, _emberMetal.set)(proxyObject, 'prop', undefined);\n assert.equal((0, _emberMetal.get)(proxyObject, 'prop'), undefined, 'sets the `undefined` value to the proxied content');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-if-helper-without-arguments-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-if-helper-without-argument', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test block if helper expects one argument'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{#if}}aVal{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '#if requires a single argument. (\\'baz/foo-bar\\' @ L1:C0) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if val1 val2}}aVal{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '#if requires a single argument. (\\'baz/foo-bar\\' @ L1:C0) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if}}aVal{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '#if requires a single argument. (\\'baz/foo-bar\\' @ L1:C0) ');\n };\n\n _class.prototype['@test inline if helper expects between one and three arguments'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, 'The inline form of the \\'if\\' helper expects two or three arguments. (\\'baz/foo-bar\\' @ L1:C0) ');\n\n (0, _index.compile)('{{if foo bar baz}}', {\n moduleName: 'baz/foo-bar'\n });\n };\n\n _class.prototype['@test subexpression if helper expects between one and three arguments'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{input foo=(if)}}', {\n moduleName: 'baz/foo-bar'\n });\n }, 'The inline form of the \\'if\\' helper expects two or three arguments. (\\'baz/foo-bar\\' @ L1:C12) ');\n\n (0, _index.compile)('{{some-thing foo=(if foo bar baz)}}', {\n moduleName: 'baz/foo-bar'\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-input-helper-without-block-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-input-helper-without-block', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Using {{#input}}{{/input}} is not valid'] = function () {\n\n expectAssertion(function () {\n (0, _index.compile)('{{#input value=\"123\"}}Completely invalid{{/input}}', {\n moduleName: 'baz/foo-bar'\n });\n }, 'The {{input}} helper cannot be used in block form. (\\'baz/foo-bar\\' @ L1:C0) ');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-reserved-named-arguments-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-reserved-named-arguments (EMBER_GLIMMER_NAMED_ARGUMENTS) ', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test \\'@arguments\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@arguments}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @arguments}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @arguments \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@args\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@args}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @args}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @args \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@block\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@block}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@block\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @block}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@block\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @block \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@block\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@else\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@else}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@else\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @else}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@else\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @else \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@else\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@Arguments\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@Arguments}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @Arguments}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @Arguments \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Arguments\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@Args\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@Args}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @Args}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @Args \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Args\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@FOO\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@FOO}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@FOO\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @FOO}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@FOO\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @FOO \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@FOO\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@Foo\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@Foo}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Foo\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @Foo}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Foo\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @Foo \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@Foo\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@.\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@.}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@.\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @.}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@.\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @. \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@.\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@_\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@_}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@_\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @_}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@_\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @_ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@_\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@-\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@-}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@-\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @-}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@-\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @- \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@-\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@$\\' is reserved'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{@$}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@$\\' is reserved. (\\'baz/foo-bar\\' @ L1:C2) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{#if @$}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@$\\' is reserved. (\\'baz/foo-bar\\' @ L1:C6) ');\n\n expectAssertion(function () {\n (0, _index.compile)('{{input type=(if @$ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, '\\'@$\\' is reserved. (\\'baz/foo-bar\\' @ L1:C17) ');\n };\n\n _class.prototype['@test \\'@\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@0\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@0}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @0}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @0 \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@1\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@1}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @1}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @1 \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@2\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@2}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @2}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @2 \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@@\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@@}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @@}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @@ \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@=\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@=}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @=}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @= \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n _class.prototype['@test \\'@!\\' is de facto reserved (parse error)'] = function (assert) {\n assert.throws(function () {\n (0, _index.compile)('{{@!}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{#if @!}}Yup{{/if}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n\n assert.throws(function () {\n (0, _index.compile)('{{input type=(if @! \"bar\" \"baz\")}}', {\n moduleName: 'baz/foo-bar'\n });\n }, /Expecting 'ID'/);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/assert-splattribute-expression-test', ['ember-babel', 'internal-test-helpers', 'ember-template-compiler/index'], function (_emberBabel, _internalTestHelpers, _index) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: assert-splattribute-expression', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.expectedMessage = function (locInfo) {\n return 'Using \"...attributes\" can only be used in the element position e.g.
. It cannot be used as a path. (' + locInfo + ') ';\n };\n\n _class.prototype['@test ...attributes is in element space'] = function (assert) {\n assert.expect(0);\n\n (0, _index.compile)('Foo
');\n };\n\n _class.prototype['@test {{...attributes}} is not valid'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{...attributes}}
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C7'));\n };\n\n _class.prototype['@test {{...attributes}} is not valid path expression'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('{{...attributes}}
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C7'));\n };\n\n _class.prototype['@test {{...attributes}} is not valid modifier'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('Wat
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C7'));\n };\n\n _class.prototype['@test {{...attributes}} is not valid attribute'] = function () {\n expectAssertion(function () {\n (0, _index.compile)('Wat
', {\n moduleName: 'foo-bar'\n });\n }, this.expectedMessage('\\'foo-bar\\' @ L1:C13'));\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/deprecate-render-model-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: deprecate-model-render', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Using `{{render` with model provides a deprecation'] = function () {\n\n expectDeprecation(function () {\n (0, _index.compile)('{{render \"foo-bar\" coolModel}}', {\n moduleName: 'baz/foo-bar'\n });\n }, 'Please refactor `{{render \"foo-bar\" coolModel}}` to a component and' + ' invoke via `{{foo-bar model=coolModel}}`. (\\'baz/foo-bar\\' @ L1:C0) ');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/deprecate-render-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: deprecate-render', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Using `{{render` without a model provides a deprecation'] = function () {\n\n expectDeprecation(function () {\n (0, _index.compile)('{{render \"foo-bar\"}}', {\n moduleName: 'baz/foo-bar'\n });\n }, 'Please refactor `{{render \"foo-bar\"}}` to a component and' + ' invoke via `{{foo-bar}}`. (\\'baz/foo-bar\\' @ L1:C0) ');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/deprecate-send-action-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n var DeprecateSendActionTest = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(DeprecateSendActionTest, _AbstractTestCase);\n\n function DeprecateSendActionTest() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n return DeprecateSendActionTest;\n }(_internalTestHelpers.AbstractTestCase);\n\n ['insert-newline', 'enter', 'escape-press', 'focus-in', 'focus-out', 'key-press', 'key-up', 'key-down'].forEach(function (e) {\n DeprecateSendActionTest.prototype['@test Using `{{input ' + e + '=\"actionName\"}}` provides a deprecation'] = function () {\n\n expectDeprecation(function () {\n (0, _index.compile)('{{input ' + e + '=\"foo-bar\"}}', { moduleName: 'baz/foo-bar' });\n }, 'Please refactor `{{input ' + e + '=\"foo-bar\"}}` to `{{input ' + e + '=(action \"foo-bar\")}}. (\\'baz/foo-bar\\' @ L1:C0) ');\n };\n });\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: deprecate-send-action', DeprecateSendActionTest);\n});","enifed('ember-template-compiler/tests/plugins/transform-dot-component-invocation-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: transforms dot component invocation', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Does not throw a compiler error for path components'] = function (assert) {\n assert.expect(0);\n\n ['{{this.modal open}}', '{{this.modal isOpen=true}}', '{{#this.modal}}Woot{{/this.modal}}', '{{c.modal open}}', '{{c.modal isOpen=true}}', '{{#c.modal}}Woot{{/c.modal}}', '{{#my-component as |c|}}{{c.a name=\"Chad\"}}{{/my-component}}', '{{#my-component as |c|}}{{c.a \"Chad\"}}{{/my-component}}', '{{#my-component as |c|}}{{#c.a}}{{/c.a}}{{/my-component}}', ' ', // GH#15740\n ' '].forEach(function (layout, i) {\n (0, _index.compile)(layout, { moduleName: 'example-' + i });\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/transform-inline-link-to-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: inline-link-to', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Can transform an inline {{link-to}} without error'] = function (assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{link-to \\'foo\\' \\'index\\'}}', {\n moduleName: 'foo/bar/baz'\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/plugins/transform-input-type-syntax-test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: input type syntax', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Can compile an {{input}} helper that has a sub-expression value as its type'] = function (assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{input type=(if true \\'password\\' \\'text\\')}}');\n };\n\n _class.prototype['@test Can compile an {{input}} helper with a string literal type'] = function (assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{input type=\\'text\\'}}');\n };\n\n _class.prototype['@test Can compile an {{input}} helper with a type stored in a var'] = function (assert) {\n assert.expect(0);\n\n (0, _index.compile)('{{input type=_type}}');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/system/bootstrap-test', ['ember-babel', '@ember/runloop', 'ember-glimmer', 'ember-template-compiler/lib/system/bootstrap', 'internal-test-helpers'], function (_emberBabel, _runloop, _emberGlimmer, _bootstrap, _internalTestHelpers) {\n 'use strict';\n\n var component = void 0,\n fixture = void 0;\n\n function checkTemplate(templateName, assert) {\n (0, _runloop.run)(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n });\n\n var template = (0, _emberGlimmer.getTemplate)(templateName);\n var qunitFixture = document.querySelector('#qunit-fixture');\n\n assert.ok(template, 'template is available on Ember.TEMPLATES');\n assert.notOk(qunitFixture.querySelector('script'), 'script removed');\n\n var owner = (0, _internalTestHelpers.buildOwner)();\n owner.register('template:-top-level', template);\n owner.register('component:-top-level', _emberGlimmer.Component.extend({\n layoutName: '-top-level',\n firstName: 'Tobias',\n drug: 'teamocil'\n }));\n\n component = owner.lookup('component:-top-level');\n (0, _internalTestHelpers.runAppend)(component);\n\n assert.equal(qunitFixture.textContent.trim(), 'Tobias takes teamocil', 'template works');\n (0, _internalTestHelpers.runDestroy)(owner);\n }\n\n (0, _internalTestHelpers.moduleFor)('ember-templates: bootstrap', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n fixture = document.getElementById('qunit-fixture');\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _emberGlimmer.setTemplates)({});\n fixture = component = null;\n };\n\n _class.prototype['@test template with data-template-name should add a new template to Ember.TEMPLATES'] = function (assert) {\n fixture.innerHTML = '';\n\n checkTemplate('funkyTemplate', assert);\n };\n\n _class.prototype['@test template with id instead of data-template-name should add a new template to Ember.TEMPLATES'] = function (assert) {\n fixture.innerHTML = '';\n\n checkTemplate('funkyTemplate', assert);\n };\n\n _class.prototype['@test template without data-template-name or id should default to application'] = function (assert) {\n fixture.innerHTML = '';\n\n checkTemplate('application', assert);\n };\n\n _class.prototype[(typeof Handlebars === 'object' ? '@test' : '@skip') + ' template with type text/x-raw-handlebars should be parsed'] = function (assert) {\n fixture.innerHTML = '';\n\n (0, _runloop.run)(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n });\n\n var template = (0, _emberGlimmer.getTemplate)('funkyTemplate');\n\n assert.ok(template, 'template with name funkyTemplate available');\n\n // This won't even work with Ember templates\n assert.equal(template({ name: 'Tobias' }).trim(), 'Tobias');\n };\n\n _class.prototype['@test duplicated default application templates should throw exception'] = function (assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test default default application template and id application template present should throw exception'] = function (assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test default application template and data-template-name application template present should throw exception'] = function (assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test duplicated template id should throw exception'] = function (assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n _class.prototype['@test duplicated template data-template-name should throw exception'] = function (assert) {\n fixture.innerHTML = '';\n\n assert.throws(function () {\n return (0, _bootstrap.default)({ context: fixture, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n }, /Template named \"[^\"]+\" already exists\\./, 'duplicate templates should not be allowed');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-template-compiler/tests/system/compile_options_test', ['ember-babel', 'ember-template-compiler/index', 'internal-test-helpers'], function (_emberBabel, _index, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: default compile options', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test default options are a new copy'] = function (assert) {\n assert.notEqual((0, _index.compileOptions)(), (0, _index.compileOptions)());\n };\n\n _class.prototype['@test has default AST plugins'] = function (assert) {\n assert.expect(_index.defaultPlugins.length);\n\n var plugins = (0, _index.compileOptions)().plugins.ast,\n i,\n plugin;\n\n for (i = 0; i < _index.defaultPlugins.length; i++) {\n plugin = _index.defaultPlugins[i];\n\n assert.ok(plugins.indexOf(plugin) > -1, 'includes ' + plugin);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n var customTransformCounter = 0;\n\n var CustomTransform = function () {\n function CustomTransform(options) {\n\n customTransformCounter++;\n this.options = options;\n this.syntax = null;\n }\n\n CustomTransform.prototype.transform = function (ast) {\n var walker = new this.syntax.Walker();\n\n walker.visit(ast, function (node) {\n var i, attribute;\n\n if (node.type !== 'ElementNode') {\n return;\n }\n\n for (i = 0; i < node.attributes.length; i++) {\n attribute = node.attributes[i];\n\n\n if (attribute.name === 'data-test') {\n node.attributes.splice(i, 1);\n }\n }\n });\n\n return ast;\n };\n\n return CustomTransform;\n }();\n\n var CustomPluginsTests = function (_RenderingTestCase) {\n (0, _emberBabel.inherits)(CustomPluginsTests, _RenderingTestCase);\n\n function CustomPluginsTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTestCase.apply(this, arguments));\n }\n\n CustomPluginsTests.prototype.afterEach = function () {\n customTransformCounter = 0;\n return _RenderingTestCase.prototype.afterEach.call(this);\n };\n\n CustomPluginsTests.prototype['@test custom plugins can be used'] = function () {\n this.render('
');\n this.assertElement(this.firstChild, {\n tagName: 'div',\n attrs: { class: 'hahaha', 'data-blah': 'derp' },\n content: ''\n });\n };\n\n CustomPluginsTests.prototype['@test wrapped plugins are only invoked once per template'] = function (assert) {\n this.render('{{#if falsey}}nope{{/if}}
');\n assert.equal(customTransformCounter, 1, 'transform should only be instantiated once');\n };\n\n return CustomPluginsTests;\n }(_internalTestHelpers.RenderingTestCase);\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: registerPlugin with a custom plugins', function (_CustomPluginsTests) {\n (0, _emberBabel.inherits)(_class2, _CustomPluginsTests);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _CustomPluginsTests.apply(this, arguments));\n }\n\n _class2.prototype.beforeEach = function () {\n (0, _index.registerPlugin)('ast', CustomTransform);\n };\n\n _class2.prototype.afterEach = function () {\n (0, _index.unregisterPlugin)('ast', CustomTransform);\n return _CustomPluginsTests.prototype.afterEach.call(this);\n };\n\n _class2.prototype['@test custom registered plugins are deduplicated'] = function (assert) {\n (0, _index.registerPlugin)('ast', CustomTransform);\n this.registerTemplate('application', '
');\n assert.equal(customTransformCounter, 1, 'transform should only be instantiated once');\n };\n\n return _class2;\n }(CustomPluginsTests));\n\n (0, _internalTestHelpers.moduleFor)('ember-template-compiler: custom plugins passed to compile', function (_RenderingTestCase2) {\n (0, _emberBabel.inherits)(_class3, _RenderingTestCase2);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RenderingTestCase2.apply(this, arguments));\n }\n\n _class3.prototype.compile = function (templateString) {\n return (0, _index.compile)(templateString, {\n plugins: {\n ast: [CustomTransform]\n }\n });\n };\n\n return _class3;\n }(_internalTestHelpers.RenderingTestCase));\n});","enifed('ember-template-compiler/tests/system/dasherize-component-name-test', ['ember-babel', 'ember-template-compiler/lib/system/dasherize-component-name', 'internal-test-helpers'], function (_emberBabel, _dasherizeComponentName, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('dasherize-component-name', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test names are correctly dasherized'] = function (assert) {\n assert.equal(_dasherizeComponentName.default.get('Foo'), 'foo');\n assert.equal(_dasherizeComponentName.default.get('foo-bar'), 'foo-bar');\n assert.equal(_dasherizeComponentName.default.get('FooBar'), 'foo-bar');\n assert.equal(_dasherizeComponentName.default.get('XBlah'), 'x-blah');\n assert.equal(_dasherizeComponentName.default.get('X-Blah'), 'x-blah');\n assert.equal(_dasherizeComponentName.default.get('Foo::BarBaz'), 'foo::bar-baz');\n assert.equal(_dasherizeComponentName.default.get('Foo::Bar-Baz'), 'foo::bar-baz');\n assert.equal(_dasherizeComponentName.default.get('Foo@BarBaz'), 'foo@bar-baz');\n assert.equal(_dasherizeComponentName.default.get('Foo@Bar-Baz'), 'foo@bar-baz');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/acceptance_test', ['ember-babel', 'internal-test-helpers', '@ember/runloop', 'ember-testing/lib/test', 'ember-testing/lib/adapters/qunit', 'ember-routing', 'ember-runtime', 'ember-views', '@ember/debug'], function (_emberBabel, _internalTestHelpers, _runloop, _test, _qunit, _emberRouting, _emberRuntime, _emberViews, _debug) {\n 'use strict';\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n\n var originalConsoleError = console.error; // eslint-disable-line no-console\n var testContext = void 0;\n\n if (!_emberViews.jQueryDisabled) {\n (0, _internalTestHelpers.moduleFor)('ember-testing Acceptance', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n function _class() {\n\n (0, _debug.setDebugFunction)('debug', function () {});\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n _this._originalAdapter = _test.default.adapter;\n\n testContext = _this;\n\n _this.runTask(function () {\n _this.createApplication();\n _this.router.map(function () {\n this.route('posts');\n this.route('comments');\n\n this.route('abort_transition');\n\n this.route('redirect');\n });\n\n _this.indexHitCount = 0;\n _this.currentRoute = 'index';\n\n _this.add('route:index', _emberRouting.Route.extend({\n model: function () {\n testContext.indexHitCount += 1;\n }\n }));\n\n _this.add('route:posts', _emberRouting.Route.extend({\n renderTemplate: function () {\n testContext.currentRoute = 'posts';\n this._super.apply(this, arguments);\n }\n }));\n\n _this.addTemplate('posts', '\\n \\n ');\n\n _this.add('route:comments', _emberRouting.Route.extend({\n renderTemplate: function () {\n testContext.currentRoute = 'comments';\n this._super.apply(this, arguments);\n }\n }));\n\n _this.addTemplate('comments', '{{input type=\"text\"}}
');\n\n _this.add('route:abort_transition', _emberRouting.Route.extend({\n beforeModel: function (transition) {\n transition.abort();\n }\n }));\n\n _this.add('route:redirect', _emberRouting.Route.extend({\n beforeModel: function () {\n this.transitionTo('comments');\n }\n }));\n\n _this.application.setupForTesting();\n\n _test.default.registerAsyncHelper('slowHelper', function () {\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n return (0, _runloop.later)(resolve, 10);\n });\n });\n\n _this.application.injectTestHelpers();\n });\n return _this;\n }\n\n _class.prototype.afterEach = function () {\n console.error = originalConsoleError; // eslint-disable-line no-console\n _AutobootApplicationT.prototype.afterEach.call(this);\n };\n\n _class.prototype.teardown = function () {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n _test.default.adapter = this._originalAdapter;\n _test.default.unregisterHelper('slowHelper');\n window.slowHelper = undefined;\n testContext = undefined;\n _AutobootApplicationT.prototype.teardown.call(this);\n };\n\n _class.prototype['@test helpers can be chained with then'] = function (assert) {\n var _this2 = this;\n\n assert.expect(6);\n\n window.visit('/posts').then(function () {\n assert.equal(_this2.currentRoute, 'posts', 'Successfully visited posts route');\n assert.equal(window.currentURL(), '/posts', 'posts URL is correct');\n return window.click('a:contains(\"Comments\")');\n }).then(function () {\n assert.equal(_this2.currentRoute, 'comments', 'visit chained with click');\n return window.fillIn('.ember-text-field', 'yeah');\n }).then(function () {\n assert.equal(document.querySelector('.ember-text-field').value, 'yeah', 'chained with fillIn');\n return window.fillIn('.ember-text-field', '#qunit-fixture', 'context working');\n }).then(function () {\n assert.equal(document.querySelector('.ember-text-field').value, 'context working', 'chained with fillIn');\n return window.click('.does-not-exist');\n }).catch(function (e) {\n assert.equal(e.message, 'Element .does-not-exist not found.', 'Non-existent click exception caught');\n });\n };\n\n _class.prototype['@test helpers can be chained to each other (legacy)'] = function (assert) {\n var _this3 = this;\n\n assert.expect(7);\n\n window.visit('/posts').click('a:first', '#comments-link').fillIn('.ember-text-field', 'hello').then(function () {\n assert.equal(_this3.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(document.querySelector('.ember-text-field').value, 'hello', 'Fillin successfully works');\n window.find('.ember-text-field').one('keypress', function (e) {\n assert.equal(e.keyCode, 13, 'keyevent chained with correct keyCode.');\n assert.equal(e.which, 13, 'keyevent chained with correct which.');\n });\n }).keyEvent('.ember-text-field', 'keypress', 13).visit('/posts').then(function () {\n assert.equal(_this3.currentRoute, 'posts', 'Thens can also be chained to helpers');\n assert.equal(window.currentURL(), '/posts', 'URL is set correct on chained helpers');\n });\n };\n\n _class.prototype['@test helpers don\\'t need to be chained'] = function (assert) {\n var _this4 = this;\n\n assert.expect(5);\n\n window.visit('/posts');\n\n window.click('a:first', '#comments-link');\n\n window.fillIn('.ember-text-field', 'hello');\n\n window.andThen(function () {\n assert.equal(_this4.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(window.find('.ember-text-field').val(), 'hello', 'Fillin successfully works');\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(_this4.currentRoute, 'posts');\n assert.equal(window.currentURL(), '/posts');\n });\n };\n\n _class.prototype['@test Nested async helpers'] = function (assert) {\n var _this5 = this;\n\n assert.expect(5);\n\n window.visit('/posts');\n\n window.andThen(function () {\n window.click('a:first', '#comments-link');\n window.fillIn('.ember-text-field', 'hello');\n });\n\n window.andThen(function () {\n assert.equal(_this5.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(window.find('.ember-text-field').val(), 'hello', 'Fillin successfully works');\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(_this5.currentRoute, 'posts');\n assert.equal(window.currentURL(), '/posts');\n });\n };\n\n _class.prototype['@test Multiple nested async helpers'] = function (assert) {\n var _this6 = this;\n\n assert.expect(3);\n\n window.visit('/posts');\n\n window.andThen(function () {\n window.click('a:first', '#comments-link');\n\n window.fillIn('.ember-text-field', 'hello');\n window.fillIn('.ember-text-field', 'goodbye');\n });\n\n window.andThen(function () {\n assert.equal(window.find('.ember-text-field').val(), 'goodbye', 'Fillin successfully works');\n assert.equal(_this6.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n });\n };\n\n _class.prototype['@test Helpers nested in thens'] = function (assert) {\n var _this7 = this;\n\n assert.expect(5);\n\n window.visit('/posts').then(function () {\n window.click('a:first', '#comments-link');\n });\n\n window.andThen(function () {\n window.fillIn('.ember-text-field', 'hello');\n });\n\n window.andThen(function () {\n assert.equal(_this7.currentRoute, 'comments', 'Successfully visited comments route');\n assert.equal(window.currentURL(), '/comments', 'Comments URL is correct');\n assert.equal(window.find('.ember-text-field').val(), 'hello', 'Fillin successfully works');\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(_this7.currentRoute, 'posts');\n assert.equal(window.currentURL(), '/posts', 'Posts URL is correct');\n });\n };\n\n _class.prototype['@test Aborted transitions are not logged via Ember.Test.adapter#exception'] = function (assert) {\n assert.expect(0);\n\n _test.default.adapter = _qunit.default.create({\n exception: function () {\n assert.ok(false, 'aborted transitions are not logged');\n }\n });\n\n window.visit('/abort_transition');\n };\n\n _class.prototype['@test Unhandled exceptions are logged via Ember.Test.adapter#exception'] = function (assert) {\n assert.expect(2);\n\n console.error = function () {}; // eslint-disable-line no-console\n var asyncHandled = void 0;\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.equal(error.message, 'Element .does-not-exist not found.', 'Exception successfully caught and passed to Ember.Test.adapter.exception');\n // handle the rejection so it doesn't leak later.\n asyncHandled.catch(function () {});\n }\n });\n\n window.visit('/posts');\n\n window.click('.invalid-element').catch(function (error) {\n assert.equal(error.message, 'Element .invalid-element not found.', 'Exception successfully handled in the rejection handler');\n });\n\n asyncHandled = window.click('.does-not-exist');\n };\n\n _class.prototype['@test Unhandled exceptions in \\'andThen\\' are logged via Ember.Test.adapter#exception'] = function (assert) {\n assert.expect(1);\n\n console.error = function () {}; // eslint-disable-line no-console\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.equal(error.message, 'Catch me', 'Exception successfully caught and passed to Ember.Test.adapter.exception');\n }\n });\n\n window.visit('/posts');\n\n window.andThen(function () {\n throw new Error('Catch me');\n });\n };\n\n _class.prototype['@test should not start routing on the root URL when visiting another'] = function (assert) {\n var _this8 = this;\n\n assert.expect(4);\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.ok(window.find('#comments-link'), 'found comments-link');\n assert.equal(_this8.currentRoute, 'posts', 'Successfully visited posts route');\n assert.equal(window.currentURL(), '/posts', 'Posts URL is correct');\n assert.equal(_this8.indexHitCount, 0, 'should not hit index route when visiting another route');\n });\n };\n\n _class.prototype['@test only enters the index route once when visiting '] = function (assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n window.visit('/');\n\n window.andThen(function () {\n assert.equal(_this9.indexHitCount, 1, 'should hit index once when visiting /');\n });\n };\n\n _class.prototype['@test test must not finish while asyncHelpers are pending'] = function (assert) {\n assert.expect(2);\n\n var async = 0;\n var innerRan = false;\n\n _test.default.adapter = _qunit.default.extend({\n asyncStart: function () {\n async++;\n this._super();\n },\n asyncEnd: function () {\n async--;\n this._super();\n }\n }).create();\n\n this.application.testHelpers.slowHelper();\n\n window.andThen(function () {\n innerRan = true;\n });\n\n assert.equal(innerRan, false, 'should not have run yet');\n assert.ok(async > 0, 'should have told the adapter to pause');\n\n if (async === 0) {\n // If we failed the test, prevent zalgo from escaping and breaking\n // our other tests.\n _test.default.adapter.asyncStart();\n _test.default.resolve().then(function () {\n _test.default.adapter.asyncEnd();\n });\n }\n };\n\n _class.prototype['@test visiting a URL that causes another transition should yield the correct URL'] = function (assert) {\n assert.expect(1);\n\n window.visit('/redirect');\n\n window.andThen(function () {\n assert.equal(window.currentURL(), '/comments', 'Redirected to Comments URL');\n });\n };\n\n _class.prototype['@test visiting a URL and then visiting a second URL with a transition should yield the correct URL'] = function (assert) {\n assert.expect(2);\n\n window.visit('/posts');\n\n window.andThen(function () {\n assert.equal(window.currentURL(), '/posts', 'First visited URL is correct');\n });\n\n window.visit('/redirect');\n\n window.andThen(function () {\n assert.equal(window.currentURL(), '/comments', 'Redirected to Comments URL');\n });\n };\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Acceptance - teardown', function (_AutobootApplicationT2) {\n (0, _emberBabel.inherits)(_class2, _AutobootApplicationT2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT2.apply(this, arguments));\n }\n\n _class2.prototype['@test that the setup/teardown happens correctly'] = function (assert) {\n var _this11 = this;\n\n assert.expect(2);\n\n this.runTask(function () {\n _this11.createApplication();\n });\n this.application.injectTestHelpers();\n\n assert.ok(typeof _test.default.Promise.prototype.click === 'function');\n\n this.runTask(function () {\n _this11.application.destroy();\n });\n\n assert.equal(_test.default.Promise.prototype.click, undefined);\n };\n\n return _class2;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n }\n});","enifed('ember-testing/tests/adapters/adapter_test', ['ember-babel', '@ember/runloop', 'ember-testing/lib/adapters/adapter', 'internal-test-helpers'], function (_emberBabel, _runloop, _adapter, _internalTestHelpers) {\n 'use strict';\n\n var adapter;\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Adapter', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n adapter = new _adapter.default();\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _runloop.run)(adapter, adapter.destroy);\n };\n\n _class.prototype['@test exception throws'] = function (assert) {\n var error = 'Hai';\n var thrown;\n\n try {\n adapter.exception(error);\n } catch (e) {\n thrown = e;\n }\n assert.equal(thrown, error);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/adapters/qunit_test', ['ember-babel', '@ember/runloop', 'ember-testing/lib/adapters/qunit', 'internal-test-helpers'], function (_emberBabel, _runloop, _qunit, _internalTestHelpers) {\n 'use strict';\n\n var adapter;\n\n (0, _internalTestHelpers.moduleFor)('ember-testing QUnitAdapter: QUnit 2.x', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n _this.originalStart = QUnit.start;\n _this.originalStop = QUnit.stop;\n\n delete QUnit.start;\n delete QUnit.stop;\n\n adapter = new _qunit.default();\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _runloop.run)(adapter, adapter.destroy);\n\n QUnit.start = this.originalStart;\n QUnit.stop = this.originalStop;\n };\n\n _class.prototype['@test asyncStart waits for asyncEnd to finish a test'] = function (assert) {\n adapter.asyncStart();\n\n setTimeout(function () {\n assert.ok(true);\n adapter.asyncEnd();\n }, 50);\n };\n\n _class.prototype['@test asyncStart waits for equal numbers of asyncEnd to finish a test'] = function (assert) {\n var adapter = _qunit.default.create();\n\n adapter.asyncStart();\n adapter.asyncStart();\n adapter.asyncEnd();\n\n setTimeout(function () {\n assert.ok(true);\n adapter.asyncEnd();\n }, 50);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/adapters_test', ['ember-babel', '@ember/runloop', 'ember-error-handling', 'ember-testing/lib/test', 'ember-testing/lib/adapters/adapter', 'ember-testing/lib/adapters/qunit', '@ember/application', 'internal-test-helpers', 'ember-runtime', '@ember/debug'], function (_emberBabel, _runloop, _emberErrorHandling, _test, _adapter, _qunit, _application, _internalTestHelpers, _emberRuntime, _debug) {\n 'use strict';\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n var noop = function () {};\n\n var App, originalAdapter, originalQUnit, originalWindowOnerror;\n\n var originalConsoleError = console.error; // eslint-disable-line no-console\n\n function runThatThrowsSync() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Error for testing error handling';\n\n return (0, _runloop.run)(function () {\n throw new Error(message);\n });\n }\n\n function runThatThrowsAsync() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Error for testing error handling';\n\n return (0, _runloop.next)(function () {\n throw new Error(message);\n });\n }\n\n var AdapterSetupAndTearDown = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AdapterSetupAndTearDown, _AbstractTestCase);\n\n function AdapterSetupAndTearDown() {\n\n (0, _debug.setDebugFunction)('debug', noop);\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n originalAdapter = _test.default.adapter;\n originalQUnit = window.QUnit;\n originalWindowOnerror = window.onerror;\n return _this;\n }\n\n AdapterSetupAndTearDown.prototype.afterEach = function () {\n console.error = originalConsoleError; // eslint-disable-line no-console\n };\n\n AdapterSetupAndTearDown.prototype.teardown = function () {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n if (App) {\n (0, _runloop.run)(App, App.destroy);\n App.removeTestHelpers();\n App = null;\n }\n\n _test.default.adapter = originalAdapter;\n window.QUnit = originalQUnit;\n window.onerror = originalWindowOnerror;\n (0, _emberErrorHandling.setOnerror)(undefined);\n };\n\n return AdapterSetupAndTearDown;\n }(_internalTestHelpers.AbstractTestCase);\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Adapters', function (_AdapterSetupAndTearD) {\n (0, _emberBabel.inherits)(_class, _AdapterSetupAndTearD);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AdapterSetupAndTearD.apply(this, arguments));\n }\n\n _class.prototype['@test Setting a test adapter manually'] = function (assert) {\n assert.expect(1);\n var CustomAdapter = _adapter.default.extend({\n asyncStart: function () {\n assert.ok(true, 'Correct adapter was used');\n }\n });\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n _test.default.adapter = CustomAdapter.create();\n App.setupForTesting();\n });\n\n _test.default.adapter.asyncStart();\n };\n\n _class.prototype['@test QUnitAdapter is used by default (if QUnit is available)'] = function (assert) {\n assert.expect(1);\n\n _test.default.adapter = null;\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n App.setupForTesting();\n });\n\n assert.ok(_test.default.adapter instanceof _qunit.default);\n };\n\n _class.prototype['@test Adapter is used by default (if QUnit is not available)'] = function (assert) {\n assert.expect(2);\n\n delete window.QUnit;\n\n _test.default.adapter = null;\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n App.setupForTesting();\n });\n\n assert.ok(_test.default.adapter instanceof _adapter.default);\n assert.ok(!(_test.default.adapter instanceof _qunit.default));\n };\n\n _class.prototype['@test With Ember.Test.adapter set, errors in synchronous Ember.run are bubbled out'] = function (assert) {\n var thrown = new Error('Boom!');\n\n var caughtInAdapter = void 0,\n caughtInCatch = void 0;\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n caughtInAdapter = error;\n }\n });\n\n try {\n (0, _runloop.run)(function () {\n throw thrown;\n });\n } catch (e) {\n caughtInCatch = e;\n }\n\n assert.equal(caughtInAdapter, undefined, 'test adapter should never receive synchronous errors');\n assert.equal(caughtInCatch, thrown, 'a \"normal\" try/catch should catch errors in sync run');\n };\n\n _class.prototype['@test when both Ember.onerror (which rethrows) and TestAdapter are registered - sync run'] = function (assert) {\n assert.expect(2);\n\n _test.default.adapter = {\n exception: function () {\n assert.notOk(true, 'adapter is not called for errors thrown in sync run loops');\n }\n };\n\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.ok(true, 'onerror is called for sync errors even if TestAdapter is setup');\n throw error;\n });\n\n assert.throws(runThatThrowsSync, Error, 'error is thrown');\n };\n\n _class.prototype['@test when both Ember.onerror (which does not rethrow) and TestAdapter are registered - sync run'] = function (assert) {\n assert.expect(2);\n\n _test.default.adapter = {\n exception: function () {\n assert.notOk(true, 'adapter is not called for errors thrown in sync run loops');\n }\n };\n\n (0, _emberErrorHandling.setOnerror)(function () {\n assert.ok(true, 'onerror is called for sync errors even if TestAdapter is setup');\n });\n\n runThatThrowsSync();\n assert.ok(true, 'no error was thrown, Ember.onerror can intercept errors');\n };\n\n _class.prototype['@test when TestAdapter is registered and error is thrown - async run'] = function (assert) {\n assert.expect(3);\n var done = assert.async();\n\n var caughtInAdapter = void 0,\n caughtInCatch = void 0,\n caughtByWindowOnerror = void 0;\n _test.default.adapter = {\n exception: function (error) {\n caughtInAdapter = error;\n }\n };\n\n window.onerror = function (message) {\n caughtByWindowOnerror = message;\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n try {\n runThatThrowsAsync();\n } catch (e) {\n caughtInCatch = e;\n }\n\n setTimeout(function () {\n assert.equal(caughtInAdapter, undefined, 'test adapter should never catch errors in run loops');\n assert.equal(caughtInCatch, undefined, 'a \"normal\" try/catch should never catch errors in an async run');\n\n assert.pushResult({\n result: /Error for testing error handling/.test(caughtByWindowOnerror),\n actual: caughtByWindowOnerror,\n expected: 'to include `Error for testing error handling`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n done();\n }, 20);\n };\n\n _class.prototype['@test when both Ember.onerror and TestAdapter are registered - async run'] = function (assert) {\n assert.expect(1);\n var done = assert.async();\n\n _test.default.adapter = {\n exception: function () {\n assert.notOk(true, 'Adapter.exception is not called for errors thrown in next');\n }\n };\n\n (0, _emberErrorHandling.setOnerror)(function () {\n assert.ok(true, 'onerror is invoked for errors thrown in next/later');\n });\n\n runThatThrowsAsync();\n setTimeout(done, 10);\n };\n\n return _class;\n }(AdapterSetupAndTearDown));\n\n function testAdapter(message, generatePromise) {\n var timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n\n return function (_AdapterSetupAndTearD2) {\n (0, _emberBabel.inherits)(PromiseFailureTests, _AdapterSetupAndTearD2);\n\n function PromiseFailureTests() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AdapterSetupAndTearD2.apply(this, arguments));\n }\n\n PromiseFailureTests.prototype['@test ' + message + ' when TestAdapter without `exception` method is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: undefined\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when both Ember.onerror and TestAdapter without `exception` method are present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: undefined\n });\n\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.pushResult({\n result: /the error/.test(error.message),\n actual: error.message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when TestAdapter is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n console.error = function () {}; // eslint-disable-line no-console\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.strictEqual(error, thrown, 'Adapter.exception is called for errors thrown in RSVP promises');\n }\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when both Ember.onerror and TestAdapter are present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.strictEqual(error, thrown, 'Adapter.exception is called for errors thrown in RSVP promises');\n }\n });\n\n (0, _emberErrorHandling.setOnerror)(function () {\n assert.notOk(true, 'Ember.onerror is not called if Test.adapter does not rethrow');\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n PromiseFailureTests.prototype['@test ' + message + ' when both Ember.onerror and TestAdapter are present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n _test.default.adapter = _qunit.default.create({\n exception: function (error) {\n assert.strictEqual(error, thrown, 'Adapter.exception is called for errors thrown in RSVP promises');\n throw error;\n }\n });\n\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises if Test.adapter rethrows');\n });\n\n generatePromise(thrown);\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, timeout);\n });\n };\n\n return PromiseFailureTests;\n }(AdapterSetupAndTearDown);\n }\n\n (0, _internalTestHelpers.moduleFor)('Adapter Errors: .then callback', testAdapter('errors in promise constructor', function (error) {\n new _emberRuntime.RSVP.Promise(function () {\n throw error;\n });\n }));\n\n (0, _internalTestHelpers.moduleFor)('Adapter Errors: Promise Contructor', testAdapter('errors in promise constructor', function (error) {\n _emberRuntime.RSVP.resolve().then(function () {\n throw error;\n });\n }));\n\n (0, _internalTestHelpers.moduleFor)('Adapter Errors: Promise chain .then callback', testAdapter('errors in promise constructor', function (error) {\n new _emberRuntime.RSVP.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw error;\n });\n }, 20));\n});","enifed('ember-testing/tests/ext/rsvp_test', ['ember-babel', 'ember-testing/lib/ext/rsvp', 'ember-testing/lib/test/adapter', 'ember-testing/lib/test/promise', '@ember/runloop', '@ember/debug', 'internal-test-helpers'], function (_emberBabel, _rsvp, _adapter, _promise, _runloop, _debug, _internalTestHelpers) {\n 'use strict';\n\n var originalTestAdapter = (0, _adapter.getAdapter)();\n var originalTestingFlag = (0, _debug.isTesting)();\n\n var asyncStarted = 0;\n var asyncEnded = 0;\n\n (0, _internalTestHelpers.moduleFor)('ember-testing RSVP', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n (0, _debug.setTesting)(true);\n (0, _adapter.setAdapter)({\n asyncStart: function () {\n asyncStarted++;\n },\n asyncEnd: function () {\n asyncEnded++;\n }\n });\n return _this;\n }\n\n _class.prototype.teardown = function () {\n asyncStarted = 0;\n asyncEnded = 0;\n (0, _adapter.setAdapter)(originalTestAdapter);\n (0, _debug.setTesting)(originalTestingFlag);\n };\n\n _class.prototype['@test given `Ember.testing = true`, correctly informs the test suite about async steps'] = function (assert) {\n var done = assert.async();\n assert.expect(19);\n\n assert.ok(!(0, _runloop.getCurrentRunLoop)(), 'expect no run-loop');\n\n (0, _debug.setTesting)(true);\n\n assert.equal(asyncStarted, 0);\n assert.equal(asyncEnded, 0);\n\n var user = _rsvp.default.Promise.resolve({ name: 'tomster' });\n\n assert.equal(asyncStarted, 0);\n assert.equal(asyncEnded, 0);\n\n user.then(function (user) {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n\n assert.equal(user.name, 'tomster');\n\n return _rsvp.default.Promise.resolve(1).then(function () {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n });\n }).then(function () {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n\n return new _rsvp.default.Promise(function (resolve) {\n setTimeout(function () {\n assert.equal(asyncStarted, 1);\n assert.equal(asyncEnded, 1);\n\n resolve({ name: 'async tomster' });\n\n assert.equal(asyncStarted, 2);\n assert.equal(asyncEnded, 1);\n }, 0);\n });\n }).then(function (user) {\n assert.equal(user.name, 'async tomster');\n assert.equal(asyncStarted, 2);\n assert.equal(asyncEnded, 2);\n done();\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n (0, _internalTestHelpers.moduleFor)('TestPromise', function (_AbstractTestCase2) {\n (0, _emberBabel.inherits)(_class2, _AbstractTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['does not throw error when falsy value passed to then'] = function (assert) {\n assert.expect(1);\n return new _promise.default(function (resolve) {\n resolve();\n }).then(null).then(function () {\n assert.ok(true);\n });\n };\n\n _class2.prototype['able to get last Promise'] = function (assert) {\n assert.expect(2);\n\n var p1 = new _promise.default(function (resolve) {\n resolve();\n }).then(function () {\n assert.ok(true);\n });\n\n var p2 = new _promise.default(function (resolve) {\n resolve();\n });\n\n assert.deepEqual((0, _promise.getLastPromise)(), p2);\n return p1;\n };\n\n return _class2;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/helper_registration_test', ['ember-babel', '@ember/runloop', 'ember-testing/lib/test', '@ember/application', 'internal-test-helpers'], function (_emberBabel, _runloop, _test, _application, _internalTestHelpers) {\n 'use strict';\n\n var App, appBooted, helperContainer;\n\n function registerHelper() {\n _test.default.registerHelper('boot', function (app) {\n (0, _runloop.run)(app, app.advanceReadiness);\n appBooted = true;\n return app.testHelpers.wait();\n });\n }\n\n function unregisterHelper() {\n _test.default.unregisterHelper('boot');\n }\n\n var originalAdapter = _test.default.adapter;\n\n function setupApp() {\n appBooted = false;\n helperContainer = {};\n\n (0, _runloop.run)(function () {\n App = _application.default.create();\n App.setupForTesting();\n App.injectTestHelpers(helperContainer);\n });\n }\n\n function destroyApp() {\n if (App) {\n (0, _runloop.run)(App, 'destroy');\n App = null;\n helperContainer = null;\n }\n }\n\n (0, _internalTestHelpers.moduleFor)('Test - registerHelper/unregisterHelper', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.teardown = function () {\n _test.default.adapter = originalAdapter;\n destroyApp();\n };\n\n _class.prototype['@test Helper gets registered'] = function (assert) {\n assert.expect(2);\n\n registerHelper();\n setupApp();\n\n assert.ok(App.testHelpers.boot);\n assert.ok(helperContainer.boot);\n };\n\n _class.prototype['@test Helper is ran when called'] = function (assert) {\n var done = assert.async();\n assert.expect(1);\n\n registerHelper();\n setupApp();\n\n App.testHelpers.boot().then(function () {\n assert.ok(appBooted);\n }).finally(done);\n };\n\n _class.prototype['@test Helper can be unregistered'] = function (assert) {\n assert.expect(4);\n\n registerHelper();\n setupApp();\n\n assert.ok(App.testHelpers.boot);\n assert.ok(helperContainer.boot);\n\n unregisterHelper();\n\n (0, _runloop.run)(App, 'destroy');\n setupApp();\n\n assert.ok(!App.testHelpers.boot, 'once unregistered the helper is not added to App.testHelpers');\n assert.ok(!helperContainer.boot, 'once unregistered the helper is not added to the helperContainer');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-testing/tests/helpers_test', ['ember-babel', 'internal-test-helpers', 'ember-routing', '@ember/controller', 'ember-runtime', '@ember/runloop', 'ember-glimmer', 'ember-views', 'ember-testing/lib/test', 'ember-testing/lib/setup_for_testing', 'ember-testing/lib/test/pending_requests', 'ember-testing/lib/test/adapter', 'ember-testing/lib/test/waiters', '@ember/debug'], function (_emberBabel, _internalTestHelpers, _emberRouting, _controller, _emberRuntime, _runloop, _emberGlimmer, _emberViews, _test, _setup_for_testing, _pending_requests, _adapter, _waiters, _debug) {\n 'use strict';\n\n var originalInfo = (0, _debug.getDebugFunction)('info');\n var noop = function () {};\n\n function registerHelper() {\n _test.default.registerHelper('LeakyMcLeakLeak', function () {});\n }\n\n function assertHelpers(assert, application, helperContainer, expected) {\n if (!helperContainer) {\n helperContainer = window;\n }\n if (expected === undefined) {\n expected = true;\n }\n\n function checkHelperPresent(helper, expected) {\n var presentInHelperContainer = !!helperContainer[helper];\n var presentInTestHelpers = !!application.testHelpers[helper];\n\n assert.ok(presentInHelperContainer === expected, \"Expected '\" + helper + \"' to be present in the helper container (defaults to window).\");\n assert.ok(presentInTestHelpers === expected, \"Expected '\" + helper + \"' to be present in App.testHelpers.\");\n }\n\n checkHelperPresent('visit', expected);\n checkHelperPresent('click', expected);\n checkHelperPresent('keyEvent', expected);\n checkHelperPresent('fillIn', expected);\n checkHelperPresent('wait', expected);\n checkHelperPresent('triggerEvent', expected);\n }\n\n function assertNoHelpers(assert, application, helperContainer) {\n assertHelpers(assert, application, helperContainer, false);\n }\n\n var HelpersTestCase = function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(HelpersTestCase, _AutobootApplicationT);\n\n function HelpersTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n _this._originalAdapter = (0, _adapter.getAdapter)();\n return _this;\n }\n\n HelpersTestCase.prototype.teardown = function () {\n (0, _adapter.setAdapter)(this._originalAdapter);\n document.removeEventListener('ajaxSend', _pending_requests.incrementPendingRequests);\n document.removeEventListener('ajaxComplete', _pending_requests.decrementPendingRequests);\n (0, _pending_requests.clearPendingRequests)();\n if (this.application) {\n this.application.removeTestHelpers();\n }\n _AutobootApplicationT.prototype.teardown.call(this);\n };\n\n return HelpersTestCase;\n }(_internalTestHelpers.AutobootApplicationTestCase);\n\n var HelpersApplicationTestCase = function (_HelpersTestCase) {\n (0, _emberBabel.inherits)(HelpersApplicationTestCase, _HelpersTestCase);\n\n function HelpersApplicationTestCase() {\n\n var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase.call(this));\n\n _this2.runTask(function () {\n _this2.createApplication();\n _this2.application.setupForTesting();\n _this2.application.injectTestHelpers();\n });\n return _this2;\n }\n\n return HelpersApplicationTestCase;\n }(HelpersTestCase);\n\n if (!_emberViews.jQueryDisabled) {\n (0, _internalTestHelpers.moduleFor)('ember-testing: Helper setup', function (_HelpersTestCase2) {\n (0, _emberBabel.inherits)(_class, _HelpersTestCase2);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase2.apply(this, arguments));\n }\n\n _class.prototype['@test Ember.Application#injectTestHelpers/#removeTestHelper'] = function (assert) {\n var _this4 = this;\n\n this.runTask(function () {\n _this4.createApplication();\n });\n\n assertNoHelpers(assert, this.application);\n\n registerHelper();\n\n this.application.injectTestHelpers();\n\n assertHelpers(assert, this.application);\n\n assert.ok(_test.default.Promise.prototype.LeakyMcLeakLeak, 'helper in question SHOULD be present');\n\n this.application.removeTestHelpers();\n\n assertNoHelpers(assert, this.application);\n\n assert.equal(_test.default.Promise.prototype.LeakyMcLeakLeak, undefined, 'should NOT leak test promise extensions');\n };\n\n _class.prototype['@test Ember.Application#setupForTesting'] = function (assert) {\n var _this5 = this;\n\n this.runTask(function () {\n _this5.createApplication();\n _this5.application.setupForTesting();\n });\n\n var routerInstance = this.applicationInstance.lookup('router:main');\n assert.equal(routerInstance.location, 'none');\n };\n\n _class.prototype['@test Ember.Application.setupForTesting sets the application to \\'testing\\''] = function (assert) {\n var _this6 = this;\n\n this.runTask(function () {\n _this6.createApplication();\n _this6.application.setupForTesting();\n });\n\n assert.equal(this.application.testing, true, 'Application instance is set to testing.');\n };\n\n _class.prototype['@test Ember.Application.setupForTesting leaves the system in a deferred state.'] = function (assert) {\n var _this7 = this;\n\n this.runTask(function () {\n _this7.createApplication();\n _this7.application.setupForTesting();\n });\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n };\n\n _class.prototype['@test App.reset() after Application.setupForTesting leaves the system in a deferred state.'] = function (assert) {\n var _this8 = this;\n\n this.runTask(function () {\n _this8.createApplication();\n _this8.application.setupForTesting();\n });\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n\n this.application.reset();\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n };\n\n _class.prototype['@test Ember.Application#injectTestHelpers calls callbacks registered with onInjectHelpers'] = function (assert) {\n var injected = 0;\n\n _test.default.onInjectHelpers(function () {\n injected++;\n });\n\n // bind(this) so Babel doesn't leak _this\n // into the context onInjectHelpers.\n this.runTask(function () {\n this.createApplication();\n this.application.setupForTesting();\n }.bind(this));\n\n assert.equal(injected, 0, 'onInjectHelpers are not called before injectTestHelpers');\n\n this.application.injectTestHelpers();\n\n assert.equal(injected, 1, 'onInjectHelpers are called after injectTestHelpers');\n };\n\n _class.prototype['@test Ember.Application#injectTestHelpers adds helpers to provided object.'] = function (assert) {\n var _this9 = this;\n\n var helpers = {};\n\n this.runTask(function () {\n _this9.createApplication();\n _this9.application.setupForTesting();\n });\n\n this.application.injectTestHelpers(helpers);\n\n assertHelpers(assert, this.application, helpers);\n\n this.application.removeTestHelpers();\n\n assertNoHelpers(assert, this.application, helpers);\n };\n\n _class.prototype['@test Ember.Application#removeTestHelpers resets the helperContainer\\'s original values'] = function (assert) {\n var _this10 = this;\n\n var helpers = { visit: 'snazzleflabber' };\n\n this.runTask(function () {\n _this10.createApplication();\n _this10.application.setupForTesting();\n });\n\n this.application.injectTestHelpers(helpers);\n\n assert.notEqual(helpers.visit, 'snazzleflabber', 'helper added to container');\n this.application.removeTestHelpers();\n\n assert.equal(helpers.visit, 'snazzleflabber', 'original value added back to container');\n };\n\n return _class;\n }(HelpersTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: Helper methods', function (_HelpersApplicationTe) {\n (0, _emberBabel.inherits)(_class2, _HelpersApplicationTe);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _HelpersApplicationTe.apply(this, arguments));\n }\n\n _class2.prototype['@test \\'wait\\' respects registerWaiters'] = function (assert) {\n var _this12 = this;\n\n assert.expect(3);\n\n var counter = 0;\n function waiter() {\n return ++counter > 2;\n }\n\n var other = 0;\n function otherWaiter() {\n return ++other > 2;\n }\n\n this.runTask(function () {\n _this12.application.advanceReadiness();\n });\n\n (0, _waiters.registerWaiter)(waiter);\n (0, _waiters.registerWaiter)(otherWaiter);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.wait().then(function () {\n assert.equal(waiter(), true, 'should not resolve until our waiter is ready');\n (0, _waiters.unregisterWaiter)(waiter);\n counter = 0;\n return testHelpers.wait();\n }).then(function () {\n assert.equal(counter, 0, 'unregistered waiter was not checked');\n assert.equal(otherWaiter(), true, 'other waiter is still registered');\n }).finally(function () {\n (0, _waiters.unregisterWaiter)(otherWaiter);\n });\n };\n\n _class2.prototype['@test \\'visit\\' advances readiness.'] = function (assert) {\n var _this13 = this;\n\n assert.expect(2);\n\n assert.equal(this.application._readinessDeferrals, 1, 'App is in deferred state after setupForTesting.');\n\n return this.application.testHelpers.visit('/').then(function () {\n assert.equal(_this13.application._readinessDeferrals, 0, 'App\\'s readiness was advanced by visit.');\n });\n };\n\n _class2.prototype['@test \\'wait\\' helper can be passed a resolution value'] = function (assert) {\n var _this14 = this;\n\n assert.expect(4);\n\n this.runTask(function () {\n _this14.application.advanceReadiness();\n });\n\n var promiseObjectValue = {};\n var objectValue = {};\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.wait('text').then(function (val) {\n assert.equal(val, 'text', 'can resolve to a string');\n return testHelpers.wait(1);\n }).then(function (val) {\n assert.equal(val, 1, 'can resolve to an integer');\n return testHelpers.wait(objectValue);\n }).then(function (val) {\n assert.equal(val, objectValue, 'can resolve to an object');\n return testHelpers.wait(_emberRuntime.RSVP.resolve(promiseObjectValue));\n }).then(function (val) {\n assert.equal(val, promiseObjectValue, 'can resolve to a promise resolution value');\n });\n };\n\n _class2.prototype['@test \\'click\\' triggers appropriate events in order'] = function (assert) {\n var _this15 = this;\n\n assert.expect(5);\n\n this.add('component:index-wrapper', _emberGlimmer.Component.extend({\n classNames: 'index-wrapper',\n\n didInsertElement: function () {\n var wrapper = document.querySelector('.index-wrapper');\n wrapper.addEventListener('mousedown', function (e) {\n return events.push(e.type);\n });\n wrapper.addEventListener('mouseup', function (e) {\n return events.push(e.type);\n });\n wrapper.addEventListener('click', function (e) {\n return events.push(e.type);\n });\n wrapper.addEventListener('focusin', function (e) {\n // IE11 _sometimes_ triggers focusin **twice** in a row\n // (we believe this is when it is under higher load)\n //\n // the goal here is to only push a single focusin when running on\n // IE11\n if (_internalTestHelpers.isIE11) {\n if (events[events.length - 1] !== 'focusin') {\n events.push(e.type);\n }\n } else {\n events.push(e.type);\n }\n });\n }\n }));\n\n this.add('component:x-checkbox', _emberGlimmer.Component.extend({\n tagName: 'input',\n attributeBindings: ['type'],\n type: 'checkbox',\n click: function () {\n events.push('click:' + this.get('checked'));\n },\n change: function () {\n events.push('change:' + this.get('checked'));\n }\n }));\n\n this.addTemplate('index', '\\n {{#index-wrapper}}\\n {{input type=\"text\"}}\\n {{x-checkbox type=\"checkbox\"}}\\n {{textarea}}\\n
\\n {{/index-wrapper}}\\'));\\n ');\n\n this.runTask(function () {\n _this15.application.advanceReadiness();\n });\n\n var events = void 0;\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.wait().then(function () {\n events = [];\n return testHelpers.click('.index-wrapper');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'mouseup', 'click'], 'fires events in order');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper input[type=text]');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'focusin', 'mouseup', 'click'], 'fires focus events on inputs');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper textarea');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'focusin', 'mouseup', 'click'], 'fires focus events on textareas');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper div');\n }).then(function () {\n assert.deepEqual(events, ['mousedown', 'focusin', 'mouseup', 'click'], 'fires focus events on contenteditable');\n }).then(function () {\n events = [];\n return testHelpers.click('.index-wrapper input[type=checkbox]');\n }).then(function () {\n // i.e. mousedown, mouseup, change:true, click, click:true\n // Firefox differs so we can't assert the exact ordering here.\n // See https://bugzilla.mozilla.org/show_bug.cgi?id=843554.\n assert.equal(events.length, 5, 'fires click and change on checkboxes');\n });\n };\n\n _class2.prototype['@test \\'click\\' triggers native events with simulated X/Y coordinates'] = function (assert) {\n var _this16 = this;\n\n assert.expect(15);\n\n this.add('component:index-wrapper', _emberGlimmer.Component.extend({\n classNames: 'index-wrapper',\n\n didInsertElement: function () {\n var pushEvent = function (e) {\n return events.push(e);\n };\n this.element.addEventListener('mousedown', pushEvent);\n this.element.addEventListener('mouseup', pushEvent);\n this.element.addEventListener('click', pushEvent);\n }\n }));\n\n this.addTemplate('index', '\\n {{#index-wrapper}}some text{{/index-wrapper}}\\n ');\n\n this.runTask(function () {\n _this16.application.advanceReadiness();\n });\n\n var events = void 0;\n var _application$testHelp = this.application.testHelpers,\n wait = _application$testHelp.wait,\n click = _application$testHelp.click;\n\n return wait().then(function () {\n events = [];\n return click('.index-wrapper');\n }).then(function () {\n events.forEach(function (e) {\n assert.ok(e instanceof window.Event, 'The event is an instance of MouseEvent');\n assert.ok(typeof e.screenX === 'number', 'screenX is correct');\n assert.ok(typeof e.screenY === 'number', 'screenY is correct');\n assert.ok(typeof e.clientX === 'number', 'clientX is correct');\n assert.ok(typeof e.clientY === 'number', 'clientY is correct');\n });\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' with mouseenter triggers native events with simulated X/Y coordinates'] = function (assert) {\n var _this17 = this;\n\n assert.expect(5);\n\n var evt = void 0;\n this.add('component:index-wrapper', _emberGlimmer.Component.extend({\n classNames: 'index-wrapper',\n didInsertElement: function () {\n this.element.addEventListener('mouseenter', function (e) {\n return evt = e;\n });\n }\n }));\n\n this.addTemplate('index', '{{#index-wrapper}}some text{{/index-wrapper}}');\n\n this.runTask(function () {\n _this17.application.advanceReadiness();\n });\n\n var _application$testHelp2 = this.application.testHelpers,\n wait = _application$testHelp2.wait,\n triggerEvent = _application$testHelp2.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.index-wrapper', 'mouseenter');\n }).then(function () {\n assert.ok(evt instanceof window.Event, 'The event is an instance of MouseEvent');\n assert.ok(typeof evt.screenX === 'number', 'screenX is correct');\n assert.ok(typeof evt.screenY === 'number', 'screenY is correct');\n assert.ok(typeof evt.clientX === 'number', 'clientX is correct');\n assert.ok(typeof evt.clientY === 'number', 'clientY is correct');\n });\n };\n\n _class2.prototype['@test \\'wait\\' waits for outstanding timers'] = function (assert) {\n var _this18 = this;\n\n assert.expect(1);\n\n this.runTask(function () {\n _this18.application.advanceReadiness();\n });\n\n var waitDone = false;\n (0, _runloop.later)(function () {\n waitDone = true;\n }, 20);\n\n return this.application.testHelpers.wait().then(function () {\n assert.equal(waitDone, true, 'should wait for the timer to be fired.');\n });\n };\n\n _class2.prototype['@test \\'wait\\' respects registerWaiters with optional context'] = function (assert) {\n var _this19 = this;\n\n assert.expect(3);\n\n var obj = {\n counter: 0,\n ready: function () {\n return ++this.counter > 2;\n }\n };\n\n var other = 0;\n function otherWaiter() {\n return ++other > 2;\n }\n\n this.runTask(function () {\n _this19.application.advanceReadiness();\n });\n\n (0, _waiters.registerWaiter)(obj, obj.ready);\n (0, _waiters.registerWaiter)(otherWaiter);\n\n var wait = this.application.testHelpers.wait;\n\n return wait().then(function () {\n assert.equal(obj.ready(), true, 'should not resolve until our waiter is ready');\n (0, _waiters.unregisterWaiter)(obj, obj.ready);\n obj.counter = 0;\n return wait();\n }).then(function () {\n assert.equal(obj.counter, 0, 'the unregistered waiter should still be at 0');\n assert.equal(otherWaiter(), true, 'other waiter should still be registered');\n }).finally(function () {\n (0, _waiters.unregisterWaiter)(otherWaiter);\n });\n };\n\n _class2.prototype['@test \\'wait\\' does not error if routing has not begun'] = function (assert) {\n assert.expect(1);\n\n return this.application.testHelpers.wait().then(function () {\n assert.ok(true, 'should not error without `visit`');\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' accepts an optional options hash without context'] = function (assert) {\n var _this20 = this;\n\n assert.expect(3);\n\n var event = void 0;\n this.add('component:index-wrapper', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n var domElem = document.querySelector('.input');\n domElem.addEventListener('change', function (e) {\n return event = e;\n });\n domElem.addEventListener('keydown', function (e) {\n return event = e;\n });\n }\n }));\n\n this.addTemplate('index', '{{index-wrapper}}');\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"scope\" class=\"input\"}}\\n ');\n\n this.runTask(function () {\n _this20.application.advanceReadiness();\n });\n\n var _application$testHelp3 = this.application.testHelpers,\n wait = _application$testHelp3.wait,\n triggerEvent = _application$testHelp3.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.input', 'keydown', { keyCode: 13 });\n }).then(function () {\n assert.equal(event.keyCode, 13, 'options were passed');\n assert.equal(event.type, 'keydown', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'scope', 'triggered on the correct element');\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' can limit searching for a selector to a scope'] = function (assert) {\n var _this21 = this;\n\n assert.expect(2);\n\n var event = void 0;\n this.add('component:index-wrapper', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n var firstInput = document.querySelector('.input');\n firstInput.addEventListener('blur', function (e) {\n return event = e;\n });\n firstInput.addEventListener('change', function (e) {\n return event = e;\n });\n var secondInput = document.querySelector('#limited .input');\n secondInput.addEventListener('blur', function (e) {\n return event = e;\n });\n secondInput.addEventListener('change', function (e) {\n return event = e;\n });\n }\n }));\n\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"outside-scope\" class=\"input\"}}\\n \\n {{input type=\"text\" id=\"inside-scope\" class=\"input\"}}\\n
\\n ');\n this.addTemplate('index', '{{index-wrapper}}');\n\n this.runTask(function () {\n _this21.application.advanceReadiness();\n });\n\n var _application$testHelp4 = this.application.testHelpers,\n wait = _application$testHelp4.wait,\n triggerEvent = _application$testHelp4.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.input', '#limited', 'blur');\n }).then(function () {\n assert.equal(event.type, 'blur', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'inside-scope', 'triggered on the correct element');\n });\n };\n\n _class2.prototype['@test \\'triggerEvent\\' can be used to trigger arbitrary events'] = function (assert) {\n var _this22 = this;\n\n assert.expect(2);\n\n var event = void 0;\n this.add('component:index-wrapper', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n var foo = document.getElementById('foo');\n foo.addEventListener('blur', function (e) {\n return event = e;\n });\n foo.addEventListener('change', function (e) {\n return event = e;\n });\n }\n }));\n\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"foo\"}}\\n ');\n this.addTemplate('index', '{{index-wrapper}}');\n\n this.runTask(function () {\n _this22.application.advanceReadiness();\n });\n\n var _application$testHelp5 = this.application.testHelpers,\n wait = _application$testHelp5.wait,\n triggerEvent = _application$testHelp5.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('#foo', 'blur');\n }).then(function () {\n assert.equal(event.type, 'blur', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'foo', 'triggered on the correct element');\n });\n };\n\n _class2.prototype['@test \\'fillIn\\' takes context into consideration'] = function (assert) {\n var _this23 = this;\n\n assert.expect(2);\n\n this.addTemplate('index', '\\n \\n {{input type=\"text\" id=\"first\" class=\"current\"}}\\n
\\n {{input type=\"text\" id=\"second\" class=\"current\"}}\\n ');\n\n this.runTask(function () {\n _this23.application.advanceReadiness();\n });\n\n var _application$testHelp6 = this.application.testHelpers,\n visit = _application$testHelp6.visit,\n fillIn = _application$testHelp6.fillIn,\n andThen = _application$testHelp6.andThen,\n find = _application$testHelp6.find;\n\n visit('/');\n fillIn('.current', '#parent', 'current value');\n\n return andThen(function () {\n assert.equal(find('#first')[0].value, 'current value');\n assert.equal(find('#second')[0].value, '');\n });\n };\n\n _class2.prototype['@test \\'fillIn\\' focuses on the element'] = function (assert) {\n var _this24 = this;\n\n var wasFocused = false;\n\n this.add('controller:index', _controller.default.extend({\n actions: {\n wasFocused: function () {\n wasFocused = true;\n }\n }\n }));\n\n this.addTemplate('index', '\\n \\n {{input type=\"text\" id=\"first\" focus-in=(action \"wasFocused\")}}\\n
\\'\\n ');\n\n this.runTask(function () {\n _this24.application.advanceReadiness();\n });\n\n var _application$testHelp7 = this.application.testHelpers,\n visit = _application$testHelp7.visit,\n fillIn = _application$testHelp7.fillIn,\n andThen = _application$testHelp7.andThen,\n find = _application$testHelp7.find,\n wait = _application$testHelp7.wait;\n\n visit('/');\n fillIn('#first', 'current value');\n andThen(function () {\n assert.ok(wasFocused, 'focusIn event was triggered');\n\n assert.equal(find('#first')[0].value, 'current value');\n });\n\n return wait();\n };\n\n _class2.prototype['@test \\'fillIn\\' fires \\'input\\' and \\'change\\' events in the proper order'] = function (assert) {\n var _this25 = this;\n\n assert.expect(1);\n\n var events = [];\n this.add('controller:index', _controller.default.extend({\n actions: {\n oninputHandler: function (e) {\n events.push(e.type);\n },\n onchangeHandler: function (e) {\n events.push(e.type);\n }\n }\n }));\n\n this.addTemplate('index', '\\n \\n ');\n\n this.runTask(function () {\n _this25.application.advanceReadiness();\n });\n\n var _application$testHelp8 = this.application.testHelpers,\n visit = _application$testHelp8.visit,\n fillIn = _application$testHelp8.fillIn,\n andThen = _application$testHelp8.andThen,\n wait = _application$testHelp8.wait;\n\n visit('/');\n fillIn('#first', 'current value');\n andThen(function () {\n assert.deepEqual(events, ['input', 'change'], '`input` and `change` events are fired in the proper order');\n });\n\n return wait();\n };\n\n _class2.prototype['@test \\'fillIn\\' only sets the value in the first matched element'] = function (assert) {\n var _this26 = this;\n\n this.addTemplate('index', '\\n \\n \\n ');\n\n this.runTask(function () {\n _this26.application.advanceReadiness();\n });\n\n var _application$testHelp9 = this.application.testHelpers,\n visit = _application$testHelp9.visit,\n fillIn = _application$testHelp9.fillIn,\n find = _application$testHelp9.find,\n andThen = _application$testHelp9.andThen,\n wait = _application$testHelp9.wait;\n\n visit('/');\n fillIn('input.in-test', 'new value');\n andThen(function () {\n assert.equal(find('#first')[0].value, 'new value');\n assert.equal(find('#second')[0].value, '');\n });\n\n return wait();\n };\n\n _class2.prototype['@test \\'triggerEvent\\' accepts an optional options hash and context'] = function (assert) {\n var _this27 = this;\n\n assert.expect(3);\n\n var event = void 0;\n this.add('component:index-wrapper', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n var firstInput = document.querySelector('.input');\n firstInput.addEventListener('keydown', function (e) {\n return event = e;\n }, false);\n firstInput.addEventListener('change', function (e) {\n return event = e;\n }, false);\n var secondInput = document.querySelector('#limited .input');\n secondInput.addEventListener('keydown', function (e) {\n return event = e;\n }, false);\n secondInput.addEventListener('change', function (e) {\n return event = e;\n }, false);\n }\n }));\n\n this.addTemplate('components/index-wrapper', '\\n {{input type=\"text\" id=\"outside-scope\" class=\"input\"}}\\n \\n {{input type=\"text\" id=\"inside-scope\" class=\"input\"}}\\n
\\n ');\n this.addTemplate('index', '{{index-wrapper}}');\n\n this.runTask(function () {\n _this27.application.advanceReadiness();\n });\n\n var _application$testHelp10 = this.application.testHelpers,\n wait = _application$testHelp10.wait,\n triggerEvent = _application$testHelp10.triggerEvent;\n\n return wait().then(function () {\n return triggerEvent('.input', '#limited', 'keydown', {\n keyCode: 13\n });\n }).then(function () {\n assert.equal(event.keyCode, 13, 'options were passed');\n assert.equal(event.type, 'keydown', 'correct event was triggered');\n assert.equal(event.target.getAttribute('id'), 'inside-scope', 'triggered on the correct element');\n });\n };\n\n return _class2;\n }(HelpersApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: debugging helpers', function (_HelpersApplicationTe2) {\n (0, _emberBabel.inherits)(_class3, _HelpersApplicationTe2);\n\n _class3.prototype.afterEach = function () {\n _HelpersApplicationTe2.prototype.afterEach.call(this);\n (0, _debug.setDebugFunction)('info', originalInfo);\n };\n\n function _class3() {\n\n var _this28 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersApplicationTe2.call(this));\n\n _this28.runTask(function () {\n _this28.application.advanceReadiness();\n });\n return _this28;\n }\n\n _class3.prototype['@test pauseTest pauses'] = function (assert) {\n assert.expect(1);\n // overwrite info to supress the console output (see https://github.com/emberjs/ember.js/issues/16391)\n (0, _debug.setDebugFunction)('info', noop);\n\n var _application$testHelp11 = this.application.testHelpers,\n andThen = _application$testHelp11.andThen,\n pauseTest = _application$testHelp11.pauseTest;\n\n andThen(function () {\n _test.default.adapter.asyncStart = function () {\n assert.ok(true, 'Async start should be called after waiting for other helpers');\n };\n });\n\n pauseTest();\n };\n\n _class3.prototype['@test resumeTest resumes paused tests'] = function (assert) {\n assert.expect(1);\n // overwrite info to supress the console output (see https://github.com/emberjs/ember.js/issues/16391)\n (0, _debug.setDebugFunction)('info', noop);\n\n var _application$testHelp12 = this.application.testHelpers,\n pauseTest = _application$testHelp12.pauseTest,\n resumeTest = _application$testHelp12.resumeTest;\n\n (0, _runloop.later)(function () {\n return resumeTest();\n }, 20);\n return pauseTest().then(function () {\n assert.ok(true, 'pauseTest promise was resolved');\n });\n };\n\n _class3.prototype['@test resumeTest throws if nothing to resume'] = function (assert) {\n var _this29 = this;\n\n assert.expect(1);\n\n assert.throws(function () {\n _this29.application.testHelpers.resumeTest();\n }, /Testing has not been paused. There is nothing to resume./);\n };\n\n return _class3;\n }(HelpersApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: routing helpers', function (_HelpersTestCase3) {\n (0, _emberBabel.inherits)(_class4, _HelpersTestCase3);\n\n function _class4() {\n\n var _this30 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase3.call(this));\n\n _this30.runTask(function () {\n _this30.createApplication();\n _this30.application.setupForTesting();\n _this30.application.injectTestHelpers();\n _this30.router.map(function () {\n this.route('posts', { resetNamespace: true }, function () {\n this.route('new');\n this.route('edit', { resetNamespace: true });\n });\n });\n });\n _this30.runTask(function () {\n _this30.application.advanceReadiness();\n });\n return _this30;\n }\n\n _class4.prototype['@test currentRouteName for \\'/\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'index', 'should equal \\'index\\'.');\n assert.equal(testHelpers.currentPath(), 'index', 'should equal \\'index\\'.');\n assert.equal(testHelpers.currentURL(), '/', 'should equal \\'/\\'.');\n });\n };\n\n _class4.prototype['@test currentRouteName for \\'/posts\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/posts').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'posts.index', 'should equal \\'posts.index\\'.');\n assert.equal(testHelpers.currentPath(), 'posts.index', 'should equal \\'posts.index\\'.');\n assert.equal(testHelpers.currentURL(), '/posts', 'should equal \\'/posts\\'.');\n });\n };\n\n _class4.prototype['@test currentRouteName for \\'/posts/new\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/posts/new').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'posts.new', 'should equal \\'posts.new\\'.');\n assert.equal(testHelpers.currentPath(), 'posts.new', 'should equal \\'posts.new\\'.');\n assert.equal(testHelpers.currentURL(), '/posts/new', 'should equal \\'/posts/new\\'.');\n });\n };\n\n _class4.prototype['@test currentRouteName for \\'/posts/edit\\''] = function (assert) {\n assert.expect(3);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/posts/edit').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'edit', 'should equal \\'edit\\'.');\n assert.equal(testHelpers.currentPath(), 'posts.edit', 'should equal \\'posts.edit\\'.');\n assert.equal(testHelpers.currentURL(), '/posts/edit', 'should equal \\'/posts/edit\\'.');\n });\n };\n\n return _class4;\n }(HelpersTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: pendingRequests', function (_HelpersApplicationTe3) {\n (0, _emberBabel.inherits)(_class5, _HelpersApplicationTe3);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _HelpersApplicationTe3.apply(this, arguments));\n }\n\n _class5.prototype.trigger = function (type, xhr) {\n (0, _emberViews.jQuery)(document).trigger(type, xhr);\n };\n\n _class5.prototype['@test pendingRequests is maintained for ajaxSend and ajaxComplete events'] = function (assert) {\n var done = assert.async();\n assert.equal((0, _pending_requests.pendingRequests)(), 0);\n\n var xhr = { some: 'xhr' };\n\n this.trigger('ajaxSend', xhr);\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests was incremented');\n\n this.trigger('ajaxComplete', xhr);\n setTimeout(function () {\n assert.equal((0, _pending_requests.pendingRequests)(), 0, 'Ember.Test.pendingRequests was decremented');\n done();\n }, 0);\n };\n\n _class5.prototype['@test pendingRequests is ignores ajaxComplete events from past setupForTesting calls'] = function (assert) {\n assert.equal((0, _pending_requests.pendingRequests)(), 0);\n\n var xhr = { some: 'xhr' };\n\n this.trigger('ajaxSend', xhr);\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests was incremented');\n\n (0, _setup_for_testing.default)();\n\n assert.equal((0, _pending_requests.pendingRequests)(), 0, 'Ember.Test.pendingRequests was reset');\n\n this.trigger('ajaxSend', { some: 'more xhr' });\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests was incremented');\n\n this.trigger('ajaxComplete', xhr);\n assert.equal((0, _pending_requests.pendingRequests)(), 1, 'Ember.Test.pendingRequests is not impressed with your unexpected complete');\n };\n\n _class5.prototype['@test pendingRequests is reset by setupForTesting'] = function (assert) {\n (0, _pending_requests.incrementPendingRequests)();\n\n (0, _setup_for_testing.default)();\n\n assert.equal((0, _pending_requests.pendingRequests)(), 0, 'pendingRequests is reset');\n };\n\n return _class5;\n }(HelpersApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: async router', function (_HelpersTestCase4) {\n (0, _emberBabel.inherits)(_class6, _HelpersTestCase4);\n\n function _class6() {\n\n var _this32 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase4.call(this));\n\n _this32.runTask(function () {\n _this32.createApplication();\n\n _this32.router.map(function () {\n this.route('user', { resetNamespace: true }, function () {\n this.route('profile');\n this.route('edit');\n });\n });\n\n // Emulate a long-running unscheduled async operation.\n var resolveLater = function () {\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n /*\n * The wait() helper has a 10ms tick. We should resolve() after\n * at least one tick to test whether wait() held off while the\n * async router was still loading. 20ms should be enough.\n */\n (0, _runloop.later)(resolve, { firstName: 'Tom' }, 20);\n });\n };\n\n _this32.add('route:user', _emberRouting.Route.extend({\n model: function () {\n return resolveLater();\n }\n }));\n\n _this32.add('route:user.profile', _emberRouting.Route.extend({\n beforeModel: function () {\n var _this33 = this;\n\n return resolveLater().then(function () {\n return _this33.transitionTo('user.edit');\n });\n }\n }));\n\n _this32.application.setupForTesting();\n });\n\n _this32.application.injectTestHelpers();\n _this32.runTask(function () {\n _this32.application.advanceReadiness();\n });\n return _this32;\n }\n\n _class6.prototype['@test currentRouteName for \\'/user\\''] = function (assert) {\n var _this34 = this;\n\n assert.expect(4);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/user').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'user.index', 'should equal \\'user.index\\'.');\n assert.equal(testHelpers.currentPath(), 'user.index', 'should equal \\'user.index\\'.');\n assert.equal(testHelpers.currentURL(), '/user', 'should equal \\'/user\\'.');\n var userRoute = _this34.applicationInstance.lookup('route:user');\n assert.equal(userRoute.get('controller.model.firstName'), 'Tom', 'should equal \\'Tom\\'.');\n });\n };\n\n _class6.prototype['@test currentRouteName for \\'/user/profile\\''] = function (assert) {\n var _this35 = this;\n\n assert.expect(4);\n\n var testHelpers = this.application.testHelpers;\n\n return testHelpers.visit('/user/profile').then(function () {\n assert.equal(testHelpers.currentRouteName(), 'user.edit', 'should equal \\'user.edit\\'.');\n assert.equal(testHelpers.currentPath(), 'user.edit', 'should equal \\'user.edit\\'.');\n assert.equal(testHelpers.currentURL(), '/user/edit', 'should equal \\'/user/edit\\'.');\n var userRoute = _this35.applicationInstance.lookup('route:user');\n assert.equal(userRoute.get('controller.model.firstName'), 'Tom', 'should equal \\'Tom\\'.');\n });\n };\n\n return _class6;\n }(HelpersTestCase));\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: can override built-in helpers', function (_HelpersTestCase5) {\n (0, _emberBabel.inherits)(_class7, _HelpersTestCase5);\n\n function _class7() {\n\n var _this36 = (0, _emberBabel.possibleConstructorReturn)(this, _HelpersTestCase5.call(this));\n\n _this36.runTask(function () {\n _this36.createApplication();\n _this36.application.setupForTesting();\n });\n _this36._originalVisitHelper = _test.default._helpers.visit;\n _this36._originalFindHelper = _test.default._helpers.find;\n return _this36;\n }\n\n _class7.prototype.teardown = function () {\n _test.default._helpers.visit = this._originalVisitHelper;\n _test.default._helpers.find = this._originalFindHelper;\n _HelpersTestCase5.prototype.teardown.call(this);\n };\n\n _class7.prototype['@test can override visit helper'] = function (assert) {\n assert.expect(1);\n\n _test.default.registerHelper('visit', function () {\n assert.ok(true, 'custom visit helper was called');\n });\n\n this.application.injectTestHelpers();\n\n return this.application.testHelpers.visit();\n };\n\n _class7.prototype['@test can override find helper'] = function (assert) {\n assert.expect(1);\n\n _test.default.registerHelper('find', function () {\n assert.ok(true, 'custom find helper was called');\n\n return ['not empty array'];\n });\n\n this.application.injectTestHelpers();\n\n return this.application.testHelpers.findWithAssert('.who-cares');\n };\n\n return _class7;\n }(HelpersTestCase));\n }\n});","enifed('ember-testing/tests/integration_test', ['ember-babel', 'internal-test-helpers', 'ember-testing/lib/test', 'ember-runtime', 'ember-routing', 'ember-views'], function (_emberBabel, _internalTestHelpers, _test, _emberRuntime, _emberRouting, _emberViews) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-testing Integration tests of acceptance', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n _this.modelContent = [];\n _this._originalAdapter = _test.default.adapter;\n\n _this.runTask(function () {\n _this.createApplication();\n\n _this.addTemplate('people', '\\n \\n {{#each model as |person|}}\\n
{{person.firstName}}
\\n {{/each}}\\n
\\n ');\n\n _this.router.map(function () {\n this.route('people', { path: '/' });\n });\n\n _this.add('route:people', _emberRouting.Route.extend({\n model: function () {\n return _this.modelContent;\n }\n }));\n\n _this.application.setupForTesting();\n });\n\n _this.runTask(function () {\n _this.application.reset();\n });\n\n _this.application.injectTestHelpers();\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _AutobootApplicationT.prototype.teardown.call(this);\n _test.default.adapter = this._originalAdapter;\n };\n\n _class.prototype['@test template is bound to empty array of people'] = function (assert) {\n var _this2 = this;\n\n if (!_emberViews.jQueryDisabled) {\n this.runTask(function () {\n return _this2.application.advanceReadiness();\n });\n window.visit('/').then(function () {\n var rows = window.find('.name').length;\n assert.equal(rows, 0, 'successfully stubbed an empty array of people');\n });\n } else {\n this.runTask(function () {\n return _this2.application.advanceReadiness();\n });\n window.visit('/').then(function () {\n expectAssertion(function () {\n return window.find('.name');\n }, 'If jQuery is disabled, please import and use helpers from @ember/test-helpers [https://github.com/emberjs/ember-test-helpers]. Note: `find` is not an available helper.');\n });\n }\n };\n\n _class.prototype['@test template is bound to array of 2 people'] = function (assert) {\n var _this3 = this;\n\n if (!_emberViews.jQueryDisabled) {\n this.modelContent = (0, _emberRuntime.A)([]);\n this.modelContent.pushObject({ firstName: 'x' });\n this.modelContent.pushObject({ firstName: 'y' });\n\n this.runTask(function () {\n return _this3.application.advanceReadiness();\n });\n window.visit('/').then(function () {\n var rows = window.find('.name').length;\n assert.equal(rows, 2, 'successfully stubbed a non empty array of people');\n });\n } else {\n assert.expect(0);\n }\n };\n\n _class.prototype['@test \\'visit\\' can be called without advanceReadiness.'] = function (assert) {\n if (!_emberViews.jQueryDisabled) {\n window.visit('/').then(function () {\n var rows = window.find('.name').length;\n assert.equal(rows, 0, 'stubbed an empty array of people without calling advanceReadiness.');\n });\n } else {\n assert.expect(0);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n});","enifed('ember-testing/tests/reexports_test', ['ember-babel', 'ember', 'internal-test-helpers'], function (_emberBabel, _ember, _internalTestHelpers) {\n 'use strict';\n\n var ReexportsTestCase = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(ReexportsTestCase, _AbstractTestCase);\n\n function ReexportsTestCase() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n return ReexportsTestCase;\n }(_internalTestHelpers.AbstractTestCase);\n\n [\n // ember-testing\n ['Test', 'ember-testing'], ['Test.Adapter', 'ember-testing', 'Adapter'], ['Test.QUnitAdapter', 'ember-testing', 'QUnitAdapter'], ['setupForTesting', 'ember-testing']].forEach(function (reexport) {\n var path = reexport[0],\n moduleId = reexport[1],\n exportName = reexport[2];\n\n // default path === exportName if none present\n if (!exportName) {\n exportName = path;\n }\n\n ReexportsTestCase.prototype['@test Ember.' + path + ' exports correctly'] = function (assert) {\n (0, _internalTestHelpers.confirmExport)(_ember.default, assert, path, moduleId, exportName);\n };\n });\n\n (0, _internalTestHelpers.moduleFor)('ember-testing reexports', ReexportsTestCase);\n});","enifed('ember-testing/tests/test/waiters-test', ['ember-babel', 'ember-testing/lib/test/waiters', 'internal-test-helpers'], function (_emberBabel, _waiters, _internalTestHelpers) {\n 'use strict';\n\n var Waiters = function () {\n function Waiters() {\n\n this._waiters = [];\n }\n\n Waiters.prototype.add = function () {\n this._waiters.push([].concat(Array.prototype.slice.call(arguments)));\n };\n\n Waiters.prototype.register = function () {\n this.forEach(function () {\n _waiters.registerWaiter.apply(undefined, arguments);\n });\n };\n\n Waiters.prototype.unregister = function () {\n this.forEach(function () {\n _waiters.unregisterWaiter.apply(undefined, arguments);\n });\n };\n\n Waiters.prototype.forEach = function (callback) {\n var i, args;\n\n for (i = 0; i < this._waiters.length; i++) {\n args = this._waiters[i];\n\n\n callback.apply(undefined, args);\n }\n };\n\n Waiters.prototype.check = function () {\n this.register();\n var result = (0, _waiters.checkWaiters)();\n this.unregister();\n\n return result;\n };\n\n return Waiters;\n }();\n\n (0, _internalTestHelpers.moduleFor)('ember-testing: waiters', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.call(this));\n\n _this.waiters = new Waiters();\n return _this;\n }\n\n _class.prototype.teardown = function () {\n this.waiters.unregister();\n };\n\n _class.prototype['@test registering a waiter'] = function (assert) {\n assert.expect(2);\n\n this.waiters.add({ foo: true }, function () {\n assert.ok(this.foo, 'has proper `this` context');\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'is called');\n return true;\n });\n\n this.waiters.check();\n };\n\n _class.prototype['@test unregistering a waiter'] = function (assert) {\n assert.expect(2);\n\n this.waiters.add({ foo: true }, function () {\n assert.ok(true, 'precond - waiter with context is registered');\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter without context is registered');\n return true;\n });\n\n this.waiters.check();\n this.waiters.unregister();\n\n (0, _waiters.checkWaiters)();\n };\n\n _class.prototype['@test checkWaiters returns false if all waiters return true'] = function (assert) {\n assert.expect(3);\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return true;\n });\n\n assert.notOk(this.waiters.check(), 'checkWaiters returns true if all waiters return true');\n };\n\n _class.prototype['@test checkWaiters returns true if any waiters return false'] = function (assert) {\n assert.expect(3);\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return true;\n });\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return false;\n });\n\n assert.ok(this.waiters.check(), 'checkWaiters returns false if any waiters return false');\n };\n\n _class.prototype['@test checkWaiters short circuits after first falsey waiter'] = function (assert) {\n assert.expect(2);\n\n this.waiters.add(function () {\n assert.ok(true, 'precond - waiter is registered');\n\n return false;\n });\n\n this.waiters.add(function () {\n assert.notOk(true, 'waiter should not be called');\n });\n\n assert.ok(this.waiters.check(), 'checkWaiters returns false if any waiters return false');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/cache_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Cache', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test basic'] = function (assert) {\n var cache = new _emberUtils.Cache(100, function (key) {\n return key.toUpperCase();\n });\n\n assert.equal(cache.get('foo'), 'FOO');\n assert.equal(cache.get('bar'), 'BAR');\n assert.equal(cache.get('foo'), 'FOO');\n };\n\n _class.prototype['@test explicit sets'] = function (assert) {\n var cache = new _emberUtils.Cache(100, function (key) {\n return key.toUpperCase();\n });\n\n assert.equal(cache.get('foo'), 'FOO');\n\n assert.equal(cache.set('foo', 'FOO!!!'), 'FOO!!!');\n\n assert.equal(cache.get('foo'), 'FOO!!!');\n\n assert.strictEqual(cache.set('foo', undefined), undefined);\n\n assert.strictEqual(cache.get('foo'), undefined);\n };\n\n _class.prototype['@test caches computation correctly'] = function (assert) {\n var count = 0;\n var cache = new _emberUtils.Cache(100, function (key) {\n count++;\n return key.toUpperCase();\n });\n\n assert.equal(count, 0);\n cache.get('foo');\n assert.equal(count, 1);\n cache.get('bar');\n assert.equal(count, 2);\n cache.get('bar');\n assert.equal(count, 2);\n cache.get('foo');\n assert.equal(count, 2);\n };\n\n _class.prototype['@test handles undefined value correctly'] = function (assert) {\n var count = 0;\n var cache = new _emberUtils.Cache(100, function () {\n count++;\n });\n\n assert.equal(count, 0);\n assert.strictEqual(cache.get('foo'), undefined);\n assert.equal(count, 1);\n assert.strictEqual(cache.get('bar'), undefined);\n assert.equal(count, 2);\n assert.strictEqual(cache.get('bar'), undefined);\n assert.equal(count, 2);\n assert.strictEqual(cache.get('foo'), undefined);\n assert.equal(count, 2);\n };\n\n _class.prototype['@test continues working after reaching cache limit'] = function (assert) {\n var cache = new _emberUtils.Cache(3, function (key) {\n return key.toUpperCase();\n });\n\n cache.get('a');\n cache.get('b');\n cache.get('c');\n\n assert.equal(cache.get('d'), 'D');\n assert.equal(cache.get('a'), 'A');\n assert.equal(cache.get('b'), 'B');\n assert.equal(cache.get('c'), 'C');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/can_invoke_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n var obj = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Ember.canInvoke', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n obj = {\n foobar: 'foobar',\n aMethodThatExists: function () {}\n };\n return _this;\n }\n\n _class.prototype.teardown = function () {\n obj = undefined;\n };\n\n _class.prototype[\"@test should return false if the object doesn't exist\"] = function (assert) {\n assert.equal((0, _emberUtils.canInvoke)(undefined, 'aMethodThatDoesNotExist'), false);\n };\n\n _class.prototype['@test should return true for falsy values that have methods'] = function (assert) {\n assert.equal((0, _emberUtils.canInvoke)(false, 'valueOf'), true);\n assert.equal((0, _emberUtils.canInvoke)('', 'charAt'), true);\n assert.equal((0, _emberUtils.canInvoke)(0, 'toFixed'), true);\n };\n\n _class.prototype['@test should return true if the method exists on the object'] = function (assert) {\n assert.equal((0, _emberUtils.canInvoke)(obj, 'aMethodThatExists'), true);\n };\n\n _class.prototype[\"@test should return false if the method doesn't exist on the object\"] = function (assert) {\n assert.equal((0, _emberUtils.canInvoke)(obj, 'aMethodThatDoesNotExist'), false);\n };\n\n _class.prototype['@test should return false if the property exists on the object but is a non-function'] = function (assert) {\n assert.equal((0, _emberUtils.canInvoke)(obj, 'foobar'), false);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/checkHasSuper_test', ['ember-babel', 'ember-browser-environment', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberBrowserEnvironment, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n // Only run this test on browsers that we are certain should have function\n // source available. This allows the test suite to continue to pass on other\n // platforms that correctly (for them) fall back to the \"always wrap\" code.\n\n if (_emberBrowserEnvironment.isChrome || _emberBrowserEnvironment.isFirefox) {\n (0, _internalTestHelpers.moduleFor)('checkHasSuper', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test does not super wrap needlessly [GH #12462]'] = function (assert) {\n assert.notOk((0, _emberUtils.checkHasSuper)(function () {}), 'empty function does not have super');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n }\n});","enifed('ember-utils/tests/generate_guid_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.generateGuid', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Prefix'] = function (assert) {\n\n assert.ok((0, _emberUtils.generateGuid)({}, 'tyrell').indexOf('tyrell') > -1, 'guid can be prefixed');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/guid_for_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n function sameGuid(assert, a, b, message) {\n assert.equal((0, _emberUtils.guidFor)(a), (0, _emberUtils.guidFor)(b), message);\n }\n\n function diffGuid(assert, a, b, message) {\n assert.ok((0, _emberUtils.guidFor)(a) !== (0, _emberUtils.guidFor)(b), message);\n }\n\n function nanGuid(assert, obj) {\n assert.ok(isNaN(parseInt((0, _emberUtils.guidFor)(obj), 0)), 'guids for ' + typeof obj + \"don't parse to numbers\");\n }\n\n (0, _internalTestHelpers.moduleFor)('guidFor', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Object'] = function (assert) {\n var a = {};\n\n\n sameGuid(assert, a, a, 'same object always yields same guid');\n diffGuid(assert, a, {}, 'different objects yield different guids');\n nanGuid(assert, a);\n };\n\n _class.prototype['@test strings'] = function (assert) {\n var a = 'string A';\n\n\n sameGuid(assert, a, a, 'same string always yields same guid');\n sameGuid(assert, a, 'string A', 'identical strings always yield the same guid');\n diffGuid(assert, a, 'String B', 'different strings yield different guids');\n nanGuid(assert, a);\n };\n\n _class.prototype['@test numbers'] = function (assert) {\n var a = 23;\n\n\n sameGuid(assert, a, a, 'same numbers always yields same guid');\n sameGuid(assert, a, 23, 'identical numbers always yield the same guid');\n diffGuid(assert, a, 34, 'different numbers yield different guids');\n nanGuid(assert, a);\n };\n\n _class.prototype['@test symbols'] = function (assert) {\n if (typeof Symbol === 'undefined') {\n assert.ok(true, 'symbols are not supported on this browser');\n return;\n }\n\n var a = Symbol('a');\n var b = Symbol('b');\n\n sameGuid(assert, a, a, 'same symbols always yields same guid');\n diffGuid(assert, a, b, 'different symbols yield different guids');\n nanGuid(assert, a);\n };\n\n _class.prototype['@test booleans'] = function (assert) {\n var a = true;\n\n var b = false;\n\n sameGuid(assert, a, a, 'same booleans always yields same guid');\n sameGuid(assert, a, true, 'identical booleans always yield the same guid');\n diffGuid(assert, a, b, 'different boolean yield different guids');\n nanGuid(assert, a);\n nanGuid(assert, b);\n };\n\n _class.prototype['@test null and undefined'] = function (assert) {\n var a = null;\n\n var b = void 0;\n\n sameGuid(assert, a, a, 'null always returns the same guid');\n sameGuid(assert, b, b, 'undefined always returns the same guid');\n sameGuid(assert, a, null, 'different nulls return the same guid');\n diffGuid(assert, a, b, 'null and undefined return different guids');\n nanGuid(assert, a);\n nanGuid(assert, b);\n };\n\n _class.prototype['@test arrays'] = function (assert) {\n var a = ['a', 'b', 'c'];\n\n\n sameGuid(assert, a, a, 'same instance always yields same guid');\n diffGuid(assert, a, ['a', 'b', 'c'], 'identical arrays always yield the same guid');\n diffGuid(assert, a, ['1', '2', '3'], 'different arrays yield different guids');\n nanGuid(assert, a);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/inspect_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.inspect', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test strings'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)('foo'), '\"foo\"');\n };\n\n _class.prototype['@test numbers'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)(2.6), '2.6');\n };\n\n _class.prototype['@test null'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)(null), 'null');\n };\n\n _class.prototype['@test undefined'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)(undefined), 'undefined');\n };\n\n _class.prototype['@test true'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)(true), 'true');\n };\n\n _class.prototype['@test false'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)(false), 'false');\n };\n\n _class.prototype['@test object'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)({}), '{ }');\n assert.equal((0, _emberUtils.inspect)({ foo: 'bar' }), '{ foo: \"bar\" }');\n var obj = {\n foo: function () {\n return this;\n }\n };\n // IE 11 doesn't have function name\n if (obj.foo.name) {\n assert.equal((0, _emberUtils.inspect)(obj), '{ foo: [Function:foo] }');\n } else {\n assert.equal((0, _emberUtils.inspect)(obj), '{ foo: [Function] }');\n }\n };\n\n _class.prototype['@test objects without a prototype'] = function (assert) {\n var prototypelessObj = Object.create(null);\n prototypelessObj.a = 1;\n prototypelessObj.b = [Object.create(null)];\n assert.equal((0, _emberUtils.inspect)({ foo: prototypelessObj }), '{ foo: { a: 1, b: [ { } ] } }');\n };\n\n _class.prototype['@test array'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)([1, 2, 3]), '[ 1, 2, 3 ]');\n };\n\n _class.prototype['@test array list limit'] = function (assert) {\n var a = [],\n i;\n for (i = 0; i < 120; i++) {\n a.push(1);\n }\n assert.equal((0, _emberUtils.inspect)(a), '[ ' + a.slice(0, 100).join(', ') + ', ... 20 more items ]');\n };\n\n _class.prototype['@test object list limit'] = function (assert) {\n var obj = {},\n i;\n var pairs = [];\n for (i = 0; i < 120; i++) {\n obj['key' + i] = i;\n pairs.push('key' + i + ': ' + i);\n }\n assert.equal((0, _emberUtils.inspect)(obj), '{ ' + pairs.slice(0, 100).join(', ') + ', ... 20 more keys }');\n };\n\n _class.prototype['@test depth limit'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)([[[['here', { a: 1 }, [1]]]]]), '[ [ [ [ \"here\", [Object], [Array] ] ] ] ]');\n };\n\n _class.prototype['@test odd key'] = function (assert) {\n var _inspect;\n\n assert.equal((0, _emberUtils.inspect)((_inspect = {}, _inspect['Hello world!\\nHow are you?'] = 1, _inspect)), '{ \"Hello world!\\\\nHow are you?\": 1 }');\n };\n\n _class.prototype['@test node call'] = function (assert) {\n var obj = { a: 1 };\n obj.inspect = _emberUtils.inspect;\n\n assert.equal(obj.inspect(2, {}), obj);\n };\n\n _class.prototype['@test cycle'] = function (assert) {\n var obj = {};\n obj.a = obj;\n var arr = [obj];\n arr.push(arr);\n assert.equal((0, _emberUtils.inspect)(arr), '[ { a: [Circular] }, [Circular] ]');\n };\n\n _class.prototype['@test custom toString'] = function (assert) {\n var Component = function () {\n function Component() {}\n\n Component.toString = function () {\n return '@ember/component';\n };\n\n Component.prototype.toString = function () {\n return '<' + this.constructor + ':ember234>';\n };\n\n return Component;\n }();\n\n assert.equal((0, _emberUtils.inspect)([new Component(), Component]), '[ <@ember/component:ember234>, @ember/component ]');\n };\n\n _class.prototype['@test regexp'] = function (assert) {\n assert.equal((0, _emberUtils.inspect)(/regexp/), '/regexp/');\n };\n\n _class.prototype['@test date'] = function (assert) {\n var inspected = (0, _emberUtils.inspect)(new Date('Sat Apr 30 2011 13:24:11'));\n assert.ok(inspected.match(/Sat Apr 30/), 'The inspected date has its date');\n assert.ok(inspected.match(/2011/), 'The inspected date has its year');\n assert.ok(inspected.match(/13:24:11/), 'The inspected date has its time');\n };\n\n _class.prototype['@test inspect outputs the toString() representation of Symbols'] = function (assert) {\n var symbol;\n\n if (_emberUtils.HAS_NATIVE_SYMBOL) {\n symbol = Symbol('test');\n\n assert.equal((0, _emberUtils.inspect)(symbol), 'Symbol(test)');\n } else {\n assert.expect(0);\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/is_proxy_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-utils isProxy', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test basic'] = function (assert) {\n var proxy = {};\n (0, _emberUtils.setProxy)(proxy);\n\n assert.equal((0, _emberUtils.isProxy)(proxy), true);\n\n assert.equal((0, _emberUtils.isProxy)({}), false);\n assert.equal((0, _emberUtils.isProxy)(undefined), false);\n assert.equal((0, _emberUtils.isProxy)(null), false);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/make_array_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Ember.makeArray', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test undefined'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)(), []);\n assert.deepEqual((0, _emberUtils.makeArray)(undefined), []);\n };\n\n _class.prototype['@test null'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)(null), []);\n };\n\n _class.prototype['@test string'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)('lindsay'), ['lindsay']);\n };\n\n _class.prototype['@test number'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)(0), [0]);\n assert.deepEqual((0, _emberUtils.makeArray)(1), [1]);\n };\n\n _class.prototype['@test array'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)([1, 2, 42]), [1, 2, 42]);\n };\n\n _class.prototype['@test true'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)(true), [true]);\n };\n\n _class.prototype['@test false'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)(false), [false]);\n };\n\n _class.prototype['@test object'] = function (assert) {\n assert.deepEqual((0, _emberUtils.makeArray)({}), [{}]);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/to-string-test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember-utils toString', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.apply(this, arguments));\n }\n\n _class.prototype['@test toString uses an object\\'s toString method when available'] = function (assert) {\n\n assert.strictEqual((0, _emberUtils.toString)({\n toString: function () {\n return 'bob';\n }\n }), 'bob');\n };\n\n _class.prototype['@test toString falls back to Object.prototype.toString'] = function (assert) {\n var obj = Object.create(null);\n\n assert.strictEqual((0, _emberUtils.toString)(obj), {}.toString());\n };\n\n _class.prototype['@test toString does not fail when called on Arrays with objects without toString method'] = function (assert) {\n var obj = Object.create(null);\n\n\n assert.strictEqual((0, _emberUtils.toString)([obj, 2]), {}.toString() + ',2');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember-utils/tests/try_invoke_test', ['ember-babel', 'ember-utils', 'internal-test-helpers'], function (_emberBabel, _emberUtils, _internalTestHelpers) {\n 'use strict';\n\n var obj = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Ember.tryInvoke', function (_TestCase) {\n (0, _emberBabel.inherits)(_class, _TestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestCase.call(this));\n\n obj = {\n aMethodThatExists: function () {\n return true;\n },\n aMethodThatTakesArguments: function (arg1, arg2) {\n return arg1 === arg2;\n }\n };\n return _this;\n }\n\n _class.prototype.teardown = function () {\n obj = undefined;\n };\n\n _class.prototype[\"@test should return undefined when the object doesn't exist\"] = function (assert) {\n assert.equal((0, _emberUtils.tryInvoke)(undefined, 'aMethodThatDoesNotExist'), undefined);\n };\n\n _class.prototype[\"@test should return undefined when asked to perform a method that doesn't exist on the object\"] = function (assert) {\n assert.equal((0, _emberUtils.tryInvoke)(obj, 'aMethodThatDoesNotExist'), undefined);\n };\n\n _class.prototype['@test should return what the method returns when asked to perform a method that exists on the object'] = function (assert) {\n assert.equal((0, _emberUtils.tryInvoke)(obj, 'aMethodThatExists'), true);\n };\n\n _class.prototype['@test should return what the method returns when asked to perform a method that takes arguments and exists on the object'] = function (assert) {\n assert.equal((0, _emberUtils.tryInvoke)(obj, 'aMethodThatTakesArguments', [true, true]), true);\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember/tests/application_lifecycle_test', ['ember-babel', 'internal-test-helpers', '@ember/application', 'ember-routing', 'ember-glimmer', '@ember/debug'], function (_emberBabel, _internalTestHelpers, _application, _emberRouting, _emberGlimmer, _debug) {\n 'use strict';\n\n var originalDebug = (0, _debug.getDebugFunction)('debug');\n var noop = function () {};\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - route hooks', function (_AutobootApplicationT) {\n (0, _emberBabel.inherits)(_class, _AutobootApplicationT);\n\n _class.prototype.createApplication = function () {\n var _AutobootApplicationT2;\n\n var application = (_AutobootApplicationT2 = _AutobootApplicationT.prototype.createApplication).call.apply(_AutobootApplicationT2, [this].concat(Array.prototype.slice.call(arguments)));\n this.add('router:main', _emberRouting.Router.extend({\n location: 'none'\n }));\n return application;\n };\n\n function _class() {\n\n (0, _debug.setDebugFunction)('debug', noop);\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT.call(this));\n\n var menuItem = _this.menuItem = {};\n\n _this.runTask(function () {\n _this.createApplication();\n\n var SettingRoute = _emberRouting.Route.extend({\n setupController: function () {\n this.controller.set('selectedMenuItem', menuItem);\n },\n deactivate: function () {\n this.controller.set('selectedMenuItem', null);\n }\n });\n _this.add('route:index', SettingRoute);\n _this.add('route:application', SettingRoute);\n });\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _debug.setDebugFunction)('debug', originalDebug);\n };\n\n _class.prototype['@test Resetting the application allows controller properties to be set when a route deactivates'] = function (assert) {\n var indexController = this.indexController,\n applicationController = this.applicationController;\n\n assert.equal(indexController.get('selectedMenuItem'), this.menuItem);\n assert.equal(applicationController.get('selectedMenuItem'), this.menuItem);\n\n this.application.reset();\n\n assert.equal(indexController.get('selectedMenuItem'), null);\n assert.equal(applicationController.get('selectedMenuItem'), null);\n };\n\n _class.prototype['@test Destroying the application resets the router before the appInstance is destroyed'] = function (assert) {\n var _this2 = this;\n\n var indexController = this.indexController,\n applicationController = this.applicationController;\n\n assert.equal(indexController.get('selectedMenuItem'), this.menuItem);\n assert.equal(applicationController.get('selectedMenuItem'), this.menuItem);\n\n this.runTask(function () {\n _this2.application.destroy();\n });\n\n assert.equal(indexController.get('selectedMenuItem'), null);\n assert.equal(applicationController.get('selectedMenuItem'), null);\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'indexController',\n get: function () {\n return this.applicationInstance.lookup('controller:index');\n }\n }, {\n key: 'applicationController',\n get: function () {\n return this.applicationInstance.lookup('controller:application');\n }\n }]);\n return _class;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle', function (_AutobootApplicationT3) {\n (0, _emberBabel.inherits)(_class2, _AutobootApplicationT3);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AutobootApplicationT3.apply(this, arguments));\n }\n\n _class2.prototype.createApplication = function () {\n var _AutobootApplicationT4;\n\n var application = (_AutobootApplicationT4 = _AutobootApplicationT3.prototype.createApplication).call.apply(_AutobootApplicationT4, [this].concat(Array.prototype.slice.call(arguments)));\n this.add('router:main', _emberRouting.Router.extend({\n location: 'none'\n }));\n return application;\n };\n\n _class2.prototype['@test Destroying a route after the router does create an undestroyed \\'toplevelView\\''] = function (assert) {\n var _this4 = this;\n\n this.runTask(function () {\n _this4.createApplication();\n _this4.addTemplate('index', 'Index!');\n _this4.addTemplate('application', 'Application! {{outlet}}');\n });\n\n var router = this.applicationInstance.lookup('router:main');\n var route = this.applicationInstance.lookup('route:index');\n\n this.runTask(function () {\n return router.destroy();\n });\n assert.equal(router._toplevelView, null, 'the toplevelView was cleared');\n\n this.runTask(function () {\n return route.destroy();\n });\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n\n this.runTask(function () {\n return _this4.application.destroy();\n });\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n };\n\n _class2.prototype['@test initializers can augment an applications customEvents hash'] = function (assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n var MyApplication = _application.default.extend();\n\n MyApplication.initializer({\n name: 'customize-things',\n initialize: function (application) {\n application.customEvents = {\n wowza: 'wowza'\n };\n }\n });\n\n this.runTask(function () {\n _this5.createApplication({}, MyApplication);\n\n _this5.add('component:foo-bar', _emberGlimmer.Component.extend({\n wowza: function () {\n assert.ok(true, 'fired the event!');\n }\n }));\n\n _this5.addTemplate('application', '{{foo-bar}}');\n _this5.addTemplate('components/foo-bar', '
');\n });\n\n this.$('#wowza-thingy').trigger('wowza');\n };\n\n _class2.prototype['@test instanceInitializers can augment an the customEvents hash'] = function (assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var MyApplication = _application.default.extend();\n\n MyApplication.instanceInitializer({\n name: 'customize-things',\n initialize: function (application) {\n application.customEvents = {\n herky: 'jerky'\n };\n }\n });\n this.runTask(function () {\n _this6.createApplication({}, MyApplication);\n\n _this6.add('component:foo-bar', _emberGlimmer.Component.extend({\n jerky: function () {\n assert.ok(true, 'fired the event!');\n }\n }));\n\n _this6.addTemplate('application', '{{foo-bar}}');\n _this6.addTemplate('components/foo-bar', '
');\n });\n\n this.$('#herky-thingy').trigger('herky');\n };\n\n return _class2;\n }(_internalTestHelpers.AutobootApplicationTestCase));\n});","enifed('ember/tests/component_context_test', ['ember-babel', '@ember/controller', 'ember-glimmer', 'internal-test-helpers'], function (_emberBabel, _controller, _emberGlimmer, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - Component Context', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Components with a block should have the proper content when a template is provided'] = function (assert) {\n var _this2 = this;\n\n this.addTemplate('application', '\\n \\n {{#my-component}}{{text}}{{/my-component}}\\n
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({\n text: 'inner'\n }),\n template: '{{text}}-{{yield}}'\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this2.element.querySelector('#wrapper'));\n assert.equal(text, 'inner-outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components with a block should yield the proper content without a template provided'] = function (assert) {\n var _this3 = this;\n\n this.addTemplate('application', '\\n \\n {{#my-component}}{{text}}{{/my-component}}\\n
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({\n text: 'inner'\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this3.element.querySelector('#wrapper'));\n assert.equal(text, 'outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components without a block should have the proper content when a template is provided'] = function (assert) {\n var _this4 = this;\n\n this.addTemplate('application', '\\n {{my-component}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({\n text: 'inner'\n }),\n template: '{{text}}'\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this4.element.querySelector('#wrapper'));\n assert.equal(text, 'inner', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components without a block should have the proper content'] = function (assert) {\n var _this5 = this;\n\n this.addTemplate('application', '\\n {{my-component}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({\n didInsertElement: function () {\n this.element.innerHTML = 'Some text inserted';\n }\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this5.element.querySelector('#wrapper'));\n assert.equal(text, 'Some text inserted', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test properties of a component without a template should not collide with internal structures [DEPRECATED]'] = function (assert) {\n var _this6 = this;\n\n this.addTemplate('application', '\\n {{my-component data=foo}}
');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer',\n foo: 'Some text inserted'\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({\n didInsertElement: function () {\n this.element.innerHTML = this.get('data');\n }\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this6.element.querySelector('#wrapper'));\n assert.equal(text, 'Some text inserted', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test attrs property of a component without a template should not collide with internal structures'] = function (assert) {\n var _this7 = this;\n\n this.addTemplate('application', '\\n {{my-component attrs=foo}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n text: 'outer',\n foo: 'Some text inserted'\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({\n didInsertElement: function () {\n this.element.innerHTML = this.get('attrs.attrs.value');\n }\n })\n });\n\n return this.visit('/').then(function () {\n var text = (0, _internalTestHelpers.getTextOf)(_this7.element.querySelector('#wrapper'));\n assert.equal(text, 'Some text inserted', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Components trigger actions in the parents context when called from within a block'] = function (assert) {\n var _this8 = this;\n\n this.addTemplate('application', '\\n \\n {{#my-component}}\\n
Fizzbuzz \\n {{/my-component}}\\n
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n actions: {\n fizzbuzz: function () {\n assert.ok(true, 'action triggered on parent');\n }\n }\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({})\n });\n\n return this.visit('/').then(function () {\n _this8.$('#fizzbuzz', '#wrapper').click();\n });\n };\n\n _class.prototype['@test Components trigger actions in the components context when called from within its template'] = function (assert) {\n var _this9 = this;\n\n this.addTemplate('application', '\\n {{#my-component}}{{text}}{{/my-component}}
\\n ');\n\n this.add('controller:application', _controller.default.extend({\n actions: {\n fizzbuzz: function () {\n assert.ok(false, 'action on the wrong context');\n }\n }\n }));\n this.addComponent('my-component', {\n ComponentClass: _emberGlimmer.Component.extend({\n actions: {\n fizzbuzz: function () {\n assert.ok(true, 'action triggered on component');\n }\n }\n }),\n template: 'Fizzbuzz '\n });\n\n return this.visit('/').then(function () {\n _this9.$('#fizzbuzz', '#wrapper').click();\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/component_registration_test', ['ember-babel', '@ember/application', '@ember/controller', 'ember-glimmer', 'ember-template-compiler', 'internal-test-helpers', 'ember-environment'], function (_emberBabel, _application, _controller, _emberGlimmer, _emberTemplateCompiler, _internalTestHelpers, _emberEnvironment) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - Component Registration', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype.createApplication = function (options) {\n return _ApplicationTestCase.prototype.createApplication.call(this, options, _application.default.extend());\n };\n\n _class.prototype['@test The helper becomes the body of the component'] = function () {\n var _this2 = this;\n\n this.addTemplate('components/expand-it', 'hello {{yield}}
');\n this.addTemplate('application', 'Hello world {{#expand-it}}world{{/expand-it}}');\n\n return this.visit('/').then(function () {\n _this2.assertText('Hello world hello world');\n _this2.assertComponentElement(_this2.element.firstElementChild, {\n tagName: 'div',\n content: 'hello world
'\n });\n });\n };\n\n _class.prototype['@test The helper becomes the body of the component (ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS = true;)'] = function () {\n var _this3 = this;\n\n _emberEnvironment.ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS = true;\n this.addTemplate('components/expand-it', 'hello {{yield}}
');\n this.addTemplate('application', 'Hello world {{#expand-it}}world{{/expand-it}}');\n\n return this.visit('/').then(function () {\n _this3.assertInnerHTML('Hello world hello world
');\n _emberEnvironment.ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS = false;\n });\n };\n\n _class.prototype['@test If a component is registered, it is used'] = function (assert) {\n var _this4 = this;\n\n this.addTemplate('components/expand-it', 'hello {{yield}}
');\n this.addTemplate('application', 'Hello world {{#expand-it}}world{{/expand-it}}');\n\n this.application.instanceInitializer({\n name: 'expand-it-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:expand-it', _emberGlimmer.Component.extend({\n classNames: 'testing123'\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this4.$('div.testing123').text().trim();\n assert.equal(text, 'hello world', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Late-registered components can be rendered with custom `layout` property'] = function (assert) {\n var _this5 = this;\n\n this.addTemplate('application', 'there goes {{my-hero}}
');\n\n this.application.instanceInitializer({\n name: 'my-hero-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:my-hero', _emberGlimmer.Component.extend({\n classNames: 'testing123',\n layout: (0, _emberTemplateCompiler.compile)('watch him as he GOES')\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this5.$('#wrapper').text().trim();\n assert.equal(text, 'there goes watch him as he GOES', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Late-registered components can be rendered with template registered on the container'] = function (assert) {\n var _this6 = this;\n\n this.addTemplate('application', 'hello world {{sally-rutherford}}-{{#sally-rutherford}}!!!{{/sally-rutherford}}
');\n\n this.application.instanceInitializer({\n name: 'sally-rutherford-component-template',\n initialize: function (applicationInstance) {\n applicationInstance.register('template:components/sally-rutherford', (0, _emberTemplateCompiler.compile)('funkytowny{{yield}}'));\n }\n });\n this.application.instanceInitializer({\n name: 'sally-rutherford-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:sally-rutherford', _emberGlimmer.Component);\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this6.$('#wrapper').text().trim();\n assert.equal(text, 'hello world funkytowny-funkytowny!!!', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Late-registered components can be rendered with ONLY the template registered on the container'] = function (assert) {\n var _this7 = this;\n\n this.addTemplate('application', 'hello world {{borf-snorlax}}-{{#borf-snorlax}}!!!{{/borf-snorlax}}
');\n\n this.application.instanceInitializer({\n name: 'borf-snorlax-component-template',\n initialize: function (applicationInstance) {\n applicationInstance.register('template:components/borf-snorlax', (0, _emberTemplateCompiler.compile)('goodfreakingTIMES{{yield}}'));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this7.$('#wrapper').text().trim();\n assert.equal(text, 'hello world goodfreakingTIMES-goodfreakingTIMES!!!', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Assigning layoutName to a component should setup the template as a layout'] = function (assert) {\n var _this8 = this;\n\n assert.expect(1);\n\n this.addTemplate('application', '{{#my-component}}{{text}}{{/my-component}}
');\n this.addTemplate('foo-bar-baz', '{{text}}-{{yield}}');\n\n this.application.instanceInitializer({\n name: 'application-controller',\n initialize: function (applicationInstance) {\n applicationInstance.register('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n }\n });\n this.application.instanceInitializer({\n name: 'my-component-component',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:my-component', _emberGlimmer.Component.extend({\n text: 'inner',\n layoutName: 'foo-bar-baz'\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this8.$('#wrapper').text().trim();\n assert.equal(text, 'inner-outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Assigning layoutName and layout to a component should use the `layout` value'] = function (assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n this.addTemplate('application', '{{#my-component}}{{text}}{{/my-component}}
');\n this.addTemplate('foo-bar-baz', 'No way!');\n\n this.application.instanceInitializer({\n name: 'application-controller-layout',\n initialize: function (applicationInstance) {\n applicationInstance.register('controller:application', _controller.default.extend({\n text: 'outer'\n }));\n }\n });\n this.application.instanceInitializer({\n name: 'my-component-component-layout',\n initialize: function (applicationInstance) {\n applicationInstance.register('component:my-component', _emberGlimmer.Component.extend({\n text: 'inner',\n layoutName: 'foo-bar-baz',\n layout: (0, _emberTemplateCompiler.compile)('{{text}}-{{yield}}')\n }));\n }\n });\n\n return this.visit('/').then(function () {\n var text = _this9.$('#wrapper').text().trim();\n assert.equal(text, 'inner-outer', 'The component is composed correctly');\n });\n };\n\n _class.prototype['@test Using name of component that does not exist'] = function () {\n var _this10 = this;\n\n this.addTemplate('application', '{{#no-good}} {{/no-good}}
');\n\n // TODO: Use the async form of expectAssertion here when it is available\n expectAssertion(function () {\n _this10.visit('/');\n }, /.* named \"no-good\" .*/);\n\n return this.runLoopSettled();\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/controller_test', ['ember-babel', '@ember/controller', 'internal-test-helpers', 'ember-glimmer'], function (_emberBabel, _controller, _internalTestHelpers, _emberGlimmer) {\n 'use strict';\n\n /*\n In Ember 1.x, controllers subtly affect things like template scope\n and action targets in exciting and often inscrutable ways. This test\n file contains integration tests that verify the correct behavior of\n the many parts of the system that change and rely upon controller scope,\n from the runtime up to the templating layer.\n */\n\n (0, _internalTestHelpers.moduleFor)('Template scoping examples', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Actions inside an outlet go to the associated controller'] = function (assert) {\n var _this2 = this;\n\n this.add('controller:index', _controller.default.extend({\n actions: {\n componentAction: function () {\n assert.ok(true, 'controller received the action');\n }\n }\n }));\n\n this.addComponent('component-with-action', {\n ComponentClass: _emberGlimmer.Component.extend({\n classNames: ['component-with-action'],\n click: function () {\n this.action();\n }\n })\n });\n\n this.addTemplate('index', '{{component-with-action action=(action \"componentAction\")}}');\n\n return this.visit('/').then(function () {\n _this2.runTask(function () {\n return _this2.$('.component-with-action').click();\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/error_handler_test', ['ember-babel', '@ember/debug', '@ember/runloop', 'ember-error-handling', 'rsvp', 'internal-test-helpers'], function (_emberBabel, _debug, _runloop, _emberErrorHandling, _rsvp, _internalTestHelpers) {\n 'use strict';\n\n var WINDOW_ONERROR = void 0;\n\n function runThatThrowsSync() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Error for testing error handling';\n\n return (0, _runloop.run)(function () {\n throw new Error(message);\n });\n }\n\n (0, _internalTestHelpers.moduleFor)('error_handler', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype.beforeEach = function () {\n // capturing this outside of module scope to ensure we grab\n // the test frameworks own window.onerror to reset it\n WINDOW_ONERROR = window.onerror;\n };\n\n _class.prototype.afterEach = function () {\n (0, _debug.setTesting)(_debug.isTesting);\n window.onerror = WINDOW_ONERROR;\n\n (0, _emberErrorHandling.setOnerror)(undefined);\n };\n\n _class.prototype['@test by default there is no onerror - sync run'] = function (assert) {\n assert.strictEqual((0, _emberErrorHandling.getOnerror)(), undefined, 'precond - there should be no Ember.onerror set by default');\n assert.throws(runThatThrowsSync, Error, 'errors thrown sync are catchable');\n };\n\n _class.prototype['@test when Ember.onerror (which rethrows) is registered - sync run'] = function (assert) {\n assert.expect(2);\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.ok(true, 'onerror called');\n throw error;\n });\n assert.throws(runThatThrowsSync, Error, 'error is thrown');\n };\n\n _class.prototype['@test when Ember.onerror (which does not rethrow) is registered - sync run'] = function (assert) {\n assert.expect(2);\n (0, _emberErrorHandling.setOnerror)(function () {\n assert.ok(true, 'onerror called');\n });\n runThatThrowsSync();\n assert.ok(true, 'no error was thrown, Ember.onerror can intercept errors');\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = true, no Ember.onerror) - sync run'] = function (assert) {\n (0, _debug.setTesting)(true);\n\n var error = new Error('the error');\n assert.throws(function () {\n (0, _runloop.run)(function () {\n throw error;\n });\n }, error);\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = false, no Ember.onerror) - sync run'] = function (assert) {\n (0, _debug.setTesting)(false);\n var error = new Error('the error');\n assert.throws(function () {\n (0, _runloop.run)(function () {\n throw error;\n });\n }, error);\n };\n\n _class.prototype['@test does not swallow exceptions (Ember.testing = false, Ember.onerror which rethrows) - sync run'] = function (assert) {\n assert.expect(2);\n (0, _debug.setTesting)(false);\n\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.ok(true, 'Ember.onerror was called');\n throw error;\n });\n\n var error = new Error('the error');\n assert.throws(function () {\n (0, _runloop.run)(function () {\n throw error;\n });\n }, error);\n };\n\n _class.prototype['@test Ember.onerror can intercept errors (aka swallow) by not rethrowing (Ember.testing = false) - sync run'] = function (assert) {\n assert.expect(1);\n (0, _debug.setTesting)(false);\n\n (0, _emberErrorHandling.setOnerror)(function () {\n assert.ok(true, 'Ember.onerror was called');\n });\n\n var error = new Error('the error');\n try {\n (0, _runloop.run)(function () {\n throw error;\n });\n } catch (e) {\n assert.notOk(true, 'Ember.onerror that does not rethrow is intentionally swallowing errors, try / catch wrapping does not see error');\n }\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = true, no Ember.onerror) - async run'] = function (assert) {\n var done = assert.async();\n var caughtByWindowOnerror = void 0;\n\n (0, _debug.setTesting)(true);\n\n window.onerror = function (message) {\n caughtByWindowOnerror = message;\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n (0, _runloop.later)(function () {\n throw new Error('the error');\n }, 10);\n\n setTimeout(function () {\n assert.pushResult({\n result: /the error/.test(caughtByWindowOnerror),\n actual: caughtByWindowOnerror,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n done();\n }, 20);\n };\n\n _class.prototype['@test does not swallow exceptions by default (Ember.testing = false, no Ember.onerror) - async run'] = function (assert) {\n var done = assert.async();\n var caughtByWindowOnerror = void 0;\n\n (0, _debug.setTesting)(false);\n\n window.onerror = function (message) {\n caughtByWindowOnerror = message;\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n (0, _runloop.later)(function () {\n throw new Error('the error');\n }, 10);\n\n setTimeout(function () {\n assert.pushResult({\n result: /the error/.test(caughtByWindowOnerror),\n actual: caughtByWindowOnerror,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n done();\n }, 20);\n };\n\n _class.prototype['@test Ember.onerror can intercept errors (aka swallow) by not rethrowing (Ember.testing = false) - async run'] = function (assert) {\n var done = assert.async();\n\n (0, _debug.setTesting)(false);\n\n window.onerror = function () {\n assert.notOk(true, 'window.onerror is never invoked when Ember.onerror intentionally swallows errors');\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called with the error');\n });\n\n (0, _runloop.later)(function () {\n throw thrown;\n }, 10);\n\n setTimeout(done, 20);\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does not rethrow is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does rethrow is present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does not rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(1);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise constructor when Ember.onerror which does rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(2);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does not rethrow is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does rethrow is present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does not rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(1);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in promise .then callback when Ember.onerror which does rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(2);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n _rsvp.default.resolve().then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does not rethrow is present - rsvp'] = function (assert) {\n assert.expect(1);\n\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does rethrow is present - rsvp'] = function (assert) {\n assert.expect(2);\n\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does not rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(1);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n });\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n _class.prototype['@test errors in async promise .then callback when Ember.onerror which does rethrow is present (Ember.testing = false) - rsvp'] = function (assert) {\n assert.expect(2);\n\n (0, _debug.setTesting)(false);\n var thrown = new Error('the error');\n (0, _emberErrorHandling.setOnerror)(function (error) {\n assert.strictEqual(error, thrown, 'Ember.onerror is called for errors thrown in RSVP promises');\n throw error;\n });\n\n window.onerror = function (message) {\n assert.pushResult({\n result: /the error/.test(message),\n actual: message,\n expected: 'to include `the error`',\n message: 'error should bubble out to window.onerror, and therefore fail tests (due to QUnit implementing window.onerror)'\n });\n\n // prevent \"bubbling\" and therefore failing the test\n return true;\n };\n\n new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 10);\n }).then(function () {\n throw thrown;\n });\n\n // RSVP.Promise's are configured to settle within the run loop, this\n // ensures that run loop has completed\n return new _rsvp.default.Promise(function (resolve) {\n return setTimeout(resolve, 20);\n });\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember/tests/helpers/helper_registration_test', ['ember-babel', 'internal-test-helpers', '@ember/controller', '@ember/service', 'ember-glimmer'], function (_emberBabel, _internalTestHelpers, _controller, _service, _emberGlimmer) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Application Lifecycle - Helper Registration', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Unbound dashed helpers registered on the container can be late-invoked'] = function (assert) {\n var _this2 = this;\n\n this.addTemplate('application', '{{x-borf}} {{x-borf \\'YES\\'}}
');\n\n var myHelper = (0, _emberGlimmer.helper)(function (params) {\n return params[0] || 'BORF';\n });\n this.application.register('helper:x-borf', myHelper);\n\n return this.visit('/').then(function () {\n assert.equal(_this2.$('#wrapper').text(), 'BORF YES', 'The helper was invoked from the container');\n });\n };\n\n _class.prototype['@test Bound helpers registered on the container can be late-invoked'] = function (assert) {\n var _this3 = this;\n\n this.addTemplate('application', '{{x-reverse}} {{x-reverse foo}}
');\n\n this.add('controller:application', _controller.default.extend({\n foo: 'alex'\n }));\n\n this.application.register('helper:x-reverse', (0, _emberGlimmer.helper)(function (_ref) {\n var value = _ref[0];\n\n return value ? value.split('').reverse().join('') : '--';\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this3.$('#wrapper').text(), '-- xela', 'The bound helper was invoked from the container');\n });\n };\n\n _class.prototype['@test Undashed helpers registered on the container can be invoked'] = function (assert) {\n var _this4 = this;\n\n this.addTemplate('application', '{{omg}}|{{yorp \\'boo\\'}}|{{yorp \\'ya\\'}}
');\n\n this.application.register('helper:omg', (0, _emberGlimmer.helper)(function () {\n return 'OMG';\n }));\n\n this.application.register('helper:yorp', (0, _emberGlimmer.helper)(function (_ref2) {\n var value = _ref2[0];\n return value;\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this4.$('#wrapper').text(), 'OMG|boo|ya', 'The helper was invoked from the container');\n });\n };\n\n _class.prototype['@test Helpers can receive injections'] = function (assert) {\n this.addTemplate('application', '{{full-name}}
');\n\n var serviceCalled = false;\n\n this.add('service:name-builder', _service.default.extend({\n build: function () {\n serviceCalled = true;\n }\n }));\n\n this.add('helper:full-name', _emberGlimmer.Helper.extend({\n nameBuilder: (0, _service.inject)('name-builder'),\n compute: function () {\n this.get('nameBuilder').build();\n }\n }));\n\n return this.visit('/').then(function () {\n assert.ok(serviceCalled, 'service was injected, method called');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/helpers/link_to_test', ['ember-babel', 'internal-test-helpers', '@ember/controller', 'ember-runtime', 'ember-metal', '@ember/instrumentation', 'ember-routing'], function (_emberBabel, _internalTestHelpers, _controller, _emberRuntime, _emberMetal, _instrumentation, _emberRouting) {\n 'use strict';\n\n // IE includes the host name\n\n function normalizeUrl(url) {\n return url.replace(/https?:\\/\\/[^\\/]+/, '');\n }\n\n function shouldNotBeActive(assert, element) {\n checkActive(assert, element, false);\n }\n\n function shouldBeActive(assert, element) {\n checkActive(assert, element, true);\n }\n\n function checkActive(assert, element, active) {\n var classList = element.attr('class');\n assert.equal(classList.indexOf('active') > -1, active, element + ' active should be ' + active);\n }\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - basic tests', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this.router.map(function () {\n this.route('about');\n });\n\n _this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n _this.addTemplate('about', '\\n About \\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n {{#link-to \\'about\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n return _this;\n }\n\n _class.prototype['@test The {{link-to}} helper moves into the named route'] = function (assert) {\n var _this2 = this;\n\n return this.visit('/').then(function () {\n assert.equal(_this2.$('h3.home').length, 1, 'The home template was rendered');\n assert.equal(_this2.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this2.$('#about-link:not(.active)').length, 1, 'The other link was rendered without active class');\n\n return _this2.click('#about-link');\n }).then(function () {\n assert.equal(_this2.$('h3.about').length, 1, 'The about template was rendered');\n assert.equal(_this2.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this2.$('#home-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper doesn\\'t add an href when the tagName isn\\'t \\'a\\''] = function (assert) {\n var _this3 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' tagName=\\'div\\'}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this3.$('#about-link').attr('href'), undefined, 'there is no href attribute');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies a \\'disabled\\' class when disabled'] = function (assert) {\n var _this4 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link-static\" disabledWhen=\"shouldDisable\"}}About{{/link-to}}\\n {{#link-to \"about\" id=\"about-link-dynamic\" disabledWhen=dynamicDisabledWhen}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n shouldDisable: true,\n dynamicDisabledWhen: 'shouldDisable'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this4.$('#about-link-static.disabled').length, 1, 'The static link is disabled when its disabledWhen is true');\n assert.equal(_this4.$('#about-link-dynamic.disabled').length, 1, 'The dynamic link is disabled when its disabledWhen is true');\n\n var controller = _this4.applicationInstance.lookup('controller:index');\n _this4.runTask(function () {\n return controller.set('dynamicDisabledWhen', false);\n });\n\n assert.equal(_this4.$('#about-link-dynamic.disabled').length, 0, 'The dynamic link is re-enabled when its disabledWhen becomes false');\n });\n };\n\n _class.prototype['@test the {{link-to}} doesn\\'t apply a \\'disabled\\' class if disabledWhen is not provided'] = function (assert) {\n var _this5 = this;\n\n this.addTemplate('index', '{{#link-to \"about\" id=\"about-link\"}}About{{/link-to}}');\n\n return this.visit('/').then(function () {\n assert.ok(!_this5.$('#about-link').hasClass('disabled'), 'The link is not disabled if disabledWhen not provided');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper supports a custom disabledClass'] = function (assert) {\n var _this6 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=true disabledClass=\"do-not-want\"}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this6.$('#about-link.do-not-want').length, 1, 'The link can apply a custom disabled class');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper supports a custom disabledClass set via bound param'] = function (assert) {\n var _this7 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=true disabledClass=disabledClass}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n disabledClass: 'do-not-want'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this7.$('#about-link.do-not-want').length, 1, 'The link can apply a custom disabled class via bound param');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper does not respond to clicks when disabledWhen'] = function (assert) {\n var _this8 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=true}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this8.click('#about-link');\n }).then(function () {\n assert.equal(_this8.$('h3.about').length, 0, 'Transitioning did not occur');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper does not respond to clicks when disabled'] = function (assert) {\n var _this9 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabled=true}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this9.click('#about-link');\n }).then(function () {\n assert.equal(_this9.$('h3.about').length, 0, 'Transitioning did not occur');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper responds to clicks according to its disabledWhen bound param'] = function (assert) {\n var _this10 = this;\n\n this.addTemplate('index', '\\n {{#link-to \"about\" id=\"about-link\" disabledWhen=disabledWhen}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n disabledWhen: true\n }));\n\n return this.visit('/').then(function () {\n return _this10.click('#about-link');\n }).then(function () {\n assert.equal(_this10.$('h3.about').length, 0, 'Transitioning did not occur');\n\n var controller = _this10.applicationInstance.lookup('controller:index');\n controller.set('disabledWhen', false);\n\n return _this10.runLoopSettled();\n }).then(function () {\n return _this10.click('#about-link');\n }).then(function () {\n assert.equal(_this10.$('h3.about').length, 1, 'Transitioning did occur when disabledWhen became false');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper supports a custom activeClass'] = function (assert) {\n var _this11 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\' activeClass=\\'zomg-active\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this11.$('h3.home').length, 1, 'The home template was rendered');\n assert.equal(_this11.$('#self-link.zomg-active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this11.$('#about-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper supports a custom activeClass from a bound param'] = function (assert) {\n var _this12 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\' activeClass=activeClass}}Self{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n activeClass: 'zomg-active'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this12.$('h3.home').length, 1, 'The home template was rendered');\n assert.equal(_this12.$('#self-link.zomg-active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this12.$('#about-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper supports \\'classNameBindings\\' with custom values [GH #11699]'] = function (assert) {\n var _this13 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\' classNameBindings=\\'foo:foo-is-true:foo-is-false\\'}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n foo: false\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this13.$('#about-link.foo-is-false').length, 1, 'The about-link was rendered with the falsy class');\n\n var controller = _this13.applicationInstance.lookup('controller:index');\n _this13.runTask(function () {\n return controller.set('foo', true);\n });\n\n assert.equal(_this13.$('#about-link.foo-is-true').length, 1, 'The about-link was rendered with the truthy class after toggling the property');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - location hooks', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n var _this14 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.call(this));\n\n _this14.updateCount = 0;\n _this14.replaceCount = 0;\n\n var testContext = _this14;\n _this14.add('location:none', _emberRouting.NoneLocation.extend({\n setURL: function () {\n testContext.updateCount++;\n return this._super.apply(this, arguments);\n },\n replaceURL: function () {\n testContext.replaceCount++;\n return this._super.apply(this, arguments);\n }\n }));\n\n _this14.router.map(function () {\n this.route('about');\n });\n\n _this14.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n _this14.addTemplate('about', '\\n About \\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n {{#link-to \\'about\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n return _this14;\n }\n\n _class2.prototype.visit = function () {\n var _ApplicationTestCase3,\n _this15 = this;\n\n return (_ApplicationTestCase3 = _ApplicationTestCase2.prototype.visit).call.apply(_ApplicationTestCase3, [this].concat(Array.prototype.slice.call(arguments))).then(function () {\n _this15.updateCountAfterVisit = _this15.updateCount;\n _this15.replaceCountAfterVisit = _this15.replaceCount;\n });\n };\n\n _class2.prototype['@test The {{link-to}} helper supports URL replacement'] = function (assert) {\n var _this16 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\' replace=true}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this16.click('#about-link');\n }).then(function () {\n assert.equal(_this16.updateCount, _this16.updateCountAfterVisit, 'setURL should not be called');\n assert.equal(_this16.replaceCount, _this16.replaceCountAfterVisit + 1, 'replaceURL should be called once');\n });\n };\n\n _class2.prototype['@test The {{link-to}} helper supports URL replacement via replace=boundTruthyThing'] = function (assert) {\n var _this17 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\' replace=boundTruthyThing}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n boundTruthyThing: true\n }));\n\n return this.visit('/').then(function () {\n return _this17.click('#about-link');\n }).then(function () {\n assert.equal(_this17.updateCount, _this17.updateCountAfterVisit, 'setURL should not be called');\n assert.equal(_this17.replaceCount, _this17.replaceCountAfterVisit + 1, 'replaceURL should be called once');\n });\n };\n\n _class2.prototype['@test The {{link-to}} helper supports setting replace=boundFalseyThing'] = function (assert) {\n var _this18 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\' replace=boundFalseyThing}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n boundFalseyThing: false\n }));\n\n return this.visit('/').then(function () {\n return _this18.click('#about-link');\n }).then(function () {\n assert.equal(_this18.updateCount, _this18.updateCountAfterVisit + 1, 'setURL should be called');\n assert.equal(_this18.replaceCount, _this18.replaceCountAfterVisit, 'replaceURL should not be called');\n });\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - nested routes and link-to arguments', function (_ApplicationTestCase5) {\n (0, _emberBabel.inherits)(_class4, _ApplicationTestCase5);\n\n function _class4() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase5.apply(this, arguments));\n }\n\n _class4.prototype['@test The {{link-to}} helper supports leaving off .index for nested routes'] = function (assert) {\n var _this21 = this;\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('item');\n });\n });\n\n this.addTemplate('about', 'About {{outlet}}');\n this.addTemplate('about.index', 'Index
');\n this.addTemplate('about.item', '{{#link-to \\'about\\'}}About{{/link-to}}
');\n\n return this.visit('/about/item').then(function () {\n assert.equal(normalizeUrl(_this21.$('#item a').attr('href')), '/about');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports custom, nested, current-when'] = function (assert) {\n var _this22 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n\n this.route('item');\n });\n\n this.addTemplate('index', 'Home {{outlet}}');\n this.addTemplate('index.about', '\\n {{#link-to \\'item\\' id=\\'other-link\\' current-when=\\'index\\'}}ITEM{{/link-to}}\\n ');\n\n return this.visit('/about').then(function () {\n assert.equal(_this22.$('#other-link.active').length, 1, 'The link is active since current-when is a parent route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper does not disregard current-when when it is given explicitly for a route'] = function (assert) {\n var _this23 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n\n this.route('items', function () {\n this.route('item');\n });\n });\n\n this.addTemplate('index', 'Home {{outlet}}');\n this.addTemplate('index.about', '\\n {{#link-to \\'items\\' id=\\'other-link\\' current-when=\\'index\\'}}ITEM{{/link-to}}\\n ');\n\n return this.visit('/about').then(function () {\n assert.equal(_this23.$('#other-link.active').length, 1, 'The link is active when current-when is given for explicitly for a route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper does not disregard current-when when it is set via a bound param'] = function (assert) {\n var _this24 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n\n this.route('items', function () {\n this.route('item');\n });\n });\n\n this.add('controller:index.about', _controller.default.extend({\n currentWhen: 'index'\n }));\n\n this.addTemplate('index', 'Home {{outlet}}');\n this.addTemplate('index.about', '{{#link-to \\'items\\' id=\\'other-link\\' current-when=currentWhen}}ITEM{{/link-to}}');\n\n return this.visit('/about').then(function () {\n assert.equal(_this24.$('#other-link.active').length, 1, 'The link is active when current-when is given for explicitly for a route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports multiple current-when routes'] = function (assert) {\n var _this25 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n this.route('item');\n this.route('foo');\n });\n\n this.addTemplate('index', 'Home {{outlet}}');\n this.addTemplate('index.about', '{{#link-to \\'item\\' id=\\'link1\\' current-when=\\'item index\\'}}ITEM{{/link-to}}');\n this.addTemplate('item', '{{#link-to \\'item\\' id=\\'link2\\' current-when=\\'item index\\'}}ITEM{{/link-to}}');\n this.addTemplate('foo', '{{#link-to \\'item\\' id=\\'link3\\' current-when=\\'item index\\'}}ITEM{{/link-to}}');\n\n return this.visit('/about').then(function () {\n assert.equal(_this25.$('#link1.active').length, 1, 'The link is active since current-when contains the parent route');\n\n return _this25.visit('/item');\n }).then(function () {\n assert.equal(_this25.$('#link2.active').length, 1, 'The link is active since you are on the active route');\n\n return _this25.visit('/foo');\n }).then(function () {\n assert.equal(_this25.$('#link3.active').length, 0, 'The link is not active since current-when does not contain the active route');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports boolean values for current-when'] = function (assert) {\n var _this26 = this;\n\n this.router.map(function () {\n this.route('index', { path: '/' }, function () {\n this.route('about');\n });\n this.route('item');\n });\n\n this.addTemplate('index.about', '\\n {{#link-to \\'index\\' id=\\'index-link\\' current-when=isCurrent}}index{{/link-to}}\\n {{#link-to \\'item\\' id=\\'about-link\\' current-when=true}}ITEM{{/link-to}}\\n ');\n\n this.add('controller:index.about', _controller.default.extend({ isCurrent: false }));\n\n return this.visit('/about').then(function () {\n assert.ok(_this26.$('#about-link').hasClass('active'), 'The link is active since current-when is true');\n assert.notOk(_this26.$('#index-link').hasClass('active'), 'The link is not active since current-when is false');\n\n var controller = _this26.applicationInstance.lookup('controller:index.about');\n _this26.runTask(function () {\n return controller.set('isCurrent', true);\n });\n\n assert.ok(_this26.$('#index-link').hasClass('active'), 'The link is active since current-when is true');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper defaults to bubbling'] = function (assert) {\n var _this27 = this;\n\n this.addTemplate('about', '\\n \\n {{#link-to \\'about.contact\\' id=\\'about-contact\\'}}About{{/link-to}}\\n
\\n {{outlet}}\\n ');\n this.addTemplate('about.contact', '\\n \\n ');\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('contact');\n });\n });\n\n var hidden = 0;\n\n this.add('route:about', _emberRouting.Route.extend({\n actions: {\n hide: function () {\n hidden++;\n }\n }\n }));\n\n return this.visit('/about').then(function () {\n return _this27.click('#about-contact');\n }).then(function () {\n assert.equal(_this27.$('#contact').text(), 'Contact', 'precond - the link worked');\n\n assert.equal(hidden, 1, 'The link bubbles');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports bubbles=false'] = function (assert) {\n var _this28 = this;\n\n this.addTemplate('about', '\\n \\n {{#link-to \\'about.contact\\' id=\\'about-contact\\' bubbles=false}}\\n About\\n {{/link-to}}\\n
\\n {{outlet}}\\n ');\n this.addTemplate('about.contact', '');\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('contact');\n });\n });\n\n var hidden = 0;\n\n this.add('route:about', _emberRouting.Route.extend({\n actions: {\n hide: function () {\n hidden++;\n }\n }\n }));\n\n return this.visit('/about').then(function () {\n return _this28.click('#about-contact');\n }).then(function () {\n assert.equal(_this28.$('#contact').text(), 'Contact', 'precond - the link worked');\n\n assert.equal(hidden, 0, \"The link didn't bubble\");\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports bubbles=boundFalseyThing'] = function (assert) {\n var _this29 = this;\n\n this.addTemplate('about', '\\n \\n {{#link-to \\'about.contact\\' id=\\'about-contact\\' bubbles=boundFalseyThing}}\\n About\\n {{/link-to}}\\n
\\n {{outlet}}\\n ');\n this.addTemplate('about.contact', '');\n\n this.add('controller:about', _controller.default.extend({\n boundFalseyThing: false\n }));\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('contact');\n });\n });\n\n var hidden = 0;\n\n this.add('route:about', _emberRouting.Route.extend({\n actions: {\n hide: function () {\n hidden++;\n }\n }\n }));\n\n return this.visit('/about').then(function () {\n return _this29.click('#about-contact');\n }).then(function () {\n assert.equal(_this29.$('#contact').text(), 'Contact', 'precond - the link worked');\n assert.equal(hidden, 0, \"The link didn't bubble\");\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper moves into the named route with context'] = function (assert) {\n var _this30 = this;\n\n this.router.map(function () {\n this.route('about');\n this.route('item', { path: '/item/:id' });\n });\n\n this.addTemplate('about', '\\n List \\n \\n {{#each model as |person|}}\\n \\n {{#link-to \\'item\\' person id=person.id}}\\n {{person.name}}\\n {{/link-to}}\\n \\n {{/each}}\\n \\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n ');\n\n this.addTemplate('item', '\\n Item \\n {{model.name}}
\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n ');\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n ');\n\n this.add('route:about', _emberRouting.Route.extend({\n model: function () {\n return [{ id: 'yehuda', name: 'Yehuda Katz' }, { id: 'tom', name: 'Tom Dale' }, { id: 'erik', name: 'Erik Brynroflsson' }];\n }\n }));\n\n return this.visit('/about').then(function () {\n assert.equal(_this30.$('h3.list').length, 1, 'The home template was rendered');\n assert.equal(normalizeUrl(_this30.$('#home-link').attr('href')), '/', 'The home link points back at /');\n\n return _this30.click('#yehuda');\n }).then(function () {\n assert.equal(_this30.$('h3.item').length, 1, 'The item template was rendered');\n assert.equal(_this30.$('p').text(), 'Yehuda Katz', 'The name is correct');\n\n return _this30.click('#home-link');\n }).then(function () {\n return _this30.click('#about-link');\n }).then(function () {\n assert.equal(normalizeUrl(_this30.$('li a#yehuda').attr('href')), '/item/yehuda');\n assert.equal(normalizeUrl(_this30.$('li a#tom').attr('href')), '/item/tom');\n assert.equal(normalizeUrl(_this30.$('li a#erik').attr('href')), '/item/erik');\n\n return _this30.click('#erik');\n }).then(function () {\n assert.equal(_this30.$('h3.item').length, 1, 'The item template was rendered');\n assert.equal(_this30.$('p').text(), 'Erik Brynroflsson', 'The name is correct');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper binds some anchor html tag common attributes'] = function (assert) {\n var _this31 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'index\\' id=\\'self-link\\' title=\\'title-attr\\' rel=\\'rel-attr\\' tabindex=\\'-1\\'}}\\n Self\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var link = _this31.$('#self-link');\n assert.equal(link.attr('title'), 'title-attr', 'The self-link contains title attribute');\n assert.equal(link.attr('rel'), 'rel-attr', 'The self-link contains rel attribute');\n assert.equal(link.attr('tabindex'), '-1', 'The self-link contains tabindex attribute');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports \\'target\\' attribute'] = function (assert) {\n var _this32 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'index\\' id=\\'self-link\\' target=\\'_blank\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var link = _this32.$('#self-link');\n assert.equal(link.attr('target'), '_blank', 'The self-link contains `target` attribute');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper supports \\'target\\' attribute specified as a bound param'] = function (assert) {\n var _this33 = this;\n\n this.addTemplate('index', 'Home {{#link-to \\'index\\' id=\\'self-link\\' target=boundLinkTarget}}Self{{/link-to}}');\n\n this.add('controller:index', _controller.default.extend({\n boundLinkTarget: '_blank'\n }));\n\n return this.visit('/').then(function () {\n var link = _this33.$('#self-link');\n assert.equal(link.attr('target'), '_blank', 'The self-link contains `target` attribute');\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper calls preventDefault'] = function (assert) {\n var _this34 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: true }, function () {\n return _this34.$('#about-link').click();\n }, assert);\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper does not call preventDefault if \\'preventDefault=false\\' is passed as an option'] = function (assert) {\n var _this35 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' preventDefault=false}}About{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: false }, function () {\n return _this35.$('#about-link').trigger('click');\n }, assert);\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper does not call preventDefault if \\'preventDefault=boundFalseyThing\\' is passed as an option'] = function (assert) {\n var _this36 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' preventDefault=boundFalseyThing}}About{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n boundFalseyThing: false\n }));\n\n return this.visit('/').then(function () {\n assertNav({ prevented: false }, function () {\n return _this36.$('#about-link').trigger('click');\n }, assert);\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper does not call preventDefault if \\'target\\' attribute is provided'] = function (assert) {\n var _this37 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'index\\' id=\\'self-link\\' target=\\'_blank\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: false }, function () {\n return _this37.$('#self-link').click();\n }, assert);\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper should preventDefault when \\'target = _self\\''] = function (assert) {\n var _this38 = this;\n\n this.addTemplate('index', '\\n Home \\n {{#link-to \\'index\\' id=\\'self-link\\' target=\\'_self\\'}}Self{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assertNav({ prevented: true }, function () {\n return _this38.$('#self-link').click();\n }, assert);\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper should not transition if target is not equal to _self or empty'] = function (assert) {\n var _this39 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' id=\\'about-link\\' replace=true target=\\'_blank\\'}}\\n About\\n {{/link-to}}\\n ');\n\n this.router.map(function () {\n this.route('about');\n });\n\n return this.visit('/').then(function () {\n return _this39.click('#about-link');\n }).then(function () {\n var currentRouteName = _this39.applicationInstance.lookup('controller:application').get('currentRouteName');\n assert.notEqual(currentRouteName, 'about', 'link-to should not transition if target is not equal to _self or empty');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper accepts string/numeric arguments'] = function (assert) {\n var _this40 = this;\n\n this.router.map(function () {\n this.route('filter', { path: '/filters/:filter' });\n this.route('post', { path: '/post/:post_id' });\n this.route('repo', { path: '/repo/:owner/:name' });\n });\n\n this.add('controller:filter', _controller.default.extend({\n filter: 'unpopular',\n repo: { owner: 'ember', name: 'ember.js' },\n post_id: 123\n }));\n\n this.addTemplate('filter', '\\n {{filter}}
\\n {{#link-to \"filter\" \"unpopular\" id=\"link\"}}Unpopular{{/link-to}}\\n {{#link-to \"filter\" filter id=\"path-link\"}}Unpopular{{/link-to}}\\n {{#link-to \"post\" post_id id=\"post-path-link\"}}Post{{/link-to}}\\n {{#link-to \"post\" 123 id=\"post-number-link\"}}Post{{/link-to}}\\n {{#link-to \"repo\" repo id=\"repo-object-link\"}}Repo{{/link-to}}\\n ');\n\n return this.visit('/filters/popular').then(function () {\n assert.equal(normalizeUrl(_this40.$('#link').attr('href')), '/filters/unpopular');\n assert.equal(normalizeUrl(_this40.$('#path-link').attr('href')), '/filters/unpopular');\n assert.equal(normalizeUrl(_this40.$('#post-path-link').attr('href')), '/post/123');\n assert.equal(normalizeUrl(_this40.$('#post-number-link').attr('href')), '/post/123');\n assert.equal(normalizeUrl(_this40.$('#repo-object-link').attr('href')), '/repo/ember/ember.js');\n });\n };\n\n _class4.prototype['@test Issue 4201 - Shorthand for route.index shouldn\\'t throw errors about context arguments'] = function (assert) {\n var _this41 = this;\n\n assert.expect(2);\n this.router.map(function () {\n this.route('lobby', function () {\n this.route('index', { path: ':lobby_id' });\n this.route('list');\n });\n });\n\n this.add('route:lobby.index', _emberRouting.Route.extend({\n model: function (params) {\n assert.equal(params.lobby_id, 'foobar');\n return params.lobby_id;\n }\n }));\n\n this.addTemplate('lobby.index', '\\n {{#link-to \\'lobby\\' \\'foobar\\' id=\\'lobby-link\\'}}Lobby{{/link-to}}\\n ');\n this.addTemplate('lobby.list', '\\n {{#link-to \\'lobby\\' \\'foobar\\' id=\\'lobby-link\\'}}Lobby{{/link-to}}\\n ');\n\n return this.visit('/lobby/list').then(function () {\n return _this41.click('#lobby-link');\n }).then(function () {\n return shouldBeActive(assert, _this41.$('#lobby-link'));\n });\n };\n\n _class4.prototype['@test Quoteless route param performs property lookup'] = function (assert) {\n var _this42 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' id=\\'string-link\\'}}string{{/link-to}}\\n {{#link-to foo id=\\'path-link\\'}}path{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n foo: 'index'\n }));\n\n var assertEquality = function (href) {\n assert.equal(normalizeUrl(_this42.$('#string-link').attr('href')), '/');\n assert.equal(normalizeUrl(_this42.$('#path-link').attr('href')), href);\n };\n\n return this.visit('/').then(function () {\n assertEquality('/');\n\n var controller = _this42.applicationInstance.lookup('controller:index');\n _this42.runTask(function () {\n return controller.set('foo', 'about');\n });\n\n assertEquality('/about');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper refreshes href element when one of params changes'] = function (assert) {\n var _this43 = this;\n\n this.router.map(function () {\n this.route('post', { path: '/posts/:post_id' });\n });\n\n var post = { id: '1' };\n var secondPost = { id: '2' };\n\n this.addTemplate('index', '\\n {{#link-to \"post\" post id=\"post\"}}post{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend());\n\n return this.visit('/').then(function () {\n var indexController = _this43.applicationInstance.lookup('controller:index');\n _this43.runTask(function () {\n return indexController.set('post', post);\n });\n\n assert.equal(normalizeUrl(_this43.$('#post').attr('href')), '/posts/1', 'precond - Link has rendered href attr properly');\n\n _this43.runTask(function () {\n return indexController.set('post', secondPost);\n });\n\n assert.equal(_this43.$('#post').attr('href'), '/posts/2', 'href attr was updated after one of the params had been changed');\n\n _this43.runTask(function () {\n return indexController.set('post', null);\n });\n\n assert.equal(_this43.$('#post').attr('href'), '#', 'href attr becomes # when one of the arguments in nullified');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper is active when a route is active'] = function (assert) {\n var _this44 = this;\n\n this.router.map(function () {\n this.route('about', function () {\n this.route('item');\n });\n });\n\n this.addTemplate('about', '\\n \\n {{#link-to \\'about\\' id=\\'about-link\\'}}About{{/link-to}}\\n {{#link-to \\'about.item\\' id=\\'item-link\\'}}Item{{/link-to}}\\n {{outlet}}\\n
\\n ');\n\n return this.visit('/about').then(function () {\n assert.equal(_this44.$('#about-link.active').length, 1, 'The about route link is active');\n assert.equal(_this44.$('#item-link.active').length, 0, 'The item route link is inactive');\n\n return _this44.visit('/about/item');\n }).then(function () {\n assert.equal(_this44.$('#about-link.active').length, 1, 'The about route link is active');\n assert.equal(_this44.$('#item-link.active').length, 1, 'The item route link is active');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper works in an #each\\'d array of string route names'] = function (assert) {\n var _this45 = this;\n\n this.router.map(function () {\n this.route('foo');\n this.route('bar');\n this.route('rar');\n });\n\n this.add('controller:index', _controller.default.extend({\n routeNames: (0, _emberRuntime.A)(['foo', 'bar', 'rar']),\n route1: 'bar',\n route2: 'foo'\n }));\n\n this.addTemplate('index', '\\n {{#each routeNames as |routeName|}}\\n {{#link-to routeName}}{{routeName}}{{/link-to}}\\n {{/each}}\\n {{#each routeNames as |r|}}\\n {{#link-to r}}{{r}}{{/link-to}}\\n {{/each}}\\n {{#link-to route1}}a{{/link-to}}\\n {{#link-to route2}}b{{/link-to}}\\n ');\n\n var linksEqual = function (links, expected) {\n assert.equal(links.length, expected.length, 'Has correct number of links');\n\n var idx = void 0,\n href;\n for (idx = 0; idx < links.length; idx++) {\n href = _this45.$(links[idx]).attr('href');\n // Old IE includes the whole hostname as well\n\n assert.equal(href.slice(-expected[idx].length), expected[idx], 'Expected link to be \\'' + expected[idx] + '\\', but was \\'' + href + '\\'');\n }\n };\n\n return this.visit('/').then(function () {\n linksEqual(_this45.$('a'), ['/foo', '/bar', '/rar', '/foo', '/bar', '/rar', '/bar', '/foo']);\n\n var indexController = _this45.applicationInstance.lookup('controller:index');\n _this45.runTask(function () {\n return indexController.set('route1', 'rar');\n });\n\n linksEqual(_this45.$('a'), ['/foo', '/bar', '/rar', '/foo', '/bar', '/rar', '/rar', '/foo']);\n\n _this45.runTask(function () {\n return indexController.routeNames.shiftObject();\n });\n\n linksEqual(_this45.$('a'), ['/bar', '/rar', '/bar', '/rar', '/rar', '/foo']);\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} helper moves into the named route'] = function (assert) {\n var _this46 = this;\n\n assert.expect(3);\n this.router.map(function () {\n this.route('contact');\n });\n\n this.addTemplate('index', '\\n Home \\n {{link-to \\'Contact us\\' \\'contact\\' id=\\'contact-link\\'}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n this.addTemplate('contact', '\\n \\n {{link-to \\'Home\\' \\'index\\' id=\\'home-link\\'}}\\n {{link-to \\'Self\\' \\'contact\\' id=\\'self-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n return _this46.click('#contact-link');\n }).then(function () {\n assert.equal(_this46.$('h3.contact').length, 1, 'The contact template was rendered');\n assert.equal(_this46.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this46.$('#home-link:not(.active)').length, 1, 'The other link was rendered without active class');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} helper updates the link text when it is a binding'] = function (assert) {\n var _this47 = this;\n\n assert.expect(8);\n this.router.map(function () {\n this.route('contact');\n });\n\n this.add('controller:index', _controller.default.extend({\n contactName: 'Jane'\n }));\n\n this.addTemplate('index', '\\n Home \\n {{link-to contactName \\'contact\\' id=\\'contact-link\\'}}\\n {{#link-to \\'index\\' id=\\'self-link\\'}}Self{{/link-to}}\\n ');\n this.addTemplate('contact', '\\n \\n {{link-to \\'Home\\' \\'index\\' id=\\'home-link\\'}}\\n {{link-to \\'Self\\' \\'contact\\' id=\\'self-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this47.$('#contact-link').text(), 'Jane', 'The link title is correctly resolved');\n\n var controller = _this47.applicationInstance.lookup('controller:index');\n _this47.runTask(function () {\n return controller.set('contactName', 'Joe');\n });\n\n assert.equal(_this47.$('#contact-link').text(), 'Joe', 'The link title is correctly updated when the bound property changes');\n\n _this47.runTask(function () {\n return controller.set('contactName', 'Robert');\n });\n\n assert.equal(_this47.$('#contact-link').text(), 'Robert', 'The link title is correctly updated when the bound property changes a second time');\n\n return _this47.click('#contact-link');\n }).then(function () {\n assert.equal(_this47.$('h3.contact').length, 1, 'The contact template was rendered');\n assert.equal(_this47.$('#self-link.active').length, 1, 'The self-link was rendered with active class');\n assert.equal(_this47.$('#home-link:not(.active)').length, 1, 'The other link was rendered without active class');\n\n return _this47.click('#home-link');\n }).then(function () {\n assert.equal(_this47.$('h3.home').length, 1, 'The index template was rendered');\n assert.equal(_this47.$('#contact-link').text(), 'Robert', 'The link title is correctly updated when the route changes');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} helper moves into the named route with context'] = function (assert) {\n var _this48 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('item', { path: '/item/:id' });\n });\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function () {\n return [{ id: 'yehuda', name: 'Yehuda Katz' }, { id: 'tom', name: 'Tom Dale' }, { id: 'erik', name: 'Erik Brynroflsson' }];\n }\n }));\n\n this.addTemplate('index', '\\n Home \\n \\n {{#each model as |person|}}\\n \\n {{link-to person.name \\'item\\' person id=person.id}}\\n \\n {{/each}}\\n \\n ');\n this.addTemplate('item', '\\n Item \\n {{model.name}}
\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n return _this48.click('#yehuda');\n }).then(function () {\n assert.equal(_this48.$('h3.item').length, 1, 'The item template was rendered');\n assert.equal(_this48.$('p').text(), 'Yehuda Katz', 'The name is correct');\n\n return _this48.click('#home-link');\n }).then(function () {\n assert.equal(normalizeUrl(_this48.$('li a#yehuda').attr('href')), '/item/yehuda');\n assert.equal(normalizeUrl(_this48.$('li a#tom').attr('href')), '/item/tom');\n assert.equal(normalizeUrl(_this48.$('li a#erik').attr('href')), '/item/erik');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} performs property lookup'] = function (assert) {\n var _this49 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{link-to \\'string\\' \\'index\\' id=\\'string-link\\'}}\\n {{link-to path foo id=\\'path-link\\'}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n foo: 'index'\n }));\n\n return this.visit('/').then(function () {\n var assertEquality = function (href) {\n assert.equal(normalizeUrl(_this49.$('#string-link').attr('href')), '/');\n assert.equal(normalizeUrl(_this49.$('#path-link').attr('href')), href);\n };\n\n assertEquality('/');\n\n var controller = _this49.applicationInstance.lookup('controller:index');\n _this49.runTask(function () {\n return controller.set('foo', 'about');\n });\n\n assertEquality('/about');\n });\n };\n\n _class4.prototype['@test The non-block form {{link-to}} protects against XSS'] = function (assert) {\n var _this50 = this;\n\n this.addTemplate('application', '{{link-to display \\'index\\' id=\\'link\\'}}');\n\n this.add('controller:application', _controller.default.extend({\n display: 'blahzorz'\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this50.$('#link').text(), 'blahzorz');\n\n var controller = _this50.applicationInstance.lookup('controller:application');\n _this50.runTask(function () {\n return controller.set('display', 'BLAMMO ');\n });\n\n assert.equal(_this50.$('#link').text(), 'BLAMMO ');\n assert.equal(_this50.$('b').length, 0);\n });\n };\n\n _class4.prototype['@test the {{link-to}} helper throws a useful error if you invoke it wrong'] = function (assert) {\n var _this51 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('post', { path: 'post/:post_id' });\n });\n\n this.addTemplate('application', '{{#link-to \\'post\\'}}Post{{/link-to}}');\n\n assert.throws(function () {\n _this51.visit('/');\n }, /(You attempted to define a `\\{\\{link-to \"post\"\\}\\}` but did not pass the parameters required for generating its dynamic segments.|You must provide param `post_id` to `generate`)/);\n\n return this.runLoopSettled();\n };\n\n _class4.prototype['@test the {{link-to}} helper does not throw an error if its route has exited'] = function (assert) {\n var _this52 = this;\n\n assert.expect(0);\n\n this.router.map(function () {\n this.route('post', { path: 'post/:post_id' });\n });\n\n this.addTemplate('application', '\\n {{#link-to \\'index\\' id=\\'home-link\\'}}Home{{/link-to}}\\n {{#link-to \\'post\\' defaultPost id=\\'default-post-link\\'}}Default Post{{/link-to}}\\n {{#if currentPost}}\\n {{#link-to \\'post\\' currentPost id=\\'current-post-link\\'}}Current Post{{/link-to}}\\n {{/if}}\\n ');\n\n this.add('controller:application', _controller.default.extend({\n defaultPost: { id: 1 },\n postController: (0, _controller.inject)('post'),\n currentPost: (0, _emberMetal.alias)('postController.model')\n }));\n\n this.add('controller:post', _controller.default.extend());\n\n this.add('route:post', _emberRouting.Route.extend({\n model: function () {\n return { id: 2 };\n },\n serialize: function (model) {\n return { post_id: model.id };\n }\n }));\n\n return this.visit('/').then(function () {\n return _this52.click('#default-post-link');\n }).then(function () {\n return _this52.click('#home-link');\n }).then(function () {\n return _this52.click('#current-post-link');\n }).then(function () {\n return _this52.click('#home-link');\n });\n };\n\n _class4.prototype['@test {{link-to}} active property respects changing parent route context'] = function (assert) {\n var _this53 = this;\n\n this.router.map(function () {\n this.route('things', { path: '/things/:name' }, function () {\n this.route('other');\n });\n });\n\n this.addTemplate('application', '\\n {{link-to \\'OMG\\' \\'things\\' \\'omg\\' id=\\'omg-link\\'}}\\n {{link-to \\'LOL\\' \\'things\\' \\'lol\\' id=\\'lol-link\\'}}\\n ');\n\n return this.visit('/things/omg').then(function () {\n shouldBeActive(assert, _this53.$('#omg-link'));\n shouldNotBeActive(assert, _this53.$('#lol-link'));\n\n return _this53.visit('/things/omg/other');\n }).then(function () {\n shouldBeActive(assert, _this53.$('#omg-link'));\n shouldNotBeActive(assert, _this53.$('#lol-link'));\n });\n };\n\n _class4.prototype['@test {{link-to}} populates href with default query param values even without query-params object'] = function (assert) {\n var _this54 = this;\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo'],\n foo: '123'\n }));\n\n this.addTemplate('index', '{{#link-to \\'index\\' id=\\'the-link\\'}}Index{{/link-to}}');\n\n return this.visit('/').then(function () {\n assert.equal(_this54.$('#the-link').attr('href'), '/', 'link has right href');\n });\n };\n\n _class4.prototype['@test {{link-to}} populates href with default query param values with empty query-params object'] = function (assert) {\n var _this55 = this;\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo'],\n foo: '123'\n }));\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' (query-params) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this55.$('#the-link').attr('href'), '/', 'link has right href');\n });\n };\n\n _class4.prototype['@test {{link-to}} with only query-params and a block updates when route changes'] = function (assert) {\n var _this56 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.add('controller:application', _controller.default.extend({\n queryParams: ['foo', 'bar'],\n foo: '123',\n bar: 'yes'\n }));\n\n this.addTemplate('application', '\\n {{#link-to (query-params foo=\\'456\\' bar=\\'NAW\\') id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this56.$('#the-link').attr('href'), '/?bar=NAW&foo=456', 'link has right href');\n\n return _this56.visit('/about');\n }).then(function () {\n assert.equal(_this56.$('#the-link').attr('href'), '/about?bar=NAW&foo=456', 'link has right href');\n });\n };\n\n _class4.prototype['@test Block-less {{link-to}} with only query-params updates when route changes'] = function (assert) {\n var _this57 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.add('controller:application', _controller.default.extend({\n queryParams: ['foo', 'bar'],\n foo: '123',\n bar: 'yes'\n }));\n\n this.addTemplate('application', '\\n {{link-to \"Index\" (query-params foo=\\'456\\' bar=\\'NAW\\') id=\\'the-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n assert.equal(_this57.$('#the-link').attr('href'), '/?bar=NAW&foo=456', 'link has right href');\n\n return _this57.visit('/about');\n }).then(function () {\n assert.equal(_this57.$('#the-link').attr('href'), '/about?bar=NAW&foo=456', 'link has right href');\n });\n };\n\n _class4.prototype['@test The {{link-to}} helper can use dynamic params'] = function (assert) {\n var _this58 = this;\n\n this.router.map(function () {\n this.route('foo', { path: 'foo/:some/:thing' });\n this.route('bar', { path: 'bar/:some/:thing/:else' });\n });\n\n this.add('controller:index', _controller.default.extend({\n init: function () {\n this._super.apply(this, arguments);\n this.dynamicLinkParams = ['foo', 'one', 'two'];\n }\n }));\n\n this.addTemplate('index', '\\n Home \\n {{#link-to params=dynamicLinkParams id=\"dynamic-link\"}}Dynamic{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var link = _this58.$('#dynamic-link');\n\n assert.equal(link.attr('href'), '/foo/one/two');\n\n var controller = _this58.applicationInstance.lookup('controller:index');\n _this58.runTask(function () {\n controller.set('dynamicLinkParams', ['bar', 'one', 'two', 'three']);\n });\n\n assert.equal(link.attr('href'), '/bar/one/two/three');\n });\n };\n\n _class4.prototype['@test GJ: {{link-to}} to a parent root model hook which performs a \\'transitionTo\\' has correct active class #13256'] = function (assert) {\n var _this59 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n this.add('route:parent', _emberRouting.Route.extend({\n afterModel: function () {\n this.transitionTo('parent.child');\n }\n }));\n\n this.addTemplate('application', '\\n {{link-to \\'Parent\\' \\'parent\\' id=\\'parent-link\\'}}\\n ');\n\n return this.visit('/').then(function () {\n return _this59.click('#parent-link');\n }).then(function () {\n shouldBeActive(assert, _this59.$('#parent-link'));\n });\n };\n\n return _class4;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper - loading states and warnings', function (_ApplicationTestCase6) {\n (0, _emberBabel.inherits)(_class5, _ApplicationTestCase6);\n\n function _class5() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase6.apply(this, arguments));\n }\n\n _class5.prototype['@test link-to with null/undefined dynamic parameters are put in a loading state'] = function (assert) {\n var _this61 = this;\n\n assert.expect(19);\n var warningMessage = 'This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid.';\n\n this.router.map(function () {\n this.route('thing', { path: '/thing/:thing_id' });\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to destinationRoute routeContext loadingClass=\\'i-am-loading\\' id=\\'context-link\\'}}\\n string\\n {{/link-to}}\\n {{#link-to secondRoute loadingClass=loadingClass id=\\'static-link\\'}}\\n string\\n {{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n destinationRoute: null,\n routeContext: null,\n loadingClass: 'i-am-loading'\n }));\n\n this.add('route:about', _emberRouting.Route.extend({\n activate: function () {\n assert.ok(true, 'About was entered');\n }\n }));\n\n function assertLinkStatus(link, url) {\n if (url) {\n assert.equal(normalizeUrl(link.attr('href')), url, 'loaded link-to has expected href');\n assert.ok(!link.hasClass('i-am-loading'), 'loaded linkComponent has no loadingClass');\n } else {\n assert.equal(normalizeUrl(link.attr('href')), '#', \"unloaded link-to has href='#'\");\n assert.ok(link.hasClass('i-am-loading'), 'loading linkComponent has loadingClass');\n }\n }\n\n var contextLink = void 0,\n staticLink = void 0,\n controller = void 0;\n\n return this.visit('/').then(function () {\n contextLink = _this61.$('#context-link');\n staticLink = _this61.$('#static-link');\n controller = _this61.applicationInstance.lookup('controller:index');\n\n assertLinkStatus(contextLink);\n assertLinkStatus(staticLink);\n\n return expectWarning(function () {\n return _this61.click(contextLink[0]);\n }, warningMessage);\n }).then(function () {\n // Set the destinationRoute (context is still null).\n _this61.runTask(function () {\n return controller.set('destinationRoute', 'thing');\n });\n assertLinkStatus(contextLink);\n\n // Set the routeContext to an id\n _this61.runTask(function () {\n return controller.set('routeContext', '456');\n });\n assertLinkStatus(contextLink, '/thing/456');\n\n // Test that 0 isn't interpreted as falsy.\n _this61.runTask(function () {\n return controller.set('routeContext', 0);\n });\n assertLinkStatus(contextLink, '/thing/0');\n\n // Set the routeContext to an object\n _this61.runTask(function () {\n controller.set('routeContext', { id: 123 });\n });\n assertLinkStatus(contextLink, '/thing/123');\n\n // Set the destinationRoute back to null.\n _this61.runTask(function () {\n return controller.set('destinationRoute', null);\n });\n assertLinkStatus(contextLink);\n\n return expectWarning(function () {\n return _this61.click(staticLink[0]);\n }, warningMessage);\n }).then(function () {\n _this61.runTask(function () {\n return controller.set('secondRoute', 'about');\n });\n assertLinkStatus(staticLink, '/about');\n\n // Click the now-active link\n return _this61.click(staticLink[0]);\n });\n };\n\n return _class5;\n }(_internalTestHelpers.ApplicationTestCase));\n\n function assertNav(options, callback, assert) {\n var nav = false;\n\n function check(event) {\n assert.equal(event.defaultPrevented, options.prevented, 'expected defaultPrevented=' + options.prevented);\n nav = true;\n event.preventDefault();\n }\n\n try {\n document.addEventListener('click', check);\n callback();\n } finally {\n document.removeEventListener('click', check);\n assert.ok(nav, 'Expected a link to be clicked');\n }\n }\n});","enifed('ember/tests/helpers/link_to_test/link_to_transitioning_classes_test', ['ember-babel', 'ember-runtime', 'ember-routing', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberRouting, _internalTestHelpers) {\n 'use strict';\n\n function assertHasClass(assert, selector, label) {\n var testLabel = selector.attr('id') + ' should have class ' + label;\n\n assert.equal(selector.hasClass(label), true, testLabel);\n }\n\n function assertHasNoClass(assert, selector, label) {\n var testLabel = selector.attr('id') + ' should not have class ' + label;\n\n assert.equal(selector.hasClass(label), false, testLabel);\n }\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper: .transitioning-in .transitioning-out CSS classes', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this2.aboutDefer = _emberRuntime.RSVP.defer();\n _this2.otherDefer = _emberRuntime.RSVP.defer();\n _this2.newsDefer = _emberRuntime.RSVP.defer();\n var _this = _this2;\n\n _this2.router.map(function () {\n this.route('about');\n this.route('other');\n this.route('news');\n });\n\n _this2.add('route:about', _emberRouting.Route.extend({\n model: function () {\n return _this.aboutDefer.promise;\n }\n }));\n\n _this2.add('route:other', _emberRouting.Route.extend({\n model: function () {\n return _this.otherDefer.promise;\n }\n }));\n\n _this2.add('route:news', _emberRouting.Route.extend({\n model: function () {\n return _this.newsDefer.promise;\n }\n }));\n\n _this2.addTemplate('application', '\\n {{outlet}}\\n {{link-to \\'Index\\' \\'index\\' id=\\'index-link\\'}}\\n {{link-to \\'About\\' \\'about\\' id=\\'about-link\\'}}\\n {{link-to \\'Other\\' \\'other\\' id=\\'other-link\\'}}\\n {{link-to \\'News\\' \\'news\\' activeClass=false id=\\'news-link\\'}}\\n ');\n return _this2;\n }\n\n _class.prototype.beforeEach = function () {\n return this.visit('/');\n };\n\n _class.prototype.afterEach = function () {\n _ApplicationTestCase.prototype.afterEach.call(this);\n this.aboutDefer = null;\n this.otherDefer = null;\n this.newsDefer = null;\n };\n\n _class.prototype['@test while a transition is underway'] = function (assert) {\n var _this3 = this;\n\n var $index = this.$('#index-link');\n var $about = this.$('#about-link');\n var $other = this.$('#other-link');\n\n $about.click();\n\n assertHasClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.runTask(function () {\n return _this3.aboutDefer.resolve();\n });\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n };\n\n _class.prototype['@test while a transition is underway with activeClass is false'] = function (assert) {\n var _this4 = this;\n\n var $index = this.$('#index-link');\n var $news = this.$('#news-link');\n var $other = this.$('#other-link');\n\n $news.click();\n\n assertHasClass(assert, $index, 'active');\n assertHasNoClass(assert, $news, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $news, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $news, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.runTask(function () {\n return _this4.newsDefer.resolve();\n });\n\n assertHasNoClass(assert, $index, 'active');\n assertHasNoClass(assert, $news, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $news, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $news, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper: .transitioning-in .transitioning-out CSS classes - nested link-to\\'s', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n var _this5 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.call(this));\n\n _this5.aboutDefer = _emberRuntime.RSVP.defer();\n _this5.otherDefer = _emberRuntime.RSVP.defer();\n var _this = _this5;\n\n _this5.router.map(function () {\n this.route('parent-route', function () {\n this.route('about');\n this.route('other');\n });\n });\n _this5.add('route:parent-route.about', _emberRouting.Route.extend({\n model: function () {\n return _this.aboutDefer.promise;\n }\n }));\n\n _this5.add('route:parent-route.other', _emberRouting.Route.extend({\n model: function () {\n return _this.otherDefer.promise;\n }\n }));\n\n _this5.addTemplate('application', '\\n {{outlet}}\\n {{#link-to \\'index\\' tagName=\\'li\\'}}\\n {{link-to \\'Index\\' \\'index\\' id=\\'index-link\\'}}\\n {{/link-to}}\\n {{#link-to \\'parent-route.about\\' tagName=\\'li\\'}}\\n {{link-to \\'About\\' \\'parent-route.about\\' id=\\'about-link\\'}}\\n {{/link-to}}\\n {{#link-to \\'parent-route.other\\' tagName=\\'li\\'}}\\n {{link-to \\'Other\\' \\'parent-route.other\\' id=\\'other-link\\'}}\\n {{/link-to}}\\n ');\n return _this5;\n }\n\n _class2.prototype.beforeEach = function () {\n return this.visit('/');\n };\n\n _class2.prototype.resolveAbout = function () {\n var _this6 = this;\n\n return this.runTask(function () {\n _this6.aboutDefer.resolve();\n _this6.aboutDefer = _emberRuntime.RSVP.defer();\n });\n };\n\n _class2.prototype.resolveOther = function () {\n var _this7 = this;\n\n return this.runTask(function () {\n _this7.otherDefer.resolve();\n _this7.otherDefer = _emberRuntime.RSVP.defer();\n });\n };\n\n _class2.prototype.teardown = function () {\n _ApplicationTestCase2.prototype.teardown.call(this);\n this.aboutDefer = null;\n this.otherDefer = null;\n };\n\n _class2.prototype['@test while a transition is underway with nested link-to\\'s'] = function (assert) {\n // TODO undo changes to this test but currently this test navigates away if navigation\n // outlet is not stable and the second $about.click() is triggered.\n var $about = this.$('#about-link');\n\n $about.click();\n\n var $index = this.$('#index-link');\n $about = this.$('#about-link');\n var $other = this.$('#other-link');\n\n assertHasClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasNoClass(assert, $about, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.resolveAbout();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n $other.click();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n this.resolveOther();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n\n $about.click();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasNoClass(assert, $about, 'active');\n assertHasClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasClass(assert, $other, 'ember-transitioning-out');\n\n this.resolveAbout();\n\n $index = this.$('#index-link');\n $about = this.$('#about-link');\n $other = this.$('#other-link');\n\n assertHasNoClass(assert, $index, 'active');\n assertHasClass(assert, $about, 'active');\n assertHasNoClass(assert, $other, 'active');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-in');\n assertHasNoClass(assert, $about, 'ember-transitioning-in');\n assertHasNoClass(assert, $other, 'ember-transitioning-in');\n\n assertHasNoClass(assert, $index, 'ember-transitioning-out');\n assertHasNoClass(assert, $about, 'ember-transitioning-out');\n assertHasNoClass(assert, $other, 'ember-transitioning-out');\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/helpers/link_to_test/link_to_with_query_params_test', ['ember-babel', '@ember/controller', 'ember-runtime', 'ember-routing', 'internal-test-helpers'], function (_emberBabel, _controller, _emberRuntime, _emberRouting, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('The {{link-to}} helper: invoking with query params', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n var indexProperties = {\n foo: '123',\n bar: 'abc'\n };\n _this.add('controller:index', _controller.default.extend({\n queryParams: ['foo', 'bar', 'abool'],\n foo: indexProperties.foo,\n bar: indexProperties.bar,\n boundThing: 'OMG',\n abool: true\n }));\n _this.add('controller:about', _controller.default.extend({\n queryParams: ['baz', 'bat'],\n baz: 'alex',\n bat: 'borf'\n }));\n _this.indexProperties = indexProperties;\n return _this;\n }\n\n _class.prototype.shouldNotBeActive = function (assert, selector) {\n this.checkActive(assert, selector, false);\n };\n\n _class.prototype.shouldBeActive = function (assert, selector) {\n this.checkActive(assert, selector, true);\n };\n\n _class.prototype.getController = function (name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class.prototype.checkActive = function (assert, selector, active) {\n var classList = this.$(selector)[0].className;\n assert.equal(classList.indexOf('active') > -1, active, selector + ' active should be ' + active.toString());\n };\n\n _class.prototype['@test doesn\\'t update controller QP properties on current route when invoked'] = function (assert) {\n var _this2 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this2.click('#the-link');\n var indexController = _this2.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), _this2.indexProperties, 'controller QP properties do not update');\n });\n };\n\n _class.prototype['@test doesn\\'t update controller QP properties on current route when invoked (empty query-params obj)'] = function (assert) {\n var _this3 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' (query-params) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this3.click('#the-link');\n var indexController = _this3.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), _this3.indexProperties, 'controller QP properties do not update');\n });\n };\n\n _class.prototype['@test doesn\\'t update controller QP properties on current route when invoked (empty query-params obj, inferred route)'] = function (assert) {\n var _this4 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this4.click('#the-link');\n var indexController = _this4.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), _this4.indexProperties, 'controller QP properties do not update');\n });\n };\n\n _class.prototype['@test updates controller QP properties on current route when invoked'] = function (assert) {\n var _this5 = this;\n\n this.addTemplate('index', '\\n {{#link-to \\'index\\' (query-params foo=\\'456\\') id=\"the-link\"}}\\n Index\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this5.click('#the-link');\n var indexController = _this5.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), { foo: '456', bar: 'abc' }, 'controller QP properties updated');\n });\n };\n\n _class.prototype['@test updates controller QP properties on current route when invoked (inferred route)'] = function (assert) {\n var _this6 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=\\'456\\') id=\"the-link\"}}\\n Index\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n _this6.click('#the-link');\n var indexController = _this6.getController('index');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar'), { foo: '456', bar: 'abc' }, 'controller QP properties updated');\n });\n };\n\n _class.prototype['@test updates controller QP properties on other route after transitioning to that route'] = function (assert) {\n var _this7 = this;\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.addTemplate('index', '\\n {{#link-to \\'about\\' (query-params baz=\\'lol\\') id=\\'the-link\\'}}\\n About\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var theLink = _this7.$('#the-link');\n assert.equal(theLink.attr('href'), '/about?baz=lol');\n\n _this7.runTask(function () {\n return _this7.click('#the-link');\n });\n\n var aboutController = _this7.getController('about');\n\n assert.deepEqual(aboutController.getProperties('baz', 'bat'), { baz: 'lol', bat: 'borf' }, 'about controller QP properties updated');\n });\n };\n\n _class.prototype['@test supplied QP properties can be bound'] = function (assert) {\n var _this8 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=boundThing) id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var indexController = _this8.getController('index');\n var theLink = _this8.$('#the-link');\n\n assert.equal(theLink.attr('href'), '/?foo=OMG');\n\n _this8.runTask(function () {\n return indexController.set('boundThing', 'ASL');\n });\n\n assert.equal(theLink.attr('href'), '/?foo=ASL');\n });\n };\n\n _class.prototype['@test supplied QP properties can be bound (booleans)'] = function (assert) {\n var _this9 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params abool=boundThing) id=\\'the-link\\'}}\\n Index\\n {{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var indexController = _this9.getController('index');\n var theLink = _this9.$('#the-link');\n\n assert.equal(theLink.attr('href'), '/?abool=OMG');\n\n _this9.runTask(function () {\n return indexController.set('boundThing', false);\n });\n\n assert.equal(theLink.attr('href'), '/?abool=false');\n\n _this9.click('#the-link');\n\n assert.deepEqual(indexController.getProperties('foo', 'bar', 'abool'), { foo: '123', bar: 'abc', abool: false }, 'bound bool QP properties update');\n });\n };\n\n _class.prototype['@test href updates when unsupplied controller QP props change'] = function (assert) {\n var _this10 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=\\'lol\\') id=\\'the-link\\'}}Index{{/link-to}}\\n ');\n\n return this.visit('/').then(function () {\n var indexController = _this10.getController('index');\n var theLink = _this10.$('#the-link');\n\n assert.equal(theLink.attr('href'), '/?foo=lol');\n\n _this10.runTask(function () {\n return indexController.set('bar', 'BORF');\n });\n\n assert.equal(theLink.attr('href'), '/?bar=BORF&foo=lol');\n\n _this10.runTask(function () {\n return indexController.set('foo', 'YEAH');\n });\n\n assert.equal(theLink.attr('href'), '/?bar=BORF&foo=lol');\n });\n };\n\n _class.prototype['@test The {{link-to}} with only query params always transitions to the current route with the query params applied'] = function (assert) {\n var _this11 = this;\n\n // Test harness for bug #12033\n this.addTemplate('cars', '\\n {{#link-to \\'cars.create\\' id=\\'create-link\\'}}Create new car{{/link-to}}\\n {{#link-to (query-params page=\\'2\\') id=\\'page2-link\\'}}Page 2{{/link-to}}\\n {{outlet}}\\n ');\n this.addTemplate('cars.create', '{{#link-to \\'cars\\' id=\\'close-link\\'}}Close create form{{/link-to}}');\n\n this.router.map(function () {\n this.route('cars', function () {\n this.route('create');\n });\n });\n\n this.add('controller:cars', _controller.default.extend({\n queryParams: ['page'],\n page: 1\n }));\n\n return this.visit('/cars/create').then(function () {\n var router = _this11.appRouter;\n var carsController = _this11.getController('cars');\n\n assert.equal(router.currentRouteName, 'cars.create');\n\n _this11.runTask(function () {\n return _this11.click('#close-link');\n });\n\n assert.equal(router.currentRouteName, 'cars.index');\n assert.equal(router.get('url'), '/cars');\n assert.equal(carsController.get('page'), 1, 'The page query-param is 1');\n\n _this11.runTask(function () {\n return _this11.click('#page2-link');\n });\n\n assert.equal(router.currentRouteName, 'cars.index', 'The active route is still cars');\n assert.equal(router.get('url'), '/cars?page=2', 'The url has been updated');\n assert.equal(carsController.get('page'), 2, 'The query params have been updated');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies activeClass when query params are not changed'] = function (assert) {\n var _this12 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params foo=\\'cat\\') id=\\'cat-link\\'}}Index{{/link-to}}\\n {{#link-to (query-params foo=\\'dog\\') id=\\'dog-link\\'}}Index{{/link-to}}\\n {{#link-to \\'index\\' id=\\'change-nothing\\'}}Index{{/link-to}}\\n ');\n this.addTemplate('search', '\\n {{#link-to (query-params search=\\'same\\') id=\\'same-search\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'change\\') id=\\'change-search\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' archive=true) id=\\'same-search-add-archive\\'}}Index{{/link-to}}\\n {{#link-to (query-params archive=true) id=\\'only-add-archive\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' archive=true) id=\\'both-same\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'different\\' archive=true) id=\\'change-one\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'different\\' archive=false) id=\\'remove-one\\'}}Index{{/link-to}}\\n {{outlet}}\\n ');\n this.addTemplate('search.results', '\\n {{#link-to (query-params sort=\\'title\\') id=\\'same-sort-child-only\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\') id=\\'same-search-parent-only\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'change\\') id=\\'change-search-parent-only\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' sort=\\'title\\') id=\\'same-search-same-sort-child-and-parent\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'same\\' sort=\\'author\\') id=\\'same-search-different-sort-child-and-parent\\'}}Index{{/link-to}}\\n {{#link-to (query-params search=\\'change\\' sort=\\'title\\') id=\\'change-search-same-sort-child-and-parent\\'}}Index{{/link-to}}\\n {{#link-to (query-params foo=\\'dog\\') id=\\'dog-link\\'}}Index{{/link-to}}\\n ');\n\n this.router.map(function () {\n this.route('search', function () {\n this.route('results');\n });\n });\n\n this.add('controller:search', _controller.default.extend({\n queryParams: ['search', 'archive'],\n search: '',\n archive: false\n }));\n\n this.add('controller:search.results', _controller.default.extend({\n queryParams: ['sort', 'showDetails'],\n sort: 'title',\n showDetails: true\n }));\n\n return this.visit('/').then(function () {\n _this12.shouldNotBeActive(assert, '#cat-link');\n _this12.shouldNotBeActive(assert, '#dog-link');\n\n return _this12.visit('/?foo=cat');\n }).then(function () {\n _this12.shouldBeActive(assert, '#cat-link');\n _this12.shouldNotBeActive(assert, '#dog-link');\n\n return _this12.visit('/?foo=dog');\n }).then(function () {\n _this12.shouldBeActive(assert, '#dog-link');\n _this12.shouldNotBeActive(assert, '#cat-link');\n _this12.shouldBeActive(assert, '#change-nothing');\n\n return _this12.visit('/search?search=same');\n }).then(function () {\n _this12.shouldBeActive(assert, '#same-search');\n _this12.shouldNotBeActive(assert, '#change-search');\n _this12.shouldNotBeActive(assert, '#same-search-add-archive');\n _this12.shouldNotBeActive(assert, '#only-add-archive');\n _this12.shouldNotBeActive(assert, '#remove-one');\n\n return _this12.visit('/search?search=same&archive=true');\n }).then(function () {\n _this12.shouldBeActive(assert, '#both-same');\n _this12.shouldNotBeActive(assert, '#change-one');\n\n return _this12.visit('/search/results?search=same&sort=title&showDetails=true');\n }).then(function () {\n _this12.shouldBeActive(assert, '#same-sort-child-only');\n _this12.shouldBeActive(assert, '#same-search-parent-only');\n _this12.shouldNotBeActive(assert, '#change-search-parent-only');\n _this12.shouldBeActive(assert, '#same-search-same-sort-child-and-parent');\n _this12.shouldNotBeActive(assert, '#same-search-different-sort-child-and-parent');\n _this12.shouldNotBeActive(assert, '#change-search-same-sort-child-and-parent');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies active class when query-param is a number'] = function (assert) {\n var _this13 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params page=pageNumber) id=\\'page-link\\'}}\\n Index\\n {{/link-to}}\\n ');\n this.add('controller:index', _controller.default.extend({\n queryParams: ['page'],\n page: 1,\n pageNumber: 5\n }));\n\n return this.visit('/').then(function () {\n _this13.shouldNotBeActive(assert, '#page-link');\n return _this13.visit('/?page=5');\n }).then(function () {\n _this13.shouldBeActive(assert, '#page-link');\n });\n };\n\n _class.prototype['@test the {{link-to}} applies active class when query-param is an array'] = function (assert) {\n var _this14 = this;\n\n this.addTemplate('index', '\\n {{#link-to (query-params pages=pagesArray) id=\\'array-link\\'}}Index{{/link-to}}\\n {{#link-to (query-params pages=biggerArray) id=\\'bigger-link\\'}}Index{{/link-to}}\\n {{#link-to (query-params pages=emptyArray) id=\\'empty-link\\'}}Index{{/link-to}}\\n ');\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['pages'],\n pages: [],\n pagesArray: [1, 2],\n biggerArray: [1, 2, 3],\n emptyArray: []\n }));\n\n return this.visit('/').then(function () {\n _this14.shouldNotBeActive(assert, '#array-link');\n\n return _this14.visit('/?pages=%5B1%2C2%5D');\n }).then(function () {\n _this14.shouldBeActive(assert, '#array-link');\n _this14.shouldNotBeActive(assert, '#bigger-link');\n _this14.shouldNotBeActive(assert, '#empty-link');\n\n return _this14.visit('/?pages=%5B2%2C1%5D');\n }).then(function () {\n _this14.shouldNotBeActive(assert, '#array-link');\n _this14.shouldNotBeActive(assert, '#bigger-link');\n _this14.shouldNotBeActive(assert, '#empty-link');\n\n return _this14.visit('/?pages=%5B1%2C2%2C3%5D');\n }).then(function () {\n _this14.shouldBeActive(assert, '#bigger-link');\n _this14.shouldNotBeActive(assert, '#array-link');\n _this14.shouldNotBeActive(assert, '#empty-link');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper applies active class to the parent route'] = function (assert) {\n var _this15 = this;\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n this.addTemplate('application', '\\n {{#link-to \\'parent\\' id=\\'parent-link\\'}}Parent{{/link-to}}\\n {{#link-to \\'parent.child\\' id=\\'parent-child-link\\'}}Child{{/link-to}}\\n {{#link-to \\'parent\\' (query-params foo=cat) id=\\'parent-link-qp\\'}}Parent{{/link-to}}\\n {{outlet}}\\n ');\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['foo'],\n foo: 'bar'\n }));\n\n return this.visit('/').then(function () {\n _this15.shouldNotBeActive(assert, '#parent-link');\n _this15.shouldNotBeActive(assert, '#parent-child-link');\n _this15.shouldNotBeActive(assert, '#parent-link-qp');\n return _this15.visit('/parent/child?foo=dog');\n }).then(function () {\n _this15.shouldBeActive(assert, '#parent-link');\n _this15.shouldNotBeActive(assert, '#parent-link-qp');\n });\n };\n\n _class.prototype['@test The {{link-to}} helper disregards query-params in activeness computation when current-when is specified'] = function (assert) {\n var _this16 = this;\n\n var appLink = void 0;\n\n this.router.map(function () {\n this.route('parent');\n });\n this.addTemplate('application', '\\n {{#link-to \\'parent\\' (query-params page=1) current-when=\\'parent\\' id=\\'app-link\\'}}\\n Parent\\n {{/link-to}}\\n {{outlet}}\\n ');\n this.addTemplate('parent', '\\n {{#link-to \\'parent\\' (query-params page=1) current-when=\\'parent\\' id=\\'parent-link\\'}}\\n Parent\\n {{/link-to}}\\n {{outlet}}\\n ');\n this.add('controller:parent', _controller.default.extend({\n queryParams: ['page'],\n page: 1\n }));\n\n return this.visit('/').then(function () {\n appLink = _this16.$('#app-link');\n\n assert.equal(appLink.attr('href'), '/parent');\n _this16.shouldNotBeActive(assert, '#app-link');\n\n return _this16.visit('/parent?page=2');\n }).then(function () {\n appLink = _this16.$('#app-link');\n var router = _this16.appRouter;\n\n assert.equal(appLink.attr('href'), '/parent');\n _this16.shouldBeActive(assert, '#app-link');\n assert.equal(_this16.$('#parent-link').attr('href'), '/parent');\n _this16.shouldBeActive(assert, '#parent-link');\n\n var parentController = _this16.getController('parent');\n\n assert.equal(parentController.get('page'), 2);\n\n _this16.runTask(function () {\n return parentController.set('page', 3);\n });\n\n assert.equal(router.get('location.path'), '/parent?page=3');\n _this16.shouldBeActive(assert, '#app-link');\n _this16.shouldBeActive(assert, '#parent-link');\n\n _this16.runTask(function () {\n return _this16.click('#app-link');\n });\n\n assert.equal(router.get('location.path'), '/parent');\n });\n };\n\n _class.prototype['@test link-to default query params while in active transition regression test'] = function (assert) {\n var _this17 = this;\n\n this.router.map(function () {\n this.route('foos');\n this.route('bars');\n });\n var foos = _emberRuntime.RSVP.defer();\n var bars = _emberRuntime.RSVP.defer();\n\n this.addTemplate('application', '\\n {{link-to \\'Foos\\' \\'foos\\' id=\\'foos-link\\'}}\\n {{link-to \\'Baz Foos\\' \\'foos\\' (query-params baz=true) id=\\'baz-foos-link\\'}}\\n {{link-to \\'Quux Bars\\' \\'bars\\' (query-params quux=true) id=\\'bars-link\\'}}\\n ');\n this.add('controller:foos', _controller.default.extend({\n queryParams: ['status'],\n baz: false\n }));\n this.add('route:foos', _emberRouting.Route.extend({\n model: function () {\n return foos.promise;\n }\n }));\n this.add('controller:bars', _controller.default.extend({\n queryParams: ['status'],\n quux: false\n }));\n this.add('route:bars', _emberRouting.Route.extend({\n model: function () {\n return bars.promise;\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this17.appRouter;\n var foosLink = _this17.$('#foos-link');\n var barsLink = _this17.$('#bars-link');\n var bazLink = _this17.$('#baz-foos-link');\n\n assert.equal(foosLink.attr('href'), '/foos');\n assert.equal(bazLink.attr('href'), '/foos?baz=true');\n assert.equal(barsLink.attr('href'), '/bars?quux=true');\n assert.equal(router.get('location.path'), '/');\n _this17.shouldNotBeActive(assert, '#foos-link');\n _this17.shouldNotBeActive(assert, '#baz-foos-link');\n _this17.shouldNotBeActive(assert, '#bars-link');\n\n _this17.runTask(function () {\n return barsLink.click();\n });\n _this17.shouldNotBeActive(assert, '#bars-link');\n\n _this17.runTask(function () {\n return foosLink.click();\n });\n _this17.shouldNotBeActive(assert, '#foos-link');\n\n _this17.runTask(function () {\n return foos.resolve();\n });\n\n assert.equal(router.get('location.path'), '/foos');\n _this17.shouldBeActive(assert, '#foos-link');\n });\n };\n\n _class.prototype['@test the {{link-to}} helper throws a useful error if you invoke it wrong'] = function (assert) {\n var _this18 = this;\n\n assert.expect(1);\n\n this.addTemplate('application', '{{#link-to id=\\'the-link\\'}}Index{{/link-to}}');\n\n expectAssertion(function () {\n _this18.visit('/');\n }, /You must provide one or more parameters to the link-to component/);\n\n return this.runLoopSettled();\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/homepage_example_test', ['ember-babel', 'ember-routing', 'ember-metal', 'ember-runtime', 'internal-test-helpers'], function (_emberBabel, _emberRouting, _emberMetal, _emberRuntime, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('The example renders correctly', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Render index template into application outlet'] = function (assert) {\n var _this2 = this;\n\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('index', 'People {{#each model as |person|}}Hello, {{person.fullName}} ! {{/each}} ');\n\n var Person = _emberRuntime.Object.extend({\n firstName: null,\n lastName: null,\n fullName: (0, _emberMetal.computed)('firstName', 'lastName', function () {\n return this.get('firstName') + ' ' + this.get('lastName');\n })\n });\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function () {\n return (0, _emberRuntime.A)([Person.create({ firstName: 'Tom', lastName: 'Dale' }), Person.create({ firstName: 'Yehuda', lastName: 'Katz' })]);\n }\n }));\n\n return this.visit('/').then(function () {\n var $ = _this2.$();\n\n assert.equal($.findAll('h1').text(), 'People');\n assert.equal($.findAll('li').length, 2);\n assert.equal($.findAll('li:nth-of-type(1)').text(), 'Hello, Tom Dale!');\n assert.equal($.findAll('li:nth-of-type(2)').text(), 'Hello, Yehuda Katz!');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/integration/multiple-app-test', ['ember-babel', 'internal-test-helpers', '@ember/application', 'ember-glimmer', 'ember-owner', '@ember/polyfills', 'rsvp'], function (_emberBabel, _internalTestHelpers, _application, _emberGlimmer, _emberOwner, _polyfills, _rsvp) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('View Integration', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n document.getElementById('qunit-fixture').innerHTML = '\\n
\\n
\\n ';\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this.runTask(function () {\n _this.createSecondApplication();\n });\n return _this;\n }\n\n _class.prototype.createSecondApplication = function (options) {\n var applicationOptions = this.applicationOptions;\n\n var myOptions = (0, _polyfills.assign)(applicationOptions, { rootElement: '#two' }, options);\n this.secondApp = _application.default.create(myOptions);\n this.secondResolver = this.secondApp.__registry__.resolver;\n return this.secondApp;\n };\n\n _class.prototype.teardown = function () {\n var _this2 = this;\n\n _ApplicationTestCase.prototype.teardown.call(this);\n\n if (this.secondApp) {\n this.runTask(function () {\n _this2.secondApp.destroy();\n });\n }\n };\n\n _class.prototype.addFactoriesToResolver = function (actions, resolver) {\n resolver.add('component:special-button', _emberGlimmer.Component.extend({\n actions: {\n doStuff: function () {\n var rootElement = (0, _emberOwner.getOwner)(this).application.rootElement;\n actions.push(rootElement);\n }\n }\n }));\n\n resolver.add('template:index', this.compile('\\n Node 1 {{special-button}}\\n ', {\n moduleName: 'my-app/templates/index.hbs'\n }));\n resolver.add('template:components/special-button', this.compile('\\n Button \\n ', {\n moduleName: 'my-app/templates/components/special-button.hbs'\n }));\n };\n\n _class.prototype['@test booting multiple applications can properly handle events'] = function (assert) {\n var _this3 = this;\n\n var actions = [];\n this.addFactoriesToResolver(actions, this.resolver);\n this.addFactoriesToResolver(actions, this.secondResolver);\n\n return (0, _rsvp.resolve)().then(function () {\n return _this3.application.visit('/');\n }).then(function () {\n return _this3.secondApp.visit('/');\n }).then(function () {\n document.querySelector('#two .do-stuff').click();\n document.querySelector('#one .do-stuff').click();\n\n assert.deepEqual(actions, ['#two', '#one']);\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_ApplicationTestCase.prototype.applicationOptions, {\n rootElement: '#one',\n router: null\n });\n }\n }]);\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/production_build_test', ['ember-babel', '@ember/debug', 'internal-test-helpers'], function (_emberBabel, _debug, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('production builds', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test assert does not throw in production builds'] = function (assert) {\n assert.expect(1);\n\n try {\n false && !false && (0, _debug.assert)('Should not throw');\n\n assert.ok(true, 'Ember.assert did not throw');\n } catch (e) {\n assert.ok(false, 'Expected assert not to throw but it did: ' + e.message);\n }\n };\n\n _class.prototype['@test runInDebug does not run the callback in production builds'] = function (assert) {\n var fired = false;\n (0, _debug.runInDebug)(function () {\n return fired = true;\n });\n\n assert.equal(fired, false, 'runInDebug callback should not be ran');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","enifed('ember/tests/reexports_test', ['ember-babel', 'ember/index', '@ember/canary-features', 'internal-test-helpers', 'ember-views'], function (_emberBabel, _index, _canaryFeatures, _internalTestHelpers, _emberViews) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('ember reexports', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Ember exports correctly'] = function (assert) {\n allExports.forEach(function (reexport) {\n var path = reexport[0],\n moduleId = reexport[1],\n exportName = reexport[2];\n\n // default path === exportName if none present\n if (!exportName) {\n exportName = path;\n }\n\n (0, _internalTestHelpers.confirmExport)(_index.default, assert, path, moduleId, exportName, 'Ember.' + path + ' exports correctly');\n });\n };\n\n _class.prototype['@test Ember.String.isHTMLSafe exports correctly'] = function (assert) {\n (0, _internalTestHelpers.confirmExport)(_index.default, assert, 'String.isHTMLSafe', 'ember-glimmer', 'isHTMLSafe');\n };\n\n _class.prototype['@test Ember.EXTEND_PROTOTYPES is present (but deprecated)'] = function (assert) {\n expectDeprecation(function () {\n assert.strictEqual(_index.default.ENV.EXTEND_PROTOTYPES, _index.default.EXTEND_PROTOTYPES, 'Ember.EXTEND_PROTOTYPES exists');\n }, /EXTEND_PROTOTYPES is deprecated/);\n };\n\n _class.prototype['@test Ember.FEATURES is exported'] = function (assert) {\n for (var feature in _canaryFeatures.FEATURES) {\n assert.equal(_index.default.FEATURES[feature], _canaryFeatures.FEATURES[feature], 'Ember.FEATURES contains ${feature} with correct value');\n }\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n\n var allExports = [\n // ember-environment\n ['ENV', 'ember-environment', { get: 'getENV' }], ['lookup', 'ember-environment', { get: 'getLookup', set: 'setLookup' }],\n\n // ember-utils\n ['getOwner', '@ember/application', 'getOwner'], ['setOwner', '@ember/application', 'setOwner'], ['assign', '@ember/polyfills'], ['GUID_KEY', 'ember-utils'], ['uuid', 'ember-utils'], ['generateGuid', 'ember-utils'], ['guidFor', 'ember-utils'], ['inspect', 'ember-utils'], ['makeArray', 'ember-utils'], ['canInvoke', 'ember-utils'], ['tryInvoke', 'ember-utils'], ['wrap', 'ember-utils'], ['NAME_KEY', 'ember-utils'],\n\n // container\n ['Registry', 'container', 'Registry'], ['Container', 'container', 'Container'],\n\n // @ember/debug\n ['deprecateFunc', '@ember/debug'], ['deprecate', '@ember/debug'], ['assert', '@ember/debug'], ['warn', '@ember/debug'], ['debug', '@ember/debug'], ['runInDebug', '@ember/debug'], ['Debug.registerDeprecationHandler', '@ember/debug', 'registerDeprecationHandler'], ['Debug.registerWarnHandler', '@ember/debug', 'registerWarnHandler'], ['Error', '@ember/error', 'default'],\n\n // ember-metal\n ['computed', 'ember-metal', '_globalsComputed'], ['computed.alias', 'ember-metal', 'alias'], ['ComputedProperty', 'ember-metal'], ['cacheFor', 'ember-metal', 'getCachedValueFor'], ['merge', '@ember/polyfills'], ['instrument', '@ember/instrumentation'], ['subscribe', '@ember/instrumentation', 'subscribe'], ['Instrumentation.instrument', '@ember/instrumentation', 'instrument'], ['Instrumentation.subscribe', '@ember/instrumentation', 'subscribe'], ['Instrumentation.unsubscribe', '@ember/instrumentation', 'unsubscribe'], ['Instrumentation.reset', '@ember/instrumentation', 'reset'], ['testing', '@ember/debug', { get: 'isTesting', set: 'setTesting' }], ['onerror', 'ember-error-handling', { get: 'getOnerror', set: 'setOnerror' }], ['FEATURES.isEnabled', '@ember/canary-features', 'isEnabled'], ['meta', 'ember-meta'], ['get', 'ember-metal'], ['set', 'ember-metal'], ['_getPath', 'ember-metal'], ['getWithDefault', 'ember-metal'], ['trySet', 'ember-metal'], ['_Cache', 'ember-utils', 'Cache'], ['on', 'ember-metal'], ['addListener', 'ember-metal'], ['removeListener', 'ember-metal'], ['sendEvent', 'ember-metal'], ['hasListeners', 'ember-metal'], ['isNone', 'ember-metal'], ['isEmpty', 'ember-metal'], ['isBlank', 'ember-metal'], ['isPresent', 'ember-metal'], ['_Backburner', 'backburner', 'default'], ['run', '@ember/runloop', '_globalsRun'], ['run.backburner', '@ember/runloop', 'backburner'], ['run.begin', '@ember/runloop', 'begin'], ['run.bind', '@ember/runloop', 'bind'], ['run.cancel', '@ember/runloop', 'cancel'], ['run.debounce', '@ember/runloop', 'debounce'], ['run.end', '@ember/runloop', 'end'], ['run.hasScheduledTimers', '@ember/runloop', 'hasScheduledTimers'], ['run.join', '@ember/runloop', 'join'], ['run.later', '@ember/runloop', 'later'], ['run.next', '@ember/runloop', 'next'], ['run.once', '@ember/runloop', 'once'], ['run.schedule', '@ember/runloop', 'schedule'], ['run.scheduleOnce', '@ember/runloop', 'scheduleOnce'], ['run.throttle', '@ember/runloop', 'throttle'], ['run.currentRunLoop', '@ember/runloop', { get: 'getCurrentRunLoop' }], ['run.cancelTimers', '@ember/runloop', 'cancelTimers'], ['propertyWillChange', 'ember-metal'], ['propertyDidChange', 'ember-metal'], ['notifyPropertyChange', 'ember-metal'], ['overrideChains', 'ember-metal'], ['beginPropertyChanges', 'ember-metal'], ['endPropertyChanges', 'ember-metal'], ['changeProperties', 'ember-metal'], ['platform.defineProperty', null, { value: true }], ['platform.hasPropertyAccessors', null, { value: true }], ['defineProperty', 'ember-metal'], ['watchKey', 'ember-metal'], ['unwatchKey', 'ember-metal'], ['removeChainWatcher', 'ember-metal'], ['_ChainNode', 'ember-metal', 'ChainNode'], ['finishChains', 'ember-metal'], ['watchPath', 'ember-metal'], ['unwatchPath', 'ember-metal'], ['watch', 'ember-metal'], ['isWatching', 'ember-metal'], ['unwatch', 'ember-metal'], ['destroy', 'ember-meta', 'deleteMeta'], ['libraries', 'ember-metal'], ['OrderedSet', '@ember/map/lib/ordered-set', 'default'], ['Map', '@ember/map', 'default'], ['MapWithDefault', '@ember/map/with-default', 'default'], ['getProperties', 'ember-metal'], ['setProperties', 'ember-metal'], ['expandProperties', 'ember-metal'], ['addObserver', 'ember-metal'], ['removeObserver', 'ember-metal'], ['aliasMethod', 'ember-metal'], ['observer', 'ember-metal'], ['mixin', 'ember-metal'], ['Mixin', 'ember-metal'],\n\n // ember-console\n ['Logger', 'ember-console', 'default'],\n\n // ember-views\n !_emberViews.jQueryDisabled && ['$', 'ember-views', 'jQuery'], ['ViewUtils.isSimpleClick', 'ember-views', 'isSimpleClick'], ['ViewUtils.getViewElement', 'ember-views', 'getViewElement'], ['ViewUtils.getViewBounds', 'ember-views', 'getViewBounds'], ['ViewUtils.getViewClientRects', 'ember-views', 'getViewClientRects'], ['ViewUtils.getViewBoundingClientRect', 'ember-views', 'getViewBoundingClientRect'], ['ViewUtils.getRootViews', 'ember-views', 'getRootViews'], ['ViewUtils.getChildViews', 'ember-views', 'getChildViews'], ['ViewUtils.isSerializationFirstNode', 'ember-glimmer', 'isSerializationFirstNode'], ['TextSupport', 'ember-views'], ['ComponentLookup', 'ember-views'], ['EventDispatcher', 'ember-views'],\n\n // ember-glimmer\n ['Component', 'ember-glimmer', 'Component'], ['Helper', 'ember-glimmer', 'Helper'], ['Helper.helper', 'ember-glimmer', 'helper'], ['Checkbox', 'ember-glimmer', 'Checkbox'], ['LinkComponent', 'ember-glimmer', 'LinkComponent'], ['TextArea', 'ember-glimmer', 'TextArea'], ['TextField', 'ember-glimmer', 'TextField'], ['TEMPLATES', 'ember-glimmer', { get: 'getTemplates', set: 'setTemplates' }], ['Handlebars.template', 'ember-glimmer', 'template'], ['HTMLBars.template', 'ember-glimmer', 'template'], ['Handlebars.Utils.escapeExpression', 'ember-glimmer', 'escapeExpression'], ['String.htmlSafe', 'ember-glimmer', 'htmlSafe'], ['_setComponentManager', 'ember-glimmer', 'setComponentManager'], ['_componentManagerCapabilities', 'ember-glimmer', 'capabilities'],\n\n // ember-runtime\n ['A', 'ember-runtime'], ['_RegistryProxyMixin', 'ember-runtime', 'RegistryProxyMixin'], ['_ContainerProxyMixin', 'ember-runtime', 'ContainerProxyMixin'], ['Object', 'ember-runtime'], ['String.loc', '@ember/string', 'loc'], ['String.w', '@ember/string', 'w'], ['String.dasherize', '@ember/string', 'dasherize'], ['String.decamelize', '@ember/string', 'decamelize'], ['String.camelize', '@ember/string', 'camelize'], ['String.classify', '@ember/string', 'classify'], ['String.underscore', '@ember/string', 'underscore'], ['String.capitalize', '@ember/string', 'capitalize'], ['compare', 'ember-runtime'], ['copy', 'ember-runtime'], ['isEqual', 'ember-runtime'], ['inject.controller', '@ember/controller', 'inject'], ['inject.service', '@ember/service', 'inject'], ['Array', 'ember-runtime'], ['Comparable', 'ember-runtime'], ['Namespace', 'ember-runtime'], ['Enumerable', 'ember-runtime'], ['ArrayProxy', 'ember-runtime'], ['ObjectProxy', 'ember-runtime'], ['ActionHandler', 'ember-runtime'], ['CoreObject', 'ember-runtime'], ['NativeArray', 'ember-runtime'], ['Copyable', 'ember-runtime'], ['MutableEnumerable', 'ember-runtime'], ['MutableArray', 'ember-runtime'], ['TargetActionSupport', 'ember-runtime'], ['Evented', 'ember-runtime'], ['PromiseProxyMixin', 'ember-runtime'], ['Observable', 'ember-runtime'], ['typeOf', 'ember-runtime'], ['isArray', 'ember-runtime'], ['Object', 'ember-runtime'], ['onLoad', '@ember/application'], ['runLoadHooks', '@ember/application'], ['Controller', '@ember/controller', 'default'], ['ControllerMixin', '@ember/controller/lib/controller_mixin', 'default'], ['Service', '@ember/service', 'default'], ['_ProxyMixin', 'ember-runtime'], ['RSVP', 'ember-runtime'], ['STRINGS', '@ember/string', { get: '_getStrings', set: '_setStrings' }], ['BOOTED', 'ember-metal', { get: 'isNamespaceSearchDisabled', set: 'setNamespaceSearchDisabled' }], ['computed.empty', '@ember/object/computed', 'empty'], ['computed.notEmpty', '@ember/object/computed', 'notEmpty'], ['computed.none', '@ember/object/computed', 'none'], ['computed.not', '@ember/object/computed', 'not'], ['computed.bool', '@ember/object/computed', 'bool'], ['computed.match', '@ember/object/computed', 'match'], ['computed.equal', '@ember/object/computed', 'equal'], ['computed.gt', '@ember/object/computed', 'gt'], ['computed.gte', '@ember/object/computed', 'gte'], ['computed.lt', '@ember/object/computed', 'lt'], ['computed.lte', '@ember/object/computed', 'lte'], ['computed.oneWay', '@ember/object/computed', 'oneWay'], ['computed.reads', '@ember/object/computed', 'oneWay'], ['computed.readOnly', '@ember/object/computed', 'readOnly'], ['computed.deprecatingAlias', '@ember/object/computed', 'deprecatingAlias'], ['computed.and', '@ember/object/computed', 'and'], ['computed.or', '@ember/object/computed', 'or'], ['computed.sum', '@ember/object/computed', 'sum'], ['computed.min', '@ember/object/computed', 'min'], ['computed.max', '@ember/object/computed', 'max'], ['computed.map', '@ember/object/computed', 'map'], ['computed.sort', '@ember/object/computed', 'sort'], ['computed.setDiff', '@ember/object/computed', 'setDiff'], ['computed.mapBy', '@ember/object/computed', 'mapBy'], ['computed.filter', '@ember/object/computed', 'filter'], ['computed.filterBy', '@ember/object/computed', 'filterBy'], ['computed.uniq', '@ember/object/computed', 'uniq'], ['computed.uniqBy', '@ember/object/computed', 'uniqBy'], ['computed.union', '@ember/object/computed', 'union'], ['computed.intersect', '@ember/object/computed', 'intersect'], ['computed.collect', '@ember/object/computed', 'collect'],\n\n // ember-routing\n ['Location', 'ember-routing'], ['AutoLocation', 'ember-routing'], ['HashLocation', 'ember-routing'], ['HistoryLocation', 'ember-routing'], ['NoneLocation', 'ember-routing'], ['controllerFor', 'ember-routing'], ['generateControllerFactory', 'ember-routing'], ['generateController', 'ember-routing'], ['RouterDSL', 'ember-routing'], ['Router', 'ember-routing'], ['Route', 'ember-routing'],\n\n // ember-application\n ['Application', '@ember/application', 'default'], ['ApplicationInstance', '@ember/application/instance', 'default'], ['Engine', '@ember/engine', 'default'], ['EngineInstance', '@ember/engine/instance', 'default'], ['Resolver', '@ember/application/globals-resolver', 'default'], ['DefaultResolver', '@ember/application/globals-resolver', 'default'],\n\n // ember-extension-support\n ['DataAdapter', 'ember-extension-support'], ['ContainerDebugAdapter', 'ember-extension-support']].filter(Boolean);\n});","enifed('ember/tests/routing/decoupled_basic_test', ['@ember/polyfills', 'ember-babel', 'ember-owner', 'rsvp', 'ember-template-compiler', 'ember-environment', 'ember-routing', '@ember/controller', 'ember-runtime', 'internal-test-helpers', '@ember/runloop', 'ember-metal', 'ember-glimmer', '@ember/engine', 'router'], function (_polyfills, _emberBabel, _emberOwner, _rsvp, _emberTemplateCompiler, _emberEnvironment, _emberRouting, _controller, _emberRuntime, _internalTestHelpers, _runloop, _emberMetal, _emberGlimmer, _engine, _router) {\n 'use strict';\n\n /* eslint-disable no-console */\n\n var originalRenderSupport = void 0;\n var originalConsoleError = void 0;\n\n (0, _internalTestHelpers.moduleFor)('Basic Routing - Decoupled from global resolver', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n _this.addTemplate('home', 'Hours ');\n _this.addTemplate('camelot', '');\n _this.addTemplate('homepage', 'Megatroll {{model.home}}
');\n\n _this.router.map(function () {\n this.route('home', { path: '/' });\n });\n originalRenderSupport = _emberEnvironment.ENV._ENABLE_RENDER_SUPPORT;\n _emberEnvironment.ENV._ENABLE_RENDER_SUPPORT = true;\n originalConsoleError = console.error;\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _ApplicationTestCase.prototype.teardown.call(this);\n _emberEnvironment.ENV._ENABLE_RENDER_SUPPORT = originalRenderSupport;\n console.error = originalConsoleError;\n };\n\n _class.prototype.getController = function (name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class.prototype.handleURLAborts = function (assert, path) {\n var _this2 = this;\n\n (0, _runloop.run)(function () {\n var router = _this2.applicationInstance.lookup('router:main');\n router.handleURL(path).then(function () {\n assert.ok(false, 'url: `' + path + '` was NOT to be handled');\n }, function (reason) {\n assert.ok(reason && reason.message === 'TransitionAborted', 'url: `' + path + '` was to be aborted');\n });\n });\n };\n\n _class.prototype.handleURLRejectsWith = function (context, assert, path, expectedReason) {\n return context.visit(path).then(function () {\n assert.ok(false, 'expected handleURLing: `' + path + '` to fail');\n }).catch(function (reason) {\n assert.equal(reason, expectedReason);\n });\n };\n\n _class.prototype['@test warn on URLs not included in the route set'] = function () {\n var _this3 = this;\n\n return this.visit('/').then(function () {\n expectAssertion(function () {\n _this3.visit('/what-is-this-i-dont-even');\n }, /'\\/what-is-this-i-dont-even' did not match any routes/);\n });\n };\n\n _class.prototype['@test The Homepage'] = function (assert) {\n var _this4 = this;\n\n return this.visit('/').then(function () {\n assert.equal(_this4.currentPath, 'home', 'currently on the home route');\n\n var text = _this4.$('.hours').text();\n assert.equal(text, 'Hours', 'the home template was rendered');\n });\n };\n\n _class.prototype['@test The Homepage and the Camelot page with multiple Router.map calls'] = function (assert) {\n var _this5 = this;\n\n this.router.map(function () {\n this.route('camelot', { path: '/camelot' });\n });\n\n return this.visit('/camelot').then(function () {\n assert.equal(_this5.currentPath, 'camelot');\n\n var text = _this5.$('#camelot').text();\n assert.equal(text, 'Is a silly place', 'the camelot template was rendered');\n\n return _this5.visit('/');\n }).then(function () {\n assert.equal(_this5.currentPath, 'home');\n\n var text = _this5.$('.hours').text();\n assert.equal(text, 'Hours', 'the home template was rendered');\n });\n };\n\n _class.prototype['@test The Homepage with explicit template name in renderTemplate'] = function (assert) {\n var _this6 = this;\n\n this.add('route:home', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this6.$('#troll').text();\n assert.equal(text, 'Megatroll', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test an alternate template will pull in an alternate controller'] = function (assert) {\n var _this7 = this;\n\n this.add('route:home', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n this.add('controller:homepage', _controller.default.extend({\n model: {\n home: 'Comes from homepage'\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this7.$('p').text();\n\n assert.equal(text, 'Comes from homepage', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test An alternate template will pull in an alternate controller instead of controllerName'] = function (assert) {\n var _this8 = this;\n\n this.add('route:home', _emberRouting.Route.extend({\n controllerName: 'foo',\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n this.add('controller:foo', _controller.default.extend({\n model: {\n home: 'Comes from foo'\n }\n }));\n this.add('controller:homepage', _controller.default.extend({\n model: {\n home: 'Comes from homepage'\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this8.$('p').text();\n\n assert.equal(text, 'Comes from homepage', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test The template will pull in an alternate controller via key/value'] = function (assert) {\n var _this9 = this;\n\n this.router.map(function () {\n this.route('homepage', { path: '/' });\n });\n\n this.add('route:homepage', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ controller: 'home' });\n }\n }));\n this.add('controller:home', _controller.default.extend({\n model: {\n home: 'Comes from home.'\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this9.$('p').text();\n\n assert.equal(text, 'Comes from home.', 'the homepage template was rendered from data from the HomeController');\n });\n };\n\n _class.prototype['@test The Homepage with explicit template name in renderTemplate and controller'] = function (assert) {\n var _this10 = this;\n\n this.add('controller:home', _controller.default.extend({\n model: {\n home: 'YES I AM HOME'\n }\n }));\n this.add('route:home', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('homepage');\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this10.$('p').text();\n\n assert.equal(text, 'YES I AM HOME', 'The homepage template was rendered');\n });\n };\n\n _class.prototype['@test Model passed via renderTemplate model is set as controller\\'s model'] = function (assert) {\n var _this11 = this;\n\n this.addTemplate('bio', '{{model.name}}
');\n this.add('route:home', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('bio', {\n model: { name: 'emberjs' }\n });\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this11.$('p').text();\n\n assert.equal(text, 'emberjs', 'Passed model was set as controller\\'s model');\n });\n };\n\n _class.prototype['@test render uses templateName from route'] = function (assert) {\n var _this12 = this;\n\n this.addTemplate('the_real_home_template', 'THIS IS THE REAL HOME
');\n this.add('route:home', _emberRouting.Route.extend({\n templateName: 'the_real_home_template'\n }));\n\n return this.visit('/').then(function () {\n var text = _this12.$('p').text();\n\n assert.equal(text, 'THIS IS THE REAL HOME', 'the homepage template was rendered');\n });\n };\n\n _class.prototype['@test defining templateName allows other templates to be rendered'] = function (assert) {\n var _this13 = this;\n\n this.addTemplate('alert', 'Invader!
');\n this.addTemplate('the_real_home_template', 'THIS IS THE REAL HOME
{{outlet \\'alert\\'}}');\n this.add('route:home', _emberRouting.Route.extend({\n templateName: 'the_real_home_template',\n actions: {\n showAlert: function () {\n this.render('alert', {\n into: 'home',\n outlet: 'alert'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this13.$('p').text();\n assert.equal(text, 'THIS IS THE REAL HOME', 'the homepage template was rendered');\n\n return _this13.runTask(function () {\n return _this13.appRouter.send('showAlert');\n });\n }).then(function () {\n var text = _this13.$('.alert-box').text();\n\n assert.equal(text, 'Invader!', 'Template for alert was rendered into the outlet');\n });\n };\n\n _class.prototype['@test templateName is still used when calling render with no name and options'] = function (assert) {\n var _this14 = this;\n\n this.addTemplate('alert', 'Invader!
');\n this.addTemplate('home', 'THIS IS THE REAL HOME
{{outlet \\'alert\\'}}');\n\n this.add('route:home', _emberRouting.Route.extend({\n templateName: 'alert',\n renderTemplate: function () {\n this.render({});\n }\n }));\n\n return this.visit('/').then(function () {\n var text = _this14.$('.alert-box').text();\n\n assert.equal(text, 'Invader!', 'default templateName was rendered into outlet');\n });\n };\n\n _class.prototype['@test The Homepage with a `setupController` hook'] = function (assert) {\n var _this15 = this;\n\n this.addTemplate('home', '{{#each hours as |entry|}}\\n {{entry}} \\n {{/each}}\\n \\n ');\n\n this.add('route:home', _emberRouting.Route.extend({\n setupController: function (controller) {\n controller.set('hours', ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm']);\n }\n }));\n return this.visit('/').then(function () {\n var text = _this15.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');\n });\n };\n\n _class.prototype['@test The route controller is still set when overriding the setupController hook'] = function (assert) {\n var _this16 = this;\n\n this.add('route:home', _emberRouting.Route.extend({\n setupController: function () {\n // no-op\n // importantly, we are not calling this._super\n }\n }));\n\n this.add('controller:home', _controller.default.extend());\n\n return this.visit('/').then(function () {\n var homeRoute = _this16.applicationInstance.lookup('route:home');\n var homeController = _this16.applicationInstance.lookup('controller:home');\n\n assert.equal(homeRoute.controller, homeController, 'route controller is the home controller');\n });\n };\n\n _class.prototype['@test the route controller can be specified via controllerName'] = function (assert) {\n var _this17 = this;\n\n this.addTemplate('home', '{{myValue}}
');\n this.add('route:home', _emberRouting.Route.extend({\n controllerName: 'myController'\n }));\n this.add('controller:myController', _controller.default.extend({\n myValue: 'foo'\n }));\n\n return this.visit('/').then(function () {\n var homeRoute = _this17.applicationInstance.lookup('route:home');\n var myController = _this17.applicationInstance.lookup('controller:myController');\n var text = _this17.$('p').text();\n\n assert.equal(homeRoute.controller, myController, 'route controller is set by controllerName');\n assert.equal(text, 'foo', 'The homepage template was rendered with data from the custom controller');\n });\n };\n\n _class.prototype['@test The route controller specified via controllerName is used in render'] = function (assert) {\n var _this18 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _emberRouting.Route.extend({\n controllerName: 'myController',\n renderTemplate: function () {\n this.render('alternative_home');\n }\n }));\n\n this.add('controller:myController', _controller.default.extend({\n myValue: 'foo'\n }));\n\n this.addTemplate('alternative_home', 'alternative home: {{myValue}}
');\n\n return this.visit('/').then(function () {\n var homeRoute = _this18.applicationInstance.lookup('route:home');\n var myController = _this18.applicationInstance.lookup('controller:myController');\n var text = _this18.$('p').text();\n\n assert.equal(homeRoute.controller, myController, 'route controller is set by controllerName');\n\n assert.equal(text, 'alternative home: foo', 'The homepage template was rendered with data from the custom controller');\n });\n };\n\n _class.prototype['@test The route controller specified via controllerName is used in render even when a controller with the routeName is available'] = function (assert) {\n var _this19 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.addTemplate('home', 'home: {{myValue}}
');\n\n this.add('route:home', _emberRouting.Route.extend({\n controllerName: 'myController'\n }));\n\n this.add('controller:home', _controller.default.extend({\n myValue: 'home'\n }));\n\n this.add('controller:myController', _controller.default.extend({\n myValue: 'myController'\n }));\n\n return this.visit('/').then(function () {\n var homeRoute = _this19.applicationInstance.lookup('route:home');\n var myController = _this19.applicationInstance.lookup('controller:myController');\n var text = _this19.$('p').text();\n\n assert.equal(homeRoute.controller, myController, 'route controller is set by controllerName');\n\n assert.equal(text, 'home: myController', 'The homepage template was rendered with data from the custom controller');\n });\n };\n\n _class.prototype['@test The Homepage with a \\'setupController\\' hook modifying other controllers'] = function (assert) {\n var _this20 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _emberRouting.Route.extend({\n setupController: function () /* controller */{\n this.controllerFor('home').set('hours', ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm']);\n }\n }));\n\n this.addTemplate('home', '{{#each hours as |entry|}}{{entry}} {{/each}} ');\n\n return this.visit('/').then(function () {\n var text = _this20.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');\n });\n };\n\n _class.prototype['@test The Homepage with a computed model that does not get overridden'] = function (assert) {\n var _this21 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('controller:home', _controller.default.extend({\n model: (0, _emberMetal.computed)(function () {\n return ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm'];\n })\n }));\n\n this.addTemplate('home', '{{#each model as |passage|}}{{passage}} {{/each}} ');\n\n return this.visit('/').then(function () {\n var text = _this21.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the context intact');\n });\n };\n\n _class.prototype['@test The Homepage getting its controller context via model'] = function (assert) {\n var _this22 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _emberRouting.Route.extend({\n model: function () {\n return ['Monday through Friday: 9am to 5pm', 'Saturday: Noon to Midnight', 'Sunday: Noon to 6pm'];\n },\n setupController: function (controller, model) {\n assert.equal(this.controllerFor('home'), controller);\n\n this.controllerFor('home').set('hours', model);\n }\n }));\n\n this.addTemplate('home', '{{#each hours as |entry|}}{{entry}} {{/each}} ');\n\n return this.visit('/').then(function () {\n var text = _this22.$('ul li:nth-child(3)').text();\n\n assert.equal(text, 'Sunday: Noon to 6pm', 'The template was rendered with the hours context');\n });\n };\n\n _class.prototype['@test The Specials Page getting its controller context by deserializing the params hash'] = function (assert) {\n var _this23 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n this.add('route:special', _emberRouting.Route.extend({\n model: function (params) {\n return _emberRuntime.Object.create({\n menuItemId: params.menu_item_id\n });\n }\n }));\n\n this.addTemplate('special', '{{model.menuItemId}}
');\n\n return this.visit('/specials/1').then(function () {\n var text = _this23.$('p').text();\n\n assert.equal(text, '1', 'The model was used to render the template');\n });\n };\n\n _class.prototype['@test The Specials Page defaults to looking models up via `find`'] = function () {\n var _this24 = this;\n\n var MenuItem = _emberRuntime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n return MenuItem.create({ id: id });\n }\n });\n this.add('model:menu_item', MenuItem);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n this.addTemplate('special', '{{model.id}}');\n\n return this.visit('/specials/1').then(function () {\n _this24.assertText('1', 'The model was used to render the template');\n });\n };\n\n _class.prototype['@test The Special Page returning a promise puts the app into a loading state until the promise is resolved'] = function () {\n var _this25 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var menuItem = void 0,\n resolve = void 0;\n\n var MenuItem = _emberRuntime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n\n return new _rsvp.default.Promise(function (res) {\n resolve = res;\n });\n }\n });\n\n this.add('model:menu_item', MenuItem);\n\n this.addTemplate('special', '{{model.id}}
');\n this.addTemplate('loading', 'LOADING!
');\n\n var visited = this.visit('/specials/1');\n this.assertText('LOADING!', 'The app is in the loading state');\n\n resolve(menuItem);\n\n return visited.then(function () {\n _this25.assertText('1', 'The app is now in the specials state');\n });\n };\n\n _class.prototype['@test The loading state doesn\\'t get entered for promises that resolve on the same run loop'] = function (assert) {\n var _this26 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var MenuItem = _emberRuntime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n return { id: id };\n }\n });\n\n this.add('model:menu_item', MenuItem);\n\n this.add('route:loading', _emberRouting.Route.extend({\n enter: function () {\n assert.ok(false, \"LoadingRoute shouldn't have been entered.\");\n }\n }));\n\n this.addTemplate('special', '{{model.id}}
');\n this.addTemplate('loading', 'LOADING!
');\n\n return this.visit('/specials/1').then(function () {\n var text = _this26.$('p').text();\n\n assert.equal(text, '1', 'The app is now in the specials state');\n });\n };\n\n _class.prototype[\"@test The Special page returning an error invokes SpecialRoute's error handler\"] = function (assert) {\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var menuItem = void 0,\n promise = void 0,\n resolve = void 0;\n\n var MenuItem = _emberRuntime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n promise = new _rsvp.default.Promise(function (res) {\n return resolve = res;\n });\n\n return promise;\n }\n });\n\n this.add('model:menu_item', MenuItem);\n\n this.add('route:special', _emberRouting.Route.extend({\n setup: function () {\n throw 'Setup error';\n },\n\n actions: {\n error: function (reason) {\n assert.equal(reason, 'Setup error', 'SpecialRoute#error received the error thrown from setup');\n return true;\n }\n }\n }));\n\n this.handleURLRejectsWith(this, assert, 'specials/1', 'Setup error');\n\n (0, _runloop.run)(function () {\n return resolve(menuItem);\n });\n };\n\n _class.prototype[\"@test ApplicationRoute's default error handler can be overridden\"] = function (assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var menuItem = void 0,\n resolve = void 0;\n\n var MenuItem = _emberRuntime.Object.extend();\n\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n return new _rsvp.default.Promise(function (res) {\n return resolve = res;\n });\n }\n });\n this.add('model:menu_item', MenuItem);\n\n this.add('route:application', _emberRouting.Route.extend({\n actions: {\n error: function (reason) {\n assert.equal(reason, 'Setup error', 'error was correctly passed to custom ApplicationRoute handler');\n return true;\n }\n }\n }));\n\n this.add('route:special', _emberRouting.Route.extend({\n setup: function () {\n throw 'Setup error';\n }\n }));\n\n this.handleURLRejectsWith(this, assert, '/specials/1', 'Setup error');\n\n (0, _runloop.run)(function () {\n return resolve(menuItem);\n });\n };\n\n _class.prototype['@test Moving from one page to another triggers the correct callbacks'] = function (assert) {\n var _this27 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('special', { path: '/specials/:menu_item_id' });\n });\n\n var MenuItem = _emberRuntime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n return MenuItem.create({ id: id });\n }\n });\n this.add('model:menu_item', MenuItem);\n\n this.addTemplate('home', 'Home ');\n this.addTemplate('special', '{{model.id}}
');\n\n return this.visit('/').then(function () {\n _this27.assertText('Home', 'The app is now in the initial state');\n\n var promiseContext = MenuItem.create({ id: 1 });\n\n return _this27.visit('/specials/1', promiseContext);\n }).then(function () {\n assert.equal(_this27.currentURL, '/specials/1');\n _this27.assertText('1', 'The app is now transitioned');\n });\n };\n\n _class.prototype['@test Nested callbacks are not exited when moving to siblings'] = function (assert) {\n var _this28 = this;\n\n var rootSetup = 0;\n var rootRender = 0;\n var rootModel = 0;\n var rootSerialize = 0;\n var menuItem = void 0;\n var rootElement = void 0;\n\n var MenuItem = _emberRuntime.Object.extend();\n MenuItem.reopenClass({\n find: function (id) {\n menuItem = MenuItem.create({ id: id });\n return menuItem;\n }\n });\n\n this.router.map(function () {\n this.route('root', { path: '/' }, function () {\n this.route('special', {\n path: '/specials/:menu_item_id',\n resetNamespace: true\n });\n });\n });\n\n this.add('route:root', _emberRouting.Route.extend({\n model: function () {\n rootModel++;\n return this._super.apply(this, arguments);\n },\n setupController: function () {\n rootSetup++;\n },\n renderTemplate: function () {\n rootRender++;\n },\n serialize: function () {\n rootSerialize++;\n return this._super.apply(this, arguments);\n }\n }));\n\n this.add('route:loading', _emberRouting.Route.extend({}));\n this.add('route:home', _emberRouting.Route.extend({}));\n this.add('route:special', _emberRouting.Route.extend({\n model: function (_ref) {\n var menu_item_id = _ref.menu_item_id;\n\n return MenuItem.find(menu_item_id);\n },\n setupController: function (controller, model) {\n (0, _emberMetal.set)(controller, 'model', model);\n }\n }));\n\n this.addTemplate('root.index', 'Home ');\n this.addTemplate('special', '{{model.id}}
');\n this.addTemplate('loading', 'LOADING!
');\n\n return this.visit('/').then(function () {\n rootElement = document.getElementById('qunit-fixture');\n\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('h3')), 'Home', 'The app is now in the initial state');\n assert.equal(rootSetup, 1, 'The root setup was triggered');\n assert.equal(rootRender, 1, 'The root render was triggered');\n assert.equal(rootSerialize, 0, 'The root serialize was not called');\n assert.equal(rootModel, 1, 'The root model was called');\n\n var router = _this28.applicationInstance.lookup('router:main');\n var menuItem = MenuItem.create({ id: 1 });\n\n return router.transitionTo('special', menuItem).then(function () {\n assert.equal(rootSetup, 1, 'The root setup was not triggered again');\n assert.equal(rootRender, 1, 'The root render was not triggered again');\n assert.equal(rootSerialize, 0, 'The root serialize was not called');\n\n // TODO: Should this be changed?\n assert.equal(rootModel, 1, 'The root model was called again');\n\n assert.deepEqual(router.location.path, '/specials/1');\n assert.equal(router.currentPath, 'root.special');\n });\n });\n };\n\n _class.prototype['@test Events are triggered on the controller if a matching action name is implemented'] = function (assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var model = { name: 'Tom Dale' };\n var stateIsNotCalled = true;\n\n this.add('route:home', _emberRouting.Route.extend({\n model: function () {\n return model;\n },\n\n actions: {\n showStuff: function () {\n stateIsNotCalled = false;\n }\n }\n }));\n\n this.addTemplate('home', '{{name}} ');\n this.add('controller:home', _controller.default.extend({\n actions: {\n showStuff: function (context) {\n assert.ok(stateIsNotCalled, 'an event on the state is not triggered');\n assert.deepEqual(context, { name: 'Tom Dale' }, 'an event with context is passed');\n done();\n }\n }\n }));\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test Events are triggered on the current state when defined in `actions` object'] = function (assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var model = { name: 'Tom Dale' };\n var HomeRoute = _emberRouting.Route.extend({\n model: function () {\n return model;\n },\n\n actions: {\n showStuff: function (obj) {\n assert.ok(this instanceof HomeRoute, 'the handler is an App.HomeRoute');\n assert.deepEqual((0, _polyfills.assign)({}, obj), { name: 'Tom Dale' }, 'the context is correct');\n done();\n }\n }\n });\n\n this.add('route:home', HomeRoute);\n this.addTemplate('home', '{{model.name}} ');\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test Events defined in `actions` object are triggered on the current state when routes are nested'] = function (assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('root', { path: '/' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n var model = { name: 'Tom Dale' };\n\n var RootRoute = _emberRouting.Route.extend({\n actions: {\n showStuff: function (obj) {\n assert.ok(this instanceof RootRoute, 'the handler is an App.HomeRoute');\n assert.deepEqual((0, _polyfills.assign)({}, obj), { name: 'Tom Dale' }, 'the context is correct');\n done();\n }\n }\n });\n this.add('route:root', RootRoute);\n this.add('route:root.index', _emberRouting.Route.extend({\n model: function () {\n return model;\n }\n }));\n\n this.addTemplate('root.index', '{{model.name}} ');\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test Events can be handled by inherited event handlers'] = function (assert) {\n assert.expect(4);\n\n var SuperRoute = _emberRouting.Route.extend({\n actions: {\n foo: function () {\n assert.ok(true, 'foo');\n },\n bar: function (msg) {\n assert.equal(msg, 'HELLO', 'bar hander in super route');\n }\n }\n });\n\n var RouteMixin = _emberMetal.Mixin.create({\n actions: {\n bar: function (msg) {\n assert.equal(msg, 'HELLO', 'bar handler in mixin');\n this._super(msg);\n }\n }\n });\n\n this.add('route:home', SuperRoute.extend(RouteMixin, {\n actions: {\n baz: function () {\n assert.ok(true, 'baz', 'baz hander in route');\n }\n }\n }));\n this.addTemplate('home', '\\n Do foo \\n Do bar with arg \\n Do bar \\n ');\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n rootElement.querySelector('.do-foo').click();\n rootElement.querySelector('.do-bar-with-arg').click();\n rootElement.querySelector('.do-baz').click();\n });\n };\n\n _class.prototype['@test Actions are not triggered on the controller if a matching action name is implemented as a method'] = function (assert) {\n var done = assert.async();\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var model = { name: 'Tom Dale' };\n var stateIsNotCalled = true;\n\n this.add('route:home', _emberRouting.Route.extend({\n model: function () {\n return model;\n },\n\n actions: {\n showStuff: function (context) {\n assert.ok(stateIsNotCalled, 'an event on the state is not triggered');\n assert.deepEqual(context, { name: 'Tom Dale' }, 'an event with context is passed');\n done();\n }\n }\n }));\n\n this.addTemplate('home', '{{name}} ');\n\n this.add('controller:home', _controller.default.extend({\n showStuff: function () {\n stateIsNotCalled = false;\n assert.ok(stateIsNotCalled, 'an event on the state is not triggered');\n }\n }));\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test actions can be triggered with multiple arguments'] = function (assert) {\n var done = assert.async();\n this.router.map(function () {\n this.route('root', { path: '/' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n var RootRoute = _emberRouting.Route.extend({\n actions: {\n showStuff: function (obj1, obj2) {\n assert.ok(this instanceof RootRoute, 'the handler is an App.HomeRoute');\n assert.deepEqual((0, _polyfills.assign)({}, obj1), { name: 'Tilde' }, 'the first context is correct');\n assert.deepEqual((0, _polyfills.assign)({}, obj2), { name: 'Tom Dale' }, 'the second context is correct');\n done();\n }\n }\n });\n\n this.add('route:root', RootRoute);\n\n this.add('controller:root.index', _controller.default.extend({\n model1: { name: 'Tilde' },\n model2: { name: 'Tom Dale' }\n }));\n\n this.addTemplate('root.index', '{{model1.name}} ');\n\n this.visit('/').then(function () {\n document.getElementById('qunit-fixture').querySelector('a').click();\n });\n };\n\n _class.prototype['@test transitioning multiple times in a single run loop only sets the URL once'] = function (assert) {\n var _this29 = this;\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo');\n this.route('bar');\n });\n\n return this.visit('/').then(function () {\n var urlSetCount = 0;\n var router = _this29.applicationInstance.lookup('router:main');\n\n router.get('location').setURL = function (path) {\n urlSetCount++;\n (0, _emberMetal.set)(this, 'path', path);\n };\n\n assert.equal(urlSetCount, 0);\n\n (0, _runloop.run)(function () {\n router.transitionTo('foo');\n router.transitionTo('bar');\n });\n\n assert.equal(urlSetCount, 1);\n assert.equal(router.get('location').getURL(), '/bar');\n });\n };\n\n _class.prototype['@test navigating away triggers a url property change'] = function (assert) {\n var _this30 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo', { path: '/foo' });\n this.route('bar', { path: '/bar' });\n });\n\n return this.visit('/').then(function () {\n var router = _this30.applicationInstance.lookup('router:main');\n\n (0, _emberMetal.addObserver)(router, 'url', function () {\n assert.ok(true, 'url change event was fired');\n });\n ['foo', 'bar', '/foo'].forEach(function (destination) {\n return (0, _runloop.run)(router, 'transitionTo', destination);\n });\n });\n };\n\n _class.prototype['@test using replaceWith calls location.replaceURL if available'] = function (assert) {\n var _this31 = this;\n\n var setCount = 0;\n var replaceCount = 0;\n this.router.reopen({\n location: _emberRouting.NoneLocation.create({\n setURL: function (path) {\n setCount++;\n (0, _emberMetal.set)(this, 'path', path);\n },\n replaceURL: function (path) {\n replaceCount++;\n (0, _emberMetal.set)(this, 'path', path);\n }\n })\n });\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo');\n });\n\n return this.visit('/').then(function () {\n var router = _this31.applicationInstance.lookup('router:main');\n assert.equal(setCount, 1);\n assert.equal(replaceCount, 0);\n\n (0, _runloop.run)(function () {\n return router.replaceWith('foo');\n });\n\n assert.equal(setCount, 1, 'should not call setURL');\n assert.equal(replaceCount, 1, 'should call replaceURL once');\n assert.equal(router.get('location').getURL(), '/foo');\n });\n };\n\n _class.prototype['@test using replaceWith calls setURL if location.replaceURL is not defined'] = function (assert) {\n var _this32 = this;\n\n var setCount = 0;\n\n this.router.reopen({\n location: _emberRouting.NoneLocation.create({\n setURL: function (path) {\n setCount++;\n (0, _emberMetal.set)(this, 'path', path);\n }\n })\n });\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('foo');\n });\n\n return this.visit('/').then(function () {\n var router = _this32.applicationInstance.lookup('router:main');\n\n assert.equal(setCount, 1);\n (0, _runloop.run)(function () {\n return router.replaceWith('foo');\n });\n assert.equal(setCount, 2, 'should call setURL once');\n assert.equal(router.get('location').getURL(), '/foo');\n });\n };\n\n _class.prototype['@test Route inherits model from parent route'] = function (assert) {\n var _this33 = this;\n\n assert.expect(9);\n\n this.router.map(function () {\n this.route('the-post', { path: '/posts/:post_id' }, function () {\n this.route('comments');\n\n this.route('shares', { path: '/shares/:share_id', resetNamespace: true }, function () {\n this.route('share');\n });\n });\n });\n\n var posts = {\n 1: {},\n 2: {},\n 3: {}\n };\n var shares = {\n 1: {},\n 2: {},\n 3: {}\n };\n\n this.add('route:the-post', _emberRouting.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n this.add('route:the-post.comments', _emberRouting.Route.extend({\n afterModel: function (post /*, transition */) {\n var parent_model = this.modelFor('the-post');\n\n assert.equal(post, parent_model);\n }\n }));\n\n this.add('route:shares', _emberRouting.Route.extend({\n model: function (params) {\n return shares[params.share_id];\n }\n }));\n\n this.add('route:shares.share', _emberRouting.Route.extend({\n afterModel: function (share /*, transition */) {\n var parent_model = this.modelFor('shares');\n\n assert.equal(share, parent_model);\n }\n }));\n\n return this.visit('/posts/1/comments').then(function () {\n assert.ok(true, 'url: /posts/1/comments was handled');\n return _this33.visit('/posts/1/shares/1');\n }).then(function () {\n assert.ok(true, 'url: /posts/1/shares/1 was handled');\n return _this33.visit('/posts/2/comments');\n }).then(function () {\n assert.ok(true, 'url: /posts/2/comments was handled');\n return _this33.visit('/posts/2/shares/2');\n }).then(function () {\n assert.ok(true, 'url: /posts/2/shares/2 was handled');\n return _this33.visit('/posts/3/comments');\n }).then(function () {\n assert.ok(true, 'url: /posts/3/shares was handled');\n return _this33.visit('/posts/3/shares/3');\n }).then(function () {\n assert.ok(true, 'url: /posts/3/shares/3 was handled');\n });\n };\n\n _class.prototype['@test Routes with { resetNamespace: true } inherits model from parent route'] = function (assert) {\n var _this34 = this;\n\n assert.expect(6);\n\n this.router.map(function () {\n this.route('the-post', { path: '/posts/:post_id' }, function () {\n this.route('comments', { resetNamespace: true }, function () {});\n });\n });\n\n var posts = {\n 1: {},\n 2: {},\n 3: {}\n };\n\n this.add('route:the-post', _emberRouting.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n this.add('route:comments', _emberRouting.Route.extend({\n afterModel: function (post /*, transition */) {\n var parent_model = this.modelFor('the-post');\n\n assert.equal(post, parent_model);\n }\n }));\n\n return this.visit('/posts/1/comments').then(function () {\n assert.ok(true, '/posts/1/comments');\n return _this34.visit('/posts/2/comments');\n }).then(function () {\n assert.ok(true, '/posts/2/comments');\n return _this34.visit('/posts/3/comments');\n }).then(function () {\n assert.ok(true, '/posts/3/comments');\n });\n };\n\n _class.prototype['@test It is possible to get the model from a parent route'] = function (assert) {\n var _this35 = this;\n\n assert.expect(6);\n\n this.router.map(function () {\n this.route('the-post', { path: '/posts/:post_id' }, function () {\n this.route('comments', { resetNamespace: true });\n });\n });\n\n var post1 = {};\n var post2 = {};\n var post3 = {};\n var currentPost = void 0;\n\n var posts = {\n 1: post1,\n 2: post2,\n 3: post3\n };\n\n this.add('route:the-post', _emberRouting.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n this.add('route:comments', _emberRouting.Route.extend({\n model: function () {\n assert.equal(this.modelFor('the-post'), currentPost);\n }\n }));\n\n currentPost = post1;\n return this.visit('/posts/1/comments').then(function () {\n assert.ok(true, '/posts/1/comments has been handled');\n currentPost = post2;\n return _this35.visit('/posts/2/comments');\n }).then(function () {\n assert.ok(true, '/posts/2/comments has been handled');\n currentPost = post3;\n return _this35.visit('/posts/3/comments');\n }).then(function () {\n assert.ok(true, '/posts/3/comments has been handled');\n });\n };\n\n _class.prototype['@test A redirection hook is provided'] = function (assert) {\n var _this36 = this;\n\n this.router.map(function () {\n this.route('choose', { path: '/' });\n this.route('home');\n });\n\n var chooseFollowed = 0;\n\n\n this.add('route:choose', _emberRouting.Route.extend({\n redirect: function () {\n this.transitionTo('home');\n },\n setupController: function () {\n chooseFollowed++;\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(chooseFollowed, 0, \"The choose route wasn't entered since a transition occurred\");\n assert.equal(rootElement.querySelectorAll('h3.hours').length, 1, 'The home template was rendered');\n assert.equal(_this36.applicationInstance.lookup('controller:application').get('currentPath'), 'home');\n });\n };\n\n _class.prototype['@test Redirecting from the middle of a route aborts the remainder of the routes'] = function (assert) {\n var _this37 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('home');\n this.route('foo', function () {\n this.route('bar', { resetNamespace: true }, function () {\n this.route('baz');\n });\n });\n });\n\n this.add('route:bar', _emberRouting.Route.extend({\n redirect: function () {\n this.transitionTo('home');\n },\n setupController: function () {\n assert.ok(false, 'Should transition before setupController');\n }\n }));\n\n this.add('route:bar-baz', _emberRouting.Route.extend({\n enter: function () {\n assert.ok(false, 'Should abort transition getting to next route');\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this37.applicationInstance.lookup('router:main');\n _this37.handleURLAborts(assert, '/foo/bar/baz');\n assert.equal(_this37.applicationInstance.lookup('controller:application').get('currentPath'), 'home');\n assert.equal(router.get('location').getURL(), '/home');\n });\n };\n\n _class.prototype['@test Redirecting to the current target in the middle of a route does not abort initial routing'] = function (assert) {\n var _this38 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('home');\n this.route('foo', function () {\n this.route('bar', { resetNamespace: true }, function () {\n this.route('baz');\n });\n });\n });\n\n var successCount = 0;\n\n this.add('route:bar', _emberRouting.Route.extend({\n redirect: function () {\n return this.transitionTo('bar.baz').then(function () {\n successCount++;\n });\n },\n setupController: function () {\n assert.ok(true, \"Should still invoke bar's setupController\");\n }\n }));\n\n this.add('route:bar.baz', _emberRouting.Route.extend({\n setupController: function () {\n assert.ok(true, \"Should still invoke bar.baz's setupController\");\n }\n }));\n\n return this.visit('/foo/bar/baz').then(function () {\n assert.ok(true, '/foo/bar/baz has been handled');\n assert.equal(_this38.applicationInstance.lookup('controller:application').get('currentPath'), 'foo.bar.baz');\n assert.equal(successCount, 1, 'transitionTo success handler was called once');\n });\n };\n\n _class.prototype['@test Redirecting to the current target with a different context aborts the remainder of the routes'] = function (assert) {\n var _this39 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('home');\n this.route('foo', function () {\n this.route('bar', { path: 'bar/:id', resetNamespace: true }, function () {\n this.route('baz');\n });\n });\n });\n\n var model = { id: 2 };\n\n var count = 0;\n\n this.add('route:bar', _emberRouting.Route.extend({\n afterModel: function () {\n if (count++ > 10) {\n assert.ok(false, 'infinite loop');\n } else {\n this.transitionTo('bar.baz', model);\n }\n }\n }));\n\n this.add('route:bar.baz', _emberRouting.Route.extend({\n setupController: function () {\n assert.ok(true, 'Should still invoke setupController');\n }\n }));\n\n return this.visit('/').then(function () {\n _this39.handleURLAborts(assert, '/foo/bar/1/baz');\n assert.equal(_this39.applicationInstance.lookup('controller:application').get('currentPath'), 'foo.bar.baz');\n assert.equal(_this39.applicationInstance.lookup('router:main').get('location').getURL(), '/foo/bar/2/baz');\n });\n };\n\n _class.prototype['@test Transitioning from a parent event does not prevent currentPath from being set'] = function (assert) {\n var _this40 = this;\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar', { resetNamespace: true }, function () {\n this.route('baz');\n });\n this.route('qux');\n });\n });\n\n this.add('route:foo', _emberRouting.Route.extend({\n actions: {\n goToQux: function () {\n this.transitionTo('foo.qux');\n }\n }\n }));\n\n return this.visit('/foo/bar/baz').then(function () {\n assert.ok(true, '/foo/bar/baz has been handled');\n var applicationController = _this40.applicationInstance.lookup('controller:application');\n var router = _this40.applicationInstance.lookup('router:main');\n assert.equal(applicationController.get('currentPath'), 'foo.bar.baz');\n (0, _runloop.run)(function () {\n return router.send('goToQux');\n });\n assert.equal(applicationController.get('currentPath'), 'foo.qux');\n assert.equal(router.get('location').getURL(), '/foo/qux');\n });\n };\n\n _class.prototype['@test Generated names can be customized when providing routes with dot notation'] = function (assert) {\n assert.expect(4);\n\n this.addTemplate('index', 'Index
');\n this.addTemplate('application', \"Home {{outlet}}
\");\n this.addTemplate('foo', \"{{outlet}}
\");\n this.addTemplate('bar', \"{{outlet}}
\");\n this.addTemplate('bar.baz', '{{name}}Bottom!
');\n\n this.router.map(function () {\n this.route('foo', { path: '/top' }, function () {\n this.route('bar', { path: '/middle', resetNamespace: true }, function () {\n this.route('baz', { path: '/bottom' });\n });\n });\n });\n\n this.add('route:foo', _emberRouting.Route.extend({\n renderTemplate: function () {\n assert.ok(true, 'FooBarRoute was called');\n return this._super.apply(this, arguments);\n }\n }));\n\n this.add('route:bar.baz', _emberRouting.Route.extend({\n renderTemplate: function () {\n assert.ok(true, 'BarBazRoute was called');\n return this._super.apply(this, arguments);\n }\n }));\n\n this.add('controller:bar', _controller.default.extend({\n name: 'Bar'\n }));\n\n this.add('controller:bar.baz', _controller.default.extend({\n name: 'BarBaz'\n }));\n\n return this.visit('/top/middle/bottom').then(function () {\n assert.ok(true, '/top/middle/bottom has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.main .middle .bottom p')), 'BarBazBottom!', 'The templates were rendered into their appropriate parents');\n });\n };\n\n _class.prototype[\"@test Child routes render into their parent route's template by default\"] = function (assert) {\n this.addTemplate('index', 'Index
');\n this.addTemplate('application', \"Home {{outlet}}
\");\n this.addTemplate('top', \"{{outlet}}
\");\n this.addTemplate('middle', \"{{outlet}}
\");\n this.addTemplate('middle.bottom', 'Bottom!
');\n\n this.router.map(function () {\n this.route('top', function () {\n this.route('middle', { resetNamespace: true }, function () {\n this.route('bottom');\n });\n });\n });\n\n return this.visit('/top/middle/bottom').then(function () {\n assert.ok(true, '/top/middle/bottom has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.main .middle .bottom p')), 'Bottom!', 'The templates were rendered into their appropriate parents');\n });\n };\n\n _class.prototype['@test Child routes render into specified template'] = function (assert) {\n this.addTemplate('index', 'Index
');\n this.addTemplate('application', \"Home {{outlet}}
\");\n this.addTemplate('top', \"{{outlet}}
\");\n this.addTemplate('middle', \"{{outlet}}
\");\n this.addTemplate('middle.bottom', 'Bottom!
');\n\n this.router.map(function () {\n this.route('top', function () {\n this.route('middle', { resetNamespace: true }, function () {\n this.route('bottom');\n });\n });\n });\n\n this.add('route:middle.bottom', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('middle/bottom', { into: 'top' });\n }\n }));\n\n return this.visit('/top/middle/bottom').then(function () {\n assert.ok(true, '/top/middle/bottom has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.querySelectorAll('.main .middle .bottom p').length, 0, 'should not render into the middle template');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.main .middle > p')), 'Bottom!', 'The template was rendered into the top template');\n });\n };\n\n _class.prototype['@test Rendering into specified template with slash notation'] = function (assert) {\n this.addTemplate('person.profile', 'profile {{outlet}}');\n this.addTemplate('person.details', 'details!');\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('person/profile');\n this.render('person/details', { into: 'person/profile' });\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'profile details!', 'The templates were rendered');\n });\n };\n\n _class.prototype['@test Parent route context change'] = function (assert) {\n var _this41 = this;\n\n var editCount = 0;\n var editedPostIds = (0, _emberRuntime.A)();\n\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('post', '{{outlet}}');\n this.addTemplate('post/index', 'showing');\n this.addTemplate('post/edit', 'editing');\n\n this.router.map(function () {\n this.route('posts', function () {\n this.route('post', { path: '/:postId', resetNamespace: true }, function () {\n this.route('edit');\n });\n });\n });\n\n this.add('route:posts', _emberRouting.Route.extend({\n actions: {\n showPost: function (context) {\n this.transitionTo('post', context);\n }\n }\n }));\n\n this.add('route:post', _emberRouting.Route.extend({\n model: function (params) {\n return { id: params.postId };\n },\n serialize: function (model) {\n return { postId: model.id };\n },\n\n actions: {\n editPost: function () {\n this.transitionTo('post.edit');\n }\n }\n }));\n\n this.add('route:post.edit', _emberRouting.Route.extend({\n model: function () {\n var postId = this.modelFor('post').id;\n editedPostIds.push(postId);\n return null;\n },\n setup: function () {\n this._super.apply(this, arguments);\n editCount++;\n }\n }));\n\n return this.visit('/posts/1').then(function () {\n assert.ok(true, '/posts/1 has been handled');\n var router = _this41.applicationInstance.lookup('router:main');\n (0, _runloop.run)(function () {\n return router.send('editPost');\n });\n (0, _runloop.run)(function () {\n return router.send('showPost', { id: '2' });\n });\n (0, _runloop.run)(function () {\n return router.send('editPost');\n });\n assert.equal(editCount, 2, 'set up the edit route twice without failure');\n assert.deepEqual(editedPostIds, ['1', '2'], 'modelFor posts.post returns the right context');\n });\n };\n\n _class.prototype['@test Router accounts for rootURL on page load when using history location'] = function (assert) {\n var rootURL = window.location.pathname + '/app';\n var postsTemplateRendered = false;\n var setHistory = void 0;\n\n setHistory = function (obj, path) {\n obj.set('history', { state: { path: path } });\n };\n\n var location = _emberRouting.HistoryLocation.create({\n initState: function () {\n var path = rootURL + '/posts';\n\n setHistory(this, path);\n this.set('location', {\n pathname: path,\n href: 'http://localhost/' + path\n });\n },\n replaceState: function (path) {\n setHistory(this, path);\n },\n pushState: function (path) {\n setHistory(this, path);\n }\n });\n\n this.router.reopen({\n // location: 'historyTest',\n location: location,\n rootURL: rootURL\n });\n\n this.router.map(function () {\n this.route('posts', { path: '/posts' });\n });\n\n this.add('route:posts', _emberRouting.Route.extend({\n model: function () {},\n renderTemplate: function () {\n postsTemplateRendered = true;\n }\n }));\n\n return this.visit('/').then(function () {\n assert.ok(postsTemplateRendered, 'Posts route successfully stripped from rootURL');\n\n (0, _internalTestHelpers.runDestroy)(location);\n location = null;\n });\n };\n\n _class.prototype['@test The rootURL is passed properly to the location implementation'] = function (assert) {\n assert.expect(1);\n var rootURL = '/blahzorz';\n this.add('location:history-test', _emberRouting.HistoryLocation.extend({\n rootURL: 'this is not the URL you are looking for',\n history: {\n pushState: function () {}\n },\n initState: function () {\n assert.equal(this.get('rootURL'), rootURL);\n }\n }));\n\n this.router.reopen({\n location: 'history-test',\n rootURL: rootURL,\n _doURLTransition: function () {\n return _rsvp.default.resolve('');\n }\n });\n\n return this.visit('/');\n };\n\n _class.prototype['@test Only use route rendered into main outlet for default into property on child'] = function (assert) {\n this.addTemplate('application', \"{{outlet 'menu'}}{{outlet}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('posts.index', 'postsIndex
');\n this.addTemplate('posts.menu', '');\n\n this.router.map(function () {\n this.route('posts', function () {});\n });\n\n this.add('route:posts', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('posts/menu', {\n into: 'application',\n outlet: 'menu'\n });\n }\n }));\n\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-menu')), 'postsMenu', 'The posts/menu template was rendered');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n });\n };\n\n _class.prototype['@test Generating a URL should not affect currentModel'] = function (assert) {\n var _this42 = this;\n\n this.router.map(function () {\n this.route('post', { path: '/posts/:post_id' });\n });\n\n var posts = {\n 1: { id: 1 },\n 2: { id: 2 }\n };\n\n this.add('route:post', _emberRouting.Route.extend({\n model: function (params) {\n return posts[params.post_id];\n }\n }));\n\n return this.visit('/posts/1').then(function () {\n assert.ok(true, '/posts/1 has been handled');\n\n var route = _this42.applicationInstance.lookup('route:post');\n assert.equal(route.modelFor('post'), posts[1]);\n\n var url = _this42.applicationInstance.lookup('router:main').generate('post', posts[2]);\n assert.equal(url, '/posts/2');\n assert.equal(route.modelFor('post'), posts[1]);\n });\n };\n\n _class.prototype[\"@test Nested index route is not overridden by parent's implicit index route\"] = function (assert) {\n var _this43 = this;\n\n this.router.map(function () {\n this.route('posts', function () {\n this.route('index', { path: ':category' });\n });\n });\n\n return this.visit('/').then(function () {\n var router = _this43.applicationInstance.lookup('router:main');\n return router.transitionTo('posts', { category: 'emberjs' });\n }).then(function () {\n var router = _this43.applicationInstance.lookup('router:main');\n assert.deepEqual(router.location.path, '/posts/emberjs');\n });\n };\n\n _class.prototype['@test Application template does not duplicate when re-rendered'] = function (assert) {\n this.addTemplate('application', 'I render once {{outlet}}');\n\n this.router.map(function () {\n this.route('posts');\n });\n\n this.add('route:application', _emberRouting.Route.extend({\n model: function () {\n return (0, _emberRuntime.A)();\n }\n }));\n\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('h3.render-once')), 'I render once');\n });\n };\n\n _class.prototype['@test Child routes should render inside the application template if the application template causes a redirect'] = function (assert) {\n this.addTemplate('application', 'App {{outlet}}');\n this.addTemplate('posts', 'posts');\n\n this.router.map(function () {\n this.route('posts');\n this.route('photos');\n });\n\n this.add('route:application', _emberRouting.Route.extend({\n afterModel: function () {\n this.transitionTo('posts');\n }\n }));\n\n return this.visit('/posts').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'App posts');\n });\n };\n\n _class.prototype[\"@test The template is not re-rendered when the route's context changes\"] = function (assert) {\n var _this44 = this;\n\n this.router.map(function () {\n this.route('page', { path: '/page/:name' });\n });\n\n this.add('route:page', _emberRouting.Route.extend({\n model: function (params) {\n return _emberRuntime.Object.create({ name: params.name });\n }\n }));\n\n var insertionCount = 0;\n this.add('component:foo-bar', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n insertionCount += 1;\n }\n }));\n\n this.addTemplate('page', '{{model.name}}{{foo-bar}}
');\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/page/first').then(function () {\n assert.ok(true, '/page/first has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'first');\n assert.equal(insertionCount, 1);\n return _this44.visit('/page/second');\n }).then(function () {\n assert.ok(true, '/page/second has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'second');\n assert.equal(insertionCount, 1, 'view should have inserted only once');\n var router = _this44.applicationInstance.lookup('router:main');\n return (0, _runloop.run)(function () {\n return router.transitionTo('page', _emberRuntime.Object.create({ name: 'third' }));\n });\n }).then(function () {\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'third');\n assert.equal(insertionCount, 1, 'view should still have inserted only once');\n });\n };\n\n _class.prototype['@test The template is not re-rendered when two routes present the exact same template & controller'] = function (assert) {\n var _this45 = this;\n\n this.router.map(function () {\n this.route('first');\n this.route('second');\n this.route('third');\n this.route('fourth');\n });\n\n // Note add a component to test insertion\n\n var insertionCount = 0;\n this.add('component:x-input', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n insertionCount += 1;\n }\n }));\n\n var SharedRoute = _emberRouting.Route.extend({\n setupController: function () {\n this.controllerFor('shared').set('message', 'This is the ' + this.routeName + ' message');\n },\n renderTemplate: function () {\n this.render('shared', { controller: 'shared' });\n }\n });\n\n this.add('route:shared', SharedRoute);\n this.add('route:first', SharedRoute.extend());\n this.add('route:second', SharedRoute.extend());\n this.add('route:third', SharedRoute.extend());\n this.add('route:fourth', SharedRoute.extend());\n\n this.add('controller:shared', _controller.default.extend());\n\n this.addTemplate('shared', '{{message}}{{x-input}}
');\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/first').then(function () {\n assert.ok(true, '/first has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the first message');\n assert.equal(insertionCount, 1, 'expected one assertion');\n return _this45.visit('/second');\n }).then(function () {\n assert.ok(true, '/second has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the second message');\n assert.equal(insertionCount, 1, 'expected one assertion');\n return (0, _runloop.run)(function () {\n _this45.applicationInstance.lookup('router:main').transitionTo('third').then(function () {\n assert.ok(true, 'expected transition');\n }, function (reason) {\n assert.ok(false, 'unexpected transition failure: ', QUnit.jsDump.parse(reason));\n });\n });\n }).then(function () {\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the third message');\n assert.equal(insertionCount, 1, 'expected one assertion');\n return _this45.visit('fourth');\n }).then(function () {\n assert.ok(true, '/fourth has been handled');\n assert.equal(insertionCount, 1, 'expected one assertion');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'This is the fourth message');\n });\n };\n\n _class.prototype['@test ApplicationRoute with model does not proxy the currentPath'] = function (assert) {\n var model = {};\n var currentPath = void 0;\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n\n this.add('route:application', _emberRouting.Route.extend({\n model: function () {\n return model;\n }\n }));\n\n this.add('controller:application', _controller.default.extend({\n currentPathDidChange: (0, _emberMetal.observer)('currentPath', function () {\n currentPath = this.currentPath;\n })\n }));\n\n return this.visit('/').then(function () {\n assert.equal(currentPath, 'index', 'currentPath is index');\n assert.equal('currentPath' in model, false, 'should have defined currentPath on controller');\n });\n };\n\n _class.prototype['@test Promises encountered on app load put app into loading state until resolved'] = function (assert) {\n var _this46 = this;\n\n assert.expect(2);\n\n var deferred = _rsvp.default.defer();\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n this.addTemplate('index', 'INDEX
');\n this.addTemplate('loading', 'LOADING
');\n\n (0, _runloop.run)(function () {\n return _this46.visit('/');\n });\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'LOADING', 'The loading state is displaying.');\n (0, _runloop.run)(deferred.resolve);\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p')), 'INDEX', 'The index route is display.');\n };\n\n _class.prototype['@test Route should tear down multiple outlets'] = function (assert) {\n var _this47 = this;\n\n this.addTemplate('application', \"{{outlet 'menu'}}{{outlet}}{{outlet 'footer'}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('users', 'users');\n this.addTemplate('posts.index', 'postsIndex
');\n this.addTemplate('posts.menu', '');\n this.addTemplate('posts.footer', '');\n\n this.router.map(function () {\n this.route('posts', function () {});\n this.route('users', function () {});\n });\n\n this.add('route:posts', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('posts/menu', {\n into: 'application',\n outlet: 'menu'\n });\n\n this.render();\n\n this.render('posts/footer', {\n into: 'application',\n outlet: 'footer'\n });\n }\n }));\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-menu')), 'postsMenu', 'The posts/menu template was rendered');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('p.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-footer')), 'postsFooter', 'The posts/footer template was rendered');\n\n return _this47.visit('/users');\n }).then(function () {\n assert.ok(true, '/users has been handled');\n assert.equal(rootElement.querySelector('div.posts-menu'), null, 'The posts/menu template was removed');\n assert.equal(rootElement.querySelector('p.posts-index'), null, 'The posts/index template was removed');\n assert.equal(rootElement.querySelector('div.posts-footer'), null, 'The posts/footer template was removed');\n });\n };\n\n _class.prototype['@test Route will assert if you try to explicitly render {into: ...} a missing template'] = function () {\n var _this48 = this;\n\n expectDeprecation(/Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated./);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ into: 'nonexistent' });\n }\n }));\n\n expectAssertion(function () {\n return _this48.visit('/');\n }, \"You attempted to render into 'nonexistent' but it was not found\");\n };\n\n _class.prototype['@test Route supports clearing outlet explicitly'] = function (assert) {\n var _this49 = this;\n\n this.addTemplate('application', \"{{outlet}}{{outlet 'modal'}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('users', 'users');\n this.addTemplate('posts.index', 'postsIndex {{outlet}}
');\n this.addTemplate('posts.modal', 'postsModal
');\n this.addTemplate('posts.extra', '');\n\n this.router.map(function () {\n this.route('posts', function () {});\n this.route('users', function () {});\n });\n\n this.add('route:posts', _emberRouting.Route.extend({\n actions: {\n showModal: function () {\n this.render('posts/modal', {\n into: 'application',\n outlet: 'modal'\n });\n },\n hideModal: function () {\n this.disconnectOutlet({\n outlet: 'modal',\n parentView: 'application'\n });\n }\n }\n }));\n\n this.add('route:posts.index', _emberRouting.Route.extend({\n actions: {\n showExtra: function () {\n this.render('posts/extra', {\n into: 'posts/index'\n });\n },\n hideExtra: function () {\n this.disconnectOutlet({ parentView: 'posts/index' });\n }\n }\n }));\n\n var rootElement = document.getElementById('qunit-fixture');\n\n return this.visit('/posts').then(function () {\n var router = _this49.applicationInstance.lookup('router:main');\n\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-modal')), 'postsModal', 'The posts/modal template was rendered');\n (0, _runloop.run)(function () {\n return router.send('showExtra');\n });\n\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-extra')), 'postsExtra', 'The posts/extra template was rendered');\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n (0, _runloop.run)(function () {\n return router.send('hideExtra');\n });\n\n assert.equal(rootElement.querySelector('div.posts-extra'), null, 'The posts/extra template was removed');\n (0, _runloop.run)(function () {\n router.send('showModal');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-modal')), 'postsModal', 'The posts/modal template was rendered');\n (0, _runloop.run)(function () {\n router.send('showExtra');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-extra')), 'postsExtra', 'The posts/extra template was rendered');\n return _this49.visit('/users');\n }).then(function () {\n assert.equal(rootElement.querySelector('div.posts-index'), null, 'The posts/index template was removed');\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n assert.equal(rootElement.querySelector('div.posts-extra'), null, 'The posts/extra template was removed');\n });\n };\n\n _class.prototype['@test Route supports clearing outlet using string parameter'] = function (assert) {\n var _this50 = this;\n\n this.addTemplate('application', \"{{outlet}}{{outlet 'modal'}}\");\n this.addTemplate('posts', '{{outlet}}');\n this.addTemplate('users', 'users');\n this.addTemplate('posts.index', 'postsIndex {{outlet}}
');\n this.addTemplate('posts.modal', 'postsModal
');\n\n this.router.map(function () {\n this.route('posts', function () {});\n this.route('users', function () {});\n });\n\n this.add('route:posts', _emberRouting.Route.extend({\n actions: {\n showModal: function () {\n this.render('posts/modal', {\n into: 'application',\n outlet: 'modal'\n });\n },\n hideModal: function () {\n this.disconnectOutlet('modal');\n }\n }\n }));\n\n var rootElement = document.getElementById('qunit-fixture');\n return this.visit('/posts').then(function () {\n var router = _this50.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-index')), 'postsIndex', 'The posts/index template was rendered');\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('div.posts-modal')), 'postsModal', 'The posts/modal template was rendered');\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n return _this50.visit('/users');\n }).then(function () {\n assert.equal(rootElement.querySelector('div.posts-index'), null, 'The posts/index template was removed');\n assert.equal(rootElement.querySelector('div.posts-modal'), null, 'The posts/modal template was removed');\n });\n };\n\n _class.prototype['@test Route silently fails when cleaning an outlet from an inactive view'] = function (assert) {\n var _this51 = this;\n\n assert.expect(1); // handleURL\n\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('posts', \"{{outlet 'modal'}}\");\n this.addTemplate('modal', 'A Yo.');\n\n this.router.map(function () {\n this.route('posts');\n });\n\n this.add('route:posts', _emberRouting.Route.extend({\n actions: {\n hideSelf: function () {\n this.disconnectOutlet({\n outlet: 'main',\n parentView: 'application'\n });\n },\n showModal: function () {\n this.render('modal', { into: 'posts', outlet: 'modal' });\n },\n hideModal: function () {\n this.disconnectOutlet({ outlet: 'modal', parentView: 'posts' });\n }\n }\n }));\n\n return this.visit('/posts').then(function () {\n assert.ok(true, '/posts has been handled');\n var router = _this51.applicationInstance.lookup('router:main');\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n (0, _runloop.run)(function () {\n return router.send('hideSelf');\n });\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n });\n };\n\n _class.prototype['@test Router `willTransition` hook passes in cancellable transition'] = function (assert) {\n var _this52 = this;\n\n // Should hit willTransition 3 times, once for the initial route, and then 2 more times\n // for the two handleURL calls below\n assert.expect(5);\n\n this.router.map(function () {\n this.route('nork');\n this.route('about');\n });\n\n this.router.reopen({\n willTransition: function (_, _2, transition) {\n assert.ok(true, 'willTransition was called');\n if (transition.intent.url !== '/') {\n transition.abort();\n }\n }\n });\n\n this.add('route:loading', _emberRouting.Route.extend({\n activate: function () {\n assert.ok(false, 'LoadingRoute was not entered');\n }\n }));\n\n this.add('route:nork', _emberRouting.Route.extend({\n activate: function () {\n assert.ok(false, 'NorkRoute was not entered');\n }\n }));\n\n this.add('route:about', _emberRouting.Route.extend({\n activate: function () {\n assert.ok(false, 'AboutRoute was not entered');\n }\n }));\n\n return this.visit('/').then(function () {\n _this52.handleURLAborts(assert, '/nork');\n _this52.handleURLAborts(assert, '/about');\n });\n };\n\n _class.prototype['@test Aborting/redirecting the transition in `willTransition` prevents LoadingRoute from being entered'] = function (assert) {\n var _this53 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('index');\n this.route('nork');\n this.route('about');\n });\n\n var redirect = false;\n\n this.add('route:index', _emberRouting.Route.extend({\n actions: {\n willTransition: function (transition) {\n assert.ok(true, 'willTransition was called');\n if (redirect) {\n // router.js won't refire `willTransition` for this redirect\n this.transitionTo('about');\n } else {\n transition.abort();\n }\n }\n }\n }));\n\n var deferred = null;\n\n this.add('route:loading', _emberRouting.Route.extend({\n activate: function () {\n assert.ok(deferred, 'LoadingRoute should be entered at this time');\n },\n deactivate: function () {\n assert.ok(true, 'LoadingRoute was exited');\n }\n }));\n\n this.add('route:nork', _emberRouting.Route.extend({\n activate: function () {\n assert.ok(true, 'NorkRoute was entered');\n }\n }));\n\n this.add('route:about', _emberRouting.Route.extend({\n activate: function () {\n assert.ok(true, 'AboutRoute was entered');\n },\n model: function () {\n if (deferred) {\n return deferred.promise;\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this53.applicationInstance.lookup('router:main');\n // Attempted transitions out of index should abort.\n (0, _runloop.run)(router, 'transitionTo', 'nork');\n (0, _runloop.run)(router, 'handleURL', '/nork');\n\n // Attempted transitions out of index should redirect to about\n redirect = true;\n (0, _runloop.run)(router, 'transitionTo', 'nork');\n (0, _runloop.run)(router, 'transitionTo', 'index');\n\n // Redirected transitions out of index to a route with a\n // promise model should pause the transition and\n // activate LoadingRoute\n deferred = _rsvp.default.defer();\n (0, _runloop.run)(router, 'transitionTo', 'nork');\n (0, _runloop.run)(deferred.resolve);\n });\n };\n\n _class.prototype['@test `didTransition` event fires on the router'] = function (assert) {\n var _this54 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('nork');\n });\n\n return this.visit('/').then(function () {\n var router = _this54.applicationInstance.lookup('router:main');\n router.one('didTransition', function () {\n assert.ok(true, 'didTransition fired on initial routing');\n });\n _this54.visit('/');\n }).then(function () {\n var router = _this54.applicationInstance.lookup('router:main');\n router.one('didTransition', function () {\n assert.ok(true, 'didTransition fired on the router');\n assert.equal(router.get('url'), '/nork', 'The url property is updated by the time didTransition fires');\n });\n\n return _this54.visit('/nork');\n });\n };\n\n _class.prototype['@test `didTransition` can be reopened'] = function (assert) {\n assert.expect(1);\n\n this.router.map(function () {\n this.route('nork');\n });\n\n this.router.reopen({\n didTransition: function () {\n this._super.apply(this, arguments);\n assert.ok(true, 'reopened didTransition was called');\n }\n });\n\n return this.visit('/');\n };\n\n _class.prototype['@test `activate` event fires on the route'] = function (assert) {\n assert.expect(2);\n\n var eventFired = 0;\n\n this.router.map(function () {\n this.route('nork');\n });\n\n this.add('route:nork', _emberRouting.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n\n this.on('activate', function () {\n assert.equal(++eventFired, 1, 'activate event is fired once');\n });\n },\n activate: function () {\n assert.ok(true, 'activate hook is called');\n }\n }));\n\n return this.visit('/nork');\n };\n\n _class.prototype['@test `deactivate` event fires on the route'] = function (assert) {\n var _this55 = this;\n\n assert.expect(2);\n\n var eventFired = 0;\n\n this.router.map(function () {\n this.route('nork');\n this.route('dork');\n });\n\n this.add('route:nork', _emberRouting.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n\n this.on('deactivate', function () {\n assert.equal(++eventFired, 1, 'deactivate event is fired once');\n });\n },\n deactivate: function () {\n assert.ok(true, 'deactivate hook is called');\n }\n }));\n\n return this.visit('/nork').then(function () {\n return _this55.visit('/dork');\n });\n };\n\n _class.prototype['@test Actions can be handled by inherited action handlers'] = function (assert) {\n assert.expect(4);\n\n var SuperRoute = _emberRouting.Route.extend({\n actions: {\n foo: function () {\n assert.ok(true, 'foo');\n },\n bar: function (msg) {\n assert.equal(msg, 'HELLO');\n }\n }\n });\n\n var RouteMixin = _emberMetal.Mixin.create({\n actions: {\n bar: function (msg) {\n assert.equal(msg, 'HELLO');\n this._super(msg);\n }\n }\n });\n\n this.add('route:home', SuperRoute.extend(RouteMixin, {\n actions: {\n baz: function () {\n assert.ok(true, 'baz');\n }\n }\n }));\n\n this.addTemplate('home', '\\n Do foo \\n Do bar with arg \\n Do bar \\n ');\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n rootElement.querySelector('.do-foo').click();\n rootElement.querySelector('.do-bar-with-arg').click();\n rootElement.querySelector('.do-baz').click();\n });\n };\n\n _class.prototype['@test transitionTo returns Transition when passed a route name'] = function (assert) {\n var _this56 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('bar');\n });\n\n return this.visit('/').then(function () {\n var router = _this56.applicationInstance.lookup('router:main');\n var transition = (0, _runloop.run)(function () {\n return router.transitionTo('bar');\n });\n assert.equal(transition instanceof _router.Transition, true);\n });\n };\n\n _class.prototype['@test transitionTo returns Transition when passed a url'] = function (assert) {\n var _this57 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('root', { path: '/' });\n this.route('bar', function () {\n this.route('baz');\n });\n });\n\n return this.visit('/').then(function () {\n var router = _this57.applicationInstance.lookup('router:main');\n var transition = (0, _runloop.run)(function () {\n return router.transitionTo('/bar/baz');\n });\n assert.equal(transition instanceof _router.Transition, true);\n });\n };\n\n _class.prototype['@test currentRouteName is a property installed on ApplicationController that can be used in transitionTo'] = function (assert) {\n var _this58 = this;\n\n assert.expect(24);\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n this.route('be', function () {\n this.route('excellent', { resetNamespace: true }, function () {\n this.route('to', { resetNamespace: true }, function () {\n this.route('each', { resetNamespace: true }, function () {\n this.route('other');\n });\n });\n });\n });\n });\n\n return this.visit('/').then(function () {\n var appController = _this58.applicationInstance.lookup('controller:application');\n var router = _this58.applicationInstance.lookup('router:main');\n\n function transitionAndCheck(path, expectedPath, expectedRouteName) {\n if (path) {\n (0, _runloop.run)(router, 'transitionTo', path);\n }\n assert.equal(appController.get('currentPath'), expectedPath);\n assert.equal(appController.get('currentRouteName'), expectedRouteName);\n }\n\n transitionAndCheck(null, 'index', 'index');\n transitionAndCheck('/be', 'be.index', 'be.index');\n transitionAndCheck('/be/excellent', 'be.excellent.index', 'excellent.index');\n transitionAndCheck('/be/excellent/to', 'be.excellent.to.index', 'to.index');\n transitionAndCheck('/be/excellent/to/each', 'be.excellent.to.each.index', 'each.index');\n transitionAndCheck('/be/excellent/to/each/other', 'be.excellent.to.each.other', 'each.other');\n\n transitionAndCheck('index', 'index', 'index');\n transitionAndCheck('be', 'be.index', 'be.index');\n transitionAndCheck('excellent', 'be.excellent.index', 'excellent.index');\n transitionAndCheck('to.index', 'be.excellent.to.index', 'to.index');\n transitionAndCheck('each', 'be.excellent.to.each.index', 'each.index');\n transitionAndCheck('each.other', 'be.excellent.to.each.other', 'each.other');\n });\n };\n\n _class.prototype['@test Route model hook finds the same model as a manual find'] = function (assert) {\n var post = void 0;\n var Post = _emberRuntime.Object.extend();\n this.add('model:post', Post);\n Post.reopenClass({\n find: function () {\n post = this;\n return {};\n }\n });\n\n this.router.map(function () {\n this.route('post', { path: '/post/:post_id' });\n });\n\n return this.visit('/post/1').then(function () {\n assert.equal(Post, post);\n });\n };\n\n _class.prototype['@test Routes can refresh themselves causing their model hooks to be re-run'] = function (assert) {\n var _this59 = this;\n\n this.router.map(function () {\n this.route('parent', { path: '/parent/:parent_id' }, function () {\n this.route('child');\n });\n });\n\n var appcount = 0;\n this.add('route:application', _emberRouting.Route.extend({\n model: function () {\n ++appcount;\n }\n }));\n\n var parentcount = 0;\n this.add('route:parent', _emberRouting.Route.extend({\n model: function (params) {\n assert.equal(params.parent_id, '123');\n ++parentcount;\n },\n\n actions: {\n refreshParent: function () {\n this.refresh();\n }\n }\n }));\n\n var childcount = 0;\n this.add('route:parent.child', _emberRouting.Route.extend({\n model: function () {\n ++childcount;\n }\n }));\n\n var router = void 0;\n return this.visit('/').then(function () {\n router = _this59.applicationInstance.lookup('router:main');\n assert.equal(appcount, 1);\n assert.equal(parentcount, 0);\n assert.equal(childcount, 0);\n return (0, _runloop.run)(router, 'transitionTo', 'parent.child', '123');\n }).then(function () {\n assert.equal(appcount, 1);\n assert.equal(parentcount, 1);\n assert.equal(childcount, 1);\n return (0, _runloop.run)(router, 'send', 'refreshParent');\n }).then(function () {\n assert.equal(appcount, 1);\n assert.equal(parentcount, 2);\n assert.equal(childcount, 2);\n });\n };\n\n _class.prototype['@test Specifying non-existent controller name in route#render throws'] = function (assert) {\n assert.expect(1);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.add('route:home', _emberRouting.Route.extend({\n renderTemplate: function () {\n var _this60 = this;\n\n expectAssertion(function () {\n _this60.render('homepage', {\n controller: 'stefanpenneristhemanforme'\n });\n }, \"You passed `controller: 'stefanpenneristhemanforme'` into the `render` method, but no such controller could be found.\");\n }\n }));\n\n return this.visit('/');\n };\n\n _class.prototype[\"@test Redirecting with null model doesn't error out\"] = function (assert) {\n var _this61 = this;\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('about', { path: '/about/:hurhurhur' });\n });\n\n this.add('route:about', _emberRouting.Route.extend({\n serialize: function (model) {\n if (model === null) {\n return { hurhurhur: 'TreeklesMcGeekles' };\n }\n }\n }));\n\n this.add('route:home', _emberRouting.Route.extend({\n beforeModel: function () {\n this.transitionTo('about', null);\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this61.applicationInstance.lookup('router:main');\n assert.equal(router.get('location.path'), '/about/TreeklesMcGeekles');\n });\n };\n\n _class.prototype['@test rejecting the model hooks promise with a non-error prints the `message` property'] = function (assert) {\n var _this62 = this;\n\n assert.expect(5);\n\n var rejectedMessage = 'OMG!! SOOOOOO BAD!!!!';\n var rejectedStack = 'Yeah, buddy: stack gets printed too.';\n\n this.router.map(function () {\n this.route('yippie', { path: '/' });\n });\n\n console.error = function (initialMessage, errorMessage, errorStack) {\n assert.equal(initialMessage, 'Error while processing route: yippie', 'a message with the current route name is printed');\n assert.equal(errorMessage, rejectedMessage, \"the rejected reason's message property is logged\");\n assert.equal(errorStack, rejectedStack, \"the rejected reason's stack property is logged\");\n };\n\n this.add('route:yippie', _emberRouting.Route.extend({\n model: function () {\n return _rsvp.default.reject({\n message: rejectedMessage,\n stack: rejectedStack\n });\n }\n }));\n\n return assert.throws(function () {\n return _this62.visit('/');\n }, function (err) {\n assert.equal(err.message, rejectedMessage);\n return true;\n }, 'expected an exception');\n };\n\n _class.prototype['@test rejecting the model hooks promise with an error with `errorThrown` property prints `errorThrown.message` property'] = function (assert) {\n var _this63 = this;\n\n assert.expect(5);\n var rejectedMessage = 'OMG!! SOOOOOO BAD!!!!';\n var rejectedStack = 'Yeah, buddy: stack gets printed too.';\n\n this.router.map(function () {\n this.route('yippie', { path: '/' });\n });\n\n console.error = function (initialMessage, errorMessage, errorStack) {\n assert.equal(initialMessage, 'Error while processing route: yippie', 'a message with the current route name is printed');\n assert.equal(errorMessage, rejectedMessage, \"the rejected reason's message property is logged\");\n assert.equal(errorStack, rejectedStack, \"the rejected reason's stack property is logged\");\n };\n\n this.add('route:yippie', _emberRouting.Route.extend({\n model: function () {\n return _rsvp.default.reject({\n errorThrown: { message: rejectedMessage, stack: rejectedStack }\n });\n }\n }));\n\n assert.throws(function () {\n return _this63.visit('/');\n }, function (err) {\n assert.equal(err.message, rejectedMessage);\n return true;\n }, 'expected an exception');\n };\n\n _class.prototype['@test rejecting the model hooks promise with no reason still logs error'] = function (assert) {\n var _this64 = this;\n\n assert.expect(2);\n this.router.map(function () {\n this.route('wowzers', { path: '/' });\n });\n\n console.error = function (initialMessage) {\n assert.equal(initialMessage, 'Error while processing route: wowzers', 'a message with the current route name is printed');\n };\n\n this.add('route:wowzers', _emberRouting.Route.extend({\n model: function () {\n return _rsvp.default.reject();\n }\n }));\n\n return assert.throws(function () {\n return _this64.visit('/');\n });\n };\n\n _class.prototype['@test rejecting the model hooks promise with a string shows a good error'] = function (assert) {\n var _this65 = this;\n\n assert.expect(3);\n var rejectedMessage = 'Supercalifragilisticexpialidocious';\n\n this.router.map(function () {\n this.route('yondo', { path: '/' });\n });\n\n console.error = function (initialMessage, errorMessage) {\n assert.equal(initialMessage, 'Error while processing route: yondo', 'a message with the current route name is printed');\n assert.equal(errorMessage, rejectedMessage, \"the rejected reason's message property is logged\");\n };\n\n this.add('route:yondo', _emberRouting.Route.extend({\n model: function () {\n return _rsvp.default.reject(rejectedMessage);\n }\n }));\n\n assert.throws(function () {\n return _this65.visit('/');\n }, new RegExp(rejectedMessage), 'expected an exception');\n };\n\n _class.prototype[\"@test willLeave, willChangeContext, willChangeModel actions don't fire unless feature flag enabled\"] = function (assert) {\n assert.expect(1);\n\n this.router.map(function () {\n this.route('about');\n });\n\n function shouldNotFire() {\n assert.ok(false, \"this action shouldn't have been received\");\n }\n\n this.add('route:index', _emberRouting.Route.extend({\n actions: {\n willChangeModel: shouldNotFire,\n willChangeContext: shouldNotFire,\n willLeave: shouldNotFire\n }\n }));\n\n this.add('route:about', _emberRouting.Route.extend({\n setupController: function () {\n assert.ok(true, 'about route was entered');\n }\n }));\n\n return this.visit('/about');\n };\n\n _class.prototype['@test Errors in transitionTo within redirect hook are logged'] = function (assert) {\n var _this66 = this;\n\n assert.expect(4);\n var actual = [];\n\n this.router.map(function () {\n this.route('yondo', { path: '/' });\n this.route('stink-bomb');\n });\n\n this.add('route:yondo', _emberRouting.Route.extend({\n redirect: function () {\n this.transitionTo('stink-bomb', { something: 'goes boom' });\n }\n }));\n\n console.error = function () {\n // push the arguments onto an array so we can detect if the error gets logged twice\n actual.push(arguments);\n };\n\n assert.throws(function () {\n return _this66.visit('/');\n }, /More context objects were passed/);\n\n assert.equal(actual.length, 1, 'the error is only logged once');\n assert.equal(actual[0][0], 'Error while processing route: yondo', 'source route is printed');\n assert.ok(actual[0][1].match(/More context objects were passed than there are dynamic segments for the route: stink-bomb/), 'the error is printed');\n };\n\n _class.prototype['@test Errors in transition show error template if available'] = function (assert) {\n this.addTemplate('error', \"Error!
\");\n\n this.router.map(function () {\n this.route('yondo', { path: '/' });\n this.route('stink-bomb');\n });\n\n this.add('route:yondo', _emberRouting.Route.extend({\n redirect: function () {\n this.transitionTo('stink-bomb', { something: 'goes boom' });\n }\n }));\n console.error = function () {};\n\n return this.visit('/').then(function () {\n var rootElement = document.querySelector('#qunit-fixture');\n assert.equal(rootElement.querySelectorAll('#error').length, 1, 'Error template was rendered.');\n });\n };\n\n _class.prototype['@test Route#resetController gets fired when changing models and exiting routes'] = function (assert) {\n var _this67 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('a', function () {\n this.route('b', { path: '/b/:id', resetNamespace: true }, function () {});\n this.route('c', { path: '/c/:id', resetNamespace: true }, function () {});\n });\n this.route('out');\n });\n\n var calls = [];\n\n var SpyRoute = _emberRouting.Route.extend({\n setupController: function () /* controller, model, transition */{\n calls.push(['setup', this.routeName]);\n },\n resetController: function () /* controller */{\n calls.push(['reset', this.routeName]);\n }\n });\n\n this.add('route:a', SpyRoute.extend());\n this.add('route:b', SpyRoute.extend());\n this.add('route:c', SpyRoute.extend());\n this.add('route:out', SpyRoute.extend());\n\n var router = void 0;\n return this.visit('/').then(function () {\n router = _this67.applicationInstance.lookup('router:main');\n assert.deepEqual(calls, []);\n return (0, _runloop.run)(router, 'transitionTo', 'b', 'b-1');\n }).then(function () {\n assert.deepEqual(calls, [['setup', 'a'], ['setup', 'b']]);\n calls.length = 0;\n return (0, _runloop.run)(router, 'transitionTo', 'c', 'c-1');\n }).then(function () {\n assert.deepEqual(calls, [['reset', 'b'], ['setup', 'c']]);\n calls.length = 0;\n return (0, _runloop.run)(router, 'transitionTo', 'out');\n }).then(function () {\n assert.deepEqual(calls, [['reset', 'c'], ['reset', 'a'], ['setup', 'out']]);\n });\n };\n\n _class.prototype['@test Exception during initialization of non-initial route is not swallowed'] = function (assert) {\n var _this68 = this;\n\n this.router.map(function () {\n this.route('boom');\n });\n this.add('route:boom', _emberRouting.Route.extend({\n init: function () {\n throw new Error('boom!');\n }\n }));\n\n return assert.throws(function () {\n return _this68.visit('/boom');\n }, /\\bboom\\b/);\n };\n\n _class.prototype['@test Exception during initialization of initial route is not swallowed'] = function (assert) {\n var _this69 = this;\n\n this.router.map(function () {\n this.route('boom', { path: '/' });\n });\n this.add('route:boom', _emberRouting.Route.extend({\n init: function () {\n throw new Error('boom!');\n }\n }));\n return assert.throws(function () {\n return _this69.visit('/');\n }, /\\bboom\\b/);\n };\n\n _class.prototype['@test {{outlet}} works when created after initial render'] = function (assert) {\n var _this70 = this;\n\n this.addTemplate('sample', 'Hi{{#if showTheThing}}{{outlet}}{{/if}}Bye');\n this.addTemplate('sample.inner', 'Yay');\n this.addTemplate('sample.inner2', 'Boo');\n this.router.map(function () {\n this.route('sample', { path: '/' }, function () {\n this.route('inner', { path: '/' });\n this.route('inner2', { path: '/2' });\n });\n });\n\n var rootElement = void 0;\n return this.visit('/').then(function () {\n rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'HiBye', 'initial render');\n\n (0, _runloop.run)(function () {\n return _this70.applicationInstance.lookup('controller:sample').set('showTheThing', true);\n });\n\n assert.equal(rootElement.textContent.trim(), 'HiYayBye', 'second render');\n return _this70.visit('/2');\n }).then(function () {\n assert.equal(rootElement.textContent.trim(), 'HiBooBye', 'third render');\n });\n };\n\n _class.prototype['@test Can render into a named outlet at the top level'] = function (assert) {\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n this.addTemplate('index', 'The index');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B-Hello world-C', 'initial render');\n });\n };\n\n _class.prototype['@test Can disconnect a named outlet at the top level'] = function (assert) {\n var _this71 = this;\n\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n this.addTemplate('index', 'The index');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n },\n\n actions: {\n banish: function () {\n this.disconnectOutlet({\n parentView: 'application',\n outlet: 'other'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B-Hello world-C', 'initial render');\n\n (0, _runloop.run)(_this71.applicationInstance.lookup('router:main'), 'send', 'banish');\n\n assert.equal(rootElement.textContent.trim(), 'A-The index-B--C', 'second render');\n });\n };\n\n _class.prototype['@test Can render into a named outlet at the top level, with empty main outlet'] = function (assert) {\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n\n this.router.map(function () {\n this.route('hasNoTemplate', { path: '/' });\n });\n\n this.add('route:application', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render();\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A--B-Hello world-C', 'initial render');\n });\n };\n\n _class.prototype['@test Can render into a named outlet at the top level, later'] = function (assert) {\n var _this72 = this;\n\n this.addTemplate('application', 'A-{{outlet}}-B-{{outlet \"other\"}}-C');\n this.addTemplate('modal', 'Hello world');\n this.addTemplate('index', 'The index');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _emberRouting.Route.extend({\n actions: {\n launch: function () {\n this.render('modal', {\n into: 'application',\n outlet: 'other'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B--C', 'initial render');\n (0, _runloop.run)(_this72.applicationInstance.lookup('router:main'), 'send', 'launch');\n assert.equal(rootElement.textContent.trim(), 'A-The index-B-Hello world-C', 'second render');\n });\n };\n\n _class.prototype[\"@test Can render routes with no 'main' outlet and their children\"] = function (assert) {\n var _this73 = this;\n\n this.addTemplate('application', '{{outlet \"app\"}}
');\n this.addTemplate('app', '{{outlet \"common\"}}
{{outlet \"sub\"}}
');\n this.addTemplate('common', '
');\n this.addTemplate('sub', '
');\n\n this.router.map(function () {\n this.route('app', { path: '/app' }, function () {\n this.route('sub', { path: '/sub', resetNamespace: true });\n });\n });\n\n this.add('route:app', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('app', {\n outlet: 'app',\n into: 'application'\n });\n this.render('common', {\n outlet: 'common',\n into: 'app'\n });\n }\n }));\n\n this.add('route:sub', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('sub', {\n outlet: 'sub',\n into: 'app'\n });\n }\n }));\n\n var rootElement = void 0;\n return this.visit('/app').then(function () {\n rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.querySelectorAll('#app-common #common').length, 1, 'Finds common while viewing /app');\n return _this73.visit('/app/sub');\n }).then(function () {\n assert.equal(rootElement.querySelectorAll('#app-common #common').length, 1, 'Finds common while viewing /app/sub');\n assert.equal(rootElement.querySelectorAll('#app-sub #sub').length, 1, 'Finds sub while viewing /app/sub');\n });\n };\n\n _class.prototype['@test Tolerates stacked renders'] = function (assert) {\n var _this74 = this;\n\n this.addTemplate('application', '{{outlet}}{{outlet \"modal\"}}');\n this.addTemplate('index', 'hi');\n this.addTemplate('layer', 'layer');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _emberRouting.Route.extend({\n actions: {\n openLayer: function () {\n this.render('layer', {\n into: 'application',\n outlet: 'modal'\n });\n },\n close: function () {\n this.disconnectOutlet({\n outlet: 'modal',\n parentView: 'application'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this74.applicationInstance.lookup('router:main');\n assert.equal(rootElement.textContent.trim(), 'hi');\n (0, _runloop.run)(router, 'send', 'openLayer');\n assert.equal(rootElement.textContent.trim(), 'hilayer');\n (0, _runloop.run)(router, 'send', 'openLayer');\n assert.equal(rootElement.textContent.trim(), 'hilayer');\n (0, _runloop.run)(router, 'send', 'close');\n assert.equal(rootElement.textContent.trim(), 'hi');\n });\n };\n\n _class.prototype['@test Renders child into parent with non-default template name'] = function (assert) {\n this.addTemplate('application', '{{outlet}}
');\n this.addTemplate('exports.root', '{{outlet}}
');\n this.addTemplate('exports.index', '
');\n\n this.router.map(function () {\n this.route('root', function () {});\n });\n\n this.add('route:root', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('exports/root');\n }\n }));\n\n this.add('route:root.index', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render('exports/index');\n }\n }));\n\n return this.visit('/root').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n assert.equal(rootElement.querySelectorAll('.a .b .c').length, 1);\n });\n };\n\n _class.prototype[\"@test Allows any route to disconnectOutlet another route's templates\"] = function (assert) {\n var _this75 = this;\n\n this.addTemplate('application', '{{outlet}}{{outlet \"modal\"}}');\n this.addTemplate('index', 'hi');\n this.addTemplate('layer', 'layer');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:application', _emberRouting.Route.extend({\n actions: {\n openLayer: function () {\n this.render('layer', {\n into: 'application',\n outlet: 'modal'\n });\n }\n }\n }));\n this.add('route:index', _emberRouting.Route.extend({\n actions: {\n close: function () {\n this.disconnectOutlet({\n parentView: 'application',\n outlet: 'modal'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this75.applicationInstance.lookup('router:main');\n assert.equal(rootElement.textContent.trim(), 'hi');\n (0, _runloop.run)(router, 'send', 'openLayer');\n assert.equal(rootElement.textContent.trim(), 'hilayer');\n (0, _runloop.run)(router, 'send', 'close');\n assert.equal(rootElement.textContent.trim(), 'hi');\n });\n };\n\n _class.prototype['@test Can this.render({into:...}) the render helper'] = function (assert) {\n var _this76 = this;\n\n expectDeprecation(/Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated./);\n\n expectDeprecation(function () {\n _this76.addTemplate('application', '{{render \"sidebar\"}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.addTemplate('sidebar', '');\n this.addTemplate('index', 'other');\n this.addTemplate('bar', 'bar');\n\n this.add('route:index', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ into: 'sidebar' });\n },\n\n actions: {\n changeToBar: function () {\n this.disconnectOutlet({\n parentView: 'sidebar',\n outlet: 'main'\n });\n this.render('bar', { into: 'sidebar' });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this76.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar')), 'other');\n (0, _runloop.run)(router, 'send', 'changeToBar');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar')), 'bar');\n });\n };\n\n _class.prototype['@test Can disconnect from the render helper'] = function (assert) {\n var _this77 = this;\n\n expectDeprecation(/Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated./);\n\n expectDeprecation(function () {\n _this77.addTemplate('application', '{{render \"sidebar\"}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.addTemplate('sidebar', '');\n this.addTemplate('index', 'other');\n\n this.add('route:index', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ into: 'sidebar' });\n },\n\n actions: {\n disconnect: function () {\n this.disconnectOutlet({\n parentView: 'sidebar',\n outlet: 'main'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this77.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar')), 'other');\n (0, _runloop.run)(router, 'send', 'disconnect');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar')), '');\n });\n };\n\n _class.prototype[\"@test Can this.render({into:...}) the render helper's children\"] = function (assert) {\n var _this78 = this;\n\n expectDeprecation(/Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated./);\n\n expectDeprecation(function () {\n _this78.addTemplate('application', '{{render \"sidebar\"}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n this.addTemplate('sidebar', '');\n this.addTemplate('index', '{{outlet}}
');\n this.addTemplate('other', 'other');\n this.addTemplate('bar', 'bar');\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.add('route:index', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ into: 'sidebar' });\n this.render('other', { into: 'index' });\n },\n\n actions: {\n changeToBar: function () {\n this.disconnectOutlet({\n parentView: 'index',\n outlet: 'main'\n });\n this.render('bar', { into: 'index' });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this78.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar .index')), 'other');\n (0, _runloop.run)(router, 'send', 'changeToBar');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar .index')), 'bar');\n });\n };\n\n _class.prototype[\"@test Can disconnect from the render helper's children\"] = function (assert) {\n var _this79 = this;\n\n expectDeprecation(/Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated./);\n\n expectDeprecation(function () {\n _this79.addTemplate('application', '{{render \"sidebar\"}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.addTemplate('sidebar', '');\n this.addTemplate('index', '{{outlet}}
');\n this.addTemplate('other', 'other');\n\n this.add('route:index', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ into: 'sidebar' });\n this.render('other', { into: 'index' });\n },\n\n actions: {\n disconnect: function () {\n this.disconnectOutlet({\n parentView: 'index',\n outlet: 'main'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this79.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar .index')), 'other');\n (0, _runloop.run)(router, 'send', 'disconnect');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.sidebar .index')), '');\n });\n };\n\n _class.prototype['@test Can this.render({into:...}) nested render helpers'] = function (assert) {\n var _this80 = this;\n\n expectDeprecation(/Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated./);\n\n expectDeprecation(function () {\n _this80.addTemplate('application', '{{render \"sidebar\"}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n expectDeprecation(function () {\n _this80.addTemplate('sidebar', '');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.addTemplate('cart', '{{outlet}}
');\n this.addTemplate('index', 'other');\n this.addTemplate('baz', 'baz');\n\n this.add('route:index', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ into: 'cart' });\n },\n\n actions: {\n changeToBaz: function () {\n this.disconnectOutlet({\n parentView: 'cart',\n outlet: 'main'\n });\n this.render('baz', { into: 'cart' });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this80.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.cart')), 'other');\n (0, _runloop.run)(router, 'send', 'changeToBaz');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.cart')), 'baz');\n });\n };\n\n _class.prototype['@test Can disconnect from nested render helpers'] = function (assert) {\n var _this81 = this;\n\n expectDeprecation(/Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated./);\n\n expectDeprecation(function () {\n _this81.addTemplate('application', '{{render \"sidebar\"}}');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n\n expectDeprecation(function () {\n _this81.addTemplate('sidebar', '');\n }, /Please refactor [\\w\\{\\}\"` ]+ to a component/);\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n this.addTemplate('cart', '{{outlet}}
');\n this.addTemplate('index', 'other');\n\n this.add('route:index', _emberRouting.Route.extend({\n renderTemplate: function () {\n this.render({ into: 'cart' });\n },\n\n actions: {\n disconnect: function () {\n this.disconnectOutlet({\n parentView: 'cart',\n outlet: 'main'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var rootElement = document.getElementById('qunit-fixture');\n var router = _this81.applicationInstance.lookup('router:main');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.cart')), 'other');\n (0, _runloop.run)(router, 'send', 'disconnect');\n assert.equal((0, _internalTestHelpers.getTextOf)(rootElement.querySelector('.cart')), '');\n });\n };\n\n _class.prototype['@test Components inside an outlet have their didInsertElement hook invoked when the route is displayed'] = function (assert) {\n this.addTemplate('index', '{{#if showFirst}}{{my-component}}{{else}}{{other-component}}{{/if}}');\n\n var myComponentCounter = 0;\n var otherComponentCounter = 0;\n var indexController = void 0;\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n });\n\n this.add('controller:index', _controller.default.extend({\n showFirst: true\n }));\n\n this.add('route:index', _emberRouting.Route.extend({\n setupController: function (controller) {\n indexController = controller;\n }\n }));\n\n this.add('component:my-component', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n myComponentCounter++;\n }\n }));\n\n this.add('component:other-component', _emberGlimmer.Component.extend({\n didInsertElement: function () {\n otherComponentCounter++;\n }\n }));\n\n return this.visit('/').then(function () {\n assert.strictEqual(myComponentCounter, 1, 'didInsertElement invoked on displayed component');\n assert.strictEqual(otherComponentCounter, 0, 'didInsertElement not invoked on displayed component');\n\n (0, _runloop.run)(function () {\n return indexController.set('showFirst', false);\n });\n\n assert.strictEqual(myComponentCounter, 1, 'didInsertElement not invoked on displayed component');\n assert.strictEqual(otherComponentCounter, 1, 'didInsertElement invoked on displayed component');\n });\n };\n\n _class.prototype['@test Doesnt swallow exception thrown from willTransition'] = function (assert) {\n var _this82 = this;\n\n assert.expect(1);\n this.addTemplate('application', '{{outlet}}');\n this.addTemplate('index', 'index');\n this.addTemplate('other', 'other');\n\n this.router.map(function () {\n this.route('index', { path: '/' });\n this.route('other', function () {});\n });\n\n this.add('route:index', _emberRouting.Route.extend({\n actions: {\n willTransition: function () {\n throw new Error('boom');\n }\n }\n }));\n\n return this.visit('/').then(function () {\n return assert.throws(function () {\n return _this82.visit('/other');\n }, /boom/, 'expected an exception but none was thrown');\n });\n };\n\n _class.prototype['@test Exception if outlet name is undefined in render and disconnectOutlet'] = function () {\n var _this83 = this;\n\n this.add('route:application', _emberRouting.Route.extend({\n actions: {\n showModal: function () {\n this.render({\n outlet: undefined,\n parentView: 'application'\n });\n },\n hideModal: function () {\n this.disconnectOutlet({\n outlet: undefined,\n parentView: 'application'\n });\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var router = _this83.applicationInstance.lookup('router:main');\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n return router.send('showModal');\n });\n }, /You passed undefined as the outlet name/);\n\n expectAssertion(function () {\n (0, _runloop.run)(function () {\n return router.send('hideModal');\n });\n }, /You passed undefined as the outlet name/);\n });\n };\n\n _class.prototype['@test Route serializers work for Engines'] = function (assert) {\n var _this84 = this;\n\n assert.expect(2);\n\n // Register engine\n var BlogEngine = _engine.default.extend();\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n var postSerialize = function (params) {\n assert.ok(true, 'serialize hook runs');\n return {\n post_id: params.id\n };\n };\n\n this.add('route-map:blog', function () {\n this.route('post', {\n path: '/post/:post_id',\n serialize: postSerialize\n });\n });\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n return this.visit('/').then(function () {\n var router = _this84.applicationInstance.lookup('router:main');\n assert.equal(router._routerMicrolib.generate('blog.post', { id: '13' }), '/blog/post/13', 'url is generated properly');\n });\n };\n\n _class.prototype['@test Defining a Route#serialize method in an Engine throws an error'] = function (assert) {\n var _this85 = this;\n\n assert.expect(1);\n\n // Register engine\n var BlogEngine = _engine.default.extend();\n this.add('engine:blog', BlogEngine);\n\n // Register engine route map\n\n this.add('route-map:blog', function () {\n this.route('post');\n });\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n return this.visit('/').then(function () {\n var router = _this85.applicationInstance.lookup('router:main');\n var PostRoute = _emberRouting.Route.extend({\n serialize: function () {}\n });\n _this85.applicationInstance.lookup('engine:blog').register('route:post', PostRoute);\n\n assert.throws(function () {\n return router.transitionTo('blog.post');\n }, /Defining a custom serialize method on an Engine route is not supported/);\n });\n };\n\n _class.prototype['@test App.destroy does not leave undestroyed views after clearing engines'] = function (assert) {\n var _this86 = this;\n\n assert.expect(4);\n\n var engineInstance = void 0;\n // Register engine\n var BlogEngine = _engine.default.extend();\n this.add('engine:blog', BlogEngine);\n var EngineIndexRoute = _emberRouting.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n engineInstance = (0, _emberOwner.getOwner)(this);\n }\n });\n\n // Register engine route map\n\n this.add('route-map:blog', function () {\n this.route('post');\n });\n\n this.router.map(function () {\n this.mount('blog');\n });\n\n return this.visit('/').then(function () {\n var engine = _this86.applicationInstance.lookup('engine:blog');\n engine.register('route:index', EngineIndexRoute);\n engine.register('template:index', (0, _emberTemplateCompiler.compile)('Engine Post!'));\n return _this86.visit('/blog');\n }).then(function () {\n assert.ok(true, '/blog has been handled');\n var route = engineInstance.lookup('route:index');\n var router = _this86.applicationInstance.lookup('router:main');\n\n (0, _runloop.run)(router, 'destroy');\n assert.equal(router._toplevelView, null, 'the toplevelView was cleared');\n\n (0, _runloop.run)(route, 'destroy');\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n\n (0, _runloop.run)(_this86.applicationInstance, 'destroy');\n assert.equal(router._toplevelView, null, 'the toplevelView was not reinitialized');\n });\n };\n\n _class.prototype[\"@test Generated route should be an instance of App's default route if provided\"] = function (assert) {\n var _this87 = this;\n\n var generatedRoute = void 0;\n\n this.router.map(function () {\n this.route('posts');\n });\n\n var AppRoute = _emberRouting.Route.extend();\n this.add('route:basic', AppRoute);\n\n return this.visit('/posts').then(function () {\n generatedRoute = _this87.applicationInstance.lookup('route:posts');\n\n assert.ok(generatedRoute instanceof AppRoute, 'should extend the correct route');\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'currentPath',\n get: function () {\n return this.getController('application').get('currentPath');\n }\n }, {\n key: 'currentURL',\n get: function () {\n return this.appRouter.get('currentURL');\n }\n }]);\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/routing/query_params_test', ['ember-babel', '@ember/controller', '@ember/string', 'ember-runtime', '@ember/runloop', 'ember-meta', 'ember-metal', 'ember-routing', 'internal-test-helpers'], function (_emberBabel, _controller, _string, _emberRuntime, _runloop, _emberMeta, _emberMetal, _emberRouting, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - main', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.refreshModelWhileLoadingTest = function (loadingReturn) {\n var _actions,\n _this2 = this;\n\n var assert = this.assert;\n\n assert.expect(9);\n\n var appModelCount = 0;\n var promiseResolve = void 0;\n\n this.add('route:application', _emberRouting.Route.extend({\n queryParams: {\n appomg: {\n defaultValue: 'applol'\n }\n },\n model: function () /* params */{\n appModelCount++;\n }\n }));\n\n this.setSingleQPController('index', 'omg', undefined, {\n omg: undefined\n });\n\n var actionName = typeof loadingReturn !== 'undefined' ? 'loading' : 'ignore';\n var indexModelCount = 0;\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n actions: (_actions = {}, _actions[actionName] = function () {\n return loadingReturn;\n }, _actions),\n model: function (params) {\n indexModelCount++;\n if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' });\n return new _emberRuntime.RSVP.Promise(function (resolve) {\n promiseResolve = resolve;\n });\n } else if (indexModelCount === 3) {\n assert.deepEqual(params, { omg: 'hello' }, \"Model hook reruns even if the previous one didn't finish\");\n }\n }\n }));\n\n return this.visit('/').then(function () {\n assert.equal(appModelCount, 1, 'appModelCount is 1');\n assert.equal(indexModelCount, 1);\n\n var indexController = _this2.getController('index');\n _this2.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1, 'appModelCount is 1');\n assert.equal(indexModelCount, 2);\n\n _this2.setAndFlush(indexController, 'omg', 'hello');\n assert.equal(appModelCount, 1, 'appModelCount is 1');\n assert.equal(indexModelCount, 3);\n\n (0, _runloop.run)(function () {\n promiseResolve();\n });\n\n assert.equal((0, _emberMetal.get)(indexController, 'omg'), 'hello', 'At the end last value prevails');\n });\n };\n\n _class.prototype[\"@test No replaceURL occurs on startup because default values don't show up in URL\"] = function (assert) {\n assert.expect(1);\n\n this.setSingleQPController('index');\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test Calling transitionTo does not lose query params already on the activeTransition'] = function (assert) {\n var _this3 = this;\n\n assert.expect(2);\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n this.route('sibling');\n });\n });\n\n this.add('route:parent.child', _emberRouting.Route.extend({\n afterModel: function () {\n this.transitionTo('parent.sibling');\n }\n }));\n\n this.setSingleQPController('parent');\n\n return this.visit('/parent/child?foo=lol').then(function () {\n _this3.assertCurrentPath('/parent/sibling?foo=lol', 'redirected to the sibling route, instead of child route');\n assert.equal(_this3.getController('parent').get('foo'), 'lol', 'controller has value from the active transition');\n });\n };\n\n _class.prototype['@test Single query params can be set on the controller and reflected in the url'] = function (assert) {\n var _this4 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.setSingleQPController('home');\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this4.getController('home');\n\n _this4.setAndFlush(controller, 'foo', '456');\n _this4.assertCurrentPath('/?foo=456');\n\n _this4.setAndFlush(controller, 'foo', '987');\n _this4.assertCurrentPath('/?foo=987');\n });\n };\n\n _class.prototype['@test Query params can map to different url keys configured on the controller'] = function (assert) {\n var _this5 = this;\n\n assert.expect(6);\n\n this.add('controller:index', _controller.default.extend({\n queryParams: [{ foo: 'other_foo', bar: { as: 'other_bar' } }],\n foo: 'FOO',\n bar: 'BAR'\n }));\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this5.getController('index');\n\n _this5.setAndFlush(controller, 'foo', 'LEX');\n _this5.assertCurrentPath('/?other_foo=LEX', \"QP mapped correctly without 'as'\");\n\n _this5.setAndFlush(controller, 'foo', 'WOO');\n _this5.assertCurrentPath('/?other_foo=WOO', \"QP updated correctly without 'as'\");\n\n _this5.transitionTo('/?other_foo=NAW');\n assert.equal(controller.get('foo'), 'NAW', 'QP managed correctly on URL transition');\n\n _this5.setAndFlush(controller, 'bar', 'NERK');\n _this5.assertCurrentPath('/?other_bar=NERK&other_foo=NAW', \"QP mapped correctly with 'as'\");\n\n _this5.setAndFlush(controller, 'bar', 'NUKE');\n _this5.assertCurrentPath('/?other_bar=NUKE&other_foo=NAW', \"QP updated correctly with 'as'\");\n });\n };\n\n _class.prototype['@test Routes have a private overridable serializeQueryParamKey hook'] = function (assert) {\n var _this6 = this;\n\n assert.expect(2);\n\n this.add('route:index', _emberRouting.Route.extend({\n serializeQueryParamKey: _string.dasherize\n }));\n\n this.setSingleQPController('index', 'funTimes', '');\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this6.getController('index');\n\n _this6.setAndFlush(controller, 'funTimes', 'woot');\n _this6.assertCurrentPath('/?fun-times=woot');\n });\n };\n\n _class.prototype['@test Can override inherited QP behavior by specifying queryParams as a computed property'] = function (assert) {\n var _this7 = this;\n\n assert.expect(3);\n\n this.setSingleQPController('index', 'a', 0, {\n queryParams: (0, _emberMetal.computed)(function () {\n return ['c'];\n }),\n c: true\n });\n\n return this.visitAndAssert('/').then(function () {\n var indexController = _this7.getController('index');\n\n _this7.setAndFlush(indexController, 'a', 1);\n _this7.assertCurrentPath('/', 'QP did not update due to being overriden');\n\n _this7.setAndFlush(indexController, 'c', false);\n _this7.assertCurrentPath('/?c=false', 'QP updated with overridden param');\n });\n };\n\n _class.prototype['@test Can concatenate inherited QP behavior by specifying queryParams as an array'] = function (assert) {\n var _this8 = this;\n\n assert.expect(3);\n\n this.setSingleQPController('index', 'a', 0, {\n queryParams: ['c'],\n c: true\n });\n\n return this.visitAndAssert('/').then(function () {\n var indexController = _this8.getController('index');\n\n _this8.setAndFlush(indexController, 'a', 1);\n _this8.assertCurrentPath('/?a=1', 'Inherited QP did update');\n\n _this8.setAndFlush(indexController, 'c', false);\n _this8.assertCurrentPath('/?a=1&c=false', 'New QP did update');\n });\n };\n\n _class.prototype['@test model hooks receives query params'] = function (assert) {\n assert.expect(2);\n\n this.setSingleQPController('index');\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: 'bar' });\n }\n }));\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test model hooks receives query params with dynamic segment params'] = function (assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:id' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: 'bar', id: 'baz' });\n }\n }));\n\n return this.visitAndAssert('/baz');\n };\n\n _class.prototype['@test model hooks receives query params (overridden by incoming url value)'] = function (assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:id' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: 'baz', id: 'boo' });\n }\n }));\n\n return this.visitAndAssert('/boo?foo=baz');\n };\n\n _class.prototype['@test error is thrown if dynamic segment and query param have same name'] = function (assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('index', { path: '/:foo' });\n });\n\n this.setSingleQPController('index');\n\n expectAssertion(function () {\n _this9.visitAndAssert('/boo?foo=baz');\n }, 'The route \\'index\\' has both a dynamic segment and query param with name \\'foo\\'. Please rename one to avoid collisions.');\n };\n\n _class.prototype['@test query params have been set by the time setupController is called'] = function (assert) {\n assert.expect(2);\n\n this.setSingleQPController('application');\n\n this.add('route:application', _emberRouting.Route.extend({\n setupController: function (controller) {\n assert.equal(controller.get('foo'), 'YEAH', \"controller's foo QP property set before setupController called\");\n }\n }));\n\n return this.visitAndAssert('/?foo=YEAH');\n };\n\n _class.prototype['@test mapped query params have been set by the time setupController is called'] = function (assert) {\n assert.expect(2);\n\n this.setSingleQPController('application', { faz: 'foo' });\n\n this.add('route:application', _emberRouting.Route.extend({\n setupController: function (controller) {\n assert.equal(controller.get('faz'), 'YEAH', \"controller's foo QP property set before setupController called\");\n }\n }));\n\n return this.visitAndAssert('/?foo=YEAH');\n };\n\n _class.prototype['@test Route#paramsFor fetches query params with default value'] = function (assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: 'bar' }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz');\n };\n\n _class.prototype['@test Route#paramsFor fetches query params with non-default value'] = function (assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index');\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: 'boo' }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz?foo=boo');\n };\n\n _class.prototype['@test Route#paramsFor fetches default falsy query params'] = function (assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index', 'foo', false);\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: false }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz');\n };\n\n _class.prototype['@test Route#paramsFor fetches non-default falsy query params'] = function (assert) {\n assert.expect(2);\n\n this.router.map(function () {\n this.route('index', { path: '/:something' });\n });\n\n this.setSingleQPController('index', 'foo', true);\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function () /* params, transition */{\n assert.deepEqual(this.paramsFor('index'), { something: 'baz', foo: false }, 'could retrieve params for index');\n }\n }));\n\n return this.visitAndAssert('/baz?foo=false');\n };\n\n _class.prototype['@test model hook can query prefix-less application params'] = function (assert) {\n assert.expect(4);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:application', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { appomg: 'applol' });\n }\n }));\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { omg: 'lol' });\n assert.deepEqual(this.paramsFor('application'), {\n appomg: 'applol'\n });\n }\n }));\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test model hook can query prefix-less application params (overridden by incoming url value)'] = function (assert) {\n assert.expect(4);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:application', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { appomg: 'appyes' });\n }\n }));\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { omg: 'yes' });\n assert.deepEqual(this.paramsFor('application'), {\n appomg: 'appyes'\n });\n }\n }));\n\n return this.visitAndAssert('/?appomg=appyes&omg=yes');\n };\n\n _class.prototype['@test can opt into full transition by setting refreshModel in route queryParams'] = function (assert) {\n var _this10 = this;\n\n assert.expect(7);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n var appModelCount = 0;\n this.add('route:application', _emberRouting.Route.extend({\n model: function () /* params, transition */{\n appModelCount++;\n }\n }));\n\n var indexModelCount = 0;\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n model: function (params) {\n indexModelCount++;\n\n if (indexModelCount === 1) {\n assert.deepEqual(params, { omg: 'lol' }, 'params are correct on first pass');\n } else if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' }, 'params are correct on second pass');\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(appModelCount, 1, 'app model hook ran');\n assert.equal(indexModelCount, 1, 'index model hook ran');\n\n var indexController = _this10.getController('index');\n _this10.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1, 'app model hook did not run again');\n assert.equal(indexModelCount, 2, 'index model hook ran again due to refreshModel');\n });\n };\n\n _class.prototype['@test refreshModel and replace work together'] = function (assert) {\n var _this11 = this;\n\n assert.expect(8);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n var appModelCount = 0;\n this.add('route:application', _emberRouting.Route.extend({\n model: function () /* params */{\n appModelCount++;\n }\n }));\n\n var indexModelCount = 0;\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true,\n replace: true\n }\n },\n model: function (params) {\n indexModelCount++;\n\n if (indexModelCount === 1) {\n assert.deepEqual(params, { omg: 'lol' }, 'params are correct on first pass');\n } else if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' }, 'params are correct on second pass');\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(appModelCount, 1, 'app model hook ran');\n assert.equal(indexModelCount, 1, 'index model hook ran');\n\n var indexController = _this11.getController('index');\n _this11.expectedReplaceURL = '/?omg=lex';\n _this11.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1, 'app model hook did not run again');\n assert.equal(indexModelCount, 2, 'index model hook ran again due to refreshModel');\n });\n };\n\n _class.prototype['@test multiple QP value changes only cause a single model refresh'] = function (assert) {\n var _this12 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('index', 'alex', 'lol');\n this.setSingleQPController('index', 'steely', 'lel');\n\n var refreshCount = 0;\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: {\n alex: {\n refreshModel: true\n },\n steely: {\n refreshModel: true\n }\n },\n refresh: function () {\n refreshCount++;\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n var indexController = _this12.getController('index');\n (0, _runloop.run)(indexController, 'setProperties', {\n alex: 'fran',\n steely: 'david'\n });\n assert.equal(refreshCount, 1, 'index refresh hook only run once');\n });\n };\n\n _class.prototype['@test refreshModel does not cause a second transition during app boot '] = function (assert) {\n assert.expect(1);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n refresh: function () {\n assert.ok(false);\n }\n }));\n\n return this.visitAndAssert('/?appomg=hello&omg=world');\n };\n\n _class.prototype['@test queryParams are updated when a controller property is set and the route is refreshed. Issue #13263 '] = function (assert) {\n var _this13 = this;\n\n this.addTemplate('application', 'Increment {{foo}} {{outlet}}');\n\n this.setSingleQPController('application', 'foo', 1, {\n actions: {\n increment: function () {\n this.incrementProperty('foo');\n this.send('refreshRoute');\n }\n }\n });\n\n this.add('route:application', _emberRouting.Route.extend({\n actions: {\n refreshRoute: function () {\n this.refresh();\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal((0, _internalTestHelpers.getTextOf)(document.getElementById('test-value')), '1');\n\n (0, _runloop.run)(document.getElementById('test-button'), 'click');\n assert.equal((0, _internalTestHelpers.getTextOf)(document.getElementById('test-value')), '2');\n _this13.assertCurrentPath('/?foo=2');\n\n (0, _runloop.run)(document.getElementById('test-button'), 'click');\n assert.equal((0, _internalTestHelpers.getTextOf)(document.getElementById('test-value')), '3');\n _this13.assertCurrentPath('/?foo=3');\n });\n };\n\n _class.prototype[\"@test Use Ember.get to retrieve query params 'refreshModel' configuration\"] = function (assert) {\n var _this14 = this;\n\n assert.expect(7);\n\n this.setSingleQPController('application', 'appomg', 'applol');\n this.setSingleQPController('index', 'omg', 'lol');\n\n var appModelCount = 0;\n this.add('route:application', _emberRouting.Route.extend({\n model: function () /* params */{\n appModelCount++;\n }\n }));\n\n var indexModelCount = 0;\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: _emberRuntime.Object.create({\n unknownProperty: function () {\n return { refreshModel: true };\n }\n }),\n model: function (params) {\n indexModelCount++;\n\n if (indexModelCount === 1) {\n assert.deepEqual(params, { omg: 'lol' });\n } else if (indexModelCount === 2) {\n assert.deepEqual(params, { omg: 'lex' });\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(appModelCount, 1);\n assert.equal(indexModelCount, 1);\n\n var indexController = _this14.getController('index');\n _this14.setAndFlush(indexController, 'omg', 'lex');\n\n assert.equal(appModelCount, 1);\n assert.equal(indexModelCount, 2);\n });\n };\n\n _class.prototype['@test can use refreshModel even with URL changes that remove QPs from address bar'] = function (assert) {\n var _this15 = this;\n\n assert.expect(4);\n\n this.setSingleQPController('index', 'omg', 'lol');\n\n var indexModelCount = 0;\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: {\n omg: {\n refreshModel: true\n }\n },\n model: function (params) {\n indexModelCount++;\n\n var data = void 0;\n if (indexModelCount === 1) {\n data = 'foo';\n } else if (indexModelCount === 2) {\n data = 'lol';\n }\n\n assert.deepEqual(params, { omg: data }, 'index#model receives right data');\n }\n }));\n\n return this.visitAndAssert('/?omg=foo').then(function () {\n _this15.transitionTo('/');\n\n var indexController = _this15.getController('index');\n assert.equal(indexController.get('omg'), 'lol');\n });\n };\n\n _class.prototype['@test can opt into a replace query by specifying replace:true in the Route config hash'] = function (assert) {\n var _this16 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('application', 'alex', 'matchneer');\n\n this.add('route:application', _emberRouting.Route.extend({\n queryParams: {\n alex: {\n replace: true\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n var appController = _this16.getController('application');\n _this16.expectedReplaceURL = '/?alex=wallace';\n _this16.setAndFlush(appController, 'alex', 'wallace');\n });\n };\n\n _class.prototype['@test Route query params config can be configured using property name instead of URL key'] = function (assert) {\n var _this17 = this;\n\n assert.expect(2);\n\n this.add('controller:application', _controller.default.extend({\n queryParams: [{ commitBy: 'commit_by' }]\n }));\n\n this.add('route:application', _emberRouting.Route.extend({\n queryParams: {\n commitBy: {\n replace: true\n }\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n var appController = _this17.getController('application');\n _this17.expectedReplaceURL = '/?commit_by=igor_seb';\n _this17.setAndFlush(appController, 'commitBy', 'igor_seb');\n });\n };\n\n _class.prototype['@test An explicit replace:false on a changed QP always wins and causes a pushState'] = function (assert) {\n var _this18 = this;\n\n assert.expect(3);\n\n this.add('controller:application', _controller.default.extend({\n queryParams: ['alex', 'steely'],\n alex: 'matchneer',\n steely: 'dan'\n }));\n\n this.add('route:application', _emberRouting.Route.extend({\n queryParams: {\n alex: {\n replace: true\n },\n steely: {\n replace: false\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var appController = _this18.getController('application');\n _this18.expectedPushURL = '/?alex=wallace&steely=jan';\n (0, _runloop.run)(appController, 'setProperties', { alex: 'wallace', steely: 'jan' });\n\n _this18.expectedPushURL = '/?alex=wallace&steely=fran';\n (0, _runloop.run)(appController, 'setProperties', { steely: 'fran' });\n\n _this18.expectedReplaceURL = '/?alex=sriracha&steely=fran';\n (0, _runloop.run)(appController, 'setProperties', { alex: 'sriracha' });\n });\n };\n\n _class.prototype['@test can opt into full transition by setting refreshModel in route queryParams when transitioning from child to parent'] = function (assert) {\n this.addTemplate('parent', '{{outlet}}');\n this.addTemplate('parent.child', \"{{link-to 'Parent' 'parent' (query-params foo='change') id='parent-link'}}\");\n\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n var parentModelCount = 0;\n this.add('route:parent', _emberRouting.Route.extend({\n model: function () {\n parentModelCount++;\n },\n\n queryParams: {\n foo: {\n refreshModel: true\n }\n }\n }));\n\n this.setSingleQPController('parent', 'foo', 'abc');\n\n return this.visit('/parent/child?foo=lol').then(function () {\n assert.equal(parentModelCount, 1);\n\n (0, _runloop.run)(document.getElementById('parent-link'), 'click');\n assert.equal(parentModelCount, 2);\n });\n };\n\n _class.prototype[\"@test Use Ember.get to retrieve query params 'replace' configuration\"] = function (assert) {\n var _this19 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('application', 'alex', 'matchneer');\n\n this.add('route:application', _emberRouting.Route.extend({\n queryParams: _emberRuntime.Object.create({\n unknownProperty: function () /* keyName */{\n // We are simulating all qps requiring refresh\n return { replace: true };\n }\n })\n }));\n\n return this.visitAndAssert('/').then(function () {\n var appController = _this19.getController('application');\n _this19.expectedReplaceURL = '/?alex=wallace';\n _this19.setAndFlush(appController, 'alex', 'wallace');\n });\n };\n\n _class.prototype['@test can override incoming QP values in setupController'] = function (assert) {\n var _this20 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.setSingleQPController('index', 'omg', 'lol');\n\n this.add('route:index', _emberRouting.Route.extend({\n setupController: function (controller) {\n assert.ok(true, 'setupController called');\n controller.set('omg', 'OVERRIDE');\n },\n\n actions: {\n queryParamsDidChange: function () {\n assert.ok(false, \"queryParamsDidChange shouldn't fire\");\n }\n }\n }));\n\n return this.visitAndAssert('/about').then(function () {\n _this20.transitionTo('index');\n _this20.assertCurrentPath('/?omg=OVERRIDE');\n });\n };\n\n _class.prototype['@test can override incoming QP array values in setupController'] = function (assert) {\n var _this21 = this;\n\n assert.expect(3);\n\n this.router.map(function () {\n this.route('about');\n });\n\n this.setSingleQPController('index', 'omg', ['lol']);\n\n this.add('route:index', _emberRouting.Route.extend({\n setupController: function (controller) {\n assert.ok(true, 'setupController called');\n controller.set('omg', ['OVERRIDE']);\n },\n\n actions: {\n queryParamsDidChange: function () {\n assert.ok(false, \"queryParamsDidChange shouldn't fire\");\n }\n }\n }));\n\n return this.visitAndAssert('/about').then(function () {\n _this21.transitionTo('index');\n _this21.assertCurrentPath('/?omg=' + encodeURIComponent(JSON.stringify(['OVERRIDE'])));\n });\n };\n\n _class.prototype['@test URL transitions that remove QPs still register as QP changes'] = function (assert) {\n var _this22 = this;\n\n assert.expect(2);\n\n this.setSingleQPController('index', 'omg', 'lol');\n\n return this.visit('/?omg=borf').then(function () {\n var indexController = _this22.getController('index');\n assert.equal(indexController.get('omg'), 'borf');\n\n _this22.transitionTo('/');\n assert.equal(indexController.get('omg'), 'lol');\n });\n };\n\n _class.prototype['@test Subresource naming style is supported'] = function (assert) {\n var _this23 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('abc.def', { path: '/abcdef' }, function () {\n this.route('zoo');\n });\n });\n\n this.addTemplate('application', \"{{link-to 'A' 'abc.def' (query-params foo='123') id='one'}}{{link-to 'B' 'abc.def.zoo' (query-params foo='123' bar='456') id='two'}}{{outlet}}\");\n\n this.setSingleQPController('abc.def', 'foo', 'lol');\n this.setSingleQPController('abc.def.zoo', 'bar', 'haha');\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this23.$('#one').attr('href'), '/abcdef?foo=123');\n assert.equal(_this23.$('#two').attr('href'), '/abcdef/zoo?bar=456&foo=123');\n\n (0, _runloop.run)(_this23.$('#one'), 'click');\n _this23.assertCurrentPath('/abcdef?foo=123');\n\n (0, _runloop.run)(_this23.$('#two'), 'click');\n _this23.assertCurrentPath('/abcdef/zoo?bar=456&foo=123');\n });\n };\n\n _class.prototype['@test transitionTo supports query params'] = function () {\n var _this24 = this;\n\n this.setSingleQPController('index', 'foo', 'lol');\n\n return this.visitAndAssert('/').then(function () {\n _this24.transitionTo({ queryParams: { foo: 'borf' } });\n _this24.assertCurrentPath('/?foo=borf', 'shorthand supported');\n\n _this24.transitionTo({ queryParams: { 'index:foo': 'blaf' } });\n _this24.assertCurrentPath('/?foo=blaf', 'longform supported');\n\n _this24.transitionTo({ queryParams: { 'index:foo': false } });\n _this24.assertCurrentPath('/?foo=false', 'longform supported (bool)');\n\n _this24.transitionTo({ queryParams: { foo: false } });\n _this24.assertCurrentPath('/?foo=false', 'shorhand supported (bool)');\n });\n };\n\n _class.prototype['@test transitionTo supports query params (multiple)'] = function () {\n var _this25 = this;\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo', 'bar'],\n foo: 'lol',\n bar: 'wat'\n }));\n\n return this.visitAndAssert('/').then(function () {\n _this25.transitionTo({ queryParams: { foo: 'borf' } });\n _this25.assertCurrentPath('/?foo=borf', 'shorthand supported');\n\n _this25.transitionTo({ queryParams: { 'index:foo': 'blaf' } });\n _this25.assertCurrentPath('/?foo=blaf', 'longform supported');\n\n _this25.transitionTo({ queryParams: { 'index:foo': false } });\n _this25.assertCurrentPath('/?foo=false', 'longform supported (bool)');\n\n _this25.transitionTo({ queryParams: { foo: false } });\n _this25.assertCurrentPath('/?foo=false', 'shorhand supported (bool)');\n });\n };\n\n _class.prototype[\"@test setting controller QP to empty string doesn't generate null in URL\"] = function (assert) {\n var _this26 = this;\n\n assert.expect(1);\n\n this.setSingleQPController('index', 'foo', '123');\n\n return this.visit('/').then(function () {\n var controller = _this26.getController('index');\n\n _this26.expectedPushURL = '/?foo=';\n _this26.setAndFlush(controller, 'foo', '');\n });\n };\n\n _class.prototype[\"@test setting QP to empty string doesn't generate null in URL\"] = function (assert) {\n var _this27 = this;\n\n assert.expect(1);\n\n this.add('route:index', _emberRouting.Route.extend({\n queryParams: {\n foo: {\n defaultValue: '123'\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var controller = _this27.getController('index');\n\n _this27.expectedPushURL = '/?foo=';\n _this27.setAndFlush(controller, 'foo', '');\n });\n };\n\n _class.prototype['@test A default boolean value deserializes QPs as booleans rather than strings'] = function (assert) {\n var _this28 = this;\n\n assert.expect(3);\n\n this.setSingleQPController('index', 'foo', false);\n\n this.add('route:index', _emberRouting.Route.extend({\n model: function (params) {\n assert.equal(params.foo, true, 'model hook received foo as boolean true');\n }\n }));\n\n return this.visit('/?foo=true').then(function () {\n var controller = _this28.getController('index');\n assert.equal(controller.get('foo'), true);\n\n _this28.transitionTo('/?foo=false');\n assert.equal(controller.get('foo'), false);\n });\n };\n\n _class.prototype['@test Query param without value are empty string'] = function (assert) {\n var _this29 = this;\n\n assert.expect(1);\n\n this.add('controller:index', _controller.default.extend({\n queryParams: ['foo'],\n foo: ''\n }));\n\n return this.visit('/?foo=').then(function () {\n var controller = _this29.getController('index');\n assert.equal(controller.get('foo'), '');\n });\n };\n\n _class.prototype['@test Array query params can be set'] = function (assert) {\n var _this30 = this;\n\n assert.expect(2);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.setSingleQPController('home', 'foo', []);\n\n return this.visit('/').then(function () {\n var controller = _this30.getController('home');\n\n _this30.setAndFlush(controller, 'foo', [1, 2]);\n _this30.assertCurrentPath('/?foo=%5B1%2C2%5D');\n\n _this30.setAndFlush(controller, 'foo', [3, 4]);\n _this30.assertCurrentPath('/?foo=%5B3%2C4%5D');\n });\n };\n\n _class.prototype['@test (de)serialization: arrays'] = function (assert) {\n var _this31 = this;\n\n assert.expect(4);\n\n this.setSingleQPController('index', 'foo', [1]);\n\n return this.visitAndAssert('/').then(function () {\n _this31.transitionTo({ queryParams: { foo: [2, 3] } });\n _this31.assertCurrentPath('/?foo=%5B2%2C3%5D', 'shorthand supported');\n _this31.transitionTo({ queryParams: { 'index:foo': [4, 5] } });\n _this31.assertCurrentPath('/?foo=%5B4%2C5%5D', 'longform supported');\n _this31.transitionTo({ queryParams: { foo: [] } });\n _this31.assertCurrentPath('/?foo=%5B%5D', 'longform supported');\n });\n };\n\n _class.prototype['@test Url with array query param sets controller property to array'] = function (assert) {\n var _this32 = this;\n\n assert.expect(1);\n\n this.setSingleQPController('index', 'foo', '');\n\n return this.visit('/?foo[]=1&foo[]=2&foo[]=3').then(function () {\n var controller = _this32.getController('index');\n assert.deepEqual(controller.get('foo'), ['1', '2', '3']);\n });\n };\n\n _class.prototype['@test Array query params can be pushed/popped'] = function (assert) {\n var _this33 = this;\n\n assert.expect(17);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n this.setSingleQPController('home', 'foo', (0, _emberRuntime.A)());\n\n return this.visitAndAssert('/').then(function () {\n var controller = _this33.getController('home');\n\n (0, _runloop.run)(controller.foo, 'pushObject', 1);\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'popObject');\n _this33.assertCurrentPath('/');\n assert.deepEqual(controller.foo, []);\n\n (0, _runloop.run)(controller.foo, 'pushObject', 1);\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'popObject');\n _this33.assertCurrentPath('/');\n assert.deepEqual(controller.foo, []);\n\n (0, _runloop.run)(controller.foo, 'pushObject', 1);\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'pushObject', 2);\n _this33.assertCurrentPath('/?foo=%5B1%2C2%5D');\n assert.deepEqual(controller.foo, [1, 2]);\n\n (0, _runloop.run)(controller.foo, 'popObject');\n _this33.assertCurrentPath('/?foo=%5B1%5D');\n assert.deepEqual(controller.foo, [1]);\n\n (0, _runloop.run)(controller.foo, 'unshiftObject', 'lol');\n _this33.assertCurrentPath('/?foo=%5B%22lol%22%2C1%5D');\n assert.deepEqual(controller.foo, ['lol', 1]);\n });\n };\n\n _class.prototype[\"@test Overwriting with array with same content shouldn't refire update\"] = function (assert) {\n var _this34 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('home', { path: '/' });\n });\n\n var modelCount = 0;\n this.add('route:home', _emberRouting.Route.extend({\n model: function () {\n modelCount++;\n }\n }));\n\n this.setSingleQPController('home', 'foo', (0, _emberRuntime.A)([1]));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(modelCount, 1);\n\n var controller = _this34.getController('home');\n _this34.setAndFlush(controller, 'model', (0, _emberRuntime.A)([1]));\n\n assert.equal(modelCount, 1);\n _this34.assertCurrentPath('/');\n });\n };\n\n _class.prototype['@test Defaulting to params hash as the model should not result in that params object being watched'] = function (assert) {\n var _this35 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('other');\n });\n\n // This causes the params hash, which is returned as a route's\n // model if no other model could be resolved given the provided\n // params (and no custom model hook was defined), to be watched,\n // unless we return a copy of the params hash.\n this.setSingleQPController('application', 'woot', 'wat');\n\n this.add('route:other', _emberRouting.Route.extend({\n model: function (p, trans) {\n var m = (0, _emberMeta.peekMeta)(trans.params.application);\n assert.ok(m === undefined, \"A meta object isn't constructed for this params POJO\");\n }\n }));\n\n return this.visit('/').then(function () {\n _this35.transitionTo('other');\n });\n };\n\n _class.prototype['@test Setting bound query param property to null or undefined does not serialize to url'] = function (assert) {\n var _this36 = this;\n\n assert.expect(9);\n\n this.router.map(function () {\n this.route('home');\n });\n\n this.setSingleQPController('home', 'foo', [1, 2]);\n\n return this.visitAndAssert('/home').then(function () {\n var controller = _this36.getController('home');\n\n assert.deepEqual(controller.get('foo'), [1, 2]);\n _this36.assertCurrentPath('/home');\n\n _this36.setAndFlush(controller, 'foo', (0, _emberRuntime.A)([1, 3]));\n _this36.assertCurrentPath('/home?foo=%5B1%2C3%5D');\n\n return _this36.transitionTo('/home').then(function () {\n assert.deepEqual(controller.get('foo'), [1, 2]);\n _this36.assertCurrentPath('/home');\n\n _this36.setAndFlush(controller, 'foo', null);\n _this36.assertCurrentPath('/home', 'Setting property to null');\n\n _this36.setAndFlush(controller, 'foo', (0, _emberRuntime.A)([1, 3]));\n _this36.assertCurrentPath('/home?foo=%5B1%2C3%5D');\n\n _this36.setAndFlush(controller, 'foo', undefined);\n _this36.assertCurrentPath('/home', 'Setting property to undefined');\n });\n });\n };\n\n _class.prototype['@test {{link-to}} with null or undefined QPs does not get serialized into url'] = function (assert) {\n var _this37 = this;\n\n assert.expect(3);\n\n this.addTemplate('home', \"{{link-to 'Home' 'home' (query-params foo=nullValue) id='null-link'}}{{link-to 'Home' 'home' (query-params foo=undefinedValue) id='undefined-link'}}\");\n\n this.router.map(function () {\n this.route('home');\n });\n\n this.setSingleQPController('home', 'foo', [], {\n nullValue: null,\n undefinedValue: undefined\n });\n\n return this.visitAndAssert('/home').then(function () {\n assert.equal(_this37.$('#null-link').attr('href'), '/home');\n assert.equal(_this37.$('#undefined-link').attr('href'), '/home');\n });\n };\n\n _class.prototype[\"@test A child of a resource route still defaults to parent route's model even if the child route has a query param\"] = function (assert) {\n assert.expect(2);\n\n this.setSingleQPController('index', 'woot', undefined, {\n woot: undefined\n });\n\n this.add('route:application', _emberRouting.Route.extend({\n model: function () /* p, trans */{\n return { woot: true };\n }\n }));\n\n this.add('route:index', _emberRouting.Route.extend({\n setupController: function (controller, model) {\n assert.deepEqual(model, { woot: true }, 'index route inherited model route from parent route');\n }\n }));\n\n return this.visitAndAssert('/');\n };\n\n _class.prototype['@test opting into replace does not affect transitions between routes'] = function (assert) {\n var _this38 = this;\n\n assert.expect(5);\n\n this.addTemplate('application', \"{{link-to 'Foo' 'foo' id='foo-link'}}{{link-to 'Bar' 'bar' id='bar-no-qp-link'}}{{link-to 'Bar' 'bar' (query-params raytiley='isthebest') id='bar-link'}}{{outlet}}\");\n\n this.router.map(function () {\n this.route('foo');\n this.route('bar');\n });\n\n this.setSingleQPController('bar', 'raytiley', 'israd');\n\n this.add('route:bar', _emberRouting.Route.extend({\n queryParams: {\n raytiley: {\n replace: true\n }\n }\n }));\n\n return this.visit('/').then(function () {\n var controller = _this38.getController('bar');\n\n _this38.expectedPushURL = '/foo';\n (0, _runloop.run)(document.getElementById('foo-link'), 'click');\n\n _this38.expectedPushURL = '/bar';\n (0, _runloop.run)(document.getElementById('bar-no-qp-link'), 'click');\n\n _this38.expectedReplaceURL = '/bar?raytiley=woot';\n _this38.setAndFlush(controller, 'raytiley', 'woot');\n\n _this38.expectedPushURL = '/foo';\n (0, _runloop.run)(document.getElementById('foo-link'), 'click');\n\n _this38.expectedPushURL = '/bar?raytiley=isthebest';\n (0, _runloop.run)(document.getElementById('bar-link'), 'click');\n });\n };\n\n _class.prototype[\"@test undefined isn't serialized or deserialized into a string\"] = function (assert) {\n var _this39 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('example');\n });\n\n this.addTemplate('application', \"{{link-to 'Example' 'example' (query-params foo=undefined) id='the-link'}}\");\n\n this.setSingleQPController('example', 'foo', undefined, {\n foo: undefined\n });\n\n this.add('route:example', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: undefined });\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this39.$('#the-link').attr('href'), '/example', 'renders without undefined qp serialized');\n\n return _this39.transitionTo('example', {\n queryParams: { foo: undefined }\n }).then(function () {\n _this39.assertCurrentPath('/example');\n });\n });\n };\n\n _class.prototype['@test when refreshModel is true and loading hook is undefined, model hook will rerun when QPs change even if previous did not finish'] = function () {\n return this.refreshModelWhileLoadingTest();\n };\n\n _class.prototype['@test when refreshModel is true and loading hook returns false, model hook will rerun when QPs change even if previous did not finish'] = function () {\n return this.refreshModelWhileLoadingTest(false);\n };\n\n _class.prototype['@test when refreshModel is true and loading hook returns true, model hook will rerun when QPs change even if previous did not finish'] = function () {\n return this.refreshModelWhileLoadingTest(true);\n };\n\n _class.prototype[\"@test warn user that Route's queryParams configuration must be an Object, not an Array\"] = function (assert) {\n var _this40 = this;\n\n assert.expect(1);\n\n this.add('route:application', _emberRouting.Route.extend({\n queryParams: [{ commitBy: { replace: true } }]\n }));\n\n expectAssertion(function () {\n _this40.visit('/');\n }, 'You passed in `[{\"commitBy\":{\"replace\":true}}]` as the value for `queryParams` but `queryParams` cannot be an Array');\n };\n\n _class.prototype['@test handle route names that clash with Object.prototype properties'] = function (assert) {\n var _this41 = this;\n\n assert.expect(1);\n\n this.router.map(function () {\n this.route('constructor');\n });\n\n this.add('route:constructor', _emberRouting.Route.extend({\n queryParams: {\n foo: {\n defaultValue: '123'\n }\n }\n }));\n\n return this.visit('/').then(function () {\n _this41.transitionTo('constructor', { queryParams: { foo: '999' } });\n var controller = _this41.getController('constructor');\n assert.equal((0, _emberMetal.get)(controller, 'foo'), '999');\n });\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/model_dependent_state_with_query_params_test', ['ember-babel', '@ember/controller', 'ember-runtime', 'ember-routing', '@ember/runloop', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _controller, _emberRuntime, _emberRouting, _runloop, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var ModelDependentQPTestCase = function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(ModelDependentQPTestCase, _QueryParamTestCase);\n\n function ModelDependentQPTestCase() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n ModelDependentQPTestCase.prototype.boot = function () {\n this.setupApplication();\n return this.visitApplication();\n };\n\n ModelDependentQPTestCase.prototype.teardown = function () {\n var _QueryParamTestCase$p;\n\n (_QueryParamTestCase$p = _QueryParamTestCase.prototype.teardown).call.apply(_QueryParamTestCase$p, [this].concat(Array.prototype.slice.call(arguments)));\n this.assert.ok(!this.expectedModelHookParams, 'there should be no pending expectation of expected model hook params');\n };\n\n ModelDependentQPTestCase.prototype.reopenController = function (name, options) {\n this.application.resolveRegistration('controller:' + name).reopen(options);\n };\n\n ModelDependentQPTestCase.prototype.reopenRoute = function (name, options) {\n this.application.resolveRegistration('route:' + name).reopen(options);\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest1 = function (urlPrefix) {\n var _this2 = this;\n\n var assert = this.assert;\n\n assert.expect(14);\n\n return this.boot().then(function () {\n (0, _runloop.run)(_this2.$link1, 'click');\n _this2.assertCurrentPath(urlPrefix + '/a-1');\n\n _this2.setAndFlush(_this2.controller, 'q', 'lol');\n\n assert.equal(_this2.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this2.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this2.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n (0, _runloop.run)(_this2.$link2, 'click');\n\n assert.equal(_this2.controller.get('q'), 'wat');\n assert.equal(_this2.controller.get('z'), 0);\n assert.deepEqual(_this2.controller.get('model'), { id: 'a-2' });\n assert.equal(_this2.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this2.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this2.$link3.getAttribute('href'), urlPrefix + '/a-3');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest2 = function (urlPrefix) {\n var _this3 = this;\n\n var assert = this.assert;\n\n assert.expect(24);\n\n return this.boot().then(function () {\n _this3.expectedModelHookParams = { id: 'a-1', q: 'lol', z: 0 };\n _this3.transitionTo(urlPrefix + '/a-1?q=lol');\n\n assert.deepEqual(_this3.controller.get('model'), { id: 'a-1' });\n assert.equal(_this3.controller.get('q'), 'lol');\n assert.equal(_this3.controller.get('z'), 0);\n assert.equal(_this3.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this3.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this3.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this3.expectedModelHookParams = { id: 'a-2', q: 'lol', z: 0 };\n _this3.transitionTo(urlPrefix + '/a-2?q=lol');\n\n assert.deepEqual(_this3.controller.get('model'), { id: 'a-2' }, \"controller's model changed to a-2\");\n assert.equal(_this3.controller.get('q'), 'lol');\n assert.equal(_this3.controller.get('z'), 0);\n assert.equal(_this3.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this3.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this3.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this3.expectedModelHookParams = { id: 'a-3', q: 'lol', z: 123 };\n _this3.transitionTo(urlPrefix + '/a-3?q=lol&z=123');\n\n assert.equal(_this3.controller.get('q'), 'lol');\n assert.equal(_this3.controller.get('z'), 123);\n assert.equal(_this3.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this3.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this3.$link3.getAttribute('href'), urlPrefix + '/a-3?q=lol&z=123');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest3 = function (urlPrefix, articleLookup) {\n var _this4 = this;\n\n var assert = this.assert;\n\n assert.expect(32);\n\n this.addTemplate('application', '{{#each articles as |a|}} {{link-to \\'Article\\' \\'' + articleLookup + '\\' a.id id=a.id}} {{/each}}');\n\n return this.boot().then(function () {\n _this4.expectedModelHookParams = { id: 'a-1', q: 'wat', z: 0 };\n _this4.transitionTo(articleLookup, 'a-1');\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-1' });\n assert.equal(_this4.controller.get('q'), 'wat');\n assert.equal(_this4.controller.get('z'), 0);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this4.expectedModelHookParams = { id: 'a-2', q: 'lol', z: 0 };\n _this4.transitionTo(articleLookup, 'a-2', { queryParams: { q: 'lol' } });\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-2' });\n assert.equal(_this4.controller.get('q'), 'lol');\n assert.equal(_this4.controller.get('z'), 0);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3');\n\n _this4.expectedModelHookParams = { id: 'a-3', q: 'hay', z: 0 };\n _this4.transitionTo(articleLookup, 'a-3', { queryParams: { q: 'hay' } });\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-3' });\n assert.equal(_this4.controller.get('q'), 'hay');\n assert.equal(_this4.controller.get('z'), 0);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3?q=hay');\n\n _this4.expectedModelHookParams = { id: 'a-2', q: 'lol', z: 1 };\n _this4.transitionTo(articleLookup, 'a-2', { queryParams: { z: 1 } });\n\n assert.deepEqual(_this4.controller.get('model'), { id: 'a-2' });\n assert.equal(_this4.controller.get('q'), 'lol');\n assert.equal(_this4.controller.get('z'), 1);\n assert.equal(_this4.$link1.getAttribute('href'), urlPrefix + '/a-1');\n assert.equal(_this4.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol&z=1');\n assert.equal(_this4.$link3.getAttribute('href'), urlPrefix + '/a-3?q=hay');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest4 = function (urlPrefix, articleLookup) {\n var _this5 = this;\n\n var assert = this.assert;\n\n assert.expect(24);\n\n this.setupApplication();\n\n this.reopenController(articleLookup, {\n queryParams: { q: { scope: 'controller' } }\n });\n\n return this.visitApplication().then(function () {\n (0, _runloop.run)(_this5.$link1, 'click');\n _this5.assertCurrentPath(urlPrefix + '/a-1');\n\n _this5.setAndFlush(_this5.controller, 'q', 'lol');\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=lol');\n\n (0, _runloop.run)(_this5.$link2, 'click');\n\n assert.equal(_this5.controller.get('q'), 'lol');\n assert.equal(_this5.controller.get('z'), 0);\n assert.deepEqual(_this5.controller.get('model'), { id: 'a-2' });\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=lol');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=lol');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=lol');\n\n _this5.expectedModelHookParams = { id: 'a-3', q: 'haha', z: 123 };\n _this5.transitionTo(urlPrefix + '/a-3?q=haha&z=123');\n\n assert.deepEqual(_this5.controller.get('model'), { id: 'a-3' });\n assert.equal(_this5.controller.get('q'), 'haha');\n assert.equal(_this5.controller.get('z'), 123);\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=haha');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=haha');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=haha&z=123');\n\n _this5.setAndFlush(_this5.controller, 'q', 'woot');\n\n assert.equal(_this5.$link1.getAttribute('href'), urlPrefix + '/a-1?q=woot');\n assert.equal(_this5.$link2.getAttribute('href'), urlPrefix + '/a-2?q=woot');\n assert.equal(_this5.$link3.getAttribute('href'), urlPrefix + '/a-3?q=woot&z=123');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest5 = function (urlPrefix, commentsLookupKey) {\n var _this6 = this;\n\n var assert = this.assert;\n\n assert.expect(12);\n\n return this.boot().then(function () {\n _this6.transitionTo(commentsLookupKey, 'a-1');\n\n var commentsCtrl = _this6.getController(commentsLookupKey);\n assert.equal(commentsCtrl.get('page'), 1);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments');\n\n _this6.setAndFlush(commentsCtrl, 'page', 2);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments?page=2');\n\n _this6.setAndFlush(commentsCtrl, 'page', 3);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments?page=3');\n\n _this6.transitionTo(commentsLookupKey, 'a-2');\n assert.equal(commentsCtrl.get('page'), 1);\n _this6.assertCurrentPath(urlPrefix + '/a-2/comments');\n\n _this6.transitionTo(commentsLookupKey, 'a-1');\n assert.equal(commentsCtrl.get('page'), 3);\n _this6.assertCurrentPath(urlPrefix + '/a-1/comments?page=3');\n });\n };\n\n ModelDependentQPTestCase.prototype.queryParamsStickyTest6 = function (urlPrefix, articleLookup, commentsLookup) {\n var _this7 = this;\n\n var assert = this.assert;\n\n assert.expect(13);\n\n this.setupApplication();\n\n this.reopenRoute(articleLookup, {\n resetController: function (controller, isExiting) {\n this.controllerFor(commentsLookup).set('page', 1);\n if (isExiting) {\n controller.set('q', 'imdone');\n }\n }\n });\n\n this.addTemplate('about', '{{link-to \\'A\\' \\'' + commentsLookup + '\\' \\'a-1\\' id=\\'one\\'}} {{link-to \\'B\\' \\'' + commentsLookup + '\\' \\'a-2\\' id=\\'two\\'}}');\n\n return this.visitApplication().then(function () {\n _this7.transitionTo(commentsLookup, 'a-1');\n\n var commentsCtrl = _this7.getController(commentsLookup);\n assert.equal(commentsCtrl.get('page'), 1);\n _this7.assertCurrentPath(urlPrefix + '/a-1/comments');\n\n _this7.setAndFlush(commentsCtrl, 'page', 2);\n _this7.assertCurrentPath(urlPrefix + '/a-1/comments?page=2');\n\n _this7.transitionTo(commentsLookup, 'a-2');\n assert.equal(commentsCtrl.get('page'), 1);\n assert.equal(_this7.controller.get('q'), 'wat');\n\n _this7.transitionTo(commentsLookup, 'a-1');\n\n _this7.assertCurrentPath(urlPrefix + '/a-1/comments');\n assert.equal(commentsCtrl.get('page'), 1);\n\n _this7.transitionTo('about');\n assert.equal(document.getElementById('one').getAttribute('href'), urlPrefix + '/a-1/comments?q=imdone');\n assert.equal(document.getElementById('two').getAttribute('href'), urlPrefix + '/a-2/comments');\n });\n };\n\n return ModelDependentQPTestCase;\n }(_internalTestHelpers.QueryParamTestCase);\n\n (0, _internalTestHelpers.moduleFor)('Query Params - model-dependent state', function (_ModelDependentQPTest) {\n (0, _emberBabel.inherits)(_class, _ModelDependentQPTest);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ModelDependentQPTest.apply(this, arguments));\n }\n\n _class.prototype.setupApplication = function () {\n this.router.map(function () {\n this.route('article', { path: '/a/:id' }, function () {\n this.route('comments', { resetNamespace: true });\n });\n this.route('about');\n });\n\n var articles = (0, _emberRuntime.A)([{ id: 'a-1' }, { id: 'a-2' }, { id: 'a-3' }]);\n\n this.add('controller:application', _controller.default.extend({\n articles: articles\n }));\n\n var self = this;\n var assert = this.assert;\n this.add('route:article', _emberRouting.Route.extend({\n model: function (params) {\n if (self.expectedModelHookParams) {\n assert.deepEqual(params, self.expectedModelHookParams, 'the ArticleRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedModelHookParams = null;\n }\n return articles.findBy('id', params.id);\n }\n }));\n\n this.add('controller:article', _controller.default.extend({\n queryParams: ['q', 'z'],\n q: 'wat',\n z: 0\n }));\n\n this.add('controller:comments', _controller.default.extend({\n queryParams: 'page',\n page: 1\n }));\n\n this.addTemplate('application', \"{{#each articles as |a|}} 1{{link-to 'Article' 'article' a id=a.id}} {{/each}} {{outlet}}\");\n };\n\n _class.prototype.visitApplication = function () {\n var _this9 = this;\n\n return this.visit('/').then(function () {\n var assert = _this9.assert;\n\n _this9.$link1 = document.getElementById('a-1');\n _this9.$link2 = document.getElementById('a-2');\n _this9.$link3 = document.getElementById('a-3');\n\n assert.equal(_this9.$link1.getAttribute('href'), '/a/a-1');\n assert.equal(_this9.$link2.getAttribute('href'), '/a/a-2');\n assert.equal(_this9.$link3.getAttribute('href'), '/a/a-3');\n\n _this9.controller = _this9.getController('article');\n });\n };\n\n _class.prototype[\"@test query params have 'model' stickiness by default\"] = function () {\n return this.queryParamsStickyTest1('/a');\n };\n\n _class.prototype[\"@test query params have 'model' stickiness by default (url changes)\"] = function () {\n return this.queryParamsStickyTest2('/a');\n };\n\n _class.prototype[\"@test query params have 'model' stickiness by default (params-based transitions)\"] = function () {\n return this.queryParamsStickyTest3('/a', 'article');\n };\n\n _class.prototype[\"@test 'controller' stickiness shares QP state between models\"] = function () {\n return this.queryParamsStickyTest4('/a', 'article');\n };\n\n _class.prototype[\"@test 'model' stickiness is scoped to current or first dynamic parent route\"] = function () {\n return this.queryParamsStickyTest5('/a', 'comments');\n };\n\n _class.prototype['@test can reset query params using the resetController hook'] = function () {\n return this.queryParamsStickyTest6('/a', 'article', 'comments');\n };\n\n return _class;\n }(ModelDependentQPTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Query Params - model-dependent state (nested)', function (_ModelDependentQPTest2) {\n (0, _emberBabel.inherits)(_class2, _ModelDependentQPTest2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ModelDependentQPTest2.apply(this, arguments));\n }\n\n _class2.prototype.setupApplication = function () {\n this.router.map(function () {\n this.route('site', function () {\n this.route('article', { path: '/a/:id' }, function () {\n this.route('comments');\n });\n });\n this.route('about');\n });\n\n var site_articles = (0, _emberRuntime.A)([{ id: 'a-1' }, { id: 'a-2' }, { id: 'a-3' }]);\n\n this.add('controller:application', _controller.default.extend({\n articles: site_articles\n }));\n\n var self = this;\n var assert = this.assert;\n this.add('route:site.article', _emberRouting.Route.extend({\n model: function (params) {\n if (self.expectedModelHookParams) {\n assert.deepEqual(params, self.expectedModelHookParams, 'the ArticleRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedModelHookParams = null;\n }\n return site_articles.findBy('id', params.id);\n }\n }));\n\n this.add('controller:site.article', _controller.default.extend({\n queryParams: ['q', 'z'],\n q: 'wat',\n z: 0\n }));\n\n this.add('controller:site.article.comments', _controller.default.extend({\n queryParams: 'page',\n page: 1\n }));\n\n this.addTemplate('application', \"{{#each articles as |a|}} {{link-to 'Article' 'site.article' a id=a.id}} {{/each}} {{outlet}}\");\n };\n\n _class2.prototype.visitApplication = function () {\n var _this11 = this;\n\n return this.visit('/').then(function () {\n var assert = _this11.assert;\n\n _this11.$link1 = document.getElementById('a-1');\n _this11.$link2 = document.getElementById('a-2');\n _this11.$link3 = document.getElementById('a-3');\n\n assert.equal(_this11.$link1.getAttribute('href'), '/site/a/a-1');\n assert.equal(_this11.$link2.getAttribute('href'), '/site/a/a-2');\n assert.equal(_this11.$link3.getAttribute('href'), '/site/a/a-3');\n\n _this11.controller = _this11.getController('site.article');\n });\n };\n\n _class2.prototype[\"@test query params have 'model' stickiness by default\"] = function () {\n return this.queryParamsStickyTest1('/site/a');\n };\n\n _class2.prototype[\"@test query params have 'model' stickiness by default (url changes)\"] = function () {\n return this.queryParamsStickyTest2('/site/a');\n };\n\n _class2.prototype[\"@test query params have 'model' stickiness by default (params-based transitions)\"] = function () {\n return this.queryParamsStickyTest3('/site/a', 'site.article');\n };\n\n _class2.prototype[\"@test 'controller' stickiness shares QP state between models\"] = function () {\n return this.queryParamsStickyTest4('/site/a', 'site.article');\n };\n\n _class2.prototype[\"@test 'model' stickiness is scoped to current or first dynamic parent route\"] = function () {\n return this.queryParamsStickyTest5('/site/a', 'site.article.comments');\n };\n\n _class2.prototype['@test can reset query params using the resetController hook'] = function () {\n return this.queryParamsStickyTest6('/site/a', 'site.article', 'site.article.comments');\n };\n\n return _class2;\n }(ModelDependentQPTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Query Params - model-dependent state (nested & more than 1 dynamic segment)', function (_ModelDependentQPTest3) {\n (0, _emberBabel.inherits)(_class3, _ModelDependentQPTest3);\n\n function _class3() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ModelDependentQPTest3.apply(this, arguments));\n }\n\n _class3.prototype.setupApplication = function () {\n this.router.map(function () {\n this.route('site', { path: '/site/:site_id' }, function () {\n this.route('article', { path: '/a/:article_id' }, function () {\n this.route('comments');\n });\n });\n });\n\n var sites = (0, _emberRuntime.A)([{ id: 's-1' }, { id: 's-2' }, { id: 's-3' }]);\n var site_articles = (0, _emberRuntime.A)([{ id: 'a-1' }, { id: 'a-2' }, { id: 'a-3' }]);\n\n this.add('controller:application', _controller.default.extend({\n siteArticles: site_articles,\n sites: sites,\n allSitesAllArticles: (0, _emberMetal.computed)({\n get: function () {\n var ret = [];\n var siteArticles = this.siteArticles;\n var sites = this.sites;\n sites.forEach(function (site) {\n ret = ret.concat(siteArticles.map(function (article) {\n return {\n id: site.id + '-' + article.id,\n site_id: site.id,\n article_id: article.id\n };\n }));\n });\n return ret;\n }\n })\n }));\n\n var self = this;\n var assert = this.assert;\n this.add('route:site', _emberRouting.Route.extend({\n model: function (params) {\n if (self.expectedSiteModelHookParams) {\n assert.deepEqual(params, self.expectedSiteModelHookParams, 'the SiteRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedSiteModelHookParams = null;\n }\n return sites.findBy('id', params.site_id);\n }\n }));\n\n this.add('route:site.article', _emberRouting.Route.extend({\n model: function (params) {\n if (self.expectedArticleModelHookParams) {\n assert.deepEqual(params, self.expectedArticleModelHookParams, 'the SiteArticleRoute model hook received the expected merged dynamic segment + query params hash');\n self.expectedArticleModelHookParams = null;\n }\n return site_articles.findBy('id', params.article_id);\n }\n }));\n\n this.add('controller:site', _controller.default.extend({\n queryParams: ['country'],\n country: 'au'\n }));\n\n this.add('controller:site.article', _controller.default.extend({\n queryParams: ['q', 'z'],\n q: 'wat',\n z: 0\n }));\n\n this.add('controller:site.article.comments', _controller.default.extend({\n queryParams: ['page'],\n page: 1\n }));\n\n this.addTemplate('application', \"{{#each allSitesAllArticles as |a|}} {{#link-to 'site.article' a.site_id a.article_id id=a.id}}Article [{{a.site_id}}] [{{a.article_id}}]{{/link-to}} {{/each}} {{outlet}}\");\n };\n\n _class3.prototype.visitApplication = function () {\n var _this13 = this;\n\n return this.visit('/').then(function () {\n var assert = _this13.assert;\n\n _this13.links = {};\n _this13.links['s-1-a-1'] = document.getElementById('s-1-a-1');\n _this13.links['s-1-a-2'] = document.getElementById('s-1-a-2');\n _this13.links['s-1-a-3'] = document.getElementById('s-1-a-3');\n _this13.links['s-2-a-1'] = document.getElementById('s-2-a-1');\n _this13.links['s-2-a-2'] = document.getElementById('s-2-a-2');\n _this13.links['s-2-a-3'] = document.getElementById('s-2-a-3');\n _this13.links['s-3-a-1'] = document.getElementById('s-3-a-1');\n _this13.links['s-3-a-2'] = document.getElementById('s-3-a-2');\n _this13.links['s-3-a-3'] = document.getElementById('s-3-a-3');\n\n assert.equal(_this13.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this13.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this13.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this13.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this13.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this13.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this13.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this13.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this13.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this13.site_controller = _this13.getController('site');\n _this13.article_controller = _this13.getController('site.article');\n });\n };\n\n _class3.prototype[\"@test query params have 'model' stickiness by default\"] = function (assert) {\n var _this14 = this;\n\n assert.expect(59);\n\n return this.boot().then(function () {\n (0, _runloop.run)(_this14.links['s-1-a-1'], 'click');\n assert.deepEqual(_this14.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this14.article_controller.get('model'), { id: 'a-1' });\n _this14.assertCurrentPath('/site/s-1/a/a-1');\n\n _this14.setAndFlush(_this14.article_controller, 'q', 'lol');\n\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this14.setAndFlush(_this14.site_controller, 'country', 'us');\n\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?country=us&q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?country=us');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?country=us');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n (0, _runloop.run)(_this14.links['s-1-a-2'], 'click');\n\n assert.equal(_this14.site_controller.get('country'), 'us');\n assert.equal(_this14.article_controller.get('q'), 'wat');\n assert.equal(_this14.article_controller.get('z'), 0);\n assert.deepEqual(_this14.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this14.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?country=us&q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?country=us');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?country=us');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n (0, _runloop.run)(_this14.links['s-2-a-2'], 'click');\n\n assert.equal(_this14.site_controller.get('country'), 'au');\n assert.equal(_this14.article_controller.get('q'), 'wat');\n assert.equal(_this14.article_controller.get('z'), 0);\n assert.deepEqual(_this14.site_controller.get('model'), { id: 's-2' });\n assert.deepEqual(_this14.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this14.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?country=us&q=lol');\n assert.equal(_this14.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?country=us');\n assert.equal(_this14.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?country=us');\n assert.equal(_this14.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this14.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this14.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this14.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this14.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this14.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n });\n };\n\n _class3.prototype[\"@test query params have 'model' stickiness by default (url changes)\"] = function (assert) {\n var _this15 = this;\n\n assert.expect(88);\n\n return this.boot().then(function () {\n _this15.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'lol',\n z: 0\n };\n _this15.transitionTo('/site/s-1/a/a-1?q=lol');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-1' }, \"site controller's model is s-1\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-1' }, \"article controller's model is a-1\");\n assert.equal(_this15.site_controller.get('country'), 'au');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 0);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'lol',\n z: 0\n };\n _this15.transitionTo('/site/s-2/a/a-1?country=us&q=lol');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-2' }, \"site controller's model is s-2\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-1' }, \"article controller's model is a-1\");\n assert.equal(_this15.site_controller.get('country'), 'us');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 0);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 0\n };\n _this15.transitionTo('/site/s-2/a/a-2?country=us&q=lol');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-2' }, \"site controller's model is s-2\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-2' }, \"article controller's model is a-2\");\n assert.equal(_this15.site_controller.get('country'), 'us');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 0);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'lol',\n z: 123\n };\n _this15.transitionTo('/site/s-2/a/a-3?country=us&q=lol&z=123');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-2' }, \"site controller's model is s-2\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-3' }, \"article controller's model is a-3\");\n assert.equal(_this15.site_controller.get('country'), 'us');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 123);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=lol&z=123');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=lol&z=123');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=lol&z=123');\n\n _this15.expectedSiteModelHookParams = { site_id: 's-3', country: 'nz' };\n _this15.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'lol',\n z: 123\n };\n _this15.transitionTo('/site/s-3/a/a-3?country=nz&q=lol&z=123');\n\n assert.deepEqual(_this15.site_controller.get('model'), { id: 's-3' }, \"site controller's model is s-3\");\n assert.deepEqual(_this15.article_controller.get('model'), { id: 'a-3' }, \"article controller's model is a-3\");\n assert.equal(_this15.site_controller.get('country'), 'nz');\n assert.equal(_this15.article_controller.get('q'), 'lol');\n assert.equal(_this15.article_controller.get('z'), 123);\n assert.equal(_this15.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=lol');\n assert.equal(_this15.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this15.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=lol&z=123');\n assert.equal(_this15.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol');\n assert.equal(_this15.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=lol&z=123');\n assert.equal(_this15.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?country=nz&q=lol');\n assert.equal(_this15.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?country=nz&q=lol');\n assert.equal(_this15.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?country=nz&q=lol&z=123');\n });\n };\n\n _class3.prototype[\"@test query params have 'model' stickiness by default (params-based transitions)\"] = function (assert) {\n var _this16 = this;\n\n assert.expect(118);\n\n return this.boot().then(function () {\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'wat',\n z: 0\n };\n _this16.transitionTo('site.article', 's-1', 'a-1');\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-1' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'wat');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 0\n };\n _this16.transitionTo('site.article', 's-1', 'a-2', {\n queryParams: { q: 'lol' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'lol');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?q=lol');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'hay',\n z: 0\n };\n _this16.transitionTo('site.article', 's-1', 'a-3', {\n queryParams: { q: 'hay' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-3' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'hay');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?q=lol');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-1', country: 'au' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 1\n };\n _this16.transitionTo('site.article', 's-1', 'a-2', {\n queryParams: { z: 1 }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-1' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this16.site_controller.get('country'), 'au');\n assert.equal(_this16.article_controller.get('q'), 'lol');\n assert.equal(_this16.article_controller.get('z'), 1);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-2',\n q: 'lol',\n z: 1\n };\n _this16.transitionTo('site.article', 's-2', 'a-2', {\n queryParams: { country: 'us' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-2' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-2' });\n assert.equal(_this16.site_controller.get('country'), 'us');\n assert.equal(_this16.article_controller.get('q'), 'lol');\n assert.equal(_this16.article_controller.get('z'), 1);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-2', country: 'us' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-1',\n q: 'yeah',\n z: 0\n };\n _this16.transitionTo('site.article', 's-2', 'a-1', {\n queryParams: { q: 'yeah' }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-2' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-1' });\n assert.equal(_this16.site_controller.get('country'), 'us');\n assert.equal(_this16.article_controller.get('q'), 'yeah');\n assert.equal(_this16.article_controller.get('z'), 0);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=yeah');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=yeah');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=hay');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?q=yeah');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?q=hay');\n\n _this16.expectedSiteModelHookParams = { site_id: 's-3', country: 'nz' };\n _this16.expectedArticleModelHookParams = {\n article_id: 'a-3',\n q: 'hay',\n z: 3\n };\n _this16.transitionTo('site.article', 's-3', 'a-3', {\n queryParams: { country: 'nz', z: 3 }\n });\n\n assert.deepEqual(_this16.site_controller.get('model'), { id: 's-3' });\n assert.deepEqual(_this16.article_controller.get('model'), { id: 'a-3' });\n assert.equal(_this16.site_controller.get('country'), 'nz');\n assert.equal(_this16.article_controller.get('q'), 'hay');\n assert.equal(_this16.article_controller.get('z'), 3);\n assert.equal(_this16.links['s-1-a-1'].getAttribute('href'), '/site/s-1/a/a-1?q=yeah');\n assert.equal(_this16.links['s-1-a-2'].getAttribute('href'), '/site/s-1/a/a-2?q=lol&z=1');\n assert.equal(_this16.links['s-1-a-3'].getAttribute('href'), '/site/s-1/a/a-3?q=hay&z=3');\n assert.equal(_this16.links['s-2-a-1'].getAttribute('href'), '/site/s-2/a/a-1?country=us&q=yeah');\n assert.equal(_this16.links['s-2-a-2'].getAttribute('href'), '/site/s-2/a/a-2?country=us&q=lol&z=1');\n assert.equal(_this16.links['s-2-a-3'].getAttribute('href'), '/site/s-2/a/a-3?country=us&q=hay&z=3');\n assert.equal(_this16.links['s-3-a-1'].getAttribute('href'), '/site/s-3/a/a-1?country=nz&q=yeah');\n assert.equal(_this16.links['s-3-a-2'].getAttribute('href'), '/site/s-3/a/a-2?country=nz&q=lol&z=1');\n assert.equal(_this16.links['s-3-a-3'].getAttribute('href'), '/site/s-3/a/a-3?country=nz&q=hay&z=3');\n });\n };\n\n return _class3;\n }(ModelDependentQPTestCase));\n});","enifed('ember/tests/routing/query_params_test/overlapping_query_params_test', ['ember-babel', '@ember/controller', 'ember-routing', '@ember/runloop', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _controller, _emberRouting, _runloop, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - overlapping query param property names', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.setupBase = function () {\n this.router.map(function () {\n this.route('parent', function () {\n this.route('child');\n });\n });\n\n return this.visit('/parent/child');\n };\n\n _class.prototype['@test can remap same-named qp props'] = function (assert) {\n var _this2 = this;\n\n assert.expect(7);\n\n this.setMappedQPController('parent');\n this.setMappedQPController('parent.child', 'page', 'childPage');\n\n return this.setupBase().then(function () {\n _this2.assertCurrentPath('/parent/child');\n\n var parentController = _this2.getController('parent');\n var parentChildController = _this2.getController('parent.child');\n\n _this2.setAndFlush(parentController, 'page', 2);\n _this2.assertCurrentPath('/parent/child?parentPage=2');\n _this2.setAndFlush(parentController, 'page', 1);\n _this2.assertCurrentPath('/parent/child');\n\n _this2.setAndFlush(parentChildController, 'page', 2);\n _this2.assertCurrentPath('/parent/child?childPage=2');\n _this2.setAndFlush(parentChildController, 'page', 1);\n _this2.assertCurrentPath('/parent/child');\n\n (0, _runloop.run)(function () {\n parentController.set('page', 2);\n parentChildController.set('page', 2);\n });\n\n _this2.assertCurrentPath('/parent/child?childPage=2&parentPage=2');\n\n (0, _runloop.run)(function () {\n parentController.set('page', 1);\n parentChildController.set('page', 1);\n });\n\n _this2.assertCurrentPath('/parent/child');\n });\n };\n\n _class.prototype['@test query params can be either controller property or url key'] = function (assert) {\n var _this3 = this;\n\n assert.expect(3);\n\n this.setMappedQPController('parent');\n\n return this.setupBase().then(function () {\n _this3.assertCurrentPath('/parent/child');\n\n _this3.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this3.assertCurrentPath('/parent/child?parentPage=2');\n\n _this3.transitionTo('parent.child', { queryParams: { parentPage: 3 } });\n _this3.assertCurrentPath('/parent/child?parentPage=3');\n });\n };\n\n _class.prototype['@test query param matching a url key and controller property'] = function (assert) {\n var _this4 = this;\n\n assert.expect(3);\n\n this.setMappedQPController('parent', 'page', 'parentPage');\n this.setMappedQPController('parent.child', 'index', 'page');\n\n return this.setupBase().then(function () {\n _this4.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this4.assertCurrentPath('/parent/child?parentPage=2');\n\n _this4.transitionTo('parent.child', { queryParams: { parentPage: 3 } });\n _this4.assertCurrentPath('/parent/child?parentPage=3');\n\n _this4.transitionTo('parent.child', {\n queryParams: { index: 2, page: 2 }\n });\n _this4.assertCurrentPath('/parent/child?page=2&parentPage=2');\n });\n };\n\n _class.prototype['@test query param matching same property on two controllers use the urlKey higher in the chain'] = function (assert) {\n var _this5 = this;\n\n assert.expect(4);\n\n this.setMappedQPController('parent', 'page', 'parentPage');\n this.setMappedQPController('parent.child', 'page', 'childPage');\n\n return this.setupBase().then(function () {\n _this5.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this5.assertCurrentPath('/parent/child?parentPage=2');\n\n _this5.transitionTo('parent.child', { queryParams: { parentPage: 3 } });\n _this5.assertCurrentPath('/parent/child?parentPage=3');\n\n _this5.transitionTo('parent.child', {\n queryParams: { childPage: 2, page: 2 }\n });\n _this5.assertCurrentPath('/parent/child?childPage=2&parentPage=2');\n\n _this5.transitionTo('parent.child', {\n queryParams: { childPage: 3, parentPage: 4 }\n });\n _this5.assertCurrentPath('/parent/child?childPage=3&parentPage=4');\n });\n };\n\n _class.prototype['@test query params does not error when a query parameter exists for route instances that share a controller'] = function (assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var parentController = _controller.default.extend({\n queryParams: { page: 'page' }\n });\n this.add('controller:parent', parentController);\n this.add('route:parent.child', _emberRouting.Route.extend({ controllerName: 'parent' }));\n\n return this.setupBase('/parent').then(function () {\n _this6.transitionTo('parent.child', { queryParams: { page: 2 } });\n _this6.assertCurrentPath('/parent/child?page=2');\n });\n };\n\n _class.prototype['@test query params in the same route hierarchy with the same url key get auto-scoped'] = function (assert) {\n var _this7 = this;\n\n assert.expect(1);\n\n this.setMappedQPController('parent');\n this.setMappedQPController('parent.child');\n\n expectAssertion(function () {\n _this7.setupBase();\n }, \"You're not allowed to have more than one controller property map to the same query param key, but both `parent:page` and `parent.child:page` map to `parentPage`. You can fix this by mapping one of the controller properties to a different query param key via the `as` config option, e.g. `page: { as: 'other-page' }`\");\n };\n\n _class.prototype['@test Support shared but overridable mixin pattern'] = function (assert) {\n var _this8 = this;\n\n assert.expect(7);\n\n var HasPage = _emberMetal.Mixin.create({\n queryParams: 'page',\n page: 1\n });\n\n this.add('controller:parent', _controller.default.extend(HasPage, {\n queryParams: { page: 'yespage' }\n }));\n\n this.add('controller:parent.child', _controller.default.extend(HasPage));\n\n return this.setupBase().then(function () {\n _this8.assertCurrentPath('/parent/child');\n\n var parentController = _this8.getController('parent');\n var parentChildController = _this8.getController('parent.child');\n\n _this8.setAndFlush(parentChildController, 'page', 2);\n _this8.assertCurrentPath('/parent/child?page=2');\n assert.equal(parentController.get('page'), 1);\n assert.equal(parentChildController.get('page'), 2);\n\n _this8.setAndFlush(parentController, 'page', 2);\n _this8.assertCurrentPath('/parent/child?page=2&yespage=2');\n assert.equal(parentController.get('page'), 2);\n assert.equal(parentChildController.get('page'), 2);\n });\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/query_param_async_get_handler_test', ['ember-babel', 'ember-metal', 'ember-runtime', 'ember-routing', 'internal-test-helpers'], function (_emberBabel, _emberMetal, _emberRuntime, _emberRouting, _internalTestHelpers) {\n 'use strict';\n\n // These tests mimic what happens with lazily loaded Engines.\n\n (0, _internalTestHelpers.moduleFor)('Query Params - async get handler', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test can render a link to an asynchronously loaded route without fetching the route'] = function (assert) {\n var _this2 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' });\n });\n\n this.setSingleQPController('post');\n\n (function () {\n _this2.addTemplate('application', '\\n {{link-to \\'Post\\' \\'post\\' 1337 (query-params foo=\\'bar\\') class=\\'post-link is-1337\\'}}\\n {{link-to \\'Post\\' \\'post\\' 7331 (query-params foo=\\'boo\\') class=\\'post-link is-7331\\'}}\\n {{outlet}}\\n ');\n })();\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this2.$('.post-link.is-1337').attr('href'), '/post/1337?foo=bar', 'renders correctly with default QP value');\n assert.equal(_this2.$('.post-link.is-7331').attr('href'), '/post/7331?foo=boo', 'renders correctly with non-default QP value');\n assert.deepEqual(_this2.fetchedHandlers, ['application', 'index'], 'only fetched the handlers for the route we\\'re on');\n });\n };\n\n _class.prototype['@test can transitionTo to an asynchronously loaded route with simple query params'] = function (assert) {\n var _this3 = this;\n\n assert.expect(6);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' });\n this.route('posts');\n });\n\n this.setSingleQPController('post');\n\n var postController = void 0;\n return this.visitAndAssert('/').then(function () {\n postController = _this3.getController('post');\n\n return _this3.transitionTo('posts').then(function () {\n _this3.assertCurrentPath('/posts');\n });\n }).then(function () {\n return _this3.transitionTo('post', 1337, {\n queryParams: { foo: 'boo' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'boo', 'simple QP is correctly set on controller');\n _this3.assertCurrentPath('/post/1337?foo=boo');\n });\n }).then(function () {\n return _this3.transitionTo('post', 1337, {\n queryParams: { foo: 'bar' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'bar', 'simple QP is correctly set with default value');\n _this3.assertCurrentPath('/post/1337');\n });\n });\n };\n\n _class.prototype['@test can transitionTo to an asynchronously loaded route with array query params'] = function (assert) {\n var _this4 = this;\n\n assert.expect(5);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' });\n });\n\n this.setSingleQPController('post', 'comments', []);\n\n var postController = void 0;\n return this.visitAndAssert('/').then(function () {\n postController = _this4.getController('post');\n return _this4.transitionTo('post', 1337, {\n queryParams: { comments: [1, 2] }\n }).then(function () {\n assert.deepEqual(postController.get('comments'), [1, 2], 'array QP is correctly set with default value');\n _this4.assertCurrentPath('/post/1337?comments=%5B1%2C2%5D');\n });\n }).then(function () {\n return _this4.transitionTo('post', 1338).then(function () {\n assert.deepEqual(postController.get('comments'), [], 'array QP is correctly set on controller');\n _this4.assertCurrentPath('/post/1338');\n });\n });\n };\n\n _class.prototype['@test can transitionTo to an asynchronously loaded route with mapped query params'] = function (assert) {\n var _this5 = this;\n\n assert.expect(7);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n this.setSingleQPController('post');\n this.setMappedQPController('post.index', 'comment', 'note');\n\n var postController = void 0;\n var postIndexController = void 0;\n\n return this.visitAndAssert('/').then(function () {\n postController = _this5.getController('post');\n postIndexController = _this5.getController('post.index');\n\n return _this5.transitionTo('post.index', 1337, {\n queryParams: { note: 6, foo: 'boo' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'boo', 'simple QP is correctly set on controller');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP is correctly set on controller');\n _this5.assertCurrentPath('/post/1337?foo=boo¬e=6');\n });\n }).then(function () {\n return _this5.transitionTo('post', 1337, {\n queryParams: { foo: 'bar' }\n }).then(function () {\n assert.equal(postController.get('foo'), 'bar', 'simple QP is correctly set with default value');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP retains value scoped to model');\n _this5.assertCurrentPath('/post/1337?note=6');\n });\n });\n };\n\n _class.prototype['@test can transitionTo with a URL'] = function (assert) {\n var _this6 = this;\n\n assert.expect(7);\n\n this.router.map(function () {\n this.route('post', { path: '/post/:id' }, function () {\n this.route('index', { path: '/' });\n });\n });\n\n this.setSingleQPController('post');\n this.setMappedQPController('post.index', 'comment', 'note');\n\n var postController = void 0;\n var postIndexController = void 0;\n\n return this.visitAndAssert('/').then(function () {\n postController = _this6.getController('post');\n postIndexController = _this6.getController('post.index');\n\n return _this6.transitionTo('/post/1337?foo=boo¬e=6').then(function () {\n assert.equal(postController.get('foo'), 'boo', 'simple QP is correctly deserialized on controller');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP is correctly deserialized on controller');\n _this6.assertCurrentPath('/post/1337?foo=boo¬e=6');\n });\n }).then(function () {\n return _this6.transitionTo('/post/1337?note=6').then(function () {\n assert.equal(postController.get('foo'), 'bar', 'simple QP is correctly deserialized with default value');\n assert.equal(postIndexController.get('comment'), 6, 'mapped QP retains value scoped to model');\n _this6.assertCurrentPath('/post/1337?note=6');\n });\n });\n };\n\n _class.prototype[\"@test undefined isn't serialized or deserialized into a string\"] = function (assert) {\n var _this7 = this;\n\n assert.expect(4);\n\n this.router.map(function () {\n this.route('example');\n });\n\n this.addTemplate('application', \"{{link-to 'Example' 'example' (query-params foo=undefined) id='the-link'}}\");\n\n this.setSingleQPController('example', 'foo', undefined, {\n foo: undefined\n });\n\n this.add('route:example', _emberRouting.Route.extend({\n model: function (params) {\n assert.deepEqual(params, { foo: undefined });\n }\n }));\n\n return this.visitAndAssert('/').then(function () {\n assert.equal(_this7.$('#the-link').attr('href'), '/example', 'renders without undefined qp serialized');\n\n return _this7.transitionTo('example', {\n queryParams: { foo: undefined }\n }).then(function () {\n _this7.assertCurrentPath('/example');\n });\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'routerOptions',\n get: function () {\n var fetchedHandlers = this.fetchedHandlers = [];\n\n return {\n location: 'test',\n\n init: function () {\n this._super.apply(this, arguments);\n this._seenHandlers = Object.create(null);\n this._handlerPromises = Object.create(null);\n },\n _getQPMeta: function (handlerInfo) {\n var handler = this._seenHandlers[handlerInfo.name];\n if (handler) {\n return (0, _emberMetal.get)(handler, '_qp');\n }\n },\n _getHandlerFunction: function () {\n var getHandler = this._super.apply(this, arguments);\n var handlerPromises = this._handlerPromises;\n var seenHandlers = this._seenHandlers;\n\n return function (routeName) {\n fetchedHandlers.push(routeName);\n\n // Cache the returns so we don't have more than one Promise for a\n // given handler.\n return handlerPromises[routeName] || (handlerPromises[routeName] = new _emberRuntime.RSVP.Promise(function (resolve) {\n setTimeout(function () {\n var handler = getHandler(routeName);\n\n seenHandlers[routeName] = handler;\n\n resolve(handler);\n }, 10);\n }));\n };\n }\n };\n }\n }]);\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/query_params_paramless_link_to_test', ['ember-babel', '@ember/controller', 'internal-test-helpers'], function (_emberBabel, _controller, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - paramless link-to', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.testParamlessLinks = function (assert, routeName) {\n assert.expect(1);\n\n this.addTemplate(routeName, \"{{link-to 'index' 'index' id='index-link'}}\");\n\n this.add('controller:' + routeName, _controller.default.extend({\n queryParams: ['foo'],\n foo: 'wat'\n }));\n\n return this.visit('/?foo=YEAH').then(function () {\n assert.equal(document.getElementById('index-link').getAttribute('href'), '/?foo=YEAH');\n });\n };\n\n _class.prototype[\"@test param-less links in an app booted with query params in the URL don't reset the query params: application\"] = function (assert) {\n return this.testParamlessLinks(assert, 'application');\n };\n\n _class.prototype[\"@test param-less links in an app booted with query params in the URL don't reset the query params: index\"] = function (assert) {\n return this.testParamlessLinks(assert, 'index');\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/query_params_test/shared_state_test', ['ember-babel', '@ember/controller', '@ember/service', '@ember/runloop', 'internal-test-helpers'], function (_emberBabel, _controller, _service, _runloop, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Query Params - shared service state', function (_QueryParamTestCase) {\n (0, _emberBabel.inherits)(_class, _QueryParamTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _QueryParamTestCase.apply(this, arguments));\n }\n\n _class.prototype.boot = function () {\n this.setupApplication();\n return this.visitApplication();\n };\n\n _class.prototype.setupApplication = function () {\n this.router.map(function () {\n this.route('home', { path: '/' });\n this.route('dashboard');\n });\n\n this.add('service:filters', _service.default.extend({\n shared: true\n }));\n\n this.add('controller:home', _controller.default.extend({\n filters: (0, _service.inject)()\n }));\n\n this.add('controller:dashboard', _controller.default.extend({\n filters: (0, _service.inject)(),\n queryParams: [{ 'filters.shared': 'shared' }]\n }));\n\n this.addTemplate('application', '{{link-to \\'Home\\' \\'home\\' }} {{outlet}}
');\n this.addTemplate('home', '{{link-to \\'Dashboard\\' \\'dashboard\\' }}{{input type=\"checkbox\" id=\\'filters-checkbox\\' checked=(mut filters.shared) }}');\n this.addTemplate('dashboard', '{{link-to \\'Home\\' \\'home\\' }}');\n };\n\n _class.prototype.visitApplication = function () {\n return this.visit('/');\n };\n\n _class.prototype['@test can modify shared state before transition'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.boot().then(function () {\n _this2.$input = document.getElementById('filters-checkbox');\n\n // click the checkbox once to set filters.shared to false\n (0, _runloop.run)(_this2.$input, 'click');\n\n return _this2.visit('/dashboard').then(function () {\n assert.ok(true, 'expecting navigating to dashboard to succeed');\n });\n });\n };\n\n _class.prototype['@test can modify shared state back to the default value before transition'] = function (assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.boot().then(function () {\n _this3.$input = document.getElementById('filters-checkbox');\n\n // click the checkbox twice to set filters.shared to false and back to true\n (0, _runloop.run)(_this3.$input, 'click');\n (0, _runloop.run)(_this3.$input, 'click');\n\n return _this3.visit('/dashboard').then(function () {\n assert.ok(true, 'expecting navigating to dashboard to succeed');\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.QueryParamTestCase));\n});","enifed('ember/tests/routing/router_map_test', ['ember-babel', 'internal-test-helpers', '@ember/runloop', 'ember-routing'], function (_emberBabel, _internalTestHelpers, _runloop, _emberRouting) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router.map', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Router.map returns an Ember Router class'] = function (assert) {\n assert.expect(1);\n\n var ret = this.router.map(function () {\n this.route('hello');\n });\n\n assert.ok(_emberRouting.Router.detect(ret));\n };\n\n _class.prototype['@test Router.map can be called multiple times'] = function (assert) {\n var _this2 = this;\n\n assert.expect(2);\n\n this.addTemplate('hello', 'Hello!');\n this.addTemplate('goodbye', 'Goodbye!');\n\n this.router.map(function () {\n this.route('hello');\n });\n\n this.router.map(function () {\n this.route('goodbye');\n });\n\n return (0, _runloop.run)(function () {\n return _this2.visit('/hello').then(function () {\n _this2.assertText('Hello!');\n }).then(function () {\n return _this2.visit('/goodbye');\n }).then(function () {\n _this2.assertText('Goodbye!');\n });\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/routing/router_service_test/basic_test', ['ember-babel', 'ember-routing', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _emberRouting, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - main', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test RouterService#currentRouteName is correctly set for top level route'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n assert.equal(_this2.routerService.get('currentRouteName'), 'parent.index');\n });\n };\n\n _class.prototype['@test RouterService#currentRouteName is correctly set for child route'] = function (assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.visit('/child').then(function () {\n assert.equal(_this3.routerService.get('currentRouteName'), 'parent.child');\n });\n };\n\n _class.prototype['@test RouterService#currentRouteName is correctly set after transition'] = function (assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n return this.visit('/child').then(function () {\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n assert.equal(_this4.routerService.get('currentRouteName'), 'parent.sister');\n });\n };\n\n _class.prototype['@test RouterService#currentRouteName is correctly set on each transition'] = function (assert) {\n var _this5 = this;\n\n assert.expect(3);\n\n return this.visit('/child').then(function () {\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.child');\n\n return _this5.visit('/sister');\n }).then(function () {\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.sister');\n\n return _this5.visit('/brother');\n }).then(function () {\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.brother');\n });\n };\n\n _class.prototype['@test RouterService#rootURL is correctly set to the default value'] = function (assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n assert.equal(_this6.routerService.get('rootURL'), '/');\n });\n };\n\n _class.prototype['@test RouterService#rootURL is correctly set to a custom value'] = function (assert) {\n var _this7 = this;\n\n assert.expect(1);\n\n this.add('route:parent.index', _emberRouting.Route.extend({\n init: function () {\n this._super();\n (0, _emberMetal.set)(this._router, 'rootURL', '/homepage');\n }\n }));\n\n return this.visit('/').then(function () {\n assert.equal(_this7.routerService.get('rootURL'), '/homepage');\n });\n };\n\n _class.prototype['@test RouterService#location is correctly delegated from router:main'] = function (assert) {\n var _this8 = this;\n\n assert.expect(2);\n\n return this.visit('/').then(function () {\n var location = _this8.routerService.get('location');\n assert.ok(location);\n assert.ok(location instanceof _emberRouting.NoneLocation);\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/currenturl_lifecycle_test', ['ember-babel', '@ember/service', '@ember/object/computed', 'ember-glimmer', 'ember-routing', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _service, _computed, _emberGlimmer, _emberRouting, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n var results = [];\n var ROUTE_NAMES = ['index', 'child', 'sister', 'brother'];\n\n var InstrumentedRoute = _emberRouting.Route.extend({\n routerService: (0, _service.inject)('router'),\n\n beforeModel: function () {\n var service = (0, _emberMetal.get)(this, 'routerService');\n results.push([service.get('currentRouteName'), 'beforeModel', service.get('currentURL')]);\n },\n model: function () {\n var service = (0, _emberMetal.get)(this, 'routerService');\n results.push([service.get('currentRouteName'), 'model', service.get('currentURL')]);\n },\n afterModel: function () {\n var service = (0, _emberMetal.get)(this, 'routerService');\n results.push([service.get('currentRouteName'), 'afterModel', service.get('currentURL')]);\n }\n });\n\n (0, _internalTestHelpers.moduleFor)('Router Service - currentURL', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n\n results = [];\n\n ROUTE_NAMES.forEach(function (name) {\n var routeName = 'parent.' + name;\n _this.add('route:' + routeName, InstrumentedRoute.extend());\n _this.addTemplate(routeName, '{{current-url}}');\n });\n\n _this.addComponent('current-url', {\n ComponentClass: _emberGlimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n currentURL: (0, _computed.readOnly)('routerService.currentURL')\n }),\n template: '{{currentURL}}'\n });\n return _this;\n }\n\n _class.prototype['@test RouterService#currentURL is correctly set for top level route'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n assert.equal(_this2.routerService.get('currentURL'), '/');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set for child route'] = function (assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.visit('/child').then(function () {\n assert.equal(_this3.routerService.get('currentURL'), '/child');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set after transition'] = function (assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n return this.visit('/child').then(function () {\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n assert.equal(_this4.routerService.get('currentURL'), '/sister');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set on each transition'] = function (assert) {\n var _this5 = this;\n\n assert.expect(3);\n\n return this.visit('/child').then(function () {\n assert.equal(_this5.routerService.get('currentURL'), '/child');\n\n return _this5.visit('/sister');\n }).then(function () {\n assert.equal(_this5.routerService.get('currentURL'), '/sister');\n\n return _this5.visit('/brother');\n }).then(function () {\n assert.equal(_this5.routerService.get('currentURL'), '/brother');\n });\n };\n\n _class.prototype['@test RouterService#currentURL is not set during lifecycle hooks'] = function (assert) {\n var _this6 = this;\n\n assert.expect(2);\n\n return this.visit('/').then(function () {\n assert.deepEqual(results, [[null, 'beforeModel', null], [null, 'model', null], [null, 'afterModel', null]]);\n\n results = [];\n\n return _this6.visit('/child');\n }).then(function () {\n assert.deepEqual(results, [['parent.index', 'beforeModel', '/'], ['parent.index', 'model', '/'], ['parent.index', 'afterModel', '/']]);\n });\n };\n\n _class.prototype['@test RouterService#currentURL is correctly set with component after consecutive visits'] = function (assert) {\n var _this7 = this;\n\n assert.expect(3);\n\n return this.visit('/').then(function () {\n _this7.assertText('/');\n\n return _this7.visit('/child');\n }).then(function () {\n _this7.assertText('/child');\n\n return _this7.visit('/');\n }).then(function () {\n _this7.assertText('/');\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/isActive_test', ['ember-babel', '@ember/controller', 'internal-test-helpers'], function (_emberBabel, _controller, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - isActive', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test RouterService#isActive returns true for simple route'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this2.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this2.routerService.transitionTo('parent.sister');\n }).then(function () {\n assert.ok(_this2.routerService.isActive('parent.sister'));\n });\n };\n\n _class.prototype['@test RouterService#isActive returns true for simple route with dynamic segments'] = function (assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n var dynamicModel = { id: 1 };\n\n return this.visit('/').then(function () {\n return _this3.routerService.transitionTo('dynamic', dynamicModel);\n }).then(function () {\n assert.ok(_this3.routerService.isActive('dynamic', dynamicModel));\n });\n };\n\n _class.prototype['@test RouterService#isActive does not eagerly instantiate controller for query params'] = function (assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n this.add('controller:parent.sister', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC',\n\n init: function () {\n assert.ok(false, 'should never create');\n this._super.apply(this, arguments);\n }\n }));\n\n return this.visit('/').then(function () {\n return _this4.routerService.transitionTo('parent.brother');\n }).then(function () {\n assert.notOk(_this4.routerService.isActive('parent.sister', queryParams));\n });\n };\n\n _class.prototype['@test RouterService#isActive is correct for simple route with basic query params'] = function (assert) {\n var _this5 = this;\n\n assert.expect(2);\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n return this.visit('/').then(function () {\n return _this5.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.ok(_this5.routerService.isActive('parent.child', queryParams));\n assert.notOk(_this5.routerService.isActive('parent.child', _this5.buildQueryParams({ sort: 'DESC' })));\n });\n };\n\n _class.prototype['@test RouterService#isActive for simple route with array as query params'] = function (assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ sort: ['ascending'] });\n\n return this.visit('/').then(function () {\n return _this6.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.notOk(_this6.routerService.isActive('parent.child', _this6.buildQueryParams({ sort: 'descending' })));\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/replaceWith_test', ['ember-babel', 'ember-routing', 'internal-test-helpers', 'router', '@ember/controller'], function (_emberBabel, _emberRouting, _internalTestHelpers, _router, _controller) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - replaceWith', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n\n var testCase = _this;\n testCase.state = [];\n\n _this.add('location:test', _emberRouting.NoneLocation.extend({\n setURL: function (path) {\n testCase.state.push(path);\n this.set('path', path);\n },\n replaceURL: function (path) {\n testCase.state.splice(testCase.state.length - 1, 1, path);\n this.set('path', path);\n }\n }));\n return _this;\n }\n\n _class.prototype['@test RouterService#replaceWith returns a Transition'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n var transition = void 0;\n\n return this.visit('/').then(function () {\n transition = _this2.routerService.replaceWith('parent.child');\n\n assert.ok(transition instanceof _router.Transition);\n\n return transition;\n });\n };\n\n _class.prototype['@test RouterService#replaceWith with basic route replaces location'] = function (assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this3.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this3.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this3.routerService.replaceWith('parent.brother');\n }).then(function () {\n assert.deepEqual(_this3.state, ['/', '/child', '/brother']);\n });\n };\n\n _class.prototype['@test RouterService#replaceWith with basic route using URLs replaces location'] = function (assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this4.routerService.transitionTo('/child');\n }).then(function () {\n return _this4.routerService.transitionTo('/sister');\n }).then(function () {\n return _this4.routerService.replaceWith('/brother');\n }).then(function () {\n assert.deepEqual(_this4.state, ['/', '/child', '/brother']);\n });\n };\n\n _class.prototype['@test RouterService#replaceWith transitioning back to previously visited route replaces location'] = function (assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this5.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this5.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this5.routerService.transitionTo('parent.brother');\n }).then(function () {\n return _this5.routerService.replaceWith('parent.sister');\n }).then(function () {\n assert.deepEqual(_this5.state, ['/', '/child', '/sister', '/sister']);\n });\n };\n\n _class.prototype['@test RouterService#replaceWith with basic query params does not remove query param defaults'] = function (assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this6.routerService.transitionTo('parent.brother');\n }).then(function () {\n return _this6.routerService.replaceWith('parent.sister');\n }).then(function () {\n return _this6.routerService.replaceWith('parent.child', queryParams);\n }).then(function () {\n assert.deepEqual(_this6.state, ['/', '/child?sort=ASC']);\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'routerOptions',\n get: function () {\n return {\n location: 'test'\n };\n }\n }]);\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/transitionTo_test', ['ember-babel', '@ember/service', 'ember-glimmer', 'ember-routing', '@ember/controller', '@ember/runloop', 'ember-metal', 'internal-test-helpers', 'router'], function (_emberBabel, _service, _emberGlimmer, _emberRouting, _controller, _runloop, _emberMetal, _internalTestHelpers, _router) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Router Service - transitionTo', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n\n var testCase = _this;\n testCase.state = [];\n\n _this.add('location:test', _emberRouting.NoneLocation.extend({\n setURL: function (path) {\n testCase.state.push(path);\n this.set('path', path);\n },\n replaceURL: function (path) {\n testCase.state.splice(testCase.state.length - 1, 1, path);\n this.set('path', path);\n }\n }));\n return _this;\n }\n\n _class.prototype['@test RouterService#transitionTo returns a Transition'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n var transition = void 0;\n\n return this.visit('/').then(function () {\n transition = _this2.routerService.transitionTo('parent.child');\n\n assert.ok(transition instanceof _router.Transition);\n\n return transition;\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic route updates location'] = function (assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this3.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this3.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this3.routerService.transitionTo('parent.brother');\n }).then(function () {\n assert.deepEqual(_this3.state, ['/', '/child', '/sister', '/brother']);\n });\n };\n\n _class.prototype['@test RouterService#transitionTo transitioning back to previously visited route updates location'] = function (assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n return _this4.routerService.transitionTo('parent.child');\n }).then(function () {\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n return _this4.routerService.transitionTo('parent.brother');\n }).then(function () {\n return _this4.routerService.transitionTo('parent.sister');\n }).then(function () {\n assert.deepEqual(_this4.state, ['/', '/child', '/sister', '/brother', '/sister']);\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic route'] = function (assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n var componentInstance = void 0;\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _emberGlimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToSister: function () {\n (0, _emberMetal.get)(this, 'routerService').transitionTo('parent.sister');\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToSister');\n });\n\n assert.equal(_this5.routerService.get('currentRouteName'), 'parent.sister');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic route using URL'] = function (assert) {\n var _this6 = this;\n\n assert.expect(1);\n\n var componentInstance = void 0;\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _emberGlimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToSister: function () {\n (0, _emberMetal.get)(this, 'routerService').transitionTo('/sister');\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToSister');\n });\n\n assert.equal(_this6.routerService.get('currentRouteName'), 'parent.sister');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with dynamic segment'] = function (assert) {\n var _this7 = this;\n\n assert.expect(3);\n\n var componentInstance = void 0;\n var dynamicModel = { id: 1, contents: 'much dynamicism' };\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n this.addTemplate('dynamic', '{{model.contents}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _emberGlimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToDynamic: function () {\n (0, _emberMetal.get)(this, 'routerService').transitionTo('dynamic', dynamicModel);\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToDynamic');\n });\n\n assert.equal(_this7.routerService.get('currentRouteName'), 'dynamic');\n assert.equal(_this7.routerService.get('currentURL'), '/dynamic/1');\n _this7.assertText('much dynamicism');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with dynamic segment and model hook'] = function (assert) {\n var _this8 = this;\n\n assert.expect(3);\n\n var componentInstance = void 0;\n var dynamicModel = { id: 1, contents: 'much dynamicism' };\n\n this.add('route:dynamic', _emberRouting.Route.extend({\n model: function () {\n return dynamicModel;\n }\n }));\n\n this.addTemplate('parent.index', '{{foo-bar}}');\n this.addTemplate('dynamic', '{{model.contents}}');\n\n this.addComponent('foo-bar', {\n ComponentClass: _emberGlimmer.Component.extend({\n routerService: (0, _service.inject)('router'),\n init: function () {\n this._super();\n componentInstance = this;\n },\n\n actions: {\n transitionToDynamic: function () {\n (0, _emberMetal.get)(this, 'routerService').transitionTo('dynamic', 1);\n }\n }\n }),\n template: 'foo-bar'\n });\n\n return this.visit('/').then(function () {\n (0, _runloop.run)(function () {\n componentInstance.send('transitionToDynamic');\n });\n\n assert.equal(_this8.routerService.get('currentRouteName'), 'dynamic');\n assert.equal(_this8.routerService.get('currentURL'), '/dynamic/1');\n _this8.assertText('much dynamicism');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with basic query params does not remove query param defaults'] = function (assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this9.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.equal(_this9.routerService.get('currentURL'), '/child?sort=ASC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo passing only queryParams works'] = function (assert) {\n var _this10 = this;\n\n assert.expect(2);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort']\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'DESC' });\n\n return this.visit('/').then(function () {\n return _this10.routerService.transitionTo('parent.child');\n }).then(function () {\n assert.equal(_this10.routerService.get('currentURL'), '/child');\n }).then(function () {\n return _this10.routerService.transitionTo(queryParams);\n }).then(function () {\n assert.equal(_this10.routerService.get('currentURL'), '/child?sort=DESC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with unspecified query params'] = function (assert) {\n var _this11 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort', 'page', 'category', 'extra'],\n sort: 'ASC',\n page: null,\n category: undefined\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this11.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.equal(_this11.routerService.get('currentURL'), '/child?sort=ASC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with aliased query params uses the original provided key'] = function (assert) {\n var _this12 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: {\n cont_sort: 'url_sort'\n },\n cont_sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ url_sort: 'ASC' });\n\n return this.visit('/').then(function () {\n return _this12.routerService.transitionTo('parent.child', queryParams);\n }).then(function () {\n assert.equal(_this12.routerService.get('currentURL'), '/child?url_sort=ASC');\n });\n };\n\n _class.prototype['@test RouterService#transitionTo with aliased query params uses the original provided key when controller property name'] = function (assert) {\n var _this13 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: {\n cont_sort: 'url_sort'\n },\n cont_sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ cont_sort: 'ASC' });\n\n return this.visit('/').then(function () {\n expectAssertion(function () {\n return _this13.routerService.transitionTo('parent.child', queryParams);\n }, 'You passed the `cont_sort` query parameter during a transition into parent.child, please update to url_sort');\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'routerOptions',\n get: function () {\n return {\n location: 'test'\n };\n }\n }]);\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/router_service_test/urlFor_test', ['ember-babel', '@ember/controller', '@ember/string', 'ember-routing', 'ember-metal', 'internal-test-helpers'], function (_emberBabel, _controller, _string, _emberRouting, _emberMetal, _internalTestHelpers) {\n 'use strict';\n\n function setupController(app, name) {\n var controllerName = (0, _string.capitalize)(name) + 'Controller';\n\n Object.defineProperty(app, controllerName, {\n get: function () {\n throw new Error('Generating a URL should not require instantiation of a ' + controllerName + '.');\n }\n });\n }\n\n (0, _internalTestHelpers.moduleFor)('Router Service - urlFor', function (_RouterTestCase) {\n (0, _emberBabel.inherits)(_class, _RouterTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _RouterTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route'] = function (assert) {\n var _this2 = this;\n\n assert.expect(1);\n\n return this.visit('/').then(function () {\n var expectedURL = _this2.routerService.urlFor('parent.child');\n\n assert.equal('/child', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments'] = function (assert) {\n var _this3 = this;\n\n assert.expect(1);\n\n setupController(this.application, 'dynamic');\n\n var dynamicModel = { id: 1, contents: 'much dynamicism' };\n\n return this.visit('/').then(function () {\n var expectedURL = _this3.routerService.urlFor('dynamic', dynamicModel);\n\n assert.equal('/dynamic/1', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with basic query params'] = function (assert) {\n var _this4 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n\n return this.visit('/').then(function () {\n var expectedURL = _this4.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child?foo=bar', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with basic query params and default value'] = function (assert) {\n var _this5 = this;\n\n assert.expect(1);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort'],\n sort: 'ASC'\n }));\n\n var queryParams = this.buildQueryParams({ sort: 'ASC' });\n\n return this.visit('/').then(function () {\n var expectedURL = _this5.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child?sort=ASC', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with basic query params and default value with stickyness'] = function (assert) {\n var _this6 = this;\n\n assert.expect(2);\n\n this.add('controller:parent.child', _controller.default.extend({\n queryParams: ['sort', 'foo'],\n sort: 'ASC'\n }));\n\n return this.visit('/child/?sort=DESC').then(function () {\n var controller = _this6.applicationInstance.lookup('controller:parent.child');\n assert.equal((0, _emberMetal.get)(controller, 'sort'), 'DESC', 'sticky is set');\n\n var queryParams = _this6.buildQueryParams({ foo: 'derp' });\n var actual = _this6.routerService.urlFor('parent.child', queryParams);\n\n assert.equal(actual, '/child?foo=derp', 'does not use \"stickiness\"');\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with array as query params'] = function (assert) {\n var _this7 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({\n selectedItems: ['a', 'b', 'c']\n });\n\n return this.visit('/').then(function () {\n var expectedURL = _this7.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child?selectedItems[]=a&selectedItems[]=b&selectedItems[]=c', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with null query params'] = function (assert) {\n var _this8 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: null });\n\n return this.visit('/').then(function () {\n var expectedURL = _this8.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with undefined query params'] = function (assert) {\n var _this9 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: undefined });\n\n return this.visit('/').then(function () {\n var expectedURL = _this9.routerService.urlFor('parent.child', queryParams);\n\n assert.equal('/child', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and basic query params'] = function (assert) {\n var _this10 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n\n return this.visit('/').then(function () {\n var expectedURL = _this10.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1?foo=bar', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and array as query params'] = function (assert) {\n var _this11 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({\n selectedItems: ['a', 'b', 'c']\n });\n\n return this.visit('/').then(function () {\n var expectedURL = _this11.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1?selectedItems[]=a&selectedItems[]=b&selectedItems[]=c', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and null query params'] = function (assert) {\n var _this12 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: null });\n\n return this.visit('/').then(function () {\n var expectedURL = _this12.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor returns URL for simple route with dynamic segments and undefined query params'] = function (assert) {\n var _this13 = this;\n\n assert.expect(1);\n\n var queryParams = this.buildQueryParams({ foo: undefined });\n\n return this.visit('/').then(function () {\n var expectedURL = _this13.routerService.urlFor('dynamic', { id: 1 }, queryParams);\n\n assert.equal('/dynamic/1', expectedURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path'] = function (assert) {\n var _this14 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n\n return this.visit('/').then(function () {\n expectedURL = _this14.routerService.urlFor('parent.child');\n\n return _this14.routerService.transitionTo(expectedURL);\n }).then(function () {\n assert.equal(expectedURL, _this14.routerService.get('currentURL'));\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path with dynamic segments'] = function (assert) {\n var _this15 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n var dynamicModel = { id: 1 };\n\n this.add('route:dynamic', _emberRouting.Route.extend({\n model: function () {\n return dynamicModel;\n }\n }));\n\n return this.visit('/').then(function () {\n expectedURL = _this15.routerService.urlFor('dynamic', dynamicModel);\n\n return _this15.routerService.transitionTo(expectedURL);\n }).then(function () {\n assert.equal(expectedURL, _this15.routerService.get('currentURL'));\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path with query params'] = function (assert) {\n var _this16 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n var actualURL = void 0;\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n\n return this.visit('/').then(function () {\n expectedURL = _this16.routerService.urlFor('parent.child', queryParams);\n\n return _this16.routerService.transitionTo(expectedURL);\n }).then(function () {\n actualURL = _this16.routerService.get('currentURL') + '?foo=bar';\n\n assert.equal(expectedURL, actualURL);\n });\n };\n\n _class.prototype['@test RouterService#urlFor correctly transitions to route via generated path with dynamic segments and query params'] = function (assert) {\n var _this17 = this;\n\n assert.expect(1);\n\n var expectedURL = void 0;\n var actualURL = void 0;\n var queryParams = this.buildQueryParams({ foo: 'bar' });\n var dynamicModel = { id: 1 };\n\n this.add('route:dynamic', _emberRouting.Route.extend({\n model: function () {\n return dynamicModel;\n }\n }));\n\n return this.visit('/').then(function () {\n expectedURL = _this17.routerService.urlFor('dynamic', dynamicModel, queryParams);\n\n return _this17.routerService.transitionTo(expectedURL);\n }).then(function () {\n actualURL = _this17.routerService.get('currentURL') + '?foo=bar';\n\n assert.equal(expectedURL, actualURL);\n });\n };\n\n return _class;\n }(_internalTestHelpers.RouterTestCase));\n});","enifed('ember/tests/routing/substates_test', ['ember-babel', 'ember-runtime', 'ember-routing', 'internal-test-helpers'], function (_emberBabel, _emberRuntime, _emberRouting, _internalTestHelpers) {\n 'use strict';\n\n var counter = void 0;\n\n function step(assert, expectedValue, description) {\n assert.equal(counter, expectedValue, 'Step ' + expectedValue + ': ' + description);\n counter++;\n }\n\n (0, _internalTestHelpers.moduleFor)('Loading/Error Substates', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n counter = 1;\n\n _this.addTemplate('application', '{{outlet}}
');\n _this.addTemplate('index', 'INDEX');\n return _this;\n }\n\n _class.prototype.getController = function (name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class.prototype['@test Slow promise from a child route of application enters nested loading state'] = function (assert) {\n var _this2 = this;\n\n var turtleDeferred = _emberRuntime.RSVP.defer();\n\n this.router.map(function () {\n this.route('turtle');\n });\n\n this.add('route:application', _emberRouting.Route.extend({\n setupController: function () {\n step(assert, 2, 'ApplicationRoute#setupController');\n }\n }));\n\n this.add('route:turtle', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'TurtleRoute#model');\n return turtleDeferred.promise;\n }\n }));\n this.addTemplate('turtle', 'TURTLE');\n this.addTemplate('loading', 'LOADING');\n\n var promise = this.visit('/turtle').then(function () {\n text = _this2.$('#app').text();\n assert.equal(text, 'TURTLE', 'turtle template has loaded and replaced the loading template');\n });\n\n var text = this.$('#app').text();\n assert.equal(text, 'LOADING', 'The Loading template is nested in application template\\'s outlet');\n\n turtleDeferred.resolve();\n return promise;\n };\n\n _class.prototype['@test Slow promises returned from ApplicationRoute#model don\\'t enter LoadingRoute'] = function (assert) {\n var _this3 = this;\n\n var appDeferred = _emberRuntime.RSVP.defer();\n\n this.add('route:application', _emberRouting.Route.extend({\n model: function () {\n return appDeferred.promise;\n }\n }));\n this.add('route:loading', _emberRouting.Route.extend({\n setupController: function () {\n assert.ok(false, 'shouldn\\'t get here');\n }\n }));\n\n var promise = this.visit('/').then(function () {\n var text = _this3.$('#app').text();\n\n assert.equal(text, 'INDEX', 'index template has been rendered');\n });\n\n if (this.element) {\n assert.equal(this.element.textContent, '');\n }\n\n appDeferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Don\\'t enter loading route unless either route or template defined'] = function (assert) {\n var _this4 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n\n this.router.map(function () {\n this.route('dummy');\n });\n this.add('route:dummy', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n this.addTemplate('dummy', 'DUMMY');\n\n return this.visit('/').then(function () {\n var promise = _this4.visit('/dummy').then(function () {\n var text = _this4.$('#app').text();\n\n assert.equal(text, 'DUMMY', 'dummy template has been rendered');\n });\n\n assert.ok(_this4.currentPath !== 'loading', '\\n loading state not entered\\n ');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Enter loading route only if loadingRoute is defined'] = function (assert) {\n var _this5 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n\n this.router.map(function () {\n this.route('dummy');\n });\n\n this.add('route:dummy', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'DummyRoute#model');\n return deferred.promise;\n }\n }));\n this.add('route:loading', _emberRouting.Route.extend({\n setupController: function () {\n step(assert, 2, 'LoadingRoute#setupController');\n }\n }));\n this.addTemplate('dummy', 'DUMMY');\n\n return this.visit('/').then(function () {\n var promise = _this5.visit('/dummy').then(function () {\n var text = _this5.$('#app').text();\n\n assert.equal(text, 'DUMMY', 'dummy template has been rendered');\n });\n\n assert.equal(_this5.currentPath, 'loading', 'loading state entered');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Slow promises returned from ApplicationRoute#model enter ApplicationLoadingRoute if present'] = function (assert) {\n var _this6 = this;\n\n var appDeferred = _emberRuntime.RSVP.defer();\n\n this.add('route:application', _emberRouting.Route.extend({\n model: function () {\n return appDeferred.promise;\n }\n }));\n var loadingRouteEntered = false;\n this.add('route:application_loading', _emberRouting.Route.extend({\n setupController: function () {\n loadingRouteEntered = true;\n }\n }));\n\n var promise = this.visit('/').then(function () {\n assert.equal(_this6.$('#app').text(), 'INDEX', 'index route loaded');\n });\n assert.ok(loadingRouteEntered, 'ApplicationLoadingRoute was entered');\n appDeferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Slow promises returned from ApplicationRoute#model enter application_loading if template present'] = function (assert) {\n var _this7 = this;\n\n var appDeferred = _emberRuntime.RSVP.defer();\n\n this.addTemplate('application_loading', '\\n TOPLEVEL LOADING
\\n ');\n this.add('route:application', _emberRouting.Route.extend({\n model: function () {\n return appDeferred.promise;\n }\n }));\n\n var promise = this.visit('/').then(function () {\n var length = _this7.$('#toplevel-loading').length;\n text = _this7.$('#app').text();\n\n assert.equal(length, 0, 'top-level loading view has been entirely removed from the DOM');\n assert.equal(text, 'INDEX', 'index has fully rendered');\n });\n var text = this.$('#toplevel-loading').text();\n\n assert.equal(text, 'TOPLEVEL LOADING', 'still loading the top level');\n appDeferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Prioritized substate entry works with preserved-namespace nested routes'] = function (assert) {\n var _this8 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n\n this.addTemplate('foo.bar_loading', 'FOOBAR LOADING');\n this.addTemplate('foo.bar.index', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar', { path: '/bar' }, function () {});\n });\n });\n\n this.add('route:foo.bar', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n return this.visit('/').then(function () {\n var promise = _this8.visit('/foo/bar').then(function () {\n text = _this8.$('#app').text();\n\n assert.equal(text, 'YAY', 'foo.bar.index fully loaded');\n });\n var text = _this8.$('#app').text();\n\n assert.equal(text, 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Prioritized substate entry works with reset-namespace nested routes'] = function (assert) {\n var _this9 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n\n this.addTemplate('bar_loading', 'BAR LOADING');\n this.addTemplate('bar.index', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar', { path: '/bar', resetNamespace: true }, function () {});\n });\n });\n\n this.add('route:bar', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n return this.visit('/').then(function () {\n var promise = _this9.visit('/foo/bar').then(function () {\n text = _this9.$('#app').text();\n\n assert.equal(text, 'YAY', 'bar.index fully loaded');\n });\n\n var text = _this9.$('#app').text();\n\n assert.equal(text, 'BAR LOADING', 'foo.bar_loading was entered (as opposed to something likefoo/foo/bar_loading)');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class.prototype['@test Prioritized loading substate entry works with preserved-namespace nested routes'] = function (assert) {\n var _this10 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n\n this.addTemplate('foo.bar_loading', 'FOOBAR LOADING');\n this.addTemplate('foo.bar', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.bar', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n var promise = this.visit('/foo/bar').then(function () {\n text = _this10.$('#app').text();\n\n assert.equal(text, 'YAY', 'foo.bar has rendered');\n });\n var text = this.$('#app').text();\n\n assert.equal(text, 'FOOBAR LOADING', 'foo.bar_loading was entered (as opposed to something like foo/foo/bar_loading)');\n deferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Prioritized error substate entry works with preserved-namespaec nested routes'] = function (assert) {\n var _this11 = this;\n\n this.addTemplate('foo.bar_error', 'FOOBAR ERROR: {{model.msg}}');\n this.addTemplate('foo.bar', 'YAY');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.bar', _emberRouting.Route.extend({\n model: function () {\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n }\n }));\n\n return this.visit('/').then(function () {\n return _this11.visit('/foo/bar').then(function () {\n var text = _this11.$('#app').text();\n assert.equal(text, 'FOOBAR ERROR: did it broke?', 'foo.bar_error was entered (as opposed to something like foo/foo/bar_error)');\n });\n });\n };\n\n _class.prototype['@test Prioritized loading substate entry works with auto-generated index routes'] = function (assert) {\n var _this12 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n this.addTemplate('foo.index_loading', 'FOO LOADING');\n this.addTemplate('foo.index', 'YAY');\n this.addTemplate('foo', '{{outlet}}');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.index', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n this.add('route:foo', _emberRouting.Route.extend({\n model: function () {\n return true;\n }\n }));\n\n var promise = this.visit('/foo').then(function () {\n text = _this12.$('#app').text();\n\n assert.equal(text, 'YAY', 'foo.index was rendered');\n });\n var text = this.$('#app').text();\n assert.equal(text, 'FOO LOADING', 'foo.index_loading was entered');\n\n deferred.resolve();\n\n return promise;\n };\n\n _class.prototype['@test Prioritized error substate entry works with auto-generated index routes'] = function (assert) {\n var _this13 = this;\n\n this.addTemplate('foo.index_error', 'FOO ERROR: {{model.msg}}');\n this.addTemplate('foo.index', 'YAY');\n this.addTemplate('foo', '{{outlet}}');\n\n this.router.map(function () {\n this.route('foo', function () {\n this.route('bar');\n });\n });\n\n this.add('route:foo.index', _emberRouting.Route.extend({\n model: function () {\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n }\n }));\n this.add('route:foo', _emberRouting.Route.extend({\n model: function () {\n return true;\n }\n }));\n\n return this.visit('/').then(function () {\n return _this13.visit('/foo').then(function () {\n var text = _this13.$('#app').text();\n\n assert.equal(text, 'FOO ERROR: did it broke?', 'foo.index_error was entered');\n });\n });\n };\n\n _class.prototype['@test Rejected promises returned from ApplicationRoute transition into top-level application_error'] = function (assert) {\n var _this14 = this;\n\n var reject = true;\n\n this.addTemplate('index', 'INDEX
');\n this.add('route:application', _emberRouting.Route.extend({\n init: function () {\n this._super.apply(this, arguments);\n },\n model: function () {\n if (reject) {\n return _emberRuntime.RSVP.reject({ msg: 'BAD NEWS BEARS' });\n } else {\n return {};\n }\n }\n }));\n\n this.addTemplate('application_error', '\\n TOPLEVEL ERROR: {{model.msg}}
\\n ');\n\n return this.visit('/').then(function () {\n var text = _this14.$('#toplevel-error').text();\n assert.equal(text, 'TOPLEVEL ERROR: BAD NEWS BEARS', 'toplevel error rendered');\n reject = false;\n }).then(function () {\n return _this14.visit('/');\n }).then(function () {\n var text = _this14.$('#index').text();\n assert.equal(text, 'INDEX', 'the index route resolved');\n });\n };\n\n (0, _emberBabel.createClass)(_class, [{\n key: 'currentPath',\n get: function () {\n return this.getController('application').get('currentPath');\n }\n }]);\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Loading/Error Substates - nested routes', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n\n var _this15 = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.apply(this, arguments));\n\n counter = 1;\n\n _this15.addTemplate('application', '{{outlet}}
');\n _this15.addTemplate('index', 'INDEX');\n _this15.addTemplate('grandma', 'GRANDMA {{outlet}}');\n _this15.addTemplate('mom', 'MOM');\n\n _this15.router.map(function () {\n this.route('grandma', function () {\n this.route('mom', { resetNamespace: true }, function () {\n this.route('sally');\n this.route('this-route-throws');\n });\n this.route('puppies');\n });\n this.route('memere', { path: '/memere/:seg' }, function () {});\n });\n\n _this15.visit('/');\n return _this15;\n }\n\n _class2.prototype.getController = function (name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n _class2.prototype['@test ApplicationRoute#currentPath reflects loading state path'] = function (assert) {\n var _this16 = this;\n\n var momDeferred = _emberRuntime.RSVP.defer();\n\n this.addTemplate('grandma.loading', 'GRANDMALOADING');\n\n this.add('route:mom', _emberRouting.Route.extend({\n model: function () {\n return momDeferred.promise;\n }\n }));\n\n var promise = this.visit('/grandma/mom').then(function () {\n text = _this16.$('#app').text();\n\n assert.equal(text, 'GRANDMA MOM', 'Grandma.mom loaded text is displayed');\n assert.equal(_this16.currentPath, 'grandma.mom.index', 'currentPath reflects final state');\n });\n var text = this.$('#app').text();\n\n assert.equal(text, 'GRANDMA GRANDMALOADING', 'Grandma.mom loading text displayed');\n\n assert.equal(this.currentPath, 'grandma.loading', 'currentPath reflects loading state');\n\n momDeferred.resolve();\n\n return promise;\n };\n\n _class2.prototype['@test Loading actions bubble to root but don\\'t enter substates above pivot '] = function (assert) {\n var _this17 = this;\n\n var sallyDeferred = _emberRuntime.RSVP.defer();\n var puppiesDeferred = _emberRuntime.RSVP.defer();\n\n this.add('route:application', _emberRouting.Route.extend({\n actions: {\n loading: function () {\n assert.ok(true, 'loading action received on ApplicationRoute');\n }\n }\n }));\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n return sallyDeferred.promise;\n }\n }));\n\n this.add('route:grandma.puppies', _emberRouting.Route.extend({\n model: function () {\n return puppiesDeferred.promise;\n }\n }));\n\n var promise = this.visit('/grandma/mom/sally');\n assert.equal(this.currentPath, 'index', 'Initial route fully loaded');\n\n sallyDeferred.resolve();\n\n promise.then(function () {\n assert.equal(_this17.currentPath, 'grandma.mom.sally', 'transition completed');\n\n var visit = _this17.visit('/grandma/puppies');\n assert.equal(_this17.currentPath, 'grandma.mom.sally', 'still in initial state because the only loading state is above the pivot route');\n\n return visit;\n }).then(function () {\n _this17.runTask(function () {\n return puppiesDeferred.resolve();\n });\n\n assert.equal(_this17.currentPath, 'grandma.puppies', 'Finished transition');\n });\n\n return promise;\n };\n\n _class2.prototype['@test Default error event moves into nested route'] = function (assert) {\n var _this18 = this;\n\n this.addTemplate('grandma.error', 'ERROR: {{model.msg}}');\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function () {\n step(assert, 2, 'MomSallyRoute#actions.error');\n return true;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally').then(function () {\n step(assert, 3, 'App finished loading');\n\n var text = _this18.$('#app').text();\n\n assert.equal(text, 'GRANDMA ERROR: did it broke?', 'error bubbles');\n assert.equal(_this18.currentPath, 'grandma.error', 'Initial route fully loaded');\n });\n };\n\n _class2.prototype['@test Non-bubbled errors that re-throw aren\\'t swallowed'] = function (assert) {\n var _this19 = this;\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n // returns undefined which is falsey\n throw err;\n }\n }\n }));\n\n assert.throws(function () {\n _this19.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg === 'did it broke?';\n }, 'it broke');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test Handled errors that re-throw aren\\'t swallowed'] = function (assert) {\n var _this20 = this;\n\n var handledError = void 0;\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n handledError = err;\n this.transitionTo('mom.this-route-throws');\n\n return false;\n }\n }\n }));\n\n this.add('route:mom.this-route-throws', _emberRouting.Route.extend({\n model: function () {\n step(assert, 3, 'MomThisRouteThrows#model');\n throw handledError;\n }\n }));\n\n assert.throws(function () {\n _this20.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg === 'did it broke?';\n }, 'it broke');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test errors that are bubbled are thrown at a higher level if not handled'] = function (assert) {\n var _this21 = this;\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function () {\n step(assert, 2, 'MomSallyRoute#actions.error');\n return true;\n }\n }\n }));\n\n assert.throws(function () {\n _this21.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg == 'did it broke?';\n }, 'Correct error was thrown');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test Handled errors that are thrown through rejection aren\\'t swallowed'] = function (assert) {\n var _this22 = this;\n\n var handledError = void 0;\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n handledError = err;\n this.transitionTo('mom.this-route-throws');\n\n return false;\n }\n }\n }));\n\n this.add('route:mom.this-route-throws', _emberRouting.Route.extend({\n model: function () {\n step(assert, 3, 'MomThisRouteThrows#model');\n return _emberRuntime.RSVP.reject(handledError);\n }\n }));\n\n assert.throws(function () {\n _this22.visit('/grandma/mom/sally');\n }, function (err) {\n return err.msg === 'did it broke?';\n }, 'it broke');\n\n return this.runLoopSettled();\n };\n\n _class2.prototype['@test Default error events move into nested route, prioritizing more specifically named error routes - NEW'] = function (assert) {\n var _this23 = this;\n\n this.addTemplate('grandma.error', 'ERROR: {{model.msg}}');\n this.addTemplate('mom_error', 'MOM ERROR: {{model.msg}}');\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function () {\n step(assert, 2, 'MomSallyRoute#actions.error');\n return true;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally').then(function () {\n step(assert, 3, 'Application finished booting');\n\n assert.equal(_this23.$('#app').text(), 'GRANDMA MOM ERROR: did it broke?', 'the more specifically named mome error substate was entered over the other error route');\n\n assert.equal(_this23.currentPath, 'grandma.mom_error', 'Initial route fully loaded');\n });\n };\n\n _class2.prototype['@test Slow promises waterfall on startup'] = function (assert) {\n var _this24 = this;\n\n var grandmaDeferred = _emberRuntime.RSVP.defer();\n var sallyDeferred = _emberRuntime.RSVP.defer();\n\n this.addTemplate('loading', 'LOADING');\n this.addTemplate('mom', 'MOM {{outlet}}');\n this.addTemplate('mom.loading', 'MOMLOADING');\n this.addTemplate('mom.sally', 'SALLY');\n\n this.add('route:grandma', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'GrandmaRoute#model');\n return grandmaDeferred.promise;\n }\n }));\n\n this.add('route:mom', _emberRouting.Route.extend({\n model: function () {\n step(assert, 2, 'MomRoute#model');\n return {};\n }\n }));\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 3, 'SallyRoute#model');\n return sallyDeferred.promise;\n },\n setupController: function () {\n step(assert, 4, 'SallyRoute#setupController');\n }\n }));\n\n var promise = this.visit('/grandma/mom/sally').then(function () {\n text = _this24.$('#app').text();\n\n assert.equal(text, 'GRANDMA MOM SALLY', 'Sally template displayed');\n });\n var text = this.$('#app').text();\n\n assert.equal(text, 'LOADING', 'The loading template is nested in application template\\'s outlet');\n\n this.runTask(function () {\n return grandmaDeferred.resolve();\n });\n text = this.$('#app').text();\n\n assert.equal(text, 'GRANDMA MOM MOMLOADING', 'Mom\\'s child loading route is displayed due to sally\\'s slow promise');\n\n sallyDeferred.resolve();\n\n return promise;\n };\n\n _class2.prototype['@test Enter child loading state of pivot route'] = function (assert) {\n var _this25 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n this.addTemplate('grandma.loading', 'GMONEYLOADING');\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n setupController: function () {\n step(assert, 1, 'SallyRoute#setupController');\n }\n }));\n\n this.add('route:grandma.puppies', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n return this.visit('/grandma/mom/sally').then(function () {\n assert.equal(_this25.currentPath, 'grandma.mom.sally', 'Initial route fully loaded');\n\n var promise = _this25.visit('/grandma/puppies').then(function () {\n assert.equal(_this25.currentPath, 'grandma.puppies', 'Finished transition');\n });\n\n assert.equal(_this25.currentPath, 'grandma.loading', 'in pivot route\\'s child loading state');\n deferred.resolve();\n\n return promise;\n });\n };\n\n _class2.prototype['@test Error events that aren\\'t bubbled don\\'t throw application assertions'] = function (assert) {\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n assert.equal(err.msg, 'did it broke?', 'it didn\\'t break');\n return false;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally');\n };\n\n _class2.prototype['@test Handled errors that bubble can be handled at a higher level'] = function (assert) {\n var handledError = void 0;\n\n this.add('route:mom', _emberRouting.Route.extend({\n actions: {\n error: function (err) {\n step(assert, 3, 'MomRoute#actions.error');\n assert.equal(err, handledError, 'error handled and rebubbled is handleable at higher route');\n }\n }\n }));\n\n this.add('route:mom.sally', _emberRouting.Route.extend({\n model: function () {\n step(assert, 1, 'MomSallyRoute#model');\n return _emberRuntime.RSVP.reject({\n msg: 'did it broke?'\n });\n },\n\n actions: {\n error: function (err) {\n step(assert, 2, 'MomSallyRoute#actions.error');\n handledError = err;\n\n return true;\n }\n }\n }));\n\n return this.visit('/grandma/mom/sally');\n };\n\n _class2.prototype['@test Setting a query param during a slow transition should work'] = function (assert) {\n var _this26 = this;\n\n var deferred = _emberRuntime.RSVP.defer();\n this.addTemplate('memere.loading', 'MMONEYLOADING');\n\n this.add('route:grandma', _emberRouting.Route.extend({\n beforeModel: function () {\n this.transitionTo('memere', 1);\n }\n }));\n\n this.add('route:memere', _emberRouting.Route.extend({\n queryParams: {\n test: { defaultValue: 1 }\n }\n }));\n\n this.add('route:memere.index', _emberRouting.Route.extend({\n model: function () {\n return deferred.promise;\n }\n }));\n\n var promise = this.visit('/grandma').then(function () {\n assert.equal(_this26.currentPath, 'memere.index', 'Transition should be complete');\n });\n var memereController = this.getController('memere');\n\n assert.equal(this.currentPath, 'memere.loading', 'Initial route should be loading');\n\n memereController.set('test', 3);\n\n assert.equal(this.currentPath, 'memere.loading', 'Initial route should still be loading');\n\n assert.equal(memereController.get('test'), 3, 'Controller query param value should have changed');\n deferred.resolve();\n\n return promise;\n };\n\n (0, _emberBabel.createClass)(_class2, [{\n key: 'currentPath',\n get: function () {\n return this.getController('application').get('currentPath');\n }\n }]);\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/routing/toplevel_dom_test', ['ember-babel', 'ember-environment', 'internal-test-helpers'], function (_emberBabel, _emberEnvironment, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Top Level DOM Structure', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n _this._APPLICATION_TEMPLATE_WRAPPER = _emberEnvironment.ENV._APPLICATION_TEMPLATE_WRAPPER;\n return _this;\n }\n\n _class.prototype.teardown = function () {\n _ApplicationTestCase.prototype.teardown.call(this);\n _emberEnvironment.ENV._APPLICATION_TEMPLATE_WRAPPER = this._APPLICATION_TEMPLATE_WRAPPER;\n };\n\n _class.prototype['@test topmost template with wrapper'] = function () {\n var _this2 = this;\n\n _emberEnvironment.ENV._APPLICATION_TEMPLATE_WRAPPER = true;\n\n this.addTemplate('application', 'hello world');\n\n return this.visit('/').then(function () {\n _this2.assertComponentElement(_this2.element, { content: 'hello world' });\n });\n };\n\n _class.prototype['@test topmost template without wrapper'] = function () {\n var _this3 = this;\n\n _emberEnvironment.ENV._APPLICATION_TEMPLATE_WRAPPER = false;\n\n this.addTemplate('application', 'hello world');\n\n return this.visit('/').then(function () {\n _this3.assertInnerHTML('hello world');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/service_injection_test', ['ember-babel', 'ember-owner', '@ember/controller', '@ember/service', 'ember-runtime', 'internal-test-helpers', 'ember-metal'], function (_emberBabel, _emberOwner, _controller, _service, _emberRuntime, _internalTestHelpers, _emberMetal) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('Service Injection', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test Service can be injected and is resolved'] = function (assert) {\n var _this2 = this;\n\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-service')\n }));\n var MyService = _service.default.extend();\n this.add('service:my-service', MyService);\n this.addTemplate('application', '');\n\n this.visit('/').then(function () {\n var controller = _this2.applicationInstance.lookup('controller:application');\n assert.ok(controller.get('myService') instanceof MyService);\n });\n };\n\n _class.prototype['@test Service can be an object proxy and access owner in init GH#16484'] = function (assert) {\n var _this3 = this;\n\n var serviceOwner = void 0;\n\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-service')\n }));\n var MyService = _service.default.extend(_emberRuntime._ProxyMixin, {\n init: function () {\n this._super.apply(this, arguments);\n\n serviceOwner = (0, _emberOwner.getOwner)(this);\n }\n });\n this.add('service:my-service', MyService);\n this.addTemplate('application', '');\n\n this.visit('/').then(function (instance) {\n var controller = _this3.applicationInstance.lookup('controller:application');\n assert.ok(controller.get('myService') instanceof MyService);\n assert.equal(serviceOwner, instance, 'should be able to `getOwner` in init');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n\n (0, _internalTestHelpers.moduleFor)('Service Injection with ES5 Getters', function (_ApplicationTestCase2) {\n (0, _emberBabel.inherits)(_class2, _ApplicationTestCase2);\n\n function _class2() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase2.apply(this, arguments));\n }\n\n _class2.prototype['@test Service can be injected and is resolved without calling `get`'] = function (assert) {\n var _this5 = this;\n\n this.add('controller:application', _controller.default.extend({\n myService: (0, _service.inject)('my-service')\n }));\n var MyService = _service.default.extend({\n name: (0, _emberMetal.computed)(function () {\n return 'The service name';\n })\n });\n this.add('service:my-service', MyService);\n this.addTemplate('application', '');\n\n this.visit('/').then(function () {\n var controller = _this5.applicationInstance.lookup('controller:application');\n assert.ok(controller.myService instanceof MyService);\n assert.equal(controller.myService.name, 'The service name', 'service property accessible');\n });\n };\n\n return _class2;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('ember/tests/view_instrumentation_test', ['ember-babel', '@ember/instrumentation', 'internal-test-helpers'], function (_emberBabel, _instrumentation, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('View Instrumentation', function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(_class, _ApplicationTestCase);\n\n function _class() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.call(this));\n\n _this.addTemplate('application', '{{outlet}}');\n _this.addTemplate('index', 'Index ');\n _this.addTemplate('posts', 'Posts ');\n\n _this.router.map(function () {\n this.route('posts');\n });\n return _this;\n }\n\n _class.prototype.teardown = function () {\n (0, _instrumentation.reset)();\n _ApplicationTestCase.prototype.teardown.call(this);\n };\n\n _class.prototype['@test Nodes without view instances are instrumented'] = function (assert) {\n var _this2 = this;\n\n var called = false;\n\n (0, _instrumentation.subscribe)('render', {\n before: function () {\n called = true;\n },\n after: function () {}\n });\n\n return this.visit('/').then(function () {\n assert.equal(_this2.textValue(), 'Index', 'It rendered the correct template');\n\n assert.ok(called, 'Instrumentation called on first render');\n called = false;\n\n return _this2.visit('/posts');\n }).then(function () {\n assert.equal(_this2.textValue(), 'Posts', 'It rendered the correct template');\n assert.ok(called, 'Instrumentation called on transition to non-view backed route');\n });\n };\n\n return _class;\n }(_internalTestHelpers.ApplicationTestCase));\n});","enifed('internal-test-helpers/index', ['exports', 'internal-test-helpers/lib/factory', 'internal-test-helpers/lib/build-owner', 'internal-test-helpers/lib/confirm-export', 'internal-test-helpers/lib/equal-inner-html', 'internal-test-helpers/lib/equal-tokens', 'internal-test-helpers/lib/module-for', 'internal-test-helpers/lib/strip', 'internal-test-helpers/lib/apply-mixins', 'internal-test-helpers/lib/get-text-of', 'internal-test-helpers/lib/matchers', 'internal-test-helpers/lib/run', 'internal-test-helpers/lib/test-cases/abstract', 'internal-test-helpers/lib/test-cases/abstract-application', 'internal-test-helpers/lib/test-cases/application', 'internal-test-helpers/lib/test-cases/query-param', 'internal-test-helpers/lib/test-cases/abstract-rendering', 'internal-test-helpers/lib/test-cases/rendering', 'internal-test-helpers/lib/test-cases/router', 'internal-test-helpers/lib/test-cases/autoboot-application', 'internal-test-helpers/lib/test-cases/default-resolver-application', 'internal-test-helpers/lib/test-resolver', 'internal-test-helpers/lib/browser-detect', 'internal-test-helpers/lib/registry-check'], function (exports, _factory, _buildOwner, _confirmExport, _equalInnerHtml, _equalTokens, _moduleFor, _strip, _applyMixins, _getTextOf, _matchers, _run, _abstract, _abstractApplication, _application, _queryParam, _abstractRendering, _rendering, _router, _autobootApplication, _defaultResolverApplication, _testResolver, _browserDetect, _registryCheck) {\n 'use strict';\n\n Object.defineProperty(exports, 'factory', {\n enumerable: true,\n get: function () {\n return _factory.default;\n }\n });\n Object.defineProperty(exports, 'buildOwner', {\n enumerable: true,\n get: function () {\n return _buildOwner.default;\n }\n });\n Object.defineProperty(exports, 'confirmExport', {\n enumerable: true,\n get: function () {\n return _confirmExport.default;\n }\n });\n Object.defineProperty(exports, 'equalInnerHTML', {\n enumerable: true,\n get: function () {\n return _equalInnerHtml.default;\n }\n });\n Object.defineProperty(exports, 'equalTokens', {\n enumerable: true,\n get: function () {\n return _equalTokens.default;\n }\n });\n Object.defineProperty(exports, 'moduleFor', {\n enumerable: true,\n get: function () {\n return _moduleFor.default;\n }\n });\n Object.defineProperty(exports, 'strip', {\n enumerable: true,\n get: function () {\n return _strip.default;\n }\n });\n Object.defineProperty(exports, 'applyMixins', {\n enumerable: true,\n get: function () {\n return _applyMixins.default;\n }\n });\n Object.defineProperty(exports, 'getTextOf', {\n enumerable: true,\n get: function () {\n return _getTextOf.default;\n }\n });\n Object.defineProperty(exports, 'equalsElement', {\n enumerable: true,\n get: function () {\n return _matchers.equalsElement;\n }\n });\n Object.defineProperty(exports, 'classes', {\n enumerable: true,\n get: function () {\n return _matchers.classes;\n }\n });\n Object.defineProperty(exports, 'styles', {\n enumerable: true,\n get: function () {\n return _matchers.styles;\n }\n });\n Object.defineProperty(exports, 'regex', {\n enumerable: true,\n get: function () {\n return _matchers.regex;\n }\n });\n Object.defineProperty(exports, 'runAppend', {\n enumerable: true,\n get: function () {\n return _run.runAppend;\n }\n });\n Object.defineProperty(exports, 'runDestroy', {\n enumerable: true,\n get: function () {\n return _run.runDestroy;\n }\n });\n Object.defineProperty(exports, 'AbstractTestCase', {\n enumerable: true,\n get: function () {\n return _abstract.default;\n }\n });\n Object.defineProperty(exports, 'AbstractApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _abstractApplication.default;\n }\n });\n Object.defineProperty(exports, 'ApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _application.default;\n }\n });\n Object.defineProperty(exports, 'QueryParamTestCase', {\n enumerable: true,\n get: function () {\n return _queryParam.default;\n }\n });\n Object.defineProperty(exports, 'AbstractRenderingTestCase', {\n enumerable: true,\n get: function () {\n return _abstractRendering.default;\n }\n });\n Object.defineProperty(exports, 'RenderingTestCase', {\n enumerable: true,\n get: function () {\n return _rendering.default;\n }\n });\n Object.defineProperty(exports, 'RouterTestCase', {\n enumerable: true,\n get: function () {\n return _router.default;\n }\n });\n Object.defineProperty(exports, 'AutobootApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _autobootApplication.default;\n }\n });\n Object.defineProperty(exports, 'DefaultResolverApplicationTestCase', {\n enumerable: true,\n get: function () {\n return _defaultResolverApplication.default;\n }\n });\n Object.defineProperty(exports, 'TestResolver', {\n enumerable: true,\n get: function () {\n return _testResolver.default;\n }\n });\n Object.defineProperty(exports, 'ModuleBasedTestResolver', {\n enumerable: true,\n get: function () {\n return _testResolver.ModuleBasedResolver;\n }\n });\n Object.defineProperty(exports, 'isIE11', {\n enumerable: true,\n get: function () {\n return _browserDetect.isIE11;\n }\n });\n Object.defineProperty(exports, 'verifyInjection', {\n enumerable: true,\n get: function () {\n return _registryCheck.verifyInjection;\n }\n });\n Object.defineProperty(exports, 'verifyRegistration', {\n enumerable: true,\n get: function () {\n return _registryCheck.verifyRegistration;\n }\n });\n});","enifed('internal-test-helpers/lib/apply-mixins', ['exports', '@ember/polyfills', 'internal-test-helpers/lib/get-all-property-names'], function (exports, _polyfills, _getAllPropertyNames) {\n 'use strict';\n\n exports.default = function (TestClass) {\n var _len, mixins, _key;\n\n for (_len = arguments.length, mixins = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n mixins[_key - 1] = arguments[_key];\n }\n\n mixins.forEach(function (mixinOrGenerator) {\n var mixin = void 0,\n generator,\n properties;\n\n if (isGenerator(mixinOrGenerator)) {\n generator = mixinOrGenerator;\n\n mixin = {};\n\n generator.cases.forEach(function (value, idx) {\n (0, _polyfills.assign)(mixin, generator.generate(value, idx));\n });\n\n (0, _polyfills.assign)(TestClass.prototype, mixin);\n } else if (typeof mixinOrGenerator === 'function') {\n properties = (0, _getAllPropertyNames.default)(mixinOrGenerator);\n\n mixin = new mixinOrGenerator();\n\n properties.forEach(function (name) {\n TestClass.prototype[name] = function () {\n return mixin[name].apply(mixin, arguments);\n };\n });\n } else {\n mixin = mixinOrGenerator;\n (0, _polyfills.assign)(TestClass.prototype, mixin);\n }\n });\n\n return TestClass;\n };\n\n function isGenerator(mixin) {\n return Array.isArray(mixin.cases) && typeof mixin.generate === 'function';\n }\n});","enifed('internal-test-helpers/lib/browser-detect', ['exports'], function (exports) {\n 'use strict';\n\n // `window.ActiveXObject` is \"falsey\" in IE11 (but not `undefined` or `false`)\n // `\"ActiveXObject\" in window` returns `true` in all IE versions\n // only IE11 will pass _both_ of these conditions\n\n exports.isIE11 = !window.ActiveXObject && 'ActiveXObject' in window;\n});","enifed('internal-test-helpers/lib/build-owner', ['exports', 'container', 'ember-routing', '@ember/application/instance', '@ember/application', 'ember-runtime'], function (exports, _container, _emberRouting, _instance, _application, _emberRuntime) {\n 'use strict';\n\n exports.default = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var ownerOptions = options.ownerOptions || {};\n var resolver = options.resolver;\n var bootOptions = options.bootOptions || {};\n\n var Owner = _emberRuntime.Object.extend(_emberRuntime.RegistryProxyMixin, _emberRuntime.ContainerProxyMixin);\n\n var namespace = new _emberRuntime.Object({\n Resolver: new ResolverWrapper(resolver)\n });\n\n var fallbackRegistry = _application.default.buildRegistry(namespace);\n fallbackRegistry.register('router:main', _emberRouting.Router);\n\n var registry = new _container.Registry({\n fallback: fallbackRegistry\n });\n\n _instance.default.setupRegistry(registry, bootOptions);\n\n var owner = Owner.create({\n __registry__: registry,\n __container__: null\n }, ownerOptions);\n\n var container = registry.container({ owner: owner });\n owner.__container__ = container;\n\n return owner;\n };\n\n var ResolverWrapper = function () {\n function ResolverWrapper(resolver) {\n\n this.resolver = resolver;\n }\n\n ResolverWrapper.prototype.create = function () {\n return this.resolver;\n };\n\n return ResolverWrapper;\n }();\n});","enifed('internal-test-helpers/lib/confirm-export', ['exports', 'require'], function (exports, _require2) {\n 'use strict';\n\n exports.default = confirmExport;\n\n function getDescriptor(obj, path) {\n var parts = path.split('.'),\n i,\n part;\n var value = obj;\n for (i = 0; i < parts.length - 1; i++) {\n part = parts[i];\n\n value = value[part];\n if (!value) {\n return undefined;\n }\n }\n var last = parts[parts.length - 1];\n return Object.getOwnPropertyDescriptor(value, last);\n }\n\n function confirmExport(Ember, assert, path, moduleId, exportName) {\n var desc, mod, _mod;\n\n try {\n desc = getDescriptor(Ember, path);\n\n assert.ok(desc, 'the ' + path + ' property exists on the Ember global');\n\n if (typeof exportName === 'string') {\n mod = (0, _require2.default)(moduleId);\n\n assert.equal(desc.value, mod[exportName], 'Ember.' + path + ' is exported correctly');\n assert.notEqual(mod[exportName], undefined, 'Ember.' + path + ' is not `undefined`');\n } else if ('value' in desc) {\n assert.equal(desc.value, exportName.value, 'Ember.' + path + ' is exported correctly');\n } else {\n _mod = (0, _require2.default)(moduleId);\n\n assert.equal(desc.get, _mod[exportName.get], 'Ember.' + path + ' getter is exported correctly');\n assert.notEqual(desc.get, undefined, 'Ember.' + path + ' getter is not undefined');\n\n if (exportName.set) {\n assert.equal(desc.set, _mod[exportName.set], 'Ember.' + path + ' setter is exported correctly');\n assert.notEqual(desc.set, undefined, 'Ember.' + path + ' setter is not undefined');\n }\n }\n } catch (error) {\n assert.pushResult({\n result: false,\n message: 'An error occured while testing ' + path + ' is exported from ' + moduleId + '.',\n source: error\n });\n }\n }\n});","enifed('internal-test-helpers/lib/ember-dev/assertion', ['exports', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _utils) {\n 'use strict';\n\n var BREAK = {};\n /*\n This assertion class is used to test assertions made using Ember.assert.\n It injects two helpers onto `window`:\n \n - expectAssertion(func: Function, [expectedMessage: String | RegExp])\n \n This function calls `func` and asserts that `Ember.assert` is invoked during\n the execution. Moreover, it takes a String or a RegExp as a second optional\n argument that can be used to test if a specific assertion message was\n generated.\n \n - ignoreAssertion(func: Function)\n \n This function calls `func` and disables `Ember.assert` during the execution.\n In particular, this prevents `Ember.assert` from throw errors that would\n disrupt the control flow.\n */\n\n var AssertionAssert = function () {\n function AssertionAssert(env) {\n\n this.env = env;\n }\n\n AssertionAssert.prototype.reset = function () {};\n\n AssertionAssert.prototype.assert = function () {};\n\n AssertionAssert.prototype.inject = function () {\n var _this = this;\n\n window.expectAssertion = function (func, expectedMessage) {\n var assert = QUnit.config.current.assert;\n\n if (_this.env.runningProdBuild) {\n assert.ok(true, 'Assertions disabled in production builds.');\n return;\n }\n var sawCall = false;\n var actualMessage = undefined;\n // The try-catch statement is used to \"exit\" `func` as soon as\n // the first useful assertion has been produced.\n try {\n (0, _utils.callWithStub)(_this.env, 'assert', func, function (message, test) {\n sawCall = true;\n if ((0, _utils.checkTest)(test)) {\n return;\n }\n actualMessage = message;\n throw BREAK;\n });\n } catch (e) {\n if (e !== BREAK) {\n throw e;\n }\n }\n check(assert, sawCall, actualMessage, expectedMessage);\n };\n window.ignoreAssertion = function (func) {\n (0, _utils.callWithStub)(_this.env, 'assert', func);\n };\n };\n\n AssertionAssert.prototype.restore = function () {\n window.expectAssertion = null;\n window.ignoreAssertion = null;\n };\n\n return AssertionAssert;\n }();\n\n exports.default = AssertionAssert;\n\n function check(assert, sawCall, actualMessage, expectedMessage) {\n // Run assertions in an order that is useful when debugging a test failure.\n if (!sawCall) {\n assert.ok(false, 'Expected Ember.assert to be called (Not called with any value).');\n } else if (!actualMessage) {\n assert.ok(false, 'Expected a failing Ember.assert (Ember.assert called, but without a failing test).');\n } else {\n if (expectedMessage) {\n if (expectedMessage instanceof RegExp) {\n assert.ok(expectedMessage.test(actualMessage), 'Expected failing Ember.assert: \\'' + expectedMessage + '\\', but got \\'' + actualMessage + '\\'.');\n } else {\n assert.equal(actualMessage, expectedMessage, 'Expected failing Ember.assert: \\'' + expectedMessage + '\\', but got \\'' + actualMessage + '\\'.');\n }\n } else {\n // Positive assertion that assert was called\n assert.ok(true, 'Expected a failing Ember.assert.');\n }\n }\n }\n});","enifed('internal-test-helpers/lib/ember-dev/containers', ['exports', 'container'], function (exports, _container) {\n 'use strict';\n\n function ContainersAssert(env) {\n this.env = env;\n }\n\n var containerLeakTracking = _container.Container._leakTracking;\n\n ContainersAssert.prototype = {\n reset: function () {},\n inject: function () {},\n assert: function () {\n if (containerLeakTracking === undefined) return;\n var _QUnit = QUnit,\n config = _QUnit.config;\n var _config$current = config.current,\n testName = _config$current.testName,\n testId = _config$current.testId,\n moduleName = _config$current.module.name,\n originalFinish = _config$current.finish;\n\n config.current.finish = function () {\n originalFinish.call(this);\n originalFinish = undefined;\n config.queue.unshift(function () {\n if (containerLeakTracking.hasContainers()) {\n containerLeakTracking.reset();\n // eslint-disable-next-line no-console\n console.assert(false, 'Leaked container after test ' + moduleName + ': ' + testName + ' testId=' + testId);\n }\n });\n };\n },\n restore: function () {}\n };\n\n exports.default = ContainersAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/debug', ['exports', 'internal-test-helpers/lib/ember-dev/method-call-tracker'], function (exports, _methodCallTracker) {\n 'use strict';\n\n var DebugAssert = function () {\n function DebugAssert(methodName, env) {\n\n this.methodName = methodName;\n this.env = env;\n this.tracker = null;\n }\n\n DebugAssert.prototype.inject = function () {};\n\n DebugAssert.prototype.restore = function () {\n this.reset();\n };\n\n DebugAssert.prototype.reset = function () {\n if (this.tracker) {\n this.tracker.restoreMethod();\n }\n this.tracker = null;\n };\n\n DebugAssert.prototype.assert = function () {\n if (this.tracker) {\n this.tracker.assert();\n }\n };\n\n DebugAssert.prototype.runExpectation = function (func, callback) {\n var originalTracker = null;\n // When helpers are passed a callback, they get a new tracker context\n if (func) {\n originalTracker = this.tracker;\n this.tracker = null;\n }\n if (!this.tracker) {\n this.tracker = new _methodCallTracker.default(this.env, this.methodName);\n }\n // Yield to caller with tracker instance\n callback(this.tracker);\n // Once the given callback is invoked, the pending assertions should be\n // flushed immediately\n if (func) {\n func();\n this.assert();\n this.reset();\n this.tracker = originalTracker;\n }\n };\n\n return DebugAssert;\n }();\n\n exports.default = DebugAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/deprecation', ['exports', 'ember-babel', 'internal-test-helpers/lib/ember-dev/debug', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _emberBabel, _debug, _utils) {\n 'use strict';\n\n var DeprecationAssert = function (_DebugAssert) {\n (0, _emberBabel.inherits)(DeprecationAssert, _DebugAssert);\n\n function DeprecationAssert(env) {\n return (0, _emberBabel.possibleConstructorReturn)(this, _DebugAssert.call(this, 'deprecate', env));\n }\n\n DeprecationAssert.prototype.inject = function () {\n var _this2 = this;\n\n // Expects no deprecation to happen within a function, or if no function is\n // passed, from the time of calling until the end of the test.\n //\n // expectNoDeprecation(function() {\n // fancyNewThing();\n // });\n //\n // expectNoDeprecation();\n // Ember.deprecate(\"Old And Busted\");\n //\n\n // Expect a deprecation to happen within a function, or if no function\n // is pass, from the time of calling until the end of the test. Can be called\n // multiple times to assert deprecations with different specific messages\n // were fired.\n //\n // expectDeprecation(function() {\n // Ember.deprecate(\"Old And Busted\");\n // }, /* optionalStringOrRegex */);\n //\n // expectDeprecation(/* optionalStringOrRegex */);\n // Ember.deprecate(\"Old And Busted\");\n //\n\n window.expectNoDeprecation = function (func) {\n if (typeof func !== 'function') {\n func = undefined;\n }\n _this2.runExpectation(func, function (tracker) {\n if (tracker.isExpectingCalls()) {\n throw new Error('expectNoDeprecation was called after expectDeprecation was called!');\n }\n tracker.expectNoCalls();\n });\n };\n window.expectDeprecation = function (func, message) {\n var actualFunc = void 0;\n if (typeof func !== 'function') {\n message = func;\n actualFunc = undefined;\n } else {\n actualFunc = func;\n }\n _this2.runExpectation(actualFunc, function (tracker) {\n if (tracker.isExpectingNoCalls()) {\n throw new Error('expectDeprecation was called after expectNoDeprecation was called!');\n }\n tracker.expectCall(message, ['id', 'until']);\n });\n };\n window.ignoreDeprecation = function (func) {\n (0, _utils.callWithStub)(_this2.env, 'deprecate', func);\n };\n };\n\n DeprecationAssert.prototype.restore = function () {\n _DebugAssert.prototype.restore.call(this);\n window.expectDeprecation = null;\n window.expectNoDeprecation = null;\n window.ignoreDeprecation = null;\n };\n\n return DeprecationAssert;\n }(_debug.default);\n\n exports.default = DeprecationAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/index', ['exports', 'internal-test-helpers/lib/ember-dev/deprecation', 'internal-test-helpers/lib/ember-dev/warning', 'internal-test-helpers/lib/ember-dev/assertion', 'internal-test-helpers/lib/ember-dev/run-loop', 'internal-test-helpers/lib/ember-dev/namespaces', 'internal-test-helpers/lib/ember-dev/containers', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _deprecation, _warning, _assertion, _runLoop, _namespaces, _containers, _utils) {\n 'use strict';\n\n var EmberDevTestHelperAssert = (0, _utils.buildCompositeAssert)([_deprecation.default, _warning.default, _assertion.default, _runLoop.default, _namespaces.default, _containers.default]);\n\n exports.default = EmberDevTestHelperAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/method-call-tracker', ['exports', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _utils) {\n 'use strict';\n\n var MethodCallTracker = function () {\n function MethodCallTracker(env, methodName) {\n\n this._env = env;\n this._methodName = methodName;\n this._isExpectingNoCalls = false;\n this._expectedMessages = [];\n this._expectedOptionLists = [];\n this._actuals = [];\n this._originalMethod = undefined;\n }\n\n MethodCallTracker.prototype.stubMethod = function () {\n var _this = this;\n\n if (this._originalMethod) {\n // Method is already stubbed\n return;\n }\n var env = this._env;\n var methodName = this._methodName;\n this._originalMethod = env.getDebugFunction(methodName);\n env.setDebugFunction(methodName, function (message, test, options) {\n var resultOfTest = (0, _utils.checkTest)(test);\n _this._actuals.push([message, resultOfTest, options]);\n });\n };\n\n MethodCallTracker.prototype.restoreMethod = function () {\n if (this._originalMethod) {\n this._env.setDebugFunction(this._methodName, this._originalMethod);\n }\n };\n\n MethodCallTracker.prototype.expectCall = function (message, options) {\n this.stubMethod();\n this._expectedMessages.push(message || /.*/);\n this._expectedOptionLists.push(options);\n };\n\n MethodCallTracker.prototype.expectNoCalls = function () {\n this.stubMethod();\n this._isExpectingNoCalls = true;\n };\n\n MethodCallTracker.prototype.isExpectingNoCalls = function () {\n return this._isExpectingNoCalls;\n };\n\n MethodCallTracker.prototype.isExpectingCalls = function () {\n return !this._isExpectingNoCalls && this._expectedMessages.length;\n };\n\n MethodCallTracker.prototype.assert = function () {\n var assert = QUnit.config.current.assert,\n actualMessages,\n expectedMessage,\n expectedOptionList,\n matchesMessage,\n matchesOptionList,\n expectedOptionsMessage,\n actualOptionsMessage;\n\n var env = this._env;\n var methodName = this._methodName;\n var isExpectingNoCalls = this._isExpectingNoCalls;\n var expectedMessages = this._expectedMessages;\n var expectedOptionLists = this._expectedOptionLists;\n var actuals = this._actuals;\n var o = void 0,\n i = void 0,\n j = void 0;\n if (!isExpectingNoCalls && expectedMessages.length === 0 && actuals.length === 0) {\n return;\n }\n if (env.runningProdBuild) {\n assert.ok(true, 'calls to Ember.' + methodName + ' disabled in production builds.');\n return;\n }\n if (isExpectingNoCalls) {\n actualMessages = [];\n\n for (i = 0; i < actuals.length; i++) {\n if (!actuals[i][1]) {\n actualMessages.push(actuals[i][0]);\n }\n }\n assert.ok(actualMessages.length === 0, 'Expected no Ember.' + methodName + ' calls, got ' + actuals.length + ': ' + actualMessages.join(', '));\n return;\n }\n var actual = void 0;\n var match = undefined;\n for (o = 0; o < expectedMessages.length; o++) {\n expectedMessage = expectedMessages[o];\n expectedOptionList = expectedOptionLists[o];\n\n for (i = 0; i < actuals.length; i++) {\n matchesMessage = false;\n matchesOptionList = false;\n\n actual = actuals[i];\n if (actual[1] === true) {\n continue;\n }\n if (expectedMessage instanceof RegExp && expectedMessage.test(actual[0])) {\n matchesMessage = true;\n } else if (expectedMessage === actual[0]) {\n matchesMessage = true;\n }\n if (expectedOptionList === undefined) {\n matchesOptionList = true;\n } else if (actual[2]) {\n matchesOptionList = true;\n for (j = 0; j < expectedOptionList.length; j++) {\n matchesOptionList = matchesOptionList && actual[2].hasOwnProperty(expectedOptionList[j]);\n }\n }\n if (matchesMessage && matchesOptionList) {\n match = actual;\n break;\n }\n }\n expectedOptionsMessage = expectedOptionList ? 'and options: { ' + expectedOptionList.join(', ') + ' }' : 'and no options';\n actualOptionsMessage = actual && actual[2] ? 'and options: { ' + Object.keys(actual[2]).join(', ') + ' }' : 'and no options';\n\n if (!actual) {\n assert.ok(false, 'Received no Ember.' + methodName + ' calls at all, expecting: ' + expectedMessage);\n } else if (match && !match[1]) {\n assert.ok(true, 'Received failing Ember.' + methodName + ' call with message: ' + match[0]);\n } else if (match && match[1]) {\n assert.ok(false, 'Expected failing Ember.' + methodName + ' call, got succeeding with message: ' + match[0]);\n } else if (actual[1]) {\n assert.ok(false, 'Did not receive failing Ember.' + methodName + ' call matching \\'' + expectedMessage + '\\' ' + expectedOptionsMessage + ', last was success with \\'' + actual[0] + '\\' ' + actualOptionsMessage);\n } else if (!actual[1]) {\n assert.ok(false, 'Did not receive failing Ember.' + methodName + ' call matching \\'' + expectedMessage + '\\' ' + expectedOptionsMessage + ', last was failure with \\'' + actual[0] + '\\' ' + actualOptionsMessage);\n }\n }\n };\n\n return MethodCallTracker;\n }();\n\n exports.default = MethodCallTracker;\n});","enifed('internal-test-helpers/lib/ember-dev/namespaces', ['exports', '@ember/runloop', 'ember-metal'], function (exports, _runloop, _emberMetal) {\n 'use strict';\n\n function NamespacesAssert(env) {\n this.env = env;\n }\n\n NamespacesAssert.prototype = {\n reset: function () {},\n inject: function () {},\n assert: function () {\n var assert = QUnit.config.current.assert,\n i;\n\n if (_emberMetal.NAMESPACES.length > 0) {\n assert.ok(false, 'Should not have any NAMESPACES after tests');\n (0, _runloop.run)(function () {\n var namespaces = _emberMetal.NAMESPACES.slice(),\n i;\n for (i = 0; i < namespaces.length; i++) {\n namespaces[i].destroy();\n }\n });\n }\n var keys = Object.keys(_emberMetal.NAMESPACES_BY_ID);\n if (keys.length > 0) {\n assert.ok(false, 'Should not have any NAMESPACES_BY_ID after tests');\n for (i = 0; i < keys.length; i++) {\n delete _emberMetal.NAMESPACES_BY_ID[keys[i]];\n }\n }\n },\n restore: function () {}\n };\n\n exports.default = NamespacesAssert;\n});","enifed('internal-test-helpers/lib/ember-dev/run-loop', ['exports', '@ember/runloop'], function (exports, _runloop) {\n 'use strict';\n\n function RunLoopAssertion(env) {\n this.env = env;\n }\n\n RunLoopAssertion.prototype = {\n reset: function () {},\n inject: function () {},\n assert: function () {\n var assert = QUnit.config.current.assert;\n\n if ((0, _runloop.getCurrentRunLoop)()) {\n assert.ok(false, 'Should not be in a run loop at end of test');\n while ((0, _runloop.getCurrentRunLoop)()) {\n (0, _runloop.end)();\n }\n }\n\n if ((0, _runloop.hasScheduledTimers)()) {\n assert.ok(false, 'Ember run should not have scheduled timers at end of test');\n (0, _runloop.cancelTimers)();\n }\n },\n restore: function () {}\n };\n\n exports.default = RunLoopAssertion;\n});","enifed(\"internal-test-helpers/lib/ember-dev/setup-qunit\", [\"exports\"], function (exports) {\n \"use strict\";\n\n exports.default = function (assertion, _qunitGlobal) {\n var qunitGlobal = QUnit;\n if (_qunitGlobal) {\n qunitGlobal = _qunitGlobal;\n }\n var originalModule = qunitGlobal.module;\n qunitGlobal.module = function (name, _options) {\n var options = _options || {};\n var originalSetup = options.setup || options.beforeEach || function () {};\n var originalTeardown = options.teardown || options.afterEach || function () {};\n delete options.setup;\n delete options.teardown;\n options.beforeEach = function () {\n assertion.reset();\n assertion.inject();\n return originalSetup.apply(this, arguments);\n };\n options.afterEach = function () {\n var result = originalTeardown.apply(this, arguments);\n assertion.assert();\n assertion.restore();\n return result;\n };\n return originalModule(name, options);\n };\n };\n});","enifed('internal-test-helpers/lib/ember-dev/utils', ['exports'], function (exports) {\n 'use strict';\n\n exports.buildCompositeAssert = function (assertClasses) {\n function Composite(env) {\n this.asserts = assertClasses.map(function (Assert) {\n return new Assert(env);\n });\n }\n Composite.prototype = {\n reset: callForEach('asserts', 'reset'),\n inject: callForEach('asserts', 'inject'),\n assert: callForEach('asserts', 'assert'),\n restore: callForEach('asserts', 'restore')\n };\n return Composite;\n };\n exports.callWithStub = function (env, name, func) {\n var debugStub = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n\n var originalFunc = env.getDebugFunction(name);\n try {\n env.setDebugFunction(name, debugStub);\n func();\n } finally {\n env.setDebugFunction(name, originalFunc);\n }\n };\n exports.checkTest = function (test) {\n return typeof test === 'function' ? test() : test;\n };\n function callForEach(prop, func) {\n return function () {\n var i, l;\n\n for (i = 0, l = this[prop].length; i < l; i++) {\n this[prop][i][func]();\n }\n };\n }\n\n function noop() {}\n});","enifed('internal-test-helpers/lib/ember-dev/warning', ['exports', 'ember-babel', 'internal-test-helpers/lib/ember-dev/debug', 'internal-test-helpers/lib/ember-dev/utils'], function (exports, _emberBabel, _debug, _utils) {\n 'use strict';\n\n var WarningAssert = function (_DebugAssert) {\n (0, _emberBabel.inherits)(WarningAssert, _DebugAssert);\n\n function WarningAssert(env) {\n return (0, _emberBabel.possibleConstructorReturn)(this, _DebugAssert.call(this, 'warn', env));\n }\n\n WarningAssert.prototype.inject = function () {\n var _this2 = this;\n\n // Expects no warning to happen within a function, or if no function is\n // passed, from the time of calling until the end of the test.\n //\n // expectNoWarning(function() {\n // fancyNewThing();\n // });\n //\n // expectNoWarning();\n // Ember.warn(\"Oh snap, didn't expect that\");\n //\n\n // Expect a warning to happen within a function, or if no function is\n // passed, from the time of calling until the end of the test. Can be called\n // multiple times to assert warnings with different specific messages\n // happened.\n //\n // expectWarning(function() {\n // Ember.warn(\"Times they are a-changin'\");\n // }, /* optionalStringOrRegex */);\n //\n // expectWarning(/* optionalStringOrRegex */);\n // Ember.warn(\"Times definitely be changin'\");\n //\n\n window.expectNoWarning = function (func) {\n if (typeof func !== 'function') {\n func = undefined;\n }\n _this2.runExpectation(func, function (tracker) {\n if (tracker.isExpectingCalls()) {\n throw new Error('expectNoWarning was called after expectWarning was called!');\n }\n tracker.expectNoCalls();\n });\n };\n window.expectWarning = function (func, message) {\n var actualFunc = void 0;\n if (typeof func !== 'function') {\n message = func;\n actualFunc = undefined;\n } else {\n actualFunc = func;\n }\n _this2.runExpectation(actualFunc, function (tracker) {\n if (tracker.isExpectingNoCalls()) {\n throw new Error('expectWarning was called after expectNoWarning was called!');\n }\n tracker.expectCall(message);\n });\n };\n window.ignoreWarning = function (func) {\n (0, _utils.callWithStub)(_this2.env, 'warn', func);\n };\n };\n\n WarningAssert.prototype.restore = function () {\n _DebugAssert.prototype.restore.call(this);\n window.expectWarning = null;\n window.expectNoWarning = null;\n window.ignoreWarning = null;\n };\n\n return WarningAssert;\n }(_debug.default);\n\n exports.default = WarningAssert;\n});","enifed('internal-test-helpers/lib/equal-inner-html', ['exports'], function (exports) {\n 'use strict';\n\n exports.default = function (assert, fragment, html) {\n var actualHTML = normalizeInnerHTML(fragment.innerHTML);\n\n assert.pushResult({\n result: actualHTML === html,\n actual: actualHTML,\n expected: html\n });\n };\n // detect side-effects of cloning svg elements in IE9-11\n var ieSVGInnerHTML = function () {\n if (!document.createElementNS) {\n return false;\n }\n var div = document.createElement('div');\n var node = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n div.appendChild(node);\n var clone = div.cloneNode(true);\n return clone.innerHTML === ' ';\n }();\n\n function normalizeInnerHTML(actualHTML) {\n if (ieSVGInnerHTML) {\n // Replace ` ` with ` `, etc.\n // drop namespace attribute\n // replace self-closing elements\n actualHTML = actualHTML.replace(/ xmlns=\"[^\"]+\"/, '').replace(/<([^ >]+) [^\\/>]*\\/>/gi, function (tag, tagName) {\n return tag.slice(0, tag.length - 3) + '>' + tagName + '>';\n });\n }\n\n return actualHTML;\n }\n});","enifed('internal-test-helpers/lib/equal-tokens', ['exports', 'simple-html-tokenizer'], function (exports, _simpleHtmlTokenizer) {\n 'use strict';\n\n exports.default = function (actualContainer, expectedHTML) {\n var message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n var actual = generateTokens(actualContainer);\n var expected = generateTokens(expectedHTML);\n\n normalizeTokens(actual.tokens);\n normalizeTokens(expected.tokens);\n\n var assert = QUnit.config.current.assert;\n\n var equiv = QUnit.equiv(actual.tokens, expected.tokens);\n\n if (equiv && expected.html !== actual.html) {\n assert.deepEqual(actual.tokens, expected.tokens, message);\n } else {\n assert.pushResult({\n result: QUnit.equiv(actual.tokens, expected.tokens),\n actual: actual.html,\n expected: expected.html,\n message: message\n });\n }\n };\n\n function generateTokens(containerOrHTML) {\n if (typeof containerOrHTML === 'string') {\n return {\n tokens: (0, _simpleHtmlTokenizer.tokenize)(containerOrHTML),\n html: containerOrHTML\n };\n } else {\n return {\n tokens: (0, _simpleHtmlTokenizer.tokenize)(containerOrHTML.innerHTML),\n html: containerOrHTML.innerHTML\n };\n }\n }\n\n function normalizeTokens(tokens) {\n tokens.forEach(function (token) {\n if (token.type === 'StartTag') {\n token.attributes = token.attributes.sort(function (a, b) {\n if (a[0] > b[0]) {\n return 1;\n }\n if (a[0] < b[0]) {\n return -1;\n }\n return 0;\n });\n }\n });\n }\n});","enifed('internal-test-helpers/lib/factory', ['exports'], function (exports) {\n 'use strict';\n\n exports.default = function () {\n /*jshint validthis: true */\n\n function Klass(options) {\n setProperties(this, options);\n this._guid = guids++;\n this.isDestroyed = false;\n }\n\n Klass.prototype.constructor = Klass;\n Klass.prototype.destroy = function () {\n this.isDestroyed = true;\n };\n\n Klass.prototype.toString = function () {\n return '';\n };\n\n Klass.create = create;\n Klass.extend = extend;\n Klass.reopen = extend;\n Klass.reopenClass = reopenClass;\n\n return Klass;\n\n function create(options) {\n return new this.prototype.constructor(options);\n }\n\n function reopenClass(options) {\n setProperties(this, options);\n }\n\n function extend(options) {\n function Child(options) {\n Klass.call(this, options);\n }\n\n var Parent = this;\n\n Child.prototype = new Parent();\n Child.prototype.constructor = Child;\n\n setProperties(Child, Klass);\n setProperties(Child.prototype, options);\n\n Child.create = create;\n Child.extend = extend;\n Child.reopen = extend;\n\n Child.reopenClass = reopenClass;\n\n return Child;\n }\n };\n function setProperties(object, properties) {\n for (var key in properties) {\n if (properties.hasOwnProperty(key)) {\n object[key] = properties[key];\n }\n }\n }\n\n var guids = 0;\n});","enifed(\"internal-test-helpers/lib/get-all-property-names\", [\"exports\"], function (exports) {\n \"use strict\";\n\n exports.default = function (Klass) {\n var proto = Klass.prototype,\n names;\n var properties = new Set();\n\n while (proto !== Object.prototype) {\n names = Object.getOwnPropertyNames(proto);\n\n names.forEach(function (name) {\n return properties.add(name);\n });\n proto = Object.getPrototypeOf(proto);\n }\n\n return properties;\n };\n});","enifed(\"internal-test-helpers/lib/get-text-of\", [\"exports\"], function (exports) {\n \"use strict\";\n\n exports.default = function (elem) {\n return elem.textContent.trim();\n };\n});","enifed('internal-test-helpers/lib/matchers', ['exports'], function (exports) {\n 'use strict';\n\n exports.regex = function (r) {\n var _ref2;\n\n return _ref2 = {}, _ref2[MATCHER_BRAND] = true, _ref2.match = function (v) {\n return r.test(v);\n }, _ref2.expected = function () {\n return r.toString();\n }, _ref2.message = function () {\n return 'should match ' + this.expected();\n }, _ref2;\n };\n exports.classes = function (expected) {\n var _ref3;\n\n return _ref3 = {}, _ref3[MATCHER_BRAND] = true, _ref3.match = function (actual) {\n actual = actual.trim();\n return actual && expected.split(/\\s+/).sort().join(' ') === actual.trim().split(/\\s+/).sort().join(' ');\n }, _ref3.expected = function () {\n return expected;\n }, _ref3.message = function () {\n return 'should match ' + this.expected();\n }, _ref3;\n };\n exports.styles = function (expected) {\n var _ref4;\n\n return _ref4 = {}, _ref4[MATCHER_BRAND] = true, _ref4.match = function (actual) {\n // coerce `null` or `undefined` to an empty string\n // needed for matching empty styles on IE9 - IE11\n actual = actual || '';\n actual = actual.trim();\n\n return expected.split(';').map(function (s) {\n return s.trim();\n }).filter(function (s) {\n return s;\n }).sort().join('; ') === actual.split(';').map(function (s) {\n return s.trim();\n }).filter(function (s) {\n return s;\n }).sort().join('; ');\n }, _ref4.expected = function () {\n return expected;\n }, _ref4.message = function () {\n return 'should match ' + this.expected();\n }, _ref4;\n };\n exports.equalsElement = function (assert, element, tagName, attributes, content) {\n assert.pushResult({\n result: element.tagName === tagName.toUpperCase(),\n actual: element.tagName.toLowerCase(),\n expected: tagName,\n message: 'expect tagName to be ' + tagName\n });\n\n var expectedAttrs = {},\n expected,\n matcher,\n i,\n l;\n var expectedCount = 0;\n\n for (var name in attributes) {\n expected = attributes[name];\n\n if (expected !== null) {\n expectedCount++;\n }\n\n matcher = isMatcher(expected) ? expected : equalsAttr(expected);\n\n\n expectedAttrs[name] = matcher;\n\n assert.pushResult({\n result: expectedAttrs[name].match(element.getAttribute(name)),\n actual: element.getAttribute(name),\n expected: matcher.expected(),\n message: 'Element\\'s ' + name + ' attribute ' + matcher.message()\n });\n }\n\n var actualAttributes = {};\n\n for (i = 0, l = element.attributes.length; i < l; i++) {\n actualAttributes[element.attributes[i].name] = element.attributes[i].value;\n }\n\n if (!(element instanceof HTMLElement)) {\n assert.pushResult({\n result: element instanceof HTMLElement,\n message: 'Element must be an HTML Element, not an SVG Element'\n });\n } else {\n assert.pushResult({\n result: element.attributes.length === expectedCount || !attributes,\n actual: element.attributes.length,\n expected: expectedCount,\n message: 'Expected ' + expectedCount + ' attributes; got ' + element.outerHTML\n });\n\n if (content !== null) {\n assert.pushResult({\n result: element.innerHTML === content,\n actual: element.innerHTML,\n expected: content,\n message: 'The element had \\'' + content + '\\' as its content'\n });\n }\n }\n };\n var HTMLElement = window.HTMLElement;\n var MATCHER_BRAND = '3d4ef194-13be-4ccf-8dc7-862eea02c93e';\n\n function isMatcher(obj) {\n return typeof obj === 'object' && obj !== null && MATCHER_BRAND in obj;\n }\n\n function equalsAttr(expected) {\n var _ref;\n\n return _ref = {}, _ref[MATCHER_BRAND] = true, _ref.match = function (actual) {\n return expected === actual;\n }, _ref.expected = function () {\n return expected;\n }, _ref.message = function () {\n return 'should equal ' + this.expected();\n }, _ref;\n }\n});","enifed('internal-test-helpers/lib/module-for', ['exports', '@ember/canary-features', 'internal-test-helpers/lib/apply-mixins', 'internal-test-helpers/lib/get-all-property-names', 'rsvp'], function (exports, _canaryFeatures, _applyMixins, _getAllPropertyNames, _rsvp) {\n 'use strict';\n\n exports.default = function (description, TestClass) {\n QUnit.module(description, {\n beforeEach: function () {\n for (_len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var instance = new (Function.prototype.bind.apply(TestClass, [null].concat(args)))(),\n _len2,\n args,\n _key2;\n this.instance = instance;\n if (instance.beforeEach) {\n return instance.beforeEach.apply(instance, args);\n }\n },\n\n afterEach: function () {\n var promises = [];\n var instance = this.instance;\n this.instance = null;\n if (instance.teardown) {\n promises.push(instance.teardown());\n }\n if (instance.afterEach) {\n promises.push(instance.afterEach());\n }\n\n // this seems odd, but actually saves significant time\n // in the test suite\n //\n // returning a promise from a QUnit test always adds a 13ms\n // delay to the test, this filtering prevents returning a\n // promise when it is not needed\n //\n // Remove after we can update to QUnit that includes\n // https://github.com/qunitjs/qunit/pull/1246\n var filteredPromises = promises.filter(Boolean);\n if (filteredPromises.length > 0) {\n return (0, _rsvp.all)(filteredPromises);\n }\n }\n });\n\n for (_len = arguments.length, mixins = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n mixins[_key - 2] = arguments[_key];\n }\n\n if (mixins.length > 0) {\n _applyMixins.default.apply(undefined, [TestClass].concat(mixins));\n }\n\n var properties = (0, _getAllPropertyNames.default)(TestClass),\n _len,\n mixins,\n _key;\n properties.forEach(function (name) {\n var match, features;\n\n if (name.indexOf('@test ') === 0) {\n QUnit.test(name.slice(5), function (assert) {\n return this.instance[name](assert);\n });\n } else if (name.indexOf('@only ') === 0) {\n QUnit.only(name.slice(5), function (assert) {\n return this.instance[name](assert);\n });\n } else if (name.indexOf('@skip ') === 0) {\n QUnit.skip(name.slice(5), function (assert) {\n return this.instance[name](assert);\n });\n } else {\n match = /^@feature\\(([A-Z_a-z-!]+)\\) /.exec(name);\n\n\n if (match) {\n features = match[1].replace(/ /g, '').split(',');\n\n\n if (shouldTest(features)) {\n QUnit.test(name.slice(match[0].length), function (assert) {\n return this.instance[name](assert);\n });\n }\n }\n }\n });\n\n function shouldTest(features) {\n return features.every(function (feature) {\n if (feature[0] === '!' && (0, _canaryFeatures.isEnabled)(feature.slice(1))) {\n return false;\n } else if (!(0, _canaryFeatures.isEnabled)(feature)) {\n return false;\n } else {\n return true;\n }\n });\n }\n };\n});","enifed('internal-test-helpers/lib/registry-check', ['exports'], function (exports) {\n 'use strict';\n\n exports.verifyRegistration = function (assert, owner, fullName) {\n assert.ok(owner.resolveRegistration(fullName), 'has registration: ' + fullName);\n };\n exports.verifyInjection = function (assert, owner, fullName, property, injectionName) {\n var registry = owner.__registry__,\n i,\n l;\n var injections = void 0;\n\n if (fullName.indexOf(':') === -1) {\n injections = registry.getTypeInjections(fullName);\n } else {\n injections = registry.getInjections(registry.normalize(fullName));\n }\n\n var normalizedName = registry.normalize(injectionName);\n var hasInjection = false;\n var injection = void 0;\n\n for (i = 0, l = injections.length; i < l; i++) {\n injection = injections[i];\n if (injection.property === property && injection.specifier === normalizedName) {\n hasInjection = true;\n break;\n }\n }\n\n assert.ok(hasInjection, 'has injection: ' + fullName + '.' + property + ' = ' + injectionName);\n };\n});","enifed('internal-test-helpers/lib/run', ['exports', '@ember/runloop'], function (exports, _runloop) {\n 'use strict';\n\n exports.runAppend = function (view) {\n (0, _runloop.run)(view, 'appendTo', document.getElementById('qunit-fixture'));\n };\n exports.runDestroy = function (toDestroy) {\n if (toDestroy) {\n (0, _runloop.run)(toDestroy, 'destroy');\n }\n };\n});","enifed('internal-test-helpers/lib/strip', ['exports'], function (exports) {\n 'use strict';\n\n exports.default = function (_ref) {\n for (_len = arguments.length, values = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n var strings = _ref.slice(0),\n _len,\n values,\n _key;\n\n var str = strings.map(function (string, index) {\n var interpolated = values[index];\n return string + (interpolated !== undefined ? interpolated : '');\n }).join('');\n return str.split('\\n').map(function (s) {\n return s.trim();\n }).join('');\n };\n});","enifed('internal-test-helpers/lib/system/synthetic-events', ['exports', '@ember/runloop', '@ember/polyfills'], function (exports, _runloop, _polyfills) {\n 'use strict';\n\n exports.elMatches = undefined;\n exports.matches = function (el, selector) {\n return elMatches.call(el, selector);\n };\n exports.click = function (el) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n (0, _runloop.run)(function () {\n return fireEvent(el, 'mousedown', options);\n });\n focus(el);\n (0, _runloop.run)(function () {\n return fireEvent(el, 'mouseup', options);\n });\n (0, _runloop.run)(function () {\n return fireEvent(el, 'click', options);\n });\n };\n exports.focus = focus;\n exports.blur = function (el) {\n if (isFocusable(el)) {\n (0, _runloop.run)(null, function () {\n var browserIsNotFocused = document.hasFocus && !document.hasFocus();\n\n fireEvent(el, 'focusout');\n\n // makes `document.activeElement` be `body`.\n // If the browser is focused, it also fires a blur event\n el.blur();\n\n // Chrome/Firefox does not trigger the `blur` event if the window\n // does not have focus. If the document does not have focus then\n // fire `blur` event via native event.\n if (browserIsNotFocused) {\n fireEvent(el, 'blur');\n }\n });\n }\n };\n exports.fireEvent = fireEvent;\n\n var DEFAULT_EVENT_OPTIONS = { canBubble: true, cancelable: true };\n /* globals Element */\n\n var KEYBOARD_EVENT_TYPES = ['keydown', 'keypress', 'keyup'];\n var MOUSE_EVENT_TYPES = ['click', 'mousedown', 'mouseup', 'dblclick', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover'];\n\n var elMatches = exports.elMatches = typeof Element !== 'undefined' && (Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector);\n\n function isFocusable(el) {\n var tagName = el.tagName,\n type = el.type;\n\n if (type === 'hidden') {\n return false;\n }\n\n return ['INPUT', 'BUTTON', 'LINK', 'SELECT', 'A', 'TEXTAREA'].indexOf(tagName) > -1 || el.contentEditable === 'true';\n }\n\n function focus(el) {\n if (!el) {\n return;\n }\n if (isFocusable(el)) {\n (0, _runloop.run)(null, function () {\n var browserIsNotFocused = document.hasFocus && !document.hasFocus();\n\n // Firefox does not trigger the `focusin` event if the window\n // does not have focus. If the document doesn't have focus just\n // use trigger('focusin') instead.\n if (browserIsNotFocused) {\n fireEvent(el, 'focusin');\n }\n\n // makes `document.activeElement` be `el`. If the browser is focused, it also fires a focus event\n el.focus();\n\n // if the browser is not focused the previous `el.focus()` didn't fire an event, so we simulate it\n if (browserIsNotFocused) {\n fireEvent(el, 'focus');\n }\n });\n }\n }\n\n function fireEvent(element, type) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n rect,\n x,\n y;\n\n if (!element) {\n return;\n }\n var event = void 0;\n if (KEYBOARD_EVENT_TYPES.indexOf(type) > -1) {\n event = buildKeyboardEvent(type, options);\n } else if (MOUSE_EVENT_TYPES.indexOf(type) > -1) {\n rect = element.getBoundingClientRect();\n x = rect.left + 1;\n y = rect.top + 1;\n\n event = buildMouseEvent(type, (0, _polyfills.merge)({\n screenX: x + 5,\n screenY: y + 95,\n clientX: x,\n clientY: y\n }, options));\n } else {\n event = buildBasicEvent(type, options);\n }\n element.dispatchEvent(event);\n\n return event;\n }\n\n function buildBasicEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var event = document.createEvent('Events');\n event.initEvent(type, true, true);\n (0, _polyfills.merge)(event, options);\n return event;\n }\n\n function buildMouseEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n eventOpts;\n\n var event = void 0;\n try {\n event = document.createEvent('MouseEvents');\n eventOpts = (0, _polyfills.merge)({}, DEFAULT_EVENT_OPTIONS);\n\n (0, _polyfills.merge)(eventOpts, options);\n\n event.initMouseEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.detail, eventOpts.screenX, eventOpts.screenY, eventOpts.clientX, eventOpts.clientY, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.button, eventOpts.relatedTarget);\n } catch (e) {\n event = buildBasicEvent(type, options);\n }\n return event;\n }\n\n function buildKeyboardEvent(type) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n eventOpts;\n\n var event = void 0;\n try {\n event = document.createEvent('KeyEvents');\n eventOpts = (0, _polyfills.merge)({}, DEFAULT_EVENT_OPTIONS);\n\n (0, _polyfills.merge)(eventOpts, options);\n event.initKeyEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.keyCode, eventOpts.charCode);\n } catch (e) {\n event = buildBasicEvent(type, options);\n }\n return event;\n }\n});","enifed('internal-test-helpers/lib/test-cases/abstract-application', ['exports', 'ember-babel', 'ember-template-compiler', 'ember-environment', 'internal-test-helpers/lib/test-cases/abstract', 'internal-test-helpers/lib/run'], function (exports, _emberBabel, _emberTemplateCompiler, _emberEnvironment, _abstract, _run) {\n 'use strict';\n\n var AbstractApplicationTestCase = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AbstractApplicationTestCase, _AbstractTestCase);\n\n function AbstractApplicationTestCase() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n AbstractApplicationTestCase.prototype._ensureInstance = function (bootOptions) {\n var _this2 = this;\n\n if (this._applicationInstancePromise) {\n return this._applicationInstancePromise;\n }\n\n return this._applicationInstancePromise = this.runTask(function () {\n return _this2.application.boot();\n }).then(function (app) {\n _this2.applicationInstance = app.buildInstance();\n\n return _this2.applicationInstance.boot(bootOptions);\n });\n };\n\n AbstractApplicationTestCase.prototype.visit = function (url, options) {\n var _this3 = this;\n\n // TODO: THIS IS HORRIBLE\n // the promise returned by `ApplicationInstance.protoype.visit` does **not**\n // currently guarantee rendering is completed\n return this.runTask(function () {\n return _this3._ensureInstance(options).then(function (instance) {\n return instance.visit(url);\n });\n });\n };\n\n AbstractApplicationTestCase.prototype.afterEach = function () {\n (0, _run.runDestroy)(this.applicationInstance);\n (0, _run.runDestroy)(this.application);\n\n _AbstractTestCase.prototype.teardown.call(this);\n };\n\n AbstractApplicationTestCase.prototype.compile = function () /* string, options */{\n return _emberTemplateCompiler.compile.apply(undefined, arguments);\n };\n\n (0, _emberBabel.createClass)(AbstractApplicationTestCase, [{\n key: 'element',\n get: function () {\n if (this._element) {\n return this._element;\n } else if (_emberEnvironment.ENV._APPLICATION_TEMPLATE_WRAPPER) {\n return this._element = document.querySelector('#qunit-fixture > div.ember-view');\n } else {\n return this._element = document.querySelector('#qunit-fixture');\n }\n },\n set: function (element) {\n this._element = element;\n }\n }, {\n key: 'applicationOptions',\n get: function () {\n return {\n rootElement: '#qunit-fixture'\n };\n }\n }, {\n key: 'routerOptions',\n get: function () {\n return {\n location: 'none'\n };\n }\n }, {\n key: 'router',\n get: function () {\n return this.application.resolveRegistration('router:main');\n }\n }]);\n return AbstractApplicationTestCase;\n }(_abstract.default);\n\n exports.default = AbstractApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/abstract-rendering', ['exports', 'ember-babel', '@ember/polyfills', 'ember-template-compiler', 'ember-views', 'ember-glimmer', 'internal-test-helpers/lib/test-resolver', 'internal-test-helpers/lib/test-cases/abstract', 'internal-test-helpers/lib/build-owner', 'internal-test-helpers/lib/run'], function (exports, _emberBabel, _polyfills, _emberTemplateCompiler, _emberViews, _emberGlimmer, _testResolver, _abstract, _buildOwner, _run) {\n 'use strict';\n\n var TextNode = window.Text;\n\n var AbstractRenderingTestCase = function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(AbstractRenderingTestCase, _AbstractTestCase);\n\n function AbstractRenderingTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n\n var bootOptions = _this.getBootOptions();\n\n var owner = _this.owner = (0, _buildOwner.default)({\n ownerOptions: _this.getOwnerOptions(),\n resolver: _this.getResolver(),\n bootOptions: bootOptions\n });\n\n _this.renderer = _this.owner.lookup('renderer:-dom');\n _this.element = document.querySelector('#qunit-fixture');\n _this.component = null;\n\n owner.register('event_dispatcher:main', _emberViews.EventDispatcher);\n owner.inject('event_dispatcher:main', '_viewRegistry', '-view-registry:main');\n if (!bootOptions || bootOptions.isInteractive !== false) {\n owner.lookup('event_dispatcher:main').setup(_this.getCustomDispatcherEvents(), _this.element);\n }\n return _this;\n }\n\n AbstractRenderingTestCase.prototype.compile = function () {\n return _emberTemplateCompiler.compile.apply(undefined, arguments);\n };\n\n AbstractRenderingTestCase.prototype.getCustomDispatcherEvents = function () {\n return {};\n };\n\n AbstractRenderingTestCase.prototype.getOwnerOptions = function () {};\n\n AbstractRenderingTestCase.prototype.getBootOptions = function () {};\n\n AbstractRenderingTestCase.prototype.getResolver = function () {\n return new _testResolver.ModuleBasedResolver();\n };\n\n AbstractRenderingTestCase.prototype.add = function (specifier, factory) {\n this.resolver.add(specifier, factory);\n };\n\n AbstractRenderingTestCase.prototype.addTemplate = function (templateName, templateString) {\n if (typeof templateName === 'string') {\n this.resolver.add('template:' + templateName, this.compile(templateString, {\n moduleName: templateName\n }));\n } else {\n this.resolver.add(templateName, this.compile(templateString, {\n moduleName: templateName.moduleName\n }));\n }\n };\n\n AbstractRenderingTestCase.prototype.addComponent = function (name, _ref) {\n var _ref$ComponentClass = _ref.ComponentClass,\n ComponentClass = _ref$ComponentClass === undefined ? null : _ref$ComponentClass,\n _ref$template = _ref.template,\n template = _ref$template === undefined ? null : _ref$template;\n\n if (ComponentClass) {\n this.resolver.add('component:' + name, ComponentClass);\n }\n\n if (typeof template === 'string') {\n this.resolver.add('template:components/' + name, this.compile(template, {\n moduleName: 'components/' + name\n }));\n }\n };\n\n AbstractRenderingTestCase.prototype.afterEach = function () {\n try {\n if (this.component) {\n (0, _run.runDestroy)(this.component);\n }\n if (this.owner) {\n (0, _run.runDestroy)(this.owner);\n }\n } finally {\n (0, _emberGlimmer._resetRenderers)();\n }\n };\n\n AbstractRenderingTestCase.prototype.render = function (templateStr) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var owner = this.owner;\n\n owner.register('template:-top-level', this.compile(templateStr, {\n moduleName: '-top-level'\n }));\n\n var attrs = (0, _polyfills.assign)({}, context, {\n tagName: '',\n layoutName: '-top-level'\n });\n\n owner.register('component:-top-level', _emberGlimmer.Component.extend(attrs));\n\n this.component = owner.lookup('component:-top-level');\n\n (0, _run.runAppend)(this.component);\n };\n\n AbstractRenderingTestCase.prototype.rerender = function () {\n this.component.rerender();\n };\n\n AbstractRenderingTestCase.prototype.registerHelper = function (name, funcOrClassBody) {\n var type = typeof funcOrClassBody;\n\n if (type === 'function') {\n this.owner.register('helper:' + name, (0, _emberGlimmer.helper)(funcOrClassBody));\n } else if (type === 'object' && type !== null) {\n this.owner.register('helper:' + name, _emberGlimmer.Helper.extend(funcOrClassBody));\n } else {\n throw new Error('Cannot register ' + funcOrClassBody + ' as a helper');\n }\n };\n\n AbstractRenderingTestCase.prototype.registerPartial = function (name, template) {\n var owner = this.env.owner || this.owner;\n if (typeof template === 'string') {\n owner.register('template:' + name, this.compile(template, { moduleName: 'my-app/templates/-' + name + '.hbs' }));\n }\n };\n\n AbstractRenderingTestCase.prototype.registerComponent = function (name, _ref2) {\n var _ref2$ComponentClass = _ref2.ComponentClass,\n ComponentClass = _ref2$ComponentClass === undefined ? _emberGlimmer.Component : _ref2$ComponentClass,\n _ref2$template = _ref2.template,\n template = _ref2$template === undefined ? null : _ref2$template;\n var owner = this.owner;\n\n if (ComponentClass) {\n owner.register('component:' + name, ComponentClass);\n }\n\n if (typeof template === 'string') {\n owner.register('template:components/' + name, this.compile(template, {\n moduleName: 'my-app/templates/components/' + name + '.hbs'\n }));\n }\n };\n\n AbstractRenderingTestCase.prototype.registerComponentManager = function (name, manager) {\n var owner = this.env.owner || this.owner;\n owner.register('component-manager:' + name, manager);\n };\n\n AbstractRenderingTestCase.prototype.registerTemplate = function (name, template) {\n var owner = this.owner;\n\n if (typeof template === 'string') {\n owner.register('template:' + name, this.compile(template, {\n moduleName: 'my-app/templates/' + name + '.hbs'\n }));\n } else {\n throw new Error('Registered template \"' + name + '\" must be a string');\n }\n };\n\n AbstractRenderingTestCase.prototype.registerService = function (name, klass) {\n this.owner.register('service:' + name, klass);\n };\n\n AbstractRenderingTestCase.prototype.assertTextNode = function (node, text) {\n if (!(node instanceof TextNode)) {\n throw new Error('Expecting a text node, but got ' + node);\n }\n\n this.assert.strictEqual(node.textContent, text, 'node.textContent');\n };\n\n (0, _emberBabel.createClass)(AbstractRenderingTestCase, [{\n key: 'resolver',\n get: function () {\n return this.owner.__registry__.fallback.resolver;\n }\n }, {\n key: 'context',\n get: function () {\n return this.component;\n }\n }]);\n return AbstractRenderingTestCase;\n }(_abstract.default);\n\n exports.default = AbstractRenderingTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/abstract', ['exports', 'ember-babel', '@ember/polyfills', '@ember/runloop', 'internal-test-helpers/lib/test-cases/node-query', 'internal-test-helpers/lib/equal-inner-html', 'internal-test-helpers/lib/equal-tokens', 'internal-test-helpers/lib/matchers', 'rsvp'], function (exports, _emberBabel, _polyfills, _runloop, _nodeQuery, _equalInnerHtml, _equalTokens, _matchers, _rsvp) {\n 'use strict';\n\n var TextNode = window.Text; /* global Element */\n\n var HTMLElement = window.HTMLElement;\n var Comment = window.Comment;\n\n function isMarker(node) {\n if (node instanceof Comment && node.textContent === '') {\n return true;\n }\n\n if (node instanceof TextNode && node.textContent === '') {\n return true;\n }\n\n return false;\n }\n\n var AbstractTestCase = function () {\n function AbstractTestCase(assert) {\n\n this.element = null;\n this.snapshot = null;\n this.assert = assert;\n\n var fixture = this.fixture;\n\n if (fixture) {\n this.setupFixture(fixture);\n }\n }\n\n AbstractTestCase.prototype.teardown = function () {};\n\n AbstractTestCase.prototype.afterEach = function () {};\n\n AbstractTestCase.prototype.runTask = function (callback) {\n return (0, _runloop.run)(callback);\n };\n\n AbstractTestCase.prototype.runTaskNext = function () {\n return new _rsvp.Promise(function (resolve) {\n return (0, _runloop.next)(resolve);\n });\n };\n\n AbstractTestCase.prototype.setupFixture = function (innerHTML) {\n var fixture = document.getElementById('qunit-fixture');\n fixture.innerHTML = innerHTML;\n };\n\n AbstractTestCase.prototype.nthChild = function (n) {\n var i = 0;\n var node = this.element.firstChild;\n\n while (node) {\n if (!isMarker(node)) {\n i++;\n }\n\n if (i > n) {\n break;\n } else {\n node = node.nextSibling;\n }\n }\n\n return node;\n };\n\n AbstractTestCase.prototype.$ = function (sel) {\n if (sel instanceof Element) {\n return _nodeQuery.default.element(sel);\n } else if (typeof sel === 'string') {\n return _nodeQuery.default.query(sel, this.element);\n } else if (sel !== undefined) {\n throw new Error('Invalid this.$(' + sel + ')');\n } else {\n return _nodeQuery.default.element(this.element);\n }\n };\n\n AbstractTestCase.prototype.wrap = function (element) {\n return _nodeQuery.default.element(element);\n };\n\n AbstractTestCase.prototype.click = function (selector) {\n var element = void 0;\n if (typeof selector === 'string') {\n element = this.element.querySelector(selector);\n } else {\n element = selector;\n }\n\n var event = element.click();\n\n return this.runLoopSettled(event);\n };\n\n AbstractTestCase.prototype.runLoopSettled = function (value) {\n return new _rsvp.Promise(function (resolve) {\n // Every 5ms, poll for the async thing to have finished\n var watcher = setInterval(function () {\n // If there are scheduled timers or we are inside of a run loop, keep polling\n if ((0, _runloop.hasScheduledTimers)() || (0, _runloop.getCurrentRunLoop)()) {\n return;\n }\n\n // Stop polling\n clearInterval(watcher);\n\n // Synchronously resolve the promise\n resolve(value);\n }, 5);\n });\n };\n\n AbstractTestCase.prototype.textValue = function () {\n return this.element.textContent;\n };\n\n AbstractTestCase.prototype.takeSnapshot = function () {\n var snapshot = this.snapshot = [];\n\n var node = this.element.firstChild;\n\n while (node) {\n if (!isMarker(node)) {\n snapshot.push(node);\n }\n\n node = node.nextSibling;\n }\n\n return snapshot;\n };\n\n AbstractTestCase.prototype.assertText = function (text) {\n this.assert.strictEqual(this.textValue(), text, '#qunit-fixture content should be: `' + text + '`');\n };\n\n AbstractTestCase.prototype.assertInnerHTML = function (html) {\n (0, _equalInnerHtml.default)(this.assert, this.element, html);\n };\n\n AbstractTestCase.prototype.assertHTML = function (html) {\n (0, _equalTokens.default)(this.element, html, '#qunit-fixture content should be: `' + html + '`');\n };\n\n AbstractTestCase.prototype.assertElement = function (node, _ref) {\n var _ref$ElementType = _ref.ElementType,\n ElementType = _ref$ElementType === undefined ? HTMLElement : _ref$ElementType,\n tagName = _ref.tagName,\n _ref$attrs = _ref.attrs,\n attrs = _ref$attrs === undefined ? null : _ref$attrs,\n _ref$content = _ref.content,\n content = _ref$content === undefined ? null : _ref$content;\n\n if (!(node instanceof ElementType)) {\n throw new Error('Expecting a ' + ElementType.name + ', but got ' + node);\n }\n\n (0, _matchers.equalsElement)(this.assert, node, tagName, attrs, content);\n };\n\n AbstractTestCase.prototype.assertComponentElement = function (node, _ref2) {\n var _ref2$ElementType = _ref2.ElementType,\n ElementType = _ref2$ElementType === undefined ? HTMLElement : _ref2$ElementType,\n _ref2$tagName = _ref2.tagName,\n tagName = _ref2$tagName === undefined ? 'div' : _ref2$tagName,\n _ref2$attrs = _ref2.attrs,\n attrs = _ref2$attrs === undefined ? null : _ref2$attrs,\n _ref2$content = _ref2.content,\n content = _ref2$content === undefined ? null : _ref2$content;\n\n attrs = (0, _polyfills.assign)({}, { id: (0, _matchers.regex)(/^ember\\d*$/), class: (0, _matchers.classes)('ember-view') }, attrs || {});\n this.assertElement(node, { ElementType: ElementType, tagName: tagName, attrs: attrs, content: content });\n };\n\n AbstractTestCase.prototype.assertSameNode = function (actual, expected) {\n this.assert.strictEqual(actual, expected, 'DOM node stability');\n };\n\n AbstractTestCase.prototype.assertInvariants = function (oldSnapshot, newSnapshot) {\n var i;\n\n oldSnapshot = oldSnapshot || this.snapshot;\n newSnapshot = newSnapshot || this.takeSnapshot();\n\n this.assert.strictEqual(newSnapshot.length, oldSnapshot.length, 'Same number of nodes');\n\n for (i = 0; i < oldSnapshot.length; i++) {\n this.assertSameNode(newSnapshot[i], oldSnapshot[i]);\n }\n };\n\n AbstractTestCase.prototype.assertPartialInvariants = function (start, end) {\n this.assertInvariants(this.snapshot, this.takeSnapshot().slice(start, end));\n };\n\n AbstractTestCase.prototype.assertStableRerender = function () {\n var _this = this;\n\n this.takeSnapshot();\n this.runTask(function () {\n return _this.rerender();\n });\n this.assertInvariants();\n };\n\n (0, _emberBabel.createClass)(AbstractTestCase, [{\n key: 'firstChild',\n get: function () {\n return this.nthChild(0);\n }\n }, {\n key: 'nodesCount',\n get: function () {\n var count = 0;\n var node = this.element.firstChild;\n\n while (node) {\n if (!isMarker(node)) {\n count++;\n }\n\n node = node.nextSibling;\n }\n\n return count;\n }\n }]);\n return AbstractTestCase;\n }();\n\n exports.default = AbstractTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/test-resolver-application', '@ember/application', 'ember-routing', '@ember/polyfills'], function (exports, _emberBabel, _testResolverApplication, _application, _emberRouting, _polyfills) {\n 'use strict';\n\n var ApplicationTestCase = function (_TestResolverApplicat) {\n (0, _emberBabel.inherits)(ApplicationTestCase, _TestResolverApplicat);\n\n function ApplicationTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _TestResolverApplicat.apply(this, arguments));\n\n var applicationOptions = _this.applicationOptions;\n\n _this.application = _this.runTask(_this.createApplication.bind(_this, applicationOptions));\n\n _this.resolver = _this.application.__registry__.resolver;\n\n if (_this.resolver) {\n _this.resolver.add('router:main', _emberRouting.Router.extend(_this.routerOptions));\n }\n return _this;\n }\n\n ApplicationTestCase.prototype.createApplication = function () {\n var myOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var MyApplication = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _application.default;\n\n return MyApplication.create(myOptions);\n };\n\n ApplicationTestCase.prototype.transitionTo = function () {\n var _this2 = this,\n _arguments = arguments;\n\n return this.runTask(function () {\n var _appRouter;\n\n return (_appRouter = _this2.appRouter).transitionTo.apply(_appRouter, _arguments);\n });\n };\n\n (0, _emberBabel.createClass)(ApplicationTestCase, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_TestResolverApplicat.prototype.applicationOptions, {\n autoboot: false\n });\n }\n }, {\n key: 'appRouter',\n get: function () {\n return this.applicationInstance.lookup('router:main');\n }\n }]);\n return ApplicationTestCase;\n }(_testResolverApplication.default);\n\n exports.default = ApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/autoboot-application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/test-resolver-application', '@ember/application', '@ember/polyfills', 'ember-routing'], function (exports, _emberBabel, _testResolverApplication, _application, _polyfills, _emberRouting) {\n 'use strict';\n\n var AutobootApplicationTestCase = function (_TestResolverApplicat) {\n (0, _emberBabel.inherits)(AutobootApplicationTestCase, _TestResolverApplicat);\n\n function AutobootApplicationTestCase() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _TestResolverApplicat.apply(this, arguments));\n }\n\n AutobootApplicationTestCase.prototype.createApplication = function (options) {\n var MyApplication = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _application.default;\n\n var myOptions = (0, _polyfills.assign)(this.applicationOptions, options);\n var application = this.application = MyApplication.create(myOptions);\n this.resolver = application.__registry__.resolver;\n\n if (this.resolver) {\n this.resolver.add('router:main', _emberRouting.Router.extend(this.routerOptions));\n }\n\n return application;\n };\n\n AutobootApplicationTestCase.prototype.visit = function (url) {\n var _this2 = this;\n\n return this.application.boot().then(function () {\n return _this2.applicationInstance.visit(url);\n });\n };\n\n (0, _emberBabel.createClass)(AutobootApplicationTestCase, [{\n key: 'applicationInstance',\n get: function () {\n var application = this.application;\n\n if (!application) {\n return undefined;\n }\n\n return application.__deprecatedInstance__;\n }\n }]);\n return AutobootApplicationTestCase;\n }(_testResolverApplication.default);\n\n exports.default = AutobootApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/default-resolver-application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/abstract-application', '@ember/application/globals-resolver', '@ember/application', 'ember-glimmer', '@ember/polyfills', 'ember-routing'], function (exports, _emberBabel, _abstractApplication, _globalsResolver, _application, _emberGlimmer, _polyfills, _emberRouting) {\n 'use strict';\n\n var ApplicationTestCase = function (_AbstractApplicationT) {\n (0, _emberBabel.inherits)(ApplicationTestCase, _AbstractApplicationT);\n\n function ApplicationTestCase() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractApplicationT.apply(this, arguments));\n }\n\n ApplicationTestCase.prototype.createApplication = function () {\n var application = this.application = _application.default.create(this.applicationOptions);\n application.Router = _emberRouting.Router.extend(this.routerOptions);\n return application;\n };\n\n ApplicationTestCase.prototype.afterEach = function () {\n (0, _emberGlimmer.setTemplates)({});\n return _AbstractApplicationT.prototype.afterEach.call(this);\n };\n\n ApplicationTestCase.prototype.transitionTo = function () {\n var _this2 = this,\n _arguments = arguments;\n\n return this.runTask(function () {\n var _appRouter;\n\n return (_appRouter = _this2.appRouter).transitionTo.apply(_appRouter, _arguments);\n });\n };\n\n ApplicationTestCase.prototype.addTemplate = function (name, templateString) {\n var compiled = this.compile(templateString);\n (0, _emberGlimmer.setTemplate)(name, compiled);\n return compiled;\n };\n\n (0, _emberBabel.createClass)(ApplicationTestCase, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_AbstractApplicationT.prototype.applicationOptions, {\n name: 'TestApp',\n autoboot: false,\n Resolver: _globalsResolver.default\n });\n }\n }, {\n key: 'appRouter',\n get: function () {\n return this.applicationInstance.lookup('router:main');\n }\n }]);\n return ApplicationTestCase;\n }(_abstractApplication.default);\n\n exports.default = ApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/node-query', ['exports', '@ember/debug', 'internal-test-helpers/lib/system/synthetic-events'], function (exports, _debug, _syntheticEvents) {\n 'use strict';\n\n var NodeQuery = function () {\n NodeQuery.query = function (selector) {\n var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;\n false && !(context && context instanceof Node) && (0, _debug.assert)('Invalid second parameter to NodeQuery.query', context && context instanceof Node);\n\n return new NodeQuery(toArray(context.querySelectorAll(selector)));\n };\n\n NodeQuery.element = function (_element) {\n return new NodeQuery([_element]);\n };\n\n function NodeQuery(nodes) {\n var i;\n\n false && !Array.isArray(nodes) && (0, _debug.assert)('NodeQuery must be initialized with a literal array', Array.isArray(nodes));\n\n this.nodes = nodes;\n\n for (i = 0; i < nodes.length; i++) {\n this[i] = nodes[i];\n }\n\n this.length = nodes.length;\n\n Object.freeze(this);\n }\n\n NodeQuery.prototype.find = function (selector) {\n assertSingle(this);\n\n return this[0].querySelector(selector);\n };\n\n NodeQuery.prototype.findAll = function (selector) {\n var nodes = [];\n\n this.nodes.forEach(function (node) {\n nodes.push.apply(nodes, node.querySelectorAll(selector));\n });\n\n return new NodeQuery(nodes);\n };\n\n NodeQuery.prototype.trigger = function (eventName, options) {\n return this.nodes.map(function (node) {\n return (0, _syntheticEvents.fireEvent)(node, eventName, options);\n });\n };\n\n NodeQuery.prototype.click = function () {\n return this.trigger('click');\n };\n\n NodeQuery.prototype.focus = function () {\n this.nodes.forEach(_syntheticEvents.focus);\n };\n\n NodeQuery.prototype.text = function () {\n return this.nodes.map(function (node) {\n return node.textContent;\n }).join('');\n };\n\n NodeQuery.prototype.attr = function (name) {\n if (arguments.length !== 1) {\n throw new Error('not implemented');\n }\n\n assertSingle(this);\n\n return this.nodes[0].getAttribute(name);\n };\n\n NodeQuery.prototype.prop = function (name, value) {\n if (arguments.length > 1) {\n return this.setProp(name, value);\n }\n\n assertSingle(this);\n\n return this.nodes[0][name];\n };\n\n NodeQuery.prototype.setProp = function (name, value) {\n this.nodes.forEach(function (node) {\n return node[name] = value;\n });\n\n return this;\n };\n\n NodeQuery.prototype.val = function (value) {\n if (arguments.length === 1) {\n return this.setProp('value', value);\n }\n\n return this.prop('value');\n };\n\n NodeQuery.prototype.is = function (selector) {\n return this.nodes.every(function (node) {\n return (0, _syntheticEvents.matches)(node, selector);\n });\n };\n\n NodeQuery.prototype.hasClass = function (className) {\n return this.is('.' + className);\n };\n\n return NodeQuery;\n }();\n\n exports.default = NodeQuery;\n\n function assertSingle(nodeQuery) {\n if (nodeQuery.length !== 1) {\n throw new Error('attr(name) called on a NodeQuery with ' + this.nodes.length + ' elements. Expected one element.');\n }\n }\n\n function toArray(nodes) {\n var out = [],\n i;\n\n for (i = 0; i < nodes.length; i++) {\n out.push(nodes[i]);\n }\n\n return out;\n }\n});","enifed('internal-test-helpers/lib/test-cases/query-param', ['exports', 'ember-babel', '@ember/controller', 'ember-routing', '@ember/runloop', 'internal-test-helpers/lib/test-cases/application'], function (exports, _emberBabel, _controller, _emberRouting, _runloop, _application) {\n 'use strict';\n\n var QueryParamTestCase = function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(QueryParamTestCase, _ApplicationTestCase);\n\n function QueryParamTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n var testCase = _this;\n testCase.expectedPushURL = null;\n testCase.expectedReplaceURL = null;\n _this.add('location:test', _emberRouting.NoneLocation.extend({\n setURL: function (path) {\n if (testCase.expectedReplaceURL) {\n testCase.assert.ok(false, 'pushState occurred but a replaceState was expected');\n }\n\n if (testCase.expectedPushURL) {\n testCase.assert.equal(path, testCase.expectedPushURL, 'an expected pushState occurred');\n testCase.expectedPushURL = null;\n }\n\n this.set('path', path);\n },\n replaceURL: function (path) {\n if (testCase.expectedPushURL) {\n testCase.assert.ok(false, 'replaceState occurred but a pushState was expected');\n }\n\n if (testCase.expectedReplaceURL) {\n testCase.assert.equal(path, testCase.expectedReplaceURL, 'an expected replaceState occurred');\n testCase.expectedReplaceURL = null;\n }\n\n this.set('path', path);\n }\n }));\n return _this;\n }\n\n QueryParamTestCase.prototype.visitAndAssert = function (path) {\n var _this2 = this;\n\n return this.visit.apply(this, arguments).then(function () {\n _this2.assertCurrentPath(path);\n });\n };\n\n QueryParamTestCase.prototype.getController = function (name) {\n return this.applicationInstance.lookup('controller:' + name);\n };\n\n QueryParamTestCase.prototype.getRoute = function (name) {\n return this.applicationInstance.lookup('route:' + name);\n };\n\n QueryParamTestCase.prototype.setAndFlush = function (obj, prop, value) {\n return (0, _runloop.run)(obj, 'set', prop, value);\n };\n\n QueryParamTestCase.prototype.assertCurrentPath = function (path) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'current path equals \\'' + path + '\\'';\n\n this.assert.equal(this.appRouter.get('location.path'), path, message);\n };\n\n QueryParamTestCase.prototype.setSingleQPController = function (routeName) {\n var param = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'foo';\n\n var _Controller$extend;\n\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'bar';\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n this.add('controller:' + routeName, _controller.default.extend((_Controller$extend = {\n queryParams: [param]\n }, _Controller$extend[param] = defaultValue, _Controller$extend), options));\n };\n\n QueryParamTestCase.prototype.setMappedQPController = function (routeName) {\n var prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'page';\n var urlKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'parentPage';\n\n var _queryParams, _Controller$extend2;\n\n var defaultValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n this.add('controller:' + routeName, _controller.default.extend((_Controller$extend2 = {\n queryParams: (_queryParams = {}, _queryParams[prop] = urlKey, _queryParams)\n }, _Controller$extend2[prop] = defaultValue, _Controller$extend2), options));\n };\n\n (0, _emberBabel.createClass)(QueryParamTestCase, [{\n key: 'routerOptions',\n get: function () {\n return {\n location: 'test'\n };\n }\n }]);\n return QueryParamTestCase;\n }(_application.default);\n\n exports.default = QueryParamTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/rendering', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/abstract-rendering', 'container'], function (exports, _emberBabel, _abstractRendering, _container) {\n 'use strict';\n\n var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['template-compiler:main'], ['template-compiler:main']);\n\n var RenderingTestCase = function (_AbstractRenderingTes) {\n (0, _emberBabel.inherits)(RenderingTestCase, _AbstractRenderingTes);\n\n function RenderingTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractRenderingTes.apply(this, arguments));\n\n var owner = _this.owner;\n\n _this.env = owner.lookup('service:-glimmer-environment');\n _this.templateOptions = owner.lookup((0, _container.privatize)(_templateObject));\n _this.compileTimeLookup = _this.templateOptions.resolver;\n _this.runtimeResolver = _this.compileTimeLookup.resolver;\n return _this;\n }\n\n return RenderingTestCase;\n }(_abstractRendering.default);\n\n exports.default = RenderingTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/router', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/application'], function (exports, _emberBabel, _application) {\n 'use strict';\n\n var RouterTestCase = function (_ApplicationTestCase) {\n (0, _emberBabel.inherits)(RouterTestCase, _ApplicationTestCase);\n\n function RouterTestCase() {\n\n var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ApplicationTestCase.apply(this, arguments));\n\n _this.router.map(function () {\n this.route('parent', { path: '/' }, function () {\n this.route('child');\n this.route('sister');\n this.route('brother');\n });\n this.route('dynamic', { path: '/dynamic/:dynamic_id' });\n });\n return _this;\n }\n\n RouterTestCase.prototype.buildQueryParams = function (queryParams) {\n return {\n queryParams: queryParams\n };\n };\n\n (0, _emberBabel.createClass)(RouterTestCase, [{\n key: 'routerService',\n get: function () {\n return this.applicationInstance.lookup('service:router');\n }\n }]);\n return RouterTestCase;\n }(_application.default);\n\n exports.default = RouterTestCase;\n});","enifed('internal-test-helpers/lib/test-cases/test-resolver-application', ['exports', 'ember-babel', 'internal-test-helpers/lib/test-cases/abstract-application', 'internal-test-helpers/lib/test-resolver', 'ember-glimmer', '@ember/polyfills'], function (exports, _emberBabel, _abstractApplication, _testResolver, _emberGlimmer, _polyfills) {\n 'use strict';\n\n var TestResolverApplicationTestCase = function (_AbstractApplicationT) {\n (0, _emberBabel.inherits)(TestResolverApplicationTestCase, _AbstractApplicationT);\n\n function TestResolverApplicationTestCase() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractApplicationT.apply(this, arguments));\n }\n\n TestResolverApplicationTestCase.prototype.add = function (specifier, factory) {\n this.resolver.add(specifier, factory);\n };\n\n TestResolverApplicationTestCase.prototype.addTemplate = function (templateName, templateString) {\n this.resolver.add('template:' + templateName, this.compile(templateString, {\n moduleName: 'my-app/templates/' + templateName + '.hbs'\n }));\n };\n\n TestResolverApplicationTestCase.prototype.addComponent = function (name, _ref) {\n var _ref$ComponentClass = _ref.ComponentClass,\n ComponentClass = _ref$ComponentClass === undefined ? _emberGlimmer.Component : _ref$ComponentClass,\n _ref$template = _ref.template,\n template = _ref$template === undefined ? null : _ref$template;\n\n if (ComponentClass) {\n this.resolver.add('component:' + name, ComponentClass);\n }\n\n if (typeof template === 'string') {\n this.resolver.add('template:components/' + name, this.compile(template, {\n moduleName: 'my-app/templates/components/' + name + '.hbs'\n }));\n }\n };\n\n (0, _emberBabel.createClass)(TestResolverApplicationTestCase, [{\n key: 'applicationOptions',\n get: function () {\n return (0, _polyfills.assign)(_AbstractApplicationT.prototype.applicationOptions, {\n Resolver: _testResolver.ModuleBasedResolver\n });\n }\n }]);\n return TestResolverApplicationTestCase;\n }(_abstractApplication.default);\n\n exports.default = TestResolverApplicationTestCase;\n});","enifed('internal-test-helpers/lib/test-resolver', ['exports', 'ember-babel', 'ember-template-compiler'], function (exports, _emberBabel, _emberTemplateCompiler) {\n 'use strict';\n\n exports.ModuleBasedResolver = undefined;\n\n function serializeKey(specifier, source, namespace) {\n var _specifier$split = specifier.split(':'),\n type = _specifier$split[0],\n name = _specifier$split[1];\n\n return type + '://' + [name, namespace ? '[source invalid due to namespace]' : source, namespace].join('%');\n }\n\n var Resolver = function () {\n function Resolver() {\n\n this._registered = {};\n }\n\n Resolver.prototype.resolve = function (specifier) {\n return this._registered[specifier] || this._registered[serializeKey(specifier)];\n };\n\n Resolver.prototype.expandLocalLookup = function (specifier, source, namespace) {\n var key;\n\n if (specifier.indexOf('://') !== -1) {\n return specifier; // an already expanded specifier\n }\n\n if (source || namespace) {\n key = serializeKey(specifier, source, namespace);\n\n if (this._registered[key]) {\n return key; // like local lookup\n }\n\n key = serializeKey(specifier);\n if (this._registered[key]) {\n return specifier; // top level resolution despite source/namespace\n }\n }\n\n return specifier; // didn't know how to expand it\n };\n\n Resolver.prototype.add = function (lookup, factory) {\n var key = void 0;\n switch (typeof lookup) {\n case 'string':\n if (lookup.indexOf(':') === -1) {\n throw new Error('Specifiers added to the resolver must be in the format of type:name');\n }\n key = serializeKey(lookup);\n break;\n case 'object':\n key = serializeKey(lookup.specifier, lookup.source, lookup.namespace);\n break;\n default:\n throw new Error('Specifier string has an unknown type');\n }\n\n return this._registered[key] = factory;\n };\n\n Resolver.prototype.addTemplate = function (templateName, template) {\n var templateType = typeof template;\n if (templateType !== 'string') {\n throw new Error('You called addTemplate for \"' + templateName + '\" with a template argument of type of \\'' + templateType + '\\'. addTemplate expects an argument of an uncompiled template as a string.');\n }\n return this._registered[serializeKey('template:' + templateName)] = (0, _emberTemplateCompiler.compile)(template, {\n moduleName: 'my-app/templates/' + templateName + '.hbs'\n });\n };\n\n Resolver.create = function () {\n return new this();\n };\n\n return Resolver;\n }();\n\n exports.default = Resolver;\n\n var ModuleBasedResolver = function (_Resolver) {\n (0, _emberBabel.inherits)(ModuleBasedResolver, _Resolver);\n\n function ModuleBasedResolver() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _Resolver.apply(this, arguments));\n }\n\n (0, _emberBabel.createClass)(ModuleBasedResolver, [{\n key: 'moduleBasedResolver',\n get: function () {\n return true;\n }\n }]);\n return ModuleBasedResolver;\n }(Resolver);\n\n exports.ModuleBasedResolver = ModuleBasedResolver;\n});","enifed('internal-test-helpers/tests/index-test', ['ember-babel', 'internal-test-helpers'], function (_emberBabel, _internalTestHelpers) {\n 'use strict';\n\n (0, _internalTestHelpers.moduleFor)('internal-test-helpers', function (_AbstractTestCase) {\n (0, _emberBabel.inherits)(_class, _AbstractTestCase);\n\n function _class() {\n return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractTestCase.apply(this, arguments));\n }\n\n _class.prototype['@test module present'] = function (assert) {\n assert.ok(true, 'each package needs at least one test to be able to run through `npm test`');\n };\n\n return _class;\n }(_internalTestHelpers.AbstractTestCase));\n});","/*global enifed, module */\nenifed('node-module', ['exports'], function(_exports) {\n var IS_NODE = typeof module === 'object' && typeof module.require === 'function';\n if (IS_NODE) {\n _exports.require = module.require;\n _exports.module = module;\n _exports.IS_NODE = IS_NODE;\n } else {\n _exports.require = null;\n _exports.module = null;\n _exports.IS_NODE = IS_NODE;\n }\n});\n"],"names":[],"mappings":";AAAA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzeA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9oBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9vBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC37BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtkCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzoDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/0HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3+BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxsCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzVA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACj9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7dA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnkCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3wBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3gDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/uBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/oBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9tBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1rBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACt6CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACncA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtlCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzSA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC79BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;;ACDA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;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;AACA;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;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACn0BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACn5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC37BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;","file":"ember-tests.prod.js"}