[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": ".gitignore",
    "content": "# Created by .ignore support plugin (hsz.mobi)\n### Node template\n# Logs\nlogs\n*.log\nnpm-debug.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (http://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules\njspm_packages\n\n# Optional npm cache directory\n.npm\n\n# Optional REPL history\n.node_repl_history\n### JetBrains template\n# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm\n# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839\n\n# User-specific stuff:\n.idea\n\n## File-based project format:\n*.iws\n\n## Plugin-specific files:\n\n# IntelliJ\n/out/\n\n# mpeltonen/sbt-idea plugin\n.idea_modules/\n\n# JIRA plugin\natlassian-ide-plugin.xml\n\n# Crashlytics plugin (for Android Studio and IntelliJ)\ncom_crashlytics_export_strings.xml\ncrashlytics.properties\ncrashlytics-build.properties\nfabric.properties\n### OSX template\n*.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must end with two \\r\nIcon\n\n# Thumbnails\n._*\n\n# Files that might appear in the root of a volume\n.DocumentRevisions-V100\n.fseventsd\n.Spotlight-V100\n.TemporaryItems\n.Trashes\n.VolumeIcon.icns\n.com.apple.timemachine.donotpresent\n\n# Directories potentially created on remote AFP share\n.AppleDB\n.AppleDesktop\nNetwork Trash Folder\nTemporary Items\n.apdisk\n\nexamples/**/dist\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# WoowahanJS에 기여하기\n\n:+1::tada: WoowahanJS에 관심을 가져주셔서 감사합니다. :tada::+1:\n\n## 이슈 제출\n\n* [여기](https://github.com/woowabros/WoowahanJS/issues/new)에서 새로운 이슈를 제출할 수 있습니다.  \n이슈를 제출하기 전에 아래의 항목들을 숙지하고 가능한한 이슈에 대해 최대한 많은 정보와 자세한 설명을 포함해야 합니다.  \n\n  * 작성하려는 이슈가 이미 있는지 [여기](https://github.com/woowabros/WoowahanJS/issues)에서 검색 후 등록해야 합니다. 비슷한 이슈가 있다면 댓글로 추가 내용을 덧붙일 수 있습니다.\n  * 이슈에는 하나의 문제 또는 제안을 작성해야 합니다. 하나의 이슈에 2개 이상의 내용을 제출할 수 없습니다.\n\n* 가능하다면 다음 항목을 포함해야 합니다:\n\n  * 사용중인 WoowahanJS의 버전\n  * 사용중인 운영체제\n  * 무엇을 하려고 했고, 어떤 결과를 예측했으며, 어떤 것이 예측한대로 작동하지 않았는지에 대한 서술\n  * 스크린샷 또는 GIF 애니메이션 이미지들\n  * 터미널에 출력된 에러의 내용 또는 개발자 도구, 알림창에 뜬 내용\n\n## Pull request(PR) 하기\n  \n  * `master` 브랜치의 코드는 수정할 수 없습니다.\n  * PR은 `develop` 브랜치만 허용합니다.\n  * `develop` 브랜치를 부모로 한 토픽 브랜치를 활용하는 것을 권장합니다.\n\n* 가능하다면 다음 항목을 포함해야 합니다:\n\n  * 스크린샷 또는 GIF 애니메이션 이미지들"
  },
  {
    "path": "README.en.md",
    "content": "# WoowahanJS\n\nWoowahanJS는 보다 큰 규모의 웹 어플리케이션 개발을 위한 프레임워크입니다.\n\n현대의 웹 어플리케이션은 많은 수의 컴포넌트로 복잡하게 구성된 뷰와 상태를 관리하는 HTTP 기반 클라이언트 어플리케이션 입니다.\n일정 규모 이상의 웹 어플리케이션을 개발하기 위해선 다양한 디자이너, 퍼블리셔 및 프로그래머가 협업해야 합니다.\nWoowahanJS는 퍼블리셔와 프로그래머간 협업이 쉬운 환경을 제공합니다.\n\n빠르고 생산성 높은 UI 작업을 위해 계층 뷰 컴포넌트 관리와 One-way data binding을 지원하며 UI와 비즈니스 코드간 종속성을 최소화 하기 위한 아키텍처로 설계되었습니다.\n\n## 영향을 받은 것들\n\nWoowahanJS는 유명한 [BackboneJS](http://backbonejs.org) 기반 위에서 작성되었습니다. [BackboneJS](http://backbonejs.org)는 [UnderscoreJS](http://underscorejs.org), [jQuery](http://jquery.com) 종속성을 포함하므로 WoowahanJS도 자연스럽게 언제든 [UnderscoreJS](http://underscorejs.org)와 [jQuery](http://jquery.com)를 사용할 수 있습니다.\n\nAPI 호출에서 촉발되는 상태 흐름과 관리를 위해 [React](https://facebook.github.io/react/) 프로젝트의 [Flux](https://facebook.github.io/flux) 및 [Redux](http://redux.js.org) 아키텍처의 아이디어를 구현했습니다. 하지만 WoowahanJS를 사용하기 위해 이들을 선행학습 할 필요는 없습니다.\n\n## 빠르게 시작하기\n\n저장소를 Clone 한 뒤 [Example](./examples) 디렉토리의 셈플들을 살펴보세요. WoowahanJS를 가장 빠르게 시작할 수 있는 지름길입니다.\n\n## 설치\n\n```\n$ mkdir hello-woowa && cd hello-woowa\n$ npm init\n$ npm install --save woowahan\n```\n\n## Hello, WoowahanJS\n\n```Javascript\nimport Woowahan from 'woowahan';\n\nconst Main = Woowahan.View.create('Main', {\n  template: '<h1>Hello, WoowahanJs</h1>'\n});\n\nconst app = new Woowahan();\n\napp.start({\n  url: '/', container: 'body', view: Main\n});\n```\n\n다음 링크에서 더 많은 정보를 제공합니다.\n\n* [WoowahanJS 시작하기](./docs/README.md)"
  },
  {
    "path": "README.md",
    "content": "\n\n# WoowahanJS\n\n[![npm](https://img.shields.io/npm/v/woowahan.svg?style=flat-square)]()\n[![npm (tag)](https://img.shields.io/npm/v/woowahan/beta.svg?style=flat-square)]()\n[![npm](https://img.shields.io/npm/dm/woowahan.svg?style=flat-square)]()\n[![npm](https://img.shields.io/npm/l/woowahan.svg?style=flat-square)]()\n\nWoowahanJS는 보다 큰 규모의 웹 어플리케이션 개발을 위한 프레임워크입니다.\n\n현대의 웹 어플리케이션은 많은 수의 컴포넌트로 복잡하게 구성된 뷰와 상태를 관리하는 HTTP 기반 클라이언트 어플리케이션 입니다.\n일정 규모 이상의 웹 어플리케이션을 개발하기 위해선 다양한 디자이너, 퍼블리셔 및 프로그래머가 협업해야 합니다.\nWoowahanJS는 퍼블리셔와 프로그래머간 협업이 쉬운 환경을 제공합니다.\n\n빠르고 생산성 높은 UI 작업을 위해 계층 뷰 컴포넌트 관리와 One-way data binding을 지원하며 UI와 비즈니스 코드간 종속성을 최소화 하기 위한 아키텍처로 설계되었습니다.\n\n## 영향을 받은 것들\n\nWoowahanJS는 유명한 [BackboneJS](http://backbonejs.org) 기반 위에서 작성되었습니다. [BackboneJS](http://backbonejs.org)는 [UnderscoreJS](http://underscorejs.org), [jQuery](http://jquery.com) 종속성을 포함하므로 WoowahanJS도 자연스럽게 언제든 [UnderscoreJS](http://underscorejs.org)와 [jQuery](http://jquery.com)를 사용할 수 있습니다.\n\nAPI 호출에서 촉발되는 상태 흐름과 관리를 위해 [React](https://facebook.github.io/react/) 프로젝트의 [Flux](https://facebook.github.io/flux) 및 [Redux](http://redux.js.org) 아키텍처의 아이디어를 구현했습니다. 하지만 WoowahanJS를 사용하기 위해 이들을 선행학습 할 필요는 없습니다.\n\n## 빠르게 시작하기\n\n저장소를 Clone 한 뒤 [Example](./examples) 디렉토리의 셈플들을 살펴보세요. WoowahanJS를 가장 빠르게 시작할 수 있는 지름길입니다.\n\n## 설치\n\n```\n$ mkdir hello-woowa && cd hello-woowa\n$ npm init\n$ npm install --save woowahan\n```\n\n## Hello, WoowahanJS\n\n```Javascript\nimport Woowahan from 'woowahan';\n\nconst Main = Woowahan.View.create('Main', {\n  template: '<h1>Hello, WoowahanJs</h1>'\n});\n\nconst app = new Woowahan();\n\napp.start({\n  url: '/', container: 'body', view: Main\n});\n```\n\n다음 링크에서 더 많은 정보를 제공합니다.\n\n* [WoowahanJS 시작하기](http://ibare.gitbooks.io/woowahanjs/)"
  },
  {
    "path": "dist/woowahan.js",
    "content": "!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=6)}([function(e,t,n){\"use strict\";function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}Object.defineProperty(t,\"__esModule\",{value:!0});var i=(t.MIDDLEWARE={APP:\"app\",VIEW:\"view\",REDUCER:\"reducer\",ROUTER:\"router\"},t.MIDDLEWARE_PROTOCOL={BEFORE:\"before\",AFTER:\"after\",UNMOUNT:\"unmount\"},[]),o=!1,s=t.MiddlewareRunner={get isRunning(){return o},run:function(e,t,n,a,u){if(!Array.isArray(e)||\"string\"!=typeof t)throw new Error(\"MiddlewareRunner arguments error\");if(o)return void i.push([e,t,n,a,u]);o=!0;var c=n.length,l=0;\"function\"==typeof u&&u(),function u(){var f=e[l++];if(f){var h=f[t];h.length>c?h.call.apply(h,[f].concat(r(n),[u])):(h.call.apply(h,[f].concat(r(n))),setTimeout(u,1))}else{!!a&&a();var d=i.shift();o=!1,d&&s.run.apply(s,r(d))}}()}}},function(e,t,n){\"use strict\";(function(t){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}var o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(2),u=n(10),c=n(0).MIDDLEWARE,l=n(0).MIDDLEWARE_PROTOCOL,f=n(0).MiddlewareRunner,h={get dispatch(){return d.dispatch.bind(d)},get getMiddleware(){return d.getMiddleware.bind(d)},get getStates(){return d.getStates.bind(d)},get setStates(){return d.setStates.bind(d)},get getComponent(){return d.getComponent.bind(d)},get getRouteTables(){return d.getRouteTables.bind(d)},get addAction(){return d.addAction.bind(d)},get removeAction(){return d.removeAction.bind(d)},get addError(){return d.addError.bind(d)}},d=void 0;t.__backboneAgent&&t.__backboneAgent.handleBackbone(a),a.Model.prototype.idAttribute=\"___ID_ATTR___\",a.View.prototype.viewname=\"___WOOWA_VIEW___\";var p=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),this.reducers=t.reducers||{},this.components=t.components||{},this.middlewares={app:{before:[],after:[]},router:{before:[],after:[]},reducer:{before:[],after:[]},view:{before:[],after:[],unmount:[]}},this.importViews={},this.store=null,this.queue=[],this.pretasks=[],this.actionObject={},this.queuemonitor=null,d=this,this.enableQueue()}return s(e,[{key:\"import\",value:function(e){var t=this;Object.keys(e.reducers||{}).forEach(function(n){return t.use(e.reducers[n])}),Object.keys(e.views||{}).forEach(function(n){return t.importViews[n]=e.views[n]})}},{key:\"getView\",value:function(e){return this.importViews[e]}},{key:\"enableQueue\",value:function(){this.queuemonitor=setInterval(this.queuing.bind(this),1e3/60)}},{key:\"disableQueue\",value:function(){this.queuemonitor=clearInterval(this.queuemonitor)}},{key:\"addAction\",value:function(e){this.actionObject[e]=Date.now(),1===this.numberOfWorkAction()&&this.trigger(\"start\")}},{key:\"removeAction\",value:function(e){delete this.actionObject[e],0===this.numberOfWorkAction()&&this.trigger(\"finish\")}},{key:\"addError\",value:function(e){this.trigger(\"error\",e)}},{key:\"queuing\",value:function(){this.disableQueue();var e=this.queue.shift();if(e){var t=this.reducers[e.action.type];if(!t)throw this.enableQueue(),new Error(\"The unregistered reducer. Please check the type of action, if there is a written reducer use after registration.\");if(e.subscriber=e.subscriber||function(){},\"function\"!=typeof e.subscriber)throw this.enableQueue(),new Error(\"The listener must be a function. If you do not need the listener it may not be specified.\");if(t.schema){var n=t.schema.validate(e.action.data);n?this.trigger(\"error\",n):new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,e.action.data,e.subscriber.bind(this))))}else new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,e.action.data,e.subscriber.bind(this))))}this.enableQueue()}},{key:\"bindStore\",value:function(e){this.store=e}},{key:\"bindReducer\",value:function(e){this.reducers[e.actionName]=e}},{key:\"bindComponent\",value:function(e){this.components[e.name]=e}},{key:\"bindPlugin\",value:function(t){var n=t.type.toLowerCase();if(e.View.prototype._plugins.hasOwnProperty(n))throw new Error(\"Duplicate plugin name\");e.View.prototype._plugins[n]=t.plugin}},{key:\"combineReducer\",value:function(e){var t=this;e&&e.forEach(function(e){t.bindReducer(e)})}},{key:\"getStates\",value:function(e){return void 0!==e?this.store[e]:this.store}},{key:\"setStates\",value:function(e,t){var n=void 0;n=\"string\"==typeof e&&void 0!==t?r({},e,t):e,this.store||(this.store={}),Object.assign(this.store,n)}},{key:\"getMiddleware\",value:function(e,t){return this.middlewares[e][t]}},{key:\"getComponent\",value:function(e){var t=this.components[e];if(t)return t.view}},{key:\"getRouteTables\",value:function(){return u.routeTables}},{key:\"dispatch\",value:function(e,t){this.queue.push({action:e,subscriber:t})}},{key:\"use\",value:function(e){var t=this;Array.isArray(e)?e.forEach(function(e){return t.useModule(e)}):\"object\"!==(void 0===e?\"undefined\":o(e))||\"wwtype\"in e?this.useModule(e):Object.keys(e).forEach(function(n){\"function\"==typeof e[n]&&t.useModule(e[n])})}},{key:\"useModule\",value:function(e){switch(e.wwtype){case\"reducer\":this.bindReducer(e);break;case\"layout\":u.bindLayout(e);break;case\"store\":this.bindStore(e.store);break;case\"component\":console.warn(\"Component:: Deprecated and will be removed in a future release.\"),this.bindComponent(e);break;case\"plugin\":this.bindPlugin(e)}}},{key:\"set\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e(n);if(!r.mwtype)throw new Error('Required attribute \"mwtype\" is missing.');Object.values(l).forEach(function(e){e in r&&t.middlewares[r.mwtype][e].push(r)})}},{key:\"start\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"undefined\"==typeof jQuery)throw new Error(\"jQuery is not loaded!!\");var r=setInterval(function(){switch(document.readyState){case\"complete\":case\"loaded\":break;default:return}clearInterval(r),a.History.started&&a.history.stop(),e&&u.design(e,n,h);var i=t.getMiddleware(c.APP,l.BEFORE);f.run(i,l.BEFORE,[h],function(){i=this.getMiddleware(c.APP,l.AFTER),f.run(i,l.AFTER,[h],function(){a.history.start({pushState:!!n.pushState})})}.bind(t))},1)}},{key:\"numberOfAction\",value:function(){return this.queue.length}},{key:\"numberOfWorkAction\",value:function(){return Object.keys(this.actionObject).length}}]),e}();Object.assign(p.prototype,a.Events),p.$=a.$,p.View=n(11)(h),p.Reducer=n(16)(h),p.Error=n(4),p.Types=n(17),p.Store=n(18),p.Action=n(19),p.Event=n(20),p.Schema=n(21),p.Layout=n(22),p.Component=n(23),p.Plugin=n(24),e.exports=t.Woowahan=p,p.CollectionView=n(25)(h),p.ItemView=n(26)(h),p.PopupView=n(27)(h),p.version=\"1.2.2\"}).call(t,n(3))},function(e,t,n){\"use strict\";(function(r){var i,o,s=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};!function(a){var u=\"object\"==(\"undefined\"==typeof self?\"undefined\":s(self))&&self.self===self&&self||\"object\"==(void 0===r?\"undefined\":s(r))&&r.global===r&&r;i=[n(7),n(8),t],void 0!==(o=function(e,t,n){u.Backbone=a(u,n,e,t)}.apply(t,i))&&(e.exports=o)}(function(e,t,n,r){var i=e.Backbone,o=Array.prototype.slice;t.VERSION=\"1.3.3\",t.$=r,t.noConflict=function(){return e.Backbone=i,this},t.emulateHTTP=!1,t.emulateJSON=!1;var a=function(e,t,r){switch(e){case 1:return function(){return n[t](this[r])};case 2:return function(e){return n[t](this[r],e)};case 3:return function(e,i){return n[t](this[r],c(e,this),i)};case 4:return function(e,i,o){return n[t](this[r],c(e,this),i,o)};default:return function(){var e=o.call(arguments);return e.unshift(this[r]),n[t].apply(n,e)}}},u=function(e,t,r){n.each(t,function(t,i){n[i]&&(e.prototype[i]=a(t,i,r))})},c=function(e,t){return n.isFunction(e)?e:n.isObject(e)&&!t._isModel(e)?l(e):n.isString(e)?function(t){return t.get(e)}:e},l=function(e){var t=n.matches(e);return function(e){return t(e.attributes)}},f=t.Events={},h=/\\s+/,d=function e(t,r,i,o,a){var u,c=0;if(i&&\"object\"===(void 0===i?\"undefined\":s(i))){void 0!==o&&\"context\"in a&&void 0===a.context&&(a.context=o);for(u=n.keys(i);c<u.length;c++)r=e(t,r,u[c],i[u[c]],a)}else if(i&&h.test(i))for(u=i.split(h);c<u.length;c++)r=t(r,u[c],o,a);else r=t(r,i,o,a);return r};f.on=function(e,t,n){return p(this,e,t,n)};var p=function(e,t,n,r,i){if(e._events=d(v,e._events||{},t,n,{context:r,ctx:e,listening:i}),i){(e._listeners||(e._listeners={}))[i.id]=i}return e};f.listenTo=function(e,t,r){if(!e)return this;var i=e._listenId||(e._listenId=n.uniqueId(\"l\")),o=this._listeningTo||(this._listeningTo={}),s=o[i];if(!s){var a=this._listenId||(this._listenId=n.uniqueId(\"l\"));s=o[i]={obj:e,objId:i,id:a,listeningTo:o,count:0}}return p(e,t,r,this,s),this};var v=function(e,t,n,r){if(n){var i=e[t]||(e[t]=[]),o=r.context,s=r.ctx,a=r.listening;a&&a.count++,i.push({callback:n,context:o,ctx:o||s,listening:a})}return e};f.off=function(e,t,n){return this._events?(this._events=d(y,this._events,e,t,{context:n,listeners:this._listeners}),this):this},f.stopListening=function(e,t,r){var i=this._listeningTo;if(!i)return this;for(var o=e?[e._listenId]:n.keys(i),s=0;s<o.length;s++){var a=i[o[s]];if(!a)break;a.obj.off(t,r,this)}return this};var y=function(e,t,r,i){if(e){var o,s=0,a=i.context,u=i.listeners;if(t||r||a){for(var c=t?[t]:n.keys(e);s<c.length;s++){t=c[s];var l=e[t];if(!l)break;for(var f=[],h=0;h<l.length;h++){var d=l[h];r&&r!==d.callback&&r!==d.callback._callback||a&&a!==d.context?f.push(d):(o=d.listening)&&0==--o.count&&(delete u[o.id],delete o.listeningTo[o.objId])}f.length?e[t]=f:delete e[t]}return e}for(var p=n.keys(u);s<p.length;s++)o=u[p[s]],delete u[o.id],delete o.listeningTo[o.objId]}};f.once=function(e,t,r){var i=d(g,{},e,t,n.bind(this.off,this));return\"string\"==typeof e&&null==r&&(t=void 0),this.on(i,t,r)},f.listenToOnce=function(e,t,r){var i=d(g,{},t,r,n.bind(this.stopListening,this,e));return this.listenTo(e,i)};var g=function(e,t,r,i){if(r){var o=e[t]=n.once(function(){i(t,o),r.apply(this,arguments)});o._callback=r}return e};f.trigger=function(e){if(!this._events)return this;for(var t=Math.max(0,arguments.length-1),n=Array(t),r=0;r<t;r++)n[r]=arguments[r+1];return d(m,this._events,e,void 0,n),this};var m=function(e,t,n,r){if(e){var i=e[t],o=e.all;i&&o&&(o=o.slice()),i&&b(i,r),o&&b(o,[t].concat(r))}return e},b=function(e,t){var n,r=-1,i=e.length,o=t[0],s=t[1],a=t[2];switch(t.length){case 0:for(;++r<i;)(n=e[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o);return;case 2:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s);return;case 3:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s,a);return;default:for(;++r<i;)(n=e[r]).callback.apply(n.ctx,t);return}};f.bind=f.on,f.unbind=f.off,n.extend(t,f);var w=t.Model=function(e,t){var r=e||{};t||(t={}),this.cid=n.uniqueId(this.cidPrefix),this.attributes={},t.collection&&(this.collection=t.collection),t.parse&&(r=this.parse(r,t)||{});var i=n.result(this,\"defaults\");r=n.defaults(n.extend({},i,r),i),this.set(r,t),this.changed={},this.initialize.apply(this,arguments)};n.extend(w.prototype,f,{changed:null,validationError:null,idAttribute:\"id\",cidPrefix:\"c\",initialize:function(){},toJSON:function(e){return n.clone(this.attributes)},sync:function(){return t.sync.apply(this,arguments)},get:function(e){return this.attributes[e]},escape:function(e){return n.escape(this.get(e))},has:function(e){return null!=this.get(e)},matches:function(e){return!!n.iteratee(e,this)(this.attributes)},set:function(e,t,r){if(null==e)return this;var i;if(\"object\"===(void 0===e?\"undefined\":s(e))?(i=e,r=t):(i={})[e]=t,r||(r={}),!this._validate(i,r))return!1;var o=r.unset,a=r.silent,u=[],c=this._changing;this._changing=!0,c||(this._previousAttributes=n.clone(this.attributes),this.changed={});var l=this.attributes,f=this.changed,h=this._previousAttributes;for(var d in i)t=i[d],n.isEqual(l[d],t)||u.push(d),n.isEqual(h[d],t)?delete f[d]:f[d]=t,o?delete l[d]:l[d]=t;if(this.idAttribute in i&&(this.id=this.get(this.idAttribute)),!a){u.length&&(this._pending=r);for(var p=0;p<u.length;p++)this.trigger(\"change:\"+u[p],this,l[u[p]],r)}if(c)return this;if(!a)for(;this._pending;)r=this._pending,this._pending=!1,this.trigger(\"change\",this,r);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,n.extend({},t,{unset:!0}))},clear:function(e){var t={};for(var r in this.attributes)t[r]=void 0;return this.set(t,n.extend({},e,{unset:!0}))},hasChanged:function(e){return null==e?!n.isEmpty(this.changed):n.has(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&n.clone(this.changed);var t=this._changing?this._previousAttributes:this.attributes,r={};for(var i in e){var o=e[i];n.isEqual(t[i],o)||(r[i]=o)}return!!n.size(r)&&r},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return n.clone(this._previousAttributes)},fetch:function(e){e=n.extend({parse:!0},e);var t=this,r=e.success;return e.success=function(n){var i=e.parse?t.parse(n,e):n;if(!t.set(i,e))return!1;r&&r.call(e.context,t,n,e),t.trigger(\"sync\",t,n,e)},$(this,e),this.sync(\"read\",this,e)},save:function(e,t,r){var i;null==e||\"object\"===(void 0===e?\"undefined\":s(e))?(i=e,r=t):(i={})[e]=t,r=n.extend({validate:!0,parse:!0},r);var o=r.wait;if(i&&!o){if(!this.set(i,r))return!1}else if(!this._validate(i,r))return!1;var a=this,u=r.success,c=this.attributes;r.success=function(e){a.attributes=c;var t=r.parse?a.parse(e,r):e;if(o&&(t=n.extend({},i,t)),t&&!a.set(t,r))return!1;u&&u.call(r.context,a,e,r),a.trigger(\"sync\",a,e,r)},$(this,r),i&&o&&(this.attributes=n.extend({},c,i));var l=this.isNew()?\"create\":r.patch?\"patch\":\"update\";\"patch\"!==l||r.attrs||(r.attrs=i);var f=this.sync(l,this,r);return this.attributes=c,f},destroy:function(e){e=e?n.clone(e):{};var t=this,r=e.success,i=e.wait,o=function(){t.stopListening(),t.trigger(\"destroy\",t,t.collection,e)};e.success=function(n){i&&o(),r&&r.call(e.context,t,n,e),t.isNew()||t.trigger(\"sync\",t,n,e)};var s=!1;return this.isNew()?n.defer(e.success):($(this,e),s=this.sync(\"delete\",this,e)),i||o(),s},url:function(){var e=n.result(this,\"urlRoot\")||n.result(this.collection,\"url\")||P();if(this.isNew())return e;var t=this.get(this.idAttribute);return e.replace(/[^\\/]$/,\"$&/\")+encodeURIComponent(t)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(e){return this._validate({},n.extend({},e,{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=n.extend({},this.attributes,e);var r=this.validationError=this.validate(e,t)||null;return!r||(this.trigger(\"invalid\",this,r,n.extend(t,{validationError:r})),!1)}}),u(w,{keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1},\"attributes\");var x=t.Collection=function(e,t){t||(t={}),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,n.extend({silent:!0},t))},E={add:!0,remove:!0,merge:!0},S={add:!0,remove:!1},T=function(e,t,n){n=Math.min(Math.max(n,0),e.length);var r,i=Array(e.length-n),o=t.length;for(r=0;r<i.length;r++)i[r]=e[r+n];for(r=0;r<o;r++)e[r+n]=t[r];for(r=0;r<i.length;r++)e[r+o+n]=i[r]};n.extend(x.prototype,f,{model:w,initialize:function(){},toJSON:function(e){return this.map(function(t){return t.toJSON(e)})},sync:function(){return t.sync.apply(this,arguments)},add:function(e,t){return this.set(e,n.extend({merge:!1},t,S))},remove:function(e,t){t=n.extend({},t);var r=!n.isArray(e);e=r?[e]:e.slice();var i=this._removeModels(e,t);return!t.silent&&i.length&&(t.changes={added:[],merged:[],removed:i},this.trigger(\"update\",this,t)),r?i[0]:i},set:function(e,t){if(null!=e){t=n.extend({},E,t),t.parse&&!this._isModel(e)&&(e=this.parse(e,t)||[]);var r=!n.isArray(e);e=r?[e]:e.slice();var i=t.at;null!=i&&(i=+i),i>this.length&&(i=this.length),i<0&&(i+=this.length+1);var o,s,a=[],u=[],c=[],l=[],f={},h=t.add,d=t.merge,p=t.remove,v=!1,y=this.comparator&&null==i&&!1!==t.sort,g=n.isString(this.comparator)?this.comparator:null;for(s=0;s<e.length;s++){o=e[s];var m=this.get(o);if(m){if(d&&o!==m){var b=this._isModel(o)?o.attributes:o;t.parse&&(b=m.parse(b,t)),m.set(b,t),c.push(m),y&&!v&&(v=m.hasChanged(g))}f[m.cid]||(f[m.cid]=!0,a.push(m)),e[s]=m}else h&&(o=e[s]=this._prepareModel(o,t))&&(u.push(o),this._addReference(o,t),f[o.cid]=!0,a.push(o))}if(p){for(s=0;s<this.length;s++)o=this.models[s],f[o.cid]||l.push(o);l.length&&this._removeModels(l,t)}var w=!1,x=!y&&h&&p;if(a.length&&x?(w=this.length!==a.length||n.some(this.models,function(e,t){return e!==a[t]}),this.models.length=0,T(this.models,a,0),this.length=this.models.length):u.length&&(y&&(v=!0),T(this.models,u,null==i?this.length:i),this.length=this.models.length),v&&this.sort({silent:!0}),!t.silent){for(s=0;s<u.length;s++)null!=i&&(t.index=i+s),o=u[s],o.trigger(\"add\",o,this,t);(v||w)&&this.trigger(\"sort\",this,t),(u.length||l.length||c.length)&&(t.changes={added:u,removed:l,merged:c},this.trigger(\"update\",this,t))}return r?e[0]:e}},reset:function(e,t){t=t?n.clone(t):{};for(var r=0;r<this.models.length;r++)this._removeReference(this.models[r],t);return t.previousModels=this.models,this._reset(),e=this.add(e,n.extend({silent:!0},t)),t.silent||this.trigger(\"reset\",this,t),e},push:function(e,t){return this.add(e,n.extend({at:this.length},t))},pop:function(e){var t=this.at(this.length-1);return this.remove(t,e)},unshift:function(e,t){return this.add(e,n.extend({at:0},t))},shift:function(e){var t=this.at(0);return this.remove(t,e)},slice:function(){return o.apply(this.models,arguments)},get:function(e){if(null!=e)return this._byId[e]||this._byId[this.modelId(e.attributes||e)]||e.cid&&this._byId[e.cid]},has:function(e){return null!=this.get(e)},at:function(e){return e<0&&(e+=this.length),this.models[e]},where:function(e,t){return this[t?\"find\":\"filter\"](e)},findWhere:function(e){return this.where(e,!0)},sort:function(e){var t=this.comparator;if(!t)throw new Error(\"Cannot sort a set without a comparator\");e||(e={});var r=t.length;return n.isFunction(t)&&(t=n.bind(t,this)),1===r||n.isString(t)?this.models=this.sortBy(t):this.models.sort(t),e.silent||this.trigger(\"sort\",this,e),this},pluck:function(e){return this.map(e+\"\")},fetch:function(e){e=n.extend({parse:!0},e);var t=e.success,r=this;return e.success=function(n){var i=e.reset?\"reset\":\"set\";r[i](n,e),t&&t.call(e.context,r,n,e),r.trigger(\"sync\",r,n,e)},$(this,e),this.sync(\"read\",this,e)},create:function(e,t){t=t?n.clone(t):{};var r=t.wait;if(!(e=this._prepareModel(e,t)))return!1;r||this.add(e,t);var i=this,o=t.success;return t.success=function(e,t,n){r&&i.add(e,n),o&&o.call(n.context,e,t,n)},e.save(null,t),e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(e){return e[this.model.prototype.idAttribute||\"id\"]},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(this._isModel(e))return e.collection||(e.collection=this),e;t=t?n.clone(t):{},t.collection=this;var r=new this.model(e,t);return r.validationError?(this.trigger(\"invalid\",this,r.validationError,t),!1):r},_removeModels:function(e,t){for(var n=[],r=0;r<e.length;r++){var i=this.get(e[r]);if(i){var o=this.indexOf(i);this.models.splice(o,1),this.length--,delete this._byId[i.cid];var s=this.modelId(i.attributes);null!=s&&delete this._byId[s],t.silent||(t.index=o,i.trigger(\"remove\",i,this,t)),n.push(i),this._removeReference(i,t)}}return n},_isModel:function(e){return e instanceof w},_addReference:function(e,t){this._byId[e.cid]=e;var n=this.modelId(e.attributes);null!=n&&(this._byId[n]=e),e.on(\"all\",this._onModelEvent,this)},_removeReference:function(e,t){delete this._byId[e.cid];var n=this.modelId(e.attributes);null!=n&&delete this._byId[n],this===e.collection&&delete e.collection,e.off(\"all\",this._onModelEvent,this)},_onModelEvent:function(e,t,n,r){if(t){if((\"add\"===e||\"remove\"===e)&&n!==this)return;if(\"destroy\"===e&&this.remove(t,r),\"change\"===e){var i=this.modelId(t.previousAttributes()),o=this.modelId(t.attributes);i!==o&&(null!=i&&delete this._byId[i],null!=o&&(this._byId[o]=t))}}this.trigger.apply(this,arguments)}}),u(x,{forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3},\"models\");var _=t.View=function(e){this.cid=n.uniqueId(\"view\"),n.extend(this,n.pick(e,C)),this._ensureElement(),this.initialize.apply(this,arguments)},A=/^(\\S+)\\s*(.*)$/,C=[\"model\",\"collection\",\"el\",\"id\",\"attributes\",\"className\",\"tagName\",\"events\"];n.extend(_.prototype,f,{tagName:\"div\",$:function(e){return this.$el.find(e)},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(e){return this.undelegateEvents(),this._setElement(e),this.delegateEvents(),this},_setElement:function(e){this.$el=e instanceof t.$?e:t.$(e),this.el=this.$el[0]},delegateEvents:function(e){if(e||(e=n.result(this,\"events\")),!e)return this;this.undelegateEvents();for(var t in e){var r=e[t];if(n.isFunction(r)||(r=this[r]),r){var i=t.match(A);this.delegate(i[1],i[2],n.bind(r,this))}}return this},delegate:function(e,t,n){return this.$el.on(e+\".delegateEvents\"+this.cid,t,n),this},undelegateEvents:function(){return this.$el&&this.$el.off(\".delegateEvents\"+this.cid),this},undelegate:function(e,t,n){return this.$el.off(e+\".delegateEvents\"+this.cid,t,n),this},_createElement:function(e){return document.createElement(e)},_ensureElement:function(){if(this.el)this.setElement(n.result(this,\"el\"));else{var e=n.extend({},n.result(this,\"attributes\"));this.id&&(e.id=n.result(this,\"id\")),this.className&&(e.class=n.result(this,\"className\")),this.setElement(this._createElement(n.result(this,\"tagName\"))),this._setAttributes(e)}},_setAttributes:function(e){this.$el.attr(e)}}),t.sync=function(e,r,i){var o=k[e];n.defaults(i||(i={}),{emulateHTTP:t.emulateHTTP,emulateJSON:t.emulateJSON});var s={type:o,dataType:\"json\"};if(i.url||(s.url=n.result(r,\"url\")||P()),null!=i.data||!r||\"create\"!==e&&\"update\"!==e&&\"patch\"!==e||(s.contentType=\"application/json\",s.data=JSON.stringify(i.attrs||r.toJSON(i))),i.emulateJSON&&(s.contentType=\"application/x-www-form-urlencoded\",s.data=s.data?{model:s.data}:{}),i.emulateHTTP&&(\"PUT\"===o||\"DELETE\"===o||\"PATCH\"===o)){s.type=\"POST\",i.emulateJSON&&(s.data._method=o);var a=i.beforeSend;i.beforeSend=function(e){if(e.setRequestHeader(\"X-HTTP-Method-Override\",o),a)return a.apply(this,arguments)}}\"GET\"===s.type||i.emulateJSON||(s.processData=!1);var u=i.error;i.error=function(e,t,n){i.textStatus=t,i.errorThrown=n,u&&u.call(i.context,e,t,n)};var c=i.xhr=t.ajax(n.extend(s,i));return r.trigger(\"request\",r,c,i),c};var k={create:\"POST\",update:\"PUT\",patch:\"PATCH\",delete:\"DELETE\",read:\"GET\"};t.ajax=function(){return t.$.ajax.apply(t.$,arguments)};var j=t.Router=function(e){e||(e={}),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},O=/\\((.*?)\\)/g,N=/(\\(\\?)?:\\w+/g,R=/\\*\\w+/g,M=/[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;n.extend(j.prototype,f,{initialize:function(){},route:function(e,r,i){n.isRegExp(e)||(e=this._routeToRegExp(e)),n.isFunction(r)&&(i=r,r=\"\"),i||(i=this[r]);var o=this;return t.history.route(e,function(n){var s=o._extractParameters(e,n);!1!==o.execute(i,s,r)&&(o.trigger.apply(o,[\"route:\"+r].concat(s)),o.trigger(\"route\",r,s),t.history.trigger(\"route\",o,r,s))}),this},execute:function(e,t,n){e&&e.apply(this,t)},navigate:function(e,n){return t.history.navigate(e,n),this},_bindRoutes:function(){if(this.routes){this.routes=n.result(this,\"routes\");for(var e,t=n.keys(this.routes);null!=(e=t.pop());)this.route(e,this.routes[e])}},_routeToRegExp:function(e){return e=e.replace(M,\"\\\\$&\").replace(O,\"(?:$1)?\").replace(N,function(e,t){return t?e:\"([^/?]+)\"}).replace(R,\"([^?]*?)\"),new RegExp(\"^\"+e+\"(?:\\\\?([\\\\s\\\\S]*))?$\")},_extractParameters:function(e,t){var r=e.exec(t).slice(1);return n.map(r,function(e,t){return t===r.length-1?e||null:e?decodeURIComponent(e):null})}});var D=t.History=function(){this.handlers=[],this.checkUrl=n.bind(this.checkUrl,this),\"undefined\"!=typeof window&&(this.location=window.location,this.history=window.history)},L=/^[#\\/]|\\s+$/g,q=/^\\/+|\\/+$/g,I=/#.*$/;D.started=!1,n.extend(D.prototype,f,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\\/]$/,\"$&/\")===this.root&&!this.getSearch()},matchRoot:function(){return this.decodeFragment(this.location.pathname).slice(0,this.root.length-1)+\"/\"===this.root},decodeFragment:function(e){return decodeURI(e.replace(/%25/g,\"%2525\"))},getSearch:function(){var e=this.location.href.replace(/#.*/,\"\").match(/\\?.+/);return e?e[0]:\"\"},getHash:function(e){var t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:\"\"},getPath:function(){var e=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return\"/\"===e.charAt(0)?e.slice(1):e},getFragment:function(e){return null==e&&(e=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),e.replace(L,\"\")},start:function(e){if(D.started)throw new Error(\"Backbone.history has already been started\");if(D.started=!0,this.options=n.extend({root:\"/\"},this.options,e),this.root=this.options.root,this._wantsHashChange=!1!==this.options.hashChange,this._hasHashChange=\"onhashchange\"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=(\"/\"+this.root+\"/\").replace(q,\"/\"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var t=this.root.slice(0,-1)||\"/\";return this.location.replace(t+\"#\"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement(\"iframe\"),this.iframe.src=\"javascript:0\",this.iframe.style.display=\"none\",this.iframe.tabIndex=-1;var r=document.body,i=r.insertBefore(this.iframe,r.firstChild).contentWindow;i.document.open(),i.document.close(),i.location.hash=\"#\"+this.fragment}var o=window.addEventListener||function(e,t){return attachEvent(\"on\"+e,t)};if(this._usePushState?o(\"popstate\",this.checkUrl,!1):this._useHashChange&&!this.iframe?o(\"hashchange\",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var e=window.removeEventListener||function(e,t){return detachEvent(\"on\"+e,t)};this._usePushState?e(\"popstate\",this.checkUrl,!1):this._useHashChange&&!this.iframe&&e(\"hashchange\",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),D.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){var t=this.getFragment();if(t===this.fragment&&this.iframe&&(t=this.getHash(this.iframe.contentWindow)),t===this.fragment)return!1;this.iframe&&this.navigate(t),this.loadUrl()},loadUrl:function(e){return!!this.matchRoot()&&(e=this.fragment=this.getFragment(e),n.some(this.handlers,function(t){if(t.route.test(e))return t.callback(e),!0}))},navigate:function(e,t){if(!D.started)return!1;t&&!0!==t||(t={trigger:!!t}),e=this.getFragment(e||\"\");var n=this.root;\"\"!==e&&\"?\"!==e.charAt(0)||(n=n.slice(0,-1)||\"/\");var r=n+e;if(e=this.decodeFragment(e.replace(I,\"\")),this.fragment!==e){if(this.fragment=e,this._usePushState)this.history[t.replace?\"replaceState\":\"pushState\"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getHash(this.iframe.contentWindow)){var i=this.iframe.contentWindow;t.replace||(i.document.open(),i.document.close()),this._updateHash(i.location,e,t.replace)}}return t.trigger?this.loadUrl(e):void 0}},_updateHash:function(e,t,n){if(n){var r=e.href.replace(/(javascript:|#).*$/,\"\");e.replace(r+\"#\"+t)}else e.hash=\"#\"+t}}),t.history=new D;var F=function(e,t){var r,i=this;return r=e&&n.has(e,\"constructor\")?e.constructor:function(){return i.apply(this,arguments)},n.extend(r,i,t),r.prototype=n.create(i.prototype,e),r.prototype.constructor=r,r.__super__=i.prototype,r};w.extend=x.extend=j.extend=_.extend=D.extend=F;var P=function(){throw new Error('A \"url\" property or function must be specified')},$=function(e,t){var n=t.error;t.error=function(r){n&&n.call(t.context,e,r,t),e.trigger(\"error\",e,r,t)}};return t})}).call(t,n(3))},function(e,t,n){\"use strict\";var r,i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};r=function(){return this}();try{r=r||Function(\"return this\")()||(0,eval)(\"this\")}catch(e){\"object\"===(\"undefined\"==typeof window?\"undefined\":i(window))&&(r=window)}e.exports=r},function(e,t,n){\"use strict\";e.exports={create:function(e,t){return{wwtype:\"error\",code:1,message:e,target:t}}}},function(e,t,n){\"use strict\";e.exports={SELECTED_ROW:\"selectedRow\",SELECTED_CELL:\"selectedCell\"}},function(e,t,n){\"use strict\";e.exports=n(1)},function(e,t,n){\"use strict\";var r,i,o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};(function(){function n(e){function t(t,n,r,i,o,s){for(;o>=0&&o<s;o+=e){var a=i?i[o]:o;r=n(r,t[a],a,t)}return r}return function(n,r,i,o){r=T(r,o,4);var s=!N(n)&&S.keys(n),a=(s||n).length,u=e>0?0:a-1;return arguments.length<3&&(i=n[s?s[u]:u],u+=e),t(n,r,i,s,u,a)}}function s(e){return function(t,n,r){n=_(n,r);for(var i=O(t),o=e>0?0:i-1;o>=0&&o<i;o+=e)if(n(t[o],o,t))return o;return-1}}function a(e,t,n){return function(r,i,o){var s=0,a=O(r);if(\"number\"==typeof o)e>0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return o=n(r,i),r[o]===i?o:-1;if(i!==i)return o=t(v.call(r,s,a),S.isNaN),o>=0?o+s:-1;for(o=e>0?s:a-1;o>=0&&o<a;o+=e)if(r[o]===i)return o;return-1}}function u(e,t){var n=q.length,r=e.constructor,i=S.isFunction(r)&&r.prototype||h,o=\"constructor\";for(S.has(e,o)&&!S.contains(t,o)&&t.push(o);n--;)(o=q[n])in e&&e[o]!==i[o]&&!S.contains(t,o)&&t.push(o)}var c=this,l=c._,f=Array.prototype,h=Object.prototype,d=Function.prototype,p=f.push,v=f.slice,y=h.toString,g=h.hasOwnProperty,m=Array.isArray,b=Object.keys,w=d.bind,x=Object.create,E=function(){},S=function e(t){return t instanceof e?t:this instanceof e?void(this._wrapped=t):new e(t)};void 0!==e&&e.exports&&(t=e.exports=S),t._=S,S.VERSION=\"1.8.3\";var T=function(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,o){return e.call(t,n,r,i,o)}}return function(){return e.apply(t,arguments)}},_=function(e,t,n){return null==e?S.identity:S.isFunction(e)?T(e,t,n):S.isObject(e)?S.matcher(e):S.property(e)};S.iteratee=function(e,t){return _(e,t,1/0)};var A=function(e,t){return function(n){var r=arguments.length;if(r<2||null==n)return n;for(var i=1;i<r;i++)for(var o=arguments[i],s=e(o),a=s.length,u=0;u<a;u++){var c=s[u];t&&void 0!==n[c]||(n[c]=o[c])}return n}},C=function(e){if(!S.isObject(e))return{};if(x)return x(e);E.prototype=e;var t=new E;return E.prototype=null,t},k=function(e){return function(t){return null==t?void 0:t[e]}},j=Math.pow(2,53)-1,O=k(\"length\"),N=function(e){var t=O(e);return\"number\"==typeof t&&t>=0&&t<=j};S.each=S.forEach=function(e,t,n){t=T(t,n);var r,i;if(N(e))for(r=0,i=e.length;r<i;r++)t(e[r],r,e);else{var o=S.keys(e);for(r=0,i=o.length;r<i;r++)t(e[o[r]],o[r],e)}return e},S.map=S.collect=function(e,t,n){t=_(t,n);for(var r=!N(e)&&S.keys(e),i=(r||e).length,o=Array(i),s=0;s<i;s++){var a=r?r[s]:s;o[s]=t(e[a],a,e)}return o},S.reduce=S.foldl=S.inject=n(1),S.reduceRight=S.foldr=n(-1),S.find=S.detect=function(e,t,n){var r;if(void 0!==(r=N(e)?S.findIndex(e,t,n):S.findKey(e,t,n))&&-1!==r)return e[r]},S.filter=S.select=function(e,t,n){var r=[];return t=_(t,n),S.each(e,function(e,n,i){t(e,n,i)&&r.push(e)}),r},S.reject=function(e,t,n){return S.filter(e,S.negate(_(t)),n)},S.every=S.all=function(e,t,n){t=_(t,n);for(var r=!N(e)&&S.keys(e),i=(r||e).length,o=0;o<i;o++){var s=r?r[o]:o;if(!t(e[s],s,e))return!1}return!0},S.some=S.any=function(e,t,n){t=_(t,n);for(var r=!N(e)&&S.keys(e),i=(r||e).length,o=0;o<i;o++){var s=r?r[o]:o;if(t(e[s],s,e))return!0}return!1},S.contains=S.includes=S.include=function(e,t,n,r){return N(e)||(e=S.values(e)),(\"number\"!=typeof n||r)&&(n=0),S.indexOf(e,t,n)>=0},S.invoke=function(e,t){var n=v.call(arguments,2),r=S.isFunction(t);return S.map(e,function(e){var i=r?t:e[t];return null==i?i:i.apply(e,n)})},S.pluck=function(e,t){return S.map(e,S.property(t))},S.where=function(e,t){return S.filter(e,S.matcher(t))},S.findWhere=function(e,t){return S.find(e,S.matcher(t))},S.max=function(e,t,n){var r,i,o=-1/0,s=-1/0;if(null==t&&null!=e){e=N(e)?e:S.values(e);for(var a=0,u=e.length;a<u;a++)(r=e[a])>o&&(o=r)}else t=_(t,n),S.each(e,function(e,n,r){((i=t(e,n,r))>s||i===-1/0&&o===-1/0)&&(o=e,s=i)});return o},S.min=function(e,t,n){var r,i,o=1/0,s=1/0;if(null==t&&null!=e){e=N(e)?e:S.values(e);for(var a=0,u=e.length;a<u;a++)(r=e[a])<o&&(o=r)}else t=_(t,n),S.each(e,function(e,n,r){((i=t(e,n,r))<s||i===1/0&&o===1/0)&&(o=e,s=i)});return o},S.shuffle=function(e){for(var t,n=N(e)?e:S.values(e),r=n.length,i=Array(r),o=0;o<r;o++)t=S.random(0,o),t!==o&&(i[o]=i[t]),i[t]=n[o];return i},S.sample=function(e,t,n){return null==t||n?(N(e)||(e=S.values(e)),e[S.random(e.length-1)]):S.shuffle(e).slice(0,Math.max(0,t))},S.sortBy=function(e,t,n){return t=_(t,n),S.pluck(S.map(e,function(e,n,r){return{value:e,index:n,criteria:t(e,n,r)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),\"value\")};var R=function(e){return function(t,n,r){var i={};return n=_(n,r),S.each(t,function(r,o){var s=n(r,o,t);e(i,r,s)}),i}};S.groupBy=R(function(e,t,n){S.has(e,n)?e[n].push(t):e[n]=[t]}),S.indexBy=R(function(e,t,n){e[n]=t}),S.countBy=R(function(e,t,n){S.has(e,n)?e[n]++:e[n]=1}),S.toArray=function(e){return e?S.isArray(e)?v.call(e):N(e)?S.map(e,S.identity):S.values(e):[]},S.size=function(e){return null==e?0:N(e)?e.length:S.keys(e).length},S.partition=function(e,t,n){t=_(t,n);var r=[],i=[];return S.each(e,function(e,n,o){(t(e,n,o)?r:i).push(e)}),[r,i]},S.first=S.head=S.take=function(e,t,n){if(null!=e)return null==t||n?e[0]:S.initial(e,e.length-t)},S.initial=function(e,t,n){return v.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))},S.last=function(e,t,n){if(null!=e)return null==t||n?e[e.length-1]:S.rest(e,Math.max(0,e.length-t))},S.rest=S.tail=S.drop=function(e,t,n){return v.call(e,null==t||n?1:t)},S.compact=function(e){return S.filter(e,S.identity)};var M=function e(t,n,r,i){for(var o=[],s=0,a=i||0,u=O(t);a<u;a++){var c=t[a];if(N(c)&&(S.isArray(c)||S.isArguments(c))){n||(c=e(c,n,r));var l=0,f=c.length;for(o.length+=f;l<f;)o[s++]=c[l++]}else r||(o[s++]=c)}return o};S.flatten=function(e,t){return M(e,t,!1)},S.without=function(e){return S.difference(e,v.call(arguments,1))},S.uniq=S.unique=function(e,t,n,r){S.isBoolean(t)||(r=n,n=t,t=!1),null!=n&&(n=_(n,r));for(var i=[],o=[],s=0,a=O(e);s<a;s++){var u=e[s],c=n?n(u,s,e):u;t?(s&&o===c||i.push(u),o=c):n?S.contains(o,c)||(o.push(c),i.push(u)):S.contains(i,u)||i.push(u)}return i},S.union=function(){return S.uniq(M(arguments,!0,!0))},S.intersection=function(e){for(var t=[],n=arguments.length,r=0,i=O(e);r<i;r++){var o=e[r];if(!S.contains(t,o)){for(var s=1;s<n&&S.contains(arguments[s],o);s++);s===n&&t.push(o)}}return t},S.difference=function(e){var t=M(arguments,!0,!0,1);return S.filter(e,function(e){return!S.contains(t,e)})},S.zip=function(){return S.unzip(arguments)},S.unzip=function(e){for(var t=e&&S.max(e,O).length||0,n=Array(t),r=0;r<t;r++)n[r]=S.pluck(e,r);return n},S.object=function(e,t){for(var n={},r=0,i=O(e);r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},S.findIndex=s(1),S.findLastIndex=s(-1),S.sortedIndex=function(e,t,n,r){n=_(n,r,1);for(var i=n(t),o=0,s=O(e);o<s;){var a=Math.floor((o+s)/2);n(e[a])<i?o=a+1:s=a}return o},S.indexOf=a(1,S.findIndex,S.sortedIndex),S.lastIndexOf=a(-1,S.findLastIndex),S.range=function(e,t,n){null==t&&(t=e||0,e=0),n=n||1;for(var r=Math.max(Math.ceil((t-e)/n),0),i=Array(r),o=0;o<r;o++,e+=n)i[o]=e;return i};var D=function(e,t,n,r,i){if(!(r instanceof t))return e.apply(n,i);var o=C(e.prototype),s=e.apply(o,i);return S.isObject(s)?s:o};S.bind=function(e,t){if(w&&e.bind===w)return w.apply(e,v.call(arguments,1));if(!S.isFunction(e))throw new TypeError(\"Bind must be called on a function\");var n=v.call(arguments,2);return function r(){return D(e,r,t,this,n.concat(v.call(arguments)))}},S.partial=function(e){var t=v.call(arguments,1);return function n(){for(var r=0,i=t.length,o=Array(i),s=0;s<i;s++)o[s]=t[s]===S?arguments[r++]:t[s];for(;r<arguments.length;)o.push(arguments[r++]);return D(e,n,this,this,o)}},S.bindAll=function(e){var t,n,r=arguments.length;if(r<=1)throw new Error(\"bindAll must be passed function names\");for(t=1;t<r;t++)n=arguments[t],e[n]=S.bind(e[n],e);return e},S.memoize=function(e,t){var n=function n(r){var i=n.cache,o=\"\"+(t?t.apply(this,arguments):r);return S.has(i,o)||(i[o]=e.apply(this,arguments)),i[o]};return n.cache={},n},S.delay=function(e,t){var n=v.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},S.defer=S.partial(S.delay,S,1),S.throttle=function(e,t,n){var r,i,o,s=null,a=0;n||(n={});var u=function(){a=!1===n.leading?0:S.now(),s=null,o=e.apply(r,i),s||(r=i=null)};return function(){var c=S.now();a||!1!==n.leading||(a=c);var l=t-(c-a);return r=this,i=arguments,l<=0||l>t?(s&&(clearTimeout(s),s=null),a=c,o=e.apply(r,i),s||(r=i=null)):s||!1===n.trailing||(s=setTimeout(u,l)),o}},S.debounce=function(e,t,n){var r,i,o,s,a,u=function u(){var c=S.now()-s;c<t&&c>=0?r=setTimeout(u,t-c):(r=null,n||(a=e.apply(o,i),r||(o=i=null)))};return function(){o=this,i=arguments,s=S.now();var c=n&&!r;return r||(r=setTimeout(u,t)),c&&(a=e.apply(o,i),o=i=null),a}},S.wrap=function(e,t){return S.partial(t,e)},S.negate=function(e){return function(){return!e.apply(this,arguments)}},S.compose=function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},S.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},S.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},S.once=S.partial(S.before,2);var L=!{toString:null}.propertyIsEnumerable(\"toString\"),q=[\"valueOf\",\"isPrototypeOf\",\"toString\",\"propertyIsEnumerable\",\"hasOwnProperty\",\"toLocaleString\"];S.keys=function(e){if(!S.isObject(e))return[];if(b)return b(e);var t=[];for(var n in e)S.has(e,n)&&t.push(n);return L&&u(e,t),t},S.allKeys=function(e){if(!S.isObject(e))return[];var t=[];for(var n in e)t.push(n);return L&&u(e,t),t},S.values=function(e){for(var t=S.keys(e),n=t.length,r=Array(n),i=0;i<n;i++)r[i]=e[t[i]];return r},S.mapObject=function(e,t,n){t=_(t,n);for(var r,i=S.keys(e),o=i.length,s={},a=0;a<o;a++)r=i[a],s[r]=t(e[r],r,e);return s},S.pairs=function(e){for(var t=S.keys(e),n=t.length,r=Array(n),i=0;i<n;i++)r[i]=[t[i],e[t[i]]];return r},S.invert=function(e){for(var t={},n=S.keys(e),r=0,i=n.length;r<i;r++)t[e[n[r]]]=n[r];return t},S.functions=S.methods=function(e){var t=[];for(var n in e)S.isFunction(e[n])&&t.push(n);return t.sort()},S.extend=A(S.allKeys),S.extendOwn=S.assign=A(S.keys),S.findKey=function(e,t,n){t=_(t,n);for(var r,i=S.keys(e),o=0,s=i.length;o<s;o++)if(r=i[o],t(e[r],r,e))return r},S.pick=function(e,t,n){var r,i,o={},s=e;if(null==s)return o;S.isFunction(t)?(i=S.allKeys(s),r=T(t,n)):(i=M(arguments,!1,!1,1),r=function(e,t,n){return t in n},s=Object(s));for(var a=0,u=i.length;a<u;a++){var c=i[a],l=s[c];r(l,c,s)&&(o[c]=l)}return o},S.omit=function(e,t,n){if(S.isFunction(t))t=S.negate(t);else{var r=S.map(M(arguments,!1,!1,1),String);t=function(e,t){return!S.contains(r,t)}}return S.pick(e,t,n)},S.defaults=A(S.allKeys,!0),S.create=function(e,t){var n=C(e);return t&&S.extendOwn(n,t),n},S.clone=function(e){return S.isObject(e)?S.isArray(e)?e.slice():S.extend({},e):e},S.tap=function(e,t){return t(e),e},S.isMatch=function(e,t){var n=S.keys(t),r=n.length;if(null==e)return!r;for(var i=Object(e),o=0;o<r;o++){var s=n[o];if(t[s]!==i[s]||!(s in i))return!1}return!0};var I=function e(t,n,r,i){if(t===n)return 0!==t||1/t==1/n;if(null==t||null==n)return t===n;t instanceof S&&(t=t._wrapped),n instanceof S&&(n=n._wrapped);var s=y.call(t);if(s!==y.call(n))return!1;switch(s){case\"[object RegExp]\":case\"[object String]\":return\"\"+t==\"\"+n;case\"[object Number]\":return+t!=+t?+n!=+n:0==+t?1/+t==1/n:+t==+n;case\"[object Date]\":case\"[object Boolean]\":return+t==+n}var a=\"[object Array]\"===s;if(!a){if(\"object\"!=(void 0===t?\"undefined\":o(t))||\"object\"!=(void 0===n?\"undefined\":o(n)))return!1;var u=t.constructor,c=n.constructor;if(u!==c&&!(S.isFunction(u)&&u instanceof u&&S.isFunction(c)&&c instanceof c)&&\"constructor\"in t&&\"constructor\"in n)return!1}r=r||[],i=i||[];for(var l=r.length;l--;)if(r[l]===t)return i[l]===n;if(r.push(t),i.push(n),a){if((l=t.length)!==n.length)return!1;for(;l--;)if(!e(t[l],n[l],r,i))return!1}else{var f,h=S.keys(t);if(l=h.length,S.keys(n).length!==l)return!1;for(;l--;)if(f=h[l],!S.has(n,f)||!e(t[f],n[f],r,i))return!1}return r.pop(),i.pop(),!0};S.isEqual=function(e,t){return I(e,t)},S.isEmpty=function(e){return null==e||(N(e)&&(S.isArray(e)||S.isString(e)||S.isArguments(e))?0===e.length:0===S.keys(e).length)},S.isElement=function(e){return!(!e||1!==e.nodeType)},S.isArray=m||function(e){return\"[object Array]\"===y.call(e)},S.isObject=function(e){var t=void 0===e?\"undefined\":o(e);return\"function\"===t||\"object\"===t&&!!e},S.each([\"Arguments\",\"Function\",\"String\",\"Number\",\"Date\",\"RegExp\",\"Error\"],function(e){S[\"is\"+e]=function(t){return y.call(t)===\"[object \"+e+\"]\"}}),S.isArguments(arguments)||(S.isArguments=function(e){return S.has(e,\"callee\")}),\"function\"!=typeof/./&&\"object\"!=(\"undefined\"==typeof Int8Array?\"undefined\":o(Int8Array))&&(S.isFunction=function(e){return\"function\"==typeof e||!1}),S.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},S.isNaN=function(e){return S.isNumber(e)&&e!==+e},S.isBoolean=function(e){return!0===e||!1===e||\"[object Boolean]\"===y.call(e)},S.isNull=function(e){return null===e},S.isUndefined=function(e){return void 0===e},S.has=function(e,t){return null!=e&&g.call(e,t)},S.noConflict=function(){return c._=l,this},S.identity=function(e){return e},S.constant=function(e){return function(){return e}},S.noop=function(){},S.property=k,S.propertyOf=function(e){return null==e?function(){}:function(t){return e[t]}},S.matcher=S.matches=function(e){return e=S.extendOwn({},e),function(t){return S.isMatch(t,e)}},S.times=function(e,t,n){var r=Array(Math.max(0,e));t=T(t,n,1);for(var i=0;i<e;i++)r[i]=t(i);return r},S.random=function(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))},S.now=Date.now||function(){return(new Date).getTime()};var F={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\",\"`\":\"&#x60;\"},P=S.invert(F),$=function(e){var t=function(t){return e[t]},n=\"(?:\"+S.keys(e).join(\"|\")+\")\",r=RegExp(n),i=RegExp(n,\"g\");return function(e){return e=null==e?\"\":\"\"+e,r.test(e)?e.replace(i,t):e}};S.escape=$(F),S.unescape=$(P),S.result=function(e,t,n){var r=null==e?void 0:e[t];return void 0===r&&(r=n),S.isFunction(r)?r.call(e):r};var H=0;S.uniqueId=function(e){var t=++H+\"\";return e?e+t:t},S.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var W=/(.)^/,B={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},V=/\\\\|'|\\r|\\n|\\u2028|\\u2029/g,U=function(e){return\"\\\\\"+B[e]};S.template=function(e,t,n){!t&&n&&(t=n),t=S.defaults({},t,S.templateSettings);var r=RegExp([(t.escape||W).source,(t.interpolate||W).source,(t.evaluate||W).source].join(\"|\")+\"|$\",\"g\"),i=0,o=\"__p+='\";e.replace(r,function(t,n,r,s,a){return o+=e.slice(i,a).replace(V,U),i=a+t.length,n?o+=\"'+\\n((__t=(\"+n+\"))==null?'':_.escape(__t))+\\n'\":r?o+=\"'+\\n((__t=(\"+r+\"))==null?'':__t)+\\n'\":s&&(o+=\"';\\n\"+s+\"\\n__p+='\"),t}),o+=\"';\\n\",t.variable||(o=\"with(obj||{}){\\n\"+o+\"}\\n\"),o=\"var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\\n\"+o+\"return __p;\\n\";try{var s=new Function(t.variable||\"obj\",\"_\",o)}catch(e){throw e.source=o,e}var a=function(e){return s.call(this,e,S)};return a.source=\"function(\"+(t.variable||\"obj\")+\"){\\n\"+o+\"}\",a},S.chain=function(e){var t=S(e);return t._chain=!0,t};var z=function(e,t){return e._chain?S(t).chain():t};S.mixin=function(e){S.each(S.functions(e),function(t){var n=S[t]=e[t];S.prototype[t]=function(){var e=[this._wrapped];return p.apply(e,arguments),z(this,n.apply(S,e))}})},S.mixin(S),S.each([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=f[e];S.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),\"shift\"!==e&&\"splice\"!==e||0!==n.length||delete n[0],z(this,n)}}),S.each([\"concat\",\"join\",\"slice\"],function(e){var t=f[e];S.prototype[e]=function(){return z(this,t.apply(this._wrapped,arguments))}}),S.prototype.value=function(){return this._wrapped},S.prototype.valueOf=S.prototype.toJSON=S.prototype.value,S.prototype.toString=function(){return\"\"+this._wrapped},r=[],void 0!==(i=function(){return S}.apply(t,r))&&(e.exports=i)}).call(void 0)},function(e,t,n){\"use strict\";(function(e){var n,r,i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n!function(t,n){\"object\"===i(e)&&\"object\"===i(e.exports)?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(t)}(\"undefined\"!=typeof window?window:void 0,function(o,s){function a(e){var t=!!e&&\"length\"in e&&e.length,n=ce.type(e);return\"function\"!==n&&!ce.isWindow(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function u(e,t,n){if(ce.isFunction(t))return ce.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return ce.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(be.test(t))return ce.filter(t,e,n);t=ce.filter(t,e)}return ce.grep(e,function(e){return ie.call(t,e)>-1!==n})}function c(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function l(e){var t={};return ce.each(e.match(Te)||[],function(e,n){t[n]=!0}),t}function f(){ee.removeEventListener(\"DOMContentLoaded\",f),o.removeEventListener(\"load\",f),ce.ready()}function h(){this.expando=ce.expando+h.uid++}function d(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Ne,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===n||\"false\"!==n&&(\"null\"===n?null:+n+\"\"===n?+n:Oe.test(n)?ce.parseJSON(n):n)}catch(e){}je.set(e,t,n)}else n=void 0;return n}function p(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ce.css(e,t,\"\")},u=a(),c=n&&n[3]||(ce.cssNumber[t]?\"\":\"px\"),l=(ce.cssNumber[t]||\"px\"!==c&&+u)&&Me.exec(ce.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do{o=o||\".5\",l/=o,ce.style(e,t,l+c)}while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function v(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):void 0!==e.querySelectorAll?e.querySelectorAll(t||\"*\"):[];return void 0===t||t&&ce.nodeName(e,t)?ce.merge([e],n):n}function y(e,t){for(var n=0,r=e.length;n<r;n++)ke.set(e[n],\"globalEval\",!t||ke.get(t[n],\"globalEval\"))}function g(e,t,n,r,i){for(var o,s,a,u,c,l,f=t.createDocumentFragment(),h=[],d=0,p=e.length;d<p;d++)if((o=e[d])||0===o)if(\"object\"===ce.type(o))ce.merge(h,o.nodeType?[o]:o);else if($e.test(o)){for(s=s||f.appendChild(t.createElement(\"div\")),a=(Ie.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=Pe[a]||Pe._default,s.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],l=u[0];l--;)s=s.lastChild;ce.merge(h,s.childNodes),s=f.firstChild,s.textContent=\"\"}else h.push(t.createTextNode(o));for(f.textContent=\"\",d=0;o=h[d++];)if(r&&ce.inArray(o,r)>-1)i&&i.push(o);else if(c=ce.contains(o.ownerDocument,o),s=v(f.appendChild(o),\"script\"),c&&y(s),n)for(l=0;o=s[l++];)Fe.test(o.type||\"\")&&n.push(o);return f}function m(){return!0}function b(){return!1}function w(){try{return ee.activeElement}catch(e){}}function x(e,t,n,r,o,s){var a,u;if(\"object\"===(void 0===t?\"undefined\":i(t))){\"string\"!=typeof n&&(r=r||n,n=void 0);for(u in t)x(e,u,n,r,t[u],s);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&(\"string\"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=b;else if(!o)return e;return 1===s&&(a=o,o=function(e){return ce().off(e),a.apply(this,arguments)},o.guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,o,r,n)})}function E(e,t){return ce.nodeName(e,\"table\")&&ce.nodeName(11!==t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function S(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function T(e){var t=Xe.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function _(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(ke.hasData(e)&&(o=ke.access(e),s=ke.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n<r;n++)ce.event.add(t,i,c[i][n])}je.hasData(e)&&(a=je.access(e),u=ce.extend({},a),je.set(t,u))}}function A(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&qe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function C(e,t,n,r){t=ne.apply([],t);var i,o,s,a,u,c,l=0,f=e.length,h=f-1,d=t[0],p=ce.isFunction(d);if(p||f>1&&\"string\"==typeof d&&!ue.checkClone&&ze.test(d))return e.each(function(i){var o=e.eq(i);p&&(t[0]=d.call(this,i,o.html())),C(o,t,n,r)});if(f&&(i=g(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=ce.map(v(i,\"script\"),S),a=s.length;l<f;l++)u=i,l!==h&&(u=ce.clone(u,!0,!0),a&&ce.merge(s,v(u,\"script\"))),n.call(e[l],u,l);if(a)for(c=s[s.length-1].ownerDocument,ce.map(s,T),l=0;l<a;l++)u=s[l],Fe.test(u.type||\"\")&&!ke.access(u,\"globalEval\")&&ce.contains(c,u)&&(u.src?ce._evalUrl&&ce._evalUrl(u.src):ce.globalEval(u.textContent.replace(Ge,\"\")))}return e}function k(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(v(r)),r.parentNode&&(n&&ce.contains(r.ownerDocument,r)&&y(v(r,\"script\")),r.parentNode.removeChild(r));return e}function j(e,t){var n=ce(t.createElement(e)).appendTo(t.body),r=ce.css(n[0],\"display\");return n.detach(),r}function O(e){var t=ee,n=Ye[e];return n||(n=j(e,t),\"none\"!==n&&n||(Je=(Je||ce(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(t.documentElement),t=Je[0].contentDocument,t.write(),t.close(),n=j(e,t),Je.detach()),Ye[e]=n),n}function N(e,t,n){var r,i,o,s,a=e.style;return n=n||Ze(e),s=n?n.getPropertyValue(t)||n[t]:void 0,\"\"!==s&&void 0!==s||ce.contains(e.ownerDocument,e)||(s=ce.style(e,t)),n&&!ue.pixelMarginRight()&&Ke.test(s)&&Qe.test(t)&&(r=a.width,i=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=r,a.minWidth=i,a.maxWidth=o),void 0!==s?s+\"\":s}function R(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function M(e){if(e in st)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=ot.length;n--;)if((e=ot[n]+t)in st)return e}function D(e,t,n){var r=Me.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function L(e,t,n,r,i){for(var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,s=0;o<4;o+=2)\"margin\"===n&&(s+=ce.css(e,n+De[o],!0,i)),r?(\"content\"===n&&(s-=ce.css(e,\"padding\"+De[o],!0,i)),\"margin\"!==n&&(s-=ce.css(e,\"border\"+De[o]+\"Width\",!0,i))):(s+=ce.css(e,\"padding\"+De[o],!0,i),\"padding\"!==n&&(s+=ce.css(e,\"border\"+De[o]+\"Width\",!0,i)));return s}function q(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=Ze(e),s=\"border-box\"===ce.css(e,\"boxSizing\",!1,o);if(i<=0||null==i){if(i=N(e,t,o),(i<0||null==i)&&(i=e.style[t]),Ke.test(i))return i;r=s&&(ue.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+L(e,t,n||(s?\"border\":\"content\"),r,o)+\"px\"}function I(e,t){for(var n,r,i,o=[],s=0,a=e.length;s<a;s++)r=e[s],r.style&&(o[s]=ke.get(r,\"olddisplay\"),n=r.style.display,t?(o[s]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&Le(r)&&(o[s]=ke.access(r,\"olddisplay\",O(r.nodeName)))):(i=Le(r),\"none\"===n&&i||ke.set(r,\"olddisplay\",i?n:ce.css(r,\"display\"))));for(s=0;s<a;s++)r=e[s],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[s]||\"\":\"none\"));return e}function F(e,t,n,r,i){return new F.prototype.init(e,t,n,r,i)}function P(){return o.setTimeout(function(){at=void 0}),at=ce.now()}function $(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)n=De[r],i[\"margin\"+n]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function H(e,t,n){for(var r,i=(V.tweeners[t]||[]).concat(V.tweeners[\"*\"]),o=0,s=i.length;o<s;o++)if(r=i[o].call(n,t,e))return r}function W(e,t,n){var r,i,o,s,a,u,c,l=this,f={},h=e.style,d=e.nodeType&&Le(e),p=ke.get(e,\"fxshow\");n.queue||(a=ce._queueHooks(e,\"fx\"),null==a.unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,l.always(function(){l.always(function(){a.unqueued--,ce.queue(e,\"fx\").length||a.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],c=ce.css(e,\"display\"),\"inline\"===(\"none\"===c?ke.get(e,\"olddisplay\")||O(e.nodeName):c)&&\"none\"===ce.css(e,\"float\")&&(h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",l.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],ct.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(d?\"hide\":\"show\")){if(\"show\"!==i||!p||void 0===p[r])continue;d=!0}f[r]=p&&p[r]||ce.style(e,r)}else c=void 0;if(ce.isEmptyObject(f))\"inline\"===(\"none\"===c?O(e.nodeName):c)&&(h.display=c);else{p?\"hidden\"in p&&(d=p.hidden):p=ke.access(e,\"fxshow\",{}),o&&(p.hidden=!d),d?ce(e).show():l.done(function(){ce(e).hide()}),l.done(function(){var t;ke.remove(e,\"fxshow\");for(t in f)ce.style(e,t,f[t])});for(r in f)s=H(d?p[r]:0,r,l),r in p||(p[r]=s.start,d&&(s.end=s.start,s.start=\"width\"===r||\"height\"===r?1:0))}}function B(e,t){var n,r,i,o,s;for(n in e)if(r=ce.camelCase(n),i=t[r],o=e[n],ce.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(s=ce.cssHooks[r])&&\"expand\"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function V(e,t,n){var r,i,o=0,s=V.prefilters.length,a=ce.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=at||P(),n=Math.max(0,c.startTime+c.duration-t),r=n/c.duration||0,o=1-r,s=0,u=c.tweens.length;s<u;s++)c.tweens[s].run(o);return a.notifyWith(e,[c,o,n]),o<1&&u?n:(a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:ce.extend({},t),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},n),originalProperties:t,originalOptions:n,startTime:at||P(),duration:n.duration,tweens:[],createTween:function(t,n){var r=ce.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)c.tweens[n].run(1);return t?(a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c,t])):a.rejectWith(e,[c,t]),this}}),l=c.props;for(B(l,c.opts.specialEasing);o<s;o++)if(r=V.prefilters[o].call(c,e,l,c.opts))return ce.isFunction(r.stop)&&(ce._queueHooks(c.elem,c.opts.queue).stop=ce.proxy(r.stop,r)),r;return ce.map(l,H,c),ce.isFunction(c.opts.start)&&c.opts.start.call(e,c),ce.fx.timer(ce.extend(u,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function U(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function z(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(Te)||[];if(ce.isFunction(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function X(e,t,n,r){function i(a){var u;return o[a]=!0,ce.each(e[a]||[],function(e,a){var c=a(t,n,r);return\"string\"!=typeof c||s||o[c]?s?!(u=c):void 0:(t.dataTypes.unshift(c),i(c),!1)}),u}var o={},s=e===jt;return i(t.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function G(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}function J(e,t,n){for(var r,i,o,s,a=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}s||(s=i)}o=o||s}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Y(e,t,n,r){var i,o,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(o=l.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=l.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(s=c[u+\" \"+o]||c[\"* \"+o]))for(i in c)if(a=i.split(\" \"),a[1]===o&&(s=c[u+\" \"+a[0]]||c[\"* \"+a[0]])){!0===s?s=c[i]:!0!==c[i]&&(o=a[0],l.unshift(a[1]));break}if(!0!==s)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:\"parsererror\",error:s?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}function Q(e,t,n,r){var o;if(ce.isArray(t))ce.each(t,function(t,o){n||Mt.test(e)?r(e,o):Q(e+\"[\"+(\"object\"===(void 0===o?\"undefined\":i(o))&&null!=o?t:\"\")+\"]\",o,n,r)});else if(n||\"object\"!==ce.type(t))r(e,t);else for(o in t)Q(e+\"[\"+o+\"]\",t[o],n,r)}function K(e){return ce.isWindow(e)?e:9===e.nodeType&&e.defaultView}var Z=[],ee=o.document,te=Z.slice,ne=Z.concat,re=Z.push,ie=Z.indexOf,oe={},se=oe.toString,ae=oe.hasOwnProperty,ue={},ce=function e(t,n){return new e.fn.init(t,n)},le=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,fe=/^-ms-/,he=/-([\\da-z])/gi,de=function(e,t){return t.toUpperCase()};ce.fn=ce.prototype={jquery:\"2.2.4\",constructor:ce,selector:\"\",length:0,toArray:function(){return te.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:te.call(this)},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return ce.each(this,e)},map:function(e){return this.pushStack(ce.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(te.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:re,sort:Z.sort,splice:Z.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,o,s,a=arguments[0]||{},u=1,c=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[u]||{},u++),\"object\"===(void 0===a?\"undefined\":i(a))||ce.isFunction(a)||(a={}),u===c&&(a=this,u--);u<c;u++)if(null!=(e=arguments[u]))for(t in e)n=a[t],r=e[t],a!==r&&(l&&r&&(ce.isPlainObject(r)||(o=ce.isArray(r)))?(o?(o=!1,s=n&&ce.isArray(n)?n:[]):s=n&&ce.isPlainObject(n)?n:{},a[t]=ce.extend(l,s,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:\"jQuery\"+(\"2.2.4\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return\"function\"===ce.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=e&&e.toString();return!ce.isArray(e)&&t-parseFloat(t)+1>=0},isPlainObject:function(e){var t;if(\"object\"!==ce.type(e)||e.nodeType||ce.isWindow(e))return!1;if(e.constructor&&!ae.call(e,\"constructor\")&&!ae.call(e.constructor.prototype||{},\"isPrototypeOf\"))return!1;for(t in e);return void 0===t||ae.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+\"\":\"object\"===(void 0===e?\"undefined\":i(e))||\"function\"==typeof e?oe[se.call(e)]||\"object\":void 0===e?\"undefined\":i(e)},globalEval:function(e){var t,n=eval;(e=ce.trim(e))&&(1===e.indexOf(\"use strict\")?(t=ee.createElement(\"script\"),t.text=e,ee.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(fe,\"ms-\").replace(he,de)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,r=0;if(a(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(le,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(a(Object(e))?ce.merge(n,\"string\"==typeof e?[e]:e):re.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:ie.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,s=!n;i<o;i++)!t(e[i],i)!==s&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,s=[];if(a(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return ne.apply([],s)},guid:1,proxy:function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),ce.isFunction(e))return r=te.call(arguments,2),i=function(){return e.apply(t||this,r.concat(te.call(arguments)))},i.guid=e.guid=e.guid||ce.guid++,i},now:Date.now,support:ue}),\"function\"==typeof Symbol&&(ce.fn[Symbol.iterator]=Z[Symbol.iterator]),ce.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){oe[\"[object \"+t+\"]\"]=t.toLowerCase()});var pe=/*!\n  * Sizzle CSS Selector Engine v2.2.1\n  * http://sizzlejs.com/\n  *\n  * Copyright jQuery Foundation and other contributors\n  * Released under the MIT license\n  * http://jquery.org/license\n  *\n  * Date: 2015-10-17\n  */\nfunction(e){function t(e,t,n,r){var i,o,s,a,c,f,h,d,p=t&&t.ownerDocument,v=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==v&&9!==v&&11!==v)return n;if(!r&&((t?t.ownerDocument||t:F)!==O&&j(t),t=t||O,R)){if(11!==v&&(f=ve.exec(e)))if(i=f[1]){if(9===v){if(!(s=t.getElementById(i)))return n;if(s.id===i)return n.push(s),n}else if(p&&(s=p.getElementById(i))&&q(t,s)&&s.id===i)return n.push(s),n}else{if(f[2])return Y.apply(n,t.getElementsByTagName(e)),n;if((i=f[3])&&b.getElementsByClassName&&t.getElementsByClassName)return Y.apply(n,t.getElementsByClassName(i)),n}if(b.qsa&&!B[e+\" \"]&&(!M||!M.test(e))){if(1!==v)p=t,d=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((a=t.getAttribute(\"id\"))?a=a.replace(ge,\"\\\\$&\"):t.setAttribute(\"id\",a=I),h=S(e),o=h.length,c=le.test(a)?\"#\"+a:\"[id='\"+a+\"']\";o--;)h[o]=c+\" \"+l(h[o]);d=h.join(\",\"),p=ye.test(e)&&u(t.parentNode)||t}if(d)try{return Y.apply(n,p.querySelectorAll(d)),n}catch(e){}finally{a===I&&t.removeAttribute(\"id\")}}}return _(e.replace(oe,\"$1\"),t,n,r)}function n(){function e(n,r){return t.push(n+\" \")>w.cacheLength&&delete e[t.shift()],e[n+\" \"]=r}var t=[];return e}function r(e){return e[I]=!0,e}function i(e){var t=O.createElement(\"div\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split(\"|\"),r=n.length;r--;)w.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||U)-(~e.sourceIndex||U);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function u(e){return e&&void 0!==e.getElementsByTagName&&e}function c(){}function l(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function f(e,t,n){var r=t.dir,i=n&&\"parentNode\"===r,o=$++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,s){var a,u,c,l=[P,o];if(s){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,s))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(c=t[I]||(t[I]={}),u=c[t.uniqueID]||(c[t.uniqueID]={}),(a=u[r])&&a[0]===P&&a[1]===o)return l[2]=a[2];if(u[r]=l,l[2]=e(t,n,s))return!0}}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function d(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}function p(e,t,n,r,i){for(var o,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(o=e[a])&&(n&&!n(o,r,i)||(s.push(o),c&&t.push(a)));return s}function v(e,t,n,i,o,s){return i&&!i[I]&&(i=v(i)),o&&!o[I]&&(o=v(o,s)),r(function(r,s,a,u){var c,l,f,h=[],v=[],y=s.length,g=r||d(t||\"*\",a.nodeType?[a]:a,[]),m=!e||!r&&t?g:p(g,h,e,a,u),b=n?o||(r?e:y||i)?[]:s:m;if(n&&n(m,b,a,u),i)for(c=p(b,v),i(c,[],a,u),l=c.length;l--;)(f=c[l])&&(b[v[l]]=!(m[v[l]]=f));if(r){if(o||e){if(o){for(c=[],l=b.length;l--;)(f=b[l])&&c.push(m[l]=f);o(null,b=[],c,u)}for(l=b.length;l--;)(f=b[l])&&(c=o?K(r,f):h[l])>-1&&(r[c]=!(s[c]=f))}}else b=p(b===s?b.splice(y,b.length):b),o?o(null,s,b,u):Y.apply(s,b)})}function y(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],s=o||w.relative[\" \"],a=o?1:0,u=f(function(e){return e===t},s,!0),c=f(function(e){return K(t,e)>-1},s,!0),d=[function(e,n,r){var i=!o&&(r||n!==A)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a<i;a++)if(n=w.relative[e[a].type])d=[f(h(d),n)];else{if(n=w.filter[e[a].type].apply(null,e[a].matches),n[I]){for(r=++a;r<i&&!w.relative[e[r].type];r++);return v(a>1&&h(d),a>1&&l(e.slice(0,a-1).concat({value:\" \"===e[a-2].type?\"*\":\"\"})).replace(oe,\"$1\"),n,a<r&&y(e.slice(a,r)),r<i&&y(e=e.slice(r)),r<i&&l(e))}d.push(n)}return h(d)}function g(e,n){var i=n.length>0,o=e.length>0,s=function(r,s,a,u,c){var l,f,h,d=0,v=\"0\",y=r&&[],g=[],m=A,b=r||o&&w.find.TAG(\"*\",c),x=P+=null==m?1:Math.random()||.1,E=b.length;for(c&&(A=s===O||s||c);v!==E&&null!=(l=b[v]);v++){if(o&&l){for(f=0,s||l.ownerDocument===O||(j(l),a=!R);h=e[f++];)if(h(l,s||O,a)){u.push(l);break}c&&(P=x)}i&&((l=!h&&l)&&d--,r&&y.push(l))}if(d+=v,i&&v!==d){for(f=0;h=n[f++];)h(y,g,s,a);if(r){if(d>0)for(;v--;)y[v]||g[v]||(g[v]=G.call(u));g=p(g)}Y.apply(u,g),c&&!r&&g.length>0&&d+n.length>1&&t.uniqueSort(u)}return c&&(P=x,A=m),y};return i?r(s):s}var m,b,w,x,E,S,T,_,A,C,k,j,O,N,R,M,D,L,q,I=\"sizzle\"+1*new Date,F=e.document,P=0,$=0,H=n(),W=n(),B=n(),V=function(e,t){return e===t&&(k=!0),0},U=1<<31,z={}.hasOwnProperty,X=[],G=X.pop,J=X.push,Y=X.push,Q=X.slice,K=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},Z=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ee=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",te=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ne=\"\\\\[\"+ee+\"*(\"+te+\")(?:\"+ee+\"*([*^$|!~]?=)\"+ee+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+te+\"))|)\"+ee+\"*\\\\]\",re=\":(\"+te+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ne+\")*)|.*)\\\\)|)\",ie=new RegExp(ee+\"+\",\"g\"),oe=new RegExp(\"^\"+ee+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ee+\"+$\",\"g\"),se=new RegExp(\"^\"+ee+\"*,\"+ee+\"*\"),ae=new RegExp(\"^\"+ee+\"*([>+~]|\"+ee+\")\"+ee+\"*\"),ue=new RegExp(\"=\"+ee+\"*([^\\\\]'\\\"]*?)\"+ee+\"*\\\\]\",\"g\"),ce=new RegExp(re),le=new RegExp(\"^\"+te+\"$\"),fe={ID:new RegExp(\"^#(\"+te+\")\"),CLASS:new RegExp(\"^\\\\.(\"+te+\")\"),TAG:new RegExp(\"^(\"+te+\"|[*])\"),ATTR:new RegExp(\"^\"+ne),PSEUDO:new RegExp(\"^\"+re),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ee+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ee+\"*(?:([+-]|)\"+ee+\"*(\\\\d+)|))\"+ee+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+Z+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ee+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ee+\"*((?:-\\\\d)?\\\\d*)\"+ee+\"*\\\\)|)(?=[^-]|$)\",\"i\")},he=/^(?:input|select|textarea|button)$/i,de=/^h\\d$/i,pe=/^[^{]+\\{\\s*\\[native \\w/,ve=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ye=/[+~]/,ge=/'|\\\\/g,me=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ee+\"?|(\"+ee+\")|.)\",\"ig\"),be=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},we=function(){j()};try{Y.apply(X=Q.call(F.childNodes),F.childNodes),X[F.childNodes.length].nodeType}catch(e){Y={apply:X.length?function(e,t){J.apply(e,Q.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}b=t.support={},E=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},j=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:F;return r!==O&&9===r.nodeType&&r.documentElement?(O=r,N=O.documentElement,R=!E(O),(n=O.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",we,!1):n.attachEvent&&n.attachEvent(\"onunload\",we)),b.attributes=i(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),b.getElementsByTagName=i(function(e){return e.appendChild(O.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),b.getElementsByClassName=pe.test(O.getElementsByClassName),b.getById=i(function(e){return N.appendChild(e).id=I,!O.getElementsByName||!O.getElementsByName(I).length}),b.getById?(w.find.ID=function(e,t){if(void 0!==t.getElementById&&R){var n=t.getElementById(e);return n?[n]:[]}},w.filter.ID=function(e){var t=e.replace(me,be);return function(e){return e.getAttribute(\"id\")===t}}):(delete w.find.ID,w.filter.ID=function(e){var t=e.replace(me,be);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}}),w.find.TAG=b.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):b.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=b.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&R)return t.getElementsByClassName(e)},D=[],M=[],(b.qsa=pe.test(O.querySelectorAll))&&(i(function(e){N.appendChild(e).innerHTML=\"<a id='\"+I+\"'></a><select id='\"+I+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&M.push(\"[*^$]=\"+ee+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||M.push(\"\\\\[\"+ee+\"*(?:value|\"+Z+\")\"),e.querySelectorAll(\"[id~=\"+I+\"-]\").length||M.push(\"~=\"),e.querySelectorAll(\":checked\").length||M.push(\":checked\"),e.querySelectorAll(\"a#\"+I+\"+*\").length||M.push(\".#.+[+~]\")}),i(function(e){var t=O.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&M.push(\"name\"+ee+\"*[*^$|!~]?=\"),e.querySelectorAll(\":enabled\").length||M.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),M.push(\",.*:\")})),(b.matchesSelector=pe.test(L=N.matches||N.webkitMatchesSelector||N.mozMatchesSelector||N.oMatchesSelector||N.msMatchesSelector))&&i(function(e){b.disconnectedMatch=L.call(e,\"div\"),L.call(e,\"[s!='']:x\"),D.push(\"!=\",re)}),M=M.length&&new RegExp(M.join(\"|\")),D=D.length&&new RegExp(D.join(\"|\")),t=pe.test(N.compareDocumentPosition),q=t||pe.test(N.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return k=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!b.sortDetached&&t.compareDocumentPosition(e)===n?e===O||e.ownerDocument===F&&q(F,e)?-1:t===O||t.ownerDocument===F&&q(F,t)?1:C?K(C,e)-K(C,t):0:4&n?-1:1)}:function(e,t){if(e===t)return k=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===O?-1:t===O?1:i?-1:o?1:C?K(C,e)-K(C,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===F?-1:u[r]===F?1:0},O):O},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==O&&j(e),n=n.replace(ue,\"='$1']\"),b.matchesSelector&&R&&!B[n+\" \"]&&(!D||!D.test(n))&&(!M||!M.test(n)))try{var r=L.call(e,n);if(r||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,O,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==O&&j(e),q(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==O&&j(e);var n=w.attrHandle[t.toLowerCase()],r=n&&z.call(w.attrHandle,t.toLowerCase())?n(e,t,!R):void 0;return void 0!==r?r:b.attributes||!R?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(k=!b.detectDuplicates,C=!b.sortStable&&e.slice(0),e.sort(V),k){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return C=null,e},x=t.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=x(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=x(t);return n},w=t.selectors={cacheLength:50,createPseudo:r,match:fe,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(me,be),e[3]=(e[3]||e[4]||e[5]||\"\").replace(me,be),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&ce.test(n)&&(t=S(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(me,be).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=H[e+\" \"];return t||(t=new RegExp(\"(^|\"+ee+\")\"+e+\"(\"+ee+\"|$)\"))&&H(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?\"!=\"===n:!n||(o+=\"\",\"=\"===n?o===r:\"!=\"===n?o!==r:\"^=\"===n?r&&0===o.indexOf(r):\"*=\"===n?r&&o.indexOf(r)>-1:\"$=\"===n?r&&o.slice(-r.length)===r:\"~=\"===n?(\" \"+o.replace(ie,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(o===r||o.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),s=\"last\"!==e.slice(-4),a=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,h,d,p,v=o!==s?\"nextSibling\":\"previousSibling\",y=t.parentNode,g=a&&t.nodeName.toLowerCase(),m=!u&&!a,b=!1;if(y){if(o){for(;v;){for(h=t;h=h[v];)if(a?h.nodeName.toLowerCase()===g:1===h.nodeType)return!1;p=v=\"only\"===e&&!p&&\"nextSibling\"}return!0}if(p=[s?y.firstChild:y.lastChild],s&&m){for(h=y,f=h[I]||(h[I]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),c=l[e]||[],d=c[0]===P&&c[1],b=d&&c[2],h=d&&y.childNodes[d];h=++d&&h&&h[v]||(b=d=0)||p.pop();)if(1===h.nodeType&&++b&&h===t){l[e]=[P,d,b];break}}else if(m&&(h=t,f=h[I]||(h[I]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),c=l[e]||[],d=c[0]===P&&c[1],b=d),!1===b)for(;(h=++d&&h&&h[v]||(b=d=0)||p.pop())&&((a?h.nodeName.toLowerCase()!==g:1!==h.nodeType)||!++b||(m&&(f=h[I]||(h[I]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),l[e]=[P,b]),h!==t)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,n){var i,o=w.pseudos[e]||w.setFilters[e.toLowerCase()]||t.error(\"unsupported pseudo: \"+e);return o[I]?o(n):o.length>1?(i=[e,e,\"\",n],w.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=K(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=T(e.replace(oe,\"$1\"));return i[I]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(me,be),function(t){return(t.textContent||t.innerText||x(t)).indexOf(e)>-1}}),lang:r(function(e){return le.test(e||\"\")||t.error(\"unsupported lang: \"+e),e=e.replace(me,be).toLowerCase(),function(t){var n;do{if(n=R?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n=n.toLowerCase())===e||0===n.indexOf(e+\"-\")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===N},focus:function(e){return e===O.activeElement&&(!O.hasFocus||O.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return!1===e.disabled},disabled:function(e){return!0===e.disabled},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return de.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:a(function(){return[0]}),last:a(function(e,t){return[t-1]}),eq:a(function(e,t,n){return[n<0?n+t:n]}),even:a(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:a(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:a(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:a(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},w.pseudos.nth=w.pseudos.eq;for(m in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[m]=function(e){return function(t){return\"input\"===t.nodeName.toLowerCase()&&t.type===e}}(m);for(m in{submit:!0,reset:!0})w.pseudos[m]=function(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}(m);return c.prototype=w.filters=w.pseudos,w.setFilters=new c,S=t.tokenize=function(e,n){var r,i,o,s,a,u,c,l=W[e+\" \"];if(l)return n?0:l.slice(0);for(a=e,u=[],c=w.preFilter;a;){r&&!(i=se.exec(a))||(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),r=!1,(i=ae.exec(a))&&(r=i.shift(),o.push({value:r,type:i[0].replace(oe,\" \")}),a=a.slice(r.length));for(s in w.filter)!(i=fe[s].exec(a))||c[s]&&!(i=c[s](i))||(r=i.shift(),o.push({value:r,type:s,matches:i}),a=a.slice(r.length));if(!r)break}return n?a.length:a?t.error(e):W(e,u).slice(0)},T=t.compile=function(e,t){var n,r=[],i=[],o=B[e+\" \"];if(!o){for(t||(t=S(e)),n=t.length;n--;)o=y(t[n]),o[I]?r.push(o):i.push(o);o=B(e,g(i,r)),o.selector=e}return o},_=t.select=function(e,t,n,r){var i,o,s,a,c,f=\"function\"==typeof e&&e,h=!r&&S(e=f.selector||e);if(n=n||[],1===h.length){if(o=h[0]=h[0].slice(0),o.length>2&&\"ID\"===(s=o[0]).type&&b.getById&&9===t.nodeType&&R&&w.relative[o[1].type]){if(!(t=(w.find.ID(s.matches[0].replace(me,be),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=fe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!w.relative[a=s.type]);)if((c=w.find[a])&&(r=c(s.matches[0].replace(me,be),ye.test(o[0].type)&&u(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&l(o)))return Y.apply(n,r),n;break}}return(f||T(e,h))(r,t,!R,n,!t||ye.test(e)&&u(t.parentNode)||t),n},b.sortStable=I.split(\"\").sort(V).join(\"\")===I,b.detectDuplicates=!!k,j(),b.sortDetached=i(function(e){return 1&e.compareDocumentPosition(O.createElement(\"div\"))}),i(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||o(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),b.attributes&&i(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||o(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute(\"disabled\")})||o(Z,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(o);ce.find=pe,ce.expr=pe.selectors,ce.expr[\":\"]=ce.expr.pseudos,ce.uniqueSort=ce.unique=pe.uniqueSort,ce.text=pe.getText,ce.isXMLDoc=pe.isXML,ce.contains=pe.contains;var ve=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},ye=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},ge=ce.expr.match.needsContext,me=/^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/,be=/^.[^:#\\[\\.,]*$/;ce.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n=this.length,r=[],i=this;if(\"string\"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<n;t++)if(ce.contains(i[t],this))return!0}));for(t=0;t<n;t++)ce.find(e,i[t],r);return r=this.pushStack(n>1?ce.unique(r):r),r.selector=this.selector?this.selector+\" \"+e:e,r},filter:function(e){return this.pushStack(u(this,e||[],!1))},not:function(e){return this.pushStack(u(this,e||[],!0))},is:function(e){return!!u(this,\"string\"==typeof e&&ge.test(e)?ce(e):e||[],!1).length}});var we,xe=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||we,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:xe.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ee,!0)),me.test(r[1])&&ce.isPlainObject(t))for(r in t)ce.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ee.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=ee,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):ce.isFunction(e)?void 0!==n.ready?n.ready(e):e(ce):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),ce.makeArray(e,this))}).prototype=ce.fn,we=ce(ee);var Ee=/^(?:parents|prev(?:Until|All))/,Se={children:!0,contents:!0,next:!0,prev:!0};ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){for(var n,r=0,i=this.length,o=[],s=ge.test(e)||\"string\"!=typeof e?ce(e,t||this.context):0;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ce.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?ie.call(ce(e),this[0]):ie.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return ve(e,\"parentNode\")},parentsUntil:function(e,t,n){return ve(e,\"parentNode\",n)},next:function(e){return c(e,\"nextSibling\")},prev:function(e){return c(e,\"previousSibling\")},nextAll:function(e){return ve(e,\"nextSibling\")},prevAll:function(e){return ve(e,\"previousSibling\")},nextUntil:function(e,t,n){return ve(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return ve(e,\"previousSibling\",n)},siblings:function(e){return ye((e.parentNode||{}).firstChild,e)},children:function(e){return ye(e.firstChild)},contents:function(e){return e.contentDocument||ce.merge([],e.childNodes)}},function(e,t){ce.fn[e]=function(n,r){var i=ce.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=ce.filter(r,i)),this.length>1&&(Se[e]||ce.uniqueSort(i),Ee.test(e)&&i.reverse()),this.pushStack(i)}});var Te=/\\S+/g;ce.Callbacks=function(e){e=\"string\"==typeof e?l(e):ce.extend({},e);var t,n,r,i,o=[],s=[],a=-1,u=function(){for(i=e.once,r=t=!0;s.length;a=-1)for(n=s.shift();++a<o.length;)!1===o[a].apply(n[0],n[1])&&e.stopOnFalse&&(a=o.length,n=!1);e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},c={add:function(){return o&&(n&&!t&&(a=o.length-1,s.push(n)),function t(n){ce.each(n,function(n,r){ce.isFunction(r)?e.unique&&c.has(r)||o.push(r):r&&r.length&&\"string\"!==ce.type(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return ce.each(arguments,function(e,t){for(var n;(n=ce.inArray(t,o,n))>-1;)o.splice(n,1),n<=a&&a--}),this},has:function(e){return e?ce.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},ce.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",ce.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",ce.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",ce.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return ce.Deferred(function(n){ce.each(t,function(t,o){var s=ce.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&ce.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?ce.extend(e,r):r}},i={};return r.pipe=r.then,ce.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=te.call(arguments),s=o.length,a=1!==s||e&&ce.isFunction(e.promise)?s:0,u=1===a?e:ce.Deferred(),c=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?te.call(arguments):i,r===t?u.notifyWith(n,r):--a||u.resolveWith(n,r)}};if(s>1)for(t=new Array(s),n=new Array(s),r=new Array(s);i<s;i++)o[i]&&ce.isFunction(o[i].promise)?o[i].promise().progress(c(i,n,t)).done(c(i,r,o)).fail(u.reject):--a;return a||u.resolveWith(r,o),u.promise()}});var _e;ce.fn.ready=function(e){return ce.ready.promise().done(e),this},ce.extend({isReady:!1,readyWait:1,holdReady:function(e){e?ce.readyWait++:ce.ready(!0)},ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0,!0!==e&&--ce.readyWait>0||(_e.resolveWith(ee,[ce]),ce.fn.triggerHandler&&(ce(ee).triggerHandler(\"ready\"),ce(ee).off(\"ready\"))))}}),ce.ready.promise=function(e){return _e||(_e=ce.Deferred(),\"complete\"===ee.readyState||\"loading\"!==ee.readyState&&!ee.documentElement.doScroll?o.setTimeout(ce.ready):(ee.addEventListener(\"DOMContentLoaded\",f),o.addEventListener(\"load\",f))),_e.promise(e)},ce.ready.promise();var Ae=function e(t,n,r,i,o,s,a){var u=0,c=t.length,l=null==r;if(\"object\"===ce.type(r)){o=!0;for(u in r)e(t,n,u,r[u],!0,s,a)}else if(void 0!==i&&(o=!0,ce.isFunction(i)||(a=!0),l&&(a?(n.call(t,i),n=null):(l=n,n=function(e,t,n){return l.call(ce(e),n)})),n))for(;u<c;u++)n(t[u],r,a?i:i.call(t[u],u,n(t[u],r)));return o?t:l?n.call(t):c?n(t[0],r):s},Ce=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};h.uid=1,h.prototype={register:function(e,t){var n=t||{};return e.nodeType?e[this.expando]=n:Object.defineProperty(e,this.expando,{value:n,writable:!0,configurable:!0}),e[this.expando]},cache:function(e){if(!Ce(e))return{};var t=e[this.expando];return t||(t={},Ce(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[t]=n;else for(r in t)i[r]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][t]},access:function(e,t,n){var r;return void 0===t||t&&\"string\"==typeof t&&void 0===n?(r=this.get(e,t),void 0!==r?r:this.get(e,ce.camelCase(t))):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r,i,o=e[this.expando];if(void 0!==o){if(void 0===t)this.register(e);else{ce.isArray(t)?r=t.concat(t.map(ce.camelCase)):(i=ce.camelCase(t),t in o?r=[t,i]:(r=i,r=r in o?[r]:r.match(Te)||[])),n=r.length;for(;n--;)delete o[r[n]]}(void 0===t||ce.isEmptyObject(o))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var ke=new h,je=new h,Oe=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Ne=/[A-Z]/g;ce.extend({hasData:function(e){return je.hasData(e)||ke.hasData(e)},data:function(e,t,n){return je.access(e,t,n)},removeData:function(e,t){je.remove(e,t)},_data:function(e,t,n){return ke.access(e,t,n)},_removeData:function(e,t){ke.remove(e,t)}}),ce.fn.extend({data:function(e,t){var n,r,o,s=this[0],a=s&&s.attributes;if(void 0===e){if(this.length&&(o=je.get(s),1===s.nodeType&&!ke.get(s,\"hasDataAttrs\"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf(\"data-\")&&(r=ce.camelCase(r.slice(5)),d(s,r,o[r])));ke.set(s,\"hasDataAttrs\",!0)}return o}return\"object\"===(void 0===e?\"undefined\":i(e))?this.each(function(){je.set(this,e)}):Ae(this,function(t){var n,r;if(s&&void 0===t){if(void 0!==(n=je.get(s,e)||je.get(s,e.replace(Ne,\"-$&\").toLowerCase())))return n;if(r=ce.camelCase(e),void 0!==(n=je.get(s,r)))return n;if(void 0!==(n=d(s,r,void 0)))return n}else r=ce.camelCase(e),this.each(function(){var n=je.get(this,r);je.set(this,r,t),e.indexOf(\"-\")>-1&&void 0!==n&&je.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){je.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=ke.get(e,t),n&&(!r||ce.isArray(n)?r=ke.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t),s=function(){ce.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return ke.get(e,n)||ke.access(e,n,{empty:ce.Callbacks(\"once memory\").add(function(){ke.remove(e,[t+\"queue\",n])})})}}),ce.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?ce.queue(this[0],e):void 0===t?this:this.each(function(){var n=ce.queue(this,e,t);ce._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&ce.dequeue(this,e)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";s--;)(n=ke.get(o[s],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var Re=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Me=new RegExp(\"^(?:([+-])=|)(\"+Re+\")([a-z%]*)$\",\"i\"),De=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Le=function(e,t){return e=t||e,\"none\"===ce.css(e,\"display\")||!ce.contains(e.ownerDocument,e)},qe=/^(?:checkbox|radio)$/i,Ie=/<([\\w:-]+)/,Fe=/^$|\\/(?:java|ecma)script/i,Pe={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};Pe.optgroup=Pe.option,Pe.tbody=Pe.tfoot=Pe.colgroup=Pe.caption=Pe.thead,Pe.th=Pe.td;var $e=/<|&#?\\w+;/;!function(){var e=ee.createDocumentFragment(),t=e.appendChild(ee.createElement(\"div\")),n=ee.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),ue.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"<textarea>x</textarea>\",ue.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var He=/^key/,We=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Be=/^([^.]*)(?:\\.(.+)|)/;ce.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,h,d,p,v,y=ke.get(e);if(y)for(n.handler&&(o=n,n=o.handler,i=o.selector),n.guid||(n.guid=ce.guid++),(u=y.events)||(u=y.events={}),(s=y.handle)||(s=y.handle=function(t){return void 0!==ce&&ce.event.triggered!==t.type?ce.event.dispatch.apply(e,arguments):void 0}),t=(t||\"\").match(Te)||[\"\"],c=t.length;c--;)a=Be.exec(t[c])||[],d=v=a[1],p=(a[2]||\"\").split(\".\").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},l=ce.extend({type:d,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:p.join(\".\")},o),(h=u[d])||(h=u[d]=[],h.delegateCount=0,f.setup&&!1!==f.setup.call(e,r,p,s)||e.addEventListener&&e.addEventListener(d,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,l):h.push(l),ce.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,h,d,p,v,y=ke.hasData(e)&&ke.get(e);if(y&&(u=y.events)){for(t=(t||\"\").match(Te)||[\"\"],c=t.length;c--;)if(a=Be.exec(t[c])||[],d=v=a[1],p=(a[2]||\"\").split(\".\").sort(),d){for(f=ce.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,h=u[d]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=h.length;o--;)l=h[o],!i&&v!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&(\"**\"!==r||!l.selector)||(h.splice(o,1),l.selector&&h.delegateCount--,f.remove&&f.remove.call(e,l));s&&!h.length&&(f.teardown&&!1!==f.teardown.call(e,p,y.handle)||ce.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[c],n,r,!0);ce.isEmptyObject(u)&&ke.remove(e,\"handle events\")}},dispatch:function(e){e=ce.event.fix(e);var t,n,r,i,o,s=[],a=te.call(arguments),u=(ke.get(this,\"events\")||{})[e.type]||[],c=ce.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,e)){for(s=ce.event.handlers.call(this,e,u),t=0;(i=s[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a))&&!1===(e.result=r)&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(\"click\"!==e.type||isNaN(e.button)||e.button<1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&(!0!==u.disabled||\"click\"!==e.type)){for(r=[],n=0;n<a;n++)o=t[n],i=o.selector+\" \",void 0===r[i]&&(r[i]=o.needsContext?ce(i,this).index(u)>-1:ce.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return a<t.length&&s.push({elem:this,handlers:t.slice(a)}),s},props:\"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,t){var n,r,i,o=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||ee,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},fix:function(e){if(e[ce.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];for(s||(this.fixHooks[i]=s=We.test(i)?this.mouseHooks:He.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new ce.Event(o),t=r.length;t--;)n=r[t],e[n]=o[n];return e.target||(e.target=ee),3===e.target.nodeType&&(e.target=e.target.parentNode),s.filter?s.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==w()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===w()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&ce.nodeName(this,\"input\"))return this.click(),!1},_default:function(e){return ce.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?m:b):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||ce.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:b,isPropagationStopped:b,isImmediatePropagationStopped:b,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=m,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=m,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=m,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){ce.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||ce.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),ce.fn.extend({on:function(e,t,n,r){return x(this,e,t,n,r)},one:function(e,t,n,r){return x(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"===(void 0===e?\"undefined\":i(e))){for(o in e)this.off(o,t,e[o]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=b),this.each(function(){ce.event.remove(this,e,n,t)})}});var Ve=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,Ue=/<script|<style|<link/i,ze=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Xe=/^true\\/(.*)/,Ge=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;ce.extend({htmlPrefilter:function(e){return e.replace(Ve,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ce.contains(e.ownerDocument,e);if(!(ue.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(s=v(a),o=v(e),r=0,i=o.length;r<i;r++)A(o[r],s[r]);if(t)if(n)for(o=o||v(e),s=s||v(a),r=0,i=o.length;r<i;r++)_(o[r],s[r]);else _(e,a);return s=v(a,\"script\"),s.length>0&&y(s,!u&&v(e,\"script\")),a},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if(Ce(n)){if(t=n[ke.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[ke.expando]=void 0}n[je.expando]&&(n[je.expando]=void 0)}}}),ce.fn.extend({domManip:C,detach:function(e){return k(this,e,!0)},remove:function(e){return k(this,e)},text:function(e){return Ae(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return C(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){E(this,e).appendChild(e)}})},prepend:function(){return C(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=E(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return C(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return C(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(v(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return Ae(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ue.test(e)&&!Pe[(Ie.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(ce.cleanData(v(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return C(this,arguments,function(t){var n=this.parentNode;ce.inArray(this,e)<0&&(ce.cleanData(v(this)),n&&n.replaceChild(t,this))},e)}}),ce.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){ce.fn[e]=function(e){for(var n,r=[],i=ce(e),o=i.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),ce(i[s])[t](n),re.apply(r,n.get());return this.pushStack(r)}});var Je,Ye={HTML:\"block\",BODY:\"block\"},Qe=/^margin/,Ke=new RegExp(\"^(\"+Re+\")(?!px)[a-z%]+$\",\"i\"),Ze=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=o),t.getComputedStyle(e)},et=function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i},tt=ee.documentElement;!function(){function e(){a.style.cssText=\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",a.innerHTML=\"\",tt.appendChild(s);var e=o.getComputedStyle(a);t=\"1%\"!==e.top,i=\"2px\"===e.marginLeft,n=\"4px\"===e.width,a.style.marginRight=\"50%\",r=\"4px\"===e.marginRight,tt.removeChild(s)}var t,n,r,i,s=ee.createElement(\"div\"),a=ee.createElement(\"div\");a.style&&(a.style.backgroundClip=\"content-box\",a.cloneNode(!0).style.backgroundClip=\"\",ue.clearCloneStyle=\"content-box\"===a.style.backgroundClip,s.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",s.appendChild(a),ce.extend(ue,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==n&&e(),n},pixelMarginRight:function(){return null==n&&e(),r},reliableMarginLeft:function(){return null==n&&e(),i},reliableMarginRight:function(){var e,t=a.appendChild(ee.createElement(\"div\"));return t.style.cssText=a.style.cssText=\"-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",t.style.marginRight=t.style.width=\"0\",a.style.width=\"1px\",tt.appendChild(s),e=!parseFloat(o.getComputedStyle(t).marginRight),tt.removeChild(s),a.removeChild(t),e}}))}();var nt=/^(none|table(?!-c[ea]).+)/,rt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},it={letterSpacing:\"0\",fontWeight:\"400\"},ot=[\"Webkit\",\"O\",\"Moz\",\"ms\"],st=ee.createElement(\"div\").style;ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=N(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:\"cssFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,s,a,u=ce.camelCase(t),c=e.style;if(t=ce.cssProps[u]||(ce.cssProps[u]=M(u)||u),a=ce.cssHooks[t]||ce.cssHooks[u],void 0===n)return a&&\"get\"in a&&void 0!==(o=a.get(e,!1,r))?o:c[t];s=void 0===n?\"undefined\":i(n),\"string\"===s&&(o=Me.exec(n))&&o[1]&&(n=p(e,t,o),s=\"number\"),null!=n&&n===n&&(\"number\"===s&&(n+=o&&o[3]||(ce.cssNumber[u]?\"\":\"px\")),ue.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(c[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(c[t]=n))}},css:function(e,t,n,r){var i,o,s,a=ce.camelCase(t);return t=ce.cssProps[a]||(ce.cssProps[a]=M(a)||a),s=ce.cssHooks[t]||ce.cssHooks[a],s&&\"get\"in s&&(i=s.get(e,!0,n)),void 0===i&&(i=N(e,t,r)),\"normal\"===i&&t in it&&(i=it[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each([\"height\",\"width\"],function(e,t){ce.cssHooks[t]={get:function(e,n,r){if(n)return nt.test(ce.css(e,\"display\"))&&0===e.offsetWidth?et(e,rt,function(){return q(e,t,r)}):q(e,t,r)},set:function(e,n,r){var i,o=r&&Ze(e),s=r&&L(e,t,r,\"border-box\"===ce.css(e,\"boxSizing\",!1,o),o);return s&&(i=Me.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=ce.css(e,t)),D(e,n,s)}}}),ce.cssHooks.marginLeft=R(ue.reliableMarginLeft,function(e,t){if(t)return(parseFloat(N(e,\"marginLeft\"))||e.getBoundingClientRect().left-et(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),ce.cssHooks.marginRight=R(ue.reliableMarginRight,function(e,t){if(t)return et(e,{display:\"inline-block\"},N,[e,\"marginRight\"])}),ce.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){ce.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+De[r]+t]=o[r]||o[r-2]||o[0];return i}},Qe.test(e)||(ce.cssHooks[e+t].set=D)}),ce.fn.extend({css:function(e,t){return Ae(this,function(e,t,n){var r,i,o={},s=0;if(ce.isArray(t)){for(r=Ze(e),i=t.length;s<i;s++)o[t[s]]=ce.css(e,t[s],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,arguments.length>1)},show:function(){return I(this,!0)},hide:function(){return I(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){Le(this)?ce(this).show():ce(this).hide()})}}),ce.Tween=F,F.prototype={constructor:F,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?\"\":\"px\")},cur:function(){var e=F.propHooks[this.prop];return e&&e.get?e.get(this):F.propHooks._default.get(this)},run:function(e){var t,n=F.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):F.propHooks._default.set(this),this}},F.prototype.init.prototype=F.prototype,F.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0)},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ce.cssProps[e.prop]]&&!ce.cssHooks[e.prop]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}},F.propHooks.scrollTop=F.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},ce.fx=F.prototype.init,ce.fx.step={};var at,ut,ct=/^(?:toggle|show|hide)$/,lt=/queueHooks$/;ce.Animation=ce.extend(V,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return p(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ce.isFunction(e)?(t=e,e=[\"*\"]):e=e.match(Te);for(var n,r=0,i=e.length;r<i;r++)n=e[r],V.tweeners[n]=V.tweeners[n]||[],V.tweeners[n].unshift(t)},prefilters:[W],prefilter:function(e,t){t?V.prefilters.unshift(e):V.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&\"object\"===(void 0===e?\"undefined\":i(e))?ce.extend({},e):{complete:n||!n&&t||ce.isFunction(e)&&e,duration:e,easing:n&&t||t&&!ce.isFunction(t)&&t};return r.duration=ce.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in ce.fx.speeds?ce.fx.speeds[r.duration]:ce.fx.speeds._default,null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){ce.isFunction(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Le).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=ce.isEmptyObject(e),o=ce.speed(t,n,r),s=function(){var t=V(this,ce.extend({},e),o);(i||ke.get(this,\"finish\"))&&t.stop(!0)};return s.finish=s,i||!1===o.queue?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=ce.timers,s=ke.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&lt.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||ce.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||\"fx\"),this.each(function(){var t,n=ke.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=ce.timers,s=r?r.length:0;for(n.finish=!0,ce.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<s;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),ce.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=ce.fn[t];ce.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate($(t,!0),e,r,i)}}),ce.each({slideDown:$(\"show\"),slideUp:$(\"hide\"),slideToggle:$(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){ce.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(at=ce.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),at=void 0},ce.fx.timer=function(e){ce.timers.push(e),e()?ce.fx.start():ce.timers.pop()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=o.setInterval(ce.fx.tick,ce.fx.interval))},ce.fx.stop=function(){o.clearInterval(ut),ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(e,t){return e=ce.fx?ce.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,n){var r=o.setTimeout(t,e);n.stop=function(){o.clearTimeout(r)}})},function(){var e=ee.createElement(\"input\"),t=ee.createElement(\"select\"),n=t.appendChild(ee.createElement(\"option\"));e.type=\"checkbox\",ue.checkOn=\"\"!==e.value,ue.optSelected=n.selected,t.disabled=!0,ue.optDisabled=!n.disabled,e=ee.createElement(\"input\"),e.value=\"t\",e.type=\"radio\",ue.radioValue=\"t\"===e.value}();var ft,ht=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return Ae(this,ce.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(t=t.toLowerCase(),i=ce.attrHooks[t]||(ce.expr.match.bool.test(t)?ft:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:(r=ce.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!ue.radioValue&&\"radio\"===t&&ce.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(Te);if(o&&1===e.nodeType)for(;n=o[i++];)r=ce.propFix[n]||n,ce.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)}}),ft={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=ht[t]||ce.find.attr;ht[t]=function(e,t,r){var i,o;return r||(o=ht[t],ht[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,ht[t]=o),i}});var dt=/^(?:input|select|textarea|button)$/i,pt=/^(?:a|area)$/i;ce.fn.extend({prop:function(e,t){return Ae(this,ce.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,\"tabindex\");return t?parseInt(t,10):dt.test(e.nodeName)||pt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),ue.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){ce.propFix[this.toLowerCase()]=this});var vt=/[\\t\\r\\n\\f]/g;ce.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ce.isFunction(e))return this.each(function(t){ce(this).addClass(e.call(this,t,U(this)))});if(\"string\"==typeof e&&e)for(t=e.match(Te)||[];n=this[u++];)if(i=U(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(vt,\" \")){for(s=0;o=t[s++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");a=ce.trim(r),i!==a&&n.setAttribute(\"class\",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ce.isFunction(e))return this.each(function(t){ce(this).removeClass(e.call(this,t,U(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof e&&e)for(t=e.match(Te)||[];n=this[u++];)if(i=U(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(vt,\" \")){for(s=0;o=t[s++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");a=ce.trim(r),i!==a&&n.setAttribute(\"class\",a)}return this},toggleClass:function(e,t){var n=void 0===e?\"undefined\":i(e);return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):ce.isFunction(e)?this.each(function(n){ce(this).toggleClass(e.call(this,n,U(this),t),t)}):this.each(function(){var t,r,i,o;if(\"string\"===n)for(r=0,i=ce(this),o=e.match(Te)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&\"boolean\"!==n||(t=U(this),t&&ke.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||!1===e?\"\":ke.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+U(n)+\" \").replace(vt,\" \").indexOf(t)>-1)return!0;return!1}});var yt=/\\r/g,gt=/[\\x20\\t\\r\\n\\f]+/g;ce.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ce.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ce(this).val()):e,null==i?i=\"\":\"number\"==typeof i?i+=\"\":ce.isArray(i)&&(i=ce.map(i,function(e){return null==e?\"\":e+\"\"})),(t=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return(t=ce.valHooks[i.type]||ce.valHooks[i.nodeName.toLowerCase()])&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:(n=i.value,\"string\"==typeof n?n.replace(yt,\"\"):null==n?\"\":n)}}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,\"value\");return null!=t?t:ce.trim(ce.text(e)).replace(gt,\" \")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||i<0,s=o?null:[],a=o?i+1:r.length,u=i<0?a:o?i:0;u<a;u++)if(n=r[u],(n.selected||u===i)&&(ue.optDisabled?!n.disabled:null===n.getAttribute(\"disabled\"))&&(!n.parentNode.disabled||!ce.nodeName(n.parentNode,\"optgroup\"))){if(t=ce(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,i=e.options,o=ce.makeArray(t),s=i.length;s--;)r=i[s],(r.selected=ce.inArray(ce.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each([\"radio\",\"checkbox\"],function(){ce.valHooks[this]={set:function(e,t){if(ce.isArray(t))return e.checked=ce.inArray(ce(e).val(),t)>-1}},ue.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var mt=/^(?:focusinfocus|focusoutblur)$/;ce.extend(ce.event,{trigger:function(e,t,n,r){var s,a,u,c,l,f,h,d=[n||ee],p=ae.call(e,\"type\")?e.type:e,v=ae.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(a=u=n=n||ee,3!==n.nodeType&&8!==n.nodeType&&!mt.test(p+ce.event.triggered)&&(p.indexOf(\".\")>-1&&(v=p.split(\".\"),p=v.shift(),v.sort()),l=p.indexOf(\":\")<0&&\"on\"+p,e=e[ce.expando]?e:new ce.Event(p,\"object\"===(void 0===e?\"undefined\":i(e))&&e),e.isTrigger=r?2:3,e.namespace=v.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+v.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),h=ce.event.special[p]||{},r||!h.trigger||!1!==h.trigger.apply(n,t))){if(!r&&!h.noBubble&&!ce.isWindow(n)){for(c=h.delegateType||p,mt.test(c+p)||(a=a.parentNode);a;a=a.parentNode)d.push(a),u=a;u===(n.ownerDocument||ee)&&d.push(u.defaultView||u.parentWindow||o)}for(s=0;(a=d[s++])&&!e.isPropagationStopped();)e.type=s>1?c:h.bindType||p,f=(ke.get(a,\"events\")||{})[e.type]&&ke.get(a,\"handle\"),f&&f.apply(a,t),(f=l&&a[l])&&f.apply&&Ce(a)&&(e.result=f.apply(a,t),!1===e.result&&e.preventDefault());return e.type=p,r||e.isDefaultPrevented()||h._default&&!1!==h._default.apply(d.pop(),t)||!Ce(n)||l&&ce.isFunction(n[p])&&!ce.isWindow(n)&&(u=n[l],u&&(n[l]=null),ce.event.triggered=p,n[p](),ce.event.triggered=void 0,u&&(n[l]=u)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}}),ce.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){ce.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ce.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ue.focusin=\"onfocusin\"in o,ue.focusin||ce.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){ce.event.simulate(t,e.target,ce.event.fix(e))};ce.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=ke.access(r,t);i||r.addEventListener(e,n,!0),ke.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=ke.access(r,t)-1;i?ke.access(r,t,i):(r.removeEventListener(e,n,!0),ke.remove(r,t))}}});var bt=o.location,wt=ce.now(),xt=/\\?/;ce.parseJSON=function(e){return JSON.parse(e+\"\")},ce.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new o.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||ce.error(\"Invalid XML: \"+e),t};var Et=/#.*$/,St=/([?&])_=[^&]*/,Tt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,_t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,At=/^(?:GET|HEAD)$/,Ct=/^\\/\\//,kt={},jt={},Ot=\"*/\".concat(\"*\"),Nt=ee.createElement(\"a\");Nt.href=bt.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:\"GET\",isLocal:_t.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Ot,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":ce.parseJSON,\"text xml\":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?G(G(e,ce.ajaxSettings),t):G(ce.ajaxSettings,e)},ajaxPrefilter:z(kt),ajaxTransport:z(jt),ajax:function(e,t){function n(e,t,n,i){var u,l,h,b,w,E=t;2!==x&&(x=2,c&&o.clearTimeout(c),r=void 0,a=i||\"\",S.readyState=e>0?4:0,u=e>=200&&e<300||304===e,n&&(b=J(d,S,n)),b=Y(d,b,S,u),u?(d.ifModified&&(w=S.getResponseHeader(\"Last-Modified\"),w&&(ce.lastModified[s]=w),(w=S.getResponseHeader(\"etag\"))&&(ce.etag[s]=w)),204===e||\"HEAD\"===d.type?E=\"nocontent\":304===e?E=\"notmodified\":(E=b.state,l=b.data,h=b.error,u=!h)):(h=E,!e&&E||(E=\"error\",e<0&&(e=0))),S.status=e,S.statusText=(t||E)+\"\",u?y.resolveWith(p,[l,E,S]):y.rejectWith(p,[S,E,h]),S.statusCode(m),m=void 0,f&&v.trigger(u?\"ajaxSuccess\":\"ajaxError\",[S,d,u?l:h]),g.fireWith(p,[S,E]),f&&(v.trigger(\"ajaxComplete\",[S,d]),--ce.active||ce.event.trigger(\"ajaxStop\")))}\"object\"===(void 0===e?\"undefined\":i(e))&&(t=e,e=void 0),t=t||{};var r,s,a,u,c,l,f,h,d=ce.ajaxSetup({},t),p=d.context||d,v=d.context&&(p.nodeType||p.jquery)?ce(p):ce.event,y=ce.Deferred(),g=ce.Callbacks(\"once memory\"),m=d.statusCode||{},b={},w={},x=0,E=\"canceled\",S={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!u)for(u={};t=Tt.exec(a);)u[t[1].toLowerCase()]=t[2];t=u[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=w[n]=w[n]||e,b[e]=t),this},overrideMimeType:function(e){return x||(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(x<2)for(t in e)m[t]=[m[t],e[t]];else S.always(e[S.status]);return this},abort:function(e){var t=e||E;return r&&r.abort(t),n(0,t),this}};if(y.promise(S).complete=g.add,S.success=S.done,S.error=S.fail,d.url=((e||d.url||bt.href)+\"\").replace(Et,\"\").replace(Ct,bt.protocol+\"//\"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=ce.trim(d.dataType||\"*\").toLowerCase().match(Te)||[\"\"],null==d.crossDomain){l=ee.createElement(\"a\");try{l.href=d.url,l.href=l.href,d.crossDomain=Nt.protocol+\"//\"+Nt.host!=l.protocol+\"//\"+l.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&\"string\"!=typeof d.data&&(d.data=ce.param(d.data,d.traditional)),X(kt,d,t,S),2===x)return S;f=ce.event&&d.global,f&&0==ce.active++&&ce.event.trigger(\"ajaxStart\"),d.type=d.type.toUpperCase(),d.hasContent=!At.test(d.type),s=d.url,d.hasContent||(d.data&&(s=d.url+=(xt.test(s)?\"&\":\"?\")+d.data,delete d.data),!1===d.cache&&(d.url=St.test(s)?s.replace(St,\"$1_=\"+wt++):s+(xt.test(s)?\"&\":\"?\")+\"_=\"+wt++)),d.ifModified&&(ce.lastModified[s]&&S.setRequestHeader(\"If-Modified-Since\",ce.lastModified[s]),ce.etag[s]&&S.setRequestHeader(\"If-None-Match\",ce.etag[s])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&S.setRequestHeader(\"Content-Type\",d.contentType),S.setRequestHeader(\"Accept\",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(\"*\"!==d.dataTypes[0]?\", \"+Ot+\"; q=0.01\":\"\"):d.accepts[\"*\"]);for(h in d.headers)S.setRequestHeader(h,d.headers[h]);if(d.beforeSend&&(!1===d.beforeSend.call(p,S,d)||2===x))return S.abort();E=\"abort\";for(h in{success:1,error:1,complete:1})S[h](d[h]);if(r=X(jt,d,t,S)){if(S.readyState=1,f&&v.trigger(\"ajaxSend\",[S,d]),2===x)return S;d.async&&d.timeout>0&&(c=o.setTimeout(function(){S.abort(\"timeout\")},d.timeout));try{x=1,r.send(b,n)}catch(e){if(!(x<2))throw e;n(-1,e)}}else n(-1,\"No Transport\");return S},getJSON:function(e,t,n){return ce.get(e,t,n,\"json\")},getScript:function(e,t){return ce.get(e,void 0,t,\"script\")}}),ce.each([\"get\",\"post\"],function(e,t){ce[t]=function(e,n,r,i){return ce.isFunction(n)&&(i=i||r,r=n,n=void 0),ce.ajax(ce.extend({url:e,type:t,dataType:i,data:n,success:r},ce.isPlainObject(e)&&e))}}),ce._evalUrl=function(e){return ce.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,throws:!0})},ce.fn.extend({wrapAll:function(e){var t;return ce.isFunction(e)?this.each(function(t){ce(this).wrapAll(e.call(this,t))}):(this[0]&&(t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return ce.isFunction(e)?this.each(function(t){ce(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ce(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ce.isFunction(e);return this.each(function(n){ce(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){ce.nodeName(this,\"body\")||ce(this).replaceWith(this.childNodes)}).end()}}),ce.expr.filters.hidden=function(e){return!ce.expr.filters.visible(e)},ce.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Rt=/%20/g,Mt=/\\[\\]$/,Dt=/\\r?\\n/g,Lt=/^(?:submit|button|image|reset|file)$/i,qt=/^(?:input|select|textarea|keygen)/i;ce.param=function(e,t){var n,r=[],i=function(e,t){t=ce.isFunction(t)?t():null==t?\"\":t,r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(void 0===t&&(t=ce.ajaxSettings&&ce.ajaxSettings.traditional),ce.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Q(n,e[n],t,i);return r.join(\"&\").replace(Rt,\"+\")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,\"elements\");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(\":disabled\")&&qt.test(this.nodeName)&&!Lt.test(e)&&(this.checked||!qe.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:ce.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Dt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Dt,\"\\r\\n\")}}).get()}}),ce.ajaxSettings.xhr=function(){try{return new o.XMLHttpRequest}catch(e){}};var It={0:200,1223:204},Ft=ce.ajaxSettings.xhr();ue.cors=!!Ft&&\"withCredentials\"in Ft,ue.ajax=Ft=!!Ft,ce.ajaxTransport(function(e){var t,n;if(ue.cors||Ft&&!e.crossDomain)return{send:function(r,i){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||r[\"X-Requested-With\"]||(r[\"X-Requested-With\"]=\"XMLHttpRequest\");for(s in r)a.setRequestHeader(s,r[s]);t=function(e){return function(){t&&(t=n=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,\"abort\"===e?a.abort():\"error\"===e?\"number\"!=typeof a.status?i(0,\"error\"):i(a.status,a.statusText):i(It[a.status]||a.status,a.statusText,\"text\"!==(a.responseType||\"text\")||\"string\"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),n=a.onerror=t(\"error\"),void 0!==a.onabort?a.onabort=n:a.onreadystatechange=function(){4===a.readyState&&o.setTimeout(function(){t&&n()})},t=t(\"abort\");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),ce.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),ce.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ce(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&i(\"error\"===e.type?404:200,e.type)}),ee.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Pt=[],$t=/(=)\\?(?=&|$)|\\?\\?/;ce.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Pt.pop()||ce.expando+\"_\"+wt++;return this[e]=!0,e}}),ce.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,s,a=!1!==e.jsonp&&($t.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&$t.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=ce.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace($t,\"$1\"+r):!1!==e.jsonp&&(e.url+=(xt.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return s||ce.error(r+\" was not called\"),s[0]},e.dataTypes[0]=\"json\",i=o[r],o[r]=function(){s=arguments},n.always(function(){void 0===i?ce(o).removeProp(r):o[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Pt.push(r)),s&&ce.isFunction(i)&&i(s[0]),s=i=void 0}),\"script\"}),ce.parseHTML=function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||ee;var r=me.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=g([e],t,i),i&&i.length&&ce(i).remove(),ce.merge([],r.childNodes))};var Ht=ce.fn.load;ce.fn.load=function(e,t,n){if(\"string\"!=typeof e&&Ht)return Ht.apply(this,arguments);var r,o,s,a=this,u=e.indexOf(\" \");return u>-1&&(r=ce.trim(e.slice(u)),e=e.slice(0,u)),ce.isFunction(t)?(n=t,t=void 0):t&&\"object\"===(void 0===t?\"undefined\":i(t))&&(o=\"POST\"),a.length>0&&ce.ajax({url:e,type:o||\"GET\",dataType:\"html\",data:t}).done(function(e){s=arguments,a.html(r?ce(\"<div>\").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,s||[e.responseText,t,e])})}),this},ce.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.expr.filters.animated=function(e){return ce.grep(ce.timers,function(t){return e===t.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,c,l=ce.css(e,\"position\"),f=ce(e),h={};\"static\"===l&&(e.style.position=\"relative\"),a=f.offset(),o=ce.css(e,\"top\"),u=ce.css(e,\"left\"),c=(\"absolute\"===l||\"fixed\"===l)&&(o+u).indexOf(\"auto\")>-1,c?(r=f.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),ce.isFunction(t)&&(t=t.call(e,n,ce.extend({},a))),null!=t.top&&(h.top=t.top-a.top+s),null!=t.left&&(h.left=t.left-a.left+i),\"using\"in t?t.using.call(e,h):f.css(h)}},ce.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){ce.offset.setOffset(this,e,t)});var t,n,r=this[0],i={top:0,left:0},o=r&&r.ownerDocument;if(o)return t=o.documentElement,ce.contains(t,r)?(i=r.getBoundingClientRect(),n=K(o),{top:i.top+n.pageYOffset-t.clientTop,left:i.left+n.pageXOffset-t.clientLeft}):i},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return\"fixed\"===ce.css(n,\"position\")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),ce.nodeName(e[0],\"html\")||(r=e.offset()),r.top+=ce.css(e[0],\"borderTopWidth\",!0),r.left+=ce.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-r.top-ce.css(n,\"marginTop\",!0),left:t.left-r.left-ce.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&\"static\"===ce.css(e,\"position\");)e=e.offsetParent;return e||tt})}}),ce.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;ce.fn[e]=function(r){return Ae(this,function(e,r,i){var o=K(e);if(void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),ce.each([\"top\",\"left\"],function(e,t){ce.cssHooks[t]=R(ue.pixelPosition,function(e,n){if(n)return n=N(e,t),Ke.test(n)?ce(e).position()[t]+\"px\":n})}),ce.each({Height:\"height\",Width:\"width\"},function(e,t){ce.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){ce.fn[r]=function(r,i){var o=arguments.length&&(n||\"boolean\"!=typeof r),s=n||(!0===r||!0===i?\"margin\":\"border\");return Ae(this,function(t,n,r){var i;return ce.isWindow(t)?t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===r?ce.css(t,n,s):ce.style(t,n,r,s)},t,o?r:void 0,o,null)}})}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},size:function(){return this.length}}),ce.fn.andSelf=ce.fn.addBack,n=[],void 0!==(r=function(){return ce}.apply(t,n))&&(e.exports=r);var Wt=o.jQuery,Bt=o.$;return ce.noConflict=function(e){return o.$===ce&&(o.$=Bt),e&&o.jQuery===ce&&(o.jQuery=Wt),ce},s||(o.jQuery=o.$=ce),ce})}).call(t,n(9)(e))},function(e,t,n){\"use strict\";e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,\"loaded\",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,\"id\",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,n){\"use strict\";function r(e){return function(t){var n=e;if(!t)return n;if(Array.isArray(t)){var r=e.match(/\\:\\w+/g);return r.length!==t.length?(console.error(\"It does not match the required input values.\"),n):(r.forEach(function(e,r){n=n.replace(e,encodeURIComponent(t[r]))}),n)}if(\"object\"===(void 0===t?\"undefined\":i(t))){for(var o in t)t.hasOwnProperty(o)&&(n=n.replace(\":\"+o,encodeURIComponent(t[o])));return n}return console.error(\"Invalid params type\"),n}}var i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=n(0).MIDDLEWARE,s=n(0).MIDDLEWARE_PROTOCOL,a=n(0).MiddlewareRunner,u=void 0;e.exports={routeTables:{},settings:null,layouts:[],currentView:\"\",currentLayout:\"\",bindLayout:function(e){this.layouts.push(e)},design:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];this.settings=t,this.router=null,u=n,this.bindRouter(Array.isArray(e)?e:[e])},bindRouter:function(e){var t=this,n={routes:{}},i=void 0,c=void 0;for(e=Array.from(e);e.length;)if(i=e.shift(),this.routeTables[i.routeName||i.view.viewname]=r(i.url),i.originUrl=i.url,i.url.startsWith(\"/\")&&(i.url=i.url.substr(1)),c=\"r\"+i.url.toLowerCase()+Date.now(),n.routes[i.url]=c,n[c]=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var i=window.location.href,c=Object.assign({},e);c.view&&delete c.view,c.pages&&delete c.pages;var l=u.getMiddleware(o.ROUTER,s.BEFORE);a.run(l,s.BEFORE,[c,u],function(){if(i===window.location.href){var t={},r={},f=0;if(e.url.startsWith(\"*\"))t[e.url.split(\"*\")[1]]=n[0];else{var h=!0,d=!1,p=void 0;try{for(var v,y=e.url.split(\"/\")[Symbol.iterator]();!(h=(v=y.next()).done);h=!0){var g=v.value;g.startsWith(\":\")&&(t[g.substr(1)]=decodeURIComponent(n[f]),++f)}}catch(e){d=!0,p=e}finally{try{!h&&y.return&&y.return()}finally{if(d)throw p}}}var m=decodeURIComponent(n[n.length-1]||(window.location.search||\"\").substr(1));if(m&&~m.indexOf(\"=\")){var b=m.split(\"&\"),w=!0,x=!1,E=void 0;try{for(var S,T=b[Symbol.iterator]();!(w=(S=T.next()).done);w=!0){var _=S.value,A=_.split(\"=\");2===A.length&&(r[A[0]]=A[1])}}catch(e){x=!0,E=e}finally{try{!w&&T.return&&T.return()}finally{if(x)throw E}}}if(e.layout){var C=this.layouts.find(function(t){return t.viewName===e.layout});this.currentLayout&&this.currentLayout.viewname===e.layout?C.options.update&&(this.currentLayout.params=t,this.currentLayout.query=r,this.currentLayout.updateView()):C&&(!!this.currentLayout&&this.currentLayout.close(),C.view.prototype.params=t,C.view.prototype.query=r,C.view.prototype.container=C.container,this.currentLayout=new C.view)}e.view.prototype.params=t,e.view.prototype.query=r,e.view.prototype.container=e.container;var k=new e.view;this.currentView&&this.currentView.close(),this.currentView=k,l=u.getMiddleware(o.ROUTER,s.AFTER),a.run(l,s.AFTER,[c,u])}}.bind(this))}.bind(this,i),i.pages&&i.pages.length){var l=i.originUrl||\"\",f=i.container||\"\",h=i.layout||\"\",d=!0,p=!1,v=void 0;try{for(var y,g=i.pages[Symbol.iterator]();!(d=(y=g.next()).done);d=!0){var m=y.value;m.url.startsWith(\"/\")||(m.url=(\"/\"===l?\"\":l)+\"/\"+m.url),m.container||(m.container=f),m.layout||(m.layout=h),e.push(m)}}catch(e){p=!0,v=e}finally{try{!d&&g.return&&g.return()}finally{if(p)throw v}}}n.routes[\"*actions\"]=\"___NOT_FOUND___\",n.___NOT_FOUND___=function(e){\"empty\"in t.settings&&t.settings.empty(e)},this.router=new(Backbone.Router.extend(n))}}},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var o=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),s=n(2),a=n(0).MIDDLEWARE,u=n(0).MIDDLEWARE_PROTOCOL,c=n(0).MiddlewareRunner,l=n(12),f=n(13),h=n(14),d=n(15),p=/^(\\S+)\\s*(.*)$/,v=/^\\@(\\w+)\\s*(.*)$/,y=null,g=null,m=null;g=function(){var e=this.tagName,t=this.container,n=this.template,r=void 0,i=void 0;if(!t)throw new Error(\"[\"+this.viewname+'] Required attribute \"container\" is missing.');if(\"string\"==typeof t&&(t=$(t)),!t||!t.length)throw new Error(\"[\"+this.viewname+'] \"container\" is undefined.');var o=this.getModel();if(\"function\"==typeof this.viewWillMount&&(o=this.viewWillMount(o)||o),n){if(r=\"string\"==typeof n?n:n(o),\"div\"===e){var s=this;e=\"\";do{if(s.hasOwnProperty(\"tagName\")&&s.tagName){e=s.tagName;break}}while((s=s.__proto__)&&\"___WOOWA_VIEW___\"!==s.viewname)}i=e||$(r).length>1?$(\"<\"+(e||\"div\")+\">\"+r+\"</\"+(e||\"div\")+\">\"):$(r),this.className&&i.addClass(this.className),this._viewMounted?$.contains(t[0],this.el)?this.$el.replaceWith(i):t.html(i):this.append?t.append(i):this.prepend?t.prepend(i):this.after?t.after(i):t.html(i),this.setElement(i)}else this.setElement(t);this._viewMounted=!0,this._bindRef(),this._bindModel(),\"function\"==typeof this.viewComponentDidMount&&this.viewComponentDidMount(i);var l=void 0;\"function\"==typeof this.viewDidMount&&(l=this.viewDidMount.bind(this,i));var f=!1;\"forceExcludeMiddleware\"in this&&(f=\"function\"==typeof this.forceExcludeMiddleware?this.forceExcludeMiddleware():this.forceExcludeMiddleware);var h=f?[]:m.getMiddleware(a.VIEW,u.AFTER);c.run(h,u.AFTER,[this],function(){var e=this;[\"viewDidMount\",\"mount\"].forEach(function(t){e.dispatch(Woowahan.Event.create(t,e)),e.trigger(t)})}.bind(this),l)},y=s.View.extend({super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];y.prototype.initialize.apply(this,t)},initialize:function(e){this._viewMounted=!1,this._views={},this.container=this.container,e&&this.setModel(e);var t=!1;\"forceExcludeMiddleware\"in this&&(t=\"function\"==typeof this.forceExcludeMiddleware?this.forceExcludeMiddleware():this.forceExcludeMiddleware);var n=t?[]:m.getMiddleware(a.VIEW,u.BEFORE);c.run(n,u.BEFORE,[this],function(){g.apply(this)}.bind(this))},_plugins:{text:l,\"input-text\":f,checkbox:h,select:d},delegateEvents:function(e){if(!(e=e||this.events))return this;this.undelegateEvents();for(var t in e)if(e.hasOwnProperty(t)){var n=e[t],r=t.match(p),i=t.match(v),o=void 0,s=void 0,a=void 0;if(i){var u=n.indexOf(\"(\"),c=[];o=i[1],s=i[2],~u&&(c=n.substring(u+1,n.length-1).split(\",\").map(function(e){return $.trim(e)}),n=n.substring(0,u)),a=function(e,t,n,r,i){var o=this,s=function(e){return e.is(\"input[type=checkbox]\")||e.is(\"input[type=radio]\")?e.is(\":checked\"):e.is(\"select\")?e.val():e.val()||e.text()},a=r.map(function(e){return s(o.$(e))});if(\"submit\"===e){var u={},c=!0,l=!1,f=void 0;try{for(var h,d=o.$(t).find(\"input, select, textarea\")[Symbol.iterator]();!(c=(h=d.next()).done);c=!0){var p=h.value;u[$(p).attr(\"name\")]=s($(p))}}catch(e){l=!0,f=e}finally{try{!c&&d.return&&d.return()}finally{if(l)throw f}}a.push(u)}\"[object Function]\"!==Object.prototype.toString.call(n)&&(n=this[n]);for(var v=arguments.length,y=Array(v>5?v-5:0),g=5;g<v;g++)y[g-5]=arguments[g];return n.apply(this,Array.prototype.concat.call(a,y,i))}.bind(this,o,s,n,c)}else{if(\"[object Function]\"!==Object.prototype.toString.call(n)&&(n=this[n]),!n)continue;o=r[1],s=r[2],a=n.bind(this)}this.delegate(o,s,a)}return this},updateView:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),i=2;i<n;i++)r[i-2]=arguments[i];if(0===arguments.length)return this.close(!1),void g.apply(this);var o=void 0,s=void 0;if(o=this.$(e),o.length||(o=$(e)),!o.length)throw new Error(\"View must have container\");if(s=o.data(\"ref\")||o.selector||e,e&&!t)return void(this._views[s]&&(this._views[s].close(),delete this._views[s]));\"function\"!=typeof t&&(r=t);var l=this._views[s];if(l){l.setModel.apply(l,Array.prototype.concat.call(r,{silent:!0})),l.container=o;var f=!1;\"forceExcludeMiddleware\"in l&&(f=\"function\"==typeof l.forceExcludeMiddleware?l.forceExcludeMiddleware():l.forceExcludeMiddleware);var h=f?[]:m.getMiddleware(a.VIEW,u.UNMOUNT);c.run(h,u.UNMOUNT,[this],function(){\"function\"==typeof l.viewWillUnmount&&l.viewWillUnmount.call(l),l.dispatch(Woowahan.Event.create(\"unmount\",this)),l.trigger(\"unmount\"),g.apply(this._views[s])}.bind(this))}else t.prototype.container=o,l=new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,r))),this._views[s]=l;return l},addView:function(e,t){this.removeView(e);for(var n=arguments.length,r=Array(n>2?n-2:0),i=2;i<n;i++)r[i-2]=arguments[i];return this.updateView.apply(this,[e,t].concat(r))},removeView:function(e){$(e).length&&this.updateView(e)},addPopup:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];\"function\"==typeof t&&(n=t,t={}),e=\"string\"==typeof e?this.getComponent(e):e;var r=e.viewname,i=void 0,o=void 0,s=void 0;if(e){var a=t._id||r+\"Container\"+Date.now();if($(\"div[data-id=\"+a+\"]\").length)return;return i=a,o=$('<div data-id=\"'+i+'\"></div>'),$(\"body\").append(o),s=this.addView(\"div[data-id=\"+i+\"]\",e,Object.assign(t,{_id:a})),s.on(\"remove\",function(){s.off(\"remove\"),$(\"div[data-id=\"+i+\"]\").remove()}),s.closePopup=function(e,t,n){this.removeView(\"div[data-id=\"+e+\"]\"),t&&t.call(this,n)}.bind(this,i,n),s}console.error(\"undefined popup name [\"+r+\"]\")},getStates:function(e){return m.getStates(e)},setStates:function(e,t){m.setStates(e,t)},getComponent:function(e){return m.getComponent(e).extend({})},getRouteTables:function(e,t,n){if(void 0===e)return m.getRouteTables();var r=m.getRouteTables()[e];return r?\"string\"==typeof t?r()+\"?\"+encodeURIComponent(t):\"string\"==typeof n?r(t)+\"?\"+encodeURIComponent(n):r(t):void console.error('\"'+e+'\" not found')},dispatch:function(e,t,n){var r;switch(e.__options=n||{},e.wwtype){case\"event\":(r=this.$el).trigger.apply(r,[e.type].concat(i(e.data)));break;case\"action\":t&&(t=t.bind(this)),m.dispatch(e,t)}},setModel:function(e,t){var n=void 0;if((n=\"string\"==typeof e&&void 0!==t?r({},e,t):e)instanceof s.Model)return this.model&&this._unbindModel(),this.model=n.clone(),void(this._viewMounted&&this._bindModel());\"[object Null]\"!==Object.prototype.toString.call(n)&&this.model&&this.model instanceof s.Model||(this.model=new s.Model,this._viewMounted&&this._bindModel());for(var i in n)if(n.hasOwnProperty(i)){var o=this.model.get(i);o!==n[i]&&this.model.set(i,n[i])}},getModel:function(e){return this.model&&this.model instanceof s.Model||(this.model=new s.Model),e?this.model.clone().get(e):this.model.clone().toJSON()},log:function(){console.warn(\"View.log:: Deprecated and will be removed in a future release.\")},logStamp:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.log(t)},close:function(e){this._unbindModel();var t=!1;\"forceExcludeMiddleware\"in this&&(t=\"function\"==typeof this.forceExcludeMiddleware?this.forceExcludeMiddleware():this.forceExcludeMiddleware);var n=t?[]:m.getMiddleware(a.VIEW,u.UNMOUNT);c.run(n,u.UNMOUNT,[this],function(){var t=this;\"function\"==typeof this.viewWillUnmount&&this.viewWillUnmount(),this.refs&&Object.keys(this.refs).forEach(function(e){Array.isArray(t.refs[e])&&(t.refs[e]=[])}),this.dispatch(Woowahan.Event.create(\"unmount\",this)),this.trigger(\"unmount\"),this._removeChild(e),e+\"\"!=\"false\"&&this&&(this._unbindRef(),this.remove())}.bind(this))},remove:function(){this.dispatch(Woowahan.Event.create(\"remove\",this)),this.trigger(\"remove\");for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];s.View.prototype.remove.apply(this,t)},_syncElement:function(e,t){var n=$(e),r=$(t);n.is(\"input[type=text]\")||n.is(\"input[type=number]\")||n.is(\"input[type=tel]\")||n.is(\"textarea\")?r.val(n.val()):n.is(\"input[type=checkbox]\")||n.is(\"input[type=radio]\")?r.prop(\"checked\",n.is(\":checked\")):n.is(\"select\")&&r.val(n.val())},_bindRef:function(){this.refs||(this.refs={});var e=!0,t=!1,n=void 0;try{for(var r,i=this.$el.find(\"[data-ref]\")[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){var o=r.value,s=$(o),a=s.data(\"ref\"),u=s.data(\"refGroup\")||!1,c=s.data(\"refFormRestore\")||!1;if(u)this.refs[a]?this.refs[a].push(o):this.refs[a]=[o];else{var l=this.refs[a];this.refs[a]=o,l&&(c&&this._syncElement(l,this.refs[a]),l=null)}}}catch(e){t=!0,n=e}finally{try{!e&&i.return&&i.return()}finally{if(t)throw n}}},_bindModel:function(){var e=this;this._unbindModel();var t=this.$el.find(\"[data-role=bind]\"),n=void 0,r=!0,i=!1,s=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done);r=!0){n=a.value;var c=$(n).data(\"name\"),l=\"change:\"+c,f=($(n).data(\"type\")||\"text\").toLowerCase(),h=this.model.get(c);this.listenTo(this.model,l,function(e,t,n){var r=this.model.get(t);this._plugins[n].call(this,e,r)}.bind(this,n,c,f)),void 0!==h&&this._plugins[f].call(this,n,h)}}catch(e){i=!0,s=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw s}}t=this.$el.find(\"[data-role=plugin]\");var d=!0,p=!1,v=void 0;try{for(var y,g=t[Symbol.iterator]();!(d=(y=g.next()).done);d=!0){n=y.value;var m=$(n).data(\"plugins\");if(!m)throw new Error(\"plugin must have plugins\");m.split(\"+\").map(function(e){return $.trim(e)}).forEach(function(t){var r=t.split(\"=>\").map(function(e){return $.trim(e)}),i=o(r,2),s=i[0],a=i[1];s=s.split(\",\").map(function(e){return $.trim(e)}),a=a.toLowerCase(),s.forEach(function(t){if(\"\"!==t){var r=e.model.get(t);e.listenTo(e.model,\"change:\"+t,function(e,t,n){var r=this.model.get(t);this._plugins[n].call(this,e,r)}.bind(e,n,t,a)),void 0!==r&&e._plugins[a].call(e,n,r)}})})}}catch(e){p=!0,v=e}finally{try{!d&&g.return&&g.return()}finally{if(p)throw v}}},_unbindRef:function(){for(var e in this.refs)this.refs.hasOwnProperty(e)&&(this.refs[e]=null);this.refs=null},_unbindModel:function(){this.stopListening(this.model)},_removeChild:function(e){for(var t in this._views)this._views.hasOwnProperty(t)&&(this._views[t].close.call(this._views[t],e),delete this._views[t])}}),y.create=function(e,t){var n=y.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return m||(m=e),y}},function(e,t,n){\"use strict\";e.exports=function(e,t){$(e).text(t)}},function(e,t,n){\"use strict\";e.exports=function(e,t){$(e).val(t)}},function(e,t,n){\"use strict\";e.exports=function(e,t){$(e).prop(\"checked\",!!t)}},function(e,t,n){\"use strict\";var r=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}();e.exports=function(e,t){var n=0,i=void 0;if(Array.isArray(t)){if(!t.length)return;i=Array.from(t)}else{if(void 0===t)return;i=Array.from([t])}e.innerHTML=\"\";var o=!0,s=!1,a=void 0;try{for(var u,c=i.entries()[Symbol.iterator]();!(o=(u=c.next()).done);o=!0){var l=r(u.value,2),f=l[0],h=l[1],d=void 0,p=void 0;\"string\"==typeof h?(d=h,p=h):(d=h.label,p=h.value),h.selected&&(n=f),$(e).append('<option value=\"'+p+'\">'+d+\"</option>\")}}catch(e){s=!0,a=e}finally{try{!o&&c.return&&c.return()}finally{if(s)throw a}}$(e).children(\"option\").eq(n).attr(\"selected\",\"selected\"),$(e).trigger(\"change\")}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=n(0).MIDDLEWARE,o=n(0).MIDDLEWARE_PROTOCOL,s=n(0).MiddlewareRunner,a={timeout:5e3},u=void 0,c=void 0;u={SUCCESS:\"SUCCESS\",FAIL:\"FAIL\",queueSuccess:[],queueFail:[],extend:function(e){var t=Object.assign({},this);return e.onSuccess&&t.queueSuccess.push(e.onSuccess),e.onFail&&t.queueFail.push(e.onFail),t},create:function(e,t,n){var u=this;if(\"function\"==typeof t)n=t,t=void 0;else if(\"object\"===(void 0===t?\"undefined\":r(t))&&\"schema\"!==t.wwtype)throw new Error(\"The second argument of reducer will only function, or schema objects.\");var l=this,f=function(t,n){this._timestamp=Date.now(),this._id=e.toLowerCase()+this._timestamp,this.subscriber=n,this.queueSuccess=[],this.queueFail=[],this.useraction(t),this.addAction(this._id)};f.wwtype=\"reducer\",f.actionName=e,f.schema=t;var h=Object.assign(f.prototype,{onSuccess:l.onSuccess,onFail:l.onFail});return h.useraction=n,h.id=function(){return u._id},h.actionName=e,h.createtime=function(){return u._timestamp},h.addAction=function(){var e;return(e=c).addAction.apply(e,arguments)},h.addError=function(){var e;return(e=c).addError.apply(e,arguments)},h.removeAction=function(){var e;return(e=c).removeAction.apply(e,arguments)},h.getStates=function(){var e;return(e=c).getStates.apply(e,arguments)},h.setStates=function(){var e;return(e=c).setStates.apply(e,arguments)},h.use=function(e,t){switch(e){case l.SUCCESS:if(!t)return;Array.isArray(t)?Array.prototype.push.apply(this.queueSuccess,t):this.queueSuccess.push(t);break;case l.FAIL:if(!t)return;Array.isArray(t)?Array.prototype.push.apply(this.queueFail,t):this.queueFail.push(t);break;default:throw new Error(\"undefined key\")}},h.loadScript=function(e,t){t||(t=e.toLowerCase());var n=$(\"script[id=\"+t+\"]\");if(n.length)return void(this.onSuccess||this.success).call(this);n=document.createElement(\"script\"),document.getElementsByTagName(\"head\")[0].appendChild(n),n.addEventListener(\"load\",(this.onSuccess||this.success).bind(this)),n.addEventListener(\"error\",(this.onFail||this.fail).bind(this)),n.id=t,n.type=\"text/javascript\",n.src=e},h.requestData=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"GET\";t=\"object\"===(void 0===e?\"undefined\":r(e))?Object.assign({},a,{url:e}):Object.assign({},a,t,{url:e}),t.type=n.toUpperCase();var u=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Array.prototype.concat.call(l.queueSuccess,this.queueSuccess),a=c.getMiddleware(i.REDUCER,o.AFTER);s.run(a,o.AFTER,[c],function(){if(r.length||this.onSuccess){var e=!0,n=!1,i=void 0;try{for(var o,s=r[Symbol.iterator]();!(e=(o=s.next()).done);e=!0){o.value.apply(this,t)}}catch(e){n=!0,i=e}finally{try{!e&&s.return&&s.return()}finally{if(n)throw i}}!!this.onSuccess&&this.onSuccess.apply(this,t)}else this.success.apply(this,t)}.bind(this))},f=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Array.prototype.concat.call(l.queueFail,this.queueFail),a=t[0],u=c.getMiddleware(i.REDUCER,o.AFTER);s.run(u,o.AFTER,[c],function(){if(a&&(t=[{status:a.status,statusText:a.statusText||\"\",response:a.responseJSON||a.responseText}]),r.length||this.onFail){var e=!0,n=!1,i=void 0;try{for(var o,s=r[Symbol.iterator]();!(e=(o=s.next()).done);e=!0){o.value.apply(this,t)}}catch(e){n=!0,i=e}finally{try{!e&&s.return&&s.return()}finally{if(n)throw i}}!!this.onFail&&this.onFail.apply(this,t)}else this.fail.apply(this,t)}.bind(this))},h=c.getMiddleware(i.REDUCER,o.BEFORE);s.run(h,o.BEFORE,[t,c],function(){return $.ajax(t).done(u.bind(this)).fail(f.bind(this))}.bind(this))},h.getData=function(e,t){return this.requestData(e,t,\"get\")},h.putData=function(e,t){return this.requestData(e,t,\"put\")},h.postData=function(e,t){return this.requestData(e,t,\"post\")},h.deleteData=function(e,t){return this.requestData(e,t,\"delete\")},h.success=function(e){},h.fail=function(e,t){\"abort\"in e&&e.abort(),this.removeAction(this._id),this.addError(t)},h.finish=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.subscriber&&this.subscriber.apply(this,t),this.removeAction(this._id)},h.env={},h.env.template=function(e,t){if(\"string\"!=typeof e)return e;var n=e,r=e.match(/{{\\w+}}/g);return r&&r.forEach(function(e){var r=e.replace(\"{{\",\"\").replace(\"}}\",\"\");r in t&&(n=n.replace(e,t[r]))}),n},f}},e.exports=function(e){return c||(c=e),u}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=n(4),o={STRING:\"string\",NUMBER:\"number\",ARRAY:\"array\",EMAIL:\"email\",PHONE:\"phone\",BOOLEAN:\"boolean\"},s=\"min\",a=\"max\",u={},c={},l=function(e,t){if(\"required\"in this&&!c.required.call(this,t))return i.create('Required attribute \"'+e+'\" is missing.',{key:e,value:t});if(void 0!==t){if(!c[this.name].call(this,t))return i.create('\"'+e+'\" type property must be \"'+this.name+'\".',{key:e,value:t});if(this.name===o.NUMBER){if(s in this&&null!==this[s]&&!c[s].call(this,t))return i.create('\"'+e+'\" is greater than '+this[s]+\".\",{key:e,value:t});if(a in this&&null!==this[a]&&!c[a].call(this,t))return i.create('\"'+e+'\" may have a value of '+this[a]+\" or less.\",{key:e,value:t})}else if(this.name===o.STRING){if(s in this&&null!==this[s]&&!c[s].call(this,t))return i.create('\"'+e+'\" must be more than '+this[s]+\" characters long.\",{key:e,value:t});if(a in this&&null!==this[a]&&!c[a].call(this,t))return i.create('\"'+e+'\" should be no longer than '+this[a]+\" characters.\",{key:e,value:t})}}},f=function(e,t,n){var r={},i=void 0;return t.forEach(function(e){r[e]=u[e]}),i=Object.assign({name:e},r,n),i.__validate__=l,i};u.required=!1,u.defaultValue=null,u[s]=null,u[a]=null,u.format=null,c[o.STRING]=function(e){return(void 0===e?\"undefined\":r(e))===o.STRING},c[o.NUMBER]=function(e){if(\"number\"==typeof e)return!0;var t=String(e),n=t.match(/^[+-]?(\\d+\\.?\\d*)$|(\\d*\\.?\\d+)$/g);return!!n&&(!(n.length>1)&&n[0].length===t.length)},c[o.ARRAY]=function(e){return Array.isArray(e)},c[o.EMAIL]=function(e){return/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/.test(e)},c[o.BOOLEAN]=function(e){return\"[object Boolean]\"===Object.prototype.toString.call(e)},c.required=function(e){return!this.required||void 0!==e&&null!==e},c[s]=function(e){return this.name===o.NUMBER?e>=this[s]:this.name!==o.STRING||e.length>=this[s]},c[a]=function(e){return this.name===o.NUMBER?e<=this[a]:this.name!==o.STRING||e.length<=this[a]},e.exports={String:function(e){return f(o.STRING,[\"required\",\"defaultValue\",s,a,\"format\"],Object.assign({defaultValue:\"\"},e))},Number:function(e){return f(o.NUMBER,[\"required\",\"defaultValue\",s,a],Object.assign({defaultValue:0},e))},Array:function(e){return f(o.ARRAY,[\"required\",\"defaultValue\"],Object.assign({defaultValue:[]},e))},Email:function(e){return f(o.EMAIL,[\"required\"],Object.assign({},e))},Boolean:function(e){return f(o.BOOLEAN,[\"required\"],Object.assign({},e))}}},function(e,t,n){\"use strict\";e.exports={create:function(e){return{wwtype:\"store\",store:e}}}},function(e,t,n){\"use strict\";e.exports={create:function(e){return{wwtype:\"action\",type:e,data:arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}}}}},function(e,t,n){\"use strict\";e.exports={create:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return{wwtype:\"event\",type:e,data:n}}}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};e.exports={create:function(e,t){function n(e){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=void 0);return Object.assign(n,e)}var i={wwtype:\"schema\",schemaName:e};return i.validate=function(e){var i=n(e),o=[];for(var s in i)if(i.hasOwnProperty(s)){var a=t[s];if(a&&a.hasOwnProperty(\"__validate__\")){var u=a.__validate__.call(a,s,e[s]);u&&o.push(u)}else\"object\"===(\"undefined\"==typeof window?\"undefined\":r(window))&&console.warn('Is not defined in the schema field \"'+s+'\" is present.')}return 0===o.length?void 0:o},i.toSchema=function(){return t},i}}},function(e,t,n){\"use strict\";e.exports=function(e,t,n){return{view:t,container:e,options:Object.assign({update:!0},n),viewName:t.viewname,wwtype:\"layout\"}}},function(e,t,n){\"use strict\";e.exports=function(e,t){return{view:t,name:e,viewName:t.viewname,wwtype:\"component\"}}},function(e,t,n){\"use strict\";e.exports=function(e,t){return{type:e,plugin:t,wwtype:\"plugin\"}}},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=n(2).Collection,o=n(1),s=n(5),a=[s.SELECTED_ROW,s.SELECTED_CELL],u=void 0,c=void 0;u=o.View.create(\"CollectionView\",{super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];u.prototype.initialize.apply(this,t)},initialize:function(){this.collection=this.collection||new i,this.collection.on(\"add\",this.addRowView,this),this.rowViews=[],this.reverse=!1;for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];o.View.prototype.initialize.apply(this,t)},viewWillUnmount:function(){for(var e=void 0;e=this.collection.first();)this.collection.remove(e);this.rowViews=[]},addRowView:function(e){var t=this,n=this.$(this.rowContainer);if(!n.length&&(n=this.$el,!this.$el.is(this.rowContainer)))throw new Error(\"undefined rowContainer\");this.rowView.prototype.container=n,this.reverse?this.rowView.prototype.prepend=!0:this.rowView.prototype.append=!0;var r=new this.rowView(e);this.rowViews.push(r),e.on(\"remove\",function(){t.rowViews.splice(t.rowViews.indexOf(r),1),r.close()},r),e.on(\"change\",function(e){r.setModel(e.toJSON()),r.updateView()},r),a.forEach(function(e){return r.on(e,t[\"on\"+e.charAt(0).toUpperCase()+e.slice(1)],t)})},reload:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"[object Object]\"!==Object.prototype.toString.call(n))throw new Error(\"invalid options!!!\");var i=n.uid,o=t.filter(function(e){return!!e}).map(function(t){if(i){var n=e.collection.findWhere(r({},i,t[i]));if(n)return n.set(t),n}return t});this.reverse=\"reverse\"in n&&n.reverse,this.collection.set(o,{remove:!(\"reset\"in n)||n.reset})},getCollection:function(){return this.rowViews.map(function(e){return e.getModel()})},onSelectedRow:function(){this.log(\"selectedRow\")},onSelectedCell:function(){this.log(\"selectedCell\")},onAction:function(){this.log(\"onAction\")},onClose:function(){this.rowViews.forEach(function(e){return e.close()})}}),u.create=function(e,t){var n=u.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return c||(c=e),u}},function(e,t,n){\"use strict\";var r=n(1),i=n(5),o=void 0,s=void 0;o=r.View.create(\"ItemView\",{events:{click:\"_onSelectedRow\"},super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];o.prototype.initialize.apply(this,t)},initialize:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];r.View.prototype.initialize.apply(this,t)},_onSelectedRow:function(e){this.onSelectedRow&&\"function\"==typeof this.onSelectedRow&&this.onSelectedRow(e,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.trigger.apply(this,Array.prototype.concat.call([],i.SELECTED_ROW,t))}.bind(this))},_onSelectedCell:function(e){this.onSelectedCell&&\"function\"==typeof this.onSelectedCell&&this.onSelectedRow(e,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.trigger.apply(this,Array.prototype.concat.call([],i.SELECTED_CELL,t))}.bind(this))}}),o.create=function(e,t){var n=o.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return s||(s=e),o}},function(e,t,n){\"use strict\";var r=n(1),i=void 0,o=void 0,s=1e3,a={position:\"fixed\",top:0,left:0,right:0,bottom:0,background:\"#000\",opacity:.7},u={overflowY:\"auto\",display:\"block\",position:\"absolute\",top:\"50%\",left:\"50%\",width:\"80%\",maxHeight:\"80%\",background:\"#fff\",webkitTransform:\"translate(-50%, -50%)\",transform:\"translate(-50%, -50%)\"};i=r.View.create(\"PopupView\",{overlayClassName:\"\",overlayCss:{},css:{},showOverlay:!0,useDefaultCss:!0,super:function(){i.prototype.initialize.apply(this,this.arguments)},initialize:function(){this.overlay=$(\"<div></div>\");for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];r.View.prototype.initialize.apply(this,t)},viewComponentDidMount:function(e){var t=this.getModel();if(Object.keys(t).map(function(e){switch(e){case\"css\":case\"overlayCss\":this[e]=Object.assign({},this[e],t[e]);break;case\"overlayClassName\":case\"showOverlay\":case\"useDefaultCss\":this[e]=t[e];break;case\"buttons\":var n=t.buttons;this.events||(this.events={});for(var r in n)n.hasOwnProperty(r)&&(this.events[\"click \"+r]=n[r].bind(this));this.delegateEvents()}}.bind(this)),this.showOverlay){var n=this.overlay;n.addClass(this.overlayClassName),n.css(Object.assign({zIndex:s},a,this.overlayCss)),this.$el.parent().prepend(n),s+=100,$(n).on(\"click\",function(){this.dispatch(r.Event.create(\"overlayClicked\",this))}.bind(this))}this.useDefaultCss&&e.css(u),e.css(Object.assign({zIndex:s},this.css)),s+=100}}),i.create=function(e,t){var n=i.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return o||(o=e),i}}]);"
  },
  {
    "path": "docs/README.md",
    "content": "# WoowahanJS 기초\n\n프로젝트 구성 환경은 [Webpack](https://webpack.github.io)(권장) 또는 [Browserify](http://browserify.org) 와 같은 번들러를 이용한 구성을 권장합니다.\n앱을 번들링하기 위한 초기 구성은 [프로젝트 환경 구성](./project-setup.md) 내용을 참고하여 주십시오.\n\n* [프로젝트 환경 구성](./project-setup.md)\n* [첫 번째 앱 만들기](./first-app.md)\n* [뷰](./view.md)\n* [뷰모델 및 데이타 바인딩](./view-model.md)\n* [뷰의 DOM 참조](./dom-refs.md)\n* [컬렉션 뷰](./collection-view.md)\n* [팝업 뷰](./popup-view.md)\n* [이벤트](./event.md)\n* [액션과 리듀서](./action-reducer.md)\n* [스토어](./store.md)\n* [라우터](./route.md)"
  },
  {
    "path": "docs/action-reducer.md",
    "content": "# 액션과 리듀서\n\nUI 관련 코드와 상태(데이타) 및 상태 관리 코드를 분리하기 위해 Action & Reducer를 제공합니다.\nAction은 특정 작업을 시작하게하는 \"키\"로서 정의되며 Reducer와 1:1 관계를 가집니다.\nAction을 Reducer에 전달하기 위해서 dispatch를 제공하며 어떤 View에서도 호출할 수 있습니다.\n\n## 액션\n\n액션의 형태는 다음과 같습니다.\n\n```javascript\n{\n  type: 'ActionName',\n  data: {\n\n  }\n}\n```\n\n액션을 쉽게 만들 수 있는 Action Creator 유틸리티를 제공합니다.\ndispatch에 전달된 액션 객체를 직접 기술할 수도 있으나 Action Creator를 사용하면 좀 더 편리합니다.\n\n```javascript\nWoowahan.Action.create('ActionName', data);\n```\n\n## Dispatch\n\n모든 뷰는 dispatch를 제공합니다. dispatch로 액션을 보낼 수 있으며 액션의 수행 결과는 지정한 핸들러를 통해 받을 수 있습니다.\n핸들러가 없는 액션이 있을 수도 있기 때문에 핸들러는 옵션입니다.\n다음과 같이 사용할 수 있습니다.\n\n```javascript\nonReceive(data) {\n\n}\n\nonAction(data) {\n  this.dispatch(Woowahan.Action.create('SearchOrders', data), this.onReceive);\n}\n```\n\n## 리듀서\n\nReducer Creator로 리듀서를 만들 수 있습니다.\n리듀서는 액션과 달리 반드시 Reducer Creator로만 만들 수 있습니다.\n\nWoowahanJS에서 리듀서의 역할은 약속된 액션의 작업을 처리하는 작업 처리자입니다.\n웹 어플리케이션에서 작업 처리자가 처리해야할 주된 작업 중 하나는 API 호출과 관련되어있습니다.\nAjax로 대변되는 XHR 처리는 리듀서가 담당하며 보다 효과적인 처리를 위해 몇 가지 헬퍼 함수가 제공됩니다.\n\n사용자 정보 API를 호출한 후 결과를 반환하는 전형적인 코드는 다음과 같습니다.\n\n```javascript\nconst FETCH_USER_INFO = 'fetch-user-info';\n\nWoowahan.Reducer.create(FETCH_USER_INFO, function(data) {\n  this.onSuccess = function(response) {\n    this.finish(response);\n  };\n\n  this.getData('/api/users/'+data.userid);\n});\n```\n\ngetData는 GET XHR 요청을 보내는 함수이며 첫 번째 인자로 URL을 받습니다.\nHTTP 메소드 타입에 대응하는 postData, putData, deleteData가 제공됩니다.\nXHR 요청이 완료되면 this.onSuccess로 결과 값이 반환됩니다.\n응답 처리를 위해 onSuccess 구현은 필수 요소입니다.\n\n요청 실패시 필요한 작업이 있다면 onFail을 구현하면 됩니다.\nonFail이 구현되지 않았다면 WoowahanJS 는 error 이벤트를 글로벌 이벤트로 생성합니다.\n글로벌 이벤트는 어플리케이션 이벤트라 부르며 이벤트 부분에서 자세한 내용을 알 수 있습니다.\n\n리듀서의 처리 결과를 dispatch한 핸들러에 보내기 위해 **finish** 메소드가 제공됩니다.\n리듀서 내에서 언제든 finish 메소드를 호출함으로서 리듀서 수행을 종료하고 결과를 dispatch시 지정된 핸들러로 전송할 수 있습니다.\n\n## 리듀서 등록\n\n만들어진 리듀서가 사용되기 위해선 등록 과정이 필요합니다.\n리듀서 등록은 어플리케이션이 처리합니다.\n\n```javascript\nimport Woowahan from 'woowahan';\nimport FetchUserReducer from './reducer/fetch-user';\n\nlet app = new Woowahan();\n\napp.use(FetchUserReducer);\n\napp.start();\n```\n\n이제 어떤 뷰에서든 dispatch를 통하여 FetchUserReducer를 이용할 수 있습니다.\n\n## 스키마\n"
  },
  {
    "path": "docs/collection-view.md",
    "content": "# 컬렉션 뷰\n\n컬렉션 뷰<sub>CollectionView</sub>는 `Woowahan`에서 제공하는 뷰 컴포넌트입니다.\n[뷰]('./view.md)<sub>View</sub>의 기능들을 상속하며, 컬렉션 데이터를 나타내기 위한 기능들을 제공합니다\n\n아래는 기본적인 컬렉션 뷰의 형태입니다.\n\n#### basic-collection-view.js\n\n```javascript\nimport Woowahan from 'woowahan';\nimport BasicItemView from './basic-item-view';\nimport Template from './basic-collection-view.hbs';\n\nexport default Woowahan.CollectionView.create('BasicCollectionView', {\n  template: Template,\n  rowView: BasicItemView,\n  rowContainer: '#basicContainer',\n  \n  viewDidMount() {\n    const collectionData = [\n      { name: '홍길동', age: 573 },\n      { name: '이순신', age: 534 },\n      // ...\n    ];\n    \n    this.reload(collectionData);\n  }\n});\n```\n\n## rowContainer\n\n컬렉션 데이터의 뷰를 추가할 컨테이너입니다.\n     \n## rowView\n\n컬렉션 데이터를 뷰 모델로 가지는 아이템 뷰<sub>ItemView</sub>입니다.\n\n## reload\n\n컬렉션 뷰의 `reload` 메소드의 인자로 컬렉션 데이터를 전달하면 뷰 리스트가 자동으로 갱신됩니다.  \n`reload` 메소드를 통해 전달된 컬렉션 데이터는 컬렉션 뷰의 내부에서 이전에 전달된 컬렉션 데이터와 비교를 통해 필요한 `row`만 추가, 삭제, 변경합니다.  \n`reload` 메소드는 두 번째 인자로 옵션 객체를 받을 수 있으며, 옵션 객체의 구성은 아래와 같습니다.\n \n- `uid` : 컬렉션 뷰 내부에서 `row`를 비교하기 위한 기준이 되는 속성명입니다.\n- `reset`: 기존 `row`를 제거할지 여부를 설정합니다. 기본 값은 `true`입니다.\n- `reverse`: `row`를 아래에서 위로 추가할 수 있는 옵션입니다. 기본 값은 `false`입니다.\n\n```javascript\n// phoneNumber 속성을 기준으로, 새로 전달된 collectionData에 없는 기존 row는 제거 되며 row는 아래에서 위로 추가됩니다\nthis.reload(collectionData, { uid: 'phoneNumber', reset: true, reverse: true });\n````\n\n## getCollection\n\n컬렉션 뷰의 `getCollection` 메소드를 통해 현재의 컬렉션 데이터를 `JSON` 형태로 가져올 수 있습니다.  \n`reload` 메소드를 통해 전달한 데이터를 `rowView`에서 제어하는 경우에도 항상 최신의 데이터를 반환합니다.\n\n```javascript\n// 현재 rowView들이 가진 뷰 모델 리스트를 가져옵니다.\nconsole.log(this.getCollection());\n```"
  },
  {
    "path": "docs/dom-refs.md",
    "content": "# 뷰의 DOM 참조\n\n뷰 코드 안에서 DOM에 접근해야할 필요가 있습니다.\n뷰가 로드된 시점 이후에 DOM API를 사용하여 접근하거나 편리하게 jQuery를 이용할 수 도 있습니다.\n다음의 코드는 jQuery를 이용하여 UI내 엘리먼트를 토클하는 예제입니다.\n\n```html\n<div class=\"container\">\n    <div class=\"alert alert-success\" role=\"alert\">문제가 발생했습니다.</div>\n    <button type=\"button\" class=\"btn btn-toggle\">Toggle</button>\n</div>\n```\n\n```javascript\nWoowahan.View.create('Foo', {\n  template: Template,\n  events: {\n    'click .btn-toggle': 'onToggleElement'\n  },\n\n  onToggleElement(event) {\n    this.$el.find('.alert').toggle();\n  }\n});\n```\n\n## Refs\n\n뷰 코드 내에서 DOM 접근을 셀렉터 기반으로 기술하면 UI 구조와(CSS 네이밍 포함) 강력한 종속성으로 결합됩니다.\n결합의 강도가 강하면 UI 변경에 따른 뷰의 정상 동작을 보증할 수 없게됩니다.\nUI와(DOM) 의 결합을 느슨하게 유지하는 방법으로 DOM 참조를 제공합니다.\n다음 예제는 이전 예제와 동일하지만 DOM 참조 기능을 이용하여 다시 구현한 것입니다.\n차이점을 비교해 보세요.\n\n```html\n<div class=\"container\">\n    <div class=\"alert alert-success\" role=\"alert\" data-ref=\"alert\">문제가 발생했습니다.</div>\n    <button type=\"button\" class=\"btn btn-toggle\">Toggle</button>\n</div>\n```\n\n```javascript\nWoowahan.View.create('Foo', {\n  template: Template,\n  events: {\n    'click .btn-toggle': 'onToggleElement'\n  },\n\n  onToggleElement(event) {\n    this.$(this.refs.alert).toggle();\n  }\n});\n```\n\n뷰에서 참조할 data-ref 속성을 템플릿에 기술하면 this.refs 객체에 할당되어 DOM 로딩 후 언제든 해당 엘리먼트에 접근할 수 있습니다.\n이제 UI 변경과 상관없이 뷰는 정상 동작이 보장되는 느슨한 결합도를 갖게 되었습니다.\n\n## 폼 요소 참조하기 및 복원\n\ndata-ref 속성은 어떤 DOM 요소라도 가능합니다.\nFORM 컨트롤들은 다른 요소들과 다르게 사용자의 입력을 처리합니다.\n입력된 값들은 뷰 코드가 수집하기 전에 updateView 호출로 뷰가 새로 랜더링되면 모두 유실됩니다.\n참조로 명시된 폼 요소 중 몇 몇 타입들은 (INPUT:text, INPUT:number, TEXTAREA) 사용자가 입력한 값들을 updateView에 의해 뷰가 새로 랜더링되어도 값을 유지할 수 있는 옵션을 제공합니다.\n\n```html\n<div class=\"container\">\n    <input type=\"text\" name=\"keyword\" data-ref=\"keyword\" data-ref-form-restore=\"true\">\n    <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n    <button type=\"button\" class=\"btn btn-reset\">Reset</button>\n</div>\n```\n\n```javascript\nWoowahan.View.create('Foo', {\n  template: Template,\n  events: {\n    'click .btn-reset': 'onReset'\n  },\n\n  onReset(event) {\n    this.updateView();    \n  }\n});\n```\n\n위 예제 코드는 Reset 버튼을 클릭하여 뷰를 새로 랜더링 해도 사용자가 입력한 TEXT 값을 유지되는 것을 보여줍니다.\n"
  },
  {
    "path": "docs/event.md",
    "content": "# 이벤트\n\nUI에서 발생하는 이벤트와 이벤트 핸들러는 events 속성 설정으로 쉽게 연결할 수 있습니다.\nevents 속성은 뷰 생성시 정의하며 기본 형식은 다음과 같습니다.\n\n```javascript\nWoowahan.View.create('ViewName', {\n\n  events: {\n    \"eventName DOM-Selector\":            \"EventHandler\", // 기본 형태 설명\n    \"click .btn.btn-save\":               \"onSave\",\n    \"dbclick .nav.ico-logout\":           \"onLogout\",\n    \"keypress .form-control.txt-search\": \"onAutoSearch\"\n  },\n  \n  onSave(event) { \n    // Do something\n  },\n  \n  onLogout(event) { \n    // Do something\n  },\n  \n  onAutoSearch(event) {\n    // Do something\n  }\n  \n});\n```\n\n이벤트 핸들러는 DOM on-event 핸들러와 동일하며 같은 방식으로 작성하여 사용할 수 있습니다. 마우스 커서의 이동을 감지하여 좌표를 콘솔에 출력하고, Text Input 요소에 입력 값을 출려하는 다음 예제를 참고하세요.\n\n```javascript\nevents: {\n  'mousemove .canvas': 'detectMounsePosition',\n  'keypress .input-box': 'detectInputValue'\n},\n\ndetectMounsePosition(event) {\n  console.log('x: %s, y: %s', event.screenX, event.screenY);\n},\n\ndetectInputValue(event) {\n  console.log(event.target.value);\n}\n```\n\n## 자식 뷰와의 커뮤니케이션\n\n뷰의 행위가 뷰 내에서 모두 다루어지는 경우도 있지만 뷰 밖의 영역으로 뷰 내의 행위를 알려야하는 경우도 있습니다.\n부모 뷰와 자식 뷰간에는 더욱 더 빈번할 수 있습니다.\n자식 뷰에서 발생하는 이벤트를 부모 뷰로 보내기 위해선 다음과 같은 과정이 필요합니다.\n\n```html\n<!-- parentView 시작 -->\n<div class=\"search-form\">\n  <!-- childView 시작 -->\n  <form>\n    <input type=\"text\" name=\"input-search\">\n    <button type=\"button\" class=\"btn btn-search\">Search</button>\n  </form>\n  <!-- childView 끝 -->\n</div>\n<div>\n  <table>\n  </table>\n</div>\n<!-- parentView 끝 -->\n```\n\n```javascript\nvar childView = Woowahan.View.create('Child', {\n \n});\n\nvar parentView = Woowahan.View.create('Parent', {\n  events: {\n    'click .btn.btn-search': 'onSearch'\n  },\n    \n  viewDidMount() {\n    this.updateView('.search-form', childView);\n  },\n  \n  onSearch() {\n    // Do something... \n  }\n});\n\n```\n이 셈플과 같은 방식의 문제점은 parentView와 childView간 HTML 종속성이 만들어진다는 것입니다.\nparentView 입장에선 childView의 HTML 구조를 알아야하며 childView 입장에선 부모가 자신의 UI 중 일부의 이벤트 핸들러를 부모 뷰가 한다는 것도 기억해야합니다.\n코드로 기술되지 못하기 때문에 내용을 알지 못한다면 숨겨진 로직이 될 수 밖에 없습니다.\n\n부모 뷰와 자식 뷰간 종속성을 없애고 처리 방식도 손쉽게 할 수 있는  @이벤트가 제공됩니다.\n@이벤트를 이용하여 개선한 코드는 다음과 같습니다. \n(HTML 코드는 동일하여 반복 기술하지 않습니다)\n\n```javascript\nvar childView = Woowahan.View.create('Child', {\n  events: {\n    'click .btn.btn-search': 'onSearch'\n  },\n  \n  onSearch() {\n    this.dispatch(Woowahan.Event.create('search'));\n  }\n});\n\nvar parentView = Woowahan.View.create('Parent', {\n  events: {\n    '@search': 'onSearch'\n  }\n    \n  viewDidMount() {\n    this.updateView('.search-form', childView);\n  },\n  \n  onSearch() {\n    // Do something... \n  }\n});\n\n```\n\nparentView와 childView는 명시적으로 `search` 이벤트로 커뮤니케이션하도록 변경되었습니다.\n마크업 구조의 종속성은 제거되어 childView는 parentView와 상관 없이 마크업 구조 등을 변경할 수 있게되었습니다.\n\nchildView는 btn-search 버튼이 클릭되면 외부로 이벤트를 내보낸다는 것이 명시적인 코드로 표현되었습니다.\n숨겨진 로직은 사라졌기 때문에 명확하게 코드를 관리할 수 있게 되었습니다.\n\n이 셈플에서 두 가지 다루지 않았던 표현이 등장합니다. \n이벤트를 외부로 발행하고, 자식 뷰의 이벤트를 수신받는 표현입니다.\n\n## 이벤트 발행하기\n\n외부로 이벤트를 발행할 때도 dispatch가 사용됩니다.\ndispatch 메소드로 발행할 수 있는 이벤트를 생성하기 위해서 Woowahan.Event.create 핼퍼 함수가 제공됩니다.\n예제와 같이 생성한 이벤트를 dispatch 할 수 있습니다.\n이벤트와 함께 데이타를 전달해야 한다면 이벤트 이름 다음 인수로 데이타를 기술할 있으며 개수와 타입은 제한이 없습니다.\n\n```javascript\nthis.dispatch(Woowahan.Event.create('search', { keyword: 'javascript' }));\n```\n\n## 자식 뷰 이벤트 수신하기\n\n자식 뷰가 dispatch한 이벤트를 부모 뷰가 수신하기 위해선 단지 events 속성에 @이벤트이름 형식으로 이벤트 핸들러와 함께 지정하기만 하면 됩니다.\n\n```javascript\nevents: {\n  '@search': 'onSearch'\n}\n```\n\n@이벤트의 경우 DOM on-event와 표현과 달리 이벤트 이름 다음에 오는 selector가 생략 가능합니다.\nselector를 생략하지 않는다면 updateView로 자식 뷰를 추가할 때 명시했던 selector를 기술합니다.\n위 예제를 기준으로 한다면 다음과 같이 기술할 수 있습니다.\n\n```javascript\nevents: {\n  '@search .search-form': 'onSearch'\n}\n```\n\n자식 뷰의 이벤트 수신에 selector가 필요한 경우는 자식 뷰를 서로 다른 container에 추가한 경우입니다.\nN 개의 자식 뷰가 N 개의 container에 추가된 구조일 경우 명시적으로 selector 지정이 필요합니다.\n\n## 이벤트와 함께 입력 데이타 수집\n\n사용자가 입력한 데이타를 이벤트와 함께 수집해야하는 경우가 있습니다.\n검색창에 검색어를 입력한 후 검색 버튼을 클릭하는 UI 라면 검색 버튼의 클릭 이벤트 핸들러에선 검색창의 데이타를 가져오는 코드가 필요합니다. \n때로는 회원가입 입력 폼과 수집되어야 하는 데이타가 수십개에 이를 수 도 있습니다.\n\n웹 UI는 사용자 데이타를 입력받기 위한 다양한 폼 요소를 지원하며 요소의 타입에 따라 값을 얻어오는 방식이 다릅니다.\n각각의 방식을 개발자가 학습해야할 필요가 있고 데이타를 수집하는 반복적인 코드를 작성해야만 합니다.\n\n@이벤트 방식의 두 번째 기능은 이벤트와 데이타를 함께 결합해 주는 것입니다.\n이전 예제의 onSearch를 생각해 봅시다.\n검색 버튼이 클릭 되었을 때 search 이벤트와 함께 사용자가 입력한 검색어를 전달해야합니다.\n사용자가 입력한 검색어는 name=\"input-search\"인 INPUT 엘리먼트에 담겨 있습니다.\n관련 기능을 추가하면 다음과 같습니다.\n\n```javascript\nvar childView = Woowahan.View.create('Child', {\n  events: {\n    'click .btn.btn-search': 'onSearch'\n  },\n  \n  onSearch() {\n    var keyword = this.$el.find('input[name=keyword]').val();\n    \n    this.dispatch(Woowahan.Event.create('search', keyword));\n  }\n});\n\nvar parentView = Woowahan.View.create('Parent', {\n  events: {\n    '@search': 'onSearch'\n  },\n  \n  onSearch(keyword) {\n    // Do something... \n  }\n});\n```\n\n> this.$el은 뷰가 제공하는 DOM 접근을 위한 뷰의 jQuery DOM 참조 객체입니다. \n> jQuery 객체이며 뷰와 관련된 jQuery 연산을 동일하게 사용 가능합니다.\n\nDOM 처리가 코드로 기술되어야 하기 때문에 불편함이 발생합니다.\n@이벤트를 이용하여 DOM 처리 코드를 제거해 보겠습니다.\n\n```javascript\nvar childView = Woowahan.View.create('Child', {\n  events: {\n    'click .btn.btn-search': 'onSearch(input[name=keyword])'\n  },\n  \n  onSearch(keyword) {\n    this.dispatch(Woowahan.Event.create('search', keyword));\n  }\n});\n\n/* parentView 코드는 동일하여 생략 */\n```\n\n이벤트 핸들러 함수 표현에 수집할 데이타의 selector 를 지정함으로서 간단히 이벤트 핸들러에 데이타를 결합할 수 있습니다.\n만약 검색 옵션도 있다면 다음과 같이 되겠죠.\n이벤트 핸들러와 결합될 데이타의 수에는 제한이 없습니다. \n필요한 만큼 사용하시면 됩니다.\n\n지정된 셀렉터의 엘리먼트 타입의 형식에 맞춰 데이타가 수집됩니다.\n\n```javascript\n  events: {\n    '@click .btn-search': 'onSearch(input[name=keyword], .search.option)'\n  }\n  \n  onSearch(keyword, option) {\n    // Do search\n  }\n```\n\nFORM submit과 같이 폼 데이타를 수집해야 한다면 다음과 같이 작성할 수 있습니다.\n\n```javascript\n  events: {\n    '@submit .join-form': 'onJoin()'\n  }\n  \n  onJoin(form) {\n    /*\n     form.name\n     form.password\n     form.gender\n     ...\n    */\n    // Do Something\n  }\n```\n\n@이벤트의 selector 가 FORM인 경우 하위 FORM 요소의 모든 데이타를 수집하여 이벤트 핸들러에 전달합니다.\n\n## 어플리케이션 이벤트\n\n어플리케이션 범위의 이벤트가 지원됩니다.\n개별 뷰 범위를 떠나 앱 전체에 걸쳐 발생하는 이벤트입니다.\n새로운 작업(Action -> Reducer)이 시작되거나 모든 작업이 완료되었을 경우 각각 정의된 이벤트가 발생합니다.\n\n만약 어플리케이션 이벤트를 수신받고자 한다면 다음과 같이 할 수 있습니다.\n\n```javascript\nvar app = new Woowahan();\n\napp.on('start', function() {\n  // Do something\n  console.log(app.numberOfAction());\n  console.log(app.numberOfWorkAction());\n});\n\napp.on('finish', function() {\n  // Do something\n});\n\napp.on('error', function(errs) {\n  // Do something\n});\n```\n\n전역 이벤트 수신자에선 작업 진행 상황 및 오류 처리에 대한 처리를 어플리케이션 수준에서 - 토스트 팝업을 표시한다거나 - 구현할 할 때 유용한 구조를 제공합니다.\n"
  },
  {
    "path": "docs/first-app.md",
    "content": "# 첫 번째 앱 만들기\n\nWoowahanJS로 작성된 단일 페이지 어플리케이션은 1개 이상의 뷰 컴포넌트와 이들 뷰를 관리하는 하나의 Application으로 구성됩니다.\n\n다음 예제는 하나의 뷰와 하나의 어플리케이션 만으로 작동되는 아주 간단한 예제 코드입니다.\n\n#### hello-view.js\n\n```javascript\nimport Woowahan from 'woowahan';\n\nexport default Woowahan.View.create('Hello', {\n  template: '<h1>Hello, WoowahanJs</h1>'\n});\n```\n\n#### main.js\n\n```javascript\nimport Woowahan from 'woowahan';\nimport HelloView from './hello-view';\n\nconst app = Woowahan();\n\napp.start({\n  url: '/', container: 'body', view: HelloView\n});\n```\n\n`Woowahan.View.create` 정적 메소드로 새로운 뷰를 생성할 수 있습니다. 뷰는 이름과 옵션 객체로 구성됩니다.\n뷰 이름은 문자열이라면 어떤 제약도 없으며 뷰를 구분할 수 있는 이름을 지어주시면 됩니다.\n뷰 이름의 중복도 허용됩니다.\n다만 브라우저 콘솔에서 로그 출력시 뷰 이름이 기본으로 출력되기 때문에 용이한 식별을 위해선 충분히 식별 가능한 이름을 권장합니다.\n\n어플리케이션인 `app = Woowahan()`을 start 함으로서 전체 앱을 구동시킬 수 있습니다.\nstart의 첫 번째 파라메터는 라우팅 경로와 연결될 View의 구성 정보로 이루어진 객체를 받습니다.\n\n```javascript\napp.start({\n  url: '/',\n  view: MainView,\n  container: 'body',\n  pages: [\n    { url: 'users', container: '.contents', view: UserView },\n    { url: 'orders', container: '.contents', view: OrderView, pages: [\n        { url: ':orderno', view: OrderDetailView, pages: [\n            { url: 'edit', view: OrderEditView }\n          ] \n        },\n        { url: 'search', view: OrderSearchView }\n      ]\n    }\n  ]\n});\n```\n\n위와 같은 앱의 라우팅 경로 구성은 다음과 같이 됩니다.\n\n* / => MainView\n* /users => UserView\n* /orders => OrderView\n* /orders/10 => OrderDetailView\n* /orders/10/edit => OrderEditView\n* /orders/search => OrderSearchView\n\n`Woowahan.View.create`로 만들어진 뷰의 UI 는 HTML로 생성할 수 있으며 Woowahan.View는 이를 template 으로 기술합니다. 만약 UI 가 없는 뷰를 만든다면 아래와 같이 할 수 있습니다.\n\n```javascript\nconst emptyView = Woowahan.View.create('EmptyView');\n```\n\ntemplate에 HTML이 설정되지 않았다고 해서 실제로 View 가 아무 마크업도 없는 것은 아닙니다. HTML이 공급되지 않으면 `<div></div>`와 같은 상태가 됩니다. \n\n뷰는 UI가 필요하기 때문에 UI를 작성하기 위해서 첫 번째 셈플 코드와 같이 template에 HTML을 작성합니다. 빌드 후 브라우저를 구동하면 Hello, WoowahanJs이 표시되는 것을 보실 수 있습니다.\n\n[뷰 소개 및 기초](./view.md)\n\n"
  },
  {
    "path": "docs/popup-view.md",
    "content": "# 팝업 뷰\n\n팝업 뷰<sub>PopupView</sub>는 `Woowahan`에서 제공하는 뷰 컴포넌트입니다.\n[뷰]('./view.md')<sub>View</sub>의 기능들을 상속하며, 팝업 뷰를 나타내기 위한 기능들을 제공합니다.\n\n아래는 기본적인 팝업 뷰의 형태입니다.\n\n#### basic-popup-view.js\n\n```javascript\nimport Woowahan from 'woowahan';\nimport Template from './basic-popup-view.hbs';\n\nexport default Woowahan.PopupView.create('BasicPopupView', {\n  template: Template,\n  css: { background: '#000' },\n  overlayCss: { background: '#FFF' },\n  className: 'basic-popup',\n  overlayClassName: 'basic-popup-overlay',\n  showOverlay: true,\n  \n  viewDidMount() {\n    this.overlay.css({ background: '#FF0000' });\n  }\n});\n```\n\n## overlay\n\n오버레이<sub>overlay</sub>는 팝업 뷰의 뒤로 나타나는 딤드<sub>dimmed</sub> 영역입니다.\n\n팝업 뷰에서는 `overlay` 속성을 통해 이 영역에 접근할 수 있습니다.\n`jQuery` 객체로 제공되므로 `jQuery` 기능을 사용하여 자유롭게 제어가능합니다.\n\n## css\n\n팝업 뷰는 기본 `css`를 가지고 있습니다.\n`css` 속성으로 추가한 스타일이 기본 `css`를 덮어쓰는 형태로 적용됩니다.\n\n**기본 css 속성들**\n\n> overflowY: 'auto'  \n> display: 'block'  \n> position: 'absolute'  \n> top: '50%'  \n> left: '50%'  \n> width: '80%'  \n> maxHeight: '80%'  \n> background: '#fff'  \n> webkitTransform: 'translate(-50%, -50%)'  \n> transform: 'translate(-50%, -50%)'  \n> zIndex: 1100  \n\n## overlayCss\n\n팝업 뷰의 오버레이는 기본 `css`를 가지고 있습니다.\n`overlayCss` 속성으로 추가한 스타일들이 기본 `css`를 덮어쓰는 형태로 적용됩니다.\n\n**오버레이의 기본 css 속성들**\n\n> position: 'fixed'  \n> top: 0  \n> left: 0  \n> right: 0  \n> bottom: 0  \n> background: '#000'  \n> opacity: 0.7  \n> zIndex: 1000  \n\n## overlayClassName\n\n`overlayClassName` 속성을 통해 오버레이에 `className`을 추가할 수 있습니다.\n\n## showOverlay\n\n`showOverlay` 속성을 통해 오버레이를 노출할지 여부를 설정할 수 있습니다.\n\n## closePopup\n\n`closePopup` 메소드를 호출하여 팝업 뷰를 닫을 수 있습니다.\n팝업 뷰 스스로 닫는 경우는 `this.closePopup()` 형태로 호출할 수 있습니다.\n\n`closePopup` 메소드의 인자로 데이터를 전달할 수도 있습니다.\n\n## overlayClicked 이벤트\n\n오버레이가 클릭되는 경우 `overlayClicked` 이벤트가 발생합니다.\n`overlayClick` 이벤트를 수신하여 팝업 뷰 외부가 클릭되는 이벤트를 수신할 수 있습니다.\n\n```javascript\nexport default Woowahan.PopupView.create('BasicPopupView', {\n  events: {\n    'overlayClicked': 'onOverlayClick'\n  },\n  \n  onOverlayClick() {\n    console.log('overlay clicked');\n    \n    this.closePopup();\n  }\n});\n```\n\n## 팝업 뷰 추가 \n\n팝업 뷰를 추가하기 위해 [뷰](./view.md)의 `addPopup` 메소드를 사용합니다.\n\n```javascript\nthis.addPopup(BasicPopupView, { css, overlayCss, overlayClassName, showOverlay, buttons, popupData }, function(popupData) {\n  console.log(popupData);\n});\n```\n\n`addPopup` 메소드는 최대 3개의 인자를 받습니다.\n\n- 첫 번째 인자는 팝업으로 사용할 팝업 뷰 컴포넌트를 전달합니다. 필수인자입니다.\n- 두 번째 인자는 팝업으로 전달할 데이터입니다. 전달할 데이터가 없다면 생략할 수 있습니다.\n- 세 번째 인자는 팝업 뷰가 닫히고 나서 호출되는 콜백 함수입니다. `PopupView`에서 전달하는 데이터를 인자로 받을 수 있습니다. 콜백을 전달할 필요가 없다면 생략할 수 있습니다.\n\n두 번째 인자로 사용하는 데이터에는 팝업 뷰의 형태를 제어하는 데이터를 추가할 수 있습니다\n\n- `css`: 팝업 뷰에 `css`를 추가할 수 있습니다.\n- `overlayCss`: 팝업 뷰의 오버레이에 `css`를 추가할 수 있습니다.\n- `overlayClassName`: 팝업 뷰의 오버레이에 `className`을 추가할 수 있습니다.\n- `showOverlay`: 팝업 뷰의 오버레이를 보여줄지 여부를 `true` 또는 `false`로 제어할 수 있습니다.\n- `buttons`: 팝업 뷰의 버튼이 선택되었을 때 실행할 함수를 전달할 수 있습니다.\n- `_id` : 팝업 뷰에 `id`를 지정할 수 있습니다. 같은 `id`를 지정한 팝업 뷰를 `addPopup`하는 경우 나중에 전달된 팝업 뷰는 무시됩니다.\n\n```javascript\nthis.addPopup(BasicPopupView, {\n  css: {\n    color: '#FFF'\n  },\n  overlayCss: {\n    backgroundColor: '#000'\n  },\n  overlayClassName: 'cool-overlay',\n  showOverlay: true,\n  buttons: {\n    '#btn-ok': function() {\n      this.closePopup();\n    }\n  },\n  _id: 'coolPopup'\n});\n```"
  },
  {
    "path": "docs/project-setup.md",
    "content": "# 프로젝트 환경 구성\n\n현대의 웹 어플리케이션은 많은 컴포넌트와 페이지로 구성됩니다.\n다수의 파일을 효과적으로 구성하기 위한 다양한 방법이 존재합니다.\n\nWoowahanJS는 번들러를 이용한 구성과 Script 태그로 로딩하여 사용하는 방법 모두를 지원합니다.\n프로젝트의 특성에 맞춰 적절한 방법을 선택하실 수 있습니다.\n\n## 번들링 프로젝트\n\n많은 프로젝트 모듈들을 효과적으로 개발하기 위해서 CommonJS 또는 ES6가 지원하는 방식으로 컴포넌트를 모듈화할 수 있습니다.\n그러나 아직까지 이 방식을 지원하지 않는 브라우저가 많기 때문에 브라우저 호환성을 위해 트랜스파일링의 과정을 거치게됩니다.\n\n예제 디렉토리의 많은 앱들을 참고해주세요.\nWebpack과 Babel을 이용한 구성으로 되어있습니다.\n\n[Examples](../examples)\n\n## 번들링 하지 않는 구성\n\n간단한 프로젝트의 경우 번들링이 필요없는 구성일 수 있습니다.\nwoowahanjs 는 일반적인 라이브러리처럼 script 태그로 로딩될 수 있습니다.\n\n포함된 예제 중 타이머 예제는 번들링 하지 않고 간단히 script 태그로 로딩하여 작성되었습니다.\n[Timer example](../examples/timer)\n"
  },
  {
    "path": "docs/route.md",
    "content": "# Route\n\n어플리케이션인 `app = Woowahan()`을 start 함으로서 전체 앱을 구동시킬 수 있습니다.\nstart의 첫 번째 파라메터는 라우팅 경로와 연결될 View의 구성 정보로 이루어진 객체를 받습니다.\n\n```javascript\napp.start({\n  url: '/',\n  view: MainView,\n  container: 'body',\n  pages: [\n    { url: 'users', container: '.contents', view: UserView },\n    { url: 'orders', container: '.contents', view: OrderView, pages: [\n        { url: ':orderno', view: OrderDetailView, pages: [\n            { url: 'edit', view: OrderEditView }\n          ]\n        },\n        { url: 'search', view: OrderSearchView }\n      ]\n    }\n  ]\n});\n```\n\n위와 같은 앱의 라우팅 경로 구성은 다음과 같이 됩니다.\n\n* / => MainView\n* /users => UserView\n* /orders => OrderView\n* /orders/10 => OrderDetailView\n* /orders/10/edit => OrderEditView\n* /orders/search => OrderSearchView\n\n## 뷰에서 라우트 경로 얻기\n\n어플리케이션이 라우트 테이블 기준으로 동작시키는 뷰 이외에도 개별 뷰 컴포넌트에서 특정 라우트 경로로 이동해야하는 경우가 있습니다.\n모든 뷰에는 `this.getRouteTables` 메소드가 제공되며 이 메소드를 이용하여 app.start에 기술된 모든 라이트 경로를 얻을 수 있습니다.\n\n## getRouteTables\n\n메소드의 사용 방법은 다음과 같습니다.\n\n```javascript\n/*\n * getRouteTables (ViewName [,Params][,QueryString])\n */\n\n// UserView의 경로를 얻습니다.\nthis.getRouteTables('UserView'); /* '/users' 문자열 반환 */\n\n// OrderDetailView의 경로 반환\nthis.getRouteTables('OrderDetailView', { orderno: 3 }); /* '/orders/3' 문자열 반환 */\n// 배열을 이용한 방법. 이 경우 URL에 기술된 Params Key 순서와 입력된 배열의 순서가 일치해야 합니다.\nthis.getRouteTables('OrderDetailView', [3]); /* '/orders/3' 문자열 반환 */\n\n// OrderSearchView의 경로 반환. QueryString 포함\nthis.getRouteTables('OrderSearchView', 'keyword=1234'); /* '/orders/search?keyword=1234' 문자열 반환 */\n// params 가 있는 경우\nthis.getRouteTables('OrderSearchView', [], 'keyword=1234');\nthis.getRouteTables('OrderSearchView', {}, 'keyword=1234');\n\n// 모든 경로 목록 얻기\nlet tables = this.getRouteTables();\n\n// OrderDetailView 경로 얻기\ntables.OrderDetailView({ orderno: 3}); /* '/orders/3' 문자열 반환 */\n```\n\n라우트 경로를 얻기위해 필수적인 키는 뷰 이름이 이용됩니다.\n뷰 이름은 `Woowahan.View.create` 함수의 첫 번째 인수입니다.\n그러나 라우트 테이블에 뷰를 연결할 때 뷰 이름과 다른 이름을 지정할 수 있습니다.\n이 때는 뷰 이름을 알기위해 뷰 본체의 내용을 확인해야하는 번거로움이 발생합니다. 라우트 테이블 정의시 외부 참조용으로 뷰 이름의 Alias를 제공하며 다음과 같이 작성됩니다.\n\n```javascript\n app.start({\n   url: '/',\n   view: MainView,\n   container: 'body',\n   pages: [\n     { url: 'users', container: '.contents', view: UserView, routeName: 'UsersView' },\n     { url: 'orders', container: '.contents', view: OrderView, routeName: 'OrdersView', pages: [\n         { url: ':orderno', view: OrderDetailView, pages: [\n             { url: 'edit', view: OrderEditView }\n           ]\n         },\n         { url: 'search', view: OrderSearchView }\n       ]\n     }\n   ]\n });\n ```\n\nrouteName은 getRouteTables 호출의 키 로서 사용되며 기술하지 않으면 View 이름을 기본값으로 사용합니다.\n"
  },
  {
    "path": "docs/store.md",
    "content": "# 스토어"
  },
  {
    "path": "docs/view-model.md",
    "content": "# 뷰 모델 및 데이타 바인딩\n\n## 뷰 모델\n\n모든 뷰는 필요한 경우 상태를 가질 수 있습니다.\n뷰가 가진 상태를 `뷰 모델`이라 합니다.\n뷰 모델은 뷰의 템플릿과 결합되어 뷰의 UI를 구성합니다.\n\n뷰가 유지되는 동안 함께 유지되어야하는 상태가 있다면 initialize에서 초기화 하는 것을 권장합니다.\n\n```javascript\nWoowahan.View.create('MyView', {\n  initialize() {\n    this.setModel({\n      title: '사용자 목록'\n    });\n  }\n});\n```\n\n뷰 모델을 만들기 위해 setModel 메소드가 제공됩니다.\n인자로 모델 객체를 받으며 형식에 제한은 없습니다.\n\n## 상태 주입 및 변경\n\n뷰를 랜더링하기전 viewWillMount에서 상태를 변경하거나 추가 할 수 있습니다.\n\n#### myview.hbs\n```handlebars\n<time{{#if holiday}} class=\"holiday\"{{/if}}>{{today}}</time>\n```\n\n```javascript\nimport Template from './myview.hbs';\n\nWoowahan.View.create('MyView', {\n  template: Template,\n  initialize() {\n    this.setModel({\n      today: '2001-10-21'\n    });\n    \n    this.super();\n  },\n  \n  viewWillMount(renderData) {\n    let today = new Date(this.getModel('today'));\n    let day = today.getDay();\n    \n    if (day === 0 || day === 6) {\n      renderData.holiday = true;\n    } else {\n      renderData.holiday = false;\n    }\n    \n    return renderData;\n  },\n  \n  viewDidMount($el) {\n    console.log(this.getModel('holiday')); /* undefined */\n  }\n});\n```\n\n뷰가 랜더링된 이후 HTML 결과는 다음과 같습니다.\n\n```html\n<time class=\"holiday\">2001-10-21</time>\n```\n\n템플릿과 결합하기 전 예제에선 today가 휴일인지 아닌지를 검사하여 holiday 값을 추가합니다.\n이때 추가된 holiday 값은 템플릿 내에서 참조되어 적용됩니다.\n그러나 랜더링이 끝난 후 호출되는 viewDidMount에서 getModel 로 holiday 값을 모델에서 얻고자 하면 값이 없습니다. 이는 viewWillMount로 전달되는 renderData가 랜더링 직전 사용되는 일회용 값 이라는 것을 의미합니다.\n\n## 데이타 바인딩\n\n모델로 설정된 상태 값은 HTML 태그에 연결시킬 수 있습니다.\n다음 예제는 버튼을 누르면 타이머가 시작되고 다시 버튼을 누르면 타이머가 종료되는 간단한 예제입니다.\n전체 코드는 examples/timer에서 확인하실 수 있습니다.\n\n```handlebars\n<button data-role=\"bind\" data-name=\"buttonLabel\">{{buttonLabel}}</button>\n<time data-role=\"bind\" data-name=\"time\">{{time}}</time>\n```\n\n```javascript\nWoowahan.View.create('TimerView', {\n  template: Template,\n\n  events: {\n    'click button': 'onTimerToggle'\n  },\n\n  initialize() {\n    this.updateHandle = null;\n    this.startTime = 0;\n    \n    this.setModel({ \n      time: this.startTime, \n      buttonLabel: 'START' \n    });\n\n    this.super();\n  },\n\n  onTimerToggle() {\n    if (this.updateHandle) this.stopTimer();\n    else this.startTimer();\n  },\n\n  stopTimer() {\n    clearInterval(this.updateHandle);\n\n    this.updateHandle = null;\n    this.setModel({ buttonLabel: 'START' });\n  },\n\n  startTimer() {\n    this.setModel({ buttonLabel: 'STOP' });\n    this.startTime = Date.now();\n\n    this.updateHandle = setInterval(() => {\n      this.setModel({ \n        time: (Date.now() - this.startTime) / 1000 \n      });\n    }, 1000/30);\n  },\n  \n  viewWillUnmount() {\n    this.updateHandle && clearInterval(this.updateHandle);\n  }\n});\n```\n\n#### 셈플 코드 실행 화면\n![타이머 예제 실행 화면](../assets/timer.gif)\n\n데이타 바인딩은 HTML 태그에 data-role=\"bind\" 속성으로 표현합니다.\n바인딩된 태그와 연결될 모델 내 키 값은 data-name=\"model-attr-name\" 으로 지정됩니다.\ndata-type에 따라 연결된 모델 속성 값이 변경되면 해당 태그를 다시 랜더링합니다.\n\n지원하는 data-type 은 text, select 등이 있고 지원 타입 현황에서 확인하실 수 있습니다.\n\n데이타 바인딩은 One-way 바인딩 방식입니다.\n즉, 모델의 값이 변경되면 UI에 적용될 뿐 UI에 값이 변경된다 해서 Model에 값을 반영하진 않습니다.\n양방향 바인딩을 - Two-way - 지원하는 AngularJS와는 다른 단방향 바인딩 방식을 지원합니다.\n\n"
  },
  {
    "path": "docs/view.md",
    "content": "# 뷰\n\n\n뷰는 어플리케이션을 구성하는 컴포넌트의 기본 단위입니다.\n뷰는 라우터에 연결될 수 있으며 하나 이상의 자식 뷰를 가질 수 있습니다.\n뷰는 재사용될 수 있도록 의도적인 구성이 아니라면 구성 독립성을 지원합니다.\n즉, 어떤 뷰든 자식 뷰도 될 수 있고 부모 뷰도 될 수 있습니다.\n\n앞서 가장 간단한 뷰를 만드는 방법을 보았습니다. \n이제 실무에서 사용될 수 있는 기본적인 뷰 형태를 살펴보겠습니다.\n\n##### basic-view.hbs\n\n```handlebars\n<h1>{{lastName}} {{firstName}}</h1>\n<p>\n  <button id=\"how-old-are-you\">나이가 몇 살 일까요?</button>\n</p>\n```\n\n##### basic-view.js\n\n```javascript\nimport Woowahan from 'woowahan';\nimport Template from 'basic-view.hbs';\n\nexport default Woowahan.View.create('BasicView', {\n  tagName: 'div',\n  className: 'main light',\n  template: Template,\n  \n  events: {\n    'click #how-old-are-you': 'onHowOldAreYou'\n  },\n  \n  initialize() {\n    this.setModel({\n      firstName: '길동',\n      lastName: '홍',\n      age: 573\n    });\n    \n    this.super();\n  },\n  \n  viewWillMount(renderData) {\n    this.log(renderData);\n    \n    return renderData;\n  },\n  \n  viewDidMount($el) {\n  \n  },\n  \n  viewWillUnmount() {\n  \n  },\n  \n  onHowOldAreYou() {\n    alert(this.getModel('age'));\n  }\n});\n```\n\n## 뷰 초기화\n\n뷰가 생성시 initialize 함수가 작성되어 있다면 가장 먼저 실행됩니다.\n따라서 뷰 컴포넌트 생성시 필요한 초기화 작업을 기술할 수 있습니다.\n만약 초기화 작업이 필요 없다면 initialize 함수는 생략할 수 있습니다.\n\n## 뷰 모델\n\n뷰는 뷰가 유지되고 있는 동안 스스로의 상태 즉, 모델을 가질 수 있습니다.\n모델은 Javascript의 기본 객체의 형태지만 추가적으로 유용한 몇 가지 기능을 제공합니다.\n모델의 디자인은 뷰가 어떤 작업을 수행하느냐에 따라 달라질 수 있으며 이는 전적으로 개발자가 결정해야할 문제입니다.\n\n모델은 상황에 따라 initialize 에서 처음 설정하기도 하며, 외부에서 주입된 데이타로 구성될 수 도 있습니다.\n어떤 경우라 하더라도 모델을 설정하거나 설정된 모델의 값을 얻어올 때 this.setModel()과 this.getModel() 메소드를 사용하십시오.\n\n예제 코드의 initialize 에서 setModel을 이용하여 모델을 설정하고 있습니다.\nsetModel은 반복하여 여러번 호출될 수 있으며 호출시 포함된 키가 중복되지 않는다면 이전의 키 값은 유지됩니다.\n\n```javascript\nthis.setModel({ name: 'foo' }); // name=foo  <- new key\nthis.setModel({ gender: 'male' }); // name=foo, gender=male <- new key\nthis.setModel({ name: 'bar', age: 30 }); // name=bar, gender=male, age=30 <- new & edit key\n```\n\ngetModel은 뷰가 가지고 있는 모델의 값을 반환합니다. this.getModel('name') 이라면 'bar' 값을 반환합니다.\ngetModel의 인자값 없이 호출되면 model 값 전체를 반환합니다.\n반환되는 값은 순수한 Javascript Object 입니다.\n\n```javascript\nvar model = this.getModel();\n/*\nmodel = { name: 'bar', gender: 'male', age: 30 }\n*/\n```\n\n다음과 같은 코드의 의도가 모델의 값을 변경하는 것 이었다면 의도대로 작동하지 않습니다.\n```javascript\nvar model = this.getModel();\n\nmodel.name = 'foo'; // 뷰 모델 name 값은 변경되지 않습니다.\n\nthis.setModel({ name: 'foo' }); // 뷰 모델 name 값이 'foo'로 변경됩니다.\n```\n\n모델의 값을 변경하려 한다면 반드시 setModel을 사용하십시오.\n\n## 템플릿\n\nUI를 구성하는 HTML은 기본적으로 Template 문자열입니다.\nWoowahanJS 0.1.* 버전에선 아쉽지만 Handlebars 단일 템플릿 엔진만을 지원합니다.\nHandlebars 템플릿 파일을 import 구문을 이용하여 사용하는 것은 [프로젝트 환경 구성](./project-setup.md)항목에 자세히 설명되어 있습니다.\n\n뷰의 UI가 화면에 그려질 때 - 이를 랜더링되었다 라고 표현하겠습니다 - 뷰의 모델 데이타와 합성됩니다.\n따라서 템플릿 작성자는 뷰가 어떤 형태의 모델 데이타를 제공하는지 알아야합니다. \n뷰를 개발하는 개발자와 UI 엔지니어가 다르다면 모델의 디자인에 대해서 충분히 협의되어야합니다.\n\nHandlebars 템플릿 엔진은 다양한 표현식을 제공하며 이에대한 학습이 필요합니다.\n심화 과정에서 실무에 필요한 상세한 내용을 학습할 수 있으나 Handlebars가 제공하는 기본적인 정보는 [Handlebars 공식 사이트](http://handlebarsjs.com)에서 확인하실 수 있습니다.\n\n## 뷰 태그\n\n뷰의 최상위 DOM 엘리먼트는 지정하지 않는다면 항상 DIV 입니다.\n뷰의 형태에 따라 필요한 Tag로 변경할 수 있으며 tagName 으로 설정됩니다.\ntagName은 당연하게도 자식 요소를 가질 수 있는 Tag여야하며 그렇지 않은 BR 등은 사용할 수 없습니다.\n\n## 뷰 클래스\n\ntagName의 class 속성입니다.\n\n## 뷰 라이프사이클\n\n뷰 컴포넌트는 `initialize` -> `viewWillMount` -> **_rendering_** -> `viewDidMount` -> `viewWillUnmount` -> `remove` 와 같은 라이프사이클을 가집니다. \ninitialize는 뷰 생성시 단 한번만 실행되며 viewWillMount <----> viewWillUnmount는 1번 이상 반복되어 실행될 수 있습니다.\n\n개발자는 랜더링에(Rendering) 직접적으로 관여할 수 없지만 랜더링되기 전과 랜더링 완료 후에 필요한 작업을 주입할 수 있습니다.\n(랜더링이란 뷰의 템플릿과 뷰의 모델을 합성하여 완성된 HTML 문자열을 만들고 DOM로딩을 수행하는 과정을 의미합니다)\n\nviewWillMount에서 랜더링에 사용되는 모델 데이타를 수정할 수 있습니다.\n인수로 제공되는 renderData를 변경 함으로서 랜더링에 간접적으로 개입할 수 있습니다.\n모델 데이타 수정이 완료되면 반드시 renderData를 반환합니다.\n반환하지 않을 경우 변경된 데이타는 랜더링시 적용되지 않고 원래의 모델 데이타가 적용됩니다.\n\nviewWillMount 에서 변경한 renderData는 뷰 모델의 사본 객체이며 따라서 실제 뷰 모델을 변경시키지는 않습니다.\n다음 코드에서 올바른 viewWillMount 작성법과 올바르지 않은 viewWillMount 작성법을 확인할 수 있습니다.\n\n```javascript\n/*\n * Good\n */\nviewWillMount(renderData) {\n  renderData.name = `이름은 ${renderData.name}`;\n  return renderData;\n}\n\n/*\n * Bad - renderData를 반환하지 않음\n */\nviewWillMount(renderData) {\n  renderData.name = `이름은 ${renderData.name}`;\n}\n\n/*\n * Bad - 모델값을 직접 변경. 모델 값은 변경되나 랜더링에 반영되지 않음\n */\nviewWillMount(renderData) {\n  this.setModel({ name: `이름은 ${renderData.name}` });\n  return renderData;\n}\n```\n\nviewDidMount는 랜더링이 완료되고 DOM로딩이 완료된 직후에 호출됩니다.\n인자로는 제공되는 $el은 뷰의 DOM 객체이며 jQuery 객체로 제공되기 때문에 jQuery 기능을 완전하게 사용할 수 있습니다.\n\n```javascript\nviewDidMount($el) {\n  $el.find('.switch').toggleClass('on');\n}\n```\n\n## 자식 뷰\n\n모든 뷰는 자식 뷰 즉, 하위 뷰 요소를 가질 수 있습니다.\nUI를 구성함에 있어 하나의 거대한 단일 뷰로 디자인할 것인지, 아니면 좀 더 작은 단위의 UI요소로 분해하여 조립할지는 전적으로 개발자의 디자인에 의존합니다.\n\n그러나 아주 단순한 앱이 아니라면 대부분의 앱은 여러개의 뷰로 구성됩니다.\n이렇게 복수개의 뷰로 구성될 때 필연적으로 뷰와 뷰 사이에 상위 뷰와 하위 뷰 관계가 만들어집니다.\n상위 뷰 즉, 부모 뷰는 자식 뷰를 포함하기 위한 컨테이너를 제공하여야 합니다.\n동시에 추가되는 자식 뷰가 1개 이상이라면 1개 이상의 컨테이너를 가진 HTML 태그 구조가 필요합니다.\n\n뷰 관리를 위해 addView, updateView, removeView 메소드가 제공됩니다.\naddView 또는 updateView에 자식 뷰를 지정함으로써 자식 뷰를 추가하거나 업데이트 할 수 있습니다.\naddView는 updateView의 alias 메소드입니다. 사실상 두 메소드는 동일하며 맥락에 따라 선택하여 사용하십시오.\n\n```javascript\nimport Woowahan from './woowahan';\nimport ChildView1 from './child1';\nimport CHildView2 from './child2';\n\nWoowahan.View.create('ParentView', {\n\n  viewDidMount($el) {\n    this.addView('.nav', ChildView1);\n    this.addView('.dashboard', ChildView2);\n  }\n\n});\n```\n\n자식 뷰에게 데이타를 넘겨줄 필요가 있다면 updateView, addView의 세번째 인수로 전달할 수 있으며 세번째 인수는 생략 할 수 있습니다.\n\n```javascript\nthis.addView('.nav',ChildView,{current:'main'})\nthis.updateView('.nav', ChildView, { current: 'sub' });\n```\n\n자식 뷰는 부모로 부터 전달된 데이타를 getModel로 참조할 수 있습니다.\nsetModel로 수정도 가능하며 viewWillMount 의 renderData는 부모로 부터 받은 데이타가 전달됩니다.\n\n```javascript\nthis.getModel(); // 전체 데이타 반환\nthis.getModel('address'); // address 값 반환\nthis.setModel({ age: 10 }); // age 값 변경\n```\n\nupdateView는 뷰의 추가 뿐만 아니라 업데이트도 관장합니다.  \n하지만 뷰를 추가 할 때는 더 명확하고 정확한 처리가 가능한 addView 함수를 사용합니다.    \n자식 뷰의 변경이 발생한다면 updateView를 호출하면 됩니다.  \n이것은 updateView 메소드가 자식의 라이프사이클을 완전히 통제한다는 것을 의미합니다.\n\n## 뷰 새로 그리기\n\nupdateView는 자식 뷰 관련 기능 뿐만 아니라 현재 뷰의 UI를 다시 랜더링할 수 있는 기능도 제공합니다. \n뷰가 자신을 다시 그려야하는 경우는 언제 발생할까요? 뷰 데이타가 변경되고 변경사항이 UI에 반영되어야 할 때 뷰를 새로 그려야할 것입니다. \n이런 경우 updateView를 인수 없이 호출하면 현재 뷰를 다시 그리게 되며 이것은 viewWillUnmount -> viewWillMount -> rendering -> viewDidMount 주기를 다시 실행한다는 것을 의미합니다.\n\n## 뷰 삭제하기\n\n뷰를 삭제하고자 할 때는 removeView 함수를 호출하면 됩니다.  \nremoveView는 자식 뷰를 삭제하고자 할 때 사용되며 인자는 자신이 삭제하고자 하는 뷰와 mount되어있는 container를 인자로 넘겨줍니다.  \n\n```javascript\nthis.removeView('.nav'); // .nav와 mount 되어있는 뷰를 삭제\n```"
  },
  {
    "path": "examples/README.md",
    "content": "# 예제\n\n## helloword\n\nWoowahanJS판 HelloWorld 입니다.\n\n## bind\n\nOne-way 데이타 바인딩의 구현한 간단한 예제입니다.\n\n## listview\n\nAPI 서버로 부터 유입된 컬렉션 데이타를 목록 뷰로 표시하는 전형적인 예제입니다.\n간단하지만 WoowahanJS의 전반적인 구성을 볼 수 있습니다.\n\n## modal\n\n웹앱 전역에서 사용할 공통 뷰 컴포넌트를 등록하고 사용하는 방법을 볼 수 있습니다.\n부트스트랩의 모달 뷰 기능을 사용합니다.\n\n## route\n\nSPA 웹앱 구조에서 라우팅을 이용하는 방법을 볼 수 있습니다.\n\n## schema\n\n액션의 메세지의 구조를 정의하고 데이타를 검증하는 Schema 기능의 간단한 예제입니다.\n\n## timer\n\nOne-way 바인딩을 이용하여 script 태그로 WoowahanJS를 로딩하는 타이머  표시 예제입니다.\n\n## todo\n\n[TODO MVC](http://todomvc.com)에서 제안한 TODO App의 WoowahaJS 버전입니다.\n다른 프레임웍과 WoowahanJS의 앱 작성 방법이 어떻게 다른지 확인할 수 있습니다.\n\n## hello-yarn\n\n[Yarn](https://yarnpkg.com/)과 [Webpack](https://webpack.js.org/)을 사용한 최소 예제입니다.\n"
  },
  {
    "path": "examples/bind/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/bind/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('lib', () => {\n  gulp.src(['node_modules/bootstrap/dist/**/*'])\n    .pipe($.size({ title : 'lib:js/css folder structure' }))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'lib', 'html']));\n"
  },
  {
    "path": "examples/bind/hello-view.hbs",
    "content": "<div>\n  <select id=\"sel-depth1\" class=\"form-control form-control-sm\" data-role=\"bind\" data-name=\"depth1\" data-type=\"select\">\n  </select>\n  <select id=\"sel-depth2\" class=\"form-control form-control-sm\" data-role=\"plugin\" data-plugins=\"depth2 => select\">\n  </select>\n</div>\n<div>\n  <p data-role=\"plugin\" data-plugins=\"selectedMenu=>text+selectedMenu=>deco\"></p>\n</div>\n<div>\n  <label><input id=\"ckb-sel\" type=\"checkbox\"> 전체 선택</label>\n  <ul>\n    <li><label><input type=\"checkbox\" data-role=\"bind\" data-name=\"selectAll\" data-type=\"checkbox\"> 선택</label></li>\n    <li><label><input type=\"checkbox\" data-role=\"bind\" data-name=\"selectAll\" data-type=\"checkbox\"> 선택</label></li>\n    <li><label><input type=\"checkbox\" data-role=\"bind\" data-name=\"selectAll\" data-type=\"checkbox\"> 선택</label></li>\n    <li><label><input type=\"checkbox\" data-role=\"bind\" data-name=\"selectAll\" data-type=\"checkbox\"> 선택</label></li>\n    <li><label><input type=\"checkbox\" data-role=\"bind\" data-name=\"selectAll\" data-type=\"checkbox\"> 선택</label></li>\n  </ul>\n</div>"
  },
  {
    "path": "examples/bind/hello-view.js",
    "content": "import Woowahan from '../../index';\nimport Template from './hello-view.hbs';\n\nconst sampleData = {\n  'korean': ['맛집', '산들애 송파점', '본가 한식 전문'],\n  'chinese': ['일공중식', '청 한남점', '태가원'],\n  'western': [{ label: 'LA 청국장', value: 'la' }, { label: '뉴욕 비지찌개', value: 'ny', selected: true }],\n  'etc': '없음'\n};\n\nexport default Woowahan.View.create('Hello', {\n  template: Template,\n\n  events: {\n    '@change #sel-depth1': 'onChangeDepth1(#sel-depth1)',\n    '@change #sel-depth2': 'onChangeDepth2(#sel-depth2)',\n    '@change #ckb-sel': 'onChangeSel(#ckb-sel)'\n  },\n\n  initialize() {\n    this.setModel({\n      depth1: [\n        { label: '한식', value: 'korean' },\n        { label: '중식', value: 'chinese' },\n        { label: '양식', value: 'western' },\n        { label: 'etc', value: 'etc' }\n      ],\n      depth2: sampleData['korean'],\n      selectAll: false\n    });\n\n    this.super();\n  },\n\n  onChangeDepth1(val) {\n    this.setModel({ depth2: sampleData[val] });\n  },\n\n  onChangeDepth2(val) {\n    this.setModel({ selectedMenu: val });\n  },\n\n  onChangeSel(val) {\n    this.setModel({ selectAll: val });\n  }\n});\n"
  },
  {
    "path": "examples/bind/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <link rel=\"stylesheet\" href=\"css/bootstrap.min.css\">\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n  <div id=\"content\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/bind/main.js",
    "content": "import Woowahan from '../../index';\nimport HelloView from './hello-view';\nimport { TextDecoPlugin } from './plugin';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nvar app = new Woowahan();\n\napp.use(Woowahan.Plugin('deco', TextDecoPlugin));\n\napp.start({\n  url: '/',\n  container: '#content',\n  view: HelloView\n});"
  },
  {
    "path": "examples/bind/package.json",
    "content": "{\n  \"name\": \"helloworld\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {\n    \"bootstrap\": \"^3.3.7\"\n  }\n}\n"
  },
  {
    "path": "examples/bind/plugin/index.js",
    "content": "export const TextDecoPlugin = (element, value) => {\n  const text = $(element).text();\n\n  $(element).text(text === '없음' ? '없는 항목입니다.' : `+ ${text} +`);\n};"
  },
  {
    "path": "examples/bind/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/collection/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/collection/collection-first.js",
    "content": "import Woowahan from '../../index';\n\nconst RowView = Woowahan.ItemView.create('RowView', {\n  template: '<li></li>',\n\n  viewDidMount($el) {\n    $el.text(this.getModel('name'));\n  }\n});\n\nexport default Woowahan.CollectionView.create('CollectionViewFirst', {\n  template: '<ul id=\"rowContainer\"></ul>',\n  rowContainer: '#rowContainer',\n  rowView: RowView,\n\n  viewDidMount() {\n    this.reload(this.getModel('items'), { uid: 'name' });\n  },\n\n  viewWillUnmount() {\n    this.reload();\n  }\n});"
  },
  {
    "path": "examples/collection/collection-second.js",
    "content": "import Woowahan from '../../index';\n\nconst RowItemView = Woowahan.CollectionView.create('RowItemView', {\n  template: '<li></li>',\n\n  viewDidMount($el) {\n    $el.text(this.getModel('name'));\n  }\n});\n\nconst RowItemListView = Woowahan.CollectionView.create('RowItemListView', {\n  template: '<ul class=\"rowItemContainer\"></ul>',\n  rowContainer: '.rowItemContainer',\n  rowView: RowItemView,\n\n  viewDidMount() {\n    this.reload(this.getModel('list'));\n  }\n});\n\nconst RowView = Woowahan.ItemView.create('RowView', {\n  template: '<li><span class=\"itemName\"></span><div class=\"subItemContainer\"></div></li>',\n\n  viewDidMount($el) {\n    const model = this.getModel();\n\n    $el.find('.itemName').text(model.name);\n\n    this.updateView('.subItemContainer', RowItemListView, { list: model.sub });\n  }\n});\n\nexport default Woowahan.CollectionView.create('CollectionViewSecond', {\n  template: '<ul id=\"rowContainer\"></ul>',\n  rowContainer: '#rowContainer',\n  rowView: RowView,\n\n  viewDidMount() {\n    this.reload(this.getModel('items'), { uid: 'name' });\n  },\n\n  viewWillUnmount() {\n    this.reload();\n  }\n});"
  },
  {
    "path": "examples/collection/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'html']));\n"
  },
  {
    "path": "examples/collection/hello-view.js",
    "content": "import Woowahan from '../../index';\nimport CollectionFirst from './collection-first';\nimport CollectionSecond from './collection-second';\n\nexport default Woowahan.View.create('Hello', {\n  template: '<h1>Hello, WoowahanJs</h1><button id=\"btnUpdateFirst\">UPDATE</button><div id=\"collectionFirst\"></div><button id=\"btnUpdateSecond\">UPDATE</button><div id=\"collectionSecond\"></div>',\n\n  firstItems: [\n    { name: 'firstItem0' },\n    { name: 'firstItem1' },\n    { name: 'firstItem2' },\n    { name: 'firstItem3' },\n    { name: 'firstItem4' }\n  ],\n\n  secondItems: [\n    { name: 'secondItem0', sub: [{ name: 'secondSubItem' }] },\n    { name: 'secondItem1', sub: [{ name: 'secondSubItem' }] },\n    { name: 'secondItem2', sub: [{ name: 'secondSubItem' }] },\n    { name: 'secondItem3', sub: [{ name: 'secondSubItem' }] },\n    { name: 'secondItem4', sub: [{ name: 'secondSubItem' }] },\n  ],\n\n  events: {\n    'click #btnUpdateFirst': 'onClickUpdateFirst',\n    'click #btnUpdateSecond': 'onClickUpdateSecond'\n  },\n\n  viewDidMount() {\n    this.collectionFirst = this.updateView('#collectionFirst', CollectionFirst, { items: this.firstItems });\n    this.collectionSecond = this.updateView('#collectionSecond', CollectionSecond, { items: this.secondItems });\n  },\n\n  onClickUpdateFirst() {\n    this.firstItems = this.collectionFirst.getCollection();\n    this.firstItems.push({ name: `firstItem${this.firstItems.length}` });\n\n    this.updateView('#collectionFirst', CollectionFirst, { items: this.firstItems });\n  },\n\n  onClickUpdateSecond() {\n    this.secondItems = this.collectionSecond.getCollection();\n    this.secondItems.push({ name: `secondItem${this.secondItems.length}`, sub: [{ name: 'secondSubItem' }] });\n\n    this.updateView('#collectionSecond', CollectionSecond, { items: this.secondItems });\n  }\n});\n"
  },
  {
    "path": "examples/collection/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n  <div id=\"content\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/collection/main.js",
    "content": "import Woowahan from '../../index';\nimport HelloView from './hello-view';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nvar app = new Woowahan();\n\napp.start({\n  url: '/',\n  container: '#content',\n  view: HelloView\n});"
  },
  {
    "path": "examples/collection/package.json",
    "content": "{\n  \"name\": \"helloworld\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {}\n}\n"
  },
  {
    "path": "examples/collection/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' }\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/domrefs/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/domrefs/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('lib', () => {\n  gulp.src(['node_modules/bootstrap/dist/**/*'])\n    .pipe($.size({ title : 'lib:js/css folder structure' }))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'lib', 'html']));\n"
  },
  {
    "path": "examples/domrefs/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <link rel=\"stylesheet\" href=\"css/bootstrap.min.css\">\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n</body>\n</html>\n"
  },
  {
    "path": "examples/domrefs/main-view.hbs",
    "content": "<div class=\"container\">\n    <h1>뷰의 DOM 참조</h1>\n\n    <div class=\"alert alert-success\" role=\"alert\" data-ref=\"alertMessage\">이 메세지가 보이나요? 토글 버튼을 눌러 사라지게 해 보세요.</div>\n\n    <input type=\"text\" class=\"form-control\" data-ref=\"text1\">\n    <input type=\"text\" class=\"form-control\" data-ref=\"text2\" data-ref-form-restore=\"true\" placeholder=\"text\">\n    <input type=\"number\" class=\"form-control\" data-ref=\"number1\" data-ref-form-restore=\"true\" placeholder=\"number\">\n    <input type=\"tel\" class=\"form-control\" data-ref=\"tel1\" data-ref-form-restore=\"true\" placeholder=\"tel\">\n\n    <input type=\"checkbox\" data-ref=\"checkbox1\" data-ref-form-restore=\"true\">\n\n    <select class=\"form-control\" name=\"skinColor\" data-ref=\"skinColor\" data-ref-form-restore=\"true\">\n        <option value=\"white\">White</option>\n        <option value=\"yellow\">Yellow</option>\n        <option value=\"black\">Black</option>\n    </select>\n\n    <textarea class=\"form-control\" data-ref=\"text3\" data-ref-form-restore=\"true\"></textarea>\n\n    <select class=\"form-control\" data-role=\"bind\" data-name=\"peopleColor\" data-type=\"select\" data-ref=\"peopleColor\" data-ref-form-restore=\"true\"></select>\n\n    <button type=\"button\" class=\"btn btn-default btn-toggle\">Toggle</button>\n    <button type=\"button\" class=\"btn btn-default btn-update-view\">Update View</button>\n\n    <a href=\"/#/other\" class=\"btn btn-default btn-toggle\">다른 뷰</a>\n</div>\n"
  },
  {
    "path": "examples/domrefs/main-view.js",
    "content": "import Woowahan from '../../index';\nimport Template from './main-view.hbs';\n\nconst peopleColors = [\n  { color: 'white', country: '미국' },\n  { color: 'white', country: '영국' },\n  { color: 'white', country: '프랑스' },\n  { color: 'white', country: '독일' },\n  { color: 'yellow', country: '한국' },\n  { color: 'yellow', country: '중국' },\n  { color: 'yellow', country: '일본' },\n  { color: 'black', country: '캐냐' },\n  { color: 'black', country: '우간다' },\n  { color: 'black', country: '남아프리카공화국' },\n  { color: 'white', country: '러시아' }\n];\n\nexport default Woowahan.View.create('MainView', {\n  template: Template,\n\n  events: {\n    'click .btn-toggle': 'onToggle',\n    'click .btn-check-value': 'onCheckValue',\n    'click .btn-update-view': 'onUpdateView',\n    'change select[name=skinColor]': 'onChangeSkinColor'\n  },\n\n  viewDidMount() {\n    // console.log(this.refs);\n  },\n\n  onChangeSkinColor(event) {\n    this.setModel({\n      peopleColor: peopleColors.filter(p => p.color == event.target.value).map(p => ({ label: p.country, value: p.color }))\n    });\n\n    $(this.refs.peopleColor).css('background-color', event.target.value);\n  },\n\n  onToggle() {\n    $(this.refs.alertMessage).toggle();\n  },\n\n  onUpdateView() {\n    this.updateView();\n  }\n});\n"
  },
  {
    "path": "examples/domrefs/main.js",
    "content": "import Woowahan from '../../index';\nimport MainView from './main-view';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nvar OtherView = Woowahan.View.create('OtherView', {\n  template: '<h1>Other View</h1>'\n});\n\nvar app = new Woowahan();\n\napp.start({\n  url: '/', container: 'body', view: MainView, pages: [\n    { url: 'other', view: OtherView }\n  ]\n});"
  },
  {
    "path": "examples/domrefs/package.json",
    "content": "{\n  \"name\": \"domrefs\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {\n    \"bootstrap\": \"^3.3.7\"\n  }\n}\n"
  },
  {
    "path": "examples/domrefs/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/hello-yarn/README.md",
    "content": "# hello-yarn\n\n[Yarn](https://yarnpkg.com/) 설치:\n\n```\n$ npm install -g yarn\n```\n\n개발 도구 설치:\n\n```\n$ yarn add --dev webpack webpack-dev-server@2\n```\n\nWoowahanJS 설치:\n\n```\n$ yarn add woowahan\n```\n\n[webpack-dev-server](https://webpack.js.org/guides/development/#webpack-dev-server) 실행:\n\n```\n$ yarn run webpack-dev-server\n```\n\n또는 `package.json`에 개발 서버를 실행하는 스크립트 추가:\n\n```json\n\"scripts\": { \"start\": \"webpack-dev-server\" }\n```\n\n```\n$ yarn start\n```\n\n웹 브라우저로 확인:\n\n```\n$ open http://localhost:8080/\n```\n"
  },
  {
    "path": "examples/hello-yarn/app/hello-view.js",
    "content": "import Woowahan from '../../../index';\n\nexport default Woowahan.View.create('Hello', {\n  template: '<h1>Hello, WoowahanJS</h1>'\n});\n"
  },
  {
    "path": "examples/hello-yarn/app/index.js",
    "content": "import Woowahan from '../../../index';\nimport HelloView from './hello-view';\n\nconst app = new Woowahan();\n\napp.start({\n  url: '/',\n  container: '#app',\n  view: HelloView\n});\n"
  },
  {
    "path": "examples/hello-yarn/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n  <meta charset=\"utf-8\" />\n  <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n  <title>WoowahanJS</title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n</head>\n<body>\n  <div id=\"app\"></div>\n  <script src=\"https://code.jquery.com/jquery-3.2.1.slim.min.js\"></script>\n  <script src=\"./bundle.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "examples/hello-yarn/package.json",
    "content": "{\n  \"scripts\": {\n    \"start\": \"webpack-dev-server\"\n  },\n  \"devDependencies\": {\n    \"webpack\": \"^2.3.2\",\n    \"webpack-dev-server\": \"^2.4.2\"\n  },\n  \"dependencies\": {}\n}\n"
  },
  {
    "path": "examples/hello-yarn/webpack.config.js",
    "content": "module.exports = {\n  entry: './app/index.js',\n  output: {\n    filename: 'bundle.js',\n    path: __dirname\n  }\n};\n"
  },
  {
    "path": "examples/helloworld/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/helloworld/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'html']));\n"
  },
  {
    "path": "examples/helloworld/hello-view.js",
    "content": "import Woowahan from '../../index';\n\nexport default Woowahan.View.create('Hello', {\n  template: '<h1>Hello, WoowahanJs</h1>'\n});\n"
  },
  {
    "path": "examples/helloworld/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n  <div id=\"content\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/helloworld/main.js",
    "content": "import Woowahan from '../../index';\nimport HelloView from './hello-view';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nvar app = new Woowahan();\n\napp.start({\n  url: '/',\n  container: '#content',\n  view: HelloView\n});"
  },
  {
    "path": "examples/helloworld/package.json",
    "content": "{\n  \"name\": \"helloworld\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {}\n}\n"
  },
  {
    "path": "examples/helloworld/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' }\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/listview/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/listview/action/index.js",
    "content": "export const FETCH_USERS = 'FETCH_USERS';\nexport const FETCH_ONE_USER = 'FETCH_ONE_USER';"
  },
  {
    "path": "examples/listview/global.config.js",
    "content": "export default {\n  Request: {\n    Timeout: 3000\n  }\n};\n"
  },
  {
    "path": "examples/listview/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar environment = $.util.env.type || 'development';\nvar isProduction = environment === 'production';\nvar webpackConfig = require('./webpack.config.js')[environment];\n\nvar port = $.util.env.port || 1337;\nvar src = 'app';\nvar dist = 'dist';\nvar buildTaskPack = ['lib', 'html', 'scripts'];\n\nvar autoprefixerBrowsers = [\n  'ie >= 9',\n  'ie_mob >= 10',\n  'ff >= 30',\n  'chrome >= 34',\n  'safari >= 6',\n  'opera >= 23',\n  'ios >= 6',\n  'android >= 4.4',\n  'bb >= 10'\n];\n\nconst notifyEnable = process.platform == 'darwin';\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.if(notifyEnable, $.plumber({errorHandler: $.notify.onError(\"Error: <%= error.message\" +\n      \" %>\")})))\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, dist, 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size())\n    .pipe($.if(notifyEnable, $.notify('Complete scripts')));\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve('./', 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, dist)))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('lib', () => {\n  gulp.src(['node_modules/bootstrap/dist/**/*'])\n    .pipe($.size({ title : 'lib:js/css folder structure' }))\n    .pipe(gulp.dest(dist));\n  gulp.src([\n    'node_modules/jquery/dist/*',\n    'node_modules/handlebars/dist/handlebars.min.js'\n  ])\n    .pipe($.size({ title : 'lib:flat folder structure' }))\n    .pipe(gulp.dest(dist+'/js'));\n});\n\ngulp.task('clean', (cb) => {\n  del([dist], cb);\n});\n\ngulp.task('default', ['build']);\ngulp.task('build', ['clean'], () => gulp.start(buildTaskPack));\n"
  },
  {
    "path": "examples/listview/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <link rel=\"stylesheet\" href=\"/css/bootstrap.min.css\" />\n</head>\n<body>\n<div id=\"app\" class=\"container\"></div>\n<script src=\"/js/bundle.js\"></script>\n<script src=\"/js/bootstrap.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "examples/listview/main.js",
    "content": "import Woowahan from '../../index';\nimport Users from './reducer/users';\nimport OneUser from './reducer/one-user';\nimport LayoutView from './view/layout';\nimport WelcomeView from './view/welcome';\nimport UsersView from './view/users';\nimport UserDetailView from './view/users/user-detail';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nconst app = new Woowahan();\n\napp.use(Users);\napp.use(OneUser);\n\napp.use(Woowahan.Layout('#app', LayoutView));\n\napp.start({\n  url: '/',\n  container: '.content',\n  layout: 'LayoutView',\n  view: WelcomeView,\n  pages: [\n    { url: '/users', view: UsersView },\n    { url: '/users/:name', view: UserDetailView, routeName: 'UserDetailView' }\n  ]\n});\n"
  },
  {
    "path": "examples/listview/package.json",
    "content": "{\n  \"name\": \"listview\",\n  \"version\": \"0.1.3\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./server/demo.js\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {\n    \"bootstrap\": \"^3.3.6\"\n  }\n}\n"
  },
  {
    "path": "examples/listview/plugin.config.js",
    "content": "import text from './plugin/text';\n\nexport {\n  text\n};\n"
  },
  {
    "path": "examples/listview/reducer/core-reducer.js",
    "content": "import Woowahan from '../../../index';\n\nexport default Woowahan.Reducer.extend({\n  onFail(jqXHR, textStatus, message) {\n    console.log(`${this.actionName}:: [${textStatus}] ${message}!`);\n  }\n});\n"
  },
  {
    "path": "examples/listview/reducer/one-user.js",
    "content": "import CoreReducer from './core-reducer';\nimport { FETCH_ONE_USER } from '../action';\n\nvar OneUser = CoreReducer.create(FETCH_ONE_USER, function(options) {\n  this.onSuccess = function(response) {\n    this.finish(response);\n  };\n\n  this.getData('/users/' + options.id);\n});\n\nexport default OneUser;\n"
  },
  {
    "path": "examples/listview/reducer/users.js",
    "content": "import CoreReducer from './core-reducer';\nimport { FETCH_USERS } from '../action';\n\nvar Users = CoreReducer.create(FETCH_USERS, function(options) {\n  this.onSuccess = function(response) {\n    this.finish(response);\n  };\n\n  this.getData(`/users?p=${options.page || 1}`);\n});\n\nexport default Users;\n"
  },
  {
    "path": "examples/listview/server/data/users.json",
    "content": "[\n  {\n    \"id\": 0,\n    \"name\": \"Stephanie Cabrera\",\n    \"age\": 23,\n    \"gender\": \"female\",\n    \"company\": \"Waab\",\n    \"joindate\": \"2014-34-24\",\n    \"email\": \"stephaniecabrera@waab.com\",\n    \"phone\": \"(887) 421-2689\",\n    \"country\": \"Greenland\"\n  },\n  {\n    \"id\": 1,\n    \"name\": \"Knox Stark\",\n    \"age\": 58,\n    \"gender\": \"male\",\n    \"company\": \"Austech\",\n    \"joindate\": \"2015-20-28\",\n    \"email\": \"knoxstark@austech.com\",\n    \"phone\": \"(818) 504-2362\",\n    \"country\": \"Guinea-Bissau\"\n  },\n  {\n    \"id\": 2,\n    \"name\": \"Muriel Buckner\",\n    \"age\": 55,\n    \"gender\": \"female\",\n    \"company\": \"Equitox\",\n    \"joindate\": \"2016-33-10\",\n    \"email\": \"murielbuckner@equitox.com\",\n    \"phone\": \"(896) 538-2888\",\n    \"country\": \"Spain\"\n  },\n  {\n    \"id\": 3,\n    \"name\": \"Dennis Rodriguez\",\n    \"age\": 49,\n    \"gender\": \"male\",\n    \"company\": \"Empirica\",\n    \"joindate\": \"2013-16-04\",\n    \"email\": \"dennisrodriguez@empirica.com\",\n    \"phone\": \"(976) 499-3941\",\n    \"country\": \"Namibia\"\n  },\n  {\n    \"id\": 4,\n    \"name\": \"Michael Potts\",\n    \"age\": 39,\n    \"gender\": \"male\",\n    \"company\": \"Lumbrex\",\n    \"joindate\": \"2015-07-06\",\n    \"email\": \"michaelpotts@lumbrex.com\",\n    \"phone\": \"(990) 471-3765\",\n    \"country\": \"US Minor Outlying Islands\"\n  },\n  {\n    \"id\": 5,\n    \"name\": \"Candy Wolfe\",\n    \"age\": 35,\n    \"gender\": \"female\",\n    \"company\": \"Bleeko\",\n    \"joindate\": \"2014-38-02\",\n    \"email\": \"candywolfe@bleeko.com\",\n    \"phone\": \"(899) 583-3039\",\n    \"country\": \"Syria\"\n  },\n  {\n    \"id\": 6,\n    \"name\": \"Moses Romero\",\n    \"age\": 35,\n    \"gender\": \"male\",\n    \"company\": \"Bovis\",\n    \"joindate\": \"2014-26-20\",\n    \"email\": \"mosesromero@bovis.com\",\n    \"phone\": \"(850) 491-3967\",\n    \"country\": \"East Timor\"\n  },\n  {\n    \"id\": 7,\n    \"name\": \"Deana Hammond\",\n    \"age\": 38,\n    \"gender\": \"female\",\n    \"company\": \"Turnabout\",\n    \"joindate\": \"2014-33-01\",\n    \"email\": \"deanahammond@turnabout.com\",\n    \"phone\": \"(880) 457-3930\",\n    \"country\": \"Samoa\"\n  },\n  {\n    \"id\": 8,\n    \"name\": \"Tanner Talley\",\n    \"age\": 24,\n    \"gender\": \"male\",\n    \"company\": \"Codax\",\n    \"joindate\": \"2012-17-11\",\n    \"email\": \"tannertalley@codax.com\",\n    \"phone\": \"(893) 451-3322\",\n    \"country\": \"Vanuatu\"\n  },\n  {\n    \"id\": 9,\n    \"name\": \"Mcdowell Hayden\",\n    \"age\": 39,\n    \"gender\": \"male\",\n    \"company\": \"Capscreen\",\n    \"joindate\": \"2014-59-15\",\n    \"email\": \"mcdowellhayden@capscreen.com\",\n    \"phone\": \"(917) 402-3231\",\n    \"country\": \"Turkmenistan\"\n  },\n  {\n    \"id\": 10,\n    \"name\": \"Kirsten Wells\",\n    \"age\": 44,\n    \"gender\": \"female\",\n    \"company\": \"Goko\",\n    \"joindate\": \"2012-07-28\",\n    \"email\": \"kirstenwells@goko.com\",\n    \"phone\": \"(956) 539-3032\",\n    \"country\": \"Seychelles\"\n  },\n  {\n    \"id\": 11,\n    \"name\": \"Mccormick Burke\",\n    \"age\": 33,\n    \"gender\": \"male\",\n    \"company\": \"Nikuda\",\n    \"joindate\": \"2012-40-24\",\n    \"email\": \"mccormickburke@nikuda.com\",\n    \"phone\": \"(813) 414-3886\",\n    \"country\": \"Sierra Leone\"\n  },\n  {\n    \"id\": 12,\n    \"name\": \"Nixon Lee\",\n    \"age\": 26,\n    \"gender\": \"male\",\n    \"company\": \"Kengen\",\n    \"joindate\": \"2013-56-07\",\n    \"email\": \"nixonlee@kengen.com\",\n    \"phone\": \"(855) 492-3945\",\n    \"country\": \"Saudi Arabia\"\n  },\n  {\n    \"id\": 13,\n    \"name\": \"Carissa Kaufman\",\n    \"age\": 29,\n    \"gender\": \"female\",\n    \"company\": \"Unia\",\n    \"joindate\": \"2013-09-03\",\n    \"email\": \"carissakaufman@unia.com\",\n    \"phone\": \"(825) 568-2572\",\n    \"country\": \"Tuvalu\"\n  },\n  {\n    \"id\": 14,\n    \"name\": \"Molly Poole\",\n    \"age\": 40,\n    \"gender\": \"female\",\n    \"company\": \"Conjurica\",\n    \"joindate\": \"2015-29-15\",\n    \"email\": \"mollypoole@conjurica.com\",\n    \"phone\": \"(916) 474-2936\",\n    \"country\": \"S. Georgia and S. Sandwich Isls.\"\n  },\n  {\n    \"id\": 0,\n    \"name\": \"Stephanie Cabrera\",\n    \"age\": 23,\n    \"gender\": \"female\",\n    \"company\": \"Waab\",\n    \"joindate\": \"2014-34-24\",\n    \"email\": \"stephaniecabrera@waab.com\",\n    \"phone\": \"(887) 421-2689\",\n    \"country\": \"Greenland\"\n  },\n  {\n    \"id\": 1,\n    \"name\": \"Knox Stark\",\n    \"age\": 58,\n    \"gender\": \"male\",\n    \"company\": \"Austech\",\n    \"joindate\": \"2015-20-28\",\n    \"email\": \"knoxstark@austech.com\",\n    \"phone\": \"(818) 504-2362\",\n    \"country\": \"Guinea-Bissau\"\n  },\n  {\n    \"id\": 2,\n    \"name\": \"Muriel Buckner\",\n    \"age\": 55,\n    \"gender\": \"female\",\n    \"company\": \"Equitox\",\n    \"joindate\": \"2016-33-10\",\n    \"email\": \"murielbuckner@equitox.com\",\n    \"phone\": \"(896) 538-2888\",\n    \"country\": \"Spain\"\n  },\n  {\n    \"id\": 3,\n    \"name\": \"Dennis Rodriguez\",\n    \"age\": 49,\n    \"gender\": \"male\",\n    \"company\": \"Empirica\",\n    \"joindate\": \"2013-16-04\",\n    \"email\": \"dennisrodriguez@empirica.com\",\n    \"phone\": \"(976) 499-3941\",\n    \"country\": \"Namibia\"\n  },\n  {\n    \"id\": 4,\n    \"name\": \"Michael Potts\",\n    \"age\": 39,\n    \"gender\": \"male\",\n    \"company\": \"Lumbrex\",\n    \"joindate\": \"2015-07-06\",\n    \"email\": \"michaelpotts@lumbrex.com\",\n    \"phone\": \"(990) 471-3765\",\n    \"country\": \"US Minor Outlying Islands\"\n  },\n  {\n    \"id\": 5,\n    \"name\": \"Candy Wolfe\",\n    \"age\": 35,\n    \"gender\": \"female\",\n    \"company\": \"Bleeko\",\n    \"joindate\": \"2014-38-02\",\n    \"email\": \"candywolfe@bleeko.com\",\n    \"phone\": \"(899) 583-3039\",\n    \"country\": \"Syria\"\n  },\n  {\n    \"id\": 6,\n    \"name\": \"Moses Romero\",\n    \"age\": 35,\n    \"gender\": \"male\",\n    \"company\": \"Bovis\",\n    \"joindate\": \"2014-26-20\",\n    \"email\": \"mosesromero@bovis.com\",\n    \"phone\": \"(850) 491-3967\",\n    \"country\": \"East Timor\"\n  },\n  {\n    \"id\": 7,\n    \"name\": \"Deana Hammond\",\n    \"age\": 38,\n    \"gender\": \"female\",\n    \"company\": \"Turnabout\",\n    \"joindate\": \"2014-33-01\",\n    \"email\": \"deanahammond@turnabout.com\",\n    \"phone\": \"(880) 457-3930\",\n    \"country\": \"Samoa\"\n  },\n  {\n    \"id\": 8,\n    \"name\": \"Tanner Talley\",\n    \"age\": 24,\n    \"gender\": \"male\",\n    \"company\": \"Codax\",\n    \"joindate\": \"2012-17-11\",\n    \"email\": \"tannertalley@codax.com\",\n    \"phone\": \"(893) 451-3322\",\n    \"country\": \"준호나라\"\n  },\n  {\n    \"id\": 9,\n    \"name\": \"Mcdowell Hayden\",\n    \"age\": 39,\n    \"gender\": \"male\",\n    \"company\": \"Capscreen\",\n    \"joindate\": \"2014-59-15\",\n    \"email\": \"mcdowellhayden@capscreen.com\",\n    \"phone\": \"(917) 402-3231\",\n    \"country\": \"Turkmenistan\"\n  },\n  {\n    \"id\": 10,\n    \"name\": \"Kirsten Wells\",\n    \"age\": 44,\n    \"gender\": \"female\",\n    \"company\": \"Goko\",\n    \"joindate\": \"2012-07-28\",\n    \"email\": \"kirstenwells@goko.com\",\n    \"phone\": \"(956) 539-3032\",\n    \"country\": \"Seychelles\"\n  },\n  {\n    \"id\": 11,\n    \"name\": \"Mccormick Burke\",\n    \"age\": 33,\n    \"gender\": \"male\",\n    \"company\": \"준호네\",\n    \"joindate\": \"2012-40-24\",\n    \"email\": \"mccormickburke@nikuda.com\",\n    \"phone\": \"(813) 414-3886\",\n    \"country\": \"Sierra Leone\"\n  },\n  {\n    \"id\": 12,\n    \"name\": \"Nixon Lee\",\n    \"age\": 26,\n    \"gender\": \"male\",\n    \"company\": \"Kengen\",\n    \"joindate\": \"2013-56-07\",\n    \"email\": \"nixonlee@kengen.com\",\n    \"phone\": \"(855) 492-3945\",\n    \"country\": \"Saudi Arabia\"\n  },\n  {\n    \"id\": 13,\n    \"name\": \"Carissa Kaufman\",\n    \"age\": 29,\n    \"gender\": \"female\",\n    \"company\": \"Unia\",\n    \"joindate\": \"2013-09-03\",\n    \"email\": \"carissakaufman@unia.com\",\n    \"phone\": \"(825) 568-2572\",\n    \"country\": \"Tuvalu\"\n  },\n  {\n    \"id\": 14,\n    \"name\": \"준호\",\n    \"age\": 40,\n    \"gender\": \"female\",\n    \"company\": \"Conjurica\",\n    \"joindate\": \"2015-29-15\",\n    \"email\": \"mollypoole@conjurica.com\",\n    \"phone\": \"(916) 474-2936\",\n    \"country\": \"S. Georgia and S. Sandwich Isls.\"\n  },\n  {\n    \"id\": 15,\n    \"name\": \"Howell Barry\",\n    \"age\": 57,\n    \"gender\": \"male\",\n    \"company\": \"Zolarity\",\n    \"joindate\": \"2014-54-08\",\n    \"email\": \"howellbarry@zolarity.com\",\n    \"phone\": \"(993) 515-2963\",\n    \"country\": \"Guinea\"\n  },\n  {\n    \"id\": 16,\n    \"name\": \"Brittany Burris\",\n    \"age\": 52,\n    \"gender\": \"female\",\n    \"company\": \"Viagreat\",\n    \"joindate\": \"2012-43-05\",\n    \"email\": \"brittanyburris@viagreat.com\",\n    \"phone\": \"(996) 507-2351\",\n    \"country\": \"Austria\"\n  },\n  {\n    \"id\": 17,\n    \"name\": \"Farley Riley\",\n    \"age\": 25,\n    \"gender\": \"male\",\n    \"company\": \"Sonique\",\n    \"joindate\": \"2015-47-26\",\n    \"email\": \"farleyriley@sonique.com\",\n    \"phone\": \"(908) 406-3968\",\n    \"country\": \"Korea (South)\"\n  },\n  {\n    \"id\": 18,\n    \"name\": \"Berg Blair\",\n    \"age\": 40,\n    \"gender\": \"male\",\n    \"company\": \"Translink\",\n    \"joindate\": \"2015-39-27\",\n    \"email\": \"bergblair@translink.com\",\n    \"phone\": \"(954) 555-3378\",\n    \"country\": \"Armenia\"\n  },\n  {\n    \"id\": 19,\n    \"name\": \"Key Buckley\",\n    \"age\": 51,\n    \"gender\": \"male\",\n    \"company\": \"Zensus\",\n    \"joindate\": \"2013-46-02\",\n    \"email\": \"keybuckley@zensus.com\",\n    \"phone\": \"(893) 444-3993\",\n    \"country\": \"Portugal\"\n  },\n  {\n    \"id\": 20,\n    \"name\": \"Shelly Finch\",\n    \"age\": 32,\n    \"gender\": \"female\",\n    \"company\": \"Oronoko\",\n    \"joindate\": \"2013-50-12\",\n    \"email\": \"shellyfinch@oronoko.com\",\n    \"phone\": \"(859) 428-3428\",\n    \"country\": \"Luxembourg\"\n  },\n  {\n    \"id\": 21,\n    \"name\": \"Jody Knight\",\n    \"age\": 55,\n    \"gender\": \"female\",\n    \"company\": \"Cyclonica\",\n    \"joindate\": \"2012-30-25\",\n    \"email\": \"jodyknight@cyclonica.com\",\n    \"phone\": \"(815) 600-2262\",\n    \"country\": \"Cambodia\"\n  },\n  {\n    \"id\": 22,\n    \"name\": \"Baxter Wright\",\n    \"age\": 51,\n    \"gender\": \"male\",\n    \"company\": \"Bugsall\",\n    \"joindate\": \"2015-02-28\",\n    \"email\": \"baxterwright@bugsall.com\",\n    \"phone\": \"(849) 585-3210\",\n    \"country\": \"Rwanda\"\n  },\n  {\n    \"id\": 23,\n    \"name\": \"Rosa Knox\",\n    \"age\": 35,\n    \"gender\": \"male\",\n    \"company\": \"Centrexin\",\n    \"joindate\": \"2014-14-01\",\n    \"email\": \"rosaknox@centrexin.com\",\n    \"phone\": \"(872) 590-2058\",\n    \"country\": \"Denmark\"\n  },\n  {\n    \"id\": 24,\n    \"name\": \"Zelma Greer\",\n    \"age\": 33,\n    \"gender\": \"female\",\n    \"company\": \"Xylar\",\n    \"joindate\": \"2015-19-16\",\n    \"email\": \"zelmagreer@xylar.com\",\n    \"phone\": \"(993) 536-2120\",\n    \"country\": \"France, Metropolitan\"\n  },\n  {\n    \"id\": 25,\n    \"name\": \"Crystal Mejia\",\n    \"age\": 23,\n    \"gender\": \"female\",\n    \"company\": \"Acusage\",\n    \"joindate\": \"2013-25-26\",\n    \"email\": \"crystalmejia@acusage.com\",\n    \"phone\": \"(807) 443-2370\",\n    \"country\": \"St. Helena\"\n  },\n  {\n    \"id\": 26,\n    \"name\": \"Tamara Ortega\",\n    \"age\": 40,\n    \"gender\": \"female\",\n    \"company\": \"Olympix\",\n    \"joindate\": \"2015-46-09\",\n    \"email\": \"tamaraortega@olympix.com\",\n    \"phone\": \"(872) 488-2822\",\n    \"country\": \"Antigua and Barbuda\"\n  },\n  {\n    \"id\": 27,\n    \"name\": \"Meredith Farrell\",\n    \"age\": 26,\n    \"gender\": \"female\",\n    \"company\": \"Visalia\",\n    \"joindate\": \"2013-53-02\",\n    \"email\": \"meredithfarrell@visalia.com\",\n    \"phone\": \"(995) 535-3742\",\n    \"country\": \"Uzbekistan\"\n  },\n  {\n    \"id\": 28,\n    \"name\": \"Phelps Simmons\",\n    \"age\": 44,\n    \"gender\": \"male\",\n    \"company\": \"Adornica\",\n    \"joindate\": \"2014-40-24\",\n    \"email\": \"phelpssimmons@adornica.com\",\n    \"phone\": \"(931) 581-2192\",\n    \"country\": \"Canada\"\n  },\n  {\n    \"id\": 29,\n    \"name\": \"Nichols Mcclain\",\n    \"age\": 29,\n    \"gender\": \"male\",\n    \"company\": \"Eclipsent\",\n    \"joindate\": \"2015-38-18\",\n    \"email\": \"nicholsmcclain@eclipsent.com\",\n    \"phone\": \"(960) 405-3743\",\n    \"country\": \"Lithuania\"\n  },\n  {\n    \"id\": 30,\n    \"name\": \"Sheila Allison\",\n    \"age\": 37,\n    \"gender\": \"female\",\n    \"company\": \"Comcur\",\n    \"joindate\": \"2014-30-18\",\n    \"email\": \"sheilaallison@comcur.com\",\n    \"phone\": \"(965) 440-3108\",\n    \"country\": \"Gibraltar\"\n  },\n  {\n    \"id\": 31,\n    \"name\": \"Colon Contreras\",\n    \"age\": 39,\n    \"gender\": \"male\",\n    \"company\": \"Geekol\",\n    \"joindate\": \"2015-54-16\",\n    \"email\": \"coloncontreras@geekol.com\",\n    \"phone\": \"(885) 576-3414\",\n    \"country\": \"Aruba\"\n  },\n  {\n    \"id\": 32,\n    \"name\": \"Margaret Santos\",\n    \"age\": 53,\n    \"gender\": \"female\",\n    \"company\": \"Kneedles\",\n    \"joindate\": \"2013-49-01\",\n    \"email\": \"margaretsantos@kneedles.com\",\n    \"phone\": \"(839) 460-2903\",\n    \"country\": \"Kazakhstan\"\n  },\n  {\n    \"id\": 33,\n    \"name\": \"Irwin Gentry\",\n    \"age\": 48,\n    \"gender\": \"male\",\n    \"company\": \"Coash\",\n    \"joindate\": \"2015-17-11\",\n    \"email\": \"irwingentry@coash.com\",\n    \"phone\": \"(841) 457-2927\",\n    \"country\": \"Somalia\"\n  },\n  {\n    \"id\": 34,\n    \"name\": \"Hays Sheppard\",\n    \"age\": 43,\n    \"gender\": \"male\",\n    \"company\": \"Elentrix\",\n    \"joindate\": \"2016-53-17\",\n    \"email\": \"hayssheppard@elentrix.com\",\n    \"phone\": \"(848) 476-3485\",\n    \"country\": \"Belgium\"\n  },\n  {\n    \"id\": 35,\n    \"name\": \"Burton Barton\",\n    \"age\": 60,\n    \"gender\": \"male\",\n    \"company\": \"Ontality\",\n    \"joindate\": \"2013-42-05\",\n    \"email\": \"burtonbarton@ontality.com\",\n    \"phone\": \"(921) 523-3331\",\n    \"country\": \"Iraq\"\n  },\n  {\n    \"id\": 36,\n    \"name\": \"Mcgowan Bush\",\n    \"age\": 35,\n    \"gender\": \"male\",\n    \"company\": \"Digique\",\n    \"joindate\": \"2015-41-18\",\n    \"email\": \"mcgowanbush@digique.com\",\n    \"phone\": \"(979) 432-3138\",\n    \"country\": \"Cook Islands\"\n  },\n  {\n    \"id\": 37,\n    \"name\": \"Mckinney Cox\",\n    \"age\": 45,\n    \"gender\": \"male\",\n    \"company\": \"Realysis\",\n    \"joindate\": \"2015-07-19\",\n    \"email\": \"mckinneycox@realysis.com\",\n    \"phone\": \"(923) 472-2928\",\n    \"country\": \"Libya\"\n  },\n  {\n    \"id\": 38,\n    \"name\": \"Violet Lang\",\n    \"age\": 55,\n    \"gender\": \"female\",\n    \"company\": \"Isopop\",\n    \"joindate\": \"2015-32-15\",\n    \"email\": \"violetlang@isopop.com\",\n    \"phone\": \"(921) 427-2591\",\n    \"country\": \"Pitcairn\"\n  },\n  {\n    \"id\": 39,\n    \"name\": \"Hoffman Reid\",\n    \"age\": 37,\n    \"gender\": \"male\",\n    \"company\": \"Junipoor\",\n    \"joindate\": \"2013-46-20\",\n    \"email\": \"hoffmanreid@junipoor.com\",\n    \"phone\": \"(947) 411-3489\",\n    \"country\": \"Zambia\"\n  },\n  {\n    \"id\": 40,\n    \"name\": \"Glenda Watkins\",\n    \"age\": 30,\n    \"gender\": \"female\",\n    \"company\": \"Enormo\",\n    \"joindate\": \"2013-47-05\",\n    \"email\": \"glendawatkins@enormo.com\",\n    \"phone\": \"(807) 480-3620\",\n    \"country\": \"Thailand\"\n  },\n  {\n    \"id\": 41,\n    \"name\": \"Cabrera Brennan\",\n    \"age\": 46,\n    \"gender\": \"male\",\n    \"company\": \"Vitricomp\",\n    \"joindate\": \"2016-05-06\",\n    \"email\": \"cabrerabrennan@vitricomp.com\",\n    \"phone\": \"(808) 440-3475\",\n    \"country\": \"Antarctica\"\n  },\n  {\n    \"id\": 42,\n    \"name\": \"Hewitt Simon\",\n    \"age\": 44,\n    \"gender\": \"male\",\n    \"company\": \"Equicom\",\n    \"joindate\": \"2012-39-02\",\n    \"email\": \"hewittsimon@equicom.com\",\n    \"phone\": \"(955) 423-2122\",\n    \"country\": \"Albania\"\n  },\n  {\n    \"id\": 43,\n    \"name\": \"Jan Graves\",\n    \"age\": 33,\n    \"gender\": \"female\",\n    \"company\": \"Sloganaut\",\n    \"joindate\": \"2013-59-12\",\n    \"email\": \"jangraves@sloganaut.com\",\n    \"phone\": \"(866) 519-3449\",\n    \"country\": \"Grenada\"\n  },\n  {\n    \"id\": 44,\n    \"name\": \"Julia Valentine\",\n    \"age\": 28,\n    \"gender\": \"female\",\n    \"company\": \"Martgo\",\n    \"joindate\": \"2015-45-20\",\n    \"email\": \"juliavalentine@martgo.com\",\n    \"phone\": \"(872) 477-3886\",\n    \"country\": \"Sri Lanka\"\n  },\n  {\n    \"id\": 45,\n    \"name\": \"Luann Preston\",\n    \"age\": 24,\n    \"gender\": \"female\",\n    \"company\": \"Amtap\",\n    \"joindate\": \"2014-52-11\",\n    \"email\": \"luannpreston@amtap.com\",\n    \"phone\": \"(996) 497-2347\",\n    \"country\": \"Bahamas\"\n  },\n  {\n    \"id\": 46,\n    \"name\": \"Sweet Velez\",\n    \"age\": 27,\n    \"gender\": \"male\",\n    \"company\": \"Shepard\",\n    \"joindate\": \"2016-56-30\",\n    \"email\": \"sweetvelez@shepard.com\",\n    \"phone\": \"(880) 506-2906\",\n    \"country\": \"Bulgaria\"\n  },\n  {\n    \"id\": 47,\n    \"name\": \"Jayne Gonzalez\",\n    \"age\": 49,\n    \"gender\": \"female\",\n    \"company\": \"Netplax\",\n    \"joindate\": \"2015-35-01\",\n    \"email\": \"jaynegonzalez@netplax.com\",\n    \"phone\": \"(942) 454-3019\",\n    \"country\": \"French Southern Territories\"\n  },\n  {\n    \"id\": 48,\n    \"name\": \"Maureen Rowland\",\n    \"age\": 59,\n    \"gender\": \"female\",\n    \"company\": \"Quadeebo\",\n    \"joindate\": \"2016-53-04\",\n    \"email\": \"maureenrowland@quadeebo.com\",\n    \"phone\": \"(935) 523-3034\",\n    \"country\": \"Kuwait\"\n  },\n  {\n    \"id\": 49,\n    \"name\": \"Adams Burnett\",\n    \"age\": 33,\n    \"gender\": \"male\",\n    \"company\": \"Hairport\",\n    \"joindate\": \"2012-37-01\",\n    \"email\": \"adamsburnett@hairport.com\",\n    \"phone\": \"(984) 599-3530\",\n    \"country\": \"Philippines\"\n  },\n  {\n    \"id\": 50,\n    \"name\": \"Ellis Hardin\",\n    \"age\": 37,\n    \"gender\": \"male\",\n    \"company\": \"Keengen\",\n    \"joindate\": \"2013-14-13\",\n    \"email\": \"ellishardin@keengen.com\",\n    \"phone\": \"(949) 576-2422\",\n    \"country\": \"Tokelau\"\n  },\n  {\n    \"id\": 51,\n    \"name\": \"Christensen Bright\",\n    \"age\": 51,\n    \"gender\": \"male\",\n    \"company\": \"Magnina\",\n    \"joindate\": \"2012-01-15\",\n    \"email\": \"christensenbright@magnina.com\",\n    \"phone\": \"(843) 479-3559\",\n    \"country\": \"Mozambique\"\n  },\n  {\n    \"id\": 52,\n    \"name\": \"Tracey Whitaker\",\n    \"age\": 60,\n    \"gender\": \"female\",\n    \"company\": \"Melbacor\",\n    \"joindate\": \"2012-50-20\",\n    \"email\": \"traceywhitaker@melbacor.com\",\n    \"phone\": \"(968) 509-2333\",\n    \"country\": \"Slovenia\"\n  },\n  {\n    \"id\": 53,\n    \"name\": \"Pruitt Whitehead\",\n    \"age\": 27,\n    \"gender\": \"male\",\n    \"company\": \"Vendblend\",\n    \"joindate\": \"2015-59-28\",\n    \"email\": \"pruittwhitehead@vendblend.com\",\n    \"phone\": \"(927) 586-3523\",\n    \"country\": \"Brunei Darussalam\"\n  },\n  {\n    \"id\": 54,\n    \"name\": \"Dorsey Dennis\",\n    \"age\": 46,\n    \"gender\": \"male\",\n    \"company\": \"Suretech\",\n    \"joindate\": \"2016-55-23\",\n    \"email\": \"dorseydennis@suretech.com\",\n    \"phone\": \"(920) 516-2778\",\n    \"country\": \"Iceland\"\n  },\n  {\n    \"id\": 55,\n    \"name\": \"Irma Barron\",\n    \"age\": 43,\n    \"gender\": \"female\",\n    \"company\": \"Miraclis\",\n    \"joindate\": \"2013-23-13\",\n    \"email\": \"irmabarron@miraclis.com\",\n    \"phone\": \"(958) 418-3066\",\n    \"country\": \"Germany\"\n  },\n  {\n    \"id\": 56,\n    \"name\": \"Parsons Carrillo\",\n    \"age\": 42,\n    \"gender\": \"male\",\n    \"company\": \"Manglo\",\n    \"joindate\": \"2012-39-13\",\n    \"email\": \"parsonscarrillo@manglo.com\",\n    \"phone\": \"(838) 432-3931\",\n    \"country\": \"Guyana\"\n  },\n  {\n    \"id\": 57,\n    \"name\": \"Marisa Arnold\",\n    \"age\": 58,\n    \"gender\": \"female\",\n    \"company\": \"Collaire\",\n    \"joindate\": \"2015-55-20\",\n    \"email\": \"marisaarnold@collaire.com\",\n    \"phone\": \"(884) 487-2679\",\n    \"country\": \"United Arab Emirates\"\n  },\n  {\n    \"id\": 58,\n    \"name\": \"Juarez Durham\",\n    \"age\": 45,\n    \"gender\": \"male\",\n    \"company\": \"Mobildata\",\n    \"joindate\": \"2016-18-18\",\n    \"email\": \"juarezdurham@mobildata.com\",\n    \"phone\": \"(870) 529-2941\",\n    \"country\": \"Faroe Islands\"\n  },\n  {\n    \"id\": 59,\n    \"name\": \"Marshall Mathis\",\n    \"age\": 51,\n    \"gender\": \"male\",\n    \"company\": \"Centree\",\n    \"joindate\": \"2016-54-01\",\n    \"email\": \"marshallmathis@centree.com\",\n    \"phone\": \"(928) 519-3569\",\n    \"country\": \"Slovak Republic\"\n  },\n  {\n    \"id\": 60,\n    \"name\": \"Garrett Cleveland\",\n    \"age\": 24,\n    \"gender\": \"male\",\n    \"company\": \"Zenthall\",\n    \"joindate\": \"2014-03-22\",\n    \"email\": \"garrettcleveland@zenthall.com\",\n    \"phone\": \"(973) 453-2632\",\n    \"country\": \"Ukraine\"\n  },\n  {\n    \"id\": 61,\n    \"name\": \"Ada Little\",\n    \"age\": 25,\n    \"gender\": \"female\",\n    \"company\": \"Maineland\",\n    \"joindate\": \"2014-49-14\",\n    \"email\": \"adalittle@maineland.com\",\n    \"phone\": \"(935) 522-3989\",\n    \"country\": \"Venezuela\"\n  },\n  {\n    \"id\": 62,\n    \"name\": \"Essie Villarreal\",\n    \"age\": 38,\n    \"gender\": \"female\",\n    \"company\": \"Prosely\",\n    \"joindate\": \"2013-10-21\",\n    \"email\": \"essievillarreal@prosely.com\",\n    \"phone\": \"(847) 482-2697\",\n    \"country\": \"Uruguay\"\n  },\n  {\n    \"id\": 63,\n    \"name\": \"Alston Combs\",\n    \"age\": 46,\n    \"gender\": \"male\",\n    \"company\": \"Terrago\",\n    \"joindate\": \"2015-41-04\",\n    \"email\": \"alstoncombs@terrago.com\",\n    \"phone\": \"(970) 457-3998\",\n    \"country\": \"Mauritius\"\n  },\n  {\n    \"id\": 64,\n    \"name\": \"Myrtle Owen\",\n    \"age\": 34,\n    \"gender\": \"female\",\n    \"company\": \"Xymonk\",\n    \"joindate\": \"2013-37-06\",\n    \"email\": \"myrtleowen@xymonk.com\",\n    \"phone\": \"(921) 401-3724\",\n    \"country\": \"Turks and Caicos Islands\"\n  },\n  {\n    \"id\": 65,\n    \"name\": \"Terra Joyner\",\n    \"age\": 53,\n    \"gender\": \"female\",\n    \"company\": \"Asimiline\",\n    \"joindate\": \"2014-12-17\",\n    \"email\": \"terrajoyner@asimiline.com\",\n    \"phone\": \"(832) 505-3464\",\n    \"country\": \"Netherlands\"\n  },\n  {\n    \"id\": 66,\n    \"name\": \"Morrison Byers\",\n    \"age\": 34,\n    \"gender\": \"male\",\n    \"company\": \"Xixan\",\n    \"joindate\": \"2012-34-03\",\n    \"email\": \"morrisonbyers@xixan.com\",\n    \"phone\": \"(948) 416-3038\",\n    \"country\": \"Singapore\"\n  },\n  {\n    \"id\": 67,\n    \"name\": \"Gloria Baker\",\n    \"age\": 34,\n    \"gender\": \"female\",\n    \"company\": \"Oceanica\",\n    \"joindate\": \"2016-32-02\",\n    \"email\": \"gloriabaker@oceanica.com\",\n    \"phone\": \"(980) 403-2003\",\n    \"country\": \"Cyprus\"\n  },\n  {\n    \"id\": 68,\n    \"name\": \"Karla Frederick\",\n    \"age\": 23,\n    \"gender\": \"female\",\n    \"company\": \"Techade\",\n    \"joindate\": \"2014-46-09\",\n    \"email\": \"karlafrederick@techade.com\",\n    \"phone\": \"(962) 417-2814\",\n    \"country\": \"Macedonia\"\n  },\n  {\n    \"id\": 69,\n    \"name\": \"Roberson Wilson\",\n    \"age\": 47,\n    \"gender\": \"male\",\n    \"company\": \"Twiggery\",\n    \"joindate\": \"2016-43-20\",\n    \"email\": \"robersonwilson@twiggery.com\",\n    \"phone\": \"(908) 468-2344\",\n    \"country\": \"Heard and McDonald Islands\"\n  },\n  {\n    \"id\": 70,\n    \"name\": \"Tiffany French\",\n    \"age\": 28,\n    \"gender\": \"female\",\n    \"company\": \"Elita\",\n    \"joindate\": \"2014-59-27\",\n    \"email\": \"tiffanyfrench@elita.com\",\n    \"phone\": \"(978) 492-3070\",\n    \"country\": \"Iran\"\n  },\n  {\n    \"id\": 71,\n    \"name\": \"Marta Oneil\",\n    \"age\": 43,\n    \"gender\": \"female\",\n    \"company\": \"Quilm\",\n    \"joindate\": \"2014-25-27\",\n    \"email\": \"martaoneil@quilm.com\",\n    \"phone\": \"(962) 484-3429\",\n    \"country\": \"Ecuador\"\n  },\n  {\n    \"id\": 72,\n    \"name\": \"Williamson York\",\n    \"age\": 42,\n    \"gender\": \"male\",\n    \"company\": \"Balooba\",\n    \"joindate\": \"2014-02-23\",\n    \"email\": \"williamsonyork@balooba.com\",\n    \"phone\": \"(875) 519-2797\",\n    \"country\": \"Dominican Republic\"\n  },\n  {\n    \"id\": 73,\n    \"name\": \"Hensley Cannon\",\n    \"age\": 43,\n    \"gender\": \"male\",\n    \"company\": \"Extragen\",\n    \"joindate\": \"2012-16-20\",\n    \"email\": \"hensleycannon@extragen.com\",\n    \"phone\": \"(880) 521-3890\",\n    \"country\": \"Bosnia and Herzegovina\"\n  },\n  {\n    \"id\": 74,\n    \"name\": \"Yesenia Larsen\",\n    \"age\": 56,\n    \"gender\": \"female\",\n    \"company\": \"Niquent\",\n    \"joindate\": \"2016-43-29\",\n    \"email\": \"yesenialarsen@niquent.com\",\n    \"phone\": \"(840) 433-2803\",\n    \"country\": \"Bhutan\"\n  },\n  {\n    \"id\": 75,\n    \"name\": \"Jordan Acevedo\",\n    \"age\": 50,\n    \"gender\": \"male\",\n    \"company\": \"Lingoage\",\n    \"joindate\": \"2013-50-10\",\n    \"email\": \"jordanacevedo@lingoage.com\",\n    \"phone\": \"(834) 476-2553\",\n    \"country\": \"Montserrat\"\n  },\n  {\n    \"id\": 76,\n    \"name\": \"Fields Mayer\",\n    \"age\": 55,\n    \"gender\": \"male\",\n    \"company\": \"Volax\",\n    \"joindate\": \"2013-59-06\",\n    \"email\": \"fieldsmayer@volax.com\",\n    \"phone\": \"(862) 561-2061\",\n    \"country\": \"Hungary\"\n  },\n  {\n    \"id\": 77,\n    \"name\": \"Cassandra Patel\",\n    \"age\": 37,\n    \"gender\": \"female\",\n    \"company\": \"Spacewax\",\n    \"joindate\": \"2014-02-13\",\n    \"email\": \"cassandrapatel@spacewax.com\",\n    \"phone\": \"(896) 485-3036\",\n    \"country\": \"Yemen\"\n  },\n  {\n    \"id\": 78,\n    \"name\": \"Alejandra Koch\",\n    \"age\": 28,\n    \"gender\": \"female\",\n    \"company\": \"Accusage\",\n    \"joindate\": \"2013-36-13\",\n    \"email\": \"alejandrakoch@accusage.com\",\n    \"phone\": \"(839) 461-3864\",\n    \"country\": \"South Africa\"\n  },\n  {\n    \"id\": 79,\n    \"name\": \"Leola Ayala\",\n    \"age\": 54,\n    \"gender\": \"female\",\n    \"company\": \"Anarco\",\n    \"joindate\": \"2015-24-03\",\n    \"email\": \"leolaayala@anarco.com\",\n    \"phone\": \"(933) 468-3596\",\n    \"country\": \"Madagascar\"\n  },\n  {\n    \"id\": 80,\n    \"name\": \"Sharron Alvarado\",\n    \"age\": 23,\n    \"gender\": \"female\",\n    \"company\": \"Flyboyz\",\n    \"joindate\": \"2014-44-05\",\n    \"email\": \"sharronalvarado@flyboyz.com\",\n    \"phone\": \"(965) 485-2512\",\n    \"country\": \"Costa Rica\"\n  },\n  {\n    \"id\": 81,\n    \"name\": \"Bartlett Mcpherson\",\n    \"age\": 45,\n    \"gender\": \"male\",\n    \"company\": \"Emtrak\",\n    \"joindate\": \"2016-24-09\",\n    \"email\": \"bartlettmcpherson@emtrak.com\",\n    \"phone\": \"(912) 430-3338\",\n    \"country\": \"Taiwan\"\n  },\n  {\n    \"id\": 82,\n    \"name\": \"Adele Singleton\",\n    \"age\": 55,\n    \"gender\": \"female\",\n    \"company\": \"Ecratic\",\n    \"joindate\": \"2015-31-12\",\n    \"email\": \"adelesingleton@ecratic.com\",\n    \"phone\": \"(928) 483-3446\",\n    \"country\": \"Ireland\"\n  },\n  {\n    \"id\": 83,\n    \"name\": \"Ramos Bauer\",\n    \"age\": 56,\n    \"gender\": \"male\",\n    \"company\": \"Eternis\",\n    \"joindate\": \"2016-17-19\",\n    \"email\": \"ramosbauer@eternis.com\",\n    \"phone\": \"(956) 535-3059\",\n    \"country\": \"Papua New Guinea\"\n  },\n  {\n    \"id\": 84,\n    \"name\": \"Jacqueline Melton\",\n    \"age\": 48,\n    \"gender\": \"female\",\n    \"company\": \"Kidgrease\",\n    \"joindate\": \"2014-45-14\",\n    \"email\": \"jacquelinemelton@kidgrease.com\",\n    \"phone\": \"(928) 533-2580\",\n    \"country\": \"Kyrgyzstan\"\n  },\n  {\n    \"id\": 85,\n    \"name\": \"Craft Harrington\",\n    \"age\": 55,\n    \"gender\": \"male\",\n    \"company\": \"Bunga\",\n    \"joindate\": \"2013-08-06\",\n    \"email\": \"craftharrington@bunga.com\",\n    \"phone\": \"(974) 511-2984\",\n    \"country\": \"United States\"\n  },\n  {\n    \"id\": 86,\n    \"name\": \"Petersen Carpenter\",\n    \"age\": 29,\n    \"gender\": \"male\",\n    \"company\": \"Applideck\",\n    \"joindate\": \"2014-11-16\",\n    \"email\": \"petersencarpenter@applideck.com\",\n    \"phone\": \"(987) 597-3066\",\n    \"country\": \"Fiji\"\n  },\n  {\n    \"id\": 87,\n    \"name\": \"Conway Roy\",\n    \"age\": 52,\n    \"gender\": \"male\",\n    \"company\": \"Immunics\",\n    \"joindate\": \"2016-47-27\",\n    \"email\": \"conwayroy@immunics.com\",\n    \"phone\": \"(837) 576-3158\",\n    \"country\": \"Trinidad and Tobago\"\n  },\n  {\n    \"id\": 88,\n    \"name\": \"Rosetta Herman\",\n    \"age\": 26,\n    \"gender\": \"female\",\n    \"company\": \"Hopeli\",\n    \"joindate\": \"2013-10-22\",\n    \"email\": \"rosettaherman@hopeli.com\",\n    \"phone\": \"(976) 483-2243\",\n    \"country\": \"Israel\"\n  },\n  {\n    \"id\": 89,\n    \"name\": \"Riggs Cruz\",\n    \"age\": 47,\n    \"gender\": \"male\",\n    \"company\": \"Zorromop\",\n    \"joindate\": \"2016-40-26\",\n    \"email\": \"riggscruz@zorromop.com\",\n    \"phone\": \"(889) 550-2149\",\n    \"country\": \"French Guiana\"\n  },\n  {\n    \"id\": 90,\n    \"name\": \"Benson Hickman\",\n    \"age\": 58,\n    \"gender\": \"male\",\n    \"company\": \"Geofarm\",\n    \"joindate\": \"2016-54-01\",\n    \"email\": \"bensonhickman@geofarm.com\",\n    \"phone\": \"(922) 424-3209\",\n    \"country\": \"Moldova\"\n  },\n  {\n    \"id\": 91,\n    \"name\": \"Mitchell Sharpe\",\n    \"age\": 47,\n    \"gender\": \"male\",\n    \"company\": \"Frolix\",\n    \"joindate\": \"2014-31-02\",\n    \"email\": \"mitchellsharpe@frolix.com\",\n    \"phone\": \"(936) 441-2513\",\n    \"country\": \"Croatia (Hrvatska)\"\n  },\n  {\n    \"id\": 92,\n    \"name\": \"Barbra Montoya\",\n    \"age\": 29,\n    \"gender\": \"female\",\n    \"company\": \"Lunchpad\",\n    \"joindate\": \"2015-43-09\",\n    \"email\": \"barbramontoya@lunchpad.com\",\n    \"phone\": \"(942) 494-3513\",\n    \"country\": \"Honduras\"\n  },\n  {\n    \"id\": 93,\n    \"name\": \"Martinez Gilmore\",\n    \"age\": 58,\n    \"gender\": \"male\",\n    \"company\": \"Keeg\",\n    \"joindate\": \"2013-10-22\",\n    \"email\": \"martinezgilmore@keeg.com\",\n    \"phone\": \"(859) 476-2983\",\n    \"country\": \"Djibouti\"\n  },\n  {\n    \"id\": 94,\n    \"name\": \"Nona Velazquez\",\n    \"age\": 49,\n    \"gender\": \"female\",\n    \"company\": \"Krag\",\n    \"joindate\": \"2014-34-13\",\n    \"email\": \"nonavelazquez@krag.com\",\n    \"phone\": \"(962) 499-3561\",\n    \"country\": \"Azerbaijan\"\n  },\n  {\n    \"id\": 95,\n    \"name\": \"Lenore Andrews\",\n    \"age\": 36,\n    \"gender\": \"female\",\n    \"company\": \"Netbook\",\n    \"joindate\": \"2014-28-29\",\n    \"email\": \"lenoreandrews@netbook.com\",\n    \"phone\": \"(908) 476-2123\",\n    \"country\": \"Bangladesh\"\n  },\n  {\n    \"id\": 96,\n    \"name\": \"Santos Kennedy\",\n    \"age\": 39,\n    \"gender\": \"male\",\n    \"company\": \"Rodeology\",\n    \"joindate\": \"2016-02-09\",\n    \"email\": \"santoskennedy@rodeology.com\",\n    \"phone\": \"(938) 534-3227\",\n    \"country\": \"Dominica\"\n  },\n  {\n    \"id\": 97,\n    \"name\": \"Irene Morton\",\n    \"age\": 31,\n    \"gender\": \"female\",\n    \"company\": \"Polaria\",\n    \"joindate\": \"2013-50-03\",\n    \"email\": \"irenemorton@polaria.com\",\n    \"phone\": \"(896) 464-3525\",\n    \"country\": \"Algeria\"\n  },\n  {\n    \"id\": 98,\n    \"name\": \"Neva Sellers\",\n    \"age\": 34,\n    \"gender\": \"female\",\n    \"company\": \"Lyrichord\",\n    \"joindate\": \"2012-22-30\",\n    \"email\": \"nevasellers@lyrichord.com\",\n    \"phone\": \"(878) 459-3540\",\n    \"country\": \"Eritrea\"\n  },\n  {\n    \"id\": 99,\n    \"name\": \"Yang Clark\",\n    \"age\": 56,\n    \"gender\": \"male\",\n    \"company\": \"Zilladyne\",\n    \"joindate\": \"2013-24-13\",\n    \"email\": \"yangclark@zilladyne.com\",\n    \"phone\": \"(993) 439-2979\",\n    \"country\": \"Wallis and Futuna Islands\"\n  },\n  {\n    \"id\": 0,\n    \"name\": \"Stephanie Cabrera\",\n    \"age\": 23,\n    \"gender\": \"female\",\n    \"company\": \"Waab\",\n    \"joindate\": \"2014-34-24\",\n    \"email\": \"stephaniecabrera@waab.com\",\n    \"phone\": \"(887) 421-2689\",\n    \"country\": \"Greenland\"\n  },\n  {\n    \"id\": 1,\n    \"name\": \"Knox Stark\",\n    \"age\": 58,\n    \"gender\": \"male\",\n    \"company\": \"Austech\",\n    \"joindate\": \"2015-20-28\",\n    \"email\": \"knoxstark@austech.com\",\n    \"phone\": \"(818) 504-2362\",\n    \"country\": \"Guinea-Bissau\"\n  },\n  {\n    \"id\": 2,\n    \"name\": \"Muriel Buckner\",\n    \"age\": 55,\n    \"gender\": \"female\",\n    \"company\": \"Equitox\",\n    \"joindate\": \"2016-33-10\",\n    \"email\": \"murielbuckner@equitox.com\",\n    \"phone\": \"(896) 538-2888\",\n    \"country\": \"Spain\"\n  }\n]"
  },
  {
    "path": "examples/listview/server/demo.js",
    "content": "var path = require('path');\nvar express = require('express');\nvar morgan = require('morgan');\nvar app = express();\nvar users = require(path.resolve(__dirname, 'data/users.json'));\n\nconst port = process.env.PORT || 4000;\n\napp.use(morgan('dev'));\napp.use(express.static('dist'));\n\napp.get('/users', (req, res) => {\n  var page = +(req.query.p || 1);\n  var limit = +(req.query.l || 15);\n  var resultSet = [];\n\n  for(var start=(page-1)*limit, i=0; i<limit; i++) {\n    resultSet.push(users[start + i]);\n  }\n\n  res.json({\n    page: {\n      total: users.length,\n      page: page,\n      limit: limit\n    },\n    resultSet: resultSet\n  });\n});\n\napp.get('/users/:id', (req, res) => res.json(users.find(user => user.id == +req.params.id)));\n\napp.listen(port, () => {\n  console.log('ready %s', port);\n});\n"
  },
  {
    "path": "examples/listview/server/proxy.js",
    "content": "var format = require('util').format;\nvar express = require('express');\nvar morgan = require('morgan');\nvar request = require('request');\nvar fs = require('fs');\nvar path = require('path');\nvar md5 = require('md5');\nvar app = express();\n\nconst realHost = 'http://api-server.com';\nconst port = process.env.PORT || 4000;\nconst mock = JSON.parse(process.env.MOCK || false);\n\nfunction saveCached(url, body) {\n  var cachePath = path.resolve(__dirname, '.cache');\n  var cacheFile = md5(url);\n\n  if (!fs.existsSync(cachePath)) {\n    fs.mkdirSync(cachePath);\n  }\n\n  fs.writeFile(path.resolve(cachePath, format('%s.json', cacheFile)), body);\n}\n\nfunction getCached(url) {\n  var cachePath = path.resolve(__dirname, '.cache');\n  var cacheFile = md5(url);\n\n  if (fs.existsSync(path.resolve(cachePath, cacheFile+'.json'))) {\n    return require('./.cache/'+cacheFile+'.json');\n  }\n  return {};\n}\n\napp.use(morgan('dev'));\napp.use(express.static('dist'));\n\napp.get('*', (req, res) => {\n  if (mock) {\n    res.json(getCached(req.url));\n  } else {\n    request(format('%s%s', realHost, req.url), (err, response, body) => {\n  saveCached(req.url, body);\n}).pipe(res);\n}\n});\n\napp.listen(port, () => {\n  console.log('ready %s (mock:%s)', port, mock);\n});\n"
  },
  {
    "path": "examples/listview/view/control/pager.hbs",
    "content": "<nav class=\"text-center\">\n  <ul class=\"pagination\">\n    {{#if prev}}\n    <li class=\"page-item\">\n      <a class=\"page-link\" href=\"#\" aria-label=\"Previous\" data-page=\"{{prevPage}}\">\n        <span aria-hidden=\"true\">&laquo;</span>\n        <span class=\"sr-only\">Previous</span>\n      </a>\n    </li>\n    {{/if}}\n    {{#each numbers}}\n      <li class=\"page-item{{#if active}} active{{/if}}\"><a class=\"page-link\" href=\"#\" data-page=\"{{num}}\">{{num}}</a></li>\n    {{/each}}\n    {{#if next}}\n    <li class=\"page-item\">\n      <a class=\"page-link\" href=\"#\" aria-label=\"Next\" data-page=\"{{nextPage}}\">\n        <span aria-hidden=\"true\">&raquo;</span>\n        <span class=\"sr-only\">Next</span>\n      </a>\n    </li>\n    {{/if}}\n  </ul>\n</nav>"
  },
  {
    "path": "examples/listview/view/control/pager.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './pager.hbs';\n\nexport default Woowahan.View.create('Pager', {\n  namespace: 'View:Control:Pager',\n  tagName: 'nav',\n  template: Template,\n  \n  events: {\n    'click a[data-page]': 'onPaging'\n  },\n\n  initialize(model) {\n    this.setModel(model);\n    \n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    const numOfRows = renderData.numOfRows;\n    const currentPage = renderData.currentPage; // 10\n    const total = renderData.total;\n\n    const totalPage = Math.ceil(total / numOfRows);\n\n    let start = parseInt((currentPage - 1) / 10) * 10;\n    let count = Math.min(10, totalPage - start);\n\n    renderData.prevPage = start - 9;\n    renderData.nextPage = start + 11;\n\n    const numbers = Array.from({ length: count }, () => {\n      return { num: ++start, active: currentPage == start }\n    });\n\n    renderData.prev = currentPage > 10;\n    renderData.numbers = numbers;\n    renderData.next = count == 10;\n\n    return renderData;\n  },\n\n  onPaging(event) {\n    this.dispatch(Woowahan.Event.create('paging', +$(event.currentTarget).data('page')));\n\n    return false;\n  }\n});\n"
  },
  {
    "path": "examples/listview/view/layout.hbs",
    "content": "<nav class=\"navbar navbar-default\">\n    <div class=\"container-fluid\">\n        <div class=\"navbar-header\">\n            <button type=\"button\" class=\"navbar-toggle collapsed\" data-toggle=\"collapse\" data-target=\"#bs-example-navbar-collapse-1\" aria-expanded=\"false\">\n                <span class=\"sr-only\">Toggle navigation</span>\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n            </button>\n            <a class=\"navbar-brand\" href=\"#\">WoowahanJS</a>\n        </div>\n\n        <!-- Collect the nav links, forms, and other content for toggling -->\n        <div class=\"collapse navbar-collapse\">\n            <ul class=\"nav navbar-nav\">\n                <li><a href=\"#/users\">사용자</a></li>\n            </ul>\n            <ul class=\"nav navbar-nav navbar-right\">\n                <li><a href=\"https://github.com/woowabros/WoowahanJS\">Github Repository</a></li>\n            </ul>\n        </div>\n    </div>\n</nav>\n<div class=\"content\"></div>"
  },
  {
    "path": "examples/listview/view/layout.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './layout.hbs';\n\nexport default Woowahan.View.create('LayoutView', {\n  className: 'container',\n  template: Template,\n\n  initialize() {\n    this.super();\n  }\n});"
  },
  {
    "path": "examples/listview/view/not-found.js",
    "content": "import { CoreView } from '../core';\n\nexport default CoreView.extend({\n  template: '<strong>Empty Page</strong>',\n\n  initialize() {\n    this.super();\n  }\n});"
  },
  {
    "path": "examples/listview/view/users/index.hbs",
    "content": "<div>\n    <h2>사용자 목록</h2>\n</div>\n\n<div>\n    <ol class=\"breadcrumb\">\n        <li><a href=\"#\">Home</a></li>\n        <li class=\"active\"><a href=\"#/users\">사용자 목록 (<span data-role=\"bind\" data-name=\"numOfRows\">{{numOfRows}}</span>)</a></li>\n    </ol>\n</div>\n\n<table class=\"table table-bordered table-hover list\">\n    <thead>\n    <tr>\n        <th>이름</th>\n        <th>성별</th>\n        <th>나이</th>\n        <th>국적</th>\n        <th>회사</th>\n        <th>이메일</th>\n        <th>가입일</th>\n        <th>전화번호</th>\n    </tr>\n    </thead>\n    <tbody>\n    </tbody>\n</table>\n\n<div class=\"row\">\n    <div class=\"col-md-4\">\n        <button class=\"btn btn-default\" data-action=\"refresh\">새로고침</button>\n    </div>\n    <div class=\"col-md-8 pager-container text-right\"></div>\n</div>"
  },
  {
    "path": "examples/listview/view/users/index.js",
    "content": "import Woowahan from '../../../../index';\nimport { FETCH_USERS, FETCH_ONE_USER } from '../../action';\nimport Template from './index.hbs';\nimport User from './user';\nimport Pager from '../control/pager';\n\nexport default Woowahan.CollectionView.create('Users', {\n  rowContainer: '.list > tbody',\n  rowView: User,\n  template: Template,\n\n  events: {\n    'click [data-action=refresh]': 'onRefresh',\n    '@paging .pager-container': 'onPaging'\n  },\n\n  initialize() {\n    this.setModel({\n      currentPage: 1,\n      total: 0,\n      numOfRows: 0\n    });\n    \n    this.super();\n  },\n\n  viewDidMount() {\n    this.dispatch(Woowahan.Action.create(FETCH_USERS), this.fetchUsers);\n  },\n\n  fetchUsers(data) {\n    this.reload(data.resultSet, { uid: 'id', reset: true, reverse: false });\n    \n    this.setModel({\n      currentPage: data.page.page,\n      total: data.page.total,\n      numOfRows: data.resultSet.length\n    });\n\n    this.updateView('.pager-container', Pager, this.model);\n  },\n\n  fetchOneUser(data) {\n    window.location.hash = this.getRouteTables('UserDetailView', { name: data.name }, `company=${data.company}`);\n  },\n\n  onSelectedRow(row) {\n    this.dispatch(Woowahan.Action.create(FETCH_ONE_USER, { id: row.id, page: 1 }), this.fetchOneUser);\n  },\n\n  onRefresh() {\n    this.updateView();\n    \n    return false;\n  },\n\n  onPaging(page) {\n    this.dispatch(Woowahan.Action.create(FETCH_USERS, { page: page }), this.fetchUsers);\n  }\n});"
  },
  {
    "path": "examples/listview/view/users/user-detail.js",
    "content": "import Woowahan from '../../../../index';\n\nexport default Woowahan.View.create('UserDetail', {\n  template: '<p id=\"name\"></p><p id=\"company\"></p><button id=\"btn-back\" class=\"btn btn-default\">Back</button>',\n\n  events: {\n    'click #btn-back': 'onClickBack'\n  },\n\n  viewDidMount($el) {\n    $el.find('#name').html(this.params.name || 'empty');\n    $el.find('#company').html(this.query.company || 'empty');\n  },\n\n  onClickBack() {\n    window.history.back();\n  }\n});\n"
  },
  {
    "path": "examples/listview/view/users/user.hbs",
    "content": "<td data-role=\"bind\" data-name=\"name\"></td>\n<td data-role=\"bind\" data-name=\"gender\"></td>\n<td data-role=\"bind\" data-name=\"age\"></td>\n<td data-role=\"bind\" data-name=\"country\"></td>\n<td data-role=\"bind\" data-name=\"company\"></td>\n<td data-role=\"bind\" data-name=\"email\"></td>\n<td data-role=\"bind\" data-name=\"joindate\"></td>\n<td data-role=\"bind\" data-name=\"phone\"></td>"
  },
  {
    "path": "examples/listview/view/users/user.js",
    "content": "import Template from './user.hbs';\nimport Woowahan from '../../../../index';\n\nexport default Woowahan.ItemView.create('User', {\n  tagName: 'tr',\n  template: Template,\n\n  onSelectedRow(event, trigger) {\n    trigger({ id: this.getModel('id') });\n  }\n});\n"
  },
  {
    "path": "examples/listview/view/welcome.hbs",
    "content": "\n<h1>Hello, Woowahan JS</h1>\n"
  },
  {
    "path": "examples/listview/view/welcome.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './welcome.hbs';\n\nexport default Woowahan.View.create('WelcomeView', {\n  className: 'container',\n  template: Template,\n\n  initialize() {\n    this.super();\n  }\n});"
  },
  {
    "path": "examples/listview/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nvar uglifyJsPlugin = new webpack.optimize.UglifyJsPlugin({\n  compressor: {\n    screw_ie8: true,\n    warnings: false\n  },\n  output: {\n    comments: false\n  }\n});\n\nmodule.exports.development = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.css$/, exclude: /node_modules/, loader: 'css-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\nmodule.exports.production = {\n  debug: false,\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.css$/, exclude: /node_modules/, loader: 'css-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  },\n  plugins: [ uglifyJsPlugin ]\n};\n"
  },
  {
    "path": "examples/middleware/app.js",
    "content": "Woowahan.config = {\n  testMode: true\n};\n\nwindow.$ = window.jQuery = Woowahan.$;\n\nconst DOTIT = 'doit';\nconst app = new Woowahan();\nconst COLOR = {\n  view: function(alpha) {\n    if (alpha) {\n      return 'rgba(51,202,255,0.4)';\n    } else {\n      return 'rgb(51,202,255)';\n    }\n  },\n  node: function(alpha) {\n    if (alpha) {\n      return 'rgba(249,67,4,0.5)';\n    } else {\n      return 'rgb(249,67,4)';\n    }\n  }\n};\n\nconst reducer = Woowahan.Reducer.create(DOTIT, function() {\n  this.env.token = `TK-${Date.now()}`;\n\n  this.onSuccess = function(response) {\n    this.finish(null, response);\n  };\n\n  this.onFail = function(err) {\n    this.finish(err);\n  };\n\n  this.getData('https://jsonplaceholder.typicode.com/posts/2');\n});\n\nconst childView = Woowahan.View.create('childView', {\n  template: Handlebars.compile($('#child-view').html()),\n\n  events: {\n    'click .btn': 'onClick'\n  },\n\n  onClick() {\n\n  }\n});\n\nconst mainView = Woowahan.View.create('mainView', {\n  template: Handlebars.compile($('#main-view').html()),\n\n  events: {\n    'change input[type=text]': 'onChange',\n    'change input[type=password]': 'onChange',\n    'click .btn': 'onDoit',\n    'click .name': 'onName',\n    'click #update': 'onUpdate'\n  },\n\n  viewDidMount() {\n    this.updateView('#child', childView);\n  },\n\n  onChange() {\n\n  },\n\n  onDoit() {\n    this.dispatch(Woowahan.Action.create(DOTIT), function(err, data) {\n      console.log(data);\n    });\n  },\n\n  onName() {\n\n  },\n\n  onUpdate() {\n    this.updateView();\n  }\n});\n\n/**\n * Middleware\n */\nfunction logger() {\n  this.mwtype = 'reducer';\n  this.features = ['url', 'type'];\n\n  this.before = function(feature) {\n    console.log(feature.type, feature.url);\n  };\n}\n\nfunction customHeader(headers) {\n  this.mwtype = 'reducer';\n  this.features = ['headers'];\n\n  this.before = function(feature, env) {\n    Object.keys(headers).forEach(k => feature.headers[k] = env.template(headers[k], env));\n  };\n}\n\nfunction jsonHeader() {\n  this.mwtype = 'reducer';\n  this.features = ['headers'];\n\n  this.before = function(feature) {\n    feature.headers['Content-Type'] = 'application/json';\n  };\n}\n\nfunction GALogger(gaKey) {\n  this.mwtype = 'router';\n  this.features = ['params', 'query'];\n\n  this.before = function(feature) {\n    console.log(`key: ${gaKey}, data: ${JSON.stringify(feature)}`);\n  }\n}\n\nfunction WoowahanDevtools() {\n  let w = window;\n  let ctrl = document.createElement('div');\n  let c = document.createElement('canvas');\n  let ctx = c.getContext('2d');\n  let components = [];\n  let isAttach = false;\n  let isOption = false;\n  let isVisible = false;\n  let rect = {\n    get width() {\n      return w.innerWidth;\n    },\n    get height() {\n      return w.innerHeight;\n    }\n  };\n\n  ctrl.style.position = 'fixed';\n  ctrl.style.top = '60px';\n  ctrl.style.right = '10px';\n  ctrl.style.width = '30px';\n  ctrl.style.height = '30px';\n  ctrl.style.background = 'red';\n  ctrl.style.borderRadius = '15px';\n  ctrl.style.opacity = 0.2;\n  ctrl.style.zIndex = 999999;\n\n  document.body.append(ctrl);\n\n  ctrl.addEventListener('mouseover', function() {\n    this.style.opacity = 0.4;\n  });\n\n  ctrl.addEventListener('mouseout', function() {\n    this.style.opacity = 0.2;\n  });\n\n  ctrl.addEventListener('click', function() {\n    isVisible = !isVisible;\n  });\n\n  this.mwtype = 'view';\n\n  function addComponent(component) {\n    let cid = component.dataset.componentId;\n\n    if (components.filter(comp => comp.dataset.componentId === cid).length === 0) {\n      components.push(component);\n    }\n  }\n\n  c.setAttribute('width', rect.width);\n  c.setAttribute('height', rect.height);\n  c.style.display = 'none';\n  c.style.position = 'fixed';\n  c.style.left = 0;\n  c.style.top = 0;\n\n  w.addEventListener('resize', function() {\n    c.setAttribute('width', rect.width);\n    c.setAttribute('height', rect.height);\n  });\n\n  window.requestAnimationFrame(devmode);\n\n  function devmode() {\n    ctx.clearRect(0, 0, rect.width, rect.height);\n\n    if (isVisible) {\n      if (c.style.display === 'none') {\n        c.style.display = 'block';\n      }\n\n      document.querySelector('#app').style.opacity = 0.3;\n\n      if (Woowahan.config.testMode) {\n        components.forEach(comp => {\n          let rect = comp.getBoundingClientRect();\n\n          ctx.save();\n\n          if (comp.dataset.componentViewName) {\n            ctx.font = '24pt verdana';\n            ctx.fillStyle = COLOR.view(true);\n            ctx.strokeStyle = COLOR.view(false);\n            ctx.fillRect(rect.left, rect.top, rect.width, rect.height);\n            ctx.strokeRect(rect.left, rect.top, rect.width, rect.height);\n            ctx.fillStyle = 'black';\n            ctx.fillText(comp.dataset.componentViewName, rect.left + 20, rect.top + 40);\n          } else {\n            ctx.font = '11px verdana';\n            ctx.fillStyle = COLOR.node(true);\n            ctx.strokeStyle = COLOR.node(false);\n            ctx.strokeRect(rect.left+0.5, rect.top+0.5, rect.width, rect.height);\n\n            if (isOption) {\n              ctx.fillStyle = COLOR.node(false);\n              ctx.fillText(`${comp.dataset.componentHandlerName} #${comp.dataset.componentId}`, rect.left, rect.top+rect.height+20);\n            }\n          }\n\n          ctx.restore();\n\n        });\n      }\n    } else {\n      document.querySelector('#app').style.opacity = 1;\n      if (c.style.display === 'block') c.style.display = 'none';\n    }\n\n    requestAnimationFrame(devmode);\n  }\n\n  this.after = function(view, dom) {\n    let idx = 0;\n\n    if (!isAttach) {\n      document.body.appendChild(c);\n      isAttach = true;\n    }\n\n    dom.setAttribute('data-component-id', view.viewname+'.'+(++idx));\n    dom.setAttribute('data-component-view-name', view.viewname);\n\n    addComponent(dom);\n\n    if (view.events) {\n      Object.keys(view.events).forEach(event => {\n        dom.querySelectorAll(event.split(' ')[1]).forEach(node => {\n          node.setAttribute('data-component-id', view.viewname+'.'+(++idx));\n          node.setAttribute('data-component-handler-name', view.events[event]);\n          addComponent(node);\n        });\n      });\n    }\n  }\n}\n/**\n * Use middleware\n */\napp.set(logger);\napp.set(customHeader, { 'X-Authorization': 'Bearer {{token}}' });\napp.set(jsonHeader);\napp.set(WoowahanDevtools);\napp.set(GALogger, 'qwertyuiop');\n\napp.use(reducer);\n\nWoowahan.testDef = function(view) {\n  view.def = {\n    'onDoit': '이것은 디스패치다'\n  };\n};\n\nWoowahan.testDef(mainView);\n\napp.start({\n  url: '/', view: mainView, container: '#app'\n});\n"
  },
  {
    "path": "examples/middleware/index.html",
    "content": "<html>\n  <head>\n    <title>Middleware</title>\n    <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\" integrity=\"sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u\" crossorigin=\"anonymous\">\n    <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css\" integrity=\"sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp\" crossorigin=\"anonymous\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.6/handlebars.min.js\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/randomcolor/0.4.4/randomColor.min.js\"></script>\n    <script src=\"woowahan.js\"></script>\n    <style>\n      /*.main-view {*/\n        /*width: 500px;*/\n        /*height: 400px;*/\n      /*}*/\n      .child {\n        width: 200px;\n        font-size: 24px;\n      }\n    </style>\n  </head>\n  <body>\n    <div id=\"app\"></div>\n    <script id=\"main-view\" type=\"text/x-template\">\n      <nav class=\"navbar navbar-inverse navbar-fixed-top\">\n        <div class=\"container\">\n          <div class=\"navbar-header\">\n            <button type=\"button\" class=\"navbar-toggle collapsed\" data-toggle=\"collapse\" data-target=\"#navbar\" aria-expanded=\"false\" aria-controls=\"navbar\">\n              <span class=\"sr-only\">Toggle navigation</span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n            </button>\n            <a class=\"navbar-brand\" href=\"#\">Project name</a>\n          </div>\n          <div id=\"navbar\" class=\"navbar-collapse collapse\">\n            <form class=\"navbar-form navbar-right\">\n              <div class=\"form-group\">\n                <input type=\"text\" placeholder=\"Email\" class=\"form-control\">\n              </div>\n              <div class=\"form-group\">\n                <input type=\"password\" placeholder=\"Password\" class=\"form-control\">\n              </div>\n              <button type=\"submit\" class=\"btn btn-success\">Sign in</button>\n            </form>\n          </div><!--/.navbar-collapse -->\n        </div>\n      </nav>\n\n      <!-- Main jumbotron for a primary marketing message or call to action -->\n      <div class=\"jumbotron\">\n        <div class=\"container\">\n          <h1>Hello, world!</h1>\n          <p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.</p>\n          <p><a class=\"btn btn-primary btn-lg\" href=\"#\" role=\"button\">Learn more &raquo;</a></p>\n        </div>\n      </div>\n\n      <div id=\"child\" class=\"container\">\n      </div> <!-- /container -->\n    </script>\n    <script id=\"child-view\" type=\"text/x-template\">\n      <div>\n        <!-- Example row of columns -->\n        <div class=\"row\">\n          <div class=\"col-md-4\">\n            <h2>Heading</h2>\n            <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n            <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n          </div>\n          <div class=\"col-md-4\">\n            <h2>Heading</h2>\n            <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>\n            <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n          </div>\n          <div class=\"col-md-4\">\n            <h2>Heading</h2>\n            <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>\n            <p><a class=\"btn btn-default\" href=\"#\" role=\"button\">View details &raquo;</a></p>\n          </div>\n        </div>\n\n        <hr>\n\n        <footer>\n          <p>&copy; 2016 Company, Inc.</p>\n        </footer>\n      </div>\n    </script>\n    <script src=\"app.js\"></script>\n  </body>\n</html>"
  },
  {
    "path": "examples/middleware/woowahan.js",
    "content": "!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"\",t(0)}([function(e,t,n){\"use strict\";e.exports=n(1)},function(e,t,n){(function(t){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}var o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(2).format,u=n(6),c=n(9),l=n(12),f=n(13).MIDDLEWARE,h=n(13).MIDDLEWARE_PROTOCOL,p=n(13).MiddlewareRunner,d=u(\"Woowahan\"),v=1e3/60,g={get dispatch(){return y.dispatch.bind(y)},get getMiddleware(){return y.getMiddleware.bind(y)},get getStates(){return y.getStates.bind(y)},get setStates(){return y.setStates.bind(y)},get getComponent(){return y.getComponent.bind(y)},get getRouteTables(){return y.getRouteTables.bind(y)},get addAction(){return y.addAction.bind(y)},get removeAction(){return y.removeAction.bind(y)},get addError(){return y.addError.bind(y)}},y=void 0;t.__backboneAgent&&t.__backboneAgent.handleBackbone(c),c.Model.prototype.idAttribute=\"___ID_ATTR___\",c.View.prototype.viewname=\"___WOOWA_VIEW___\";var m=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),this.reducers=t.reducers||{},this.components=t.components||{},this.middlewares={app:{before:[],after:[]},router:{before:[],after:[]},reducer:{before:[],after:[]},view:{before:[],after:[],unmount:[]}},this.store=null,this.queue=[],this.actionObject={},this.queuemonitor=null,y=this,this.enableQueue()}return s(e,[{key:\"enableQueue\",value:function(){this.queuemonitor=setInterval(this.queuing.bind(this),v)}},{key:\"disableQueue\",value:function(){this.queuemonitor=clearInterval(this.queuemonitor)}},{key:\"addAction\",value:function(e){this.actionObject[e]=Date.now(),1===this.numberOfWorkAction()&&this.trigger(\"start\")}},{key:\"removeAction\",value:function(e){delete this.actionObject[e],0===this.numberOfWorkAction()&&this.trigger(\"finish\")}},{key:\"addError\",value:function(e){this.trigger(\"error\",e)}},{key:\"queuing\",value:function(){this.disableQueue();var e=this.queue.shift();if(e){var t=this.reducers[e.action.type];if(!t)throw this.enableQueue(),new Error(\"The unregistered reducer. Please check the type of action, if there is a written reducer use after registration.\");if(e.subscriber=e.subscriber||function(){},\"function\"!=typeof e.subscriber)throw this.enableQueue(),new Error(\"The listener must be a function. If you do not need the listener it may not be specified.\");if(t.schema){var n=t.schema.validate(e.action.data);n?this.trigger(\"error\",n):new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,e.action.data,e.subscriber.bind(this))))}else new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,e.action.data,e.subscriber.bind(this))))}this.enableQueue()}},{key:\"bindStore\",value:function(e){this.store=e}},{key:\"bindReducer\",value:function(e){this.reducers[e.actionName]=e}},{key:\"bindComponent\",value:function(e){this.components[e.name]=e}},{key:\"bindPlugin\",value:function(t){var n=t.type.toLowerCase();if(e.View.prototype._plugins.hasOwnProperty(n))throw new Error(\"Duplicate plugin name\");e.View.prototype._plugins[n]=t.plugin}},{key:\"combineReducer\",value:function(e){var t=this;e&&e.forEach(function(e){t.bindReducer(e)})}},{key:\"getStates\",value:function(e){return\"undefined\"!=typeof e?this.store[e]:this.store}},{key:\"setStates\",value:function(e,t){var n=void 0;n=\"string\"==typeof e&&\"undefined\"!=typeof t?r({},e,t):e,this.store||(this.store={}),Object.assign(this.store,n)}},{key:\"getMiddleware\",value:function(e,t){return this.middlewares[e][t]}},{key:\"getComponent\",value:function(e){var t=this.components[e];if(t)return t.view}},{key:\"getRouteTables\",value:function(){return l.routeTables}},{key:\"dispatch\",value:function(e,t){d(a(\"dispatch action %s\",e.type)),this.queue.push({action:e,subscriber:t})}},{key:\"use\",value:function(e){var t=this;Array.isArray(e)?e.forEach(function(e){return t.useModule(e)}):\"object\"!==(\"undefined\"==typeof e?\"undefined\":o(e))||\"wwtype\"in e?this.useModule(e):Object.keys(e).forEach(function(n){\"function\"==typeof e[n]&&t.useModule(e[n])})}},{key:\"useModule\",value:function(e){switch(e.wwtype){case\"reducer\":this.bindReducer(e);break;case\"layout\":l.bindLayout(e);break;case\"store\":this.bindStore(e.store);break;case\"component\":console.warn(\"Component:: Deprecated and will be removed in a future release.\"),this.bindComponent(e);break;case\"plugin\":this.bindPlugin(e)}}},{key:\"set\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e(n);if(!r.mwtype)throw new Error('Required attribute \"mwtype\" is missing.');Object.values(h).forEach(function(e){e in r&&t.middlewares[r.mwtype][e].push(r)})}},{key:\"start\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"undefined\"==typeof jQuery)throw new Error(\"jQuery is not loaded!!\");var r=setInterval(function(){switch(document.readyState){case\"complete\":case\"loaded\":break;default:return}clearInterval(r),e&&l.design(e,n,g);var i=t.getMiddleware(f.APP,h.BEFORE);p.run(i,h.BEFORE,[g],function(){i=this.getMiddleware(f.APP,h.AFTER),p.run(i,h.AFTER,[g],function(){c.history.start({pushState:!!n.pushState})})}.bind(t))},1)}},{key:\"numberOfAction\",value:function(){return this.queue.length}},{key:\"numberOfWorkAction\",value:function(){return Object.keys(this.actionObject).length}}]),e}();Object.assign(m.prototype,c.Events),m.$=c.$,m.View=n(14)(g),m.Reducer=n(19)(g),m.Error=n(20),m.Types=n(21),m.Store=n(22),m.Action=n(23),m.Event=n(24),m.Schema=n(25),m.Layout=n(26),m.Component=n(27),m.Plugin=n(28),e.exports=t.Woowahan=m,m.CollectionView=n(29)(g),m.ItemView=n(31)(g),m.PopupView=n(32)(g)}).call(t,function(){return this}())},function(e,t,n){(function(e,r){function i(e,n){var r={seen:[],stylize:s};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),v(n)?r.showHidden=n:n&&t._extend(r,n),x(r.showHidden)&&(r.showHidden=!1),x(r.depth)&&(r.depth=2),x(r.colors)&&(r.colors=!1),x(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=o),u(r,e,r.depth)}function o(e,t){var n=i.styles[t];return n?\"\u001b[\"+i.colors[n][0]+\"m\"+e+\"\u001b[\"+i.colors[n][1]+\"m\":e}function s(e,t){return e}function a(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}function u(e,n,r){if(e.customInspect&&n&&_(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var i=n.inspect(r,e);return b(i)||(i=u(e,i,r)),i}var o=c(e,n);if(o)return o;var s=Object.keys(n),v=a(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(n)),A(n)&&(s.indexOf(\"message\")>=0||s.indexOf(\"description\")>=0))return l(n);if(0===s.length){if(_(n)){var g=n.name?\": \"+n.name:\"\";return e.stylize(\"[Function\"+g+\"]\",\"special\")}if(E(n))return e.stylize(RegExp.prototype.toString.call(n),\"regexp\");if(S(n))return e.stylize(Date.prototype.toString.call(n),\"date\");if(A(n))return l(n)}var y=\"\",m=!1,w=[\"{\",\"}\"];if(d(n)&&(m=!0,w=[\"[\",\"]\"]),_(n)){var x=n.name?\": \"+n.name:\"\";y=\" [Function\"+x+\"]\"}if(E(n)&&(y=\" \"+RegExp.prototype.toString.call(n)),S(n)&&(y=\" \"+Date.prototype.toUTCString.call(n)),A(n)&&(y=\" \"+l(n)),0===s.length&&(!m||0==n.length))return w[0]+y+w[1];if(r<0)return E(n)?e.stylize(RegExp.prototype.toString.call(n),\"regexp\"):e.stylize(\"[Object]\",\"special\");e.seen.push(n);var T;return T=m?f(e,n,r,v,s):s.map(function(t){return h(e,n,r,v,t,m)}),e.seen.pop(),p(T,y,w)}function c(e,t){if(x(t))return e.stylize(\"undefined\",\"undefined\");if(b(t)){var n=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(n,\"string\")}return m(t)?e.stylize(\"\"+t,\"number\"):v(t)?e.stylize(\"\"+t,\"boolean\"):g(t)?e.stylize(\"null\",\"null\"):void 0}function l(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function f(e,t,n,r,i){for(var o=[],s=0,a=t.length;s<a;++s)N(t,String(s))?o.push(h(e,t,n,r,String(s),!0)):o.push(\"\");return i.forEach(function(i){i.match(/^\\d+$/)||o.push(h(e,t,n,r,i,!0))}),o}function h(e,t,n,r,i,o){var s,a,c;if(c=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},c.get?a=c.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):c.set&&(a=e.stylize(\"[Setter]\",\"special\")),N(r,i)||(s=\"[\"+i+\"]\"),a||(e.seen.indexOf(c.value)<0?(a=g(n)?u(e,c.value,null):u(e,c.value,n-1),a.indexOf(\"\\n\")>-1&&(a=o?a.split(\"\\n\").map(function(e){return\"  \"+e}).join(\"\\n\").substr(2):\"\\n\"+a.split(\"\\n\").map(function(e){return\"   \"+e}).join(\"\\n\"))):a=e.stylize(\"[Circular]\",\"special\")),x(s)){if(o&&i.match(/^\\d+$/))return a;s=JSON.stringify(\"\"+i),s.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,\"name\")):(s=s.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),s=e.stylize(s,\"string\"))}return s+\": \"+a}function p(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf(\"\\n\")>=0&&r++,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0);return i>60?n[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+n[1]:n[0]+t+\" \"+e.join(\", \")+\" \"+n[1]}function d(e){return Array.isArray(e)}function v(e){return\"boolean\"==typeof e}function g(e){return null===e}function y(e){return null==e}function m(e){return\"number\"==typeof e}function b(e){return\"string\"==typeof e}function w(e){return\"symbol\"==typeof e}function x(e){return void 0===e}function E(e){return T(e)&&\"[object RegExp]\"===k(e)}function T(e){return\"object\"==typeof e&&null!==e}function S(e){return T(e)&&\"[object Date]\"===k(e)}function A(e){return T(e)&&(\"[object Error]\"===k(e)||e instanceof Error)}function _(e){return\"function\"==typeof e}function C(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||\"undefined\"==typeof e}function k(e){return Object.prototype.toString.call(e)}function j(e){return e<10?\"0\"+e.toString(10):e.toString(10)}function O(){var e=new Date,t=[j(e.getHours()),j(e.getMinutes()),j(e.getSeconds())].join(\":\");return[e.getDate(),L[e.getMonth()],t].join(\" \")}function N(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var R=/%[sdj%]/g;t.format=function(e){if(!b(e)){for(var t=[],n=0;n<arguments.length;n++)t.push(i(arguments[n]));return t.join(\" \")}for(var n=1,r=arguments,o=r.length,s=String(e).replace(R,function(e){if(\"%%\"===e)return\"%\";if(n>=o)return e;switch(e){case\"%s\":return String(r[n++]);case\"%d\":return Number(r[n++]);case\"%j\":try{return JSON.stringify(r[n++])}catch(e){return\"[Circular]\"}default:return e}}),a=r[n];n<o;a=r[++n])s+=g(a)||!T(a)?\" \"+a:\" \"+i(a);return s},t.deprecate=function(n,i){function o(){if(!s){if(r.throwDeprecation)throw new Error(i);r.traceDeprecation?console.trace(i):console.error(i),s=!0}return n.apply(this,arguments)}if(x(e.process))return function(){return t.deprecate(n,i).apply(this,arguments)};if(r.noDeprecation===!0)return n;var s=!1;return o};var D,M={};t.debuglog=function(e){if(x(D)&&(D=r.env.NODE_DEBUG||\"\"),e=e.toUpperCase(),!M[e])if(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\").test(D)){var n=r.pid;M[e]=function(){var r=t.format.apply(t,arguments);console.error(\"%s %d: %s\",e,n,r)}}else M[e]=function(){};return M[e]},t.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},t.isArray=d,t.isBoolean=v,t.isNull=g,t.isNullOrUndefined=y,t.isNumber=m,t.isString=b,t.isSymbol=w,t.isUndefined=x,t.isRegExp=E,t.isObject=T,t.isDate=S,t.isError=A,t.isFunction=_,t.isPrimitive=C,t.isBuffer=n(4);var L=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];t.log=function(){console.log(\"%s - %s\",O(),t.format.apply(t,arguments))},t.inherits=n(5),t._extend=function(e,t){if(!t||!T(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e}}).call(t,function(){return this}(),n(3))},function(e,t){function n(){throw new Error(\"setTimeout has not been defined\")}function r(){throw new Error(\"clearTimeout has not been defined\")}function i(e){if(l===setTimeout)return setTimeout(e,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(e,0);try{return l(e,0)}catch(t){try{return l.call(null,e,0)}catch(t){return l.call(this,e,0)}}}function o(e){if(f===clearTimeout)return clearTimeout(e);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function s(){v&&p&&(v=!1,p.length?d=p.concat(d):g=-1,d.length&&a())}function a(){if(!v){var e=i(s);v=!0;for(var t=d.length;t;){for(p=d,d=[];++g<t;)p&&p[g].run();g=-1,t=d.length}p=null,v=!1,o(e)}}function u(e,t){this.fun=e,this.array=t}function c(){}var l,f,h=e.exports={};!function(){try{l=\"function\"==typeof setTimeout?setTimeout:n}catch(e){l=n}try{f=\"function\"==typeof clearTimeout?clearTimeout:r}catch(e){f=r}}();var p,d=[],v=!1,g=-1;h.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];d.push(new u(e,t)),1!==d.length||v||i(a)},u.prototype.run=function(){this.fun.apply(null,this.array)},h.title=\"browser\",h.browser=!0,h.env={},h.argv=[],h.version=\"\",h.versions={},h.on=c,h.addListener=c,h.once=c,h.off=c,h.removeListener=c,h.removeAllListeners=c,h.emit=c,h.prependListener=c,h.prependOnceListener=c,h.listeners=function(e){return[]},h.binding=function(e){throw new Error(\"process.binding is not supported\")},h.cwd=function(){return\"/\"},h.chdir=function(e){throw new Error(\"process.chdir is not supported\")},h.umask=function(){return 0}},function(e,t){e.exports=function(e){return e&&\"object\"==typeof e&&\"function\"==typeof e.copy&&\"function\"==typeof e.fill&&\"function\"==typeof e.readUInt8}},function(e,t){\"function\"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){(function(r){function i(){return!(!window||!window.process||\"renderer\"!==window.process.type)||(document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))}function o(e){var n=this.useColors;if(e[0]=(n?\"%c\":\"\")+this.namespace+(n?\" %c\":\" \")+e[0]+(n?\"%c \":\" \")+\"+\"+t.humanize(this.diff),n){var r=\"color: \"+this.color;e.splice(1,0,r,\"color: inherit\");var i=0,o=0;e[0].replace(/%[a-zA-Z%]/g,function(e){\"%%\"!==e&&(i++,\"%c\"===e&&(o=i))}),e.splice(o,0,r)}}function s(){return\"object\"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(e){try{null==e?t.storage.removeItem(\"debug\"):t.storage.debug=e}catch(e){}}function u(){var e;try{e=t.storage.debug}catch(e){}return!e&&\"undefined\"!=typeof r&&\"env\"in r&&(e=r.env.DEBUG),e}function c(){try{return window.localStorage}catch(e){}}t=e.exports=n(7),t.log=s,t.formatArgs=o,t.save=a,t.load=u,t.useColors=i,t.storage=\"undefined\"!=typeof chrome&&\"undefined\"!=typeof chrome.storage?chrome.storage.local:c(),t.colors=[\"lightseagreen\",\"forestgreen\",\"goldenrod\",\"dodgerblue\",\"darkorchid\",\"crimson\"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return\"[UnexpectedJSONParseError]: \"+e.message}},t.enable(u())}).call(t,n(3))},function(e,t,n){function r(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}function i(e){function n(){if(n.enabled){var e=n,r=+new Date,i=r-(c||r);e.diff=i,e.prev=c,e.curr=r,c=r;for(var o=new Array(arguments.length),s=0;s<o.length;s++)o[s]=arguments[s];o[0]=t.coerce(o[0]),\"string\"!=typeof o[0]&&o.unshift(\"%O\");var a=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,function(n,r){if(\"%%\"===n)return n;a++;var i=t.formatters[r];if(\"function\"==typeof i){var s=o[a];n=i.call(e,s),o.splice(a,1),a--}return n}),t.formatArgs.call(e,o);var u=n.log||t.log||console.log.bind(console);u.apply(e,o)}}return n.namespace=e,n.enabled=t.enabled(e),n.useColors=t.useColors(),n.color=r(e),\"function\"==typeof t.init&&t.init(n),n}function o(e){t.save(e),t.names=[],t.skips=[];for(var n=(\"string\"==typeof e?e:\"\").split(/[\\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&(e=n[i].replace(/\\*/g,\".*?\"),\"-\"===e[0]?t.skips.push(new RegExp(\"^\"+e.substr(1)+\"$\")):t.names.push(new RegExp(\"^\"+e+\"$\")))}function s(){t.enable(\"\")}function a(e){var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1}function u(e){return e instanceof Error?e.stack||e.message:e}t=e.exports=i.debug=i.default=i,t.coerce=u,t.disable=s,t.enable=o,t.enabled=a,t.humanize=n(8),t.names=[],t.skips=[],t.formatters={};var c},function(e,t){function n(e){if(e=String(e),!(e.length>100)){var t=/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var n=parseFloat(t[1]),r=(t[2]||\"ms\").toLowerCase();switch(r){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return n*l;case\"days\":case\"day\":case\"d\":return n*c;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return n*u;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return n*a;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return n*s;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return n;default:return}}}}function r(e){return e>=c?Math.round(e/c)+\"d\":e>=u?Math.round(e/u)+\"h\":e>=a?Math.round(e/a)+\"m\":e>=s?Math.round(e/s)+\"s\":e+\"ms\"}function i(e){return o(e,c,\"day\")||o(e,u,\"hour\")||o(e,a,\"minute\")||o(e,s,\"second\")||e+\" ms\"}function o(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+\" \"+n:Math.ceil(e/t)+\" \"+n+\"s\"}var s=1e3,a=60*s,u=60*a,c=24*u,l=365.25*c;e.exports=function(e,t){t=t||{};var o=typeof e;if(\"string\"===o&&e.length>0)return n(e);if(\"number\"===o&&isNaN(e)===!1)return t.long?i(e):r(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))}},function(e,t,n){var r,i;(function(o){!function(s){var a=\"object\"==typeof self&&self.self===self&&self||\"object\"==typeof o&&o.global===o&&o;r=[n(10),n(11),t],i=function(e,t,n){a.Backbone=s(a,n,e,t)}.apply(t,r),!(void 0!==i&&(e.exports=i))}(function(e,t,n,r){var i=e.Backbone,s=Array.prototype.slice;t.VERSION=\"1.3.3\",t.$=r,t.noConflict=function(){return e.Backbone=i,this},t.emulateHTTP=!1,t.emulateJSON=!1;var a=function(e,t,r){switch(e){case 1:return function(){return n[t](this[r])};case 2:return function(e){return n[t](this[r],e)};case 3:return function(e,i){return n[t](this[r],c(e,this),i)};case 4:return function(e,i,o){return n[t](this[r],c(e,this),i,o)};default:return function(){var e=s.call(arguments);return e.unshift(this[r]),n[t].apply(n,e)}}},u=function(e,t,r){n.each(t,function(t,i){n[i]&&(e.prototype[i]=a(t,i,r))})},c=function(e,t){return n.isFunction(e)?e:n.isObject(e)&&!t._isModel(e)?l(e):n.isString(e)?function(t){return t.get(e)}:e},l=function(e){var t=n.matches(e);return function(e){return t(e.attributes)}},f=t.Events={},h=/\\s+/,p=function(e,t,r,i,o){var s,a=0;if(r&&\"object\"==typeof r){void 0!==i&&\"context\"in o&&void 0===o.context&&(o.context=i);for(s=n.keys(r);a<s.length;a++)t=p(e,t,s[a],r[s[a]],o)}else if(r&&h.test(r))for(s=r.split(h);a<s.length;a++)t=e(t,s[a],i,o);else t=e(t,r,i,o);return t};f.on=function(e,t,n){return d(this,e,t,n)};var d=function(e,t,n,r,i){if(e._events=p(v,e._events||{},t,n,{context:r,ctx:e,listening:i}),i){var o=e._listeners||(e._listeners={});o[i.id]=i}return e};f.listenTo=function(e,t,r){if(!e)return this;var i=e._listenId||(e._listenId=n.uniqueId(\"l\")),o=this._listeningTo||(this._listeningTo={}),s=o[i];if(!s){var a=this._listenId||(this._listenId=n.uniqueId(\"l\"));s=o[i]={obj:e,objId:i,id:a,listeningTo:o,count:0}}return d(e,t,r,this,s),this};var v=function(e,t,n,r){if(n){var i=e[t]||(e[t]=[]),o=r.context,s=r.ctx,a=r.listening;a&&a.count++,i.push({callback:n,context:o,ctx:o||s,listening:a})}return e};f.off=function(e,t,n){return this._events?(this._events=p(g,this._events,e,t,{context:n,listeners:this._listeners}),this):this},f.stopListening=function(e,t,r){var i=this._listeningTo;if(!i)return this;for(var o=e?[e._listenId]:n.keys(i),s=0;s<o.length;s++){var a=i[o[s]];if(!a)break;a.obj.off(t,r,this)}return this};var g=function(e,t,r,i){if(e){var o,s=0,a=i.context,u=i.listeners;if(t||r||a){for(var c=t?[t]:n.keys(e);s<c.length;s++){t=c[s];var l=e[t];if(!l)break;for(var f=[],h=0;h<l.length;h++){var p=l[h];r&&r!==p.callback&&r!==p.callback._callback||a&&a!==p.context?f.push(p):(o=p.listening,o&&0===--o.count&&(delete u[o.id],delete o.listeningTo[o.objId]))}f.length?e[t]=f:delete e[t]}return e}for(var d=n.keys(u);s<d.length;s++)o=u[d[s]],delete u[o.id],delete o.listeningTo[o.objId]}};f.once=function(e,t,r){var i=p(y,{},e,t,n.bind(this.off,this));return\"string\"==typeof e&&null==r&&(t=void 0),this.on(i,t,r)},f.listenToOnce=function(e,t,r){var i=p(y,{},t,r,n.bind(this.stopListening,this,e));return this.listenTo(e,i)};var y=function(e,t,r,i){if(r){var o=e[t]=n.once(function(){i(t,o),r.apply(this,arguments)});o._callback=r}return e};f.trigger=function(e){if(!this._events)return this;for(var t=Math.max(0,arguments.length-1),n=Array(t),r=0;r<t;r++)n[r]=arguments[r+1];return p(m,this._events,e,void 0,n),this};var m=function(e,t,n,r){if(e){var i=e[t],o=e.all;i&&o&&(o=o.slice()),i&&b(i,r),o&&b(o,[t].concat(r))}return e},b=function(e,t){var n,r=-1,i=e.length,o=t[0],s=t[1],a=t[2];switch(t.length){case 0:for(;++r<i;)(n=e[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o);return;case 2:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s);return;case 3:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s,a);return;default:for(;++r<i;)(n=e[r]).callback.apply(n.ctx,t);return}};f.bind=f.on,f.unbind=f.off,n.extend(t,f);var w=t.Model=function(e,t){var r=e||{};t||(t={}),this.cid=n.uniqueId(this.cidPrefix),this.attributes={},t.collection&&(this.collection=t.collection),t.parse&&(r=this.parse(r,t)||{});var i=n.result(this,\"defaults\");r=n.defaults(n.extend({},i,r),i),this.set(r,t),this.changed={},this.initialize.apply(this,arguments)};n.extend(w.prototype,f,{changed:null,validationError:null,idAttribute:\"id\",cidPrefix:\"c\",initialize:function(){},toJSON:function(e){return n.clone(this.attributes)},sync:function(){return t.sync.apply(this,arguments)},get:function(e){return this.attributes[e]},escape:function(e){return n.escape(this.get(e))},has:function(e){return null!=this.get(e)},matches:function(e){return!!n.iteratee(e,this)(this.attributes)},set:function(e,t,r){if(null==e)return this;var i;if(\"object\"==typeof e?(i=e,r=t):(i={})[e]=t,r||(r={}),!this._validate(i,r))return!1;var o=r.unset,s=r.silent,a=[],u=this._changing;this._changing=!0,u||(this._previousAttributes=n.clone(this.attributes),this.changed={});var c=this.attributes,l=this.changed,f=this._previousAttributes;for(var h in i)t=i[h],n.isEqual(c[h],t)||a.push(h),n.isEqual(f[h],t)?delete l[h]:l[h]=t,o?delete c[h]:c[h]=t;if(this.idAttribute in i&&(this.id=this.get(this.idAttribute)),!s){a.length&&(this._pending=r);for(var p=0;p<a.length;p++)this.trigger(\"change:\"+a[p],this,c[a[p]],r)}if(u)return this;if(!s)for(;this._pending;)r=this._pending,this._pending=!1,this.trigger(\"change\",this,r);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,n.extend({},t,{unset:!0}))},clear:function(e){var t={};for(var r in this.attributes)t[r]=void 0;return this.set(t,n.extend({},e,{unset:!0}))},hasChanged:function(e){return null==e?!n.isEmpty(this.changed):n.has(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&n.clone(this.changed);var t=this._changing?this._previousAttributes:this.attributes,r={};for(var i in e){var o=e[i];n.isEqual(t[i],o)||(r[i]=o)}return!!n.size(r)&&r},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return n.clone(this._previousAttributes)},fetch:function(e){e=n.extend({parse:!0},e);var t=this,r=e.success;return e.success=function(n){var i=e.parse?t.parse(n,e):n;return!!t.set(i,e)&&(r&&r.call(e.context,t,n,e),void t.trigger(\"sync\",t,n,e))},W(this,e),this.sync(\"read\",this,e)},save:function(e,t,r){var i;null==e||\"object\"==typeof e?(i=e,r=t):(i={})[e]=t,r=n.extend({validate:!0,parse:!0},r);var o=r.wait;if(i&&!o){if(!this.set(i,r))return!1}else if(!this._validate(i,r))return!1;var s=this,a=r.success,u=this.attributes;r.success=function(e){s.attributes=u;var t=r.parse?s.parse(e,r):e;return o&&(t=n.extend({},i,t)),!(t&&!s.set(t,r))&&(a&&a.call(r.context,s,e,r),void s.trigger(\"sync\",s,e,r))},W(this,r),i&&o&&(this.attributes=n.extend({},u,i));var c=this.isNew()?\"create\":r.patch?\"patch\":\"update\";\"patch\"!==c||r.attrs||(r.attrs=i);var l=this.sync(c,this,r);return this.attributes=u,l},destroy:function(e){e=e?n.clone(e):{};var t=this,r=e.success,i=e.wait,o=function(){t.stopListening(),t.trigger(\"destroy\",t,t.collection,e)};e.success=function(n){i&&o(),r&&r.call(e.context,t,n,e),t.isNew()||t.trigger(\"sync\",t,n,e)};var s=!1;return this.isNew()?n.defer(e.success):(W(this,e),s=this.sync(\"delete\",this,e)),i||o(),s},url:function(){var e=n.result(this,\"urlRoot\")||n.result(this.collection,\"url\")||H();if(this.isNew())return e;var t=this.get(this.idAttribute);return e.replace(/[^\\/]$/,\"$&/\")+encodeURIComponent(t)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(e){return this._validate({},n.extend({},e,{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=n.extend({},this.attributes,e);var r=this.validationError=this.validate(e,t)||null;return!r||(this.trigger(\"invalid\",this,r,n.extend(t,{validationError:r})),!1)}});var x={keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1};u(w,x,\"attributes\");var E=t.Collection=function(e,t){t||(t={}),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,n.extend({silent:!0},t))},T={add:!0,remove:!0,merge:!0},S={add:!0,remove:!1},A=function(e,t,n){n=Math.min(Math.max(n,0),e.length);var r,i=Array(e.length-n),o=t.length;for(r=0;r<i.length;r++)i[r]=e[r+n];for(r=0;r<o;r++)e[r+n]=t[r];for(r=0;r<i.length;r++)e[r+o+n]=i[r]};n.extend(E.prototype,f,{model:w,initialize:function(){},toJSON:function(e){return this.map(function(t){return t.toJSON(e)})},sync:function(){return t.sync.apply(this,arguments)},add:function(e,t){return this.set(e,n.extend({merge:!1},t,S))},remove:function(e,t){t=n.extend({},t);var r=!n.isArray(e);e=r?[e]:e.slice();var i=this._removeModels(e,t);return!t.silent&&i.length&&(t.changes={added:[],merged:[],removed:i},this.trigger(\"update\",this,t)),r?i[0]:i},set:function(e,t){if(null!=e){t=n.extend({},T,t),t.parse&&!this._isModel(e)&&(e=this.parse(e,t)||[]);var r=!n.isArray(e);e=r?[e]:e.slice();var i=t.at;null!=i&&(i=+i),i>this.length&&(i=this.length),i<0&&(i+=this.length+1);var o,s,a=[],u=[],c=[],l=[],f={},h=t.add,p=t.merge,d=t.remove,v=!1,g=this.comparator&&null==i&&t.sort!==!1,y=n.isString(this.comparator)?this.comparator:null;for(s=0;s<e.length;s++){o=e[s];var m=this.get(o);if(m){if(p&&o!==m){var b=this._isModel(o)?o.attributes:o;t.parse&&(b=m.parse(b,t)),m.set(b,t),c.push(m),g&&!v&&(v=m.hasChanged(y))}f[m.cid]||(f[m.cid]=!0,a.push(m)),e[s]=m}else h&&(o=e[s]=this._prepareModel(o,t),o&&(u.push(o),this._addReference(o,t),f[o.cid]=!0,a.push(o)))}if(d){for(s=0;s<this.length;s++)o=this.models[s],f[o.cid]||l.push(o);l.length&&this._removeModels(l,t)}var w=!1,x=!g&&h&&d;if(a.length&&x?(w=this.length!==a.length||n.some(this.models,function(e,t){return e!==a[t]}),this.models.length=0,A(this.models,a,0),this.length=this.models.length):u.length&&(g&&(v=!0),A(this.models,u,null==i?this.length:i),this.length=this.models.length),v&&this.sort({silent:!0}),!t.silent){for(s=0;s<u.length;s++)null!=i&&(t.index=i+s),o=u[s],o.trigger(\"add\",o,this,t);(v||w)&&this.trigger(\"sort\",this,t),(u.length||l.length||c.length)&&(t.changes={added:u,removed:l,merged:c},this.trigger(\"update\",this,t))}return r?e[0]:e}},reset:function(e,t){t=t?n.clone(t):{};for(var r=0;r<this.models.length;r++)this._removeReference(this.models[r],t);return t.previousModels=this.models,this._reset(),e=this.add(e,n.extend({silent:!0},t)),t.silent||this.trigger(\"reset\",this,t),e},push:function(e,t){return this.add(e,n.extend({at:this.length},t))},pop:function(e){var t=this.at(this.length-1);return this.remove(t,e)},unshift:function(e,t){return this.add(e,n.extend({at:0},t))},shift:function(e){var t=this.at(0);return this.remove(t,e)},slice:function(){return s.apply(this.models,arguments)},get:function(e){if(null!=e)return this._byId[e]||this._byId[this.modelId(e.attributes||e)]||e.cid&&this._byId[e.cid]},has:function(e){return null!=this.get(e)},at:function(e){return e<0&&(e+=this.length),this.models[e]},where:function(e,t){return this[t?\"find\":\"filter\"](e)},findWhere:function(e){return this.where(e,!0)},sort:function(e){var t=this.comparator;if(!t)throw new Error(\"Cannot sort a set without a comparator\");e||(e={});var r=t.length;return n.isFunction(t)&&(t=n.bind(t,this)),1===r||n.isString(t)?this.models=this.sortBy(t):this.models.sort(t),e.silent||this.trigger(\"sort\",this,e),this},pluck:function(e){return this.map(e+\"\")},fetch:function(e){e=n.extend({parse:!0},e);var t=e.success,r=this;return e.success=function(n){var i=e.reset?\"reset\":\"set\";r[i](n,e),t&&t.call(e.context,r,n,e),r.trigger(\"sync\",r,n,e)},W(this,e),this.sync(\"read\",this,e)},create:function(e,t){t=t?n.clone(t):{};var r=t.wait;if(e=this._prepareModel(e,t),!e)return!1;r||this.add(e,t);var i=this,o=t.success;return t.success=function(e,t,n){r&&i.add(e,n),o&&o.call(n.context,e,t,n)},e.save(null,t),e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(e){return e[this.model.prototype.idAttribute||\"id\"]},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(this._isModel(e))return e.collection||(e.collection=this),e;t=t?n.clone(t):{},t.collection=this;var r=new this.model(e,t);return r.validationError?(this.trigger(\"invalid\",this,r.validationError,t),!1):r},_removeModels:function(e,t){for(var n=[],r=0;r<e.length;r++){var i=this.get(e[r]);if(i){var o=this.indexOf(i);this.models.splice(o,1),this.length--,delete this._byId[i.cid];var s=this.modelId(i.attributes);null!=s&&delete this._byId[s],t.silent||(t.index=o,i.trigger(\"remove\",i,this,t)),n.push(i),this._removeReference(i,t)}}return n},_isModel:function(e){return e instanceof w},_addReference:function(e,t){this._byId[e.cid]=e;var n=this.modelId(e.attributes);null!=n&&(this._byId[n]=e),e.on(\"all\",this._onModelEvent,this)},_removeReference:function(e,t){delete this._byId[e.cid];var n=this.modelId(e.attributes);null!=n&&delete this._byId[n],this===e.collection&&delete e.collection,e.off(\"all\",this._onModelEvent,this)},_onModelEvent:function(e,t,n,r){if(t){if((\"add\"===e||\"remove\"===e)&&n!==this)return;if(\"destroy\"===e&&this.remove(t,r),\"change\"===e){\nvar i=this.modelId(t.previousAttributes()),o=this.modelId(t.attributes);i!==o&&(null!=i&&delete this._byId[i],null!=o&&(this._byId[o]=t))}}this.trigger.apply(this,arguments)}});var _={forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3};u(E,_,\"models\");var C=t.View=function(e){this.cid=n.uniqueId(\"view\"),n.extend(this,n.pick(e,j)),this._ensureElement(),this.initialize.apply(this,arguments)},k=/^(\\S+)\\s*(.*)$/,j=[\"model\",\"collection\",\"el\",\"id\",\"attributes\",\"className\",\"tagName\",\"events\"];n.extend(C.prototype,f,{tagName:\"div\",$:function(e){return this.$el.find(e)},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(e){return this.undelegateEvents(),this._setElement(e),this.delegateEvents(),this},_setElement:function(e){this.$el=e instanceof t.$?e:t.$(e),this.el=this.$el[0]},delegateEvents:function(e){if(e||(e=n.result(this,\"events\")),!e)return this;this.undelegateEvents();for(var t in e){var r=e[t];if(n.isFunction(r)||(r=this[r]),r){var i=t.match(k);this.delegate(i[1],i[2],n.bind(r,this))}}return this},delegate:function(e,t,n){return this.$el.on(e+\".delegateEvents\"+this.cid,t,n),this},undelegateEvents:function(){return this.$el&&this.$el.off(\".delegateEvents\"+this.cid),this},undelegate:function(e,t,n){return this.$el.off(e+\".delegateEvents\"+this.cid,t,n),this},_createElement:function(e){return document.createElement(e)},_ensureElement:function(){if(this.el)this.setElement(n.result(this,\"el\"));else{var e=n.extend({},n.result(this,\"attributes\"));this.id&&(e.id=n.result(this,\"id\")),this.className&&(e.class=n.result(this,\"className\")),this.setElement(this._createElement(n.result(this,\"tagName\"))),this._setAttributes(e)}},_setAttributes:function(e){this.$el.attr(e)}}),t.sync=function(e,r,i){var o=O[e];n.defaults(i||(i={}),{emulateHTTP:t.emulateHTTP,emulateJSON:t.emulateJSON});var s={type:o,dataType:\"json\"};if(i.url||(s.url=n.result(r,\"url\")||H()),null!=i.data||!r||\"create\"!==e&&\"update\"!==e&&\"patch\"!==e||(s.contentType=\"application/json\",s.data=JSON.stringify(i.attrs||r.toJSON(i))),i.emulateJSON&&(s.contentType=\"application/x-www-form-urlencoded\",s.data=s.data?{model:s.data}:{}),i.emulateHTTP&&(\"PUT\"===o||\"DELETE\"===o||\"PATCH\"===o)){s.type=\"POST\",i.emulateJSON&&(s.data._method=o);var a=i.beforeSend;i.beforeSend=function(e){if(e.setRequestHeader(\"X-HTTP-Method-Override\",o),a)return a.apply(this,arguments)}}\"GET\"===s.type||i.emulateJSON||(s.processData=!1);var u=i.error;i.error=function(e,t,n){i.textStatus=t,i.errorThrown=n,u&&u.call(i.context,e,t,n)};var c=i.xhr=t.ajax(n.extend(s,i));return r.trigger(\"request\",r,c,i),c};var O={create:\"POST\",update:\"PUT\",patch:\"PATCH\",delete:\"DELETE\",read:\"GET\"};t.ajax=function(){return t.$.ajax.apply(t.$,arguments)};var N=t.Router=function(e){e||(e={}),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},R=/\\((.*?)\\)/g,D=/(\\(\\?)?:\\w+/g,M=/\\*\\w+/g,L=/[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;n.extend(N.prototype,f,{initialize:function(){},route:function(e,r,i){n.isRegExp(e)||(e=this._routeToRegExp(e)),n.isFunction(r)&&(i=r,r=\"\"),i||(i=this[r]);var o=this;return t.history.route(e,function(n){var s=o._extractParameters(e,n);o.execute(i,s,r)!==!1&&(o.trigger.apply(o,[\"route:\"+r].concat(s)),o.trigger(\"route\",r,s),t.history.trigger(\"route\",o,r,s))}),this},execute:function(e,t,n){e&&e.apply(this,t)},navigate:function(e,n){return t.history.navigate(e,n),this},_bindRoutes:function(){if(this.routes){this.routes=n.result(this,\"routes\");for(var e,t=n.keys(this.routes);null!=(e=t.pop());)this.route(e,this.routes[e])}},_routeToRegExp:function(e){return e=e.replace(L,\"\\\\$&\").replace(R,\"(?:$1)?\").replace(D,function(e,t){return t?e:\"([^/?]+)\"}).replace(M,\"([^?]*?)\"),new RegExp(\"^\"+e+\"(?:\\\\?([\\\\s\\\\S]*))?$\")},_extractParameters:function(e,t){var r=e.exec(t).slice(1);return n.map(r,function(e,t){return t===r.length-1?e||null:e?decodeURIComponent(e):null})}});var I=t.History=function(){this.handlers=[],this.checkUrl=n.bind(this.checkUrl,this),\"undefined\"!=typeof window&&(this.location=window.location,this.history=window.history)},q=/^[#\\/]|\\s+$/g,F=/^\\/+|\\/+$/g,P=/#.*$/;I.started=!1,n.extend(I.prototype,f,{interval:50,atRoot:function(){var e=this.location.pathname.replace(/[^\\/]$/,\"$&/\");return e===this.root&&!this.getSearch()},matchRoot:function(){var e=this.decodeFragment(this.location.pathname),t=e.slice(0,this.root.length-1)+\"/\";return t===this.root},decodeFragment:function(e){return decodeURI(e.replace(/%25/g,\"%2525\"))},getSearch:function(){var e=this.location.href.replace(/#.*/,\"\").match(/\\?.+/);return e?e[0]:\"\"},getHash:function(e){console.log(\"drive into\"),console.log(o.window),console.log(e);var t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:\"\"},getPath:function(){var e=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return\"/\"===e.charAt(0)?e.slice(1):e},getFragment:function(e){return null==e&&(e=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),e.replace(q,\"\")},start:function(e){if(I.started)throw new Error(\"Backbone.history has already been started\");if(I.started=!0,this.options=n.extend({root:\"/\"},this.options,e),this.root=this.options.root,this._wantsHashChange=this.options.hashChange!==!1,this._hasHashChange=\"onhashchange\"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=(\"/\"+this.root+\"/\").replace(F,\"/\"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var t=this.root.slice(0,-1)||\"/\";return this.location.replace(t+\"#\"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement(\"iframe\"),this.iframe.src=\"javascript:0\",this.iframe.style.display=\"none\",this.iframe.tabIndex=-1;var r=document.body,i=r.insertBefore(this.iframe,r.firstChild).contentWindow;i.document.open(),i.document.close(),i.location.hash=\"#\"+this.fragment}var o=window.addEventListener||function(e,t){return attachEvent(\"on\"+e,t)};if(this._usePushState?o(\"popstate\",this.checkUrl,!1):this._useHashChange&&!this.iframe?o(\"hashchange\",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var e=window.removeEventListener||function(e,t){return detachEvent(\"on\"+e,t)};this._usePushState?e(\"popstate\",this.checkUrl,!1):this._useHashChange&&!this.iframe&&e(\"hashchange\",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),I.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){var t=this.getFragment();return t===this.fragment&&this.iframe&&(t=this.getHash(this.iframe.contentWindow)),t!==this.fragment&&(this.iframe&&this.navigate(t),void this.loadUrl())},loadUrl:function(e){return!!this.matchRoot()&&(e=this.fragment=this.getFragment(e),n.some(this.handlers,function(t){if(t.route.test(e))return t.callback(e),!0}))},navigate:function(e,t){if(!I.started)return!1;t&&t!==!0||(t={trigger:!!t}),e=this.getFragment(e||\"\");var n=this.root;\"\"!==e&&\"?\"!==e.charAt(0)||(n=n.slice(0,-1)||\"/\");var r=n+e;if(e=this.decodeFragment(e.replace(P,\"\")),this.fragment!==e){if(this.fragment=e,this._usePushState)this.history[t.replace?\"replaceState\":\"pushState\"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getHash(this.iframe.contentWindow)){var i=this.iframe.contentWindow;t.replace||(i.document.open(),i.document.close()),this._updateHash(i.location,e,t.replace)}}return t.trigger?this.loadUrl(e):void 0}},_updateHash:function(e,t,n){if(n){var r=e.href.replace(/(javascript:|#).*$/,\"\");e.replace(r+\"#\"+t)}else e.hash=\"#\"+t}}),t.history=new I;var $=function(e,t){var r,i=this;return r=e&&n.has(e,\"constructor\")?e.constructor:function(){return i.apply(this,arguments)},n.extend(r,i,t),r.prototype=n.create(i.prototype,e),r.prototype.constructor=r,r.__super__=i.prototype,r};w.extend=E.extend=N.extend=C.extend=I.extend=$;var H=function(){throw new Error('A \"url\" property or function must be specified')},W=function(e,t){var n=t.error;t.error=function(r){n&&n.call(t.context,e,r,t),e.trigger(\"error\",e,r,t)}};return t})}).call(t,function(){return this}())},function(e,t,n){var r,i;(function(){function n(e){function t(t,n,r,i,o,s){for(;o>=0&&o<s;o+=e){var a=i?i[o]:o;r=n(r,t[a],a,t)}return r}return function(n,r,i,o){r=T(r,o,4);var s=!O(n)&&E.keys(n),a=(s||n).length,u=e>0?0:a-1;return arguments.length<3&&(i=n[s?s[u]:u],u+=e),t(n,r,i,s,u,a)}}function o(e){return function(t,n,r){n=S(n,r);for(var i=j(t),o=e>0?0:i-1;o>=0&&o<i;o+=e)if(n(t[o],o,t))return o;return-1}}function s(e,t,n){return function(r,i,o){var s=0,a=j(r);if(\"number\"==typeof o)e>0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return o=n(r,i),r[o]===i?o:-1;if(i!==i)return o=t(d.call(r,s,a),E.isNaN),o>=0?o+s:-1;for(o=e>0?s:a-1;o>=0&&o<a;o+=e)if(r[o]===i)return o;return-1}}function a(e,t){var n=L.length,r=e.constructor,i=E.isFunction(r)&&r.prototype||f,o=\"constructor\";for(E.has(e,o)&&!E.contains(t,o)&&t.push(o);n--;)o=L[n],o in e&&e[o]!==i[o]&&!E.contains(t,o)&&t.push(o)}var u=this,c=u._,l=Array.prototype,f=Object.prototype,h=Function.prototype,p=l.push,d=l.slice,v=f.toString,g=f.hasOwnProperty,y=Array.isArray,m=Object.keys,b=h.bind,w=Object.create,x=function(){},E=function(e){return e instanceof E?e:this instanceof E?void(this._wrapped=e):new E(e)};\"undefined\"!=typeof e&&e.exports&&(t=e.exports=E),t._=E,E.VERSION=\"1.8.3\";var T=function(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,o){return e.call(t,n,r,i,o)}}return function(){return e.apply(t,arguments)}},S=function(e,t,n){return null==e?E.identity:E.isFunction(e)?T(e,t,n):E.isObject(e)?E.matcher(e):E.property(e)};E.iteratee=function(e,t){return S(e,t,1/0)};var A=function(e,t){return function(n){var r=arguments.length;if(r<2||null==n)return n;for(var i=1;i<r;i++)for(var o=arguments[i],s=e(o),a=s.length,u=0;u<a;u++){var c=s[u];t&&void 0!==n[c]||(n[c]=o[c])}return n}},_=function(e){if(!E.isObject(e))return{};if(w)return w(e);x.prototype=e;var t=new x;return x.prototype=null,t},C=function(e){return function(t){return null==t?void 0:t[e]}},k=Math.pow(2,53)-1,j=C(\"length\"),O=function(e){var t=j(e);return\"number\"==typeof t&&t>=0&&t<=k};E.each=E.forEach=function(e,t,n){t=T(t,n);var r,i;if(O(e))for(r=0,i=e.length;r<i;r++)t(e[r],r,e);else{var o=E.keys(e);for(r=0,i=o.length;r<i;r++)t(e[o[r]],o[r],e)}return e},E.map=E.collect=function(e,t,n){t=S(t,n);for(var r=!O(e)&&E.keys(e),i=(r||e).length,o=Array(i),s=0;s<i;s++){var a=r?r[s]:s;o[s]=t(e[a],a,e)}return o},E.reduce=E.foldl=E.inject=n(1),E.reduceRight=E.foldr=n(-1),E.find=E.detect=function(e,t,n){var r;if(r=O(e)?E.findIndex(e,t,n):E.findKey(e,t,n),void 0!==r&&r!==-1)return e[r]},E.filter=E.select=function(e,t,n){var r=[];return t=S(t,n),E.each(e,function(e,n,i){t(e,n,i)&&r.push(e)}),r},E.reject=function(e,t,n){return E.filter(e,E.negate(S(t)),n)},E.every=E.all=function(e,t,n){t=S(t,n);for(var r=!O(e)&&E.keys(e),i=(r||e).length,o=0;o<i;o++){var s=r?r[o]:o;if(!t(e[s],s,e))return!1}return!0},E.some=E.any=function(e,t,n){t=S(t,n);for(var r=!O(e)&&E.keys(e),i=(r||e).length,o=0;o<i;o++){var s=r?r[o]:o;if(t(e[s],s,e))return!0}return!1},E.contains=E.includes=E.include=function(e,t,n,r){return O(e)||(e=E.values(e)),(\"number\"!=typeof n||r)&&(n=0),E.indexOf(e,t,n)>=0},E.invoke=function(e,t){var n=d.call(arguments,2),r=E.isFunction(t);return E.map(e,function(e){var i=r?t:e[t];return null==i?i:i.apply(e,n)})},E.pluck=function(e,t){return E.map(e,E.property(t))},E.where=function(e,t){return E.filter(e,E.matcher(t))},E.findWhere=function(e,t){return E.find(e,E.matcher(t))},E.max=function(e,t,n){var r,i,o=-(1/0),s=-(1/0);if(null==t&&null!=e){e=O(e)?e:E.values(e);for(var a=0,u=e.length;a<u;a++)r=e[a],r>o&&(o=r)}else t=S(t,n),E.each(e,function(e,n,r){i=t(e,n,r),(i>s||i===-(1/0)&&o===-(1/0))&&(o=e,s=i)});return o},E.min=function(e,t,n){var r,i,o=1/0,s=1/0;if(null==t&&null!=e){e=O(e)?e:E.values(e);for(var a=0,u=e.length;a<u;a++)r=e[a],r<o&&(o=r)}else t=S(t,n),E.each(e,function(e,n,r){i=t(e,n,r),(i<s||i===1/0&&o===1/0)&&(o=e,s=i)});return o},E.shuffle=function(e){for(var t,n=O(e)?e:E.values(e),r=n.length,i=Array(r),o=0;o<r;o++)t=E.random(0,o),t!==o&&(i[o]=i[t]),i[t]=n[o];return i},E.sample=function(e,t,n){return null==t||n?(O(e)||(e=E.values(e)),e[E.random(e.length-1)]):E.shuffle(e).slice(0,Math.max(0,t))},E.sortBy=function(e,t,n){return t=S(t,n),E.pluck(E.map(e,function(e,n,r){return{value:e,index:n,criteria:t(e,n,r)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),\"value\")};var N=function(e){return function(t,n,r){var i={};return n=S(n,r),E.each(t,function(r,o){var s=n(r,o,t);e(i,r,s)}),i}};E.groupBy=N(function(e,t,n){E.has(e,n)?e[n].push(t):e[n]=[t]}),E.indexBy=N(function(e,t,n){e[n]=t}),E.countBy=N(function(e,t,n){E.has(e,n)?e[n]++:e[n]=1}),E.toArray=function(e){return e?E.isArray(e)?d.call(e):O(e)?E.map(e,E.identity):E.values(e):[]},E.size=function(e){return null==e?0:O(e)?e.length:E.keys(e).length},E.partition=function(e,t,n){t=S(t,n);var r=[],i=[];return E.each(e,function(e,n,o){(t(e,n,o)?r:i).push(e)}),[r,i]},E.first=E.head=E.take=function(e,t,n){if(null!=e)return null==t||n?e[0]:E.initial(e,e.length-t)},E.initial=function(e,t,n){return d.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))},E.last=function(e,t,n){if(null!=e)return null==t||n?e[e.length-1]:E.rest(e,Math.max(0,e.length-t))},E.rest=E.tail=E.drop=function(e,t,n){return d.call(e,null==t||n?1:t)},E.compact=function(e){return E.filter(e,E.identity)};var R=function(e,t,n,r){for(var i=[],o=0,s=r||0,a=j(e);s<a;s++){var u=e[s];if(O(u)&&(E.isArray(u)||E.isArguments(u))){t||(u=R(u,t,n));var c=0,l=u.length;for(i.length+=l;c<l;)i[o++]=u[c++]}else n||(i[o++]=u)}return i};E.flatten=function(e,t){return R(e,t,!1)},E.without=function(e){return E.difference(e,d.call(arguments,1))},E.uniq=E.unique=function(e,t,n,r){E.isBoolean(t)||(r=n,n=t,t=!1),null!=n&&(n=S(n,r));for(var i=[],o=[],s=0,a=j(e);s<a;s++){var u=e[s],c=n?n(u,s,e):u;t?(s&&o===c||i.push(u),o=c):n?E.contains(o,c)||(o.push(c),i.push(u)):E.contains(i,u)||i.push(u)}return i},E.union=function(){return E.uniq(R(arguments,!0,!0))},E.intersection=function(e){for(var t=[],n=arguments.length,r=0,i=j(e);r<i;r++){var o=e[r];if(!E.contains(t,o)){for(var s=1;s<n&&E.contains(arguments[s],o);s++);s===n&&t.push(o)}}return t},E.difference=function(e){var t=R(arguments,!0,!0,1);return E.filter(e,function(e){return!E.contains(t,e)})},E.zip=function(){return E.unzip(arguments)},E.unzip=function(e){for(var t=e&&E.max(e,j).length||0,n=Array(t),r=0;r<t;r++)n[r]=E.pluck(e,r);return n},E.object=function(e,t){for(var n={},r=0,i=j(e);r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},E.findIndex=o(1),E.findLastIndex=o(-1),E.sortedIndex=function(e,t,n,r){n=S(n,r,1);for(var i=n(t),o=0,s=j(e);o<s;){var a=Math.floor((o+s)/2);n(e[a])<i?o=a+1:s=a}return o},E.indexOf=s(1,E.findIndex,E.sortedIndex),E.lastIndexOf=s(-1,E.findLastIndex),E.range=function(e,t,n){null==t&&(t=e||0,e=0),n=n||1;for(var r=Math.max(Math.ceil((t-e)/n),0),i=Array(r),o=0;o<r;o++,e+=n)i[o]=e;return i};var D=function(e,t,n,r,i){if(!(r instanceof t))return e.apply(n,i);var o=_(e.prototype),s=e.apply(o,i);return E.isObject(s)?s:o};E.bind=function(e,t){if(b&&e.bind===b)return b.apply(e,d.call(arguments,1));if(!E.isFunction(e))throw new TypeError(\"Bind must be called on a function\");var n=d.call(arguments,2),r=function(){return D(e,r,t,this,n.concat(d.call(arguments)))};return r},E.partial=function(e){var t=d.call(arguments,1),n=function(){for(var r=0,i=t.length,o=Array(i),s=0;s<i;s++)o[s]=t[s]===E?arguments[r++]:t[s];for(;r<arguments.length;)o.push(arguments[r++]);return D(e,n,this,this,o)};return n},E.bindAll=function(e){var t,n,r=arguments.length;if(r<=1)throw new Error(\"bindAll must be passed function names\");for(t=1;t<r;t++)n=arguments[t],e[n]=E.bind(e[n],e);return e},E.memoize=function(e,t){var n=function(r){var i=n.cache,o=\"\"+(t?t.apply(this,arguments):r);return E.has(i,o)||(i[o]=e.apply(this,arguments)),i[o]};return n.cache={},n},E.delay=function(e,t){var n=d.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},E.defer=E.partial(E.delay,E,1),E.throttle=function(e,t,n){var r,i,o,s=null,a=0;n||(n={});var u=function(){a=n.leading===!1?0:E.now(),s=null,o=e.apply(r,i),s||(r=i=null)};return function(){var c=E.now();a||n.leading!==!1||(a=c);var l=t-(c-a);return r=this,i=arguments,l<=0||l>t?(s&&(clearTimeout(s),s=null),a=c,o=e.apply(r,i),s||(r=i=null)):s||n.trailing===!1||(s=setTimeout(u,l)),o}},E.debounce=function(e,t,n){var r,i,o,s,a,u=function(){var c=E.now()-s;c<t&&c>=0?r=setTimeout(u,t-c):(r=null,n||(a=e.apply(o,i),r||(o=i=null)))};return function(){o=this,i=arguments,s=E.now();var c=n&&!r;return r||(r=setTimeout(u,t)),c&&(a=e.apply(o,i),o=i=null),a}},E.wrap=function(e,t){return E.partial(t,e)},E.negate=function(e){return function(){return!e.apply(this,arguments)}},E.compose=function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},E.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},E.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},E.once=E.partial(E.before,2);var M=!{toString:null}.propertyIsEnumerable(\"toString\"),L=[\"valueOf\",\"isPrototypeOf\",\"toString\",\"propertyIsEnumerable\",\"hasOwnProperty\",\"toLocaleString\"];E.keys=function(e){if(!E.isObject(e))return[];if(m)return m(e);var t=[];for(var n in e)E.has(e,n)&&t.push(n);return M&&a(e,t),t},E.allKeys=function(e){if(!E.isObject(e))return[];var t=[];for(var n in e)t.push(n);return M&&a(e,t),t},E.values=function(e){for(var t=E.keys(e),n=t.length,r=Array(n),i=0;i<n;i++)r[i]=e[t[i]];return r},E.mapObject=function(e,t,n){t=S(t,n);for(var r,i=E.keys(e),o=i.length,s={},a=0;a<o;a++)r=i[a],s[r]=t(e[r],r,e);return s},E.pairs=function(e){for(var t=E.keys(e),n=t.length,r=Array(n),i=0;i<n;i++)r[i]=[t[i],e[t[i]]];return r},E.invert=function(e){for(var t={},n=E.keys(e),r=0,i=n.length;r<i;r++)t[e[n[r]]]=n[r];return t},E.functions=E.methods=function(e){var t=[];for(var n in e)E.isFunction(e[n])&&t.push(n);return t.sort()},E.extend=A(E.allKeys),E.extendOwn=E.assign=A(E.keys),E.findKey=function(e,t,n){t=S(t,n);for(var r,i=E.keys(e),o=0,s=i.length;o<s;o++)if(r=i[o],t(e[r],r,e))return r},E.pick=function(e,t,n){var r,i,o={},s=e;if(null==s)return o;E.isFunction(t)?(i=E.allKeys(s),r=T(t,n)):(i=R(arguments,!1,!1,1),r=function(e,t,n){return t in n},s=Object(s));for(var a=0,u=i.length;a<u;a++){var c=i[a],l=s[c];r(l,c,s)&&(o[c]=l)}return o},E.omit=function(e,t,n){if(E.isFunction(t))t=E.negate(t);else{var r=E.map(R(arguments,!1,!1,1),String);t=function(e,t){return!E.contains(r,t)}}return E.pick(e,t,n)},E.defaults=A(E.allKeys,!0),E.create=function(e,t){var n=_(e);return t&&E.extendOwn(n,t),n},E.clone=function(e){return E.isObject(e)?E.isArray(e)?e.slice():E.extend({},e):e},E.tap=function(e,t){return t(e),e},E.isMatch=function(e,t){var n=E.keys(t),r=n.length;if(null==e)return!r;for(var i=Object(e),o=0;o<r;o++){var s=n[o];if(t[s]!==i[s]||!(s in i))return!1}return!0};var I=function(e,t,n,r){if(e===t)return 0!==e||1/e===1/t;if(null==e||null==t)return e===t;e instanceof E&&(e=e._wrapped),t instanceof E&&(t=t._wrapped);var i=v.call(e);if(i!==v.call(t))return!1;switch(i){case\"[object RegExp]\":case\"[object String]\":return\"\"+e==\"\"+t;case\"[object Number]\":return+e!==+e?+t!==+t:0===+e?1/+e===1/t:+e===+t;case\"[object Date]\":case\"[object Boolean]\":return+e===+t}var o=\"[object Array]\"===i;if(!o){if(\"object\"!=typeof e||\"object\"!=typeof t)return!1;var s=e.constructor,a=t.constructor;if(s!==a&&!(E.isFunction(s)&&s instanceof s&&E.isFunction(a)&&a instanceof a)&&\"constructor\"in e&&\"constructor\"in t)return!1}n=n||[],r=r||[];for(var u=n.length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),o){if(u=e.length,u!==t.length)return!1;for(;u--;)if(!I(e[u],t[u],n,r))return!1}else{var c,l=E.keys(e);if(u=l.length,E.keys(t).length!==u)return!1;for(;u--;)if(c=l[u],!E.has(t,c)||!I(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0};E.isEqual=function(e,t){return I(e,t)},E.isEmpty=function(e){return null==e||(O(e)&&(E.isArray(e)||E.isString(e)||E.isArguments(e))?0===e.length:0===E.keys(e).length)},E.isElement=function(e){return!(!e||1!==e.nodeType)},E.isArray=y||function(e){return\"[object Array]\"===v.call(e)},E.isObject=function(e){var t=typeof e;return\"function\"===t||\"object\"===t&&!!e},E.each([\"Arguments\",\"Function\",\"String\",\"Number\",\"Date\",\"RegExp\",\"Error\"],function(e){E[\"is\"+e]=function(t){return v.call(t)===\"[object \"+e+\"]\"}}),E.isArguments(arguments)||(E.isArguments=function(e){return E.has(e,\"callee\")}),\"function\"!=typeof/./&&\"object\"!=typeof Int8Array&&(E.isFunction=function(e){return\"function\"==typeof e||!1}),E.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},E.isNaN=function(e){return E.isNumber(e)&&e!==+e},E.isBoolean=function(e){return e===!0||e===!1||\"[object Boolean]\"===v.call(e)},E.isNull=function(e){return null===e},E.isUndefined=function(e){return void 0===e},E.has=function(e,t){return null!=e&&g.call(e,t)},E.noConflict=function(){return u._=c,this},E.identity=function(e){return e},E.constant=function(e){return function(){return e}},E.noop=function(){},E.property=C,E.propertyOf=function(e){return null==e?function(){}:function(t){return e[t]}},E.matcher=E.matches=function(e){return e=E.extendOwn({},e),function(t){return E.isMatch(t,e)}},E.times=function(e,t,n){var r=Array(Math.max(0,e));t=T(t,n,1);for(var i=0;i<e;i++)r[i]=t(i);return r},E.random=function(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))},E.now=Date.now||function(){return(new Date).getTime()};var q={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\",\"`\":\"&#x60;\"},F=E.invert(q),P=function(e){var t=function(t){return e[t]},n=\"(?:\"+E.keys(e).join(\"|\")+\")\",r=RegExp(n),i=RegExp(n,\"g\");return function(e){return e=null==e?\"\":\"\"+e,r.test(e)?e.replace(i,t):e}};E.escape=P(q),E.unescape=P(F),E.result=function(e,t,n){var r=null==e?void 0:e[t];return void 0===r&&(r=n),E.isFunction(r)?r.call(e):r};var $=0;E.uniqueId=function(e){var t=++$+\"\";return e?e+t:t},E.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var H=/(.)^/,W={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},B=/\\\\|'|\\r|\\n|\\u2028|\\u2029/g,U=function(e){return\"\\\\\"+W[e]};E.template=function(e,t,n){!t&&n&&(t=n),t=E.defaults({},t,E.templateSettings);var r=RegExp([(t.escape||H).source,(t.interpolate||H).source,(t.evaluate||H).source].join(\"|\")+\"|$\",\"g\"),i=0,o=\"__p+='\";e.replace(r,function(t,n,r,s,a){return o+=e.slice(i,a).replace(B,U),i=a+t.length,n?o+=\"'+\\n((__t=(\"+n+\"))==null?'':_.escape(__t))+\\n'\":r?o+=\"'+\\n((__t=(\"+r+\"))==null?'':__t)+\\n'\":s&&(o+=\"';\\n\"+s+\"\\n__p+='\"),t}),o+=\"';\\n\",t.variable||(o=\"with(obj||{}){\\n\"+o+\"}\\n\"),o=\"var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\\n\"+o+\"return __p;\\n\";try{var s=new Function(t.variable||\"obj\",\"_\",o)}catch(e){throw e.source=o,e}var a=function(e){return s.call(this,e,E)},u=t.variable||\"obj\";return a.source=\"function(\"+u+\"){\\n\"+o+\"}\",a},E.chain=function(e){var t=E(e);return t._chain=!0,t};var z=function(e,t){return e._chain?E(t).chain():t};E.mixin=function(e){E.each(E.functions(e),function(t){var n=E[t]=e[t];E.prototype[t]=function(){var e=[this._wrapped];return p.apply(e,arguments),z(this,n.apply(E,e))}})},E.mixin(E),E.each([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=l[e];E.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),\"shift\"!==e&&\"splice\"!==e||0!==n.length||delete n[0],z(this,n)}}),E.each([\"concat\",\"join\",\"slice\"],function(e){var t=l[e];E.prototype[e]=function(){return z(this,t.apply(this._wrapped,arguments))}}),E.prototype.value=function(){return this._wrapped},E.prototype.valueOf=E.prototype.toJSON=E.prototype.value,E.prototype.toString=function(){return\"\"+this._wrapped},r=[],i=function(){return E}.apply(t,r),!(void 0!==i&&(e.exports=i))}).call(this)},function(e,t,n){var r,i;!function(t,n){\"object\"==typeof e&&\"object\"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(t)}(\"undefined\"!=typeof window?window:this,function(n,o){function s(e){var t=!!e&&\"length\"in e&&e.length,n=ce.type(e);return\"function\"!==n&&!ce.isWindow(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function a(e,t,n){if(ce.isFunction(t))return ce.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return ce.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(be.test(t))return ce.filter(t,e,n);t=ce.filter(t,e)}return ce.grep(e,function(e){return re.call(t,e)>-1!==n})}function u(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function c(e){var t={};return ce.each(e.match(Ae)||[],function(e,n){t[n]=!0}),t}function l(){Z.removeEventListener(\"DOMContentLoaded\",l),n.removeEventListener(\"load\",l),ce.ready()}function f(){this.expando=ce.expando+f.uid++}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Re,\"-$&\").toLowerCase(),n=e.getAttribute(r),\"string\"==typeof n){try{n=\"true\"===n||\"false\"!==n&&(\"null\"===n?null:+n+\"\"===n?+n:Ne.test(n)?ce.parseJSON(n):n)}catch(e){}Oe.set(e,t,n)}else n=void 0;return n}function p(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ce.css(e,t,\"\")},u=a(),c=n&&n[3]||(ce.cssNumber[t]?\"\":\"px\"),l=(ce.cssNumber[t]||\"px\"!==c&&+u)&&Me.exec(ce.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||\".5\",l/=o,ce.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function d(e,t){var n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[];return void 0===t||t&&ce.nodeName(e,t)?ce.merge([e],n):n}function v(e,t){for(var n=0,r=e.length;n<r;n++)je.set(e[n],\"globalEval\",!t||je.get(t[n],\"globalEval\"))}function g(e,t,n,r,i){for(var o,s,a,u,c,l,f=t.createDocumentFragment(),h=[],p=0,g=e.length;p<g;p++)if(o=e[p],o||0===o)if(\"object\"===ce.type(o))ce.merge(h,o.nodeType?[o]:o);else if(He.test(o)){for(s=s||f.appendChild(t.createElement(\"div\")),a=(Fe.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=$e[a]||$e._default,s.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],l=u[0];l--;)s=s.lastChild;ce.merge(h,s.childNodes),s=f.firstChild,s.textContent=\"\"}else h.push(t.createTextNode(o));for(f.textContent=\"\",p=0;o=h[p++];)if(r&&ce.inArray(o,r)>-1)i&&i.push(o);else if(c=ce.contains(o.ownerDocument,o),s=d(f.appendChild(o),\"script\"),c&&v(s),n)for(l=0;o=s[l++];)Pe.test(o.type||\"\")&&n.push(o);return f}function y(){return!0}function m(){return!1}function b(){try{return Z.activeElement}catch(e){}}function w(e,t,n,r,i,o){var s,a;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(a in t)w(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=m;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ce().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function x(e,t){return ce.nodeName(e,\"table\")&&ce.nodeName(11!==t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function E(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function T(e){var t=Xe.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function S(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(je.hasData(e)&&(o=je.access(e),s=je.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n<r;n++)ce.event.add(t,i,c[i][n])}Oe.hasData(e)&&(a=Oe.access(e),u=ce.extend({},a),Oe.set(t,u))}}function A(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&qe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function _(e,t,n,r){t=te.apply([],t);var i,o,s,a,u,c,l=0,f=e.length,h=f-1,p=t[0],v=ce.isFunction(p);if(v||f>1&&\"string\"==typeof p&&!ae.checkClone&&Je.test(p))return e.each(function(i){var o=e.eq(i);v&&(t[0]=p.call(this,i,o.html())),_(o,t,n,r)});if(f&&(i=g(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=ce.map(d(i,\"script\"),E),a=s.length;l<f;l++)u=i,l!==h&&(u=ce.clone(u,!0,!0),a&&ce.merge(s,d(u,\"script\"))),n.call(e[l],u,l);if(a)for(c=s[s.length-1].ownerDocument,ce.map(s,T),l=0;l<a;l++)u=s[l],Pe.test(u.type||\"\")&&!je.access(u,\"globalEval\")&&ce.contains(c,u)&&(u.src?ce._evalUrl&&ce._evalUrl(u.src):ce.globalEval(u.textContent.replace(Ge,\"\")))}return e}function C(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(d(r)),r.parentNode&&(n&&ce.contains(r.ownerDocument,r)&&v(d(r,\"script\")),r.parentNode.removeChild(r));return e}function k(e,t){var n=ce(t.createElement(e)).appendTo(t.body),r=ce.css(n[0],\"display\");return n.detach(),r}function j(e){var t=Z,n=Qe[e];return n||(n=k(e,t),\"none\"!==n&&n||(Ye=(Ye||ce(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(t.documentElement),t=Ye[0].contentDocument,t.write(),t.close(),n=k(e,t),Ye.detach()),Qe[e]=n),n}function O(e,t,n){var r,i,o,s,a=e.style;return n=n||et(e),s=n?n.getPropertyValue(t)||n[t]:void 0,\"\"!==s&&void 0!==s||ce.contains(e.ownerDocument,e)||(s=ce.style(e,t)),n&&!ae.pixelMarginRight()&&Ze.test(s)&&Ke.test(t)&&(r=a.width,i=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=r,a.minWidth=i,a.maxWidth=o),void 0!==s?s+\"\":s}function N(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function R(e){if(e in at)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=st.length;n--;)if(e=st[n]+t,e in at)return e}function D(e,t,n){var r=Me.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function M(e,t,n,r,i){for(var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,s=0;o<4;o+=2)\"margin\"===n&&(s+=ce.css(e,n+Le[o],!0,i)),r?(\"content\"===n&&(s-=ce.css(e,\"padding\"+Le[o],!0,i)),\"margin\"!==n&&(s-=ce.css(e,\"border\"+Le[o]+\"Width\",!0,i))):(s+=ce.css(e,\"padding\"+Le[o],!0,i),\"padding\"!==n&&(s+=ce.css(e,\"border\"+Le[o]+\"Width\",!0,i)));return s}function L(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=et(e),s=\"border-box\"===ce.css(e,\"boxSizing\",!1,o);if(i<=0||null==i){if(i=O(e,t,o),(i<0||null==i)&&(i=e.style[t]),Ze.test(i))return i;r=s&&(ae.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+M(e,t,n||(s?\"border\":\"content\"),r,o)+\"px\"}function I(e,t){for(var n,r,i,o=[],s=0,a=e.length;s<a;s++)r=e[s],r.style&&(o[s]=je.get(r,\"olddisplay\"),n=r.style.display,t?(o[s]||\"none\"!==n||(r.style.display=\"\"),\n\"\"===r.style.display&&Ie(r)&&(o[s]=je.access(r,\"olddisplay\",j(r.nodeName)))):(i=Ie(r),\"none\"===n&&i||je.set(r,\"olddisplay\",i?n:ce.css(r,\"display\"))));for(s=0;s<a;s++)r=e[s],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[s]||\"\":\"none\"));return e}function q(e,t,n,r,i){return new q.prototype.init(e,t,n,r,i)}function F(){return n.setTimeout(function(){ut=void 0}),ut=ce.now()}function P(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)n=Le[r],i[\"margin\"+n]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function $(e,t,n){for(var r,i=(B.tweeners[t]||[]).concat(B.tweeners[\"*\"]),o=0,s=i.length;o<s;o++)if(r=i[o].call(n,t,e))return r}function H(e,t,n){var r,i,o,s,a,u,c,l,f=this,h={},p=e.style,d=e.nodeType&&Ie(e),v=je.get(e,\"fxshow\");n.queue||(a=ce._queueHooks(e,\"fx\"),null==a.unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,f.always(function(){f.always(function(){a.unqueued--,ce.queue(e,\"fx\").length||a.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],c=ce.css(e,\"display\"),l=\"none\"===c?je.get(e,\"olddisplay\")||j(e.nodeName):c,\"inline\"===l&&\"none\"===ce.css(e,\"float\")&&(p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",f.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],lt.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(d?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;d=!0}h[r]=v&&v[r]||ce.style(e,r)}else c=void 0;if(ce.isEmptyObject(h))\"inline\"===(\"none\"===c?j(e.nodeName):c)&&(p.display=c);else{v?\"hidden\"in v&&(d=v.hidden):v=je.access(e,\"fxshow\",{}),o&&(v.hidden=!d),d?ce(e).show():f.done(function(){ce(e).hide()}),f.done(function(){var t;je.remove(e,\"fxshow\");for(t in h)ce.style(e,t,h[t])});for(r in h)s=$(d?v[r]:0,r,f),r in v||(v[r]=s.start,d&&(s.end=s.start,s.start=\"width\"===r||\"height\"===r?1:0))}}function W(e,t){var n,r,i,o,s;for(n in e)if(r=ce.camelCase(n),i=t[r],o=e[n],ce.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),s=ce.cssHooks[r],s&&\"expand\"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function B(e,t,n){var r,i,o=0,s=B.prefilters.length,a=ce.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=ut||F(),n=Math.max(0,c.startTime+c.duration-t),r=n/c.duration||0,o=1-r,s=0,u=c.tweens.length;s<u;s++)c.tweens[s].run(o);return a.notifyWith(e,[c,o,n]),o<1&&u?n:(a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:ce.extend({},t),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},n),originalProperties:t,originalOptions:n,startTime:ut||F(),duration:n.duration,tweens:[],createTween:function(t,n){var r=ce.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)c.tweens[n].run(1);return t?(a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c,t])):a.rejectWith(e,[c,t]),this}}),l=c.props;for(W(l,c.opts.specialEasing);o<s;o++)if(r=B.prefilters[o].call(c,e,l,c.opts))return ce.isFunction(r.stop)&&(ce._queueHooks(c.elem,c.opts.queue).stop=ce.proxy(r.stop,r)),r;return ce.map(l,$,c),ce.isFunction(c.opts.start)&&c.opts.start.call(e,c),ce.fx.timer(ce.extend(u,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function U(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function z(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(Ae)||[];if(ce.isFunction(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function V(e,t,n,r){function i(a){var u;return o[a]=!0,ce.each(e[a]||[],function(e,a){var c=a(t,n,r);return\"string\"!=typeof c||s||o[c]?s?!(u=c):void 0:(t.dataTypes.unshift(c),i(c),!1)}),u}var o={},s=e===Ot;return i(t.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function J(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}function X(e,t,n){for(var r,i,o,s,a=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}s||(s=i)}o=o||s}if(o)return o!==u[0]&&u.unshift(o),n[o]}function G(e,t,n,r){var i,o,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(o=l.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=l.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(s=c[u+\" \"+o]||c[\"* \"+o],!s)for(i in c)if(a=i.split(\" \"),a[1]===o&&(s=c[u+\" \"+a[0]]||c[\"* \"+a[0]])){s===!0?s=c[i]:c[i]!==!0&&(o=a[0],l.unshift(a[1]));break}if(s!==!0)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:\"parsererror\",error:s?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}function Y(e,t,n,r){var i;if(ce.isArray(t))ce.each(t,function(t,i){n||Mt.test(e)?r(e,i):Y(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==ce.type(t))r(e,t);else for(i in t)Y(e+\"[\"+i+\"]\",t[i],n,r)}function Q(e){return ce.isWindow(e)?e:9===e.nodeType&&e.defaultView}var K=[],Z=n.document,ee=K.slice,te=K.concat,ne=K.push,re=K.indexOf,ie={},oe=ie.toString,se=ie.hasOwnProperty,ae={},ue=\"2.2.4\",ce=function(e,t){return new ce.fn.init(e,t)},le=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,fe=/^-ms-/,he=/-([\\da-z])/gi,pe=function(e,t){return t.toUpperCase()};ce.fn=ce.prototype={jquery:ue,constructor:ce,selector:\"\",length:0,toArray:function(){return ee.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:ee.call(this)},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return ce.each(this,e)},map:function(e){return this.pushStack(ce.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ee.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ne,sort:K.sort,splice:K.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[a]||{},a++),\"object\"==typeof s||ce.isFunction(s)||(s={}),a===u&&(s=this,a--);a<u;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(c&&r&&(ce.isPlainObject(r)||(i=ce.isArray(r)))?(i?(i=!1,o=n&&ce.isArray(n)?n:[]):o=n&&ce.isPlainObject(n)?n:{},s[t]=ce.extend(c,o,r)):void 0!==r&&(s[t]=r));return s},ce.extend({expando:\"jQuery\"+(ue+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return\"function\"===ce.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=e&&e.toString();return!ce.isArray(e)&&t-parseFloat(t)+1>=0},isPlainObject:function(e){var t;if(\"object\"!==ce.type(e)||e.nodeType||ce.isWindow(e))return!1;if(e.constructor&&!se.call(e,\"constructor\")&&!se.call(e.constructor.prototype||{},\"isPrototypeOf\"))return!1;for(t in e);return void 0===t||se.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?ie[oe.call(e)]||\"object\":typeof e},globalEval:function(e){var t,n=eval;e=ce.trim(e),e&&(1===e.indexOf(\"use strict\")?(t=Z.createElement(\"script\"),t.text=e,Z.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(fe,\"ms-\").replace(he,pe)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,r=0;if(s(e))for(n=e.length;r<n&&t.call(e[r],r,e[r])!==!1;r++);else for(r in e)if(t.call(e[r],r,e[r])===!1)break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(le,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(s(Object(e))?ce.merge(n,\"string\"==typeof e?[e]:e):ne.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:re.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,s=e.length,a=!n;o<s;o++)r=!t(e[o],o),r!==a&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,a=[];if(s(e))for(r=e.length;o<r;o++)i=t(e[o],o,n),null!=i&&a.push(i);else for(o in e)i=t(e[o],o,n),null!=i&&a.push(i);return te.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),ce.isFunction(e))return r=ee.call(arguments,2),i=function(){return e.apply(t||this,r.concat(ee.call(arguments)))},i.guid=e.guid=e.guid||ce.guid++,i},now:Date.now,support:ae}),\"function\"==typeof Symbol&&(ce.fn[Symbol.iterator]=K[Symbol.iterator]),ce.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){ie[\"[object \"+t+\"]\"]=t.toLowerCase()});var de=function(e){function t(e,t,n,r){var i,o,s,a,u,c,f,p,d=t&&t.ownerDocument,v=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==v&&9!==v&&11!==v)return n;if(!r&&((t?t.ownerDocument||t:$)!==R&&N(t),t=t||R,M)){if(11!==v&&(c=ye.exec(e)))if(i=c[1]){if(9===v){if(!(s=t.getElementById(i)))return n;if(s.id===i)return n.push(s),n}else if(d&&(s=d.getElementById(i))&&F(t,s)&&s.id===i)return n.push(s),n}else{if(c[2])return K.apply(n,t.getElementsByTagName(e)),n;if((i=c[3])&&x.getElementsByClassName&&t.getElementsByClassName)return K.apply(n,t.getElementsByClassName(i)),n}if(x.qsa&&!z[e+\" \"]&&(!L||!L.test(e))){if(1!==v)d=t,p=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((a=t.getAttribute(\"id\"))?a=a.replace(be,\"\\\\$&\"):t.setAttribute(\"id\",a=P),f=A(e),o=f.length,u=he.test(a)?\"#\"+a:\"[id='\"+a+\"']\";o--;)f[o]=u+\" \"+h(f[o]);p=f.join(\",\"),d=me.test(e)&&l(t.parentNode)||t}if(p)try{return K.apply(n,d.querySelectorAll(p)),n}catch(e){}finally{a===P&&t.removeAttribute(\"id\")}}}return C(e.replace(ae,\"$1\"),t,n,r)}function n(){function e(n,r){return t.push(n+\" \")>E.cacheLength&&delete e[t.shift()],e[n+\" \"]=r}var t=[];return e}function r(e){return e[P]=!0,e}function i(e){var t=R.createElement(\"div\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split(\"|\"),r=n.length;r--;)E.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||J)-(~e.sourceIndex||J);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function l(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function f(){}function h(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,i=n&&\"parentNode\"===r,o=W++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,s){var a,u,c,l=[H,o];if(s){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,s))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(c=t[P]||(t[P]={}),u=c[t.uniqueID]||(c[t.uniqueID]={}),(a=u[r])&&a[0]===H&&a[1]===o)return l[2]=a[2];if(u[r]=l,l[2]=e(t,n,s))return!0}}}function d(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}function g(e,t,n,r,i){for(var o,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(o=e[a])&&(n&&!n(o,r,i)||(s.push(o),c&&t.push(a)));return s}function y(e,t,n,i,o,s){return i&&!i[P]&&(i=y(i)),o&&!o[P]&&(o=y(o,s)),r(function(r,s,a,u){var c,l,f,h=[],p=[],d=s.length,y=r||v(t||\"*\",a.nodeType?[a]:a,[]),m=!e||!r&&t?y:g(y,h,e,a,u),b=n?o||(r?e:d||i)?[]:s:m;if(n&&n(m,b,a,u),i)for(c=g(b,p),i(c,[],a,u),l=c.length;l--;)(f=c[l])&&(b[p[l]]=!(m[p[l]]=f));if(r){if(o||e){if(o){for(c=[],l=b.length;l--;)(f=b[l])&&c.push(m[l]=f);o(null,b=[],c,u)}for(l=b.length;l--;)(f=b[l])&&(c=o?ee(r,f):h[l])>-1&&(r[c]=!(s[c]=f))}}else b=g(b===s?b.splice(d,b.length):b),o?o(null,s,b,u):K.apply(s,b)})}function m(e){for(var t,n,r,i=e.length,o=E.relative[e[0].type],s=o||E.relative[\" \"],a=o?1:0,u=p(function(e){return e===t},s,!0),c=p(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==k)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a<i;a++)if(n=E.relative[e[a].type])l=[p(d(l),n)];else{if(n=E.filter[e[a].type].apply(null,e[a].matches),n[P]){for(r=++a;r<i&&!E.relative[e[r].type];r++);return y(a>1&&d(l),a>1&&h(e.slice(0,a-1).concat({value:\" \"===e[a-2].type?\"*\":\"\"})).replace(ae,\"$1\"),n,a<r&&m(e.slice(a,r)),r<i&&m(e=e.slice(r)),r<i&&h(e))}l.push(n)}return d(l)}function b(e,n){var i=n.length>0,o=e.length>0,s=function(r,s,a,u,c){var l,f,h,p=0,d=\"0\",v=r&&[],y=[],m=k,b=r||o&&E.find.TAG(\"*\",c),w=H+=null==m?1:Math.random()||.1,x=b.length;for(c&&(k=s===R||s||c);d!==x&&null!=(l=b[d]);d++){if(o&&l){for(f=0,s||l.ownerDocument===R||(N(l),a=!M);h=e[f++];)if(h(l,s||R,a)){u.push(l);break}c&&(H=w)}i&&((l=!h&&l)&&p--,r&&v.push(l))}if(p+=d,i&&d!==p){for(f=0;h=n[f++];)h(v,y,s,a);if(r){if(p>0)for(;d--;)v[d]||y[d]||(y[d]=Y.call(u));y=g(y)}K.apply(u,y),c&&!r&&y.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(H=w,k=m),v};return i?r(s):s}var w,x,E,T,S,A,_,C,k,j,O,N,R,D,M,L,I,q,F,P=\"sizzle\"+1*new Date,$=e.document,H=0,W=0,B=n(),U=n(),z=n(),V=function(e,t){return e===t&&(O=!0),0},J=1<<31,X={}.hasOwnProperty,G=[],Y=G.pop,Q=G.push,K=G.push,Z=G.slice,ee=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},te=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ne=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",re=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ie=\"\\\\[\"+ne+\"*(\"+re+\")(?:\"+ne+\"*([*^$|!~]?=)\"+ne+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+re+\"))|)\"+ne+\"*\\\\]\",oe=\":(\"+re+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ie+\")*)|.*)\\\\)|)\",se=new RegExp(ne+\"+\",\"g\"),ae=new RegExp(\"^\"+ne+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ne+\"+$\",\"g\"),ue=new RegExp(\"^\"+ne+\"*,\"+ne+\"*\"),ce=new RegExp(\"^\"+ne+\"*([>+~]|\"+ne+\")\"+ne+\"*\"),le=new RegExp(\"=\"+ne+\"*([^\\\\]'\\\"]*?)\"+ne+\"*\\\\]\",\"g\"),fe=new RegExp(oe),he=new RegExp(\"^\"+re+\"$\"),pe={ID:new RegExp(\"^#(\"+re+\")\"),CLASS:new RegExp(\"^\\\\.(\"+re+\")\"),TAG:new RegExp(\"^(\"+re+\"|[*])\"),ATTR:new RegExp(\"^\"+ie),PSEUDO:new RegExp(\"^\"+oe),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ne+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ne+\"*(?:([+-]|)\"+ne+\"*(\\\\d+)|))\"+ne+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+te+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ne+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ne+\"*((?:-\\\\d)?\\\\d*)\"+ne+\"*\\\\)|)(?=[^-]|$)\",\"i\")},de=/^(?:input|select|textarea|button)$/i,ve=/^h\\d$/i,ge=/^[^{]+\\{\\s*\\[native \\w/,ye=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,me=/[+~]/,be=/'|\\\\/g,we=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ne+\"?|(\"+ne+\")|.)\",\"ig\"),xe=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Ee=function(){N()};try{K.apply(G=Z.call($.childNodes),$.childNodes),G[$.childNodes.length].nodeType}catch(e){K={apply:G.length?function(e,t){Q.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}x=t.support={},S=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},N=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:$;return r!==R&&9===r.nodeType&&r.documentElement?(R=r,D=R.documentElement,M=!S(R),(n=R.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",Ee,!1):n.attachEvent&&n.attachEvent(\"onunload\",Ee)),x.attributes=i(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),x.getElementsByTagName=i(function(e){return e.appendChild(R.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),x.getElementsByClassName=ge.test(R.getElementsByClassName),x.getById=i(function(e){return D.appendChild(e).id=P,!R.getElementsByName||!R.getElementsByName(P).length}),x.getById?(E.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&M){var n=t.getElementById(e);return n?[n]:[]}},E.filter.ID=function(e){var t=e.replace(we,xe);return function(e){return e.getAttribute(\"id\")===t}}):(delete E.find.ID,E.filter.ID=function(e){var t=e.replace(we,xe);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}}),E.find.TAG=x.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):x.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},E.find.CLASS=x.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&M)return t.getElementsByClassName(e)},I=[],L=[],(x.qsa=ge.test(R.querySelectorAll))&&(i(function(e){D.appendChild(e).innerHTML=\"<a id='\"+P+\"'></a><select id='\"+P+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&L.push(\"[*^$]=\"+ne+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||L.push(\"\\\\[\"+ne+\"*(?:value|\"+te+\")\"),e.querySelectorAll(\"[id~=\"+P+\"-]\").length||L.push(\"~=\"),e.querySelectorAll(\":checked\").length||L.push(\":checked\"),e.querySelectorAll(\"a#\"+P+\"+*\").length||L.push(\".#.+[+~]\")}),i(function(e){var t=R.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&L.push(\"name\"+ne+\"*[*^$|!~]?=\"),e.querySelectorAll(\":enabled\").length||L.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),L.push(\",.*:\")})),(x.matchesSelector=ge.test(q=D.matches||D.webkitMatchesSelector||D.mozMatchesSelector||D.oMatchesSelector||D.msMatchesSelector))&&i(function(e){x.disconnectedMatch=q.call(e,\"div\"),q.call(e,\"[s!='']:x\"),I.push(\"!=\",oe)}),L=L.length&&new RegExp(L.join(\"|\")),I=I.length&&new RegExp(I.join(\"|\")),t=ge.test(D.compareDocumentPosition),F=t||ge.test(D.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return O=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!x.sortDetached&&t.compareDocumentPosition(e)===n?e===R||e.ownerDocument===$&&F($,e)?-1:t===R||t.ownerDocument===$&&F($,t)?1:j?ee(j,e)-ee(j,t):0:4&n?-1:1)}:function(e,t){if(e===t)return O=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===R?-1:t===R?1:i?-1:o?1:j?ee(j,e)-ee(j,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===$?-1:u[r]===$?1:0},R):R},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==R&&N(e),n=n.replace(le,\"='$1']\"),x.matchesSelector&&M&&!z[n+\" \"]&&(!I||!I.test(n))&&(!L||!L.test(n)))try{var r=q.call(e,n);if(r||x.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,R,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==R&&N(e),F(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==R&&N(e);var n=E.attrHandle[t.toLowerCase()],r=n&&X.call(E.attrHandle,t.toLowerCase())?n(e,t,!M):void 0;return void 0!==r?r:x.attributes||!M?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(O=!x.detectDuplicates,j=!x.sortStable&&e.slice(0),e.sort(V),O){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return j=null,e},T=t.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=T(t);return n},E=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(we,xe),e[3]=(e[3]||e[4]||e[5]||\"\").replace(we,xe),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&fe.test(n)&&(t=A(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(we,xe).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=B[e+\" \"];return t||(t=new RegExp(\"(^|\"+ne+\")\"+e+\"(\"+ne+\"|$)\"))&&B(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?\"!=\"===n:!n||(o+=\"\",\"=\"===n?o===r:\"!=\"===n?o!==r:\"^=\"===n?r&&0===o.indexOf(r):\"*=\"===n?r&&o.indexOf(r)>-1:\"$=\"===n?r&&o.slice(-r.length)===r:\"~=\"===n?(\" \"+o.replace(se,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(o===r||o.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),s=\"last\"!==e.slice(-4),a=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,h,p,d,v=o!==s?\"nextSibling\":\"previousSibling\",g=t.parentNode,y=a&&t.nodeName.toLowerCase(),m=!u&&!a,b=!1;if(g){if(o){for(;v;){for(h=t;h=h[v];)if(a?h.nodeName.toLowerCase()===y:1===h.nodeType)return!1;d=v=\"only\"===e&&!d&&\"nextSibling\"}return!0}if(d=[s?g.firstChild:g.lastChild],s&&m){for(h=g,f=h[P]||(h[P]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),c=l[e]||[],p=c[0]===H&&c[1],b=p&&c[2],h=p&&g.childNodes[p];h=++p&&h&&h[v]||(b=p=0)||d.pop();)if(1===h.nodeType&&++b&&h===t){l[e]=[H,p,b];break}}else if(m&&(h=t,f=h[P]||(h[P]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),c=l[e]||[],p=c[0]===H&&c[1],b=p),b===!1)for(;(h=++p&&h&&h[v]||(b=p=0)||d.pop())&&((a?h.nodeName.toLowerCase()!==y:1!==h.nodeType)||!++b||(m&&(f=h[P]||(h[P]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),l[e]=[H,b]),h!==t)););return b-=i,b===r||b%r===0&&b/r>=0}}},PSEUDO:function(e,n){var i,o=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error(\"unsupported pseudo: \"+e);return o[P]?o(n):o.length>1?(i=[e,e,\"\",n],E.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=_(e.replace(ae,\"$1\"));return i[P]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(we,xe),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:r(function(e){return he.test(e||\"\")||t.error(\"unsupported lang: \"+e),e=e.replace(we,xe).toLowerCase(),function(t){var n;do if(n=M?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===D},focus:function(e){return e===R.activeElement&&(!R.hasFocus||R.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!E.pseudos.empty(e)},header:function(e){return ve.test(e.nodeName)},input:function(e){return de.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[n<0?n+t:n]}),even:c(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},E.pseudos.nth=E.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})E.pseudos[w]=a(w);for(w in{submit:!0,reset:!0})E.pseudos[w]=u(w);return f.prototype=E.filters=E.pseudos,E.setFilters=new f,A=t.tokenize=function(e,n){var r,i,o,s,a,u,c,l=U[e+\" \"];if(l)return n?0:l.slice(0);for(a=e,u=[],c=E.preFilter;a;){r&&!(i=ue.exec(a))||(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),r=!1,(i=ce.exec(a))&&(r=i.shift(),o.push({value:r,type:i[0].replace(ae,\" \")}),a=a.slice(r.length));for(s in E.filter)!(i=pe[s].exec(a))||c[s]&&!(i=c[s](i))||(r=i.shift(),o.push({value:r,type:s,matches:i}),a=a.slice(r.length));if(!r)break}return n?a.length:a?t.error(e):U(e,u).slice(0)},_=t.compile=function(e,t){var n,r=[],i=[],o=z[e+\" \"];if(!o){for(t||(t=A(e)),n=t.length;n--;)o=m(t[n]),o[P]?r.push(o):i.push(o);o=z(e,b(i,r)),o.selector=e}return o},C=t.select=function(e,t,n,r){var i,o,s,a,u,c=\"function\"==typeof e&&e,f=!r&&A(e=c.selector||e);if(n=n||[],1===f.length){if(o=f[0]=f[0].slice(0),o.length>2&&\"ID\"===(s=o[0]).type&&x.getById&&9===t.nodeType&&M&&E.relative[o[1].type]){if(t=(E.find.ID(s.matches[0].replace(we,xe),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!E.relative[a=s.type]);)if((u=E.find[a])&&(r=u(s.matches[0].replace(we,xe),me.test(o[0].type)&&l(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&h(o),!e)return K.apply(n,r),n;break}}return(c||_(e,f))(r,t,!M,n,!t||me.test(e)&&l(t.parentNode)||t),n},x.sortStable=P.split(\"\").sort(V).join(\"\")===P,x.detectDuplicates=!!O,N(),x.sortDetached=i(function(e){return 1&e.compareDocumentPosition(R.createElement(\"div\"))}),i(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||o(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),x.attributes&&i(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||o(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute(\"disabled\")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(n);ce.find=de,ce.expr=de.selectors,ce.expr[\":\"]=ce.expr.pseudos,ce.uniqueSort=ce.unique=de.uniqueSort,ce.text=de.getText,ce.isXMLDoc=de.isXML,ce.contains=de.contains;var ve=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},ge=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},ye=ce.expr.match.needsContext,me=/^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/,be=/^.[^:#\\[\\.,]*$/;ce.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n=this.length,r=[],i=this;if(\"string\"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<n;t++)if(ce.contains(i[t],this))return!0}));for(t=0;t<n;t++)ce.find(e,i[t],r);return r=this.pushStack(n>1?ce.unique(r):r),r.selector=this.selector?this.selector+\" \"+e:e,r},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,\"string\"==typeof e&&ye.test(e)?ce(e):e||[],!1).length}});var we,xe=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,Ee=ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||we,\"string\"==typeof e){if(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:xe.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:Z,!0)),me.test(r[1])&&ce.isPlainObject(t))for(r in t)ce.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=Z.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=Z,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):ce.isFunction(e)?void 0!==n.ready?n.ready(e):e(ce):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),ce.makeArray(e,this))};Ee.prototype=ce.fn,we=ce(Z);var Te=/^(?:parents|prev(?:Until|All))/,Se={children:!0,contents:!0,next:!0,prev:!0};ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){for(var n,r=0,i=this.length,o=[],s=ye.test(e)||\"string\"!=typeof e?ce(e,t||this.context):0;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ce.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?re.call(ce(e),this[0]):re.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return ve(e,\"parentNode\")},parentsUntil:function(e,t,n){return ve(e,\"parentNode\",n)},next:function(e){return u(e,\"nextSibling\")},prev:function(e){return u(e,\"previousSibling\")},nextAll:function(e){return ve(e,\"nextSibling\")},prevAll:function(e){return ve(e,\"previousSibling\")},nextUntil:function(e,t,n){return ve(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return ve(e,\"previousSibling\",n)},siblings:function(e){return ge((e.parentNode||{}).firstChild,e)},children:function(e){return ge(e.firstChild)},contents:function(e){return e.contentDocument||ce.merge([],e.childNodes)}},function(e,t){ce.fn[e]=function(n,r){var i=ce.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=ce.filter(r,i)),this.length>1&&(Se[e]||ce.uniqueSort(i),Te.test(e)&&i.reverse()),this.pushStack(i)}});var Ae=/\\S+/g;ce.Callbacks=function(e){e=\"string\"==typeof e?c(e):ce.extend({},e);var t,n,r,i,o=[],s=[],a=-1,u=function(){for(i=e.once,r=t=!0;s.length;a=-1)for(n=s.shift();++a<o.length;)o[a].apply(n[0],n[1])===!1&&e.stopOnFalse&&(a=o.length,n=!1);e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(a=o.length-1,s.push(n)),function t(n){ce.each(n,function(n,r){ce.isFunction(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==ce.type(r)&&t(r);\n})}(arguments),n&&!t&&u()),this},remove:function(){return ce.each(arguments,function(e,t){for(var n;(n=ce.inArray(t,o,n))>-1;)o.splice(n,1),n<=a&&a--}),this},has:function(e){return e?ce.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ce.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",ce.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",ce.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",ce.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return ce.Deferred(function(n){ce.each(t,function(t,o){var s=ce.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&ce.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?ce.extend(e,r):r}},i={};return r.pipe=r.then,ce.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ee.call(arguments),s=o.length,a=1!==s||e&&ce.isFunction(e.promise)?s:0,u=1===a?e:ce.Deferred(),c=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ee.call(arguments):i,r===t?u.notifyWith(n,r):--a||u.resolveWith(n,r)}};if(s>1)for(t=new Array(s),n=new Array(s),r=new Array(s);i<s;i++)o[i]&&ce.isFunction(o[i].promise)?o[i].promise().progress(c(i,n,t)).done(c(i,r,o)).fail(u.reject):--a;return a||u.resolveWith(r,o),u.promise()}});var _e;ce.fn.ready=function(e){return ce.ready.promise().done(e),this},ce.extend({isReady:!1,readyWait:1,holdReady:function(e){e?ce.readyWait++:ce.ready(!0)},ready:function(e){(e===!0?--ce.readyWait:ce.isReady)||(ce.isReady=!0,e!==!0&&--ce.readyWait>0||(_e.resolveWith(Z,[ce]),ce.fn.triggerHandler&&(ce(Z).triggerHandler(\"ready\"),ce(Z).off(\"ready\"))))}}),ce.ready.promise=function(e){return _e||(_e=ce.Deferred(),\"complete\"===Z.readyState||\"loading\"!==Z.readyState&&!Z.documentElement.doScroll?n.setTimeout(ce.ready):(Z.addEventListener(\"DOMContentLoaded\",l),n.addEventListener(\"load\",l))),_e.promise(e)},ce.ready.promise();var Ce=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if(\"object\"===ce.type(n)){i=!0;for(a in n)Ce(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ce.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ce(e),n)})),t))for(;a<u;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:c?t.call(e):u?t(e[0],n):o},ke=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};f.uid=1,f.prototype={register:function(e,t){var n=t||{};return e.nodeType?e[this.expando]=n:Object.defineProperty(e,this.expando,{value:n,writable:!0,configurable:!0}),e[this.expando]},cache:function(e){if(!ke(e))return{};var t=e[this.expando];return t||(t={},ke(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[t]=n;else for(r in t)i[r]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][t]},access:function(e,t,n){var r;return void 0===t||t&&\"string\"==typeof t&&void 0===n?(r=this.get(e,t),void 0!==r?r:this.get(e,ce.camelCase(t))):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r,i,o=e[this.expando];if(void 0!==o){if(void 0===t)this.register(e);else{ce.isArray(t)?r=t.concat(t.map(ce.camelCase)):(i=ce.camelCase(t),t in o?r=[t,i]:(r=i,r=r in o?[r]:r.match(Ae)||[])),n=r.length;for(;n--;)delete o[r[n]]}(void 0===t||ce.isEmptyObject(o))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var je=new f,Oe=new f,Ne=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Re=/[A-Z]/g;ce.extend({hasData:function(e){return Oe.hasData(e)||je.hasData(e)},data:function(e,t,n){return Oe.access(e,t,n)},removeData:function(e,t){Oe.remove(e,t)},_data:function(e,t,n){return je.access(e,t,n)},_removeData:function(e,t){je.remove(e,t)}}),ce.fn.extend({data:function(e,t){var n,r,i,o=this[0],s=o&&o.attributes;if(void 0===e){if(this.length&&(i=Oe.get(o),1===o.nodeType&&!je.get(o,\"hasDataAttrs\"))){for(n=s.length;n--;)s[n]&&(r=s[n].name,0===r.indexOf(\"data-\")&&(r=ce.camelCase(r.slice(5)),h(o,r,i[r])));je.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){Oe.set(this,e)}):Ce(this,function(t){var n,r;if(o&&void 0===t){if(n=Oe.get(o,e)||Oe.get(o,e.replace(Re,\"-$&\").toLowerCase()),void 0!==n)return n;if(r=ce.camelCase(e),n=Oe.get(o,r),void 0!==n)return n;if(n=h(o,r,void 0),void 0!==n)return n}else r=ce.camelCase(e),this.each(function(){var n=Oe.get(this,r);Oe.set(this,r,t),e.indexOf(\"-\")>-1&&void 0!==n&&Oe.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Oe.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=je.get(e,t),n&&(!r||ce.isArray(n)?r=je.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t),s=function(){ce.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return je.get(e,n)||je.access(e,n,{empty:ce.Callbacks(\"once memory\").add(function(){je.remove(e,[t+\"queue\",n])})})}}),ce.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?ce.queue(this[0],e):void 0===t?this:this.each(function(){var n=ce.queue(this,e,t);ce._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&ce.dequeue(this,e)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";s--;)n=je.get(o[s],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var De=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Me=new RegExp(\"^(?:([+-])=|)(\"+De+\")([a-z%]*)$\",\"i\"),Le=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Ie=function(e,t){return e=t||e,\"none\"===ce.css(e,\"display\")||!ce.contains(e.ownerDocument,e)},qe=/^(?:checkbox|radio)$/i,Fe=/<([\\w:-]+)/,Pe=/^$|\\/(?:java|ecma)script/i,$e={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};$e.optgroup=$e.option,$e.tbody=$e.tfoot=$e.colgroup=$e.caption=$e.thead,$e.th=$e.td;var He=/<|&#?\\w+;/;!function(){var e=Z.createDocumentFragment(),t=e.appendChild(Z.createElement(\"div\")),n=Z.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),ae.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"<textarea>x</textarea>\",ae.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var We=/^key/,Be=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ue=/^([^.]*)(?:\\.(.+)|)/;ce.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,h,p,d,v,g=je.get(e);if(g)for(n.handler&&(o=n,n=o.handler,i=o.selector),n.guid||(n.guid=ce.guid++),(u=g.events)||(u=g.events={}),(s=g.handle)||(s=g.handle=function(t){return\"undefined\"!=typeof ce&&ce.event.triggered!==t.type?ce.event.dispatch.apply(e,arguments):void 0}),t=(t||\"\").match(Ae)||[\"\"],c=t.length;c--;)a=Ue.exec(t[c])||[],p=v=a[1],d=(a[2]||\"\").split(\".\").sort(),p&&(f=ce.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ce.event.special[p]||{},l=ce.extend({type:p,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:d.join(\".\")},o),(h=u[p])||(h=u[p]=[],h.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,l):h.push(l),ce.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,h,p,d,v,g=je.hasData(e)&&je.get(e);if(g&&(u=g.events)){for(t=(t||\"\").match(Ae)||[\"\"],c=t.length;c--;)if(a=Ue.exec(t[c])||[],p=v=a[1],d=(a[2]||\"\").split(\".\").sort(),p){for(f=ce.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,h=u[p]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=h.length;o--;)l=h[o],!i&&v!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&(\"**\"!==r||!l.selector)||(h.splice(o,1),l.selector&&h.delegateCount--,f.remove&&f.remove.call(e,l));s&&!h.length&&(f.teardown&&f.teardown.call(e,d,g.handle)!==!1||ce.removeEvent(e,p,g.handle),delete u[p])}else for(p in u)ce.event.remove(e,p+t[c],n,r,!0);ce.isEmptyObject(u)&&je.remove(e,\"handle events\")}},dispatch:function(e){e=ce.event.fix(e);var t,n,r,i,o,s=[],a=ee.call(arguments),u=(je.get(this,\"events\")||{})[e.type]||[],c=ce.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=ce.event.handlers.call(this,e,u),t=0;(i=s[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(\"click\"!==e.type||isNaN(e.button)||e.button<1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(r=[],n=0;n<a;n++)o=t[n],i=o.selector+\" \",void 0===r[i]&&(r[i]=o.needsContext?ce(i,this).index(u)>-1:ce.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return a<t.length&&s.push({elem:this,handlers:t.slice(a)}),s},props:\"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,t){var n,r,i,o=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||Z,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},fix:function(e){if(e[ce.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];for(s||(this.fixHooks[i]=s=Be.test(i)?this.mouseHooks:We.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new ce.Event(o),t=r.length;t--;)n=r[t],e[n]=o[n];return e.target||(e.target=Z),3===e.target.nodeType&&(e.target=e.target.parentNode),s.filter?s.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==b()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===b()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&ce.nodeName(this,\"input\"))return this.click(),!1},_default:function(e){return ce.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){return this instanceof ce.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?y:m):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||ce.now(),void(this[ce.expando]=!0)):new ce.Event(e,t)},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:m,isPropagationStopped:m,isImmediatePropagationStopped:m,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=y,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=y,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=y,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){ce.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||ce.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),ce.fn.extend({on:function(e,t,n,r){return w(this,e,t,n,r)},one:function(e,t,n,r){return w(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return t!==!1&&\"function\"!=typeof t||(n=t,t=void 0),n===!1&&(n=m),this.each(function(){ce.event.remove(this,e,n,t)})}});var ze=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,Ve=/<script|<style|<link/i,Je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Xe=/^true\\/(.*)/,Ge=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;ce.extend({htmlPrefilter:function(e){return e.replace(ze,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ce.contains(e.ownerDocument,e);if(!(ae.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(s=d(a),o=d(e),r=0,i=o.length;r<i;r++)A(o[r],s[r]);if(t)if(n)for(o=o||d(e),s=s||d(a),r=0,i=o.length;r<i;r++)S(o[r],s[r]);else S(e,a);return s=d(a,\"script\"),s.length>0&&v(s,!u&&d(e,\"script\")),a},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if(ke(n)){if(t=n[je.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[je.expando]=void 0}n[Oe.expando]&&(n[Oe.expando]=void 0)}}}),ce.fn.extend({domManip:_,detach:function(e){return C(this,e,!0)},remove:function(e){return C(this,e)},text:function(e){return Ce(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return _(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=x(this,e);t.appendChild(e)}})},prepend:function(){return _(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=x(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return _(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return _(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(d(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return Ce(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ve.test(e)&&!$e[(Fe.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(ce.cleanData(d(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return _(this,arguments,function(t){var n=this.parentNode;ce.inArray(this,e)<0&&(ce.cleanData(d(this)),n&&n.replaceChild(t,this))},e)}}),ce.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){ce.fn[e]=function(e){for(var n,r=[],i=ce(e),o=i.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),ce(i[s])[t](n),ne.apply(r,n.get());return this.pushStack(r)}});var Ye,Qe={HTML:\"block\",BODY:\"block\"},Ke=/^margin/,Ze=new RegExp(\"^(\"+De+\")(?!px)[a-z%]+$\",\"i\"),et=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},tt=function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i},nt=Z.documentElement;!function(){function e(){a.style.cssText=\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",a.innerHTML=\"\",nt.appendChild(s);var e=n.getComputedStyle(a);t=\"1%\"!==e.top,o=\"2px\"===e.marginLeft,r=\"4px\"===e.width,a.style.marginRight=\"50%\",i=\"4px\"===e.marginRight,nt.removeChild(s)}var t,r,i,o,s=Z.createElement(\"div\"),a=Z.createElement(\"div\");a.style&&(a.style.backgroundClip=\"content-box\",a.cloneNode(!0).style.backgroundClip=\"\",ae.clearCloneStyle=\"content-box\"===a.style.backgroundClip,s.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",s.appendChild(a),ce.extend(ae,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==r&&e(),r},pixelMarginRight:function(){return null==r&&e(),i},reliableMarginLeft:function(){return null==r&&e(),o},reliableMarginRight:function(){var e,t=a.appendChild(Z.createElement(\"div\"));return t.style.cssText=a.style.cssText=\"-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",t.style.marginRight=t.style.width=\"0\",a.style.width=\"1px\",nt.appendChild(s),e=!parseFloat(n.getComputedStyle(t).marginRight),nt.removeChild(s),a.removeChild(t),e}}))}();var rt=/^(none|table(?!-c[ea]).+)/,it={position:\"absolute\",visibility:\"hidden\",display:\"block\"},ot={letterSpacing:\"0\",fontWeight:\"400\"},st=[\"Webkit\",\"O\",\"Moz\",\"ms\"],at=Z.createElement(\"div\").style;ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=O(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:\"cssFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=ce.camelCase(t),u=e.style;return t=ce.cssProps[a]||(ce.cssProps[a]=R(a)||a),s=ce.cssHooks[t]||ce.cssHooks[a],void 0===n?s&&\"get\"in s&&void 0!==(i=s.get(e,!1,r))?i:u[t]:(o=typeof n,\"string\"===o&&(i=Me.exec(n))&&i[1]&&(n=p(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(ce.cssNumber[a]?\"\":\"px\")),ae.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(e,n,r))||(u[t]=n)),void 0)}},css:function(e,t,n,r){var i,o,s,a=ce.camelCase(t);return t=ce.cssProps[a]||(ce.cssProps[a]=R(a)||a),s=ce.cssHooks[t]||ce.cssHooks[a],s&&\"get\"in s&&(i=s.get(e,!0,n)),void 0===i&&(i=O(e,t,r)),\"normal\"===i&&t in ot&&(i=ot[t]),\"\"===n||n?(o=parseFloat(i),n===!0||isFinite(o)?o||0:i):i}}),ce.each([\"height\",\"width\"],function(e,t){ce.cssHooks[t]={get:function(e,n,r){if(n)return rt.test(ce.css(e,\"display\"))&&0===e.offsetWidth?tt(e,it,function(){return L(e,t,r)}):L(e,t,r)},set:function(e,n,r){var i,o=r&&et(e),s=r&&M(e,t,r,\"border-box\"===ce.css(e,\"boxSizing\",!1,o),o);return s&&(i=Me.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=ce.css(e,t)),D(e,n,s)}}}),ce.cssHooks.marginLeft=N(ae.reliableMarginLeft,function(e,t){if(t)return(parseFloat(O(e,\"marginLeft\"))||e.getBoundingClientRect().left-tt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),ce.cssHooks.marginRight=N(ae.reliableMarginRight,function(e,t){if(t)return tt(e,{display:\"inline-block\"},O,[e,\"marginRight\"])}),ce.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){ce.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+Le[r]+t]=o[r]||o[r-2]||o[0];return i}},Ke.test(e)||(ce.cssHooks[e+t].set=D)}),ce.fn.extend({css:function(e,t){return Ce(this,function(e,t,n){var r,i,o={},s=0;if(ce.isArray(t)){for(r=et(e),i=t.length;s<i;s++)o[t[s]]=ce.css(e,t[s],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,arguments.length>1)},show:function(){return I(this,!0)},hide:function(){return I(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){Ie(this)?ce(this).show():ce(this).hide()})}}),ce.Tween=q,q.prototype={constructor:q,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?\"\":\"px\")},cur:function(){var e=q.propHooks[this.prop];return e&&e.get?e.get(this):q.propHooks._default.get(this)},run:function(e){var t,n=q.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):q.propHooks._default.set(this),this}},q.prototype.init.prototype=q.prototype,q.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0)},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ce.cssProps[e.prop]]&&!ce.cssHooks[e.prop]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}},q.propHooks.scrollTop=q.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},ce.fx=q.prototype.init,ce.fx.step={};var ut,ct,lt=/^(?:toggle|show|hide)$/,ft=/queueHooks$/;ce.Animation=ce.extend(B,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return p(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ce.isFunction(e)?(t=e,e=[\"*\"]):e=e.match(Ae);for(var n,r=0,i=e.length;r<i;r++)n=e[r],B.tweeners[n]=B.tweeners[n]||[],B.tweeners[n].unshift(t)},prefilters:[H],prefilter:function(e,t){t?B.prefilters.unshift(e):B.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&\"object\"==typeof e?ce.extend({},e):{complete:n||!n&&t||ce.isFunction(e)&&e,duration:e,easing:n&&t||t&&!ce.isFunction(t)&&t};return r.duration=ce.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in ce.fx.speeds?ce.fx.speeds[r.duration]:ce.fx.speeds._default,null!=r.queue&&r.queue!==!0||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){ce.isFunction(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Ie).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=ce.isEmptyObject(e),o=ce.speed(t,n,r),s=function(){var t=B(this,ce.extend({},e),o);(i||je.get(this,\"finish\"))&&t.stop(!0)};return s.finish=s,i||o.queue===!1?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=ce.timers,s=je.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&ft.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||ce.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=je.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=ce.timers,s=r?r.length:0;for(n.finish=!0,ce.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<s;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),ce.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=ce.fn[t];ce.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(P(t,!0),e,r,i)}}),ce.each({slideDown:P(\"show\"),slideUp:P(\"hide\"),slideToggle:P(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){ce.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(ut=ce.now();t<n.length;t++)e=n[t],e()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),ut=void 0},ce.fx.timer=function(e){ce.timers.push(e),e()?ce.fx.start():ce.timers.pop()},ce.fx.interval=13,ce.fx.start=function(){ct||(ct=n.setInterval(ce.fx.tick,ce.fx.interval))},ce.fx.stop=function(){n.clearInterval(ct),ct=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(e,t){return e=ce.fx?ce.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,r){var i=n.setTimeout(t,e);r.stop=function(){n.clearTimeout(i)}})},function(){var e=Z.createElement(\"input\"),t=Z.createElement(\"select\"),n=t.appendChild(Z.createElement(\"option\"));e.type=\"checkbox\",ae.checkOn=\"\"!==e.value,ae.optSelected=n.selected,t.disabled=!0,ae.optDisabled=!n.disabled,e=Z.createElement(\"input\"),e.value=\"t\",e.type=\"radio\",ae.radioValue=\"t\"===e.value}();var ht,pt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return Ce(this,ce.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(t=t.toLowerCase(),i=ce.attrHooks[t]||(ce.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:(r=ce.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!ae.radioValue&&\"radio\"===t&&ce.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(Ae);if(o&&1===e.nodeType)for(;n=o[i++];)r=ce.propFix[n]||n,ce.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)}}),ht={set:function(e,t,n){return t===!1?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=pt[t]||ce.find.attr;pt[t]=function(e,t,r){var i,o;return r||(o=pt[t],pt[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,pt[t]=o),i}});var dt=/^(?:input|select|textarea|button)$/i,vt=/^(?:a|area)$/i;ce.fn.extend({prop:function(e,t){return Ce(this,ce.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,\"tabindex\");return t?parseInt(t,10):dt.test(e.nodeName)||vt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),ae.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){ce.propFix[this.toLowerCase()]=this});var gt=/[\\t\\r\\n\\f]/g;ce.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ce.isFunction(e))return this.each(function(t){ce(this).addClass(e.call(this,t,U(this)))});if(\"string\"==typeof e&&e)for(t=e.match(Ae)||[];n=this[u++];)if(i=U(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(gt,\" \")){for(s=0;o=t[s++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");a=ce.trim(r),i!==a&&n.setAttribute(\"class\",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ce.isFunction(e))return this.each(function(t){ce(this).removeClass(e.call(this,t,U(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof e&&e)for(t=e.match(Ae)||[];n=this[u++];)if(i=U(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(gt,\" \")){for(s=0;o=t[s++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");a=ce.trim(r),i!==a&&n.setAttribute(\"class\",a)}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):ce.isFunction(e)?this.each(function(n){ce(this).toggleClass(e.call(this,n,U(this),t),t)}):this.each(function(){var t,r,i,o;if(\"string\"===n)for(r=0,i=ce(this),o=e.match(Ae)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&\"boolean\"!==n||(t=U(this),t&&je.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||e===!1?\"\":je.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+U(n)+\" \").replace(gt,\" \").indexOf(t)>-1)return!0;return!1}});var yt=/\\r/g,mt=/[\\x20\\t\\r\\n\\f]+/g;ce.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ce.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ce(this).val()):e,null==i?i=\"\":\"number\"==typeof i?i+=\"\":ce.isArray(i)&&(i=ce.map(i,function(e){return null==e?\"\":e+\"\"})),t=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()],t&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return t=ce.valHooks[i.type]||ce.valHooks[i.nodeName.toLowerCase()],t&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:(n=i.value,\"string\"==typeof n?n.replace(yt,\"\"):null==n?\"\":n)}}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,\"value\");return null!=t?t:ce.trim(ce.text(e)).replace(mt,\" \")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||i<0,s=o?null:[],a=o?i+1:r.length,u=i<0?a:o?i:0;u<a;u++)if(n=r[u],(n.selected||u===i)&&(ae.optDisabled?!n.disabled:null===n.getAttribute(\"disabled\"))&&(!n.parentNode.disabled||!ce.nodeName(n.parentNode,\"optgroup\"))){if(t=ce(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,i=e.options,o=ce.makeArray(t),s=i.length;s--;)r=i[s],(r.selected=ce.inArray(ce.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each([\"radio\",\"checkbox\"],function(){ce.valHooks[this]={set:function(e,t){if(ce.isArray(t))return e.checked=ce.inArray(ce(e).val(),t)>-1}},ae.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var bt=/^(?:focusinfocus|focusoutblur)$/;ce.extend(ce.event,{trigger:function(e,t,r,i){var o,s,a,u,c,l,f,h=[r||Z],p=se.call(e,\"type\")?e.type:e,d=se.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(s=a=r=r||Z,3!==r.nodeType&&8!==r.nodeType&&!bt.test(p+ce.event.triggered)&&(p.indexOf(\".\")>-1&&(d=p.split(\".\"),p=d.shift(),d.sort()),c=p.indexOf(\":\")<0&&\"on\"+p,e=e[ce.expando]?e:new ce.Event(p,\"object\"==typeof e&&e),e.isTrigger=i?2:3,e.namespace=d.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:ce.makeArray(t,[e]),f=ce.event.special[p]||{},\ni||!f.trigger||f.trigger.apply(r,t)!==!1)){if(!i&&!f.noBubble&&!ce.isWindow(r)){for(u=f.delegateType||p,bt.test(u+p)||(s=s.parentNode);s;s=s.parentNode)h.push(s),a=s;a===(r.ownerDocument||Z)&&h.push(a.defaultView||a.parentWindow||n)}for(o=0;(s=h[o++])&&!e.isPropagationStopped();)e.type=o>1?u:f.bindType||p,l=(je.get(s,\"events\")||{})[e.type]&&je.get(s,\"handle\"),l&&l.apply(s,t),l=c&&s[c],l&&l.apply&&ke(s)&&(e.result=l.apply(s,t),e.result===!1&&e.preventDefault());return e.type=p,i||e.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),t)!==!1||!ke(r)||c&&ce.isFunction(r[p])&&!ce.isWindow(r)&&(a=r[c],a&&(r[c]=null),ce.event.triggered=p,r[p](),ce.event.triggered=void 0,a&&(r[c]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}}),ce.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){ce.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ce.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ae.focusin=\"onfocusin\"in n,ae.focusin||ce.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){ce.event.simulate(t,e.target,ce.event.fix(e))};ce.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=je.access(r,t);i||r.addEventListener(e,n,!0),je.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=je.access(r,t)-1;i?je.access(r,t,i):(r.removeEventListener(e,n,!0),je.remove(r,t))}}});var wt=n.location,xt=ce.now(),Et=/\\?/;ce.parseJSON=function(e){return JSON.parse(e+\"\")},ce.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||ce.error(\"Invalid XML: \"+e),t};var Tt=/#.*$/,St=/([?&])_=[^&]*/,At=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,_t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ct=/^(?:GET|HEAD)$/,kt=/^\\/\\//,jt={},Ot={},Nt=\"*/\".concat(\"*\"),Rt=Z.createElement(\"a\");Rt.href=wt.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:wt.href,type:\"GET\",isLocal:_t.test(wt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Nt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":ce.parseJSON,\"text xml\":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?J(J(e,ce.ajaxSettings),t):J(ce.ajaxSettings,e)},ajaxPrefilter:z(jt),ajaxTransport:z(Ot),ajax:function(e,t){function r(e,t,r,a){var c,f,m,b,x,T=t;2!==w&&(w=2,u&&n.clearTimeout(u),i=void 0,s=a||\"\",E.readyState=e>0?4:0,c=e>=200&&e<300||304===e,r&&(b=X(h,E,r)),b=G(h,b,E,c),c?(h.ifModified&&(x=E.getResponseHeader(\"Last-Modified\"),x&&(ce.lastModified[o]=x),x=E.getResponseHeader(\"etag\"),x&&(ce.etag[o]=x)),204===e||\"HEAD\"===h.type?T=\"nocontent\":304===e?T=\"notmodified\":(T=b.state,f=b.data,m=b.error,c=!m)):(m=T,!e&&T||(T=\"error\",e<0&&(e=0))),E.status=e,E.statusText=(t||T)+\"\",c?v.resolveWith(p,[f,T,E]):v.rejectWith(p,[E,T,m]),E.statusCode(y),y=void 0,l&&d.trigger(c?\"ajaxSuccess\":\"ajaxError\",[E,h,c?f:m]),g.fireWith(p,[E,T]),l&&(d.trigger(\"ajaxComplete\",[E,h]),--ce.active||ce.event.trigger(\"ajaxStop\")))}\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var i,o,s,a,u,c,l,f,h=ce.ajaxSetup({},t),p=h.context||h,d=h.context&&(p.nodeType||p.jquery)?ce(p):ce.event,v=ce.Deferred(),g=ce.Callbacks(\"once memory\"),y=h.statusCode||{},m={},b={},w=0,x=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(2===w){if(!a)for(a={};t=At.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===w?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return w||(e=b[n]=b[n]||e,m[e]=t),this},overrideMimeType:function(e){return w||(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(w<2)for(t in e)y[t]=[y[t],e[t]];else E.always(e[E.status]);return this},abort:function(e){var t=e||x;return i&&i.abort(t),r(0,t),this}};if(v.promise(E).complete=g.add,E.success=E.done,E.error=E.fail,h.url=((e||h.url||wt.href)+\"\").replace(Tt,\"\").replace(kt,wt.protocol+\"//\"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=ce.trim(h.dataType||\"*\").toLowerCase().match(Ae)||[\"\"],null==h.crossDomain){c=Z.createElement(\"a\");try{c.href=h.url,c.href=c.href,h.crossDomain=Rt.protocol+\"//\"+Rt.host!=c.protocol+\"//\"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=ce.param(h.data,h.traditional)),V(jt,h,t,E),2===w)return E;l=ce.event&&h.global,l&&0===ce.active++&&ce.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Ct.test(h.type),o=h.url,h.hasContent||(h.data&&(o=h.url+=(Et.test(o)?\"&\":\"?\")+h.data,delete h.data),h.cache===!1&&(h.url=St.test(o)?o.replace(St,\"$1_=\"+xt++):o+(Et.test(o)?\"&\":\"?\")+\"_=\"+xt++)),h.ifModified&&(ce.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",ce.lastModified[o]),ce.etag[o]&&E.setRequestHeader(\"If-None-Match\",ce.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||t.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+Nt+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(f in h.headers)E.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(h.beforeSend.call(p,E,h)===!1||2===w))return E.abort();x=\"abort\";for(f in{success:1,error:1,complete:1})E[f](h[f]);if(i=V(Ot,h,t,E)){if(E.readyState=1,l&&d.trigger(\"ajaxSend\",[E,h]),2===w)return E;h.async&&h.timeout>0&&(u=n.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{w=1,i.send(m,r)}catch(e){if(!(w<2))throw e;r(-1,e)}}else r(-1,\"No Transport\");return E},getJSON:function(e,t,n){return ce.get(e,t,n,\"json\")},getScript:function(e,t){return ce.get(e,void 0,t,\"script\")}}),ce.each([\"get\",\"post\"],function(e,t){ce[t]=function(e,n,r,i){return ce.isFunction(n)&&(i=i||r,r=n,n=void 0),ce.ajax(ce.extend({url:e,type:t,dataType:i,data:n,success:r},ce.isPlainObject(e)&&e))}}),ce._evalUrl=function(e){return ce.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,throws:!0})},ce.fn.extend({wrapAll:function(e){var t;return ce.isFunction(e)?this.each(function(t){ce(this).wrapAll(e.call(this,t))}):(this[0]&&(t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return ce.isFunction(e)?this.each(function(t){ce(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ce(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ce.isFunction(e);return this.each(function(n){ce(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){ce.nodeName(this,\"body\")||ce(this).replaceWith(this.childNodes)}).end()}}),ce.expr.filters.hidden=function(e){return!ce.expr.filters.visible(e)},ce.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Dt=/%20/g,Mt=/\\[\\]$/,Lt=/\\r?\\n/g,It=/^(?:submit|button|image|reset|file)$/i,qt=/^(?:input|select|textarea|keygen)/i;ce.param=function(e,t){var n,r=[],i=function(e,t){t=ce.isFunction(t)?t():null==t?\"\":t,r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(void 0===t&&(t=ce.ajaxSettings&&ce.ajaxSettings.traditional),ce.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join(\"&\").replace(Dt,\"+\")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,\"elements\");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(\":disabled\")&&qt.test(this.nodeName)&&!It.test(e)&&(this.checked||!qe.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:ce.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Lt,\"\\r\\n\")}}).get()}}),ce.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Ft={0:200,1223:204},Pt=ce.ajaxSettings.xhr();ae.cors=!!Pt&&\"withCredentials\"in Pt,ae.ajax=Pt=!!Pt,ce.ajaxTransport(function(e){var t,r;if(ae.cors||Pt&&!e.crossDomain)return{send:function(i,o){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(s in i)a.setRequestHeader(s,i[s]);t=function(e){return function(){t&&(t=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,\"abort\"===e?a.abort():\"error\"===e?\"number\"!=typeof a.status?o(0,\"error\"):o(a.status,a.statusText):o(Ft[a.status]||a.status,a.statusText,\"text\"!==(a.responseType||\"text\")||\"string\"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),r=a.onerror=t(\"error\"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&n.setTimeout(function(){t&&r()})},t=t(\"abort\");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),ce.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),ce.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ce(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&i(\"error\"===e.type?404:200,e.type)}),Z.head.appendChild(t[0])},abort:function(){n&&n()}}}});var $t=[],Ht=/(=)\\?(?=&|$)|\\?\\?/;ce.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=$t.pop()||ce.expando+\"_\"+xt++;return this[e]=!0,e}}),ce.ajaxPrefilter(\"json jsonp\",function(e,t,r){var i,o,s,a=e.jsonp!==!1&&(Ht.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ht.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return i=e.jsonpCallback=ce.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ht,\"$1\"+i):e.jsonp!==!1&&(e.url+=(Et.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+i),e.converters[\"script json\"]=function(){return s||ce.error(i+\" was not called\"),s[0]},e.dataTypes[0]=\"json\",o=n[i],n[i]=function(){s=arguments},r.always(function(){void 0===o?ce(n).removeProp(i):n[i]=o,e[i]&&(e.jsonpCallback=t.jsonpCallback,$t.push(i)),s&&ce.isFunction(o)&&o(s[0]),s=o=void 0}),\"script\"}),ce.parseHTML=function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||Z;var r=me.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=g([e],t,i),i&&i.length&&ce(i).remove(),ce.merge([],r.childNodes))};var Wt=ce.fn.load;ce.fn.load=function(e,t,n){if(\"string\"!=typeof e&&Wt)return Wt.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(\" \");return a>-1&&(r=ce.trim(e.slice(a)),e=e.slice(0,a)),ce.isFunction(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),s.length>0&&ce.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,s.html(r?ce(\"<div>\").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){s.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.expr.filters.animated=function(e){return ce.grep(ce.timers,function(t){return e===t.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,c,l=ce.css(e,\"position\"),f=ce(e),h={};\"static\"===l&&(e.style.position=\"relative\"),a=f.offset(),o=ce.css(e,\"top\"),u=ce.css(e,\"left\"),c=(\"absolute\"===l||\"fixed\"===l)&&(o+u).indexOf(\"auto\")>-1,c?(r=f.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),ce.isFunction(t)&&(t=t.call(e,n,ce.extend({},a))),null!=t.top&&(h.top=t.top-a.top+s),null!=t.left&&(h.left=t.left-a.left+i),\"using\"in t?t.using.call(e,h):f.css(h)}},ce.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){ce.offset.setOffset(this,e,t)});var t,n,r=this[0],i={top:0,left:0},o=r&&r.ownerDocument;if(o)return t=o.documentElement,ce.contains(t,r)?(i=r.getBoundingClientRect(),n=Q(o),{top:i.top+n.pageYOffset-t.clientTop,left:i.left+n.pageXOffset-t.clientLeft}):i},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return\"fixed\"===ce.css(n,\"position\")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),ce.nodeName(e[0],\"html\")||(r=e.offset()),r.top+=ce.css(e[0],\"borderTopWidth\",!0),r.left+=ce.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-r.top-ce.css(n,\"marginTop\",!0),left:t.left-r.left-ce.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&\"static\"===ce.css(e,\"position\");)e=e.offsetParent;return e||nt})}}),ce.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;ce.fn[e]=function(r){return Ce(this,function(e,r,i){var o=Q(e);return void 0===i?o?o[t]:e[r]:void(o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i)},e,r,arguments.length)}}),ce.each([\"top\",\"left\"],function(e,t){ce.cssHooks[t]=N(ae.pixelPosition,function(e,n){if(n)return n=O(e,t),Ze.test(n)?ce(e).position()[t]+\"px\":n})}),ce.each({Height:\"height\",Width:\"width\"},function(e,t){ce.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){ce.fn[r]=function(r,i){var o=arguments.length&&(n||\"boolean\"!=typeof r),s=n||(r===!0||i===!0?\"margin\":\"border\");return Ce(this,function(t,n,r){var i;return ce.isWindow(t)?t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===r?ce.css(t,n,s):ce.style(t,n,r,s)},t,o?r:void 0,o,null)}})}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},size:function(){return this.length}}),ce.fn.andSelf=ce.fn.addBack,r=[],i=function(){return ce}.apply(t,r),!(void 0!==i&&(e.exports=i));var Bt=n.jQuery,Ut=n.$;return ce.noConflict=function(e){return n.$===ce&&(n.$=Ut),e&&n.jQuery===ce&&(n.jQuery=Bt),ce},o||(n.jQuery=n.$=ce),ce})},function(e,t,n){\"use strict\";function r(e){return function(t){var n=e;if(!t)return n;if(Array.isArray(t)){var r=e.match(/\\:\\w+/g);return r.length!==t.length?(console.error(\"It does not match the required input values.\"),n):(r.forEach(function(e,r){n=n.replace(e,encodeURIComponent(t[r]))}),n)}if(\"object\"===(\"undefined\"==typeof t?\"undefined\":i(t))){for(var o in t)t.hasOwnProperty(o)&&(n=n.replace(\":\"+o,encodeURIComponent(t[o])));return n}return console.error(\"Invalid params type\"),n}}var i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=n(13).MIDDLEWARE,s=n(13).MIDDLEWARE_PROTOCOL,a=n(13).MiddlewareRunner,u=void 0;e.exports={routeTables:{},settings:null,layouts:[],currentView:\"\",currentLayout:\"\",bindLayout:function(e){this.layouts.push(e)},design:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];this.settings=t,this.router=null,u=n,this.bindRouter(Array.isArray(e)?e:[e])},bindRouter:function(e){var t=this,n={routes:{}},i=void 0,c=void 0;for(e=Array.from(e);e.length;)if(i=e.shift(),this.routeTables[i.routeName||i.view.viewname]=r(i.url),i.originUrl=i.url,i.url.startsWith(\"/\")&&(i.url=i.url.substr(1)),c=\"r\"+i.url.toLowerCase()+Date.now(),n.routes[i.url]=c,n[c]=function(e){var t,n={},r={},i=0;if(e.url.startsWith(\"*\"))n[e.url.split(\"*\")[1]]=arguments.length<=1?void 0:arguments[1];else{var c=!0,l=!1,f=void 0;try{for(var h,p=e.url.split(\"/\")[Symbol.iterator]();!(c=(h=p.next()).done);c=!0){var d=h.value;d.startsWith(\":\")&&(n[d.substr(1)]=decodeURIComponent(arguments.length<=i+1?void 0:arguments[i+1]),++i)}}catch(e){l=!0,f=e}finally{try{!c&&p.return&&p.return()}finally{if(l)throw f}}}var v=decodeURIComponent((t=(arguments.length<=1?0:arguments.length-1)-1+1,(arguments.length<=t?void 0:arguments[t])||(window.location.search||\"\").substr(1)));if(v&&~v.indexOf(\"=\")){var g=v.split(\"&\"),y=!0,m=!1,b=void 0;try{for(var w,x=g[Symbol.iterator]();!(y=(w=x.next()).done);y=!0){var E=w.value,T=E.split(\"=\");2===T.length&&(r[T[0]]=T[1])}}catch(e){m=!0,b=e}finally{try{!y&&x.return&&x.return()}finally{if(m)throw b}}}if(e.layout){var S=this.layouts.find(function(t){return t.viewName===e.layout});this.currentLayout&&this.currentLayout.viewname===e.layout?S.options.update&&(this.currentLayout.params=n,this.currentLayout.query=r,this.currentLayout.updateView()):S&&(!!this.currentLayout&&this.currentLayout.close(),S.view.prototype.params=n,S.view.prototype.query=r,S.view.prototype.container=S.container,this.currentLayout=new S.view)}e.view.prototype.params=n,e.view.prototype.query=r,e.view.prototype.container=e.container;var A=Object.assign({},e);A.view&&delete A.view,A.pages&&delete A.pages;var _=u.getMiddleware(o.ROUTER,s.BEFORE);a.run(_,s.BEFORE,[A,u],function(){var t=new e.view;this.currentView&&this.currentView.close(),this.currentView=t,_=u.getMiddleware(o.ROUTER,s.AFTER),a.run(_,s.AFTER,[A,u])}.bind(this))}.bind(this,i),i.pages&&i.pages.length){var l=i.originUrl||\"\",f=i.container||\"\",h=i.layout||\"\",p=!0,d=!1,v=void 0;try{for(var g,y=i.pages[Symbol.iterator]();!(p=(g=y.next()).done);p=!0){var m=g.value;m.url.startsWith(\"/\")||(m.url=(\"/\"===l?\"\":l)+\"/\"+m.url),m.container||(m.container=f),m.layout||(m.layout=h),e.push(m)}}catch(e){d=!0,v=e}finally{try{!p&&y.return&&y.return()}finally{if(d)throw v}}}n.routes[\"*actions\"]=\"___NOT_FOUND___\",n.___NOT_FOUND___=function(e){\"empty\"in t.settings&&t.settings.empty(e)},this.router=new(Backbone.Router.extend(n))}}},function(e,t){\"use strict\";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}Object.defineProperty(t,\"__esModule\",{value:!0});t.MIDDLEWARE={APP:\"app\",VIEW:\"view\",REDUCER:\"reducer\",ROUTER:\"router\"},t.MIDDLEWARE_PROTOCOL={BEFORE:\"before\",AFTER:\"after\",UNMOUNT:\"unmount\"},t.MiddlewareRunner={run:function(e,t,r,i){if(!Array.isArray(e)||\"string\"!=typeof t)throw new Error(\"MiddlewareRunner arguments error\");var o=r.length,s=0,a=function a(){var u=e[s++];if(u){var c=u[t];c.length>o?c.call.apply(c,[null].concat(n(r),[a])):(c.call.apply(c,[null].concat(n(r))),setTimeout(a,1))}else!!i&&i()};a()}}},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var o=n(6),s=n(2).format,a=n(9),u=n(13).MIDDLEWARE,c=n(13).MIDDLEWARE_PROTOCOL,l=n(13).MiddlewareRunner,f=n(15),h=n(16),p=n(17),d=n(18),v=/^(\\S+)\\s*(.*)$/,g=/^\\@(\\w+)\\s*(.*)$/,y=\"text\",m=null,b=null,w=null;b=function(){var e=w.getMiddleware(u.VIEW,c.BEFORE);l.run(e,c.BEFORE,[this],function(){var t=this.tagName,n=this.container,r=this.template,i=void 0,o=void 0;if(!n)throw new Error(\"[\"+this.viewname+'] Required attribute \"container\" is missing.');if(\"string\"==typeof n&&(n=$(n)),!n||!n.length)throw new Error(\"[\"+this.viewname+'] \"container\" is undefined.');var s=this.getModel();if(\"function\"==typeof this.viewWillMount&&(s=this.viewWillMount(s)||s),r){if(i=\"string\"==typeof r?r:r(s),\"div\"===t){var a=this;t=\"\";do if(a.hasOwnProperty(\"tagName\")&&a.tagName){t=a.tagName;break}while((a=a.__proto__)&&\"___WOOWA_VIEW___\"!==a.viewname)}o=t||$(i).length>1?$(\"<\"+(t||\"div\")+\">\"+i+\"</\"+(t||\"div\")+\">\"):$(i),this.className&&o.addClass(this.className),this._viewMounted?$.contains(n[0],this.el)?this.$el.replaceWith(o):n.html(o):this.append?n.append(o):this.prepend?n.prepend(o):this.after?n.after(o):n.html(o),this.setElement(o)}else this.setElement(n);this._viewMounted=!0,this._bindRef(),this._bindModel(),\"function\"==typeof this.viewComponentDidMount&&this.viewComponentDidMount(o),\"function\"==typeof this.viewDidMount&&this.viewDidMount(o),e=w.getMiddleware(u.VIEW,c.AFTER),l.run(e,c.AFTER,[this],function(){var e=this;[\"viewDidMount\",\"mount\"].forEach(function(t){e.dispatch(Woowahan.Event.create(t,e)),e.trigger(t)})}.bind(this))}.bind(this))},m=a.View.extend({super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];m.prototype.initialize.apply(this,t)},initialize:function(e){this._viewMounted=!1,this._views={},this.debug=o(\"View:\"+this.viewname),e&&this.setModel(e),b.apply(this)},_plugins:{text:f,\"input-text\":h,checkbox:p,select:d},delegateEvents:function(e){if(e=e||this.events,!e)return this;this.undelegateEvents();for(var t in e)if(e.hasOwnProperty(t)){var n=e[t],r=t.match(v),i=t.match(g),o=void 0,s=void 0,a=void 0;if(i){var u=n.indexOf(\"(\"),c=[];o=i[1],s=i[2],~u&&(c=n.substring(u+1,n.length-1).split(\",\").map(function(e){return $.trim(e)}),n=n.substring(0,u)),a=function(e,t,n,r,i){var o=this,s=function(e){return e.is(\"input[type=checkbox]\")||e.is(\"input[type=radio]\")?e.is(\":checked\"):e.is(\"select\")?e.val():e.val()||e.text()},a=r.map(function(e){return s(o.$(e))});if(\"submit\"===e){var u={},c=!0,l=!1,f=void 0;try{for(var h,p=o.$(t).find(\"input, select, textarea\")[Symbol.iterator]();!(c=(h=p.next()).done);c=!0){var d=h.value;u[$(d).attr(\"name\")]=s($(d))}}catch(e){l=!0,f=e}finally{try{!c&&p.return&&p.return()}finally{if(l)throw f}}a.push(u)}\"[object Function]\"!==Object.prototype.toString.call(n)&&(n=this[n]);for(var v=arguments.length,g=Array(v>5?v-5:0),y=5;y<v;y++)g[y-5]=arguments[y];return n.apply(this,Array.prototype.concat.call(a,g,i))}.bind(this,o,s,n,c)}else{if(\"[object Function]\"!==Object.prototype.toString.call(n)&&(n=this[n]),!n)continue;o=r[1],s=r[2],a=n.bind(this)}this.delegate(o,s,a)}return this},updateView:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),i=2;i<n;i++)r[i-2]=arguments[i];if(!arguments.length)return this.close(!1),void b.apply(this);if(e&&!t)return void(this._views[e]&&(this._views[e].close(),delete this._views[e]));\"function\"!=typeof t&&(r=t);var o=\"string\"==typeof e?this.$(e):e;o.length||(o=$(e));var s=this._views[e];if(s){s.setModel.apply(s,Array.prototype.concat.call(r,{silent:!0})),s.container=o;var a=w.getMiddleware(u.VIEW,c.UNMOUNT);l.run(a,c.UNMOUNT,[this],function(){\"function\"==typeof s.viewWillUnmount&&s.viewWillUnmount.call(s),s.dispatch(Woowahan.Event.create(\"unmount\",this)),s.trigger(\"unmount\"),b.apply(this._views[e])}.bind(this))}else t.prototype.container=o,s=new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,r))),this._views[e]=s;return s},addView:function(e,t){this.removeView(e);for(var n=arguments.length,r=Array(n>2?n-2:0),i=2;i<n;i++)r[i-2]=arguments[i];return this.updateView.apply(this,[e,t].concat(r))},removeView:function(e){this.updateView(e)},addPopup:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];\"function\"==typeof t&&(n=t,t={}),e=\"string\"==typeof e?this.getComponent(e):e;var r=e.viewname,i=void 0,o=void 0,s=void 0;if(e){var a=t._id||r+\"Container\"+Date.now();if($(\"div[data-id=\"+a+\"]\").length)return;return i=a,o=$('<div data-id=\"'+i+'\"></div>'),$(\"body\").append(o),s=this.addView(\"div[data-id=\"+i+\"]\",e,Object.assign(t,{_id:a})),s.on(\"remove\",function(){s.off(\"remove\"),$(\"div[data-id=\"+i+\"]\").remove()}),s.closePopup=function(e,t,n){this.removeView(\"div[data-id=\"+e+\"]\"),t&&t.call(this,n)}.bind(this,i,n),s}console.error(\"undefined popup name [\"+r+\"]\")},getStates:function(e){return w.getStates(e)},setStates:function(e,t){w.setStates(e,t)},getComponent:function(e){return w.getComponent(e).extend({})},getRouteTables:function(e,t,n){if(void 0===e)return w.getRouteTables();var r=w.getRouteTables()[e];return r?\"string\"==typeof t?r()+\"?\"+encodeURIComponent(t):\"string\"==typeof n?r(t)+\"?\"+encodeURIComponent(n):r(t):void console.error('\"'+e+'\" not found')},dispatch:function(e,t,n){var r;switch(e.__options=n||{},e.wwtype){case\"event\":(r=this.$el).trigger.apply(r,[e.type].concat(i(e.data)));break;case\"action\":t&&(t=t.bind(this)),w.dispatch(e,t)}},setModel:function(e,t){var n=void 0;if(n=\"string\"==typeof e&&\"undefined\"!=typeof t?r({},e,t):e,n instanceof a.Model)return this.model&&this._unbindModel(),this.model=n.clone(),void(this._viewMounted&&this._bindModel());\"[object Null]\"!==Object.prototype.toString.call(n)&&this.model&&this.model instanceof a.Model||(this.model=new a.Model,this._viewMounted&&this._bindModel());for(var i in n)if(n.hasOwnProperty(i)){var o=this.model.get(i);o!==n[i]&&this.model.set(i,n[i])}},getModel:function(e){return this.model&&this.model instanceof a.Model||(this.model=new a.Model),e?this.model.clone().get(e):this.model.clone().toJSON()},log:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.debug(s.apply(this,t))},logStamp:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.log(t)},close:function(e){var t=w.getMiddleware(u.VIEW,c.UNMOUNT);l.run(t,c.UNMOUNT,[this],function(){\"function\"==typeof this.viewWillUnmount&&this.viewWillUnmount(),this.dispatch(Woowahan.Event.create(\"unmount\",this)),this.trigger(\"unmount\"),this._unbindModel(),this._removeChild(e),e+\"\"!=\"false\"&&this&&(this._unbindRef(),this.remove())}.bind(this))},remove:function(){this.dispatch(Woowahan.Event.create(\"remove\",this)),this.trigger(\"remove\");for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];a.View.prototype.remove.apply(this,t)},_syncElement:function(e,t){var n=$(e),r=$(t);n.is(\"input[type=text]\")||n.is(\"input[type=number]\")||n.is(\"input[type=tel]\")||n.is(\"textarea\")?r.val(n.val()):n.is(\"input[type=checkbox]\")||n.is(\"input[type=radio]\")?r.prop(\"checked\",n.is(\":checked\")):n.is(\"select\")&&r.val(n.val())},_bindRef:function(){this.refs||(this.refs={});var e=!0,t=!1,n=void 0;try{for(var r,i=this.$el.find(\"[data-ref]\")[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){var o=r.value,s=$(o),a=s.data(\"ref\"),u=s.data(\"refGroup\")||!1,c=s.data(\"refFormRestore\")||!1;if(u)this.refs[a]?this.refs[a].push(o):this.refs[a]=[o];else{var l=this.refs[a];this.refs[a]=o,l&&(c&&this._syncElement(l,this.refs[a]),l=null)}}}catch(e){t=!0,n=e}finally{try{!e&&i.return&&i.return()}finally{if(t)throw n}}},_bindModel:function(){this._unbindModel();var e=this.$el.find(\"[data-role=bind]\"),t=!0,n=!1,r=void 0;try{for(var i,o=e[Symbol.iterator]();!(t=(i=o.next()).done);t=!0){var s=i.value,a=$(s).data(\"name\"),u=\"change:\"+a,c=($(s).data(\"type\")||y).toLowerCase(),l=this.model.get(a);this.listenTo(this.model,u,function(e,t,n){var r=this.model.get(t);this._plugins[n].call(this,e,r)}.bind(this,s,a,c)),\"undefined\"!=typeof l&&this._plugins[c].call(this,s,l)}}catch(e){n=!0,r=e}finally{try{!t&&o.return&&o.return()}finally{if(n)throw r}}},_unbindRef:function(){for(var e in this.refs)this.refs.hasOwnProperty(e)&&(this.refs[e]=null);this.refs=null},_unbindModel:function(){this.stopListening(this.model)},_removeChild:function(e){for(var t in this._views)this._views.hasOwnProperty(t)&&(this._views[t].close.call(this._views[t],e),delete this._views[t])}}),m.create=function(e,t){var n=m.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return w||(w=e),m}},function(e,t){\"use strict\";e.exports=function(e,t){$(e).text(t)}},function(e,t){\"use strict\";e.exports=function(e,t){$(e).val(t)}},function(e,t){\"use strict\";e.exports=function(e,t){$(e).prop(\"checked\",!!t)}},function(e,t){\"use strict\";var n=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}();e.exports=function(e,t){var r=0,i=void 0;if(Array.isArray(t)){if(!t.length)return;i=Array.from(t)}else{if(\"undefined\"==typeof t)return;i=Array.from([t])}e.innerHTML=\"\";var o=!0,s=!1,a=void 0;try{for(var u,c=i.entries()[Symbol.iterator]();!(o=(u=c.next()).done);o=!0){var l=n(u.value,2),f=l[0],h=l[1],p=void 0,d=void 0;\"string\"==typeof h?(p=h,d=h):(p=h.label,d=h.value),h.selected&&(r=f),$(e).append('<option value=\"'+d+'\">'+p+\"</option>\")}}catch(e){s=!0,a=e}finally{try{!o&&c.return&&c.return()}finally{if(s)throw a}}$(e).children(\"option\").eq(r).attr(\"selected\",\"selected\"),$(e).trigger(\"change\")}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=n(13).MIDDLEWARE,o=n(13).MIDDLEWARE_PROTOCOL,s=n(13).MiddlewareRunner,a={timeout:5e3},u=void 0,c=void 0;u={SUCCESS:\"SUCCESS\",FAIL:\"FAIL\",queueSuccess:[],queueFail:[],extend:function(e){var t=Object.assign({},this);return e.onSuccess&&t.queueSuccess.push(e.onSuccess),e.onFail&&t.queueFail.push(e.onFail),t},create:function(e,t,n){var u=this;if(\"function\"==typeof t)n=t,t=void 0;else if(\"object\"===(\"undefined\"==typeof t?\"undefined\":r(t))&&\"schema\"!==t.wwtype)throw new Error(\"The second argument of reducer will only function, or schema objects.\");var l=this,f=function(t,n){this._timestamp=Date.now(),this._id=e.toLowerCase()+this._timestamp,this.subscriber=n,this.queueSuccess=[],this.queueFail=[],this.useraction(t),this.addAction(this._id)};f.wwtype=\"reducer\",f.actionName=e,f.schema=t;var h=Object.assign(f.prototype,{onSuccess:l.onSuccess,onFail:l.onFail});return h.useraction=n,h.id=function(){return u._id},h.actionName=e,h.createtime=function(){return u._timestamp},h.addAction=function(e){return c.addAction(e)},h.addError=function(e){return c.addError(e)},h.removeAction=function(e){return c.removeAction(e)},h.getStates=function(){return c.getStates()},h.use=function(e,t){switch(e){case l.SUCCESS:if(!t)return;Array.isArray(t)?Array.prototype.push.apply(this.queueSuccess,t):this.queueSuccess.push(t);break;case l.FAIL:if(!t)return;Array.isArray(t)?Array.prototype.push.apply(this.queueFail,t):this.queueFail.push(t);break;default:throw new Error(\"undefined key\")}},h.loadScript=function(e,t){t||(t=e.toLowerCase());var n=$(\"script[id=\"+t+\"]\");return n.length?void(this.onSuccess||this.success).call(this):(n=document.createElement(\"script\"),document.getElementsByTagName(\"head\")[0].appendChild(n),n.addEventListener(\"load\",(this.onSuccess||this.success).bind(this)),n.addEventListener(\"error\",(this.onFail||this.fail).bind(this)),n.id=t,n.type=\"text/javascript\",void(n.src=e))},h.requestData=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"GET\";t=\"object\"===(\"undefined\"==typeof e?\"undefined\":r(e))?Object.assign({},a,{url:e}):Object.assign({},a,t,{url:e}),t.type=n.toUpperCase();var u=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Array.prototype.concat.call(l.queueSuccess,this.queueSuccess),a=c.getMiddleware(i.REDUCER,o.AFTER);\ns.run(a,o.AFTER,[c],function(){if(r.length||this.onSuccess){var e=!0,n=!1,i=void 0;try{for(var o,s=r[Symbol.iterator]();!(e=(o=s.next()).done);e=!0){var a=o.value;a.apply(this,t)}}catch(e){n=!0,i=e}finally{try{!e&&s.return&&s.return()}finally{if(n)throw i}}!!this.onSuccess&&this.onSuccess.apply(this,t)}else this.success.apply(this,t)}.bind(this))},f=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Array.prototype.concat.call(l.queueFail,this.queueFail),a=t[0],u=c.getMiddleware(i.REDUCER,o.AFTER);s.run(u,o.AFTER,[c],function(){if(a&&(t=[{status:a.status,statusText:a.statusText||\"\",response:a.responseJSON||a.responseText}]),r.length||this.onFail){var e=!0,n=!1,i=void 0;try{for(var o,s=r[Symbol.iterator]();!(e=(o=s.next()).done);e=!0){var u=o.value;u.apply(this,t)}}catch(e){n=!0,i=e}finally{try{!e&&s.return&&s.return()}finally{if(n)throw i}}!!this.onFail&&this.onFail.apply(this,t)}else this.fail.apply(this,t)}.bind(this))},h=c.getMiddleware(i.REDUCER,o.BEFORE);s.run(h,o.BEFORE,[t,c],function(){return $.ajax(t).done(u.bind(this)).fail(f.bind(this))}.bind(this))},h.getData=function(e,t){return this.requestData(e,t,\"get\")},h.putData=function(e,t){return this.requestData(e,t,\"put\")},h.postData=function(e,t){return this.requestData(e,t,\"post\")},h.deleteData=function(e,t){return this.requestData(e,t,\"delete\")},h.success=function(e){},h.fail=function(e,t){\"abort\"in e&&e.abort(),this.removeAction(this._id),this.addError(t)},h.finish=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.subscriber&&this.subscriber.apply(this,t),this.removeAction(this._id)},h.env={},h.env.template=function(e,t){if(\"string\"!=typeof e)return e;var n=e,r=e.match(/{{\\w+}}/g);return r&&r.forEach(function(e){var r=e.replace(\"{{\",\"\").replace(\"}}\",\"\");r in t&&(n=n.replace(e,t[r]))}),n},f}},e.exports=function(e){return c||(c=e),u}},function(e,t){\"use strict\";e.exports={create:function(e,t){return{wwtype:\"error\",code:1,message:e,target:t}}}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=n(20),o={STRING:\"string\",NUMBER:\"number\",ARRAY:\"array\",EMAIL:\"email\",PHONE:\"phone\",BOOLEAN:\"boolean\"},s=\"required\",a=\"defaultValue\",u=\"min\",c=\"max\",l=\"format\",f={},h={},p=function(e,t){if(s in this&&!h[s].call(this,t))return i.create('Required attribute \"'+e+'\" is missing.',{key:e,value:t});if(void 0!==t){if(!h[this.name].call(this,t))return i.create('\"'+e+'\" type property must be \"'+this.name+'\".',{key:e,value:t});if(this.name===o.NUMBER){if(u in this&&null!==this[u]&&!h[u].call(this,t))return i.create('\"'+e+'\" is greater than '+this[u]+\".\",{key:e,value:t});if(c in this&&null!==this[c]&&!h[c].call(this,t))return i.create('\"'+e+'\" may have a value of '+this[c]+\" or less.\",{key:e,value:t})}else if(this.name===o.STRING){if(u in this&&null!==this[u]&&!h[u].call(this,t))return i.create('\"'+e+'\" must be more than '+this[u]+\" characters long.\",{key:e,value:t});if(c in this&&null!==this[c]&&!h[c].call(this,t))return i.create('\"'+e+'\" should be no longer than '+this[c]+\" characters.\",{key:e,value:t})}}},d=function(e,t,n){var r={},i=void 0;return t.forEach(function(e){r[e]=f[e]}),i=Object.assign({name:e},r,n),i.__validate__=p,i};f[s]=!1,f[a]=null,f[u]=null,f[c]=null,f[l]=null,h[o.STRING]=function(e){return(\"undefined\"==typeof e?\"undefined\":r(e))===o.STRING},h[o.NUMBER]=function(e){if(\"number\"==typeof e)return!0;var t=String(e),n=t.match(/^[+-]?(\\d+\\.?\\d*)$|(\\d*\\.?\\d+)$/g);return!!n&&(!(n.length>1)&&n[0].length===t.length)},h[o.ARRAY]=function(e){return Array.isArray(e)},h[o.EMAIL]=function(e){var t=/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;return t.test(e)},h[o.BOOLEAN]=function(e){return\"[object Boolean]\"===Object.prototype.toString.call(e)},h[s]=function(e){return!this[s]||void 0!==e&&null!==e},h[u]=function(e){return this.name===o.NUMBER?e>=this[u]:this.name!==o.STRING||e.length>=this[u]},h[c]=function(e){return this.name===o.NUMBER?e<=this[c]:this.name!==o.STRING||e.length<=this[c]},e.exports={String:function(e){return d(o.STRING,[s,a,u,c,l],Object.assign({defaultValue:\"\"},e))},Number:function(e){return d(o.NUMBER,[s,a,u,c],Object.assign({defaultValue:0},e))},Array:function(e){return d(o.ARRAY,[s,a],Object.assign({defaultValue:[]},e))},Email:function(e){return d(o.EMAIL,[s],Object.assign({},e))},Boolean:function(e){return d(o.BOOLEAN,[s],Object.assign({},e))}}},function(e,t){\"use strict\";e.exports={create:function(e){return{wwtype:\"store\",store:e}}}},function(e,t){\"use strict\";e.exports={create:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{wwtype:\"action\",type:e,data:t}}}},function(e,t){\"use strict\";e.exports={create:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return{wwtype:\"event\",type:e,data:n}}}},function(e,t){\"use strict\";var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};e.exports={create:function(e,t){function r(e){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=void 0);return Object.assign(n,e)}var i={wwtype:\"schema\",schemaName:e};return i.validate=function(e){var i=r(e),o=[];for(var s in i)if(i.hasOwnProperty(s)){var a=t[s];if(a&&a.hasOwnProperty(\"__validate__\")){var u=a.__validate__.call(a,s,e[s]);u&&o.push(u)}else\"object\"===(\"undefined\"==typeof window?\"undefined\":n(window))&&console.warn('Is not defined in the schema field \"'+s+'\" is present.')}return 0===o.length?void 0:o},i.toSchema=function(){return t},i}}},function(e,t){\"use strict\";e.exports=function(e,t,n){return{view:t,container:e,options:Object.assign({update:!0},n),viewName:t.viewname,wwtype:\"layout\"}}},function(e,t){\"use strict\";e.exports=function(e,t){return{view:t,name:e,viewName:t.viewname,wwtype:\"component\"}}},function(e,t){\"use strict\";e.exports=function(e,t){return{type:e,plugin:t,wwtype:\"plugin\"}}},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=n(9),o=n(1),s=n(30),a=[s.SELECTED_ROW,s.SELECTED_CELL],u=void 0,c=void 0;u=o.View.create(\"CollectionView\",{super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];u.prototype.initialize.apply(this,t)},initialize:function(){this.collection=this.collection||new i.Collection,this.collection.on(\"add\",this.addRowView,this),this.rowViews=[],this.reverse=!1;for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];o.View.prototype.initialize.apply(this,t)},viewWillUnmount:function(){for(var e=void 0;e=this.collection.first();)this.collection.remove(e);this.rowViews=[]},addRowView:function(e){var t=this,n=this.$(this.rowContainer);if(!n.length&&(n=this.$el,!this.$el.is(this.rowContainer)))throw new Error(\"undefined rowContainer\");this.rowView.prototype.container=n,this.reverse?this.rowView.prototype.prepend=!0:this.rowView.prototype.append=!0;var r=new this.rowView(e);this.rowViews.push(r),e.on(\"remove\",function(){t.rowViews.splice(t.rowViews.indexOf(r),1),r.close()},r),e.on(\"change\",function(e){r.setModel(e.toJSON()),r.updateView()},r),a.forEach(function(e){return r.on(e,t[\"on\"+e.charAt(0).toUpperCase()+e.slice(1)],t)})},reload:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"[object Object]\"!==Object.prototype.toString.call(n))throw new Error(\"invalid options!!!\");var i=n.uid,o=t.filter(function(e){return!!e}).map(function(t){if(i){var n=e.collection.findWhere(r({},i,t[i]));if(n)return n.set(t),n}return t});this.reverse=\"reverse\"in n&&n.reverse,this.collection.set(o,{remove:!(\"reset\"in n)||n.reset})},getCollection:function(){return this.rowViews.map(function(e){return e.getModel()})},onSelectedRow:function(){this.log(\"selectedRow\")},onSelectedCell:function(){this.log(\"selectedCell\")},onAction:function(){this.log(\"onAction\")},onClose:function(){this.rowViews.forEach(function(e){return e.close()})}}),u.create=function(e,t){var n=u.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return c||(c=e),u}},function(e,t){\"use strict\";e.exports={SELECTED_ROW:\"selectedRow\",SELECTED_CELL:\"selectedCell\"}},function(e,t,n){\"use strict\";var r=n(1),i=n(30),o=void 0,s=void 0;o=r.View.create(\"ItemView\",{events:{click:\"_onSelectedRow\"},super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];o.prototype.initialize.apply(this,t)},initialize:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];r.View.prototype.initialize.apply(this,t)},_onSelectedRow:function(e){this.onSelectedRow&&\"function\"==typeof this.onSelectedRow&&this.onSelectedRow(e,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.trigger.apply(this,Array.prototype.concat.call([],i.SELECTED_ROW,t))}.bind(this))},_onSelectedCell:function(e){this.onSelectedCell&&\"function\"==typeof this.onSelectedCell&&this.onSelectedRow(e,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.trigger.apply(this,Array.prototype.concat.call([],i.SELECTED_CELL,t))}.bind(this))}}),o.create=function(e,t){var n=o.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return s||(s=e),o}},function(e,t,n){\"use strict\";var r=n(1),i=void 0,o=void 0,s=1e3,a={position:\"fixed\",top:0,left:0,right:0,bottom:0,background:\"#000\",opacity:.7},u={overflowY:\"auto\",display:\"block\",position:\"absolute\",top:\"50%\",left:\"50%\",width:\"80%\",maxHeight:\"80%\",background:\"#fff\",webkitTransform:\"translate(-50%, -50%)\",transform:\"translate(-50%, -50%)\"};i=r.View.create(\"PopupView\",{overlayClassName:\"\",overlayCss:{},css:{},showOverlay:!0,useDefaultCss:!0,super:function(){i.prototype.initialize.apply(this,this.arguments)},initialize:function(){this.overlay=$(\"<div></div>\");for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];r.View.prototype.initialize.apply(this,t)},viewComponentDidMount:function(e){var t=this.getModel();if(Object.keys(t).map(function(e){switch(e){case\"css\":case\"overlayCss\":this[e]=Object.assign({},this[e],t[e]);break;case\"overlayClassName\":case\"showOverlay\":case\"useDefaultCss\":this[e]=t[e];break;case\"buttons\":var n=t.buttons;this.events||(this.events={});for(var r in n)n.hasOwnProperty(r)&&(this.events[\"click \"+r]=n[r].bind(this));this.delegateEvents()}}.bind(this)),this.showOverlay){var n=this.overlay;n.addClass(this.overlayClassName),n.css(Object.assign({zIndex:s},a,this.overlayCss)),this.$el.parent().prepend(n),s+=100,$(n).on(\"click\",function(){this.dispatch(r.Event.create(\"overlayClicked\",this))}.bind(this))}this.useDefaultCss&&e.css(u),e.css(Object.assign({zIndex:s},this.css)),s+=100}}),i.create=function(e,t){var n=i.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return o||(o=e),i}}]);"
  },
  {
    "path": "examples/modal/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/modal/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('lib', () => {\n  gulp.src(['node_modules/bootstrap/dist/**/*'])\n    .pipe($.size({ title : 'lib:js/css folder structure' }))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')));\n});\n\ngulp.task('styles', () => {\n  gulp.src('sass/**/*.scss')\n    .pipe($.sass().on('error', $.sass.logError))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'css')));\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'lib', 'styles', 'html']));\n"
  },
  {
    "path": "examples/modal/hello-view.js",
    "content": "import Woowahan from '../../index';\n\nexport default Woowahan.View.create('Hello', {\n  template: `<h1>Hello, WoowahanJs</h1>\n    <button id=\"btn-modal-normal\">NORMAL</button>\n    <button id=\"btn-modal-bootstrap\">BOOTSTRAP</button>\n    <div id=\"modal-wrap\"></div>`,\n\n  events: {\n    'click #btn-modal-normal': 'onClickModalNormal',\n    'click #btn-modal-bootstrap': 'onClickModalBootstrap',\n    '@closed #modal-wrap': 'onCloseModal',\n    '@updated #modal-wrap': 'onUpdateModal'\n  },\n\n  initialize() {\n    this.modalNormal = null;\n    this.modalBootstrap = null;\n\n    this.super();\n  },\n\n  onClickModalNormal() {\n    if (!!this.modalNormal) return;\n\n    this.onCloseModal();\n\n    const ModalViewNormal = this.getComponent('ModalComponentNormal');\n\n    this.modalNormal = this.addView('#modal-wrap', ModalViewNormal, { label: '팝업 컨테이너에 추가' });\n  },\n\n  onClickModalBootstrap() {\n    if (!!this.modalBootstrap) return;\n\n    this.onCloseModal();\n\n    const ModalViewBootstrap = this.getComponent('ModalComponentBootstrap');\n\n    this.modalBootstrap = this.addView('#modal-wrap', ModalViewBootstrap);\n\n    this.modalBootstrap.show();\n  },\n\n  onUpdateModal(count) {\n    this.updateView('#modal-wrap', { count: ++count });\n  },\n\n  onCloseModal() {\n    if (!!this.modalNormal || !!this.modalBootstrap) {\n      this.removeView('#modal-wrap');\n\n      this.modalNormal = null;\n      this.modalBootstrap = null;\n    }\n  }\n\n});\n"
  },
  {
    "path": "examples/modal/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <link rel=\"stylesheet\" href=\"/css/bootstrap.min.css\">\n    <link rel=\"stylesheet\" href=\"/css/main.css\">\n    <script src=\"/js/bundle.js\"></script>\n    <script src=\"/js/bootstrap.min.js\"></script>\n</head>\n<body>\n  <div id=\"content\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/modal/main.js",
    "content": "import Woowahan from '../../index';\nimport HelloView from './hello-view';\nimport ModalViewNormal from './view/modal-view-normal/modal-view-normal';\nimport ModalViewBootstrap from './view/modal-view-bootstrap/modal-view-bootstrap'\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nvar app = new Woowahan();\n\napp.use(Woowahan.Component('ModalComponentNormal', ModalViewNormal));\napp.use(Woowahan.Component('ModalComponentBootstrap', ModalViewBootstrap));\n\napp.start({\n  url: '/',\n  container: '#content',\n  view: HelloView\n});"
  },
  {
    "path": "examples/modal/package.json",
    "content": "{\n  \"name\": \"helloworld\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {\n    \"bootstrap\": \"^3.3.7\",\n    \"lodash\": \"^4.17.0\"\n  }\n}\n"
  },
  {
    "path": "examples/modal/sass/main.scss",
    "content": "html, body {\n  margin: 0; padding: 0;\n}\n\n.modal-overlay {\n  position:fixed;\n  top:0;\n  left:0;\n  right:0;\n  bottom:0;\n  background:#000;\n  opacity:0;\n  -webkit-transition:opacity 0.3s ease;\n  transition:opacity 0.3s ease;\n  &.on {\n    opacity:0.7;\n  }\n}\n\n.modal-box {\n  overflow-y:scroll;\n  position:absolute;\n  top:50%;\n  left:50%;\n  width:80%;\n  max-height:80%;\n  background:#fff;\n  -webkit-transform:translate(-50%,-75%);\n  transform:translate(-50%,-75%);\n  z-index:1000;\n  -webkit-transition:transform 0.3s ease, opacity 0.3s ease;\n  transition:transform 0.3s ease, opacity 0.3s ease;\n  opacity:0;\n  &.on {\n    -webkit-transform:translate(-50%,-50%);\n    transform:translate(-50%,-50%);\n    opacity:1;\n  }\n}\n\n.modal-box.sticky {\n  top:0;\n  -webkit-transform:translate(-50%,-100%);\n  transform:translate(-50%,-100%);\n  &.on {\n    -webkit-transform:translate(-50%,0);\n    transform:translate(-50%,0);\n  }\n}\n\n.modal-box.slidein {\n  left:100%;\n  -webkit-transform:translate(0,-50%);\n  transform:translate(0,-50%);\n  -webkit-transition: left 0.3s ease;\n  transition: left 0.3s ease;\n  &.on {\n    left:50%;\n    -webkit-transform:translate(-50%,-50%);\n    transform:translate(-50%,-50%);\n  }\n}\n\n.modal-box.slideup {\n  -webkit-transform:translate(-50%,100%);\n  transform:translate(-50%,100%);\n  &.on {\n    -webkit-transform:translate(-50%,-50%);\n    transform:translate(-50%,-50%);\n  }\n}\n\n.modal-box.scale {\n  -webkit-transform:translate(-50%,-50%) scale(0.5);\n  transform:translate(-50%,-50%) scale(0.5);\n  -webkit-transition:transform 0.3s ease;\n  transition:transform 0.3s ease;\n  &.on {\n    -webkit-transform:translate(-50%,-50%) scale(1);\n    transform:translate(-50%,-50%) scale(1);\n  }\n}"
  },
  {
    "path": "examples/modal/view/modal-view-bootstrap/modal-view-bootstrap.hbs",
    "content": "<div id=\"myModal\" class=\"modal fade\" role=\"dialog\">\n    <div class=\"modal-dialog\">\n\n        <!-- Modal content-->\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\">&times;</button>\n                <h4 class=\"modal-title\">Modal Header</h4>\n            </div>\n            <div class=\"modal-body\">\n                <ul class=\"nav nav-tabs\" id=\"tabs\">\n                    <li class=\"active\"><a href=\"#tab01\">Home</a></li>\n                    <li><a href=\"#tab02\">Profile</a></li>\n                    <li><a href=\"#tab03\">Messages</a></li>\n                </ul>\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane active\" id=\"tab01\">\n                        <table class=\"table table-bordered\">\n                            <thead class=\"thead-default\">\n                            <tr>\n                                <th>업소명</th>\n                                <th>업소번호</th>\n                                <th>상호명</th>\n                                <th>통화수</th>\n                            </tr>\n                            </thead>\n                            <tbody>\n                            <tr>\n                                <td>맥도날드</td>\n                                <td>54321</td>\n                                <td>맥도날드 제주도점</td>\n                                <td>1358</td>\n                            </tr>\n                            <tr>\n                                <td>맥도날드</td>\n                                <td>54321</td>\n                                <td>맥도날드 제주도점</td>\n                                <td>1358</td>\n                            </tr>\n                            <tr>\n                                <td>맥도날드</td>\n                                <td>54321</td>\n                                <td>맥도날드 제주도점</td>\n                                <td>1358</td>\n                            </tr>\n                            <tr>\n                                <td>맥도날드</td>\n                                <td>54321</td>\n                                <td>맥도날드 제주도점</td>\n                                <td>1358</td>\n                            </tr>\n                            <tr>\n                                <td>맥도날드</td>\n                                <td>54321</td>\n                                <td>맥도날드 제주도점</td>\n                                <td>1358</td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </div>\n                    <div class=\"tab-pane\" id=\"tab02\">\n                        <p>탭 컨텐츠 2</p>\n                    </div>\n                    <div class=\"tab-pane\" id=\"tab03\">\n                        <p>탭 컨텐츠 3</p>\n                    </div>\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-default btn-close\">Close</button>\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "examples/modal/view/modal-view-bootstrap/modal-view-bootstrap.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './modal-view-bootstrap.hbs';\n\nexport default Woowahan.View.create('ModalViewBootstrap', {\n  tagName: 'div',\n  template: Template,\n\n  events: {\n    'click #tabs a': 'onClickTab',\n    'click .btn-close': 'onClickClose'\n  },\n\n  initialize() {\n    this.modal = null;\n\n    this.super();\n  },\n\n  show() {\n    if (!!this.modal) return;\n\n    this.modal = this.$el.find('#myModal');\n\n    this.modal.modal('show');\n\n    this.modal.on('hidden.bs.modal', _.bind(this.onHideModal, this));\n  },\n\n  onClickTab(event) {\n    $(event.currentTarget).tab('show');\n\n    return false;\n  },\n\n  onClickClose() {\n    this.modal.modal('hide');\n\n    return false;\n  },\n\n  onHideModal() {\n    if (!!this.modal) {\n      this.modal.off('hidden.bs.modal', '**');\n\n      this.modal = null;\n\n      this.dispatch(Woowahan.Event.create('closed'));\n    }\n  }\n});"
  },
  {
    "path": "examples/modal/view/modal-view-normal/modal-view-normal.hbs",
    "content": "<div class=\"modal-overlay\"></div>\n<div class=\"modal-box\">\n<!--<div class=\"modal-box sticky\">-->\n<!--<div class=\"modal-box slidein\">-->\n<!--<div class=\"modal-box slideup\">-->\n<!--<div class=\"modal-box scale\">-->\n  <h1>modal view</h1>\n  <p data-role=\"bind\" data-name=\"label\"></p>\n  <p data-role=\"bind\" data-name=\"count\"></p>\n  <div>\n    <button id=\"btn-close\">닫기</button>\n    <button id=\"btn-update\">업데이트</button>\n  </div>\n</div>\n"
  },
  {
    "path": "examples/modal/view/modal-view-normal/modal-view-normal.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './modal-view-normal.hbs';\n\nexport default Woowahan.View.create('ModalViewNormal', {\n  template: Template,\n\n  events: {\n    'click #btn-close': 'onClickClose',\n    'click #btn-update': 'onUpdateCount',\n    'click .modal-overlay': 'onClickClose'\n  },\n\n  initialize(data) {\n    data.count = 0;\n\n    this.setModel(data);\n\n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    renderData.count = renderData.count + ' 번 업데이트';\n\n    return renderData;\n  },\n\n  viewDidMount() {\n    setTimeout(function() {\n      $('.modal-overlay, .modal-box').addClass('on');\n    }, 300);\n  },\n\n  onUpdateCount() {\n    const count = this.getModel('count');\n\n    this.setModel({ count: count + 1 });\n  },\n\n  onClickClose() {\n    this.dispatch(Woowahan.Event.create('closed'));\n  }\n});"
  },
  {
    "path": "examples/modal/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/plugin/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/plugin/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'html']));\n"
  },
  {
    "path": "examples/plugin/hello-view.js",
    "content": "import Woowahan from '../../index';\n\nexport default Woowahan.View.create('Hello', {\n  template: '<h1>Hello, WoowahanJs</h1>' +\n    '<ul data-role=\"plugin\" data-plugins=\"listData => list\"></ul>' +\n    '<ul data-role=\"bind\" data-name=\"listData\" data-type=\"list\"></ul>',\n\n  initialize() {\n    this.setModel({\n      listData: [\n        { label: 'test1', value: 'val1'},\n        { label: 'test2', value: 'val2'},\n        { label: 'test3', value: 'val3'},\n        { label: 'test4', value: 'val4'},\n        { label: 'test5', value: 'val5'},\n        { label: 'test6', value: 'val6'}\n      ]\n    });\n\n    this.super();\n  }\n});"
  },
  {
    "path": "examples/plugin/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n  <div id=\"content\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/plugin/main.js",
    "content": "import Woowahan from '../../index';\nimport HelloView from './hello-view';\nimport ListPlugin from './plugin/list';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nvar app = new Woowahan();\n\napp.use(Woowahan.Plugin('list', ListPlugin));\n\napp.start({\n  url: '/',\n  container: '#content',\n  view: HelloView\n});"
  },
  {
    "path": "examples/plugin/package.json",
    "content": "{\n  \"name\": \"helloworld\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {}\n}\n"
  },
  {
    "path": "examples/plugin/plugin/list.js",
    "content": "module.exports = function(element, value) {\n  let domStr = '';\n\n  for (const item of value) {\n    domStr += `<li data-target=\"${item.value}\">${item.label}</li>`;\n  }\n\n  $(element).html(domStr);\n};"
  },
  {
    "path": "examples/plugin/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' }\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/popup/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/popup/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\n// TODO: style을 Woowahan 내재화\ngulp.task('styles', () => {\n  gulp.src('scss/**/*.scss')\n    .pipe($.sass().on('error', $.sass.logError))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'css')));\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'styles', 'html']));\n"
  },
  {
    "path": "examples/popup/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <!--<link rel=\"stylesheet\" href=\"/css/main.css\"/>-->\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n  <div id=\"content\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/popup/main.js",
    "content": "import Woowahan from '../../index';\nimport { MainLayout } from './view/layout/main-layout';\nimport { BaseView } from './view/component';\n\nimport Debug from 'debug';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nDebug.enable('*');\n\nvar app = new Woowahan();\n\napp.use(Woowahan.Layout('#content', MainLayout));\n\napp.start([\n  { url: '/', container: '#mainContent', view: BaseView, layout: 'MainLayout' }\n]);"
  },
  {
    "path": "examples/popup/package.json",
    "content": "{\n  \"name\": \"transition\",\n  \"version\": \"1.0.0\",\n  \"description\": \"transition example\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {}\n}\n"
  },
  {
    "path": "examples/popup/scss/main.scss",
    "content": "html, body {\n  margin: 0; padding: 0;\n}\n\n.modal-overlay {\n  position:fixed;\n  top:0;\n  left:0;\n  right:0;\n  bottom:0;\n  background:#000;\n  opacity:0.7;\n}\n\n.modal-box {\n  overflow-y:scroll;\n  display:block;\n  position:absolute;\n  top:50%;\n  left:50%;\n  width:80%;\n  max-height:80%;\n  background:#fff;\n  -webkit-transform:translate(-50%,-50%);\n  transform:translate(-50%,-50%);\n  z-index:1000;\n}\n"
  },
  {
    "path": "examples/popup/view/component/alert-view.hbs",
    "content": "<div style=\"text-align: right; padding: 10px\">\n  <button data-ref=\"btnClose\">X</button>\n</div>\n<div style=\"text-align: center\">\n  <h1 data-role=\"bind\" data-name=\"title\"></h1>\n  <p data-role=\"bind\" data-name=\"desc\"></p>\n</div>"
  },
  {
    "path": "examples/popup/view/component/alert-view.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './alert-view.hbs';\n\nexport const AlertView = Woowahan.PopupView.create('AlertView', {\n  template: Template\n});"
  },
  {
    "path": "examples/popup/view/component/base-view.hbs",
    "content": "<div>\n  <h1>this is base view</h1>\n  <div>\n    <button data-ref=\"btnPopup\">ADD POPUP</button>\n  </div>\n  <div>\n    <p data-ref=\"txtResult\">팝업에서 텍스트를 입력하세요.</p>\n  </div>\n</div>"
  },
  {
    "path": "examples/popup/view/component/base-view.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './base-view.hbs';\nimport { PopupView } from './popup-view';\n\nexport const BaseView = Woowahan.View.create('BaseView', {\n  template: Template,\n\n  events: {\n    'click button[data-ref=btnPopup]': 'onClickPopup'\n  },\n\n  onClickPopup() {\n    this.refs.txtResult.innerText = '텍스트를 입력하세요.';\n\n    this.addPopup(PopupView, { title: '입력해 주세요.' }, function(popupData = {}) {\n      if (popupData.action === 'submit') {\n        const data = popupData.data;\n        const result = Object.keys(data).reduce((prev, key) => ((!!data[key] ? prev.push(data[key]) : prev), prev), []);\n\n        if (!!result.length) {\n          this.refs.txtResult.innerText = `입력된 결과는 ${result.join(', ')}입니다.`;\n        } else {\n          this.refs.txtResult.innerText = '입력된 텍스트가 없습니다.';\n        }\n      } else {\n        this.refs.txtResult.innerText = '입력이 취소되었습니다.';\n      }\n    });\n  }\n});"
  },
  {
    "path": "examples/popup/view/component/index.js",
    "content": "export * from './base-view';\nexport * from './popup-view';"
  },
  {
    "path": "examples/popup/view/component/popup-view.hbs",
    "content": "<div data-role=\"bind\" data-name=\"title\"></div>\n<form name=\"popup-form\" data-ref=\"popupForm\"  data-ref-form-restore=\"true\">\n  <div>\n    <input name=\"txt0\" data-ref=\"txt0\" type=\"text\" />\n    <input name=\"txt1\" data-ref=\"txt1\" type=\"text\" />\n    <input name=\"txt2\" data-ref=\"txt2\" type=\"text\" />\n  </div>\n  <div>\n    <button type=\"submit\" data-ref=\"btnSubmit\">Submit</button>\n    <button type=\"button\" data-ref=\"btnCancel\">Cancel</button>\n  </div>\n</form>"
  },
  {
    "path": "examples/popup/view/component/popup-view.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './popup-view.hbs';\nimport { AlertView } from './alert-view';\n\nexport const PopupView = Woowahan.PopupView.create('PopupView', {\n  template: Template,\n\n  events: {\n    'click button[data-ref=btnCancel]': 'onClickCancel',\n    '@submit form[name=popup-form]': 'onSubmitForm'\n  },\n\n  viewDidMount($el) {\n    $el.css({ width: 420, height: 80, overflow: 'hidden' });\n  },\n\n  onSubmitForm(data) {\n    if (!data.txt0 || !data.txt1 || !data.txt2) {\n      this.addPopup(AlertView, {\n        _id: 'alert',\n        css: {\n          width: '300px', height: '200px'\n        },\n        title: '경고',\n        desc: '입력해주세요.',\n        buttons: {\n          'button[data-ref=btnClose]': function() {\n            this.closePopup();\n\n            return false;\n          }\n        }\n      });\n\n      return false;\n    }\n\n    this.closePopup({ action: 'submit', data });\n\n    return false;\n  },\n\n  onClickCancel() {\n    this.closePopup();\n\n    return false;\n  },\n\n  onOverlayClick(event) {\n    console.log(event);\n  }\n});"
  },
  {
    "path": "examples/popup/view/layout/main-layout.hbs",
    "content": "<div>\n  <h1>This is MainLayout</h1>\n  <div id=\"mainContent\">\n  </div>\n</div>"
  },
  {
    "path": "examples/popup/view/layout/main-layout.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './main-layout.hbs';\n\nexport const MainLayout = Woowahan.View.create('MainLayout', {\n  template: Template,\n});"
  },
  {
    "path": "examples/popup/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/route/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/route/action/index.js",
    "content": "export const DISPATCH_ACTION = 'DISPATCH_ACTION';"
  },
  {
    "path": "examples/route/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('styles', () => {\n  gulp.src('sass/**/*.scss')\n    .pipe($.sass().on('error', $.sass.logError))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'css')));\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'styles', 'html']));\n"
  },
  {
    "path": "examples/route/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <style>\n        .big { font-size: 50px; }\n    </style>\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n<div class=\"wrap\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/route/main.js",
    "content": "import Woowahan from '../../index';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nglobal.log = function(log, color) {\n  console.log(`%c${log}`, `color: ${color}`);\n};\n\nimport {\n  MainView,\n  LayoutView1, LayoutView2, LayoutView3,\n  MainView1, MainView2, MainView3, \n  ContentView1, ContentView2, ContentView3,\n  SubContentView1, SubContentView2 } from './view/';\nimport { DISPATCH_ACTION } from './action';\n\nimport {\n  AppMiddlewarePre,  AppMiddleware,\n  ViewMiddleware,\n  ReducerMiddlewarePre, ReducerMiddleware,\n  RouterMiddlewarePre, RouterMiddleware } from './middleware';\n\nconst app = new Woowahan();\n\napp.set(AppMiddlewarePre);\napp.set(AppMiddleware, 'test');\napp.set(ViewMiddleware, 'test');\napp.set(ReducerMiddlewarePre);\napp.set(ReducerMiddleware, 'test');\napp.set(RouterMiddlewarePre);\napp.set(RouterMiddleware, 'test');\n\n/* layout 생성 & 등록 */\napp.use(Woowahan.Layout('.wrap', LayoutView1));\napp.use(Woowahan.Layout('.wrap', LayoutView2));\napp.use(Woowahan.Layout('.wrap', LayoutView3, { update: false }));\n\napp.use(Woowahan.Store.create({ test: 'test' }));\n\napp.use(Woowahan.Reducer.create(DISPATCH_ACTION, function() {\n  this.onSuccess = function(res) {\n    this.finish(res);\n  };\n\n  this.getData('https://jsonplaceholder.typicode.com/posts');\n}));\n\n/* 사이트맵 디자인 */\nconst siteDesign = [\n  { url: '/', view: MainView, container: '.wrap' },\n  { url: '/layout1', view: MainView1, container: '#content', layout: 'LayoutView1', routeName: 'Layout1', routeData: { route: 'good' }, pages: [\n    { url: 'content1', view: ContentView1, routeName: 'Layout1Content1', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout1Content1Sub1' },\n      { url: ':sub2', view: SubContentView2, routeName: 'Layout1Content1Sub2' }\n    ] },\n    { url: 'content2', view: ContentView2, routeName: 'Layout1Content2', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout1Content2Sub1' },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout1Content2Sub2' }\n    ]  },\n    { url: 'content3', view: ContentView3, routeName: 'Layout1Content3', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout1Content3Sub1' },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout1Content3Sub2' }\n    ]  }\n  ] },\n  { url: '/layout2', view: MainView2, container: '#content', layout: 'LayoutView2', routeName: 'Layout2', pages: [\n    { url: 'content1', view: ContentView1, routeName: 'Layout2Content1', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout2Content1Sub1' },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout2Content1Sub2' }\n    ]  },\n    { url: 'content2', view: ContentView2, routeName: 'Layout2Content2', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout2Content2Sub1' },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout2Content2Sub2' }\n    ]  },\n    { url: 'content3', view: ContentView3, routeName: 'Layout2Content3', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout2Content3Sub1' },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout2Content3Sub2' }\n    ]  }\n  ] },\n  { url: '/layout3', view: MainView3, container: '#content', layout: 'LayoutView3', routeName: 'Layout3', pages: [\n    { url: 'content1', view: ContentView1, routeName: 'Layout3Content1', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout3Content1Sub1' },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout3Content1Sub2' }\n    ]  },\n    { url: 'content2', view: ContentView2, routeName: 'Layout3Content2', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout3Content2Sub1' },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout3Content2Sub2' }\n    ]  },\n    { url: 'content3', view: ContentView3, routeName: 'Layout3Content3', pages: [\n      { url: 'sub1', view: SubContentView1, routeName: 'Layout3Content3Sub1', empty: true },\n      { url: 'sub2', view: SubContentView2, routeName: 'Layout3Content3Sub2' }\n    ]  }\n  ] },\n];\n\n/* 사이트 옵션 */\nconst siteOption = { empty: page => { alert(`${page}는 없는 페이지!!`); } };\n\n/* 웹앱 시작 */\napp.start(siteDesign, siteOption);"
  },
  {
    "path": "examples/route/middleware/index.js",
    "content": "export const AppMiddlewarePre = function() {\n  this.mwtype = 'app';\n  this.testVal = 'testVal';\n\n  this.before = function(app) {\n    log('[AppMiddlewarePre] before called', 'red');\n\n    if (this.testVal !== 'testVal') throw new Error('AppMiddlewarePre before context error');\n\n    this.testVal = 'testVal2';\n  };\n\n  this.after = function(app) {\n    log('[AppMiddlewarePre] after called', 'red');\n\n    if (this.testVal !== 'testVal2') throw new Error('AppMiddlewarePre after context error');\n\n    log(this.testVal, 'red');\n\n    app.setStates({ test: 'test' });\n  };\n};\n\nexport const AppMiddleware = function(test) {\n  this.mwtype = 'app';\n\n  if (test !== 'test') throw new Error('AppMiddleware 인자 에러');\n\n  this.before = function(app, next) {\n    log('[AppMiddleware] before called', 'red');\n\n    if (typeof app !== 'object' || typeof next !== 'function') throw new Error('AppMiddleware before 인자 에러');\n    if (Backbone.History.started) throw new Error('AppMiddleware before 발동 시점 에러');\n\n    const state = app.getStates('test');\n\n    if (state !== 'test') throw new Error('AppMiddleware before app 인자 에러');\n\n    app.beforeTested = false;\n\n    setTimeout(function() {\n      app.beforeTested = true;\n\n      next();\n    }, 1000);\n  };\n\n  this.after = function(app, next) {\n    log('[AppMiddleware] after called', 'red');\n\n    if (typeof app !== 'object' || typeof next !== 'function') throw new Error('AppMiddleware after 인자 에러');\n    if (!app.beforeTested) throw new Error('AppMiddleware after 발동 시점 에러');\n\n    next();\n  };\n};\n\nexport const ViewMiddleware = function(test) {\n  this.mwtype = 'view';\n\n  if (test !== 'test') throw new Error('ViewMiddleware 인자 에러');\n\n  this.before = function(view, next) {\n    log('[ViewMiddleware] before called', 'orange');\n\n    if (typeof view !== 'object' || typeof next !== 'function') throw new Error('ViewMiddleware before 인자 에러');\n\n    next();\n  };\n\n  this.after = function(view, next) {\n    log('[ViewMiddleware] after called', 'orange');\n\n    if (typeof view !== 'object' || typeof next !== 'function') throw new Error('ViewMiddleware after 인자 에러');\n    if (view.$el.html() === '') throw new Error('ViewMiddleware after 발동 시점 에러');\n\n    view.$el.append('<p>ViewMiddleware add this text.</p>');\n    next();\n  };\n\n  this.unmount = function(view, next) {\n    log('[ViewMiddleware] unmount called', 'orange');\n\n    if (typeof view !== 'object' || typeof next !== 'function') throw new Error('ViewMiddleware unmout 인자 에러');\n    if (view.$el.html() === '') throw new Error('ViewMiddleware unmount 발동 시점 에러');\n\n    setTimeout(function() {\n      if (!view || view.$el.html() === '') throw new Error('ViewMiddleware unmount 발동 시점 에러');\n\n      next();\n    }, 1000);\n  };\n};\n\nexport const ReducerMiddlewarePre = function() {\n  this.mwtype = 'reducer';\n\n  this.before = function(settings) {\n    log('[ReducerMiddlewarePre] before called', 'blue');\n\n    settings.timeout = 5000000;\n  };\n};\n\nexport const ReducerMiddleware = function(test) {\n  this.mwtype = 'reducer';\n\n  if (test !== 'test') throw new Error('ReducerMiddleware 인자 에러');\n\n  this.before = function(settings, app, next) {\n    log('[ReducerMiddleware] before called', 'blue');\n\n    if (typeof app !== 'object' || typeof next !== 'function') throw new Error('ReducerMiddleware before 인자 에러');\n    if (settings.timeout !== 5000000) throw new Error('ReducerMiddleware before 인자 에러');\n\n    next();\n  };\n\n  this.after = function(app, next) {\n    log('[ReducerMiddleware] after called', 'blue');\n\n    if (typeof app !== 'object' || typeof next !== 'function') throw new Error('ReducerMiddleware after 인자 에러');\n\n    next();\n  };\n};\n\nexport const RouterMiddlewarePre = function() {\n  this.mwtype = 'router';\n\n  this.before = function(route, app) {\n    if (route.empty) {\n      alert('준비 중입니다.');\n\n      window.location.hash = app.getRouteTables()['Layout1']();\n    }\n\n    log('[RouterMiddlewarePre] before called', 'green');\n  };\n\n  this.after = function(route, app) {\n    log('[RouterMiddlewarePre] after called', 'green');\n  };\n};\n\nexport const RouterMiddleware = function(test) {\n  this.mwtype = 'router';\n\n  if (test !== 'test') throw new Error('RouterMiddleware 인자 에러');\n\n  this.before = function(route, app, next) {\n    log('[RouterMiddleware] before called', 'green');\n\n    if (typeof app !== 'object' || typeof next !== 'function') throw new Error('RouterMiddleware before 인자 에러');\n    if (route.url === 'layout1' && route.routeData.route !== 'good') throw new Error('RouterMiddleware before 인자 에러');\n\n    next();\n  };\n\n  this.after = function(route, app, next) {\n    log('[RouterMiddleware] after called', 'green');\n\n    if (typeof app !== 'object' || typeof next !== 'function') throw new Error('RouterMiddleware after 인자 에러');\n\n    next();\n  };\n};"
  },
  {
    "path": "examples/route/package.json",
    "content": "{\n  \"name\": \"route\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^7.1.2\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.5\",\n    \"handlebars-loader\": \"^1.3.0\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^4.0.0\"\n  }\n}\n"
  },
  {
    "path": "examples/route/sass/main.scss",
    "content": "html, body {\n  margin: 0; padding: 0;\n  height: 100%;\n}\n\n.rect {\n  width: 100%; height: 100%;\n}\n\n.white {\n  @extend .rect;\n  background-color: white;\n},\n\n.red {\n  @extend .rect;\n  background-color: red;\n},\n\n.blue {\n  @extend .rect;\n  background-color: blue;\n}"
  },
  {
    "path": "examples/route/template/main.hbs",
    "content": "<h1>메인 페이지</h1>\n<ul>\n    <li><a href=\"/\">메인 페이지</a></li>\n    <li><a href=\"#sub1\">서브 1페이지</a></li>\n    <li><a href=\"#sub2\">서브 2페이지</a></li>\n</ul>\n"
  },
  {
    "path": "examples/route/template/sub1.hbs",
    "content": "<h1>서브 1 페이지</h1>\n<ul>\n    <li><a href=\"/\">메인 페이지</a></li>\n    <li><a href=\"#sub1\">서브 1페이지</a></li>\n    <li><a href=\"#sub2\">서브 2페이지</a></li>\n</ul>"
  },
  {
    "path": "examples/route/template/sub2-2.hbs",
    "content": "<h3>서브 2-2 컨텐츠</h3>"
  },
  {
    "path": "examples/route/template/sub2.hbs",
    "content": "<h1>서브 2 페이지</h1>\n<div class=\"content\"></div>\n<ul>\n    <li><a href=\"/\">메인 페이지</a></li>\n    <li><a href=\"#sub1\">서브 1페이지</a></li>\n    <li>\n        <a href=\"#sub2\">서브 2페이지</a>\n        <ul>\n            <li><a href=\"#sub2_2\">서브 2-2페이지</a></li>\n        </ul>\n    </li>\n</ul>"
  },
  {
    "path": "examples/route/view/child.js",
    "content": "import Woowahan from '../../../index';\nimport SubChildView from './sub-child';\n\nexport default Woowahan.View.create('ChildView', {\n  template: `<p>Child View</p><div id=\"sub-child-container\"></div>`,\n\n  viewDidMount() {\n    this.addView('#sub-child-container', SubChildView);\n  }\n});"
  },
  {
    "path": "examples/route/view/content1.hbs",
    "content": "<h2>콘텐츠 1</h2>\n<p>첫번째 콘텐츠입니다.</p>\n<p>{{text}}</p>\n<div id=\"child-container\"></div>"
  },
  {
    "path": "examples/route/view/content1.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './content1.hbs';\nimport ChildView from './child';\n\nexport default Woowahan.View.create('ContentView1', {\n  className: 'big',\n  template: Template,\n\n  events: {\n    'click': 'onClick'\n  },\n  \n  initialize() {\n    this.setModel({\n      text: 'init'\n    });\n    \n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    renderData.text += ' & mount';\n    \n    return renderData;\n  },\n\n  viewDidMount(el) {\n    el.find('p').css('color', 'red');\n\n    this.addView('#child-container', ChildView);\n  },\n\n  viewWillUnmount() {\n    console.log('content1 unmount');\n  },\n\n  onClick() {\n    // alert('click');\n\n    this.updateView('#child-container', ChildView);\n  }\n});"
  },
  {
    "path": "examples/route/view/content2.hbs",
    "content": "<h2>콘텐츠 2</h2>\n<p>두번째 콘텐츠입니다.</p>\n<button class=\"btn-dispatch\">dispatch</button>"
  },
  {
    "path": "examples/route/view/content2.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './content2.hbs';\nimport { DISPATCH_ACTION } from '../action';\n\nexport default Woowahan.View.create('ContentView2', {\n  template: Template,\n\n  events: {\n    'click .btn-dispatch': 'onClickDispatch'\n  },\n\n  onClickDispatch() {\n    this.dispatch(Woowahan.Action.create(DISPATCH_ACTION), function(data) {\n      console.log(data);\n    });\n  }\n});"
  },
  {
    "path": "examples/route/view/content3.hbs",
    "content": "<h2>콘텐츠 3</h2>\n<p>세번째 콘텐츠입니다.</p>"
  },
  {
    "path": "examples/route/view/content3.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './content3.hbs';\n\nexport default Woowahan.View.create('ContentView3', {\n  template: Template,\n\n  initialize() {\n    this.super();\n  }\n});"
  },
  {
    "path": "examples/route/view/index.js",
    "content": "import LayoutView1 from './layout1';\nimport LayoutView2 from './layout2';\nimport LayoutView3 from './layout3';\n\nimport MainView from './main';\n\nimport MainView1 from './main1';\nimport MainView2 from './main2';\nimport MainView3 from './main3';\n\nimport ContentView1 from './content1';\nimport ContentView2 from './content2';\nimport ContentView3 from './content3';\n\nimport SubContentView1 from './sub-content1';\nimport SubContentView2 from './sub-content2';\n\nexport {\n  LayoutView1, LayoutView2, LayoutView3,\n  MainView,\n  MainView1, MainView2, MainView3,\n  ContentView1, ContentView2, ContentView3,\n  SubContentView1, SubContentView2\n};"
  },
  {
    "path": "examples/route/view/layout1.hbs",
    "content": "<h1>레이아웃 뷰 1</h1>\n{{#with links}}\n<ul>\n  <li>\n    <a href=\"{{Layout1Link}}\">레이아웃 뷰 1</a>\n    <ul>\n      <li><a href=\"{{Layout1Content1Link}}\">콘텐츠 뷰 1</a></li>\n      <ul>\n        <li><a href=\"{{Layout1Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout1Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n      <li><a href=\"{{Layout1Content2Link}}\">콘텐츠 뷰 2</a></li>\n      <ul>\n        <li><a href=\"{{Layout1Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout1Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n      <li><a href=\"{{Layout1Content3Link}}\">콘텐츠 뷰 3</a></li>\n      <ul>\n        <li><a href=\"{{Layout1Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout1Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n    </ul>\n  </li>\n  <li>\n    <a href=\"{{Layout2Link}}\">레이아웃 뷰 2</a>\n    <ul>\n      <li><a href=\"{{Layout2Content1Link}}\">콘텐츠 뷰 1</a></li>\n      <ul>\n        <li><a href=\"{{Layout2Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout2Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n      <li><a href=\"{{Layout2Content2Link}}\">콘텐츠 뷰 2</a></li>\n      <ul>\n        <li><a href=\"{{Layout2Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout2Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n      <li><a href=\"{{Layout2Content3Link}}\">콘텐츠 뷰 3</a></li>\n      <ul>\n        <li><a href=\"{{Layout2Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout2Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n    </ul>\n  </li>\n  <li>\n    <a href=\"{{Layout3Link}}\">레이아웃 뷰 3</a>\n    <ul>\n      <li><a href=\"{{Layout3Content1Link}}\">콘텐츠 뷰 1</a></li>\n      <ul>\n        <li><a href=\"{{Layout3Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout3Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n      <li><a href=\"{{Layout3Content2Link}}\">콘텐츠 뷰 2</a></li>\n      <ul>\n        <li><a href=\"{{Layout3Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout3Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n      <li><a href=\"{{Layout3Content3Link}}\">콘텐츠 뷰 3</a></li>\n      <ul>\n        <li><a href=\"{{Layout3Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n        <li><a href=\"{{Layout3Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n      </ul>\n    </ul>\n  </li>\n</ul>\n{{/with}}\n<div id=\"content\"></div>"
  },
  {
    "path": "examples/route/view/layout1.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './layout1.hbs';\n\nexport default Woowahan.View.create('LayoutView1', {\n  template: Template,\n\n  viewWillMount(renderData) {\n    renderData.links = this.getLinks(this.getRouteTables());\n\n    return renderData;\n  },\n\n  getLinks(routeTables) {\n    return Object.keys(routeTables).reduce((a, b) => (a[`${b}Link`] = `#${routeTables[b]()}`, a), {});\n  }\n});"
  },
  {
    "path": "examples/route/view/layout2.hbs",
    "content": "<h1>레이아웃 뷰 2</h1>\n{{#with links}}\n  <ul>\n    <li>\n      <a href=\"{{Layout1Link}}\">레이아웃 뷰 1</a>\n      <ul>\n        <li><a href=\"{{Layout1Content1Link}}\">콘텐츠 뷰 1</a></li>\n        <ul>\n          <li><a href=\"{{Layout1Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout1Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout1Content2Link}}\">콘텐츠 뷰 2</a></li>\n        <ul>\n          <li><a href=\"{{Layout1Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout1Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout1Content3Link}}\">콘텐츠 뷰 3</a></li>\n        <ul>\n          <li><a href=\"{{Layout1Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout1Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n      </ul>\n    </li>\n    <li>\n      <a href=\"{{Layout2Link}}\">레이아웃 뷰 2</a>\n      <ul>\n        <li><a href=\"{{Layout2Content1Link}}\">콘텐츠 뷰 1</a></li>\n        <ul>\n          <li><a href=\"{{Layout2Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout2Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout2Content2Link}}\">콘텐츠 뷰 2</a></li>\n        <ul>\n          <li><a href=\"{{Layout2Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout2Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout2Content3Link}}\">콘텐츠 뷰 3</a></li>\n        <ul>\n          <li><a href=\"{{Layout2Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout2Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n      </ul>\n    </li>\n    <li>\n      <a href=\"{{Layout3Link}}\">레이아웃 뷰 3</a>\n      <ul>\n        <li><a href=\"{{Layout3Content1Link}}\">콘텐츠 뷰 1</a></li>\n        <ul>\n          <li><a href=\"{{Layout3Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout3Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout3Content2Link}}\">콘텐츠 뷰 2</a></li>\n        <ul>\n          <li><a href=\"{{Layout3Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout3Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout3Content3Link}}\">콘텐츠 뷰 3</a></li>\n        <ul>\n          <li><a href=\"{{Layout3Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout3Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n      </ul>\n    </li>\n  </ul>\n{{/with}}\n<div id=\"content\"></div>"
  },
  {
    "path": "examples/route/view/layout2.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './layout2.hbs';\n\nexport default Woowahan.View.create('LayoutView2', {\n  template: Template,\n\n  initialize() {\n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    renderData.links = this.getLinks(this.getRouteTables());\n\n    return renderData;\n  },\n\n  getLinks(routeTables) {\n    return Object.keys(routeTables).reduce((a, b) => (a[`${b}Link`] = `#${routeTables[b]()}`, a), {});\n  }\n});"
  },
  {
    "path": "examples/route/view/layout3.hbs",
    "content": "<h1>레이아웃 뷰 3</h1>\n{{#with links}}\n  <ul>\n    <li>\n      <a href=\"{{Layout1Link}}\">레이아웃 뷰 1</a>\n      <ul>\n        <li><a href=\"{{Layout1Content1Link}}\">콘텐츠 뷰 1</a></li>\n        <ul>\n          <li><a href=\"{{Layout1Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout1Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout1Content2Link}}\">콘텐츠 뷰 2</a></li>\n        <ul>\n          <li><a href=\"{{Layout1Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout1Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout1Content3Link}}\">콘텐츠 뷰 3</a></li>\n        <ul>\n          <li><a href=\"{{Layout1Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout1Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n      </ul>\n    </li>\n    <li>\n      <a href=\"{{Layout2Link}}\">레이아웃 뷰 2</a>\n      <ul>\n        <li><a href=\"{{Layout2Content1Link}}\">콘텐츠 뷰 1</a></li>\n        <ul>\n          <li><a href=\"{{Layout2Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout2Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout2Content2Link}}\">콘텐츠 뷰 2</a></li>\n        <ul>\n          <li><a href=\"{{Layout2Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout2Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout2Content3Link}}\">콘텐츠 뷰 3</a></li>\n        <ul>\n          <li><a href=\"{{Layout2Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout2Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n      </ul>\n    </li>\n    <li>\n      <a href=\"{{Layout3Link}}\">레이아웃 뷰 3</a>\n      <ul>\n        <li><a href=\"{{Layout3Content1Link}}\">콘텐츠 뷰 1</a></li>\n        <ul>\n          <li><a href=\"{{Layout3Content1Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout3Content1Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout3Content2Link}}\">콘텐츠 뷰 2</a></li>\n        <ul>\n          <li><a href=\"{{Layout3Content2Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout3Content2Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n        <li><a href=\"{{Layout3Content3Link}}\">콘텐츠 뷰 3</a></li>\n        <ul>\n          <li><a href=\"{{Layout3Content3Sub1Link}}\">서브 콘텐츠 뷰 1</a></li>\n          <li><a href=\"{{Layout3Content3Sub2Link}}\">서브 콘텐츠 뷰 2</a></li>\n        </ul>\n      </ul>\n    </li>\n  </ul>\n{{/with}}\n<div id=\"content\"></div>"
  },
  {
    "path": "examples/route/view/layout3.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './layout3.hbs';\n\nexport default Woowahan.View.create('LayoutView3', {\n  template: Template,\n\n  initialize() {\n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    renderData.links = this.getLinks(this.getRouteTables());\n\n    return renderData;\n  },\n\n  getLinks(routeTables) {\n    return Object.keys(routeTables).reduce((a, b) => (a[`${b}Link`] = `#${routeTables[b]()}`, a), {});\n  }\n});"
  },
  {
    "path": "examples/route/view/main.hbs",
    "content": "<h1>메인 뷰</h1>\n{{#with links}}\n<ul>\n  <li><a href=\"{{Layout1Link}}\">레이아웃 뷰 1</a></li>\n  <li><a href=\"{{Layout2Link}}\">레이아웃 뷰 2</a></li>\n  <li><a href=\"{{Layout3Link}}\">레이아웃 뷰 3</a></li>\n</ul>\n{{/with}}"
  },
  {
    "path": "examples/route/view/main.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './main.hbs';\n\nexport default Woowahan.View.create('MainView', {\n  template: Template,\n\n  initialize() {\n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    renderData.links = this.getLinks(this.getRouteTables());\n\n    return renderData;\n  },\n\n  getLinks(routeTables) {\n    return Object.keys(routeTables).reduce((a, b) => (a[`${b}Link`] = `#${routeTables[b]()}`, a), {});\n  }\n});"
  },
  {
    "path": "examples/route/view/main1.hbs",
    "content": "<h2>메인 1</h2>\n<p>첫번째 레이아웃 메인입니다.</p>\n{{#with links}}\n<ul>\n  <li><a href=\"{{Layout1Content1Link}}\">콘텐츠 뷰 1</a></li>\n  <li><a href=\"{{Layout1Content2Link}}\">콘텐츠 뷰 2</a></li>\n  <li><a href=\"{{Layout1Content3Link}}\">콘텐츠 뷰 3</a></li>\n</ul>\n{{/with}}"
  },
  {
    "path": "examples/route/view/main1.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './main1.hbs';\n\nexport default Woowahan.View.create('MainView1', {\n  template: Template,\n\n  initialize() {\n    this.setModel({ src: 'efeeefe' });\n\n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    renderData.links = this.getLinks(this.getRouteTables());\n\n    return renderData;\n  },\n\n  getLinks(routeTables) {\n    return Object.keys(routeTables).reduce((a, b) => (a[`${b}Link`] = `#${routeTables[b]()}`, a), {});\n  }\n});"
  },
  {
    "path": "examples/route/view/main2.hbs",
    "content": "<h2>메인 2</h2>\n<p>두번째 레이아웃 메인입니다.</p>\n{{#with links}}\n<ul>\n  <li><a href=\"{{Layout2Content1Link}}\">콘텐츠 뷰 1</a></li>\n  <li><a href=\"{{Layout2Content2Link}}\">콘텐츠 뷰 2</a></li>\n  <li><a href=\"{{Layout2Content3Link}}\">콘텐츠 뷰 3</a></li>\n</ul>\n{{/with}}"
  },
  {
    "path": "examples/route/view/main2.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './main2.hbs';\n\nexport default Woowahan.View.create('MainView2', {\n  template: Template,\n\n  viewWillMount(renderData) {\n    renderData.links = this.getLinks(this.getRouteTables());\n\n    return renderData;\n  },\n\n  getLinks(routeTables) {\n    return Object.keys(routeTables).reduce((a, b) => (a[`${b}Link`] = `#${routeTables[b]()}`, a), {});\n  }\n});"
  },
  {
    "path": "examples/route/view/main3.hbs",
    "content": "<h2>메인 3</h2>\n<p>세번째 레이아웃 메인입니다.</p>\n{{#with links}}\n<ul>\n  <li><a href=\"{{Layout3Content1Link}}\">콘텐츠 뷰 1</a></li>\n  <li><a href=\"{{Layout3Content2Link}}\">콘텐츠 뷰 2</a></li>\n  <li><a href=\"{{Layout3Content3Link}}\">콘텐츠 뷰 3</a></li>\n</ul>\n{{/with}}"
  },
  {
    "path": "examples/route/view/main3.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './main3.hbs';\n\nexport default Woowahan.View.create('MainView1', {\n  template: Template,\n\n  viewWillMount(renderData) {\n    renderData.links = this.getLinks(this.getRouteTables());\n\n    return renderData;\n  },\n\n  getLinks(routeTables) {\n    return Object.keys(routeTables).reduce((a, b) => (a[`${b}Link`] = `#${routeTables[b]()}`, a), {});\n  }\n});"
  },
  {
    "path": "examples/route/view/sub-child.js",
    "content": "import Woowahan from '../../../index';\n\nexport default Woowahan.View.create('ChildView', {\n  template: `<p>Sub Child View</p><button id=\"btn-test\">TEST</button>`,\n\n  events: {\n    'click #btn-test': 'onClickTest'\n  },\n\n  viewDidMount() {\n    console.log('did mount');\n  },\n\n  onClickTest() {\n    console.log('click test');\n  }\n});"
  },
  {
    "path": "examples/route/view/sub-content1.hbs",
    "content": "<h2>서브 콘텐츠 1</h2>\n<p>첫번째 서브 콘텐츠입니다.</p>"
  },
  {
    "path": "examples/route/view/sub-content1.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './sub-content1.hbs';\n\nexport default Woowahan.View.create('SubContentView1', {\n  template: Template\n});"
  },
  {
    "path": "examples/route/view/sub-content2.hbs",
    "content": "<h2>서브 콘텐츠 2</h2>\n<p>두번째 서브 콘텐츠입니다.</p>\n<button class=\"btn-update\">UpdateView</button>"
  },
  {
    "path": "examples/route/view/sub-content2.js",
    "content": "import Woowahan from '../../../index';\nimport Template from './sub-content2.hbs';\n\nexport default Woowahan.View.create('SubContentView2', {\n  template: Template,\n\n  events: {\n    'click .btn-update': 'onClickUpdate'\n  },\n\n  onClickUpdate() {\n    this.updateView();\n  }\n});"
  },
  {
    "path": "examples/route/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.hbs$/, loader: 'handlebars-loader' }\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/schema/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/schema/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('lib', () => {\n  gulp.src(['node_modules/bootstrap/dist/**/*'])\n    .pipe($.size({ title : 'lib:js/css folder structure' }))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'html', 'lib']));\n"
  },
  {
    "path": "examples/schema/hello-view.js",
    "content": "import Woowahan from '../../index';\nimport Template from './schema.hbs';\n\nexport default Woowahan.View.create('Index', {\n  className: 'container',\n  template: Template,\n  events: {\n    '@submit form': 'onSave(#id, #name, #email)'\n  },\n\n  initialize() {\n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    this.log('will mount');\n    return _.assign({}, renderData);\n  },\n\n  viewDidMount($el) {\n    this.log('did mount');\n  },\n\n  onSave(id, name, email, inputs) {\n    this.dispatch(Woowahan.Action.create('save-user-profile', {\n      id: inputs['id'],\n      name: inputs['name'],\n      email: inputs['email'],\n      valid: true\n    }), this.onCompleteSave);\n\n    return false;\n  },\n\n  onCompleteSave(data) {\n    alert('저장 완료');\n  }\n});"
  },
  {
    "path": "examples/schema/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <link rel=\"stylesheet\" href=\"/css/bootstrap.min.css\" />\n</head>\n<body>\n<div id=\"app\"></div>\n<script src=\"/js/bundle.js\"></script>\n<script src=\"/js/bootstrap.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "examples/schema/main.js",
    "content": "/*global _*/\n\nimport Woowahan from '../../index';\nimport HelloView from './hello-view';\nimport _ from 'underscore';\n\nglobal.$ = global.jQuery = Woowahan.$;\nglobal._ = _;\n\nvar app = new Woowahan();\n\nvar joinSchema = Woowahan.Schema.create('JoinSchema', {\n  id:     Woowahan.Types.String({ required: true, min: 4, max: 20 }),\n  name:   Woowahan.Types.String({ required: true, max: 30 }),\n  email:  Woowahan.Types.Email({ required: true }),\n  memo:   Woowahan.Types.String(),\n  valid:  Woowahan.Types.Boolean({ required: true })\n});\n\nvar myTask = Woowahan.Reducer.create('save-user-profile', joinSchema, function (data) {\n  this.finish(data);\n});\n\napp.use(myTask);\n\napp.on('error', errors => {\n  alert(_(errors).map(o => o.message).join('\\n'));\n});\n\napp.start({\n  url: '',\n  container: '#app',\n  view: HelloView\n});\n\n"
  },
  {
    "path": "examples/schema/package.json",
    "content": "{\n  \"name\": \"schema\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {\n    \"bootstrap\": \"^3.3.6\",\n    \"underscore\": \"^1.8.3\"\n  }\n}\n"
  },
  {
    "path": "examples/schema/schema.hbs",
    "content": "<h1>Schema Example</h1>\n\n<form>\n  <div class=\"form-group\">\n    <label for=\"id\">ID</label>\n    <input type=\"text\" class=\"form-control\" id=\"id\" name=\"id\" placeholder=\"id\">\n  </div>\n  <div class=\"form-group\">\n    <label for=\"name\">Name</label>\n    <input type=\"text\" class=\"form-control\" id=\"name\" name=\"name\" placeholder=\"Name\">\n  </div>\n  <div class=\"form-group\">\n    <label for=\"email\">Email address</label>\n    <input type=\"email\" class=\"form-control\" id=\"email\" name=\"email\" placeholder=\"Email\">\n  </div>\n\n  <button type=\"submit\" class=\"btn btn-default\" data-action=\"save\">Save</button>\n</form>"
  },
  {
    "path": "examples/schema/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\n"
  },
  {
    "path": "examples/timer/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <script type=\"text/javascript\" src=\"https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js\"></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/woowahan@0.3.0/dist/woowahan.min.js\"></script>\n    <style>\n        body {\n            margin: 2em;\n            font-family: \"Helvetica\";\n        }\n\n        #app {\n            width: 90%;\n            margin: 0 auto;\n            text-align: center;\n        }\n\n        .btn {\n            width: 5em;\n            height: 2.8em;\n            border: 1px solid gray;\n            background-color: #fff;\n            padding: 20px;\n            font-size: 2.4em;\n            font-weight: bold;\n        }\n\n        .btn:hover {\n            background-color: #00d4b4;\n            color: #fff;\n        }\n\n        .container {\n            margin-top: 100px;\n        }\n\n        time {\n            font-size: 14.8em;\n        }\n    </style>\n</head>\n<body>\n    <div id=\"app\"></div>\n    <script src=\"js/main.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "examples/timer/js/main.js",
    "content": "var app = new Woowahan();\n\nwindow.$ = window.jQuery = Woowahan.$;\n\nvar HelloView = Woowahan.View.create('HelloView', {\n  template: Handlebars.compile(\n    '<div><button class=\"btn toggle\" data-role=\"bind\" data-name=\"buttonLabel\">{{buttonLabel}}</button></div>'+\n    '<div class=\"container\"><time data-role=\"bind\" data-name=\"time\">{{time}}</time></div>'\n  ),\n\n  events: {\n    'click .btn.toggle': 'onTimerToggle'\n  },\n\n  initialize() {\n    this.startTime = 0;\n    this.updateHandle = null;\n\n    this.setModel({\n      time: this.startTime,\n      buttonLabel: 'START'\n    });\n\n    this.super();\n  },\n\n  viewWillUnmount() {\n    this.updateHandle && clearInterval(this.updateHandle);\n  },\n\n  onTimerToggle() {\n    if (this.updateHandle) this.stopTimer();\n    else this.startTimer();\n  },\n\n  stopTimer() {\n    clearInterval(this.updateHandle);\n\n    this.updateHandle = null;\n    this.setModel({ buttonLabel: 'START' });\n  },\n\n  startTimer() {\n    this.setModel({ buttonLabel: 'STOP' });\n    this.startTime = Date.now();\n\n    this.updateHandle = setInterval(() => {\n      this.setModel({ time: (Date.now() - this.startTime) / 1000 });\n    }, 1000/30);\n  }\n});\n\napp.start({\n  url: '/',\n  container: '#app',\n  view: HelloView\n});"
  },
  {
    "path": "examples/timer/js/woowahan.js",
    "content": "!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"\",t(0)}([function(e,t,n){\"use strict\";e.exports=n(1)},function(e,t,n){(function(t){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}var o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(2).format,u=n(6),c=n(9),l=n(12),f=n(13).MIDDLEWARE,h=n(13).MIDDLEWARE_PROTOCOL,p=n(13).MiddlewareRunner,d=u(\"Woowahan\"),v=1e3/60,g={get dispatch(){return y.dispatch.bind(y)},get getMiddleware(){return y.getMiddleware.bind(y)},get getStates(){return y.getStates.bind(y)},get setStates(){return y.setStates.bind(y)},get getComponent(){return y.getComponent.bind(y)},get getRouteTables(){return y.getRouteTables.bind(y)},get addAction(){return y.addAction.bind(y)},get removeAction(){return y.removeAction.bind(y)},get addError(){return y.addError.bind(y)}},y=void 0;t.__backboneAgent&&t.__backboneAgent.handleBackbone(c),c.Model.prototype.idAttribute=\"___ID_ATTR___\",c.View.prototype.viewname=\"___WOOWA_VIEW___\";var m=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),this.reducers=t.reducers||{},this.components=t.components||{},this.middlewares={app:{before:[],after:[]},router:{before:[],after:[]},reducer:{before:[],after:[]},view:{before:[],after:[],unmount:[]}},this.store=null,this.queue=[],this.actionObject={},this.queuemonitor=null,y=this,this.enableQueue()}return s(e,[{key:\"enableQueue\",value:function(){this.queuemonitor=setInterval(this.queuing.bind(this),v)}},{key:\"disableQueue\",value:function(){this.queuemonitor=clearInterval(this.queuemonitor)}},{key:\"addAction\",value:function(e){this.actionObject[e]=Date.now(),1===this.numberOfWorkAction()&&this.trigger(\"start\")}},{key:\"removeAction\",value:function(e){delete this.actionObject[e],0===this.numberOfWorkAction()&&this.trigger(\"finish\")}},{key:\"addError\",value:function(e){this.trigger(\"error\",e)}},{key:\"queuing\",value:function(){this.disableQueue();var e=this.queue.shift();if(e){var t=this.reducers[e.action.type];if(!t)throw this.enableQueue(),new Error(\"The unregistered reducer. Please check the type of action, if there is a written reducer use after registration.\");if(e.subscriber=e.subscriber||function(){},\"function\"!=typeof e.subscriber)throw this.enableQueue(),new Error(\"The listener must be a function. If you do not need the listener it may not be specified.\");if(t.schema){var n=t.schema.validate(e.action.data);n?this.trigger(\"error\",n):new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,e.action.data,e.subscriber.bind(this))))}else new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,e.action.data,e.subscriber.bind(this))))}this.enableQueue()}},{key:\"bindStore\",value:function(e){this.store=e}},{key:\"bindReducer\",value:function(e){this.reducers[e.actionName]=e}},{key:\"bindComponent\",value:function(e){this.components[e.name]=e}},{key:\"bindPlugin\",value:function(t){var n=t.type.toLowerCase();if(e.View.prototype._plugins.hasOwnProperty(n))throw new Error(\"Duplicate plugin name\");e.View.prototype._plugins[n]=t.plugin}},{key:\"combineReducer\",value:function(e){var t=this;e&&e.forEach(function(e){t.bindReducer(e)})}},{key:\"getStates\",value:function(e){return\"undefined\"!=typeof e?this.store[e]:this.store}},{key:\"setStates\",value:function(e,t){var n=void 0;n=\"string\"==typeof e&&\"undefined\"!=typeof t?r({},e,t):e,this.store||(this.store={}),Object.assign(this.store,n)}},{key:\"getMiddleware\",value:function(e,t){return this.middlewares[e][t]}},{key:\"getComponent\",value:function(e){var t=this.components[e];if(t)return t.view}},{key:\"getRouteTables\",value:function(){return l.routeTables}},{key:\"dispatch\",value:function(e,t){d(a(\"dispatch action %s\",e.type)),this.queue.push({action:e,subscriber:t})}},{key:\"use\",value:function(e){var t=this;Array.isArray(e)?e.forEach(function(e){return t.useModule(e)}):\"object\"!==(\"undefined\"==typeof e?\"undefined\":o(e))||\"wwtype\"in e?this.useModule(e):Object.keys(e).forEach(function(n){\"function\"==typeof e[n]&&t.useModule(e[n])})}},{key:\"useModule\",value:function(e){switch(e.wwtype){case\"reducer\":this.bindReducer(e);break;case\"layout\":l.bindLayout(e);break;case\"store\":this.bindStore(e.store);break;case\"component\":console.warn(\"Component:: Deprecated and will be removed in a future release.\"),this.bindComponent(e);break;case\"plugin\":this.bindPlugin(e)}}},{key:\"set\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=new e(n);if(!r.mwtype)throw new Error('Required attribute \"mwtype\" is missing.');Object.values(h).forEach(function(e){e in r&&t.middlewares[r.mwtype][e].push(r)})}},{key:\"start\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"undefined\"==typeof jQuery)throw new Error(\"jQuery is not loaded!!\");var r=setInterval(function(){switch(document.readyState){case\"complete\":case\"loaded\":break;default:return}clearInterval(r),e&&l.design(e,n,g);var i=t.getMiddleware(f.APP,h.BEFORE);p.run(i,h.BEFORE,[g],function(){i=this.getMiddleware(f.APP,h.AFTER),p.run(i,h.AFTER,[g],function(){c.history.start({pushState:!!n.pushState})})}.bind(t))},1)}},{key:\"numberOfAction\",value:function(){return this.queue.length}},{key:\"numberOfWorkAction\",value:function(){return Object.keys(this.actionObject).length}}]),e}();Object.assign(m.prototype,c.Events),m.$=c.$,m.View=n(14)(g),m.Reducer=n(19)(g),m.Error=n(20),m.Types=n(21),m.Store=n(22),m.Action=n(23),m.Event=n(24),m.Schema=n(25),m.Layout=n(26),m.Component=n(27),m.Plugin=n(28),e.exports=t.Woowahan=m,m.CollectionView=n(29)(g),m.ItemView=n(31)(g),m.PopupView=n(32)(g)}).call(t,function(){return this}())},function(e,t,n){(function(e,r){function i(e,n){var r={seen:[],stylize:s};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),v(n)?r.showHidden=n:n&&t._extend(r,n),x(r.showHidden)&&(r.showHidden=!1),x(r.depth)&&(r.depth=2),x(r.colors)&&(r.colors=!1),x(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=o),u(r,e,r.depth)}function o(e,t){var n=i.styles[t];return n?\"\u001b[\"+i.colors[n][0]+\"m\"+e+\"\u001b[\"+i.colors[n][1]+\"m\":e}function s(e,t){return e}function a(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}function u(e,n,r){if(e.customInspect&&n&&_(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var i=n.inspect(r,e);return b(i)||(i=u(e,i,r)),i}var o=c(e,n);if(o)return o;var s=Object.keys(n),v=a(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(n)),A(n)&&(s.indexOf(\"message\")>=0||s.indexOf(\"description\")>=0))return l(n);if(0===s.length){if(_(n)){var g=n.name?\": \"+n.name:\"\";return e.stylize(\"[Function\"+g+\"]\",\"special\")}if(E(n))return e.stylize(RegExp.prototype.toString.call(n),\"regexp\");if(S(n))return e.stylize(Date.prototype.toString.call(n),\"date\");if(A(n))return l(n)}var y=\"\",m=!1,w=[\"{\",\"}\"];if(d(n)&&(m=!0,w=[\"[\",\"]\"]),_(n)){var x=n.name?\": \"+n.name:\"\";y=\" [Function\"+x+\"]\"}if(E(n)&&(y=\" \"+RegExp.prototype.toString.call(n)),S(n)&&(y=\" \"+Date.prototype.toUTCString.call(n)),A(n)&&(y=\" \"+l(n)),0===s.length&&(!m||0==n.length))return w[0]+y+w[1];if(r<0)return E(n)?e.stylize(RegExp.prototype.toString.call(n),\"regexp\"):e.stylize(\"[Object]\",\"special\");e.seen.push(n);var T;return T=m?f(e,n,r,v,s):s.map(function(t){return h(e,n,r,v,t,m)}),e.seen.pop(),p(T,y,w)}function c(e,t){if(x(t))return e.stylize(\"undefined\",\"undefined\");if(b(t)){var n=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(n,\"string\")}return m(t)?e.stylize(\"\"+t,\"number\"):v(t)?e.stylize(\"\"+t,\"boolean\"):g(t)?e.stylize(\"null\",\"null\"):void 0}function l(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function f(e,t,n,r,i){for(var o=[],s=0,a=t.length;s<a;++s)N(t,String(s))?o.push(h(e,t,n,r,String(s),!0)):o.push(\"\");return i.forEach(function(i){i.match(/^\\d+$/)||o.push(h(e,t,n,r,i,!0))}),o}function h(e,t,n,r,i,o){var s,a,c;if(c=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},c.get?a=c.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):c.set&&(a=e.stylize(\"[Setter]\",\"special\")),N(r,i)||(s=\"[\"+i+\"]\"),a||(e.seen.indexOf(c.value)<0?(a=g(n)?u(e,c.value,null):u(e,c.value,n-1),a.indexOf(\"\\n\")>-1&&(a=o?a.split(\"\\n\").map(function(e){return\"  \"+e}).join(\"\\n\").substr(2):\"\\n\"+a.split(\"\\n\").map(function(e){return\"   \"+e}).join(\"\\n\"))):a=e.stylize(\"[Circular]\",\"special\")),x(s)){if(o&&i.match(/^\\d+$/))return a;s=JSON.stringify(\"\"+i),s.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,\"name\")):(s=s.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),s=e.stylize(s,\"string\"))}return s+\": \"+a}function p(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf(\"\\n\")>=0&&r++,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1},0);return i>60?n[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n  \")+\" \"+n[1]:n[0]+t+\" \"+e.join(\", \")+\" \"+n[1]}function d(e){return Array.isArray(e)}function v(e){return\"boolean\"==typeof e}function g(e){return null===e}function y(e){return null==e}function m(e){return\"number\"==typeof e}function b(e){return\"string\"==typeof e}function w(e){return\"symbol\"==typeof e}function x(e){return void 0===e}function E(e){return T(e)&&\"[object RegExp]\"===k(e)}function T(e){return\"object\"==typeof e&&null!==e}function S(e){return T(e)&&\"[object Date]\"===k(e)}function A(e){return T(e)&&(\"[object Error]\"===k(e)||e instanceof Error)}function _(e){return\"function\"==typeof e}function C(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"==typeof e||\"undefined\"==typeof e}function k(e){return Object.prototype.toString.call(e)}function j(e){return e<10?\"0\"+e.toString(10):e.toString(10)}function O(){var e=new Date,t=[j(e.getHours()),j(e.getMinutes()),j(e.getSeconds())].join(\":\");return[e.getDate(),L[e.getMonth()],t].join(\" \")}function N(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var R=/%[sdj%]/g;t.format=function(e){if(!b(e)){for(var t=[],n=0;n<arguments.length;n++)t.push(i(arguments[n]));return t.join(\" \")}for(var n=1,r=arguments,o=r.length,s=String(e).replace(R,function(e){if(\"%%\"===e)return\"%\";if(n>=o)return e;switch(e){case\"%s\":return String(r[n++]);case\"%d\":return Number(r[n++]);case\"%j\":try{return JSON.stringify(r[n++])}catch(e){return\"[Circular]\"}default:return e}}),a=r[n];n<o;a=r[++n])s+=g(a)||!T(a)?\" \"+a:\" \"+i(a);return s},t.deprecate=function(n,i){function o(){if(!s){if(r.throwDeprecation)throw new Error(i);r.traceDeprecation?console.trace(i):console.error(i),s=!0}return n.apply(this,arguments)}if(x(e.process))return function(){return t.deprecate(n,i).apply(this,arguments)};if(r.noDeprecation===!0)return n;var s=!1;return o};var D,M={};t.debuglog=function(e){if(x(D)&&(D=r.env.NODE_DEBUG||\"\"),e=e.toUpperCase(),!M[e])if(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\").test(D)){var n=r.pid;M[e]=function(){var r=t.format.apply(t,arguments);console.error(\"%s %d: %s\",e,n,r)}}else M[e]=function(){};return M[e]},t.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},t.isArray=d,t.isBoolean=v,t.isNull=g,t.isNullOrUndefined=y,t.isNumber=m,t.isString=b,t.isSymbol=w,t.isUndefined=x,t.isRegExp=E,t.isObject=T,t.isDate=S,t.isError=A,t.isFunction=_,t.isPrimitive=C,t.isBuffer=n(4);var L=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];t.log=function(){console.log(\"%s - %s\",O(),t.format.apply(t,arguments))},t.inherits=n(5),t._extend=function(e,t){if(!t||!T(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e}}).call(t,function(){return this}(),n(3))},function(e,t){function n(){throw new Error(\"setTimeout has not been defined\")}function r(){throw new Error(\"clearTimeout has not been defined\")}function i(e){if(l===setTimeout)return setTimeout(e,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(e,0);try{return l(e,0)}catch(t){try{return l.call(null,e,0)}catch(t){return l.call(this,e,0)}}}function o(e){if(f===clearTimeout)return clearTimeout(e);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function s(){v&&p&&(v=!1,p.length?d=p.concat(d):g=-1,d.length&&a())}function a(){if(!v){var e=i(s);v=!0;for(var t=d.length;t;){for(p=d,d=[];++g<t;)p&&p[g].run();g=-1,t=d.length}p=null,v=!1,o(e)}}function u(e,t){this.fun=e,this.array=t}function c(){}var l,f,h=e.exports={};!function(){try{l=\"function\"==typeof setTimeout?setTimeout:n}catch(e){l=n}try{f=\"function\"==typeof clearTimeout?clearTimeout:r}catch(e){f=r}}();var p,d=[],v=!1,g=-1;h.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];d.push(new u(e,t)),1!==d.length||v||i(a)},u.prototype.run=function(){this.fun.apply(null,this.array)},h.title=\"browser\",h.browser=!0,h.env={},h.argv=[],h.version=\"\",h.versions={},h.on=c,h.addListener=c,h.once=c,h.off=c,h.removeListener=c,h.removeAllListeners=c,h.emit=c,h.prependListener=c,h.prependOnceListener=c,h.listeners=function(e){return[]},h.binding=function(e){throw new Error(\"process.binding is not supported\")},h.cwd=function(){return\"/\"},h.chdir=function(e){throw new Error(\"process.chdir is not supported\")},h.umask=function(){return 0}},function(e,t){e.exports=function(e){return e&&\"object\"==typeof e&&\"function\"==typeof e.copy&&\"function\"==typeof e.fill&&\"function\"==typeof e.readUInt8}},function(e,t){\"function\"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){(function(r){function i(){return!(!window||!window.process||\"renderer\"!==window.process.type)||(document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)&&parseInt(RegExp.$1,10)>=31||navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))}function o(e){var n=this.useColors;if(e[0]=(n?\"%c\":\"\")+this.namespace+(n?\" %c\":\" \")+e[0]+(n?\"%c \":\" \")+\"+\"+t.humanize(this.diff),n){var r=\"color: \"+this.color;e.splice(1,0,r,\"color: inherit\");var i=0,o=0;e[0].replace(/%[a-zA-Z%]/g,function(e){\"%%\"!==e&&(i++,\"%c\"===e&&(o=i))}),e.splice(o,0,r)}}function s(){return\"object\"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function a(e){try{null==e?t.storage.removeItem(\"debug\"):t.storage.debug=e}catch(e){}}function u(){var e;try{e=t.storage.debug}catch(e){}return!e&&\"undefined\"!=typeof r&&\"env\"in r&&(e=r.env.DEBUG),e}function c(){try{return window.localStorage}catch(e){}}t=e.exports=n(7),t.log=s,t.formatArgs=o,t.save=a,t.load=u,t.useColors=i,t.storage=\"undefined\"!=typeof chrome&&\"undefined\"!=typeof chrome.storage?chrome.storage.local:c(),t.colors=[\"lightseagreen\",\"forestgreen\",\"goldenrod\",\"dodgerblue\",\"darkorchid\",\"crimson\"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return\"[UnexpectedJSONParseError]: \"+e.message}},t.enable(u())}).call(t,n(3))},function(e,t,n){function r(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}function i(e){function n(){if(n.enabled){var e=n,r=+new Date,i=r-(c||r);e.diff=i,e.prev=c,e.curr=r,c=r;for(var o=new Array(arguments.length),s=0;s<o.length;s++)o[s]=arguments[s];o[0]=t.coerce(o[0]),\"string\"!=typeof o[0]&&o.unshift(\"%O\");var a=0;o[0]=o[0].replace(/%([a-zA-Z%])/g,function(n,r){if(\"%%\"===n)return n;a++;var i=t.formatters[r];if(\"function\"==typeof i){var s=o[a];n=i.call(e,s),o.splice(a,1),a--}return n}),t.formatArgs.call(e,o);var u=n.log||t.log||console.log.bind(console);u.apply(e,o)}}return n.namespace=e,n.enabled=t.enabled(e),n.useColors=t.useColors(),n.color=r(e),\"function\"==typeof t.init&&t.init(n),n}function o(e){t.save(e),t.names=[],t.skips=[];for(var n=(\"string\"==typeof e?e:\"\").split(/[\\s,]+/),r=n.length,i=0;i<r;i++)n[i]&&(e=n[i].replace(/\\*/g,\".*?\"),\"-\"===e[0]?t.skips.push(new RegExp(\"^\"+e.substr(1)+\"$\")):t.names.push(new RegExp(\"^\"+e+\"$\")))}function s(){t.enable(\"\")}function a(e){var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1}function u(e){return e instanceof Error?e.stack||e.message:e}t=e.exports=i.debug=i.default=i,t.coerce=u,t.disable=s,t.enable=o,t.enabled=a,t.humanize=n(8),t.names=[],t.skips=[],t.formatters={};var c},function(e,t){function n(e){if(e=String(e),!(e.length>100)){var t=/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(t){var n=parseFloat(t[1]),r=(t[2]||\"ms\").toLowerCase();switch(r){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return n*l;case\"days\":case\"day\":case\"d\":return n*c;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return n*u;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return n*a;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return n*s;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return n;default:return}}}}function r(e){return e>=c?Math.round(e/c)+\"d\":e>=u?Math.round(e/u)+\"h\":e>=a?Math.round(e/a)+\"m\":e>=s?Math.round(e/s)+\"s\":e+\"ms\"}function i(e){return o(e,c,\"day\")||o(e,u,\"hour\")||o(e,a,\"minute\")||o(e,s,\"second\")||e+\" ms\"}function o(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+\" \"+n:Math.ceil(e/t)+\" \"+n+\"s\"}var s=1e3,a=60*s,u=60*a,c=24*u,l=365.25*c;e.exports=function(e,t){t=t||{};var o=typeof e;if(\"string\"===o&&e.length>0)return n(e);if(\"number\"===o&&isNaN(e)===!1)return t.long?i(e):r(e);throw new Error(\"val is not a non-empty string or a valid number. val=\"+JSON.stringify(e))}},function(e,t,n){var r,i;(function(o){!function(s){var a=\"object\"==typeof self&&self.self===self&&self||\"object\"==typeof o&&o.global===o&&o;r=[n(10),n(11),t],i=function(e,t,n){a.Backbone=s(a,n,e,t)}.apply(t,r),!(void 0!==i&&(e.exports=i))}(function(e,t,n,r){var i=e.Backbone,s=Array.prototype.slice;t.VERSION=\"1.3.3\",t.$=r,t.noConflict=function(){return e.Backbone=i,this},t.emulateHTTP=!1,t.emulateJSON=!1;var a=function(e,t,r){switch(e){case 1:return function(){return n[t](this[r])};case 2:return function(e){return n[t](this[r],e)};case 3:return function(e,i){return n[t](this[r],c(e,this),i)};case 4:return function(e,i,o){return n[t](this[r],c(e,this),i,o)};default:return function(){var e=s.call(arguments);return e.unshift(this[r]),n[t].apply(n,e)}}},u=function(e,t,r){n.each(t,function(t,i){n[i]&&(e.prototype[i]=a(t,i,r))})},c=function(e,t){return n.isFunction(e)?e:n.isObject(e)&&!t._isModel(e)?l(e):n.isString(e)?function(t){return t.get(e)}:e},l=function(e){var t=n.matches(e);return function(e){return t(e.attributes)}},f=t.Events={},h=/\\s+/,p=function(e,t,r,i,o){var s,a=0;if(r&&\"object\"==typeof r){void 0!==i&&\"context\"in o&&void 0===o.context&&(o.context=i);for(s=n.keys(r);a<s.length;a++)t=p(e,t,s[a],r[s[a]],o)}else if(r&&h.test(r))for(s=r.split(h);a<s.length;a++)t=e(t,s[a],i,o);else t=e(t,r,i,o);return t};f.on=function(e,t,n){return d(this,e,t,n)};var d=function(e,t,n,r,i){if(e._events=p(v,e._events||{},t,n,{context:r,ctx:e,listening:i}),i){var o=e._listeners||(e._listeners={});o[i.id]=i}return e};f.listenTo=function(e,t,r){if(!e)return this;var i=e._listenId||(e._listenId=n.uniqueId(\"l\")),o=this._listeningTo||(this._listeningTo={}),s=o[i];if(!s){var a=this._listenId||(this._listenId=n.uniqueId(\"l\"));s=o[i]={obj:e,objId:i,id:a,listeningTo:o,count:0}}return d(e,t,r,this,s),this};var v=function(e,t,n,r){if(n){var i=e[t]||(e[t]=[]),o=r.context,s=r.ctx,a=r.listening;a&&a.count++,i.push({callback:n,context:o,ctx:o||s,listening:a})}return e};f.off=function(e,t,n){return this._events?(this._events=p(g,this._events,e,t,{context:n,listeners:this._listeners}),this):this},f.stopListening=function(e,t,r){var i=this._listeningTo;if(!i)return this;for(var o=e?[e._listenId]:n.keys(i),s=0;s<o.length;s++){var a=i[o[s]];if(!a)break;a.obj.off(t,r,this)}return this};var g=function(e,t,r,i){if(e){var o,s=0,a=i.context,u=i.listeners;if(t||r||a){for(var c=t?[t]:n.keys(e);s<c.length;s++){t=c[s];var l=e[t];if(!l)break;for(var f=[],h=0;h<l.length;h++){var p=l[h];r&&r!==p.callback&&r!==p.callback._callback||a&&a!==p.context?f.push(p):(o=p.listening,o&&0===--o.count&&(delete u[o.id],delete o.listeningTo[o.objId]))}f.length?e[t]=f:delete e[t]}return e}for(var d=n.keys(u);s<d.length;s++)o=u[d[s]],delete u[o.id],delete o.listeningTo[o.objId]}};f.once=function(e,t,r){var i=p(y,{},e,t,n.bind(this.off,this));return\"string\"==typeof e&&null==r&&(t=void 0),this.on(i,t,r)},f.listenToOnce=function(e,t,r){var i=p(y,{},t,r,n.bind(this.stopListening,this,e));return this.listenTo(e,i)};var y=function(e,t,r,i){if(r){var o=e[t]=n.once(function(){i(t,o),r.apply(this,arguments)});o._callback=r}return e};f.trigger=function(e){if(!this._events)return this;for(var t=Math.max(0,arguments.length-1),n=Array(t),r=0;r<t;r++)n[r]=arguments[r+1];return p(m,this._events,e,void 0,n),this};var m=function(e,t,n,r){if(e){var i=e[t],o=e.all;i&&o&&(o=o.slice()),i&&b(i,r),o&&b(o,[t].concat(r))}return e},b=function(e,t){var n,r=-1,i=e.length,o=t[0],s=t[1],a=t[2];switch(t.length){case 0:for(;++r<i;)(n=e[r]).callback.call(n.ctx);return;case 1:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o);return;case 2:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s);return;case 3:for(;++r<i;)(n=e[r]).callback.call(n.ctx,o,s,a);return;default:for(;++r<i;)(n=e[r]).callback.apply(n.ctx,t);return}};f.bind=f.on,f.unbind=f.off,n.extend(t,f);var w=t.Model=function(e,t){var r=e||{};t||(t={}),this.cid=n.uniqueId(this.cidPrefix),this.attributes={},t.collection&&(this.collection=t.collection),t.parse&&(r=this.parse(r,t)||{});var i=n.result(this,\"defaults\");r=n.defaults(n.extend({},i,r),i),this.set(r,t),this.changed={},this.initialize.apply(this,arguments)};n.extend(w.prototype,f,{changed:null,validationError:null,idAttribute:\"id\",cidPrefix:\"c\",initialize:function(){},toJSON:function(e){return n.clone(this.attributes)},sync:function(){return t.sync.apply(this,arguments)},get:function(e){return this.attributes[e]},escape:function(e){return n.escape(this.get(e))},has:function(e){return null!=this.get(e)},matches:function(e){return!!n.iteratee(e,this)(this.attributes)},set:function(e,t,r){if(null==e)return this;var i;if(\"object\"==typeof e?(i=e,r=t):(i={})[e]=t,r||(r={}),!this._validate(i,r))return!1;var o=r.unset,s=r.silent,a=[],u=this._changing;this._changing=!0,u||(this._previousAttributes=n.clone(this.attributes),this.changed={});var c=this.attributes,l=this.changed,f=this._previousAttributes;for(var h in i)t=i[h],n.isEqual(c[h],t)||a.push(h),n.isEqual(f[h],t)?delete l[h]:l[h]=t,o?delete c[h]:c[h]=t;if(this.idAttribute in i&&(this.id=this.get(this.idAttribute)),!s){a.length&&(this._pending=r);for(var p=0;p<a.length;p++)this.trigger(\"change:\"+a[p],this,c[a[p]],r)}if(u)return this;if(!s)for(;this._pending;)r=this._pending,this._pending=!1,this.trigger(\"change\",this,r);return this._pending=!1,this._changing=!1,this},unset:function(e,t){return this.set(e,void 0,n.extend({},t,{unset:!0}))},clear:function(e){var t={};for(var r in this.attributes)t[r]=void 0;return this.set(t,n.extend({},e,{unset:!0}))},hasChanged:function(e){return null==e?!n.isEmpty(this.changed):n.has(this.changed,e)},changedAttributes:function(e){if(!e)return!!this.hasChanged()&&n.clone(this.changed);var t=this._changing?this._previousAttributes:this.attributes,r={};for(var i in e){var o=e[i];n.isEqual(t[i],o)||(r[i]=o)}return!!n.size(r)&&r},previous:function(e){return null!=e&&this._previousAttributes?this._previousAttributes[e]:null},previousAttributes:function(){return n.clone(this._previousAttributes)},fetch:function(e){e=n.extend({parse:!0},e);var t=this,r=e.success;return e.success=function(n){var i=e.parse?t.parse(n,e):n;return!!t.set(i,e)&&(r&&r.call(e.context,t,n,e),void t.trigger(\"sync\",t,n,e))},W(this,e),this.sync(\"read\",this,e)},save:function(e,t,r){var i;null==e||\"object\"==typeof e?(i=e,r=t):(i={})[e]=t,r=n.extend({validate:!0,parse:!0},r);var o=r.wait;if(i&&!o){if(!this.set(i,r))return!1}else if(!this._validate(i,r))return!1;var s=this,a=r.success,u=this.attributes;r.success=function(e){s.attributes=u;var t=r.parse?s.parse(e,r):e;return o&&(t=n.extend({},i,t)),!(t&&!s.set(t,r))&&(a&&a.call(r.context,s,e,r),void s.trigger(\"sync\",s,e,r))},W(this,r),i&&o&&(this.attributes=n.extend({},u,i));var c=this.isNew()?\"create\":r.patch?\"patch\":\"update\";\"patch\"!==c||r.attrs||(r.attrs=i);var l=this.sync(c,this,r);return this.attributes=u,l},destroy:function(e){e=e?n.clone(e):{};var t=this,r=e.success,i=e.wait,o=function(){t.stopListening(),t.trigger(\"destroy\",t,t.collection,e)};e.success=function(n){i&&o(),r&&r.call(e.context,t,n,e),t.isNew()||t.trigger(\"sync\",t,n,e)};var s=!1;return this.isNew()?n.defer(e.success):(W(this,e),s=this.sync(\"delete\",this,e)),i||o(),s},url:function(){var e=n.result(this,\"urlRoot\")||n.result(this.collection,\"url\")||H();if(this.isNew())return e;var t=this.get(this.idAttribute);return e.replace(/[^\\/]$/,\"$&/\")+encodeURIComponent(t)},parse:function(e,t){return e},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(e){return this._validate({},n.extend({},e,{validate:!0}))},_validate:function(e,t){if(!t.validate||!this.validate)return!0;e=n.extend({},this.attributes,e);var r=this.validationError=this.validate(e,t)||null;return!r||(this.trigger(\"invalid\",this,r,n.extend(t,{validationError:r})),!1)}});var x={keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1};u(w,x,\"attributes\");var E=t.Collection=function(e,t){t||(t={}),t.model&&(this.model=t.model),void 0!==t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),e&&this.reset(e,n.extend({silent:!0},t))},T={add:!0,remove:!0,merge:!0},S={add:!0,remove:!1},A=function(e,t,n){n=Math.min(Math.max(n,0),e.length);var r,i=Array(e.length-n),o=t.length;for(r=0;r<i.length;r++)i[r]=e[r+n];for(r=0;r<o;r++)e[r+n]=t[r];for(r=0;r<i.length;r++)e[r+o+n]=i[r]};n.extend(E.prototype,f,{model:w,initialize:function(){},toJSON:function(e){return this.map(function(t){return t.toJSON(e)})},sync:function(){return t.sync.apply(this,arguments)},add:function(e,t){return this.set(e,n.extend({merge:!1},t,S))},remove:function(e,t){t=n.extend({},t);var r=!n.isArray(e);e=r?[e]:e.slice();var i=this._removeModels(e,t);return!t.silent&&i.length&&(t.changes={added:[],merged:[],removed:i},this.trigger(\"update\",this,t)),r?i[0]:i},set:function(e,t){if(null!=e){t=n.extend({},T,t),t.parse&&!this._isModel(e)&&(e=this.parse(e,t)||[]);var r=!n.isArray(e);e=r?[e]:e.slice();var i=t.at;null!=i&&(i=+i),i>this.length&&(i=this.length),i<0&&(i+=this.length+1);var o,s,a=[],u=[],c=[],l=[],f={},h=t.add,p=t.merge,d=t.remove,v=!1,g=this.comparator&&null==i&&t.sort!==!1,y=n.isString(this.comparator)?this.comparator:null;for(s=0;s<e.length;s++){o=e[s];var m=this.get(o);if(m){if(p&&o!==m){var b=this._isModel(o)?o.attributes:o;t.parse&&(b=m.parse(b,t)),m.set(b,t),c.push(m),g&&!v&&(v=m.hasChanged(y))}f[m.cid]||(f[m.cid]=!0,a.push(m)),e[s]=m}else h&&(o=e[s]=this._prepareModel(o,t),o&&(u.push(o),this._addReference(o,t),f[o.cid]=!0,a.push(o)))}if(d){for(s=0;s<this.length;s++)o=this.models[s],f[o.cid]||l.push(o);l.length&&this._removeModels(l,t)}var w=!1,x=!g&&h&&d;if(a.length&&x?(w=this.length!==a.length||n.some(this.models,function(e,t){return e!==a[t]}),this.models.length=0,A(this.models,a,0),this.length=this.models.length):u.length&&(g&&(v=!0),A(this.models,u,null==i?this.length:i),this.length=this.models.length),v&&this.sort({silent:!0}),!t.silent){for(s=0;s<u.length;s++)null!=i&&(t.index=i+s),o=u[s],o.trigger(\"add\",o,this,t);(v||w)&&this.trigger(\"sort\",this,t),(u.length||l.length||c.length)&&(t.changes={added:u,removed:l,merged:c},this.trigger(\"update\",this,t))}return r?e[0]:e}},reset:function(e,t){t=t?n.clone(t):{};for(var r=0;r<this.models.length;r++)this._removeReference(this.models[r],t);return t.previousModels=this.models,this._reset(),e=this.add(e,n.extend({silent:!0},t)),t.silent||this.trigger(\"reset\",this,t),e},push:function(e,t){return this.add(e,n.extend({at:this.length},t))},pop:function(e){var t=this.at(this.length-1);return this.remove(t,e)},unshift:function(e,t){return this.add(e,n.extend({at:0},t))},shift:function(e){var t=this.at(0);return this.remove(t,e)},slice:function(){return s.apply(this.models,arguments)},get:function(e){if(null!=e)return this._byId[e]||this._byId[this.modelId(e.attributes||e)]||e.cid&&this._byId[e.cid]},has:function(e){return null!=this.get(e)},at:function(e){return e<0&&(e+=this.length),this.models[e]},where:function(e,t){return this[t?\"find\":\"filter\"](e)},findWhere:function(e){return this.where(e,!0)},sort:function(e){var t=this.comparator;if(!t)throw new Error(\"Cannot sort a set without a comparator\");e||(e={});var r=t.length;return n.isFunction(t)&&(t=n.bind(t,this)),1===r||n.isString(t)?this.models=this.sortBy(t):this.models.sort(t),e.silent||this.trigger(\"sort\",this,e),this},pluck:function(e){return this.map(e+\"\")},fetch:function(e){e=n.extend({parse:!0},e);var t=e.success,r=this;return e.success=function(n){var i=e.reset?\"reset\":\"set\";r[i](n,e),t&&t.call(e.context,r,n,e),r.trigger(\"sync\",r,n,e)},W(this,e),this.sync(\"read\",this,e)},create:function(e,t){t=t?n.clone(t):{};var r=t.wait;if(e=this._prepareModel(e,t),!e)return!1;r||this.add(e,t);var i=this,o=t.success;return t.success=function(e,t,n){r&&i.add(e,n),o&&o.call(n.context,e,t,n)},e.save(null,t),e},parse:function(e,t){return e},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(e){return e[this.model.prototype.idAttribute||\"id\"]},_reset:function(){this.length=0,this.models=[],this._byId={}},_prepareModel:function(e,t){if(this._isModel(e))return e.collection||(e.collection=this),e;t=t?n.clone(t):{},t.collection=this;var r=new this.model(e,t);return r.validationError?(this.trigger(\"invalid\",this,r.validationError,t),!1):r},_removeModels:function(e,t){for(var n=[],r=0;r<e.length;r++){var i=this.get(e[r]);if(i){var o=this.indexOf(i);this.models.splice(o,1),this.length--,delete this._byId[i.cid];var s=this.modelId(i.attributes);null!=s&&delete this._byId[s],t.silent||(t.index=o,i.trigger(\"remove\",i,this,t)),n.push(i),this._removeReference(i,t)}}return n},_isModel:function(e){return e instanceof w},_addReference:function(e,t){this._byId[e.cid]=e;var n=this.modelId(e.attributes);null!=n&&(this._byId[n]=e),e.on(\"all\",this._onModelEvent,this)},_removeReference:function(e,t){delete this._byId[e.cid];var n=this.modelId(e.attributes);null!=n&&delete this._byId[n],this===e.collection&&delete e.collection,e.off(\"all\",this._onModelEvent,this)},_onModelEvent:function(e,t,n,r){if(t){if((\"add\"===e||\"remove\"===e)&&n!==this)return;if(\"destroy\"===e&&this.remove(t,r),\"change\"===e){\nvar i=this.modelId(t.previousAttributes()),o=this.modelId(t.attributes);i!==o&&(null!=i&&delete this._byId[i],null!=o&&(this._byId[o]=t))}}this.trigger.apply(this,arguments)}});var _={forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3};u(E,_,\"models\");var C=t.View=function(e){this.cid=n.uniqueId(\"view\"),n.extend(this,n.pick(e,j)),this._ensureElement(),this.initialize.apply(this,arguments)},k=/^(\\S+)\\s*(.*)$/,j=[\"model\",\"collection\",\"el\",\"id\",\"attributes\",\"className\",\"tagName\",\"events\"];n.extend(C.prototype,f,{tagName:\"div\",$:function(e){return this.$el.find(e)},initialize:function(){},render:function(){return this},remove:function(){return this._removeElement(),this.stopListening(),this},_removeElement:function(){this.$el.remove()},setElement:function(e){return this.undelegateEvents(),this._setElement(e),this.delegateEvents(),this},_setElement:function(e){this.$el=e instanceof t.$?e:t.$(e),this.el=this.$el[0]},delegateEvents:function(e){if(e||(e=n.result(this,\"events\")),!e)return this;this.undelegateEvents();for(var t in e){var r=e[t];if(n.isFunction(r)||(r=this[r]),r){var i=t.match(k);this.delegate(i[1],i[2],n.bind(r,this))}}return this},delegate:function(e,t,n){return this.$el.on(e+\".delegateEvents\"+this.cid,t,n),this},undelegateEvents:function(){return this.$el&&this.$el.off(\".delegateEvents\"+this.cid),this},undelegate:function(e,t,n){return this.$el.off(e+\".delegateEvents\"+this.cid,t,n),this},_createElement:function(e){return document.createElement(e)},_ensureElement:function(){if(this.el)this.setElement(n.result(this,\"el\"));else{var e=n.extend({},n.result(this,\"attributes\"));this.id&&(e.id=n.result(this,\"id\")),this.className&&(e.class=n.result(this,\"className\")),this.setElement(this._createElement(n.result(this,\"tagName\"))),this._setAttributes(e)}},_setAttributes:function(e){this.$el.attr(e)}}),t.sync=function(e,r,i){var o=O[e];n.defaults(i||(i={}),{emulateHTTP:t.emulateHTTP,emulateJSON:t.emulateJSON});var s={type:o,dataType:\"json\"};if(i.url||(s.url=n.result(r,\"url\")||H()),null!=i.data||!r||\"create\"!==e&&\"update\"!==e&&\"patch\"!==e||(s.contentType=\"application/json\",s.data=JSON.stringify(i.attrs||r.toJSON(i))),i.emulateJSON&&(s.contentType=\"application/x-www-form-urlencoded\",s.data=s.data?{model:s.data}:{}),i.emulateHTTP&&(\"PUT\"===o||\"DELETE\"===o||\"PATCH\"===o)){s.type=\"POST\",i.emulateJSON&&(s.data._method=o);var a=i.beforeSend;i.beforeSend=function(e){if(e.setRequestHeader(\"X-HTTP-Method-Override\",o),a)return a.apply(this,arguments)}}\"GET\"===s.type||i.emulateJSON||(s.processData=!1);var u=i.error;i.error=function(e,t,n){i.textStatus=t,i.errorThrown=n,u&&u.call(i.context,e,t,n)};var c=i.xhr=t.ajax(n.extend(s,i));return r.trigger(\"request\",r,c,i),c};var O={create:\"POST\",update:\"PUT\",patch:\"PATCH\",delete:\"DELETE\",read:\"GET\"};t.ajax=function(){return t.$.ajax.apply(t.$,arguments)};var N=t.Router=function(e){e||(e={}),e.routes&&(this.routes=e.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},R=/\\((.*?)\\)/g,D=/(\\(\\?)?:\\w+/g,M=/\\*\\w+/g,L=/[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;n.extend(N.prototype,f,{initialize:function(){},route:function(e,r,i){n.isRegExp(e)||(e=this._routeToRegExp(e)),n.isFunction(r)&&(i=r,r=\"\"),i||(i=this[r]);var o=this;return t.history.route(e,function(n){var s=o._extractParameters(e,n);o.execute(i,s,r)!==!1&&(o.trigger.apply(o,[\"route:\"+r].concat(s)),o.trigger(\"route\",r,s),t.history.trigger(\"route\",o,r,s))}),this},execute:function(e,t,n){e&&e.apply(this,t)},navigate:function(e,n){return t.history.navigate(e,n),this},_bindRoutes:function(){if(this.routes){this.routes=n.result(this,\"routes\");for(var e,t=n.keys(this.routes);null!=(e=t.pop());)this.route(e,this.routes[e])}},_routeToRegExp:function(e){return e=e.replace(L,\"\\\\$&\").replace(R,\"(?:$1)?\").replace(D,function(e,t){return t?e:\"([^/?]+)\"}).replace(M,\"([^?]*?)\"),new RegExp(\"^\"+e+\"(?:\\\\?([\\\\s\\\\S]*))?$\")},_extractParameters:function(e,t){var r=e.exec(t).slice(1);return n.map(r,function(e,t){return t===r.length-1?e||null:e?decodeURIComponent(e):null})}});var I=t.History=function(){this.handlers=[],this.checkUrl=n.bind(this.checkUrl,this),\"undefined\"!=typeof window&&(this.location=window.location,this.history=window.history)},q=/^[#\\/]|\\s+$/g,F=/^\\/+|\\/+$/g,P=/#.*$/;I.started=!1,n.extend(I.prototype,f,{interval:50,atRoot:function(){var e=this.location.pathname.replace(/[^\\/]$/,\"$&/\");return e===this.root&&!this.getSearch()},matchRoot:function(){var e=this.decodeFragment(this.location.pathname),t=e.slice(0,this.root.length-1)+\"/\";return t===this.root},decodeFragment:function(e){return decodeURI(e.replace(/%25/g,\"%2525\"))},getSearch:function(){var e=this.location.href.replace(/#.*/,\"\").match(/\\?.+/);return e?e[0]:\"\"},getHash:function(e){console.log(\"drive into\"),console.log(o.window),console.log(e);var t=(e||this).location.href.match(/#(.*)$/);return t?t[1]:\"\"},getPath:function(){var e=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return\"/\"===e.charAt(0)?e.slice(1):e},getFragment:function(e){return null==e&&(e=this._usePushState||!this._wantsHashChange?this.getPath():this.getHash()),e.replace(q,\"\")},start:function(e){if(I.started)throw new Error(\"Backbone.history has already been started\");if(I.started=!0,this.options=n.extend({root:\"/\"},this.options,e),this.root=this.options.root,this._wantsHashChange=this.options.hashChange!==!1,this._hasHashChange=\"onhashchange\"in window&&(void 0===document.documentMode||document.documentMode>7),this._useHashChange=this._wantsHashChange&&this._hasHashChange,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.history||!this.history.pushState),this._usePushState=this._wantsPushState&&this._hasPushState,this.fragment=this.getFragment(),this.root=(\"/\"+this.root+\"/\").replace(F,\"/\"),this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var t=this.root.slice(0,-1)||\"/\";return this.location.replace(t+\"#\"+this.getPath()),!0}this._hasPushState&&this.atRoot()&&this.navigate(this.getHash(),{replace:!0})}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement(\"iframe\"),this.iframe.src=\"javascript:0\",this.iframe.style.display=\"none\",this.iframe.tabIndex=-1;var r=document.body,i=r.insertBefore(this.iframe,r.firstChild).contentWindow;i.document.open(),i.document.close(),i.location.hash=\"#\"+this.fragment}var o=window.addEventListener||function(e,t){return attachEvent(\"on\"+e,t)};if(this._usePushState?o(\"popstate\",this.checkUrl,!1):this._useHashChange&&!this.iframe?o(\"hashchange\",this.checkUrl,!1):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),!this.options.silent)return this.loadUrl()},stop:function(){var e=window.removeEventListener||function(e,t){return detachEvent(\"on\"+e,t)};this._usePushState?e(\"popstate\",this.checkUrl,!1):this._useHashChange&&!this.iframe&&e(\"hashchange\",this.checkUrl,!1),this.iframe&&(document.body.removeChild(this.iframe),this.iframe=null),this._checkUrlInterval&&clearInterval(this._checkUrlInterval),I.started=!1},route:function(e,t){this.handlers.unshift({route:e,callback:t})},checkUrl:function(e){var t=this.getFragment();return t===this.fragment&&this.iframe&&(t=this.getHash(this.iframe.contentWindow)),t!==this.fragment&&(this.iframe&&this.navigate(t),void this.loadUrl())},loadUrl:function(e){return!!this.matchRoot()&&(e=this.fragment=this.getFragment(e),n.some(this.handlers,function(t){if(t.route.test(e))return t.callback(e),!0}))},navigate:function(e,t){if(!I.started)return!1;t&&t!==!0||(t={trigger:!!t}),e=this.getFragment(e||\"\");var n=this.root;\"\"!==e&&\"?\"!==e.charAt(0)||(n=n.slice(0,-1)||\"/\");var r=n+e;if(e=this.decodeFragment(e.replace(P,\"\")),this.fragment!==e){if(this.fragment=e,this._usePushState)this.history[t.replace?\"replaceState\":\"pushState\"]({},document.title,r);else{if(!this._wantsHashChange)return this.location.assign(r);if(this._updateHash(this.location,e,t.replace),this.iframe&&e!==this.getHash(this.iframe.contentWindow)){var i=this.iframe.contentWindow;t.replace||(i.document.open(),i.document.close()),this._updateHash(i.location,e,t.replace)}}return t.trigger?this.loadUrl(e):void 0}},_updateHash:function(e,t,n){if(n){var r=e.href.replace(/(javascript:|#).*$/,\"\");e.replace(r+\"#\"+t)}else e.hash=\"#\"+t}}),t.history=new I;var $=function(e,t){var r,i=this;return r=e&&n.has(e,\"constructor\")?e.constructor:function(){return i.apply(this,arguments)},n.extend(r,i,t),r.prototype=n.create(i.prototype,e),r.prototype.constructor=r,r.__super__=i.prototype,r};w.extend=E.extend=N.extend=C.extend=I.extend=$;var H=function(){throw new Error('A \"url\" property or function must be specified')},W=function(e,t){var n=t.error;t.error=function(r){n&&n.call(t.context,e,r,t),e.trigger(\"error\",e,r,t)}};return t})}).call(t,function(){return this}())},function(e,t,n){var r,i;(function(){function n(e){function t(t,n,r,i,o,s){for(;o>=0&&o<s;o+=e){var a=i?i[o]:o;r=n(r,t[a],a,t)}return r}return function(n,r,i,o){r=T(r,o,4);var s=!O(n)&&E.keys(n),a=(s||n).length,u=e>0?0:a-1;return arguments.length<3&&(i=n[s?s[u]:u],u+=e),t(n,r,i,s,u,a)}}function o(e){return function(t,n,r){n=S(n,r);for(var i=j(t),o=e>0?0:i-1;o>=0&&o<i;o+=e)if(n(t[o],o,t))return o;return-1}}function s(e,t,n){return function(r,i,o){var s=0,a=j(r);if(\"number\"==typeof o)e>0?s=o>=0?o:Math.max(o+a,s):a=o>=0?Math.min(o+1,a):o+a+1;else if(n&&o&&a)return o=n(r,i),r[o]===i?o:-1;if(i!==i)return o=t(d.call(r,s,a),E.isNaN),o>=0?o+s:-1;for(o=e>0?s:a-1;o>=0&&o<a;o+=e)if(r[o]===i)return o;return-1}}function a(e,t){var n=L.length,r=e.constructor,i=E.isFunction(r)&&r.prototype||f,o=\"constructor\";for(E.has(e,o)&&!E.contains(t,o)&&t.push(o);n--;)o=L[n],o in e&&e[o]!==i[o]&&!E.contains(t,o)&&t.push(o)}var u=this,c=u._,l=Array.prototype,f=Object.prototype,h=Function.prototype,p=l.push,d=l.slice,v=f.toString,g=f.hasOwnProperty,y=Array.isArray,m=Object.keys,b=h.bind,w=Object.create,x=function(){},E=function(e){return e instanceof E?e:this instanceof E?void(this._wrapped=e):new E(e)};\"undefined\"!=typeof e&&e.exports&&(t=e.exports=E),t._=E,E.VERSION=\"1.8.3\";var T=function(e,t,n){if(void 0===t)return e;switch(null==n?3:n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)};case 4:return function(n,r,i,o){return e.call(t,n,r,i,o)}}return function(){return e.apply(t,arguments)}},S=function(e,t,n){return null==e?E.identity:E.isFunction(e)?T(e,t,n):E.isObject(e)?E.matcher(e):E.property(e)};E.iteratee=function(e,t){return S(e,t,1/0)};var A=function(e,t){return function(n){var r=arguments.length;if(r<2||null==n)return n;for(var i=1;i<r;i++)for(var o=arguments[i],s=e(o),a=s.length,u=0;u<a;u++){var c=s[u];t&&void 0!==n[c]||(n[c]=o[c])}return n}},_=function(e){if(!E.isObject(e))return{};if(w)return w(e);x.prototype=e;var t=new x;return x.prototype=null,t},C=function(e){return function(t){return null==t?void 0:t[e]}},k=Math.pow(2,53)-1,j=C(\"length\"),O=function(e){var t=j(e);return\"number\"==typeof t&&t>=0&&t<=k};E.each=E.forEach=function(e,t,n){t=T(t,n);var r,i;if(O(e))for(r=0,i=e.length;r<i;r++)t(e[r],r,e);else{var o=E.keys(e);for(r=0,i=o.length;r<i;r++)t(e[o[r]],o[r],e)}return e},E.map=E.collect=function(e,t,n){t=S(t,n);for(var r=!O(e)&&E.keys(e),i=(r||e).length,o=Array(i),s=0;s<i;s++){var a=r?r[s]:s;o[s]=t(e[a],a,e)}return o},E.reduce=E.foldl=E.inject=n(1),E.reduceRight=E.foldr=n(-1),E.find=E.detect=function(e,t,n){var r;if(r=O(e)?E.findIndex(e,t,n):E.findKey(e,t,n),void 0!==r&&r!==-1)return e[r]},E.filter=E.select=function(e,t,n){var r=[];return t=S(t,n),E.each(e,function(e,n,i){t(e,n,i)&&r.push(e)}),r},E.reject=function(e,t,n){return E.filter(e,E.negate(S(t)),n)},E.every=E.all=function(e,t,n){t=S(t,n);for(var r=!O(e)&&E.keys(e),i=(r||e).length,o=0;o<i;o++){var s=r?r[o]:o;if(!t(e[s],s,e))return!1}return!0},E.some=E.any=function(e,t,n){t=S(t,n);for(var r=!O(e)&&E.keys(e),i=(r||e).length,o=0;o<i;o++){var s=r?r[o]:o;if(t(e[s],s,e))return!0}return!1},E.contains=E.includes=E.include=function(e,t,n,r){return O(e)||(e=E.values(e)),(\"number\"!=typeof n||r)&&(n=0),E.indexOf(e,t,n)>=0},E.invoke=function(e,t){var n=d.call(arguments,2),r=E.isFunction(t);return E.map(e,function(e){var i=r?t:e[t];return null==i?i:i.apply(e,n)})},E.pluck=function(e,t){return E.map(e,E.property(t))},E.where=function(e,t){return E.filter(e,E.matcher(t))},E.findWhere=function(e,t){return E.find(e,E.matcher(t))},E.max=function(e,t,n){var r,i,o=-(1/0),s=-(1/0);if(null==t&&null!=e){e=O(e)?e:E.values(e);for(var a=0,u=e.length;a<u;a++)r=e[a],r>o&&(o=r)}else t=S(t,n),E.each(e,function(e,n,r){i=t(e,n,r),(i>s||i===-(1/0)&&o===-(1/0))&&(o=e,s=i)});return o},E.min=function(e,t,n){var r,i,o=1/0,s=1/0;if(null==t&&null!=e){e=O(e)?e:E.values(e);for(var a=0,u=e.length;a<u;a++)r=e[a],r<o&&(o=r)}else t=S(t,n),E.each(e,function(e,n,r){i=t(e,n,r),(i<s||i===1/0&&o===1/0)&&(o=e,s=i)});return o},E.shuffle=function(e){for(var t,n=O(e)?e:E.values(e),r=n.length,i=Array(r),o=0;o<r;o++)t=E.random(0,o),t!==o&&(i[o]=i[t]),i[t]=n[o];return i},E.sample=function(e,t,n){return null==t||n?(O(e)||(e=E.values(e)),e[E.random(e.length-1)]):E.shuffle(e).slice(0,Math.max(0,t))},E.sortBy=function(e,t,n){return t=S(t,n),E.pluck(E.map(e,function(e,n,r){return{value:e,index:n,criteria:t(e,n,r)}}).sort(function(e,t){var n=e.criteria,r=t.criteria;if(n!==r){if(n>r||void 0===n)return 1;if(n<r||void 0===r)return-1}return e.index-t.index}),\"value\")};var N=function(e){return function(t,n,r){var i={};return n=S(n,r),E.each(t,function(r,o){var s=n(r,o,t);e(i,r,s)}),i}};E.groupBy=N(function(e,t,n){E.has(e,n)?e[n].push(t):e[n]=[t]}),E.indexBy=N(function(e,t,n){e[n]=t}),E.countBy=N(function(e,t,n){E.has(e,n)?e[n]++:e[n]=1}),E.toArray=function(e){return e?E.isArray(e)?d.call(e):O(e)?E.map(e,E.identity):E.values(e):[]},E.size=function(e){return null==e?0:O(e)?e.length:E.keys(e).length},E.partition=function(e,t,n){t=S(t,n);var r=[],i=[];return E.each(e,function(e,n,o){(t(e,n,o)?r:i).push(e)}),[r,i]},E.first=E.head=E.take=function(e,t,n){if(null!=e)return null==t||n?e[0]:E.initial(e,e.length-t)},E.initial=function(e,t,n){return d.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))},E.last=function(e,t,n){if(null!=e)return null==t||n?e[e.length-1]:E.rest(e,Math.max(0,e.length-t))},E.rest=E.tail=E.drop=function(e,t,n){return d.call(e,null==t||n?1:t)},E.compact=function(e){return E.filter(e,E.identity)};var R=function(e,t,n,r){for(var i=[],o=0,s=r||0,a=j(e);s<a;s++){var u=e[s];if(O(u)&&(E.isArray(u)||E.isArguments(u))){t||(u=R(u,t,n));var c=0,l=u.length;for(i.length+=l;c<l;)i[o++]=u[c++]}else n||(i[o++]=u)}return i};E.flatten=function(e,t){return R(e,t,!1)},E.without=function(e){return E.difference(e,d.call(arguments,1))},E.uniq=E.unique=function(e,t,n,r){E.isBoolean(t)||(r=n,n=t,t=!1),null!=n&&(n=S(n,r));for(var i=[],o=[],s=0,a=j(e);s<a;s++){var u=e[s],c=n?n(u,s,e):u;t?(s&&o===c||i.push(u),o=c):n?E.contains(o,c)||(o.push(c),i.push(u)):E.contains(i,u)||i.push(u)}return i},E.union=function(){return E.uniq(R(arguments,!0,!0))},E.intersection=function(e){for(var t=[],n=arguments.length,r=0,i=j(e);r<i;r++){var o=e[r];if(!E.contains(t,o)){for(var s=1;s<n&&E.contains(arguments[s],o);s++);s===n&&t.push(o)}}return t},E.difference=function(e){var t=R(arguments,!0,!0,1);return E.filter(e,function(e){return!E.contains(t,e)})},E.zip=function(){return E.unzip(arguments)},E.unzip=function(e){for(var t=e&&E.max(e,j).length||0,n=Array(t),r=0;r<t;r++)n[r]=E.pluck(e,r);return n},E.object=function(e,t){for(var n={},r=0,i=j(e);r<i;r++)t?n[e[r]]=t[r]:n[e[r][0]]=e[r][1];return n},E.findIndex=o(1),E.findLastIndex=o(-1),E.sortedIndex=function(e,t,n,r){n=S(n,r,1);for(var i=n(t),o=0,s=j(e);o<s;){var a=Math.floor((o+s)/2);n(e[a])<i?o=a+1:s=a}return o},E.indexOf=s(1,E.findIndex,E.sortedIndex),E.lastIndexOf=s(-1,E.findLastIndex),E.range=function(e,t,n){null==t&&(t=e||0,e=0),n=n||1;for(var r=Math.max(Math.ceil((t-e)/n),0),i=Array(r),o=0;o<r;o++,e+=n)i[o]=e;return i};var D=function(e,t,n,r,i){if(!(r instanceof t))return e.apply(n,i);var o=_(e.prototype),s=e.apply(o,i);return E.isObject(s)?s:o};E.bind=function(e,t){if(b&&e.bind===b)return b.apply(e,d.call(arguments,1));if(!E.isFunction(e))throw new TypeError(\"Bind must be called on a function\");var n=d.call(arguments,2),r=function(){return D(e,r,t,this,n.concat(d.call(arguments)))};return r},E.partial=function(e){var t=d.call(arguments,1),n=function(){for(var r=0,i=t.length,o=Array(i),s=0;s<i;s++)o[s]=t[s]===E?arguments[r++]:t[s];for(;r<arguments.length;)o.push(arguments[r++]);return D(e,n,this,this,o)};return n},E.bindAll=function(e){var t,n,r=arguments.length;if(r<=1)throw new Error(\"bindAll must be passed function names\");for(t=1;t<r;t++)n=arguments[t],e[n]=E.bind(e[n],e);return e},E.memoize=function(e,t){var n=function(r){var i=n.cache,o=\"\"+(t?t.apply(this,arguments):r);return E.has(i,o)||(i[o]=e.apply(this,arguments)),i[o]};return n.cache={},n},E.delay=function(e,t){var n=d.call(arguments,2);return setTimeout(function(){return e.apply(null,n)},t)},E.defer=E.partial(E.delay,E,1),E.throttle=function(e,t,n){var r,i,o,s=null,a=0;n||(n={});var u=function(){a=n.leading===!1?0:E.now(),s=null,o=e.apply(r,i),s||(r=i=null)};return function(){var c=E.now();a||n.leading!==!1||(a=c);var l=t-(c-a);return r=this,i=arguments,l<=0||l>t?(s&&(clearTimeout(s),s=null),a=c,o=e.apply(r,i),s||(r=i=null)):s||n.trailing===!1||(s=setTimeout(u,l)),o}},E.debounce=function(e,t,n){var r,i,o,s,a,u=function(){var c=E.now()-s;c<t&&c>=0?r=setTimeout(u,t-c):(r=null,n||(a=e.apply(o,i),r||(o=i=null)))};return function(){o=this,i=arguments,s=E.now();var c=n&&!r;return r||(r=setTimeout(u,t)),c&&(a=e.apply(o,i),o=i=null),a}},E.wrap=function(e,t){return E.partial(t,e)},E.negate=function(e){return function(){return!e.apply(this,arguments)}},E.compose=function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},E.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},E.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},E.once=E.partial(E.before,2);var M=!{toString:null}.propertyIsEnumerable(\"toString\"),L=[\"valueOf\",\"isPrototypeOf\",\"toString\",\"propertyIsEnumerable\",\"hasOwnProperty\",\"toLocaleString\"];E.keys=function(e){if(!E.isObject(e))return[];if(m)return m(e);var t=[];for(var n in e)E.has(e,n)&&t.push(n);return M&&a(e,t),t},E.allKeys=function(e){if(!E.isObject(e))return[];var t=[];for(var n in e)t.push(n);return M&&a(e,t),t},E.values=function(e){for(var t=E.keys(e),n=t.length,r=Array(n),i=0;i<n;i++)r[i]=e[t[i]];return r},E.mapObject=function(e,t,n){t=S(t,n);for(var r,i=E.keys(e),o=i.length,s={},a=0;a<o;a++)r=i[a],s[r]=t(e[r],r,e);return s},E.pairs=function(e){for(var t=E.keys(e),n=t.length,r=Array(n),i=0;i<n;i++)r[i]=[t[i],e[t[i]]];return r},E.invert=function(e){for(var t={},n=E.keys(e),r=0,i=n.length;r<i;r++)t[e[n[r]]]=n[r];return t},E.functions=E.methods=function(e){var t=[];for(var n in e)E.isFunction(e[n])&&t.push(n);return t.sort()},E.extend=A(E.allKeys),E.extendOwn=E.assign=A(E.keys),E.findKey=function(e,t,n){t=S(t,n);for(var r,i=E.keys(e),o=0,s=i.length;o<s;o++)if(r=i[o],t(e[r],r,e))return r},E.pick=function(e,t,n){var r,i,o={},s=e;if(null==s)return o;E.isFunction(t)?(i=E.allKeys(s),r=T(t,n)):(i=R(arguments,!1,!1,1),r=function(e,t,n){return t in n},s=Object(s));for(var a=0,u=i.length;a<u;a++){var c=i[a],l=s[c];r(l,c,s)&&(o[c]=l)}return o},E.omit=function(e,t,n){if(E.isFunction(t))t=E.negate(t);else{var r=E.map(R(arguments,!1,!1,1),String);t=function(e,t){return!E.contains(r,t)}}return E.pick(e,t,n)},E.defaults=A(E.allKeys,!0),E.create=function(e,t){var n=_(e);return t&&E.extendOwn(n,t),n},E.clone=function(e){return E.isObject(e)?E.isArray(e)?e.slice():E.extend({},e):e},E.tap=function(e,t){return t(e),e},E.isMatch=function(e,t){var n=E.keys(t),r=n.length;if(null==e)return!r;for(var i=Object(e),o=0;o<r;o++){var s=n[o];if(t[s]!==i[s]||!(s in i))return!1}return!0};var I=function(e,t,n,r){if(e===t)return 0!==e||1/e===1/t;if(null==e||null==t)return e===t;e instanceof E&&(e=e._wrapped),t instanceof E&&(t=t._wrapped);var i=v.call(e);if(i!==v.call(t))return!1;switch(i){case\"[object RegExp]\":case\"[object String]\":return\"\"+e==\"\"+t;case\"[object Number]\":return+e!==+e?+t!==+t:0===+e?1/+e===1/t:+e===+t;case\"[object Date]\":case\"[object Boolean]\":return+e===+t}var o=\"[object Array]\"===i;if(!o){if(\"object\"!=typeof e||\"object\"!=typeof t)return!1;var s=e.constructor,a=t.constructor;if(s!==a&&!(E.isFunction(s)&&s instanceof s&&E.isFunction(a)&&a instanceof a)&&\"constructor\"in e&&\"constructor\"in t)return!1}n=n||[],r=r||[];for(var u=n.length;u--;)if(n[u]===e)return r[u]===t;if(n.push(e),r.push(t),o){if(u=e.length,u!==t.length)return!1;for(;u--;)if(!I(e[u],t[u],n,r))return!1}else{var c,l=E.keys(e);if(u=l.length,E.keys(t).length!==u)return!1;for(;u--;)if(c=l[u],!E.has(t,c)||!I(e[c],t[c],n,r))return!1}return n.pop(),r.pop(),!0};E.isEqual=function(e,t){return I(e,t)},E.isEmpty=function(e){return null==e||(O(e)&&(E.isArray(e)||E.isString(e)||E.isArguments(e))?0===e.length:0===E.keys(e).length)},E.isElement=function(e){return!(!e||1!==e.nodeType)},E.isArray=y||function(e){return\"[object Array]\"===v.call(e)},E.isObject=function(e){var t=typeof e;return\"function\"===t||\"object\"===t&&!!e},E.each([\"Arguments\",\"Function\",\"String\",\"Number\",\"Date\",\"RegExp\",\"Error\"],function(e){E[\"is\"+e]=function(t){return v.call(t)===\"[object \"+e+\"]\"}}),E.isArguments(arguments)||(E.isArguments=function(e){return E.has(e,\"callee\")}),\"function\"!=typeof/./&&\"object\"!=typeof Int8Array&&(E.isFunction=function(e){return\"function\"==typeof e||!1}),E.isFinite=function(e){return isFinite(e)&&!isNaN(parseFloat(e))},E.isNaN=function(e){return E.isNumber(e)&&e!==+e},E.isBoolean=function(e){return e===!0||e===!1||\"[object Boolean]\"===v.call(e)},E.isNull=function(e){return null===e},E.isUndefined=function(e){return void 0===e},E.has=function(e,t){return null!=e&&g.call(e,t)},E.noConflict=function(){return u._=c,this},E.identity=function(e){return e},E.constant=function(e){return function(){return e}},E.noop=function(){},E.property=C,E.propertyOf=function(e){return null==e?function(){}:function(t){return e[t]}},E.matcher=E.matches=function(e){return e=E.extendOwn({},e),function(t){return E.isMatch(t,e)}},E.times=function(e,t,n){var r=Array(Math.max(0,e));t=T(t,n,1);for(var i=0;i<e;i++)r[i]=t(i);return r},E.random=function(e,t){return null==t&&(t=e,e=0),e+Math.floor(Math.random()*(t-e+1))},E.now=Date.now||function(){return(new Date).getTime()};var q={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#x27;\",\"`\":\"&#x60;\"},F=E.invert(q),P=function(e){var t=function(t){return e[t]},n=\"(?:\"+E.keys(e).join(\"|\")+\")\",r=RegExp(n),i=RegExp(n,\"g\");return function(e){return e=null==e?\"\":\"\"+e,r.test(e)?e.replace(i,t):e}};E.escape=P(q),E.unescape=P(F),E.result=function(e,t,n){var r=null==e?void 0:e[t];return void 0===r&&(r=n),E.isFunction(r)?r.call(e):r};var $=0;E.uniqueId=function(e){var t=++$+\"\";return e?e+t:t},E.templateSettings={evaluate:/<%([\\s\\S]+?)%>/g,interpolate:/<%=([\\s\\S]+?)%>/g,escape:/<%-([\\s\\S]+?)%>/g};var H=/(.)^/,W={\"'\":\"'\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},B=/\\\\|'|\\r|\\n|\\u2028|\\u2029/g,U=function(e){return\"\\\\\"+W[e]};E.template=function(e,t,n){!t&&n&&(t=n),t=E.defaults({},t,E.templateSettings);var r=RegExp([(t.escape||H).source,(t.interpolate||H).source,(t.evaluate||H).source].join(\"|\")+\"|$\",\"g\"),i=0,o=\"__p+='\";e.replace(r,function(t,n,r,s,a){return o+=e.slice(i,a).replace(B,U),i=a+t.length,n?o+=\"'+\\n((__t=(\"+n+\"))==null?'':_.escape(__t))+\\n'\":r?o+=\"'+\\n((__t=(\"+r+\"))==null?'':__t)+\\n'\":s&&(o+=\"';\\n\"+s+\"\\n__p+='\"),t}),o+=\"';\\n\",t.variable||(o=\"with(obj||{}){\\n\"+o+\"}\\n\"),o=\"var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\\n\"+o+\"return __p;\\n\";try{var s=new Function(t.variable||\"obj\",\"_\",o)}catch(e){throw e.source=o,e}var a=function(e){return s.call(this,e,E)},u=t.variable||\"obj\";return a.source=\"function(\"+u+\"){\\n\"+o+\"}\",a},E.chain=function(e){var t=E(e);return t._chain=!0,t};var z=function(e,t){return e._chain?E(t).chain():t};E.mixin=function(e){E.each(E.functions(e),function(t){var n=E[t]=e[t];E.prototype[t]=function(){var e=[this._wrapped];return p.apply(e,arguments),z(this,n.apply(E,e))}})},E.mixin(E),E.each([\"pop\",\"push\",\"reverse\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(e){var t=l[e];E.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),\"shift\"!==e&&\"splice\"!==e||0!==n.length||delete n[0],z(this,n)}}),E.each([\"concat\",\"join\",\"slice\"],function(e){var t=l[e];E.prototype[e]=function(){return z(this,t.apply(this._wrapped,arguments))}}),E.prototype.value=function(){return this._wrapped},E.prototype.valueOf=E.prototype.toJSON=E.prototype.value,E.prototype.toString=function(){return\"\"+this._wrapped},r=[],i=function(){return E}.apply(t,r),!(void 0!==i&&(e.exports=i))}).call(this)},function(e,t,n){var r,i;!function(t,n){\"object\"==typeof e&&\"object\"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(t)}(\"undefined\"!=typeof window?window:this,function(n,o){function s(e){var t=!!e&&\"length\"in e&&e.length,n=ce.type(e);return\"function\"!==n&&!ce.isWindow(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&t>0&&t-1 in e)}function a(e,t,n){if(ce.isFunction(t))return ce.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return ce.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(be.test(t))return ce.filter(t,e,n);t=ce.filter(t,e)}return ce.grep(e,function(e){return re.call(t,e)>-1!==n})}function u(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function c(e){var t={};return ce.each(e.match(Ae)||[],function(e,n){t[n]=!0}),t}function l(){Z.removeEventListener(\"DOMContentLoaded\",l),n.removeEventListener(\"load\",l),ce.ready()}function f(){this.expando=ce.expando+f.uid++}function h(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Re,\"-$&\").toLowerCase(),n=e.getAttribute(r),\"string\"==typeof n){try{n=\"true\"===n||\"false\"!==n&&(\"null\"===n?null:+n+\"\"===n?+n:Ne.test(n)?ce.parseJSON(n):n)}catch(e){}Oe.set(e,t,n)}else n=void 0;return n}function p(e,t,n,r){var i,o=1,s=20,a=r?function(){return r.cur()}:function(){return ce.css(e,t,\"\")},u=a(),c=n&&n[3]||(ce.cssNumber[t]?\"\":\"px\"),l=(ce.cssNumber[t]||\"px\"!==c&&+u)&&Me.exec(ce.css(e,t));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do o=o||\".5\",l/=o,ce.style(e,t,l+c);while(o!==(o=a()/u)&&1!==o&&--s)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function d(e,t){var n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[];return void 0===t||t&&ce.nodeName(e,t)?ce.merge([e],n):n}function v(e,t){for(var n=0,r=e.length;n<r;n++)je.set(e[n],\"globalEval\",!t||je.get(t[n],\"globalEval\"))}function g(e,t,n,r,i){for(var o,s,a,u,c,l,f=t.createDocumentFragment(),h=[],p=0,g=e.length;p<g;p++)if(o=e[p],o||0===o)if(\"object\"===ce.type(o))ce.merge(h,o.nodeType?[o]:o);else if(He.test(o)){for(s=s||f.appendChild(t.createElement(\"div\")),a=(Fe.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=$e[a]||$e._default,s.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],l=u[0];l--;)s=s.lastChild;ce.merge(h,s.childNodes),s=f.firstChild,s.textContent=\"\"}else h.push(t.createTextNode(o));for(f.textContent=\"\",p=0;o=h[p++];)if(r&&ce.inArray(o,r)>-1)i&&i.push(o);else if(c=ce.contains(o.ownerDocument,o),s=d(f.appendChild(o),\"script\"),c&&v(s),n)for(l=0;o=s[l++];)Pe.test(o.type||\"\")&&n.push(o);return f}function y(){return!0}function m(){return!1}function b(){try{return Z.activeElement}catch(e){}}function w(e,t,n,r,i,o){var s,a;if(\"object\"==typeof t){\"string\"!=typeof n&&(r=r||n,n=void 0);for(a in t)w(e,a,n,r,t[a],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=m;else if(!i)return e;return 1===o&&(s=i,i=function(e){return ce().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function x(e,t){return ce.nodeName(e,\"table\")&&ce.nodeName(11!==t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function E(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function T(e){var t=Xe.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function S(e,t){var n,r,i,o,s,a,u,c;if(1===t.nodeType){if(je.hasData(e)&&(o=je.access(e),s=je.set(t,o),c=o.events)){delete s.handle,s.events={};for(i in c)for(n=0,r=c[i].length;n<r;n++)ce.event.add(t,i,c[i][n])}Oe.hasData(e)&&(a=Oe.access(e),u=ce.extend({},a),Oe.set(t,u))}}function A(e,t){var n=t.nodeName.toLowerCase();\"input\"===n&&qe.test(e.type)?t.checked=e.checked:\"input\"!==n&&\"textarea\"!==n||(t.defaultValue=e.defaultValue)}function _(e,t,n,r){t=te.apply([],t);var i,o,s,a,u,c,l=0,f=e.length,h=f-1,p=t[0],v=ce.isFunction(p);if(v||f>1&&\"string\"==typeof p&&!ae.checkClone&&Je.test(p))return e.each(function(i){var o=e.eq(i);v&&(t[0]=p.call(this,i,o.html())),_(o,t,n,r)});if(f&&(i=g(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=ce.map(d(i,\"script\"),E),a=s.length;l<f;l++)u=i,l!==h&&(u=ce.clone(u,!0,!0),a&&ce.merge(s,d(u,\"script\"))),n.call(e[l],u,l);if(a)for(c=s[s.length-1].ownerDocument,ce.map(s,T),l=0;l<a;l++)u=s[l],Pe.test(u.type||\"\")&&!je.access(u,\"globalEval\")&&ce.contains(c,u)&&(u.src?ce._evalUrl&&ce._evalUrl(u.src):ce.globalEval(u.textContent.replace(Ge,\"\")))}return e}function C(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(d(r)),r.parentNode&&(n&&ce.contains(r.ownerDocument,r)&&v(d(r,\"script\")),r.parentNode.removeChild(r));return e}function k(e,t){var n=ce(t.createElement(e)).appendTo(t.body),r=ce.css(n[0],\"display\");return n.detach(),r}function j(e){var t=Z,n=Qe[e];return n||(n=k(e,t),\"none\"!==n&&n||(Ye=(Ye||ce(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(t.documentElement),t=Ye[0].contentDocument,t.write(),t.close(),n=k(e,t),Ye.detach()),Qe[e]=n),n}function O(e,t,n){var r,i,o,s,a=e.style;return n=n||et(e),s=n?n.getPropertyValue(t)||n[t]:void 0,\"\"!==s&&void 0!==s||ce.contains(e.ownerDocument,e)||(s=ce.style(e,t)),n&&!ae.pixelMarginRight()&&Ze.test(s)&&Ke.test(t)&&(r=a.width,i=a.minWidth,o=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=n.width,a.width=r,a.minWidth=i,a.maxWidth=o),void 0!==s?s+\"\":s}function N(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function R(e){if(e in at)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=st.length;n--;)if(e=st[n]+t,e in at)return e}function D(e,t,n){var r=Me.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function M(e,t,n,r,i){for(var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,s=0;o<4;o+=2)\"margin\"===n&&(s+=ce.css(e,n+Le[o],!0,i)),r?(\"content\"===n&&(s-=ce.css(e,\"padding\"+Le[o],!0,i)),\"margin\"!==n&&(s-=ce.css(e,\"border\"+Le[o]+\"Width\",!0,i))):(s+=ce.css(e,\"padding\"+Le[o],!0,i),\"padding\"!==n&&(s+=ce.css(e,\"border\"+Le[o]+\"Width\",!0,i)));return s}function L(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=et(e),s=\"border-box\"===ce.css(e,\"boxSizing\",!1,o);if(i<=0||null==i){if(i=O(e,t,o),(i<0||null==i)&&(i=e.style[t]),Ze.test(i))return i;r=s&&(ae.boxSizingReliable()||i===e.style[t]),i=parseFloat(i)||0}return i+M(e,t,n||(s?\"border\":\"content\"),r,o)+\"px\"}function I(e,t){for(var n,r,i,o=[],s=0,a=e.length;s<a;s++)r=e[s],r.style&&(o[s]=je.get(r,\"olddisplay\"),n=r.style.display,t?(o[s]||\"none\"!==n||(r.style.display=\"\"),\n\"\"===r.style.display&&Ie(r)&&(o[s]=je.access(r,\"olddisplay\",j(r.nodeName)))):(i=Ie(r),\"none\"===n&&i||je.set(r,\"olddisplay\",i?n:ce.css(r,\"display\"))));for(s=0;s<a;s++)r=e[s],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[s]||\"\":\"none\"));return e}function q(e,t,n,r,i){return new q.prototype.init(e,t,n,r,i)}function F(){return n.setTimeout(function(){ut=void 0}),ut=ce.now()}function P(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)n=Le[r],i[\"margin\"+n]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function $(e,t,n){for(var r,i=(B.tweeners[t]||[]).concat(B.tweeners[\"*\"]),o=0,s=i.length;o<s;o++)if(r=i[o].call(n,t,e))return r}function H(e,t,n){var r,i,o,s,a,u,c,l,f=this,h={},p=e.style,d=e.nodeType&&Ie(e),v=je.get(e,\"fxshow\");n.queue||(a=ce._queueHooks(e,\"fx\"),null==a.unqueued&&(a.unqueued=0,u=a.empty.fire,a.empty.fire=function(){a.unqueued||u()}),a.unqueued++,f.always(function(){f.always(function(){a.unqueued--,ce.queue(e,\"fx\").length||a.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],c=ce.css(e,\"display\"),l=\"none\"===c?je.get(e,\"olddisplay\")||j(e.nodeName):c,\"inline\"===l&&\"none\"===ce.css(e,\"float\")&&(p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",f.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],lt.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(d?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;d=!0}h[r]=v&&v[r]||ce.style(e,r)}else c=void 0;if(ce.isEmptyObject(h))\"inline\"===(\"none\"===c?j(e.nodeName):c)&&(p.display=c);else{v?\"hidden\"in v&&(d=v.hidden):v=je.access(e,\"fxshow\",{}),o&&(v.hidden=!d),d?ce(e).show():f.done(function(){ce(e).hide()}),f.done(function(){var t;je.remove(e,\"fxshow\");for(t in h)ce.style(e,t,h[t])});for(r in h)s=$(d?v[r]:0,r,f),r in v||(v[r]=s.start,d&&(s.end=s.start,s.start=\"width\"===r||\"height\"===r?1:0))}}function W(e,t){var n,r,i,o,s;for(n in e)if(r=ce.camelCase(n),i=t[r],o=e[n],ce.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),s=ce.cssHooks[r],s&&\"expand\"in s){o=s.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function B(e,t,n){var r,i,o=0,s=B.prefilters.length,a=ce.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=ut||F(),n=Math.max(0,c.startTime+c.duration-t),r=n/c.duration||0,o=1-r,s=0,u=c.tweens.length;s<u;s++)c.tweens[s].run(o);return a.notifyWith(e,[c,o,n]),o<1&&u?n:(a.resolveWith(e,[c]),!1)},c=a.promise({elem:e,props:ce.extend({},t),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},n),originalProperties:t,originalOptions:n,startTime:ut||F(),duration:n.duration,tweens:[],createTween:function(t,n){var r=ce.Tween(e,c.opts,t,n,c.opts.specialEasing[t]||c.opts.easing);return c.tweens.push(r),r},stop:function(t){var n=0,r=t?c.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)c.tweens[n].run(1);return t?(a.notifyWith(e,[c,1,0]),a.resolveWith(e,[c,t])):a.rejectWith(e,[c,t]),this}}),l=c.props;for(W(l,c.opts.specialEasing);o<s;o++)if(r=B.prefilters[o].call(c,e,l,c.opts))return ce.isFunction(r.stop)&&(ce._queueHooks(c.elem,c.opts.queue).stop=ce.proxy(r.stop,r)),r;return ce.map(l,$,c),ce.isFunction(c.opts.start)&&c.opts.start.call(e,c),ce.fx.timer(ce.extend(u,{elem:e,anim:c,queue:c.opts.queue})),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always)}function U(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function z(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(Ae)||[];if(ce.isFunction(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function V(e,t,n,r){function i(a){var u;return o[a]=!0,ce.each(e[a]||[],function(e,a){var c=a(t,n,r);return\"string\"!=typeof c||s||o[c]?s?!(u=c):void 0:(t.dataTypes.unshift(c),i(c),!1)}),u}var o={},s=e===Ot;return i(t.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function J(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}function X(e,t,n){for(var r,i,o,s,a=e.contents,u=e.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in a)if(a[i]&&a[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}s||(s=i)}o=o||s}if(o)return o!==u[0]&&u.unshift(o),n[o]}function G(e,t,n,r){var i,o,s,a,u,c={},l=e.dataTypes.slice();if(l[1])for(s in e.converters)c[s.toLowerCase()]=e.converters[s];for(o=l.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=l.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(s=c[u+\" \"+o]||c[\"* \"+o],!s)for(i in c)if(a=i.split(\" \"),a[1]===o&&(s=c[u+\" \"+a[0]]||c[\"* \"+a[0]])){s===!0?s=c[i]:c[i]!==!0&&(o=a[0],l.unshift(a[1]));break}if(s!==!0)if(s&&e.throws)t=s(t);else try{t=s(t)}catch(e){return{state:\"parsererror\",error:s?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}function Y(e,t,n,r){var i;if(ce.isArray(t))ce.each(t,function(t,i){n||Mt.test(e)?r(e,i):Y(e+\"[\"+(\"object\"==typeof i&&null!=i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==ce.type(t))r(e,t);else for(i in t)Y(e+\"[\"+i+\"]\",t[i],n,r)}function Q(e){return ce.isWindow(e)?e:9===e.nodeType&&e.defaultView}var K=[],Z=n.document,ee=K.slice,te=K.concat,ne=K.push,re=K.indexOf,ie={},oe=ie.toString,se=ie.hasOwnProperty,ae={},ue=\"2.2.4\",ce=function(e,t){return new ce.fn.init(e,t)},le=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,fe=/^-ms-/,he=/-([\\da-z])/gi,pe=function(e,t){return t.toUpperCase()};ce.fn=ce.prototype={jquery:ue,constructor:ce,selector:\"\",length:0,toArray:function(){return ee.call(this)},get:function(e){return null!=e?e<0?this[e+this.length]:this[e]:ee.call(this)},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e){return ce.each(this,e)},map:function(e){return this.pushStack(ce.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ee.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ne,sort:K.sort,splice:K.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[a]||{},a++),\"object\"==typeof s||ce.isFunction(s)||(s={}),a===u&&(s=this,a--);a<u;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(c&&r&&(ce.isPlainObject(r)||(i=ce.isArray(r)))?(i?(i=!1,o=n&&ce.isArray(n)?n:[]):o=n&&ce.isPlainObject(n)?n:{},s[t]=ce.extend(c,o,r)):void 0!==r&&(s[t]=r));return s},ce.extend({expando:\"jQuery\"+(ue+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return\"function\"===ce.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){var t=e&&e.toString();return!ce.isArray(e)&&t-parseFloat(t)+1>=0},isPlainObject:function(e){var t;if(\"object\"!==ce.type(e)||e.nodeType||ce.isWindow(e))return!1;if(e.constructor&&!se.call(e,\"constructor\")&&!se.call(e.constructor.prototype||{},\"isPrototypeOf\"))return!1;for(t in e);return void 0===t||se.call(e,t)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?ie[oe.call(e)]||\"object\":typeof e},globalEval:function(e){var t,n=eval;e=ce.trim(e),e&&(1===e.indexOf(\"use strict\")?(t=Z.createElement(\"script\"),t.text=e,Z.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(fe,\"ms-\").replace(he,pe)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t){var n,r=0;if(s(e))for(n=e.length;r<n&&t.call(e[r],r,e[r])!==!1;r++);else for(r in e)if(t.call(e[r],r,e[r])===!1)break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(le,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(s(Object(e))?ce.merge(n,\"string\"==typeof e?[e]:e):ne.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:re.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,s=e.length,a=!n;o<s;o++)r=!t(e[o],o),r!==a&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,a=[];if(s(e))for(r=e.length;o<r;o++)i=t(e[o],o,n),null!=i&&a.push(i);else for(o in e)i=t(e[o],o,n),null!=i&&a.push(i);return te.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),ce.isFunction(e))return r=ee.call(arguments,2),i=function(){return e.apply(t||this,r.concat(ee.call(arguments)))},i.guid=e.guid=e.guid||ce.guid++,i},now:Date.now,support:ae}),\"function\"==typeof Symbol&&(ce.fn[Symbol.iterator]=K[Symbol.iterator]),ce.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){ie[\"[object \"+t+\"]\"]=t.toLowerCase()});var de=function(e){function t(e,t,n,r){var i,o,s,a,u,c,f,p,d=t&&t.ownerDocument,v=t?t.nodeType:9;if(n=n||[],\"string\"!=typeof e||!e||1!==v&&9!==v&&11!==v)return n;if(!r&&((t?t.ownerDocument||t:$)!==R&&N(t),t=t||R,M)){if(11!==v&&(c=ye.exec(e)))if(i=c[1]){if(9===v){if(!(s=t.getElementById(i)))return n;if(s.id===i)return n.push(s),n}else if(d&&(s=d.getElementById(i))&&F(t,s)&&s.id===i)return n.push(s),n}else{if(c[2])return K.apply(n,t.getElementsByTagName(e)),n;if((i=c[3])&&x.getElementsByClassName&&t.getElementsByClassName)return K.apply(n,t.getElementsByClassName(i)),n}if(x.qsa&&!z[e+\" \"]&&(!L||!L.test(e))){if(1!==v)d=t,p=e;else if(\"object\"!==t.nodeName.toLowerCase()){for((a=t.getAttribute(\"id\"))?a=a.replace(be,\"\\\\$&\"):t.setAttribute(\"id\",a=P),f=A(e),o=f.length,u=he.test(a)?\"#\"+a:\"[id='\"+a+\"']\";o--;)f[o]=u+\" \"+h(f[o]);p=f.join(\",\"),d=me.test(e)&&l(t.parentNode)||t}if(p)try{return K.apply(n,d.querySelectorAll(p)),n}catch(e){}finally{a===P&&t.removeAttribute(\"id\")}}}return C(e.replace(ae,\"$1\"),t,n,r)}function n(){function e(n,r){return t.push(n+\" \")>E.cacheLength&&delete e[t.shift()],e[n+\" \"]=r}var t=[];return e}function r(e){return e[P]=!0,e}function i(e){var t=R.createElement(\"div\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split(\"|\"),r=n.length;r--;)E.attrHandle[n[r]]=t}function s(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||J)-(~e.sourceIndex||J);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function a(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function u(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function c(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),s=o.length;s--;)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}function l(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}function f(){}function h(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,i=n&&\"parentNode\"===r,o=W++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,s){var a,u,c,l=[H,o];if(s){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,s))return!0}else for(;t=t[r];)if(1===t.nodeType||i){if(c=t[P]||(t[P]={}),u=c[t.uniqueID]||(c[t.uniqueID]={}),(a=u[r])&&a[0]===H&&a[1]===o)return l[2]=a[2];if(u[r]=l,l[2]=e(t,n,s))return!0}}}function d(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function v(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}function g(e,t,n,r,i){for(var o,s=[],a=0,u=e.length,c=null!=t;a<u;a++)(o=e[a])&&(n&&!n(o,r,i)||(s.push(o),c&&t.push(a)));return s}function y(e,t,n,i,o,s){return i&&!i[P]&&(i=y(i)),o&&!o[P]&&(o=y(o,s)),r(function(r,s,a,u){var c,l,f,h=[],p=[],d=s.length,y=r||v(t||\"*\",a.nodeType?[a]:a,[]),m=!e||!r&&t?y:g(y,h,e,a,u),b=n?o||(r?e:d||i)?[]:s:m;if(n&&n(m,b,a,u),i)for(c=g(b,p),i(c,[],a,u),l=c.length;l--;)(f=c[l])&&(b[p[l]]=!(m[p[l]]=f));if(r){if(o||e){if(o){for(c=[],l=b.length;l--;)(f=b[l])&&c.push(m[l]=f);o(null,b=[],c,u)}for(l=b.length;l--;)(f=b[l])&&(c=o?ee(r,f):h[l])>-1&&(r[c]=!(s[c]=f))}}else b=g(b===s?b.splice(d,b.length):b),o?o(null,s,b,u):K.apply(s,b)})}function m(e){for(var t,n,r,i=e.length,o=E.relative[e[0].type],s=o||E.relative[\" \"],a=o?1:0,u=p(function(e){return e===t},s,!0),c=p(function(e){return ee(t,e)>-1},s,!0),l=[function(e,n,r){var i=!o&&(r||n!==k)||((t=n).nodeType?u(e,n,r):c(e,n,r));return t=null,i}];a<i;a++)if(n=E.relative[e[a].type])l=[p(d(l),n)];else{if(n=E.filter[e[a].type].apply(null,e[a].matches),n[P]){for(r=++a;r<i&&!E.relative[e[r].type];r++);return y(a>1&&d(l),a>1&&h(e.slice(0,a-1).concat({value:\" \"===e[a-2].type?\"*\":\"\"})).replace(ae,\"$1\"),n,a<r&&m(e.slice(a,r)),r<i&&m(e=e.slice(r)),r<i&&h(e))}l.push(n)}return d(l)}function b(e,n){var i=n.length>0,o=e.length>0,s=function(r,s,a,u,c){var l,f,h,p=0,d=\"0\",v=r&&[],y=[],m=k,b=r||o&&E.find.TAG(\"*\",c),w=H+=null==m?1:Math.random()||.1,x=b.length;for(c&&(k=s===R||s||c);d!==x&&null!=(l=b[d]);d++){if(o&&l){for(f=0,s||l.ownerDocument===R||(N(l),a=!M);h=e[f++];)if(h(l,s||R,a)){u.push(l);break}c&&(H=w)}i&&((l=!h&&l)&&p--,r&&v.push(l))}if(p+=d,i&&d!==p){for(f=0;h=n[f++];)h(v,y,s,a);if(r){if(p>0)for(;d--;)v[d]||y[d]||(y[d]=Y.call(u));y=g(y)}K.apply(u,y),c&&!r&&y.length>0&&p+n.length>1&&t.uniqueSort(u)}return c&&(H=w,k=m),v};return i?r(s):s}var w,x,E,T,S,A,_,C,k,j,O,N,R,D,M,L,I,q,F,P=\"sizzle\"+1*new Date,$=e.document,H=0,W=0,B=n(),U=n(),z=n(),V=function(e,t){return e===t&&(O=!0),0},J=1<<31,X={}.hasOwnProperty,G=[],Y=G.pop,Q=G.push,K=G.push,Z=G.slice,ee=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},te=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ne=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",re=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ie=\"\\\\[\"+ne+\"*(\"+re+\")(?:\"+ne+\"*([*^$|!~]?=)\"+ne+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+re+\"))|)\"+ne+\"*\\\\]\",oe=\":(\"+re+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ie+\")*)|.*)\\\\)|)\",se=new RegExp(ne+\"+\",\"g\"),ae=new RegExp(\"^\"+ne+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ne+\"+$\",\"g\"),ue=new RegExp(\"^\"+ne+\"*,\"+ne+\"*\"),ce=new RegExp(\"^\"+ne+\"*([>+~]|\"+ne+\")\"+ne+\"*\"),le=new RegExp(\"=\"+ne+\"*([^\\\\]'\\\"]*?)\"+ne+\"*\\\\]\",\"g\"),fe=new RegExp(oe),he=new RegExp(\"^\"+re+\"$\"),pe={ID:new RegExp(\"^#(\"+re+\")\"),CLASS:new RegExp(\"^\\\\.(\"+re+\")\"),TAG:new RegExp(\"^(\"+re+\"|[*])\"),ATTR:new RegExp(\"^\"+ie),PSEUDO:new RegExp(\"^\"+oe),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ne+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ne+\"*(?:([+-]|)\"+ne+\"*(\\\\d+)|))\"+ne+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+te+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ne+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ne+\"*((?:-\\\\d)?\\\\d*)\"+ne+\"*\\\\)|)(?=[^-]|$)\",\"i\")},de=/^(?:input|select|textarea|button)$/i,ve=/^h\\d$/i,ge=/^[^{]+\\{\\s*\\[native \\w/,ye=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,me=/[+~]/,be=/'|\\\\/g,we=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ne+\"?|(\"+ne+\")|.)\",\"ig\"),xe=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},Ee=function(){N()};try{K.apply(G=Z.call($.childNodes),$.childNodes),G[$.childNodes.length].nodeType}catch(e){K={apply:G.length?function(e,t){Q.apply(e,Z.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}x=t.support={},S=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&\"HTML\"!==t.nodeName},N=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:$;return r!==R&&9===r.nodeType&&r.documentElement?(R=r,D=R.documentElement,M=!S(R),(n=R.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",Ee,!1):n.attachEvent&&n.attachEvent(\"onunload\",Ee)),x.attributes=i(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),x.getElementsByTagName=i(function(e){return e.appendChild(R.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),x.getElementsByClassName=ge.test(R.getElementsByClassName),x.getById=i(function(e){return D.appendChild(e).id=P,!R.getElementsByName||!R.getElementsByName(P).length}),x.getById?(E.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&M){var n=t.getElementById(e);return n?[n]:[]}},E.filter.ID=function(e){var t=e.replace(we,xe);return function(e){return e.getAttribute(\"id\")===t}}):(delete E.find.ID,E.filter.ID=function(e){var t=e.replace(we,xe);return function(e){var n=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return n&&n.value===t}}),E.find.TAG=x.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):x.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},E.find.CLASS=x.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&M)return t.getElementsByClassName(e)},I=[],L=[],(x.qsa=ge.test(R.querySelectorAll))&&(i(function(e){D.appendChild(e).innerHTML=\"<a id='\"+P+\"'></a><select id='\"+P+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&L.push(\"[*^$]=\"+ne+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||L.push(\"\\\\[\"+ne+\"*(?:value|\"+te+\")\"),e.querySelectorAll(\"[id~=\"+P+\"-]\").length||L.push(\"~=\"),e.querySelectorAll(\":checked\").length||L.push(\":checked\"),e.querySelectorAll(\"a#\"+P+\"+*\").length||L.push(\".#.+[+~]\")}),i(function(e){var t=R.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&L.push(\"name\"+ne+\"*[*^$|!~]?=\"),e.querySelectorAll(\":enabled\").length||L.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),L.push(\",.*:\")})),(x.matchesSelector=ge.test(q=D.matches||D.webkitMatchesSelector||D.mozMatchesSelector||D.oMatchesSelector||D.msMatchesSelector))&&i(function(e){x.disconnectedMatch=q.call(e,\"div\"),q.call(e,\"[s!='']:x\"),I.push(\"!=\",oe)}),L=L.length&&new RegExp(L.join(\"|\")),I=I.length&&new RegExp(I.join(\"|\")),t=ge.test(D.compareDocumentPosition),F=t||ge.test(D.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},V=t?function(e,t){if(e===t)return O=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n?n:(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!x.sortDetached&&t.compareDocumentPosition(e)===n?e===R||e.ownerDocument===$&&F($,e)?-1:t===R||t.ownerDocument===$&&F($,t)?1:j?ee(j,e)-ee(j,t):0:4&n?-1:1)}:function(e,t){if(e===t)return O=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],u=[t];if(!i||!o)return e===R?-1:t===R?1:i?-1:o?1:j?ee(j,e)-ee(j,t):0;if(i===o)return s(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;a[r]===u[r];)r++;return r?s(a[r],u[r]):a[r]===$?-1:u[r]===$?1:0},R):R},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==R&&N(e),n=n.replace(le,\"='$1']\"),x.matchesSelector&&M&&!z[n+\" \"]&&(!I||!I.test(n))&&(!L||!L.test(n)))try{var r=q.call(e,n);if(r||x.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,R,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==R&&N(e),F(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==R&&N(e);var n=E.attrHandle[t.toLowerCase()],r=n&&X.call(E.attrHandle,t.toLowerCase())?n(e,t,!M):void 0;return void 0!==r?r:x.attributes||!M?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(O=!x.detectDuplicates,j=!x.sortStable&&e.slice(0),e.sort(V),O){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return j=null,e},T=t.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=T(t);return n},E=t.selectors={cacheLength:50,createPseudo:r,match:pe,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(we,xe),e[3]=(e[3]||e[4]||e[5]||\"\").replace(we,xe),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&fe.test(n)&&(t=A(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(we,xe).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=B[e+\" \"];return t||(t=new RegExp(\"(^|\"+ne+\")\"+e+\"(\"+ne+\"|$)\"))&&B(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?\"!=\"===n:!n||(o+=\"\",\"=\"===n?o===r:\"!=\"===n?o!==r:\"^=\"===n?r&&0===o.indexOf(r):\"*=\"===n?r&&o.indexOf(r)>-1:\"$=\"===n?r&&o.slice(-r.length)===r:\"~=\"===n?(\" \"+o.replace(se,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(o===r||o.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),s=\"last\"!==e.slice(-4),a=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var c,l,f,h,p,d,v=o!==s?\"nextSibling\":\"previousSibling\",g=t.parentNode,y=a&&t.nodeName.toLowerCase(),m=!u&&!a,b=!1;if(g){if(o){for(;v;){for(h=t;h=h[v];)if(a?h.nodeName.toLowerCase()===y:1===h.nodeType)return!1;d=v=\"only\"===e&&!d&&\"nextSibling\"}return!0}if(d=[s?g.firstChild:g.lastChild],s&&m){for(h=g,f=h[P]||(h[P]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),c=l[e]||[],p=c[0]===H&&c[1],b=p&&c[2],h=p&&g.childNodes[p];h=++p&&h&&h[v]||(b=p=0)||d.pop();)if(1===h.nodeType&&++b&&h===t){l[e]=[H,p,b];break}}else if(m&&(h=t,f=h[P]||(h[P]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),c=l[e]||[],p=c[0]===H&&c[1],b=p),b===!1)for(;(h=++p&&h&&h[v]||(b=p=0)||d.pop())&&((a?h.nodeName.toLowerCase()!==y:1!==h.nodeType)||!++b||(m&&(f=h[P]||(h[P]={}),l=f[h.uniqueID]||(f[h.uniqueID]={}),l[e]=[H,b]),h!==t)););return b-=i,b===r||b%r===0&&b/r>=0}}},PSEUDO:function(e,n){var i,o=E.pseudos[e]||E.setFilters[e.toLowerCase()]||t.error(\"unsupported pseudo: \"+e);return o[P]?o(n):o.length>1?(i=[e,e,\"\",n],E.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),s=i.length;s--;)r=ee(e,i[s]),e[r]=!(t[r]=i[s])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=_(e.replace(ae,\"$1\"));return i[P]?r(function(e,t,n,r){for(var o,s=i(e,null,r,[]),a=e.length;a--;)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(we,xe),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:r(function(e){return he.test(e||\"\")||t.error(\"unsupported lang: \"+e),e=e.replace(we,xe).toLowerCase(),function(t){var n;do if(n=M?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===D},focus:function(e){return e===R.activeElement&&(!R.hasFocus||R.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!E.pseudos.empty(e)},header:function(e){return ve.test(e.nodeName)},input:function(e){return de.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[n<0?n+t:n]}),even:c(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},E.pseudos.nth=E.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})E.pseudos[w]=a(w);for(w in{submit:!0,reset:!0})E.pseudos[w]=u(w);return f.prototype=E.filters=E.pseudos,E.setFilters=new f,A=t.tokenize=function(e,n){var r,i,o,s,a,u,c,l=U[e+\" \"];if(l)return n?0:l.slice(0);for(a=e,u=[],c=E.preFilter;a;){r&&!(i=ue.exec(a))||(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),r=!1,(i=ce.exec(a))&&(r=i.shift(),o.push({value:r,type:i[0].replace(ae,\" \")}),a=a.slice(r.length));for(s in E.filter)!(i=pe[s].exec(a))||c[s]&&!(i=c[s](i))||(r=i.shift(),o.push({value:r,type:s,matches:i}),a=a.slice(r.length));if(!r)break}return n?a.length:a?t.error(e):U(e,u).slice(0)},_=t.compile=function(e,t){var n,r=[],i=[],o=z[e+\" \"];if(!o){for(t||(t=A(e)),n=t.length;n--;)o=m(t[n]),o[P]?r.push(o):i.push(o);o=z(e,b(i,r)),o.selector=e}return o},C=t.select=function(e,t,n,r){var i,o,s,a,u,c=\"function\"==typeof e&&e,f=!r&&A(e=c.selector||e);if(n=n||[],1===f.length){if(o=f[0]=f[0].slice(0),o.length>2&&\"ID\"===(s=o[0]).type&&x.getById&&9===t.nodeType&&M&&E.relative[o[1].type]){if(t=(E.find.ID(s.matches[0].replace(we,xe),t)||[])[0],!t)return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=pe.needsContext.test(e)?0:o.length;i--&&(s=o[i],!E.relative[a=s.type]);)if((u=E.find[a])&&(r=u(s.matches[0].replace(we,xe),me.test(o[0].type)&&l(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&h(o),!e)return K.apply(n,r),n;break}}return(c||_(e,f))(r,t,!M,n,!t||me.test(e)&&l(t.parentNode)||t),n},x.sortStable=P.split(\"\").sort(V).join(\"\")===P,x.detectDuplicates=!!O,N(),x.sortDetached=i(function(e){return 1&e.compareDocumentPosition(R.createElement(\"div\"))}),i(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||o(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),x.attributes&&i(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||o(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute(\"disabled\")})||o(te,function(e,t,n){var r;if(!n)return e[t]===!0?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(n);ce.find=de,ce.expr=de.selectors,ce.expr[\":\"]=ce.expr.pseudos,ce.uniqueSort=ce.unique=de.uniqueSort,ce.text=de.getText,ce.isXMLDoc=de.isXML,ce.contains=de.contains;var ve=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},ge=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},ye=ce.expr.match.needsContext,me=/^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/,be=/^.[^:#\\[\\.,]*$/;ce.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n=this.length,r=[],i=this;if(\"string\"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<n;t++)if(ce.contains(i[t],this))return!0}));for(t=0;t<n;t++)ce.find(e,i[t],r);return r=this.pushStack(n>1?ce.unique(r):r),r.selector=this.selector?this.selector+\" \"+e:e,r},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,\"string\"==typeof e&&ye.test(e)?ce(e):e||[],!1).length}});var we,xe=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,Ee=ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||we,\"string\"==typeof e){if(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&e.length>=3?[null,e,null]:xe.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:Z,!0)),me.test(r[1])&&ce.isPlainObject(t))for(r in t)ce.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=Z.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=Z,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):ce.isFunction(e)?void 0!==n.ready?n.ready(e):e(ce):(void 0!==e.selector&&(this.selector=e.selector,this.context=e.context),ce.makeArray(e,this))};Ee.prototype=ce.fn,we=ce(Z);var Te=/^(?:parents|prev(?:Until|All))/,Se={children:!0,contents:!0,next:!0,prev:!0};ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){for(var n,r=0,i=this.length,o=[],s=ye.test(e)||\"string\"!=typeof e?ce(e,t||this.context):0;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(s?s.index(n)>-1:1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?ce.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?re.call(ce(e),this[0]):re.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return ve(e,\"parentNode\")},parentsUntil:function(e,t,n){return ve(e,\"parentNode\",n)},next:function(e){return u(e,\"nextSibling\")},prev:function(e){return u(e,\"previousSibling\")},nextAll:function(e){return ve(e,\"nextSibling\")},prevAll:function(e){return ve(e,\"previousSibling\")},nextUntil:function(e,t,n){return ve(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return ve(e,\"previousSibling\",n)},siblings:function(e){return ge((e.parentNode||{}).firstChild,e)},children:function(e){return ge(e.firstChild)},contents:function(e){return e.contentDocument||ce.merge([],e.childNodes)}},function(e,t){ce.fn[e]=function(n,r){var i=ce.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=ce.filter(r,i)),this.length>1&&(Se[e]||ce.uniqueSort(i),Te.test(e)&&i.reverse()),this.pushStack(i)}});var Ae=/\\S+/g;ce.Callbacks=function(e){e=\"string\"==typeof e?c(e):ce.extend({},e);var t,n,r,i,o=[],s=[],a=-1,u=function(){for(i=e.once,r=t=!0;s.length;a=-1)for(n=s.shift();++a<o.length;)o[a].apply(n[0],n[1])===!1&&e.stopOnFalse&&(a=o.length,n=!1);e.memory||(n=!1),t=!1,i&&(o=n?[]:\"\")},l={add:function(){return o&&(n&&!t&&(a=o.length-1,s.push(n)),function t(n){ce.each(n,function(n,r){ce.isFunction(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&\"string\"!==ce.type(r)&&t(r);\n})}(arguments),n&&!t&&u()),this},remove:function(){return ce.each(arguments,function(e,t){for(var n;(n=ce.inArray(t,o,n))>-1;)o.splice(n,1),n<=a&&a--}),this},has:function(e){return e?ce.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=s=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=s=[],n||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},ce.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",ce.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",ce.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",ce.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return ce.Deferred(function(n){ce.each(t,function(t,o){var s=ce.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&ce.isFunction(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[o[0]+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?ce.extend(e,r):r}},i={};return r.pipe=r.then,ce.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=ee.call(arguments),s=o.length,a=1!==s||e&&ce.isFunction(e.promise)?s:0,u=1===a?e:ce.Deferred(),c=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?ee.call(arguments):i,r===t?u.notifyWith(n,r):--a||u.resolveWith(n,r)}};if(s>1)for(t=new Array(s),n=new Array(s),r=new Array(s);i<s;i++)o[i]&&ce.isFunction(o[i].promise)?o[i].promise().progress(c(i,n,t)).done(c(i,r,o)).fail(u.reject):--a;return a||u.resolveWith(r,o),u.promise()}});var _e;ce.fn.ready=function(e){return ce.ready.promise().done(e),this},ce.extend({isReady:!1,readyWait:1,holdReady:function(e){e?ce.readyWait++:ce.ready(!0)},ready:function(e){(e===!0?--ce.readyWait:ce.isReady)||(ce.isReady=!0,e!==!0&&--ce.readyWait>0||(_e.resolveWith(Z,[ce]),ce.fn.triggerHandler&&(ce(Z).triggerHandler(\"ready\"),ce(Z).off(\"ready\"))))}}),ce.ready.promise=function(e){return _e||(_e=ce.Deferred(),\"complete\"===Z.readyState||\"loading\"!==Z.readyState&&!Z.documentElement.doScroll?n.setTimeout(ce.ready):(Z.addEventListener(\"DOMContentLoaded\",l),n.addEventListener(\"load\",l))),_e.promise(e)},ce.ready.promise();var Ce=function(e,t,n,r,i,o,s){var a=0,u=e.length,c=null==n;if(\"object\"===ce.type(n)){i=!0;for(a in n)Ce(e,t,a,n[a],!0,o,s)}else if(void 0!==r&&(i=!0,ce.isFunction(r)||(s=!0),c&&(s?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(ce(e),n)})),t))for(;a<u;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:c?t.call(e):u?t(e[0],n):o},ke=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};f.uid=1,f.prototype={register:function(e,t){var n=t||{};return e.nodeType?e[this.expando]=n:Object.defineProperty(e,this.expando,{value:n,writable:!0,configurable:!0}),e[this.expando]},cache:function(e){if(!ke(e))return{};var t=e[this.expando];return t||(t={},ke(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[t]=n;else for(r in t)i[r]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][t]},access:function(e,t,n){var r;return void 0===t||t&&\"string\"==typeof t&&void 0===n?(r=this.get(e,t),void 0!==r?r:this.get(e,ce.camelCase(t))):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r,i,o=e[this.expando];if(void 0!==o){if(void 0===t)this.register(e);else{ce.isArray(t)?r=t.concat(t.map(ce.camelCase)):(i=ce.camelCase(t),t in o?r=[t,i]:(r=i,r=r in o?[r]:r.match(Ae)||[])),n=r.length;for(;n--;)delete o[r[n]]}(void 0===t||ce.isEmptyObject(o))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var je=new f,Oe=new f,Ne=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Re=/[A-Z]/g;ce.extend({hasData:function(e){return Oe.hasData(e)||je.hasData(e)},data:function(e,t,n){return Oe.access(e,t,n)},removeData:function(e,t){Oe.remove(e,t)},_data:function(e,t,n){return je.access(e,t,n)},_removeData:function(e,t){je.remove(e,t)}}),ce.fn.extend({data:function(e,t){var n,r,i,o=this[0],s=o&&o.attributes;if(void 0===e){if(this.length&&(i=Oe.get(o),1===o.nodeType&&!je.get(o,\"hasDataAttrs\"))){for(n=s.length;n--;)s[n]&&(r=s[n].name,0===r.indexOf(\"data-\")&&(r=ce.camelCase(r.slice(5)),h(o,r,i[r])));je.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof e?this.each(function(){Oe.set(this,e)}):Ce(this,function(t){var n,r;if(o&&void 0===t){if(n=Oe.get(o,e)||Oe.get(o,e.replace(Re,\"-$&\").toLowerCase()),void 0!==n)return n;if(r=ce.camelCase(e),n=Oe.get(o,r),void 0!==n)return n;if(n=h(o,r,void 0),void 0!==n)return n}else r=ce.camelCase(e),this.each(function(){var n=Oe.get(this,r);Oe.set(this,r,t),e.indexOf(\"-\")>-1&&void 0!==n&&Oe.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Oe.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=je.get(e,t),n&&(!r||ce.isArray(n)?r=je.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t),s=function(){ce.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return je.get(e,n)||je.access(e,n,{empty:ce.Callbacks(\"once memory\").add(function(){je.remove(e,[t+\"queue\",n])})})}}),ce.fn.extend({queue:function(e,t){var n=2;return\"string\"!=typeof e&&(t=e,e=\"fx\",n--),arguments.length<n?ce.queue(this[0],e):void 0===t?this:this.each(function(){var n=ce.queue(this,e,t);ce._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==n[0]&&ce.dequeue(this,e)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";s--;)n=je.get(o[s],e+\"queueHooks\"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var De=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Me=new RegExp(\"^(?:([+-])=|)(\"+De+\")([a-z%]*)$\",\"i\"),Le=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Ie=function(e,t){return e=t||e,\"none\"===ce.css(e,\"display\")||!ce.contains(e.ownerDocument,e)},qe=/^(?:checkbox|radio)$/i,Fe=/<([\\w:-]+)/,Pe=/^$|\\/(?:java|ecma)script/i,$e={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};$e.optgroup=$e.option,$e.tbody=$e.tfoot=$e.colgroup=$e.caption=$e.thead,$e.th=$e.td;var He=/<|&#?\\w+;/;!function(){var e=Z.createDocumentFragment(),t=e.appendChild(Z.createElement(\"div\")),n=Z.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),t.appendChild(n),ae.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML=\"<textarea>x</textarea>\",ae.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var We=/^key/,Be=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ue=/^([^.]*)(?:\\.(.+)|)/;ce.event={global:{},add:function(e,t,n,r,i){var o,s,a,u,c,l,f,h,p,d,v,g=je.get(e);if(g)for(n.handler&&(o=n,n=o.handler,i=o.selector),n.guid||(n.guid=ce.guid++),(u=g.events)||(u=g.events={}),(s=g.handle)||(s=g.handle=function(t){return\"undefined\"!=typeof ce&&ce.event.triggered!==t.type?ce.event.dispatch.apply(e,arguments):void 0}),t=(t||\"\").match(Ae)||[\"\"],c=t.length;c--;)a=Ue.exec(t[c])||[],p=v=a[1],d=(a[2]||\"\").split(\".\").sort(),p&&(f=ce.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=ce.event.special[p]||{},l=ce.extend({type:p,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:d.join(\".\")},o),(h=u[p])||(h=u[p]=[],h.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(p,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,l):h.push(l),ce.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,s,a,u,c,l,f,h,p,d,v,g=je.hasData(e)&&je.get(e);if(g&&(u=g.events)){for(t=(t||\"\").match(Ae)||[\"\"],c=t.length;c--;)if(a=Ue.exec(t[c])||[],p=v=a[1],d=(a[2]||\"\").split(\".\").sort(),p){for(f=ce.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,h=u[p]||[],a=a[2]&&new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),s=o=h.length;o--;)l=h[o],!i&&v!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&(\"**\"!==r||!l.selector)||(h.splice(o,1),l.selector&&h.delegateCount--,f.remove&&f.remove.call(e,l));s&&!h.length&&(f.teardown&&f.teardown.call(e,d,g.handle)!==!1||ce.removeEvent(e,p,g.handle),delete u[p])}else for(p in u)ce.event.remove(e,p+t[c],n,r,!0);ce.isEmptyObject(u)&&je.remove(e,\"handle events\")}},dispatch:function(e){e=ce.event.fix(e);var t,n,r,i,o,s=[],a=ee.call(arguments),u=(je.get(this,\"events\")||{})[e.type]||[],c=ce.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=ce.event.handlers.call(this,e,u),t=0;(i=s[t++])&&!e.isPropagationStopped();)for(e.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!e.isImmediatePropagationStopped();)e.rnamespace&&!e.rnamespace.test(o.namespace)||(e.handleObj=o,e.data=o.data,r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),void 0!==r&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(\"click\"!==e.type||isNaN(e.button)||e.button<1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(r=[],n=0;n<a;n++)o=t[n],i=o.selector+\" \",void 0===r[i]&&(r[i]=o.needsContext?ce(i,this).index(u)>-1:ce.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return a<t.length&&s.push({elem:this,handlers:t.slice(a)}),s},props:\"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,t){var n,r,i,o=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||Z,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||void 0===o||(e.which=1&o?1:2&o?3:4&o?2:0),e}},fix:function(e){if(e[ce.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];for(s||(this.fixHooks[i]=s=Be.test(i)?this.mouseHooks:We.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new ce.Event(o),t=r.length;t--;)n=r[t],e[n]=o[n];return e.target||(e.target=Z),3===e.target.nodeType&&(e.target=e.target.parentNode),s.filter?s.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==b()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===b()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&ce.nodeName(this,\"input\"))return this.click(),!1},_default:function(e){return ce.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){return this instanceof ce.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&e.returnValue===!1?y:m):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||ce.now(),void(this[ce.expando]=!0)):new ce.Event(e,t)},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:m,isPropagationStopped:m,isImmediatePropagationStopped:m,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=y,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=y,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=y,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,t){ce.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||ce.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),ce.fn.extend({on:function(e,t,n,r){return w(this,e,t,n,r)},one:function(e,t,n,r){return w(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return t!==!1&&\"function\"!=typeof t||(n=t,t=void 0),n===!1&&(n=m),this.each(function(){ce.event.remove(this,e,n,t)})}});var ze=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,Ve=/<script|<style|<link/i,Je=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Xe=/^true\\/(.*)/,Ge=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;ce.extend({htmlPrefilter:function(e){return e.replace(ze,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=ce.contains(e.ownerDocument,e);if(!(ae.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(s=d(a),o=d(e),r=0,i=o.length;r<i;r++)A(o[r],s[r]);if(t)if(n)for(o=o||d(e),s=s||d(a),r=0,i=o.length;r<i;r++)S(o[r],s[r]);else S(e,a);return s=d(a,\"script\"),s.length>0&&v(s,!u&&d(e,\"script\")),a},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if(ke(n)){if(t=n[je.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[je.expando]=void 0}n[Oe.expando]&&(n[Oe.expando]=void 0)}}}),ce.fn.extend({domManip:_,detach:function(e){return C(this,e,!0)},remove:function(e){return C(this,e)},text:function(e){return Ce(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return _(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=x(this,e);t.appendChild(e)}})},prepend:function(){return _(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=x(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return _(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return _(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(d(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return Ce(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!Ve.test(e)&&!$e[(Fe.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(ce.cleanData(d(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return _(this,arguments,function(t){var n=this.parentNode;ce.inArray(this,e)<0&&(ce.cleanData(d(this)),n&&n.replaceChild(t,this))},e)}}),ce.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){ce.fn[e]=function(e){for(var n,r=[],i=ce(e),o=i.length-1,s=0;s<=o;s++)n=s===o?this:this.clone(!0),ce(i[s])[t](n),ne.apply(r,n.get());return this.pushStack(r)}});var Ye,Qe={HTML:\"block\",BODY:\"block\"},Ke=/^margin/,Ze=new RegExp(\"^(\"+De+\")(?!px)[a-z%]+$\",\"i\"),et=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=n),t.getComputedStyle(e)},tt=function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i},nt=Z.documentElement;!function(){function e(){a.style.cssText=\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",a.innerHTML=\"\",nt.appendChild(s);var e=n.getComputedStyle(a);t=\"1%\"!==e.top,o=\"2px\"===e.marginLeft,r=\"4px\"===e.width,a.style.marginRight=\"50%\",i=\"4px\"===e.marginRight,nt.removeChild(s)}var t,r,i,o,s=Z.createElement(\"div\"),a=Z.createElement(\"div\");a.style&&(a.style.backgroundClip=\"content-box\",a.cloneNode(!0).style.backgroundClip=\"\",ae.clearCloneStyle=\"content-box\"===a.style.backgroundClip,s.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",s.appendChild(a),ce.extend(ae,{pixelPosition:function(){return e(),t},boxSizingReliable:function(){return null==r&&e(),r},pixelMarginRight:function(){return null==r&&e(),i},reliableMarginLeft:function(){return null==r&&e(),o},reliableMarginRight:function(){var e,t=a.appendChild(Z.createElement(\"div\"));return t.style.cssText=a.style.cssText=\"-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",t.style.marginRight=t.style.width=\"0\",a.style.width=\"1px\",nt.appendChild(s),e=!parseFloat(n.getComputedStyle(t).marginRight),nt.removeChild(s),a.removeChild(t),e}}))}();var rt=/^(none|table(?!-c[ea]).+)/,it={position:\"absolute\",visibility:\"hidden\",display:\"block\"},ot={letterSpacing:\"0\",fontWeight:\"400\"},st=[\"Webkit\",\"O\",\"Moz\",\"ms\"],at=Z.createElement(\"div\").style;ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=O(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:\"cssFloat\"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=ce.camelCase(t),u=e.style;return t=ce.cssProps[a]||(ce.cssProps[a]=R(a)||a),s=ce.cssHooks[t]||ce.cssHooks[a],void 0===n?s&&\"get\"in s&&void 0!==(i=s.get(e,!1,r))?i:u[t]:(o=typeof n,\"string\"===o&&(i=Me.exec(n))&&i[1]&&(n=p(e,t,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(ce.cssNumber[a]?\"\":\"px\")),ae.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(u[t]=\"inherit\"),s&&\"set\"in s&&void 0===(n=s.set(e,n,r))||(u[t]=n)),void 0)}},css:function(e,t,n,r){var i,o,s,a=ce.camelCase(t);return t=ce.cssProps[a]||(ce.cssProps[a]=R(a)||a),s=ce.cssHooks[t]||ce.cssHooks[a],s&&\"get\"in s&&(i=s.get(e,!0,n)),void 0===i&&(i=O(e,t,r)),\"normal\"===i&&t in ot&&(i=ot[t]),\"\"===n||n?(o=parseFloat(i),n===!0||isFinite(o)?o||0:i):i}}),ce.each([\"height\",\"width\"],function(e,t){ce.cssHooks[t]={get:function(e,n,r){if(n)return rt.test(ce.css(e,\"display\"))&&0===e.offsetWidth?tt(e,it,function(){return L(e,t,r)}):L(e,t,r)},set:function(e,n,r){var i,o=r&&et(e),s=r&&M(e,t,r,\"border-box\"===ce.css(e,\"boxSizing\",!1,o),o);return s&&(i=Me.exec(n))&&\"px\"!==(i[3]||\"px\")&&(e.style[t]=n,n=ce.css(e,t)),D(e,n,s)}}}),ce.cssHooks.marginLeft=N(ae.reliableMarginLeft,function(e,t){if(t)return(parseFloat(O(e,\"marginLeft\"))||e.getBoundingClientRect().left-tt(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),ce.cssHooks.marginRight=N(ae.reliableMarginRight,function(e,t){if(t)return tt(e,{display:\"inline-block\"},O,[e,\"marginRight\"])}),ce.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){ce.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[e+Le[r]+t]=o[r]||o[r-2]||o[0];return i}},Ke.test(e)||(ce.cssHooks[e+t].set=D)}),ce.fn.extend({css:function(e,t){return Ce(this,function(e,t,n){var r,i,o={},s=0;if(ce.isArray(t)){for(r=et(e),i=t.length;s<i;s++)o[t[s]]=ce.css(e,t[s],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,arguments.length>1)},show:function(){return I(this,!0)},hide:function(){return I(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){Ie(this)?ce(this).show():ce(this).hide()})}}),ce.Tween=q,q.prototype={constructor:q,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?\"\":\"px\")},cur:function(){var e=q.propHooks[this.prop];return e&&e.get?e.get(this):q.propHooks._default.get(this)},run:function(e){var t,n=q.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):q.propHooks._default.set(this),this}},q.prototype.init.prototype=q.prototype,q.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0)},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[ce.cssProps[e.prop]]&&!ce.cssHooks[e.prop]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}},q.propHooks.scrollTop=q.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},ce.fx=q.prototype.init,ce.fx.step={};var ut,ct,lt=/^(?:toggle|show|hide)$/,ft=/queueHooks$/;ce.Animation=ce.extend(B,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return p(n.elem,e,Me.exec(t),n),n}]},tweener:function(e,t){ce.isFunction(e)?(t=e,e=[\"*\"]):e=e.match(Ae);for(var n,r=0,i=e.length;r<i;r++)n=e[r],B.tweeners[n]=B.tweeners[n]||[],B.tweeners[n].unshift(t)},prefilters:[H],prefilter:function(e,t){t?B.prefilters.unshift(e):B.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&\"object\"==typeof e?ce.extend({},e):{complete:n||!n&&t||ce.isFunction(e)&&e,duration:e,easing:n&&t||t&&!ce.isFunction(t)&&t};return r.duration=ce.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in ce.fx.speeds?ce.fx.speeds[r.duration]:ce.fx.speeds._default,null!=r.queue&&r.queue!==!0||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){ce.isFunction(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Ie).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=ce.isEmptyObject(e),o=ce.speed(t,n,r),s=function(){var t=B(this,ce.extend({},e),o);(i||je.get(this,\"finish\"))&&t.stop(!0)};return s.finish=s,i||o.queue===!1?this.each(s):this.queue(o.queue,s)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return\"string\"!=typeof e&&(n=t,t=e,e=void 0),t&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,i=null!=e&&e+\"queueHooks\",o=ce.timers,s=je.get(this);if(i)s[i]&&s[i].stop&&r(s[i]);else for(i in s)s[i]&&s[i].stop&&ft.test(i)&&r(s[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||ce.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=je.get(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=ce.timers,s=r?r.length:0;for(n.finish=!0,ce.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<s;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),ce.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=ce.fn[t];ce.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(P(t,!0),e,r,i)}}),ce.each({slideDown:P(\"show\"),slideUp:P(\"hide\"),slideToggle:P(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){ce.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(ut=ce.now();t<n.length;t++)e=n[t],e()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),ut=void 0},ce.fx.timer=function(e){ce.timers.push(e),e()?ce.fx.start():ce.timers.pop()},ce.fx.interval=13,ce.fx.start=function(){ct||(ct=n.setInterval(ce.fx.tick,ce.fx.interval))},ce.fx.stop=function(){n.clearInterval(ct),ct=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(e,t){return e=ce.fx?ce.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,r){var i=n.setTimeout(t,e);r.stop=function(){n.clearTimeout(i)}})},function(){var e=Z.createElement(\"input\"),t=Z.createElement(\"select\"),n=t.appendChild(Z.createElement(\"option\"));e.type=\"checkbox\",ae.checkOn=\"\"!==e.value,ae.optSelected=n.selected,t.disabled=!0,ae.optDisabled=!n.disabled,e=Z.createElement(\"input\"),e.value=\"t\",e.type=\"radio\",ae.radioValue=\"t\"===e.value}();var ht,pt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return Ce(this,ce.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(t=t.toLowerCase(),i=ce.attrHooks[t]||(ce.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:(r=ce.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!ae.radioValue&&\"radio\"===t&&ce.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(Ae);if(o&&1===e.nodeType)for(;n=o[i++];)r=ce.propFix[n]||n,ce.expr.match.bool.test(n)&&(e[r]=!1),e.removeAttribute(n)}}),ht={set:function(e,t,n){return t===!1?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\\w+/g),function(e,t){var n=pt[t]||ce.find.attr;pt[t]=function(e,t,r){var i,o;return r||(o=pt[t],pt[t]=i,i=null!=n(e,t,r)?t.toLowerCase():null,pt[t]=o),i}});var dt=/^(?:input|select|textarea|button)$/i,vt=/^(?:a|area)$/i;ce.fn.extend({prop:function(e,t){return Ce(this,ce.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,\"tabindex\");return t?parseInt(t,10):dt.test(e.nodeName)||vt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),ae.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){ce.propFix[this.toLowerCase()]=this});var gt=/[\\t\\r\\n\\f]/g;ce.fn.extend({addClass:function(e){var t,n,r,i,o,s,a,u=0;if(ce.isFunction(e))return this.each(function(t){ce(this).addClass(e.call(this,t,U(this)))});if(\"string\"==typeof e&&e)for(t=e.match(Ae)||[];n=this[u++];)if(i=U(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(gt,\" \")){for(s=0;o=t[s++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");a=ce.trim(r),i!==a&&n.setAttribute(\"class\",a)}return this},removeClass:function(e){var t,n,r,i,o,s,a,u=0;if(ce.isFunction(e))return this.each(function(t){ce(this).removeClass(e.call(this,t,U(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof e&&e)for(t=e.match(Ae)||[];n=this[u++];)if(i=U(n),r=1===n.nodeType&&(\" \"+i+\" \").replace(gt,\" \")){for(s=0;o=t[s++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");a=ce.trim(r),i!==a&&n.setAttribute(\"class\",a)}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):ce.isFunction(e)?this.each(function(n){ce(this).toggleClass(e.call(this,n,U(this),t),t)}):this.each(function(){var t,r,i,o;if(\"string\"===n)for(r=0,i=ce(this),o=e.match(Ae)||[];t=o[r++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&\"boolean\"!==n||(t=U(this),t&&je.set(this,\"__className__\",t),this.setAttribute&&this.setAttribute(\"class\",t||e===!1?\"\":je.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;for(t=\" \"+e+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+U(n)+\" \").replace(gt,\" \").indexOf(t)>-1)return!0;return!1}});var yt=/\\r/g,mt=/[\\x20\\t\\r\\n\\f]+/g;ce.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=ce.isFunction(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,ce(this).val()):e,null==i?i=\"\":\"number\"==typeof i?i+=\"\":ce.isArray(i)&&(i=ce.map(i,function(e){return null==e?\"\":e+\"\"})),t=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()],t&&\"set\"in t&&void 0!==t.set(this,i,\"value\")||(this.value=i))});if(i)return t=ce.valHooks[i.type]||ce.valHooks[i.nodeName.toLowerCase()],t&&\"get\"in t&&void 0!==(n=t.get(i,\"value\"))?n:(n=i.value,\"string\"==typeof n?n.replace(yt,\"\"):null==n?\"\":n)}}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,\"value\");return null!=t?t:ce.trim(ce.text(e)).replace(mt,\" \")}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||i<0,s=o?null:[],a=o?i+1:r.length,u=i<0?a:o?i:0;u<a;u++)if(n=r[u],(n.selected||u===i)&&(ae.optDisabled?!n.disabled:null===n.getAttribute(\"disabled\"))&&(!n.parentNode.disabled||!ce.nodeName(n.parentNode,\"optgroup\"))){if(t=ce(n).val(),o)return t;s.push(t)}return s},set:function(e,t){for(var n,r,i=e.options,o=ce.makeArray(t),s=i.length;s--;)r=i[s],(r.selected=ce.inArray(ce.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each([\"radio\",\"checkbox\"],function(){ce.valHooks[this]={set:function(e,t){if(ce.isArray(t))return e.checked=ce.inArray(ce(e).val(),t)>-1}},ae.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var bt=/^(?:focusinfocus|focusoutblur)$/;ce.extend(ce.event,{trigger:function(e,t,r,i){var o,s,a,u,c,l,f,h=[r||Z],p=se.call(e,\"type\")?e.type:e,d=se.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(s=a=r=r||Z,3!==r.nodeType&&8!==r.nodeType&&!bt.test(p+ce.event.triggered)&&(p.indexOf(\".\")>-1&&(d=p.split(\".\"),p=d.shift(),d.sort()),c=p.indexOf(\":\")<0&&\"on\"+p,e=e[ce.expando]?e:new ce.Event(p,\"object\"==typeof e&&e),e.isTrigger=i?2:3,e.namespace=d.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+d.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=r),t=null==t?[e]:ce.makeArray(t,[e]),f=ce.event.special[p]||{},\ni||!f.trigger||f.trigger.apply(r,t)!==!1)){if(!i&&!f.noBubble&&!ce.isWindow(r)){for(u=f.delegateType||p,bt.test(u+p)||(s=s.parentNode);s;s=s.parentNode)h.push(s),a=s;a===(r.ownerDocument||Z)&&h.push(a.defaultView||a.parentWindow||n)}for(o=0;(s=h[o++])&&!e.isPropagationStopped();)e.type=o>1?u:f.bindType||p,l=(je.get(s,\"events\")||{})[e.type]&&je.get(s,\"handle\"),l&&l.apply(s,t),l=c&&s[c],l&&l.apply&&ke(s)&&(e.result=l.apply(s,t),e.result===!1&&e.preventDefault());return e.type=p,i||e.isDefaultPrevented()||f._default&&f._default.apply(h.pop(),t)!==!1||!ke(r)||c&&ce.isFunction(r[p])&&!ce.isWindow(r)&&(a=r[c],a&&(r[c]=null),ce.event.triggered=p,r[p](),ce.event.triggered=void 0,a&&(r[c]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}}),ce.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){ce.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),ce.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ae.focusin=\"onfocusin\"in n,ae.focusin||ce.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=function(e){ce.event.simulate(t,e.target,ce.event.fix(e))};ce.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=je.access(r,t);i||r.addEventListener(e,n,!0),je.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=je.access(r,t)-1;i?je.access(r,t,i):(r.removeEventListener(e,n,!0),je.remove(r,t))}}});var wt=n.location,xt=ce.now(),Et=/\\?/;ce.parseJSON=function(e){return JSON.parse(e+\"\")},ce.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new n.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||ce.error(\"Invalid XML: \"+e),t};var Tt=/#.*$/,St=/([?&])_=[^&]*/,At=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,_t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ct=/^(?:GET|HEAD)$/,kt=/^\\/\\//,jt={},Ot={},Nt=\"*/\".concat(\"*\"),Rt=Z.createElement(\"a\");Rt.href=wt.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:wt.href,type:\"GET\",isLocal:_t.test(wt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Nt,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":ce.parseJSON,\"text xml\":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?J(J(e,ce.ajaxSettings),t):J(ce.ajaxSettings,e)},ajaxPrefilter:z(jt),ajaxTransport:z(Ot),ajax:function(e,t){function r(e,t,r,a){var c,f,m,b,x,T=t;2!==w&&(w=2,u&&n.clearTimeout(u),i=void 0,s=a||\"\",E.readyState=e>0?4:0,c=e>=200&&e<300||304===e,r&&(b=X(h,E,r)),b=G(h,b,E,c),c?(h.ifModified&&(x=E.getResponseHeader(\"Last-Modified\"),x&&(ce.lastModified[o]=x),x=E.getResponseHeader(\"etag\"),x&&(ce.etag[o]=x)),204===e||\"HEAD\"===h.type?T=\"nocontent\":304===e?T=\"notmodified\":(T=b.state,f=b.data,m=b.error,c=!m)):(m=T,!e&&T||(T=\"error\",e<0&&(e=0))),E.status=e,E.statusText=(t||T)+\"\",c?v.resolveWith(p,[f,T,E]):v.rejectWith(p,[E,T,m]),E.statusCode(y),y=void 0,l&&d.trigger(c?\"ajaxSuccess\":\"ajaxError\",[E,h,c?f:m]),g.fireWith(p,[E,T]),l&&(d.trigger(\"ajaxComplete\",[E,h]),--ce.active||ce.event.trigger(\"ajaxStop\")))}\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var i,o,s,a,u,c,l,f,h=ce.ajaxSetup({},t),p=h.context||h,d=h.context&&(p.nodeType||p.jquery)?ce(p):ce.event,v=ce.Deferred(),g=ce.Callbacks(\"once memory\"),y=h.statusCode||{},m={},b={},w=0,x=\"canceled\",E={readyState:0,getResponseHeader:function(e){var t;if(2===w){if(!a)for(a={};t=At.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===w?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return w||(e=b[n]=b[n]||e,m[e]=t),this},overrideMimeType:function(e){return w||(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(w<2)for(t in e)y[t]=[y[t],e[t]];else E.always(e[E.status]);return this},abort:function(e){var t=e||x;return i&&i.abort(t),r(0,t),this}};if(v.promise(E).complete=g.add,E.success=E.done,E.error=E.fail,h.url=((e||h.url||wt.href)+\"\").replace(Tt,\"\").replace(kt,wt.protocol+\"//\"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=ce.trim(h.dataType||\"*\").toLowerCase().match(Ae)||[\"\"],null==h.crossDomain){c=Z.createElement(\"a\");try{c.href=h.url,c.href=c.href,h.crossDomain=Rt.protocol+\"//\"+Rt.host!=c.protocol+\"//\"+c.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=ce.param(h.data,h.traditional)),V(jt,h,t,E),2===w)return E;l=ce.event&&h.global,l&&0===ce.active++&&ce.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Ct.test(h.type),o=h.url,h.hasContent||(h.data&&(o=h.url+=(Et.test(o)?\"&\":\"?\")+h.data,delete h.data),h.cache===!1&&(h.url=St.test(o)?o.replace(St,\"$1_=\"+xt++):o+(Et.test(o)?\"&\":\"?\")+\"_=\"+xt++)),h.ifModified&&(ce.lastModified[o]&&E.setRequestHeader(\"If-Modified-Since\",ce.lastModified[o]),ce.etag[o]&&E.setRequestHeader(\"If-None-Match\",ce.etag[o])),(h.data&&h.hasContent&&h.contentType!==!1||t.contentType)&&E.setRequestHeader(\"Content-Type\",h.contentType),E.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+Nt+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(f in h.headers)E.setRequestHeader(f,h.headers[f]);if(h.beforeSend&&(h.beforeSend.call(p,E,h)===!1||2===w))return E.abort();x=\"abort\";for(f in{success:1,error:1,complete:1})E[f](h[f]);if(i=V(Ot,h,t,E)){if(E.readyState=1,l&&d.trigger(\"ajaxSend\",[E,h]),2===w)return E;h.async&&h.timeout>0&&(u=n.setTimeout(function(){E.abort(\"timeout\")},h.timeout));try{w=1,i.send(m,r)}catch(e){if(!(w<2))throw e;r(-1,e)}}else r(-1,\"No Transport\");return E},getJSON:function(e,t,n){return ce.get(e,t,n,\"json\")},getScript:function(e,t){return ce.get(e,void 0,t,\"script\")}}),ce.each([\"get\",\"post\"],function(e,t){ce[t]=function(e,n,r,i){return ce.isFunction(n)&&(i=i||r,r=n,n=void 0),ce.ajax(ce.extend({url:e,type:t,dataType:i,data:n,success:r},ce.isPlainObject(e)&&e))}}),ce._evalUrl=function(e){return ce.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,throws:!0})},ce.fn.extend({wrapAll:function(e){var t;return ce.isFunction(e)?this.each(function(t){ce(this).wrapAll(e.call(this,t))}):(this[0]&&(t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return ce.isFunction(e)?this.each(function(t){ce(this).wrapInner(e.call(this,t))}):this.each(function(){var t=ce(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=ce.isFunction(e);return this.each(function(n){ce(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){ce.nodeName(this,\"body\")||ce(this).replaceWith(this.childNodes)}).end()}}),ce.expr.filters.hidden=function(e){return!ce.expr.filters.visible(e)},ce.expr.filters.visible=function(e){return e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0};var Dt=/%20/g,Mt=/\\[\\]$/,Lt=/\\r?\\n/g,It=/^(?:submit|button|image|reset|file)$/i,qt=/^(?:input|select|textarea|keygen)/i;ce.param=function(e,t){var n,r=[],i=function(e,t){t=ce.isFunction(t)?t():null==t?\"\":t,r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(void 0===t&&(t=ce.ajaxSettings&&ce.ajaxSettings.traditional),ce.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Y(n,e[n],t,i);return r.join(\"&\").replace(Dt,\"+\")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,\"elements\");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(\":disabled\")&&qt.test(this.nodeName)&&!It.test(e)&&(this.checked||!qe.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:ce.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,\"\\r\\n\")}}):{name:t.name,value:n.replace(Lt,\"\\r\\n\")}}).get()}}),ce.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(e){}};var Ft={0:200,1223:204},Pt=ce.ajaxSettings.xhr();ae.cors=!!Pt&&\"withCredentials\"in Pt,ae.ajax=Pt=!!Pt,ce.ajaxTransport(function(e){var t,r;if(ae.cors||Pt&&!e.crossDomain)return{send:function(i,o){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(s in i)a.setRequestHeader(s,i[s]);t=function(e){return function(){t&&(t=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,\"abort\"===e?a.abort():\"error\"===e?\"number\"!=typeof a.status?o(0,\"error\"):o(a.status,a.statusText):o(Ft[a.status]||a.status,a.statusText,\"text\"!==(a.responseType||\"text\")||\"string\"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=t(),r=a.onerror=t(\"error\"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&n.setTimeout(function(){t&&r()})},t=t(\"abort\");try{a.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}}),ce.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),ce.ajaxTransport(\"script\",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=ce(\"<script>\").prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n=function(e){t.remove(),n=null,e&&i(\"error\"===e.type?404:200,e.type)}),Z.head.appendChild(t[0])},abort:function(){n&&n()}}}});var $t=[],Ht=/(=)\\?(?=&|$)|\\?\\?/;ce.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=$t.pop()||ce.expando+\"_\"+xt++;return this[e]=!0,e}}),ce.ajaxPrefilter(\"json jsonp\",function(e,t,r){var i,o,s,a=e.jsonp!==!1&&(Ht.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ht.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return i=e.jsonpCallback=ce.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ht,\"$1\"+i):e.jsonp!==!1&&(e.url+=(Et.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+i),e.converters[\"script json\"]=function(){return s||ce.error(i+\" was not called\"),s[0]},e.dataTypes[0]=\"json\",o=n[i],n[i]=function(){s=arguments},r.always(function(){void 0===o?ce(n).removeProp(i):n[i]=o,e[i]&&(e.jsonpCallback=t.jsonpCallback,$t.push(i)),s&&ce.isFunction(o)&&o(s[0]),s=o=void 0}),\"script\"}),ce.parseHTML=function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||Z;var r=me.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=g([e],t,i),i&&i.length&&ce(i).remove(),ce.merge([],r.childNodes))};var Wt=ce.fn.load;ce.fn.load=function(e,t,n){if(\"string\"!=typeof e&&Wt)return Wt.apply(this,arguments);var r,i,o,s=this,a=e.indexOf(\" \");return a>-1&&(r=ce.trim(e.slice(a)),e=e.slice(0,a)),ce.isFunction(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),s.length>0&&ce.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,s.html(r?ce(\"<div>\").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){s.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.expr.filters.animated=function(e){return ce.grep(ce.timers,function(t){return e===t.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,s,a,u,c,l=ce.css(e,\"position\"),f=ce(e),h={};\"static\"===l&&(e.style.position=\"relative\"),a=f.offset(),o=ce.css(e,\"top\"),u=ce.css(e,\"left\"),c=(\"absolute\"===l||\"fixed\"===l)&&(o+u).indexOf(\"auto\")>-1,c?(r=f.position(),s=r.top,i=r.left):(s=parseFloat(o)||0,i=parseFloat(u)||0),ce.isFunction(t)&&(t=t.call(e,n,ce.extend({},a))),null!=t.top&&(h.top=t.top-a.top+s),null!=t.left&&(h.left=t.left-a.left+i),\"using\"in t?t.using.call(e,h):f.css(h)}},ce.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){ce.offset.setOffset(this,e,t)});var t,n,r=this[0],i={top:0,left:0},o=r&&r.ownerDocument;if(o)return t=o.documentElement,ce.contains(t,r)?(i=r.getBoundingClientRect(),n=Q(o),{top:i.top+n.pageYOffset-t.clientTop,left:i.left+n.pageXOffset-t.clientLeft}):i},position:function(){if(this[0]){var e,t,n=this[0],r={top:0,left:0};return\"fixed\"===ce.css(n,\"position\")?t=n.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),ce.nodeName(e[0],\"html\")||(r=e.offset()),r.top+=ce.css(e[0],\"borderTopWidth\",!0),r.left+=ce.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-r.top-ce.css(n,\"marginTop\",!0),left:t.left-r.left-ce.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&\"static\"===ce.css(e,\"position\");)e=e.offsetParent;return e||nt})}}),ce.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,t){var n=\"pageYOffset\"===t;ce.fn[e]=function(r){return Ce(this,function(e,r,i){var o=Q(e);return void 0===i?o?o[t]:e[r]:void(o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i)},e,r,arguments.length)}}),ce.each([\"top\",\"left\"],function(e,t){ce.cssHooks[t]=N(ae.pixelPosition,function(e,n){if(n)return n=O(e,t),Ze.test(n)?ce(e).position()[t]+\"px\":n})}),ce.each({Height:\"height\",Width:\"width\"},function(e,t){ce.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},function(n,r){ce.fn[r]=function(r,i){var o=arguments.length&&(n||\"boolean\"!=typeof r),s=n||(r===!0||i===!0?\"margin\":\"border\");return Ce(this,function(t,n,r){var i;return ce.isWindow(t)?t.document.documentElement[\"client\"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body[\"scroll\"+e],i[\"scroll\"+e],t.body[\"offset\"+e],i[\"offset\"+e],i[\"client\"+e])):void 0===r?ce.css(t,n,s):ce.style(t,n,r,s)},t,o?r:void 0,o,null)}})}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},size:function(){return this.length}}),ce.fn.andSelf=ce.fn.addBack,r=[],i=function(){return ce}.apply(t,r),!(void 0!==i&&(e.exports=i));var Bt=n.jQuery,Ut=n.$;return ce.noConflict=function(e){return n.$===ce&&(n.$=Ut),e&&n.jQuery===ce&&(n.jQuery=Bt),ce},o||(n.jQuery=n.$=ce),ce})},function(e,t,n){\"use strict\";function r(e){return function(t){var n=e;if(!t)return n;if(Array.isArray(t)){var r=e.match(/\\:\\w+/g);return r.length!==t.length?(console.error(\"It does not match the required input values.\"),n):(r.forEach(function(e,r){n=n.replace(e,encodeURIComponent(t[r]))}),n)}if(\"object\"===(\"undefined\"==typeof t?\"undefined\":i(t))){for(var o in t)t.hasOwnProperty(o)&&(n=n.replace(\":\"+o,encodeURIComponent(t[o])));return n}return console.error(\"Invalid params type\"),n}}var i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},o=n(13).MIDDLEWARE,s=n(13).MIDDLEWARE_PROTOCOL,a=n(13).MiddlewareRunner,u=void 0;e.exports={routeTables:{},settings:null,layouts:[],currentView:\"\",currentLayout:\"\",bindLayout:function(e){this.layouts.push(e)},design:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];this.settings=t,this.router=null,u=n,this.bindRouter(Array.isArray(e)?e:[e])},bindRouter:function(e){var t=this,n={routes:{}},i=void 0,c=void 0;for(e=Array.from(e);e.length;)if(i=e.shift(),this.routeTables[i.routeName||i.view.viewname]=r(i.url),i.originUrl=i.url,i.url.startsWith(\"/\")&&(i.url=i.url.substr(1)),c=\"r\"+i.url.toLowerCase()+Date.now(),n.routes[i.url]=c,n[c]=function(e){var t,n={},r={},i=0;if(e.url.startsWith(\"*\"))n[e.url.split(\"*\")[1]]=arguments.length<=1?void 0:arguments[1];else{var c=!0,l=!1,f=void 0;try{for(var h,p=e.url.split(\"/\")[Symbol.iterator]();!(c=(h=p.next()).done);c=!0){var d=h.value;d.startsWith(\":\")&&(n[d.substr(1)]=decodeURIComponent(arguments.length<=i+1?void 0:arguments[i+1]),++i)}}catch(e){l=!0,f=e}finally{try{!c&&p.return&&p.return()}finally{if(l)throw f}}}var v=decodeURIComponent((t=(arguments.length<=1?0:arguments.length-1)-1+1,(arguments.length<=t?void 0:arguments[t])||(window.location.search||\"\").substr(1)));if(v&&~v.indexOf(\"=\")){var g=v.split(\"&\"),y=!0,m=!1,b=void 0;try{for(var w,x=g[Symbol.iterator]();!(y=(w=x.next()).done);y=!0){var E=w.value,T=E.split(\"=\");2===T.length&&(r[T[0]]=T[1])}}catch(e){m=!0,b=e}finally{try{!y&&x.return&&x.return()}finally{if(m)throw b}}}if(e.layout){var S=this.layouts.find(function(t){return t.viewName===e.layout});this.currentLayout&&this.currentLayout.viewname===e.layout?S.options.update&&(this.currentLayout.params=n,this.currentLayout.query=r,this.currentLayout.updateView()):S&&(!!this.currentLayout&&this.currentLayout.close(),S.view.prototype.params=n,S.view.prototype.query=r,S.view.prototype.container=S.container,this.currentLayout=new S.view)}e.view.prototype.params=n,e.view.prototype.query=r,e.view.prototype.container=e.container;var A=Object.assign({},e);A.view&&delete A.view,A.pages&&delete A.pages;var _=u.getMiddleware(o.ROUTER,s.BEFORE);a.run(_,s.BEFORE,[A,u],function(){var t=new e.view;this.currentView&&this.currentView.close(),this.currentView=t,_=u.getMiddleware(o.ROUTER,s.AFTER),a.run(_,s.AFTER,[A,u])}.bind(this))}.bind(this,i),i.pages&&i.pages.length){var l=i.originUrl||\"\",f=i.container||\"\",h=i.layout||\"\",p=!0,d=!1,v=void 0;try{for(var g,y=i.pages[Symbol.iterator]();!(p=(g=y.next()).done);p=!0){var m=g.value;m.url.startsWith(\"/\")||(m.url=(\"/\"===l?\"\":l)+\"/\"+m.url),m.container||(m.container=f),m.layout||(m.layout=h),e.push(m)}}catch(e){d=!0,v=e}finally{try{!p&&y.return&&y.return()}finally{if(d)throw v}}}n.routes[\"*actions\"]=\"___NOT_FOUND___\",n.___NOT_FOUND___=function(e){\"empty\"in t.settings&&t.settings.empty(e)},this.router=new(Backbone.Router.extend(n))}}},function(e,t){\"use strict\";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}Object.defineProperty(t,\"__esModule\",{value:!0});t.MIDDLEWARE={APP:\"app\",VIEW:\"view\",REDUCER:\"reducer\",ROUTER:\"router\"},t.MIDDLEWARE_PROTOCOL={BEFORE:\"before\",AFTER:\"after\",UNMOUNT:\"unmount\"},t.MiddlewareRunner={run:function(e,t,r,i){if(!Array.isArray(e)||\"string\"!=typeof t)throw new Error(\"MiddlewareRunner arguments error\");var o=r.length,s=0,a=function a(){var u=e[s++];if(u){var c=u[t];c.length>o?c.call.apply(c,[null].concat(n(r),[a])):(c.call.apply(c,[null].concat(n(r))),setTimeout(a,1))}else!!i&&i()};a()}}},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var o=n(6),s=n(2).format,a=n(9),u=n(13).MIDDLEWARE,c=n(13).MIDDLEWARE_PROTOCOL,l=n(13).MiddlewareRunner,f=n(15),h=n(16),p=n(17),d=n(18),v=/^(\\S+)\\s*(.*)$/,g=/^\\@(\\w+)\\s*(.*)$/,y=\"text\",m=null,b=null,w=null;b=function(){var e=w.getMiddleware(u.VIEW,c.BEFORE);l.run(e,c.BEFORE,[this],function(){var t=this.tagName,n=this.container,r=this.template,i=void 0,o=void 0;if(!n)throw new Error(\"[\"+this.viewname+'] Required attribute \"container\" is missing.');if(\"string\"==typeof n&&(n=$(n)),!n||!n.length)throw new Error(\"[\"+this.viewname+'] \"container\" is undefined.');var s=this.getModel();if(\"function\"==typeof this.viewWillMount&&(s=this.viewWillMount(s)||s),r){if(i=\"string\"==typeof r?r:r(s),\"div\"===t){var a=this;t=\"\";do if(a.hasOwnProperty(\"tagName\")&&a.tagName){t=a.tagName;break}while((a=a.__proto__)&&\"___WOOWA_VIEW___\"!==a.viewname)}o=t||$(i).length>1?$(\"<\"+(t||\"div\")+\">\"+i+\"</\"+(t||\"div\")+\">\"):$(i),this.className&&o.addClass(this.className),this._viewMounted?$.contains(n[0],this.el)?this.$el.replaceWith(o):n.html(o):this.append?n.append(o):this.prepend?n.prepend(o):this.after?n.after(o):n.html(o),this.setElement(o)}else this.setElement(n);this._viewMounted=!0,this._bindRef(),this._bindModel(),\"function\"==typeof this.viewComponentDidMount&&this.viewComponentDidMount(o),\"function\"==typeof this.viewDidMount&&this.viewDidMount(o),e=w.getMiddleware(u.VIEW,c.AFTER),l.run(e,c.AFTER,[this],function(){var e=this;[\"viewDidMount\",\"mount\"].forEach(function(t){e.dispatch(Woowahan.Event.create(t,e)),e.trigger(t)})}.bind(this))}.bind(this))},m=a.View.extend({super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];m.prototype.initialize.apply(this,t)},initialize:function(e){this._viewMounted=!1,this._views={},this.debug=o(\"View:\"+this.viewname),e&&this.setModel(e),b.apply(this)},_plugins:{text:f,\"input-text\":h,checkbox:p,select:d},delegateEvents:function(e){if(e=e||this.events,!e)return this;this.undelegateEvents();for(var t in e)if(e.hasOwnProperty(t)){var n=e[t],r=t.match(v),i=t.match(g),o=void 0,s=void 0,a=void 0;if(i){var u=n.indexOf(\"(\"),c=[];o=i[1],s=i[2],~u&&(c=n.substring(u+1,n.length-1).split(\",\").map(function(e){return $.trim(e)}),n=n.substring(0,u)),a=function(e,t,n,r,i){var o=this,s=function(e){return e.is(\"input[type=checkbox]\")||e.is(\"input[type=radio]\")?e.is(\":checked\"):e.is(\"select\")?e.val():e.val()||e.text()},a=r.map(function(e){return s(o.$(e))});if(\"submit\"===e){var u={},c=!0,l=!1,f=void 0;try{for(var h,p=o.$(t).find(\"input, select, textarea\")[Symbol.iterator]();!(c=(h=p.next()).done);c=!0){var d=h.value;u[$(d).attr(\"name\")]=s($(d))}}catch(e){l=!0,f=e}finally{try{!c&&p.return&&p.return()}finally{if(l)throw f}}a.push(u)}\"[object Function]\"!==Object.prototype.toString.call(n)&&(n=this[n]);for(var v=arguments.length,g=Array(v>5?v-5:0),y=5;y<v;y++)g[y-5]=arguments[y];return n.apply(this,Array.prototype.concat.call(a,g,i))}.bind(this,o,s,n,c)}else{if(\"[object Function]\"!==Object.prototype.toString.call(n)&&(n=this[n]),!n)continue;o=r[1],s=r[2],a=n.bind(this)}this.delegate(o,s,a)}return this},updateView:function(e,t){for(var n=arguments.length,r=Array(n>2?n-2:0),i=2;i<n;i++)r[i-2]=arguments[i];if(!arguments.length)return this.close(!1),void b.apply(this);if(e&&!t)return void(this._views[e]&&(this._views[e].close(),delete this._views[e]));\"function\"!=typeof t&&(r=t);var o=\"string\"==typeof e?this.$(e):e;o.length||(o=$(e));var s=this._views[e];if(s){s.setModel.apply(s,Array.prototype.concat.call(r,{silent:!0})),s.container=o;var a=w.getMiddleware(u.VIEW,c.UNMOUNT);l.run(a,c.UNMOUNT,[this],function(){\"function\"==typeof s.viewWillUnmount&&s.viewWillUnmount.call(s),s.dispatch(Woowahan.Event.create(\"unmount\",this)),s.trigger(\"unmount\"),b.apply(this._views[e])}.bind(this))}else t.prototype.container=o,s=new(Function.prototype.bind.apply(t,Array.prototype.concat.call(t,r))),this._views[e]=s;return s},addView:function(e,t){this.removeView(e);for(var n=arguments.length,r=Array(n>2?n-2:0),i=2;i<n;i++)r[i-2]=arguments[i];return this.updateView.apply(this,[e,t].concat(r))},removeView:function(e){this.updateView(e)},addPopup:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2];\"function\"==typeof t&&(n=t,t={}),e=\"string\"==typeof e?this.getComponent(e):e;var r=e.viewname,i=void 0,o=void 0,s=void 0;if(e){var a=t._id||r+\"Container\"+Date.now();if($(\"div[data-id=\"+a+\"]\").length)return;return i=a,o=$('<div data-id=\"'+i+'\"></div>'),$(\"body\").append(o),s=this.addView(\"div[data-id=\"+i+\"]\",e,Object.assign(t,{_id:a})),s.on(\"remove\",function(){s.off(\"remove\"),$(\"div[data-id=\"+i+\"]\").remove()}),s.closePopup=function(e,t,n){this.removeView(\"div[data-id=\"+e+\"]\"),t&&t.call(this,n)}.bind(this,i,n),s}console.error(\"undefined popup name [\"+r+\"]\")},getStates:function(e){return w.getStates(e)},setStates:function(e,t){w.setStates(e,t)},getComponent:function(e){return w.getComponent(e).extend({})},getRouteTables:function(e,t,n){if(void 0===e)return w.getRouteTables();var r=w.getRouteTables()[e];return r?\"string\"==typeof t?r()+\"?\"+encodeURIComponent(t):\"string\"==typeof n?r(t)+\"?\"+encodeURIComponent(n):r(t):void console.error('\"'+e+'\" not found')},dispatch:function(e,t,n){var r;switch(e.__options=n||{},e.wwtype){case\"event\":(r=this.$el).trigger.apply(r,[e.type].concat(i(e.data)));break;case\"action\":t&&(t=t.bind(this)),w.dispatch(e,t)}},setModel:function(e,t){var n=void 0;if(n=\"string\"==typeof e&&\"undefined\"!=typeof t?r({},e,t):e,n instanceof a.Model)return this.model&&this._unbindModel(),this.model=n.clone(),void(this._viewMounted&&this._bindModel());\"[object Null]\"!==Object.prototype.toString.call(n)&&this.model&&this.model instanceof a.Model||(this.model=new a.Model,this._viewMounted&&this._bindModel());for(var i in n)if(n.hasOwnProperty(i)){var o=this.model.get(i);o!==n[i]&&this.model.set(i,n[i])}},getModel:function(e){return this.model&&this.model instanceof a.Model||(this.model=new a.Model),e?this.model.clone().get(e):this.model.clone().toJSON()},log:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.debug(s.apply(this,t))},logStamp:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.log(t)},close:function(e){var t=w.getMiddleware(u.VIEW,c.UNMOUNT);l.run(t,c.UNMOUNT,[this],function(){\"function\"==typeof this.viewWillUnmount&&this.viewWillUnmount(),this.dispatch(Woowahan.Event.create(\"unmount\",this)),this.trigger(\"unmount\"),this._unbindModel(),this._removeChild(e),e+\"\"!=\"false\"&&this&&(this._unbindRef(),this.remove())}.bind(this))},remove:function(){this.dispatch(Woowahan.Event.create(\"remove\",this)),this.trigger(\"remove\");for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];a.View.prototype.remove.apply(this,t)},_syncElement:function(e,t){var n=$(e),r=$(t);n.is(\"input[type=text]\")||n.is(\"input[type=number]\")||n.is(\"input[type=tel]\")||n.is(\"textarea\")?r.val(n.val()):n.is(\"input[type=checkbox]\")||n.is(\"input[type=radio]\")?r.prop(\"checked\",n.is(\":checked\")):n.is(\"select\")&&r.val(n.val())},_bindRef:function(){this.refs||(this.refs={});var e=!0,t=!1,n=void 0;try{for(var r,i=this.$el.find(\"[data-ref]\")[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){var o=r.value,s=$(o),a=s.data(\"ref\"),u=s.data(\"refGroup\")||!1,c=s.data(\"refFormRestore\")||!1;if(u)this.refs[a]?this.refs[a].push(o):this.refs[a]=[o];else{var l=this.refs[a];this.refs[a]=o,l&&(c&&this._syncElement(l,this.refs[a]),l=null)}}}catch(e){t=!0,n=e}finally{try{!e&&i.return&&i.return()}finally{if(t)throw n}}},_bindModel:function(){this._unbindModel();var e=this.$el.find(\"[data-role=bind]\"),t=!0,n=!1,r=void 0;try{for(var i,o=e[Symbol.iterator]();!(t=(i=o.next()).done);t=!0){var s=i.value,a=$(s).data(\"name\"),u=\"change:\"+a,c=($(s).data(\"type\")||y).toLowerCase(),l=this.model.get(a);this.listenTo(this.model,u,function(e,t,n){var r=this.model.get(t);this._plugins[n].call(this,e,r)}.bind(this,s,a,c)),\"undefined\"!=typeof l&&this._plugins[c].call(this,s,l)}}catch(e){n=!0,r=e}finally{try{!t&&o.return&&o.return()}finally{if(n)throw r}}},_unbindRef:function(){for(var e in this.refs)this.refs.hasOwnProperty(e)&&(this.refs[e]=null);this.refs=null},_unbindModel:function(){this.stopListening(this.model)},_removeChild:function(e){for(var t in this._views)this._views.hasOwnProperty(t)&&(this._views[t].close.call(this._views[t],e),delete this._views[t])}}),m.create=function(e,t){var n=m.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return w||(w=e),m}},function(e,t){\"use strict\";e.exports=function(e,t){$(e).text(t)}},function(e,t){\"use strict\";e.exports=function(e,t){$(e).val(t)}},function(e,t){\"use strict\";e.exports=function(e,t){$(e).prop(\"checked\",!!t)}},function(e,t){\"use strict\";var n=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(r=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}();e.exports=function(e,t){var r=0,i=void 0;if(Array.isArray(t)){if(!t.length)return;i=Array.from(t)}else{if(\"undefined\"==typeof t)return;i=Array.from([t])}e.innerHTML=\"\";var o=!0,s=!1,a=void 0;try{for(var u,c=i.entries()[Symbol.iterator]();!(o=(u=c.next()).done);o=!0){var l=n(u.value,2),f=l[0],h=l[1],p=void 0,d=void 0;\"string\"==typeof h?(p=h,d=h):(p=h.label,d=h.value),h.selected&&(r=f),$(e).append('<option value=\"'+d+'\">'+p+\"</option>\")}}catch(e){s=!0,a=e}finally{try{!o&&c.return&&c.return()}finally{if(s)throw a}}$(e).children(\"option\").eq(r).attr(\"selected\",\"selected\"),$(e).trigger(\"change\")}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=n(13).MIDDLEWARE,o=n(13).MIDDLEWARE_PROTOCOL,s=n(13).MiddlewareRunner,a={timeout:5e3},u=void 0,c=void 0;u={SUCCESS:\"SUCCESS\",FAIL:\"FAIL\",queueSuccess:[],queueFail:[],extend:function(e){var t=Object.assign({},this);return e.onSuccess&&t.queueSuccess.push(e.onSuccess),e.onFail&&t.queueFail.push(e.onFail),t},create:function(e,t,n){var u=this;if(\"function\"==typeof t)n=t,t=void 0;else if(\"object\"===(\"undefined\"==typeof t?\"undefined\":r(t))&&\"schema\"!==t.wwtype)throw new Error(\"The second argument of reducer will only function, or schema objects.\");var l=this,f=function(t,n){this._timestamp=Date.now(),this._id=e.toLowerCase()+this._timestamp,this.subscriber=n,this.queueSuccess=[],this.queueFail=[],this.useraction(t),this.addAction(this._id)};f.wwtype=\"reducer\",f.actionName=e,f.schema=t;var h=Object.assign(f.prototype,{onSuccess:l.onSuccess,onFail:l.onFail});return h.useraction=n,h.id=function(){return u._id},h.actionName=e,h.createtime=function(){return u._timestamp},h.addAction=function(e){return c.addAction(e)},h.addError=function(e){return c.addError(e)},h.removeAction=function(e){return c.removeAction(e)},h.getStates=function(){return c.getStates()},h.use=function(e,t){switch(e){case l.SUCCESS:if(!t)return;Array.isArray(t)?Array.prototype.push.apply(this.queueSuccess,t):this.queueSuccess.push(t);break;case l.FAIL:if(!t)return;Array.isArray(t)?Array.prototype.push.apply(this.queueFail,t):this.queueFail.push(t);break;default:throw new Error(\"undefined key\")}},h.loadScript=function(e,t){t||(t=e.toLowerCase());var n=$(\"script[id=\"+t+\"]\");return n.length?void(this.onSuccess||this.success).call(this):(n=document.createElement(\"script\"),document.getElementsByTagName(\"head\")[0].appendChild(n),n.addEventListener(\"load\",(this.onSuccess||this.success).bind(this)),n.addEventListener(\"error\",(this.onFail||this.fail).bind(this)),n.id=t,n.type=\"text/javascript\",void(n.src=e))},h.requestData=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"GET\";t=\"object\"===(\"undefined\"==typeof e?\"undefined\":r(e))?Object.assign({},a,{url:e}):Object.assign({},a,t,{url:e}),t.type=n.toUpperCase();var u=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Array.prototype.concat.call(l.queueSuccess,this.queueSuccess),a=c.getMiddleware(i.REDUCER,o.AFTER);\ns.run(a,o.AFTER,[c],function(){if(r.length||this.onSuccess){var e=!0,n=!1,i=void 0;try{for(var o,s=r[Symbol.iterator]();!(e=(o=s.next()).done);e=!0){var a=o.value;a.apply(this,t)}}catch(e){n=!0,i=e}finally{try{!e&&s.return&&s.return()}finally{if(n)throw i}}!!this.onSuccess&&this.onSuccess.apply(this,t)}else this.success.apply(this,t)}.bind(this))},f=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=Array.prototype.concat.call(l.queueFail,this.queueFail),a=t[0],u=c.getMiddleware(i.REDUCER,o.AFTER);s.run(u,o.AFTER,[c],function(){if(a&&(t=[{status:a.status,statusText:a.statusText||\"\",response:a.responseJSON||a.responseText}]),r.length||this.onFail){var e=!0,n=!1,i=void 0;try{for(var o,s=r[Symbol.iterator]();!(e=(o=s.next()).done);e=!0){var u=o.value;u.apply(this,t)}}catch(e){n=!0,i=e}finally{try{!e&&s.return&&s.return()}finally{if(n)throw i}}!!this.onFail&&this.onFail.apply(this,t)}else this.fail.apply(this,t)}.bind(this))},h=c.getMiddleware(i.REDUCER,o.BEFORE);s.run(h,o.BEFORE,[t,c],function(){return $.ajax(t).done(u.bind(this)).fail(f.bind(this))}.bind(this))},h.getData=function(e,t){return this.requestData(e,t,\"get\")},h.putData=function(e,t){return this.requestData(e,t,\"put\")},h.postData=function(e,t){return this.requestData(e,t,\"post\")},h.deleteData=function(e,t){return this.requestData(e,t,\"delete\")},h.success=function(e){},h.fail=function(e,t){\"abort\"in e&&e.abort(),this.removeAction(this._id),this.addError(t)},h.finish=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.subscriber&&this.subscriber.apply(this,t),this.removeAction(this._id)},h.env={},h.env.template=function(e,t){if(\"string\"!=typeof e)return e;var n=e,r=e.match(/{{\\w+}}/g);return r&&r.forEach(function(e){var r=e.replace(\"{{\",\"\").replace(\"}}\",\"\");r in t&&(n=n.replace(e,t[r]))}),n},f}},e.exports=function(e){return c||(c=e),u}},function(e,t){\"use strict\";e.exports={create:function(e,t){return{wwtype:\"error\",code:1,message:e,target:t}}}},function(e,t,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},i=n(20),o={STRING:\"string\",NUMBER:\"number\",ARRAY:\"array\",EMAIL:\"email\",PHONE:\"phone\",BOOLEAN:\"boolean\"},s=\"required\",a=\"defaultValue\",u=\"min\",c=\"max\",l=\"format\",f={},h={},p=function(e,t){if(s in this&&!h[s].call(this,t))return i.create('Required attribute \"'+e+'\" is missing.',{key:e,value:t});if(void 0!==t){if(!h[this.name].call(this,t))return i.create('\"'+e+'\" type property must be \"'+this.name+'\".',{key:e,value:t});if(this.name===o.NUMBER){if(u in this&&null!==this[u]&&!h[u].call(this,t))return i.create('\"'+e+'\" is greater than '+this[u]+\".\",{key:e,value:t});if(c in this&&null!==this[c]&&!h[c].call(this,t))return i.create('\"'+e+'\" may have a value of '+this[c]+\" or less.\",{key:e,value:t})}else if(this.name===o.STRING){if(u in this&&null!==this[u]&&!h[u].call(this,t))return i.create('\"'+e+'\" must be more than '+this[u]+\" characters long.\",{key:e,value:t});if(c in this&&null!==this[c]&&!h[c].call(this,t))return i.create('\"'+e+'\" should be no longer than '+this[c]+\" characters.\",{key:e,value:t})}}},d=function(e,t,n){var r={},i=void 0;return t.forEach(function(e){r[e]=f[e]}),i=Object.assign({name:e},r,n),i.__validate__=p,i};f[s]=!1,f[a]=null,f[u]=null,f[c]=null,f[l]=null,h[o.STRING]=function(e){return(\"undefined\"==typeof e?\"undefined\":r(e))===o.STRING},h[o.NUMBER]=function(e){if(\"number\"==typeof e)return!0;var t=String(e),n=t.match(/^[+-]?(\\d+\\.?\\d*)$|(\\d*\\.?\\d+)$/g);return!!n&&(!(n.length>1)&&n[0].length===t.length)},h[o.ARRAY]=function(e){return Array.isArray(e)},h[o.EMAIL]=function(e){var t=/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;return t.test(e)},h[o.BOOLEAN]=function(e){return\"[object Boolean]\"===Object.prototype.toString.call(e)},h[s]=function(e){return!this[s]||void 0!==e&&null!==e},h[u]=function(e){return this.name===o.NUMBER?e>=this[u]:this.name!==o.STRING||e.length>=this[u]},h[c]=function(e){return this.name===o.NUMBER?e<=this[c]:this.name!==o.STRING||e.length<=this[c]},e.exports={String:function(e){return d(o.STRING,[s,a,u,c,l],Object.assign({defaultValue:\"\"},e))},Number:function(e){return d(o.NUMBER,[s,a,u,c],Object.assign({defaultValue:0},e))},Array:function(e){return d(o.ARRAY,[s,a],Object.assign({defaultValue:[]},e))},Email:function(e){return d(o.EMAIL,[s],Object.assign({},e))},Boolean:function(e){return d(o.BOOLEAN,[s],Object.assign({},e))}}},function(e,t){\"use strict\";e.exports={create:function(e){return{wwtype:\"store\",store:e}}}},function(e,t){\"use strict\";e.exports={create:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return{wwtype:\"action\",type:e,data:t}}}},function(e,t){\"use strict\";e.exports={create:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return{wwtype:\"event\",type:e,data:n}}}},function(e,t){\"use strict\";var n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};e.exports={create:function(e,t){function r(e){var n={};for(var r in t)t.hasOwnProperty(r)&&(n[r]=void 0);return Object.assign(n,e)}var i={wwtype:\"schema\",schemaName:e};return i.validate=function(e){var i=r(e),o=[];for(var s in i)if(i.hasOwnProperty(s)){var a=t[s];if(a&&a.hasOwnProperty(\"__validate__\")){var u=a.__validate__.call(a,s,e[s]);u&&o.push(u)}else\"object\"===(\"undefined\"==typeof window?\"undefined\":n(window))&&console.warn('Is not defined in the schema field \"'+s+'\" is present.')}return 0===o.length?void 0:o},i.toSchema=function(){return t},i}}},function(e,t){\"use strict\";e.exports=function(e,t,n){return{view:t,container:e,options:Object.assign({update:!0},n),viewName:t.viewname,wwtype:\"layout\"}}},function(e,t){\"use strict\";e.exports=function(e,t){return{view:t,name:e,viewName:t.viewname,wwtype:\"component\"}}},function(e,t){\"use strict\";e.exports=function(e,t){return{type:e,plugin:t,wwtype:\"plugin\"}}},function(e,t,n){\"use strict\";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=n(9),o=n(1),s=n(30),a=[s.SELECTED_ROW,s.SELECTED_CELL],u=void 0,c=void 0;u=o.View.create(\"CollectionView\",{super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];u.prototype.initialize.apply(this,t)},initialize:function(){this.collection=this.collection||new i.Collection,this.collection.on(\"add\",this.addRowView,this),this.rowViews=[],this.reverse=!1;for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];o.View.prototype.initialize.apply(this,t)},viewWillUnmount:function(){for(var e=void 0;e=this.collection.first();)this.collection.remove(e);this.rowViews=[]},addRowView:function(e){var t=this,n=this.$(this.rowContainer);if(!n.length&&(n=this.$el,!this.$el.is(this.rowContainer)))throw new Error(\"undefined rowContainer\");this.rowView.prototype.container=n,this.reverse?this.rowView.prototype.prepend=!0:this.rowView.prototype.append=!0;var r=new this.rowView(e);this.rowViews.push(r),e.on(\"remove\",function(){t.rowViews.splice(t.rowViews.indexOf(r),1),r.close()},r),e.on(\"change\",function(e){r.setModel(e.toJSON()),r.updateView()},r),a.forEach(function(e){return r.on(e,t[\"on\"+e.charAt(0).toUpperCase()+e.slice(1)],t)})},reload:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(\"[object Object]\"!==Object.prototype.toString.call(n))throw new Error(\"invalid options!!!\");var i=n.uid,o=t.filter(function(e){return!!e}).map(function(t){if(i){var n=e.collection.findWhere(r({},i,t[i]));if(n)return n.set(t),n}return t});this.reverse=\"reverse\"in n&&n.reverse,this.collection.set(o,{remove:!(\"reset\"in n)||n.reset})},getCollection:function(){return this.rowViews.map(function(e){return e.getModel()})},onSelectedRow:function(){this.log(\"selectedRow\")},onSelectedCell:function(){this.log(\"selectedCell\")},onAction:function(){this.log(\"onAction\")},onClose:function(){this.rowViews.forEach(function(e){return e.close()})}}),u.create=function(e,t){var n=u.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return c||(c=e),u}},function(e,t){\"use strict\";e.exports={SELECTED_ROW:\"selectedRow\",SELECTED_CELL:\"selectedCell\"}},function(e,t,n){\"use strict\";var r=n(1),i=n(30),o=void 0,s=void 0;o=r.View.create(\"ItemView\",{events:{click:\"_onSelectedRow\"},super:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];o.prototype.initialize.apply(this,t)},initialize:function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];r.View.prototype.initialize.apply(this,t)},_onSelectedRow:function(e){this.onSelectedRow&&\"function\"==typeof this.onSelectedRow&&this.onSelectedRow(e,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.trigger.apply(this,Array.prototype.concat.call([],i.SELECTED_ROW,t))}.bind(this))},_onSelectedCell:function(e){this.onSelectedCell&&\"function\"==typeof this.onSelectedCell&&this.onSelectedRow(e,function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];this.trigger.apply(this,Array.prototype.concat.call([],i.SELECTED_CELL,t))}.bind(this))}}),o.create=function(e,t){var n=o.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return s||(s=e),o}},function(e,t,n){\"use strict\";var r=n(1),i=void 0,o=void 0,s=1e3,a={position:\"fixed\",top:0,left:0,right:0,bottom:0,background:\"#000\",opacity:.7},u={overflowY:\"auto\",display:\"block\",position:\"absolute\",top:\"50%\",left:\"50%\",width:\"80%\",maxHeight:\"80%\",background:\"#fff\",webkitTransform:\"translate(-50%, -50%)\",transform:\"translate(-50%, -50%)\"};i=r.View.create(\"PopupView\",{overlayClassName:\"\",overlayCss:{},css:{},showOverlay:!0,useDefaultCss:!0,super:function(){i.prototype.initialize.apply(this,this.arguments)},initialize:function(){this.overlay=$(\"<div></div>\");for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];r.View.prototype.initialize.apply(this,t)},viewComponentDidMount:function(e){var t=this.getModel();if(Object.keys(t).map(function(e){switch(e){case\"css\":case\"overlayCss\":this[e]=Object.assign({},this[e],t[e]);break;case\"overlayClassName\":case\"showOverlay\":case\"useDefaultCss\":this[e]=t[e];break;case\"buttons\":var n=t.buttons;this.events||(this.events={});for(var r in n)n.hasOwnProperty(r)&&(this.events[\"click \"+r]=n[r].bind(this));this.delegateEvents()}}.bind(this)),this.showOverlay){var n=this.overlay;n.addClass(this.overlayClassName),n.css(Object.assign({zIndex:s},a,this.overlayCss)),this.$el.parent().prepend(n),s+=100,$(n).on(\"click\",function(){this.dispatch(r.Event.create(\"overlayClicked\",this))}.bind(this))}this.useDefaultCss&&e.css(u),e.css(Object.assign({zIndex:s},this.css)),s+=100}}),i.create=function(e,t){var n=i.extend(t);return n.viewname=e,Object.defineProperty(n.prototype,\"viewname\",{value:e,writable:!1}),n},e.exports=function(e){return o||(o=e),i}}]);"
  },
  {
    "path": "examples/todo/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/todo/action/index.js",
    "content": "export const LOAD_TODOS = 'LOAD-TODOS';\nexport const ALL_TODOS = 'ALL-TODOS';\nexport const NEW_TODO = 'NEW-TODO';\nexport const EDIT_TODO = 'EDIT-TODO';\nexport const DELETE_TODO = 'DELETE-TODO';\nexport const COMPLETED_TODO = 'COMPLETED-TODO';\nexport const ALL_COMPLETED = 'ALL-COMPLETED';\n\n"
  },
  {
    "path": "examples/todo/global.config.js",
    "content": "export default {\n  Request: {\n    Timeout: 3000\n  }\n};\n"
  },
  {
    "path": "examples/todo/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar environment = $.util.env.type || 'development';\nvar isProduction = environment === 'production';\nvar webpackConfig = require('./webpack.config.js')[environment];\n\nvar dist = 'dist';\nvar buildTaskPack = ['lib', 'html', 'scripts'];\n\nconst notifyEnable = process.platform == 'darwin';\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.if(notifyEnable, $.plumber({errorHandler: $.notify.onError(\"Error: <%= error.message\" +\n      \" %>\")})))\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, dist, 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size())\n    .pipe($.if(notifyEnable, $.notify('Complete scripts')));\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve('./', 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, dist)))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('lib', () => {\n  gulp.src([\n    'node_modules/todomvc-app-css/*.css',\n    'node_modules/todomvc-common/*.css'\n  ])\n    .pipe($.size({ title : 'lib:flat folder structure' }))\n    .pipe(gulp.dest(dist+'/css'));\n});\n\ngulp.task('clean', (cb) => {\n  del([dist], cb);\n});\n\ngulp.task('default', ['build']);\ngulp.task('build', ['clean'], () => gulp.start(buildTaskPack));\n"
  },
  {
    "path": "examples/todo/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>Woowahan.js - Todo</title>\n    <link rel=\"stylesheet\" href=\"css/base.css\">\n    <link rel=\"stylesheet\" href=\"css/index.css\">\n</head>\n<body>\n<section class=\"todoapp\"></section>\n<footer class=\"info\">\n    <p>Double-click to edit a todo</p>\n    <p>Written by <a href=\"https://github.com/addyosmani\">Addy Osmani</a></p>\n    <p>Part of <a href=\"http://todomvc.com\">TodoMVC</a></p>\n</footer>\n<script src=\"js/bundle.js\"></script>\n</body>\n</html>"
  },
  {
    "path": "examples/todo/keycode.js",
    "content": "export const ENTER = 13;\nexport const ESC = 27;"
  },
  {
    "path": "examples/todo/main.js",
    "content": "import Woowahan from '../../index';\nimport TodoApp from './view/todo-app';\nimport { LOAD_TODOS } from './action';\nimport * as Reducers from './reducer/todos';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nconst app = new Woowahan();\n\napp.use(Woowahan.Store.create({ todos: [] }));\napp.use(Reducers);\n\napp.dispatch(Woowahan.Action.create(LOAD_TODOS), () => {\n  app.start({\n    url: '*filter', container: '.todoapp', view: TodoApp\n  });\n});\n"
  },
  {
    "path": "examples/todo/package.json",
    "content": "{\n  \"name\": \"todo\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"dexie\": \"^1.5.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {\n    \"todomvc-app-css\": \"^2.0.6\",\n    \"todomvc-common\": \"^1.0.2\"\n  }\n}\n"
  },
  {
    "path": "examples/todo/reducer/todos.js",
    "content": "import Woowahan from '../../../index';\nimport Dexie from 'dexie';\nimport * as Action from '../action';\nimport TodoSchema from '../schema/todo';\n\nvar TodoDB = new Dexie('todos');\n\nTodoDB.version(1).stores({\n  todos: \"++id,title,completed\"\n});\n\nTodoDB.open();\n\nconst LoadTodos = Woowahan.Reducer.create(Action.LOAD_TODOS, function() {\n  TodoDB.todos.toCollection().each(todo => {\n    this.getStates().todos.push(todo);\n  }).then(() => this.finish(this.getStates().todos));\n});\n\nconst AllTodos = Woowahan.Reducer.create(Action.ALL_TODOS, function() {\n  this.finish(this.getStates().todos);\n});\n\nconst NewTodo = Woowahan.Reducer.create(Action.NEW_TODO, TodoSchema, function(todo) {\n  todo.completed = false;\n  \n  TodoDB.todos.add(todo).then(id => {\n    todo.id = id;\n    \n    this.getStates().todos.push(todo);\n    this.finish(this.getStates().todos);\n  });\n});\n\nconst CompletedTodo = Woowahan.Reducer.create(Action.COMPLETED_TODO, function(todo) {\n  let todos = this.getStates().todos;\n\n  todos.forEach(item => {\n    if (item.id === todo.id) item.completed = todo.completed;\n  });\n\n  TodoDB.todos.put(todo);\n  this.finish(todo);\n});\n\nconst AllCompleted = Woowahan.Reducer.create(Action.ALL_COMPLETED, function(options) {\n  this.getStates().todos.forEach(item => {\n    if (!item.completed) {\n      item.completed = true;\n    }\n  });\n\n  this.finish(this.getStates().todos);\n});\n\nconst DeleteTodo = Woowahan.Reducer.create(Action.DELETE_TODO, function(todo) {\n  let matchIndex = -1;\n  let states = this.getStates();\n\n  states.todos.forEach((item, index) => {\n    if (item.id === todo.id) {\n      matchIndex = index;\n    }\n  });\n\n  TodoDB.todos.delete(states.todos[matchIndex].id);\n  states.todos.splice(matchIndex, 1);\n  this.finish();\n});\n\nconst EditTodo = Woowahan.Reducer.create(Action.EDIT_TODO, function(todo) {\n  let todos = this.getStates().todos;\n\n  todos.forEach(item => {\n    if (item.id === todo.id) item.title = todo.title;\n  });\n\n  TodoDB.todos.put(todo);\n  this.finish(todo);\n});\n\nexport {\n  LoadTodos,\n  AllTodos,\n  NewTodo,\n  CompletedTodo,\n  AllCompleted,\n  DeleteTodo,\n  EditTodo\n};\n"
  },
  {
    "path": "examples/todo/schema/todo.js",
    "content": "import Woowahan from '../../../index';\n\nexport default Woowahan.Schema.create('TodoSchema', {\n  title: Woowahan.Types.String({ required: true, min: 1 })\n});"
  },
  {
    "path": "examples/todo/template/todo-app.hbs",
    "content": "<header class=\"header\">\n    <h1>todos</h1>\n    <input class=\"new-todo\" placeholder=\"What needs to be done?\" autofocus>\n</header>\n<section class=\"main\">\n    <input class=\"toggle-all\" id=\"toggle-all\" type=\"checkbox\">\n    <label for=\"toggle-all\">Mark all as complete</label>\n    <ul class=\"todo-list\"></ul>\n</section>\n<footer class=\"footer\"></footer>"
  },
  {
    "path": "examples/todo/template/todo-item.hbs",
    "content": "<li{{#if completed}} class=\"completed\"{{/if}}>\n    <div class=\"view\">\n        <input class=\"toggle\" type=\"checkbox\" {{#if completed}}checked{{/if}}>\n        <label data-role=\"bind\" data-type=\"text\" data-name=\"title\" ></label>\n        <button class=\"destroy\"></button>\n    </div>\n    <input class=\"edit\" data-role=\"bind\" data-type=\"input-text\" data-name=\"title\" value=\"{{title}}\">\n</li>\n"
  },
  {
    "path": "examples/todo/template/todo-state.hbs",
    "content": "<span class=\"todo-count\"><strong data-role=\"bind\" data-name=\"remaining\"></strong> item{{#if items}}s{{/if}} left</span>\n<ul class=\"filters\">\n    <li>\n        <a{{#if all}} class=\"selected\"{{/if}} href=\"#/\">All</a>\n    </li>\n    <li>\n        <a{{#if active}} class=\"selected\"{{/if}} href=\"#/active\">Active</a>\n    </li>\n    <li>\n        <a{{#if completed}} class=\"selected\"{{/if}} href=\"#/completed\">Completed</a>\n    </li>\n</ul>\n{{#if completed}}>\n<button class=\"clear-completed\">Clear completed</button>\n{{/if}}"
  },
  {
    "path": "examples/todo/view/todo-app.js",
    "content": "import Woowahan from '../../../index';\nimport Template from '../template/todo-app.hbs';\nimport TodoItem from './todo-item';\nimport TodoState from './todo-state';\nimport * as KeyCode from '../keycode';\n\nimport { ALL_TODOS, NEW_TODO, ALL_COMPLETED } from '../action/';\n\nexport default Woowahan.CollectionView.create('TodoApp', {\n  template: Template,\n  events: {\n    '@keypress .new-todo': 'createOnEnter(.new-todo)',\n    '@toggle': 'updateState',\n    '@removetodo': 'updateState'\n  },\n\n  rowContainer: '.todo-list',\n  rowView: TodoItem,\n\n  initialize() {\n    this.setModel({\n      remaining: 0,\n      filter: this.params.filter\n    });\n\n    this.super();\n  },\n\n  updateFooterView() {\n    this.updateView('.footer', TodoState, this.getModel());\n  },\n\n  viewDidMount() {\n    this.dispatch(Woowahan.Action.create(ALL_TODOS), this.loadTodos);\n  },\n\n  loadTodos(todos) {\n    let activeTodos = todos.filter(todo => !todo.completed);\n    let completedTodos = todos.filter(todo => todo.completed);\n    let filter = this.params.filter;\n\n    this.setModel({\n      remaining: activeTodos.length,\n      filter: filter\n    });\n\n    this.$el.find('.new-todo').val('');\n\n    switch(filter) {\n      case 'active':\n        this.reload(activeTodos);\n        break;\n      case 'completed':\n        this.reload(completedTodos);\n        break;\n      default:\n        this.reload(todos);\n    }\n\n    this.updateFooterView();\n  },\n\n  updateState() {\n    this.setModel({\n      remaining: this.getStates().todos.filter(todo => !todo.completed).length\n    });\n\n    this.updateFooterView();\n  },\n\n  createOnEnter(title, event) {\n    if (event.keyCode === KeyCode.ENTER) {\n      this.dispatch(Woowahan.Action.create(NEW_TODO, { title }), this.loadTodos);\n    }\n  },\n\n  toggleAllComplete() {\n    this.dispatch(Woowahan.Action.create(ALL_COMPLETED), this.loadTodos);\n  }\n});"
  },
  {
    "path": "examples/todo/view/todo-item.js",
    "content": "import Woowahan from '../../../index';\nimport Template from '../template/todo-item.hbs';\nimport { COMPLETED_TODO, DELETE_TODO, EDIT_TODO } from '../action';\nimport * as KeyCode from '../keycode';\n\nexport default Woowahan.ItemView.create('TodoItem', {\n  template: Template,\n  events: {\n    'click .toggle': 'toggleCompleted',\n    'dblclick label': 'edit',\n    'click .destroy': 'clear',\n    '@keypress .edit': 'updateOnEnter(.edit)',\n    '@keydown .edit': 'revertOnEscape(.edit)',\n    'blur .edit': 'closeEdit'\n  },\n\n  selfUpdate(todo) {\n    this.dispatch(Woowahan.Event.create('toggle'));\n    this.setModel(todo);\n    this.updateView();\n  },\n\n  toggleCompleted() {\n    this.setModel({ completed: !this.getModel('completed') });\n    this.dispatch(Woowahan.Action.create(COMPLETED_TODO, this.getModel()), this.selfUpdate);\n  },\n\n  edit() {\n    this.$el.find('li').addClass('editing');\n  },\n\n  closeEdit() {\n    this.$el.find('li').removeClass('editing');\n  },\n\n  clear() {\n    this.dispatch(Woowahan.Action.create(DELETE_TODO, this.getModel()), this.close);\n  },\n\n  revertOnEscape(value, event) {\n    if (event.keyCode === KeyCode.ESC) {\n      let title = this.getModel('title');\n\n      this.setModel({ title: value });\n      this.setModel({ title });\n\n      this.$el.find('li').removeClass('editing');\n    }\n  },\n\n  updateOnEnter(value, event) {\n    if (event.keyCode === KeyCode.ENTER) {\n      this.setModel({ title: value });\n      this.dispatch(Woowahan.Action.create(EDIT_TODO, this.getModel()), this.selfUpdate);\n    }\n  },\n\n  viewWillUnmount() {\n    this.dispatch(Woowahan.Event.create('removetodo'));\n  }\n});"
  },
  {
    "path": "examples/todo/view/todo-state.js",
    "content": "import Woowahan from '../../../index';\nimport Template from '../template/todo-state.hbs';\n\nexport default Woowahan.View.create('TodoState', {\n  template: Template,\n\n  initialize(model) {\n    this.setModel(model);\n    this.super();\n  },\n\n  viewWillMount(renderData) {\n    renderData.items = renderData.remaining > 1;\n    renderData.all = !renderData.filter;\n    renderData.active = renderData.filter === 'active';\n    renderData.completed = renderData.filter === 'completed';\n\n    return renderData;\n  }\n});"
  },
  {
    "path": "examples/todo/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nvar uglifyJsPlugin = new webpack.optimize.UglifyJsPlugin({\n  compressor: {\n    screw_ie8: true,\n    warnings: false\n  },\n  output: {\n    comments: false\n  }\n});\n\nmodule.exports.development = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.css$/, exclude: /node_modules/, loader: 'css-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\nmodule.exports.production = {\n  debug: false,\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.css$/, exclude: /node_modules/, loader: 'css-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  },\n  plugins: [ uglifyJsPlugin ]\n};\n"
  },
  {
    "path": "examples/transition/.babelrc",
    "content": "{\n  \"presets\": [\"es2015\"]\n}"
  },
  {
    "path": "examples/transition/gulpfile.js",
    "content": "var path = require('path');\nvar _ = require('lodash');\nvar gulp = require('gulp');\nvar del = require('del');\nvar $ = require('gulp-load-plugins')({\n  pattern: '*'\n});\n\nvar webpackConfig = require('./webpack.config.js');\n\ngulp.task('scripts', () => {\n  return gulp.src(webpackConfig.entry)\n    .pipe($.webpackStream(webpackConfig))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist', 'js')))\n    .pipe($.size({ title : 'js' }))\n    .pipe($.size());\n});\n\ngulp.task('html', () => {\n  return gulp.src(path.resolve(__dirname, 'index.html'))\n    .pipe(gulp.dest(path.resolve(__dirname, 'dist')))\n    .pipe($.size({ title : 'html' }));\n});\n\ngulp.task('clean', (cb) => {\n  del(['dist'], cb);\n});\n\ngulp.task('default', ['clean'], () => gulp.start('build'));\ngulp.task('build', ['clean'], () => gulp.start(['scripts', 'html']));\n"
  },
  {
    "path": "examples/transition/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\" />\n    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />\n    <title>WoowahanJS</title>\n    <meta name=\"description\" content=\"Responsive Admin Web App\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\" />\n    <script src=\"/js/bundle.js\"></script>\n</head>\n<body>\n  <div id=\"content\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "examples/transition/main.js",
    "content": "import Woowahan from '../../index';\nimport { MainLayout } from './view/layout/main-layout';\nimport { BaseView } from './view/component';\n\nimport Debug from 'debug';\n\nglobal.$ = global.jQuery = Woowahan.$;\n\nDebug.enable('*');\n\nvar app = new Woowahan();\n\napp.use(Woowahan.Layout('#content', MainLayout));\n\napp.start([\n  { url: '/', container: '#mainContent', view: BaseView, layout: 'MainLayout' }\n]);\n\n// app.start({\n//   url: '/',\n//   container: '#content',\n//   view: HelloView\n// });"
  },
  {
    "path": "examples/transition/package.json",
    "content": "{\n  \"name\": \"transition\",\n  \"version\": \"1.0.0\",\n  \"description\": \"transition example\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"build\": \"gulp build\",\n    \"demo-server\": \"node ./node_modules/http-server/bin/http-server dist\"\n  },\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"devDependencies\": {\n    \"babel-core\": \"^6.1.2\",\n    \"babel-loader\": \"^6.0.1\",\n    \"babel-preset-es2015\": \"^6.1.2\",\n    \"css-loader\": \"^0.23.1\",\n    \"del\": \"^1.1.1\",\n    \"gulp\": \"^3.8.11\",\n    \"gulp-autoprefixer\": \"^2.1.0\",\n    \"gulp-if\": \"^2.0.1\",\n    \"gulp-load-plugins\": \"1.0.0\",\n    \"gulp-notify\": \"^2.2.0\",\n    \"gulp-plumber\": \"^1.1.0\",\n    \"gulp-sass\": \"^2.3.1\",\n    \"gulp-size\": \"^1.2.0\",\n    \"gulp-stylus\": \"^2.0.0\",\n    \"gulp-util\": \"^3.0.3\",\n    \"gulp-watch\": \"^4.1.1\",\n    \"handlebars\": \"^4.0.3\",\n    \"handlebars-loader\": \"^1.1.4\",\n    \"http-server\": \"^0.9.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"nodemon\": \"^1.9.2\",\n    \"request\": \"^2.72.0\",\n    \"style-loader\": \"^0.13.1\",\n    \"webpack\": \"^1.12.3\",\n    \"webpack-dev-middleware\": \"^1.0.11\",\n    \"webpack-stream\": \"^2.1.1\"\n  },\n  \"dependencies\": {}\n}\n"
  },
  {
    "path": "examples/transition/view/component/base-view.hbs",
    "content": "<div>\n  <h1>this is base view</h1>\n  <p data-role=\"bind\" data-name=\"num\"></p>\n  <div data-ref=\"colorBox\" style=\"width: 100px; height: 100px;\"></div>\n</div>"
  },
  {
    "path": "examples/transition/view/component/base-view.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './base-view.hbs';\n\nexport const BaseView = Woowahan.View.create('BaseView', {\n  template: Template,\n\n  startTransition() {\n    const _this = this;\n\n    let num = 0;\n\n    (function transition() {\n      ++num;\n\n      _this.setModel({ num });\n\n      _this.refs.colorBox.style.backgroundColor = `rgba(0, 0, 0, ${num / 100})`;\n\n      if (num < 100) {\n        setTimeout(transition, 10);\n      } else {\n        _this.dispatch(Woowahan.Event.create('transitionComplete'));\n      }\n    })();\n  }\n});"
  },
  {
    "path": "examples/transition/view/component/index.js",
    "content": "export * from './base-view';"
  },
  {
    "path": "examples/transition/view/layout/main-layout.hbs",
    "content": "<div>\n  <h1>This is MainLayout</h1>\n  <div id=\"mainContent\">\n  </div>\n</div>"
  },
  {
    "path": "examples/transition/view/layout/main-layout.js",
    "content": "import Woowahan from '../../../../index';\nimport Template from './main-layout.hbs';\n\nexport const MainLayout = Woowahan.View.create('MainLayout', {\n  template: Template,\n\n  events: {\n    '@viewDidMount': 'onViewMount',\n    '@transitionComplete': 'onCompleteTransition'\n  },\n\n  onViewMount(view) {\n    this.log(`mount된 view: ${view.viewname}`);\n\n    switch (view.viewname) {\n      case 'BaseView':\n        view.startTransition();\n        break;\n    }\n  },\n\n  onCompleteTransition() {\n    this.log('transition complete');\n  }\n});"
  },
  {
    "path": "examples/transition/webpack.config.js",
    "content": "var webpack = require('webpack');\nvar entry = './main.js';\nvar output = {\n  path: __dirname,\n  filename: 'bundle.js'\n};\n\nmodule.exports = {\n  debug : true,\n  devtool: 'cheap-module-eval-source-map',\n  entry: entry,\n  output: output,\n  module : {\n    loaders : [\n      { test: /\\.js?$/, exclude: /node_modules/, loader: 'babel-loader' },\n      { test: /\\.hbs$/, exclude: /node_modules/, loader: 'handlebars-loader'}\n    ]\n  }\n};\n\n"
  },
  {
    "path": "index.js",
    "content": "module.exports = require('./src/woowahan');"
  },
  {
    "path": "lib/action.js",
    "content": "'use strict';\n\nmodule.exports = {\n  create: function create(type) {\n    var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    return {\n      wwtype: 'action',\n      type: type,\n      data: data\n    };\n  }\n};"
  },
  {
    "path": "lib/collection-view.js",
    "content": "'use strict';\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar Collection = require('backbone').Collection;\nvar Woowahan = require('./woowahan');\nvar events = require('./events');\n\nvar ListViewEvents = [events.SELECTED_ROW, events.SELECTED_CELL];\n\nvar CollectionView = void 0;\nvar app = void 0;\n\nCollectionView = Woowahan.View.create('CollectionView', {\n  super: function _super() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    CollectionView.prototype.initialize.apply(this, args);\n  },\n  initialize: function initialize() {\n    this.collection = this.collection || new Collection();\n    this.collection.on('add', this.addRowView, this);\n\n    this.rowViews = [];\n    this.reverse = false;\n\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    Woowahan.View.prototype.initialize.apply(this, args);\n  },\n  viewWillUnmount: function viewWillUnmount() {\n    var model = void 0;\n\n    while (model = this.collection.first()) {\n      this.collection.remove(model);\n    }\n\n    this.rowViews = [];\n  },\n  addRowView: function addRowView(model) {\n    var _this = this;\n\n    var container = this.$(this.rowContainer);\n\n    if (!container.length) {\n      container = this.$el;\n\n      if (!this.$el.is(this.rowContainer)) {\n        throw new Error('undefined rowContainer');\n      }\n    }\n\n    this.rowView.prototype.container = container;\n\n    if (this.reverse) {\n      this.rowView.prototype.prepend = true;\n    } else {\n      this.rowView.prototype.append = true;\n    }\n\n    var view = new this.rowView(model);\n\n    this.rowViews.push(view);\n\n    model.on('remove', function () {\n      _this.rowViews.splice(_this.rowViews.indexOf(view), 1);\n\n      view.close();\n    }, view);\n\n    model.on('change', function (data) {\n      view.setModel(data.toJSON());\n      view.updateView();\n    }, view);\n\n    ListViewEvents.forEach(function (event) {\n      return view.on(event, _this['on' + event.charAt(0).toUpperCase() + event.slice(1)], _this);\n    });\n  },\n  reload: function reload() {\n    var _this2 = this;\n\n    var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (Object.prototype.toString.call(options) !== '[object Object]') {\n      throw new Error('invalid options!!!');\n    }\n\n    var uid = options.uid;\n\n    var renderData = data.filter(function (item) {\n      return !!item;\n    }).map(function (item) {\n      if (!!uid) {\n        var model = _this2.collection.findWhere(_defineProperty({}, uid, item[uid]));\n\n        if (!!model) {\n          model.set(item);\n\n          return model;\n        }\n      }\n\n      return item;\n    });\n\n    this.reverse = 'reverse' in options ? options.reverse : false;\n\n    this.collection.set(renderData, { remove: 'reset' in options ? options.reset : true });\n  },\n  getCollection: function getCollection() {\n    return this.rowViews.map(function (view) {\n      return view.getModel();\n    });\n  },\n  onSelectedRow: function onSelectedRow() {\n    this.log('selectedRow');\n  },\n  onSelectedCell: function onSelectedCell() {\n    this.log('selectedCell');\n  },\n  onAction: function onAction() {\n    this.log('onAction');\n  },\n  onClose: function onClose() {\n    this.rowViews.forEach(function (row) {\n      return row.close();\n    });\n  }\n});\n\nCollectionView.create = function (viewName, options) {\n  var view = CollectionView.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function (toolset) {\n  if (!app) {\n    app = toolset;\n  }\n\n  return CollectionView;\n};"
  },
  {
    "path": "lib/component.js",
    "content": "'use strict';\n\nmodule.exports = function (name, view) {\n  return {\n    view: view,\n    name: name,\n    viewName: view.viewname,\n    wwtype: 'component'\n  };\n};"
  },
  {
    "path": "lib/error.js",
    "content": "'use strict';\n\nmodule.exports = {\n  create: function create(message, target) {\n    return { wwtype: 'error', code: 1, message: message, target: target };\n  }\n};"
  },
  {
    "path": "lib/event.js",
    "content": "'use strict';\n\nmodule.exports = {\n  create: function create(type) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return {\n      wwtype: 'event',\n      type: type,\n      data: args\n    };\n  }\n};"
  },
  {
    "path": "lib/events.js",
    "content": "'use strict';\n\nmodule.exports = {\n  SELECTED_ROW: 'selectedRow',\n  SELECTED_CELL: 'selectedCell'\n};"
  },
  {
    "path": "lib/item-view.js",
    "content": "'use strict';\n\nvar Woowahan = require('./woowahan');\nvar events = require('./events');\n\nvar ItemView = void 0;\nvar app = void 0;\n\nItemView = Woowahan.View.create('ItemView', {\n\n  events: {\n    'click': '_onSelectedRow'\n  },\n\n  super: function _super() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    ItemView.prototype.initialize.apply(this, args);\n  },\n  initialize: function initialize() {\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    Woowahan.View.prototype.initialize.apply(this, args);\n  },\n  _onSelectedRow: function _onSelectedRow(event) {\n    if (this.onSelectedRow && typeof this.onSelectedRow === 'function') {\n      this.onSelectedRow(event, function () {\n        for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n          args[_key3] = arguments[_key3];\n        }\n\n        this.trigger.apply(this, Array.prototype.concat.call([], events.SELECTED_ROW, args));\n      }.bind(this));\n    }\n  },\n  _onSelectedCell: function _onSelectedCell(event) {\n    if (this.onSelectedCell && typeof this.onSelectedCell === 'function') {\n      this.onSelectedRow(event, function () {\n        for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n          args[_key4] = arguments[_key4];\n        }\n\n        this.trigger.apply(this, Array.prototype.concat.call([], events.SELECTED_CELL, args));\n      }.bind(this));\n    }\n  }\n});\n\nItemView.create = function (viewName, options) {\n  var view = ItemView.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function (toolset) {\n  if (!app) {\n    app = toolset;\n  }\n\n  return ItemView;\n};"
  },
  {
    "path": "lib/layout.js",
    "content": "'use strict';\n\nmodule.exports = function (container, view, options) {\n  return {\n    view: view,\n    container: container,\n    options: Object.assign({ update: true }, options),\n    viewName: view.viewname,\n    wwtype: 'layout'\n  };\n};"
  },
  {
    "path": "lib/middleware.js",
    "content": "'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar MIDDLEWARE = exports.MIDDLEWARE = {\n  APP: 'app',\n  VIEW: 'view',\n  REDUCER: 'reducer',\n  ROUTER: 'router'\n};\n\nvar MIDDLEWARE_PROTOCOL = exports.MIDDLEWARE_PROTOCOL = {\n  BEFORE: 'before',\n  AFTER: 'after',\n  UNMOUNT: 'unmount'\n};\n\nvar queue = [];\n\nvar _isRunning = false;\n\nvar MiddlewareRunner = exports.MiddlewareRunner = {\n  get isRunning() {\n    return _isRunning;\n  },\n  run: function run(middlewares, protocol, params, callback, preprocess) {\n    if (!Array.isArray(middlewares) || typeof protocol !== 'string') throw new Error('MiddlewareRunner arguments error');\n\n    if (_isRunning) {\n      queue.push([middlewares, protocol, params, callback, preprocess]);\n\n      return;\n    }\n\n    _isRunning = true;\n\n    var featuresLen = params.length;\n\n    var index = 0;\n\n    var next = function next() {\n      var curr = middlewares[index++];\n\n      if (curr) {\n        var middleware = curr[protocol];\n\n        if (middleware.length > featuresLen) {\n          middleware.call.apply(middleware, [curr].concat(_toConsumableArray(params), [next]));\n        } else {\n          middleware.call.apply(middleware, [curr].concat(_toConsumableArray(params)));\n\n          setTimeout(next, 1);\n        }\n      } else {\n        !!callback && callback();\n\n        var task = queue.shift();\n\n        _isRunning = false;\n\n        if (!!task) {\n          MiddlewareRunner.run.apply(MiddlewareRunner, _toConsumableArray(task));\n        }\n      }\n    };\n\n    if (typeof preprocess === 'function') preprocess();\n\n    next();\n  }\n};"
  },
  {
    "path": "lib/plugin/checkbox.js",
    "content": "'use strict';\n\nmodule.exports = function (element, value) {\n  $(element).prop('checked', !!value);\n};"
  },
  {
    "path": "lib/plugin/input-text.js",
    "content": "\"use strict\";\n\nmodule.exports = function (element, value) {\n  $(element).val(value);\n};"
  },
  {
    "path": "lib/plugin/select.js",
    "content": "'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nmodule.exports = function (element, value) {\n  var selectedIndex = 0;\n  var opts = void 0;\n\n  if (Array.isArray(value)) {\n    if (!value.length) {\n      return;\n    } else {\n      opts = Array.from(value);\n    }\n  } else {\n    if (typeof value === 'undefined') {\n      return;\n    } else {\n      opts = Array.from([value]);\n    }\n  }\n\n  element.innerHTML = '';\n\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = opts.entries()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var _step$value = _slicedToArray(_step.value, 2),\n          index = _step$value[0],\n          opt = _step$value[1];\n\n      var label = void 0;\n      var val = void 0;\n\n      if (typeof opt === 'string') {\n        label = opt;\n        val = opt;\n      } else {\n        label = opt.label;\n        val = opt.value;\n      }\n\n      if (!!opt.selected) {\n        selectedIndex = index;\n      }\n\n      $(element).append('<option value=\"' + val + '\">' + label + '</option>');\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n\n  $(element).children('option').eq(selectedIndex).attr('selected', 'selected');\n  $(element).trigger('change');\n};"
  },
  {
    "path": "lib/plugin/text.js",
    "content": "\"use strict\";\n\nmodule.exports = function (element, value) {\n  $(element).text(value);\n};"
  },
  {
    "path": "lib/plugin.js",
    "content": "'use strict';\n\nmodule.exports = function (type, plugin) {\n  return {\n    type: type,\n    plugin: plugin,\n    wwtype: 'plugin'\n  };\n};"
  },
  {
    "path": "lib/popup-view.js",
    "content": "'use strict';\n\nvar Woowahan = require('./woowahan');\n\nvar PopupView = void 0;\nvar app = void 0;\nvar zIndex = 1000;\n\nvar defaultOverlayCss = {\n  position: 'fixed',\n  top: 0,\n  left: 0,\n  right: 0,\n  bottom: 0,\n  background: '#000',\n  opacity: 0.7\n};\n\nvar defaultCss = {\n  overflowY: 'auto',\n  display: 'block',\n  position: 'absolute',\n  top: '50%',\n  left: '50%',\n  width: '80%',\n  maxHeight: '80%',\n  background: '#fff',\n  webkitTransform: 'translate(-50%, -50%)',\n  transform: 'translate(-50%, -50%)'\n};\n\nPopupView = Woowahan.View.create('PopupView', {\n  overlayClassName: '',\n  overlayCss: {},\n  css: {},\n  showOverlay: true,\n  useDefaultCss: true,\n\n  super: function _super() {\n    PopupView.prototype.initialize.apply(this, this.arguments);\n  },\n  initialize: function initialize() {\n    this.overlay = $('<div></div>');\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    Woowahan.View.prototype.initialize.apply(this, args);\n  },\n  viewComponentDidMount: function viewComponentDidMount($el) {\n    var model = this.getModel();\n\n    Object.keys(model).map(function (key) {\n      switch (key) {\n        case 'css':\n        case 'overlayCss':\n          this[key] = Object.assign({}, this[key], model[key]);\n          break;\n        case 'overlayClassName':\n        case 'showOverlay':\n        case 'useDefaultCss':\n          this[key] = model[key];\n          break;\n        case 'buttons':\n          var buttons = model.buttons;\n\n          if (!this.events) {\n            this.events = {};\n          }\n\n          for (var button in buttons) {\n            if (buttons.hasOwnProperty(button)) {\n              this.events['click ' + button] = buttons[button].bind(this);\n            }\n          }\n\n          this.delegateEvents();\n          break;\n      }\n    }.bind(this));\n\n    if (this.showOverlay) {\n      var overlay = this.overlay;\n\n      overlay.addClass(this.overlayClassName);\n      overlay.css(Object.assign({ zIndex: zIndex }, defaultOverlayCss, this.overlayCss));\n\n      this.$el.parent().prepend(overlay);\n\n      zIndex += 100;\n\n      $(overlay).on('click', function () {\n        this.dispatch(Woowahan.Event.create('overlayClicked', this));\n      }.bind(this));\n    }\n\n    if (this.useDefaultCss) {\n      $el.css(defaultCss);\n    }\n\n    $el.css(Object.assign({ zIndex: zIndex }, this.css));\n\n    zIndex += 100;\n  }\n});\n\nPopupView.create = function (viewName, options) {\n  var view = PopupView.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function (toolset) {\n  if (!app) {\n    app = toolset;\n  }\n\n  return PopupView;\n};"
  },
  {
    "path": "lib/reducer.js",
    "content": "'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar MIDDLEWARE = require('./middleware').MIDDLEWARE;\n\nvar MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\nvar MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nvar defaultConfiguration = {\n  timeout: 5000\n};\n\nvar Reducer = void 0;\nvar app = void 0;\n\nReducer = {\n  SUCCESS: 'SUCCESS',\n  FAIL: 'FAIL',\n  queueSuccess: [],\n  queueFail: [],\n  extend: function extend(protoProps) {\n    var child = Object.assign({}, this);\n\n    if (!!protoProps.onSuccess) {\n      child.queueSuccess.push(protoProps.onSuccess);\n    }\n\n    if (!!protoProps.onFail) {\n      child.queueFail.push(protoProps.onFail);\n    }\n\n    return child;\n  },\n  create: function create(actionName, schema, handler) {\n    var _this2 = this;\n\n    if (typeof schema === 'function') {\n      handler = schema;\n      schema = void 0;\n    } else {\n      if ((typeof schema === 'undefined' ? 'undefined' : _typeof(schema)) === 'object' && schema.wwtype !== 'schema') {\n        throw new Error('The second argument of reducer will only function, or schema objects.');\n      }\n    }\n\n    var _this = this;\n\n    var Reducer = function Reducer(data, subscriber) {\n      this._timestamp = Date.now();\n      this._id = actionName.toLowerCase() + this._timestamp;\n      this.subscriber = subscriber;\n      this.queueSuccess = [];\n      this.queueFail = [];\n\n      this.useraction(data);\n      this.addAction(this._id);\n    };\n\n    Reducer.wwtype = 'reducer';\n    Reducer.actionName = actionName;\n    Reducer.schema = schema;\n\n    var fn = Object.assign(Reducer.prototype, {\n      onSuccess: _this.onSuccess,\n      onFail: _this.onFail\n    });\n\n    fn.useraction = handler;\n\n    fn.id = function () {\n      return _this2._id;\n    };\n    fn.actionName = actionName;\n    fn.createtime = function () {\n      return _this2._timestamp;\n    };\n    fn.addAction = function () {\n      var _app;\n\n      return (_app = app).addAction.apply(_app, arguments);\n    };\n    fn.addError = function () {\n      var _app2;\n\n      return (_app2 = app).addError.apply(_app2, arguments);\n    };\n    fn.removeAction = function () {\n      var _app3;\n\n      return (_app3 = app).removeAction.apply(_app3, arguments);\n    };\n    fn.getStates = function () {\n      var _app4;\n\n      return (_app4 = app).getStates.apply(_app4, arguments);\n    };\n    fn.setStates = function () {\n      var _app5;\n\n      return (_app5 = app).setStates.apply(_app5, arguments);\n    };\n\n    fn.use = function (key, handlers) {\n      switch (key) {\n        case _this.SUCCESS:\n          if (!handlers) return;\n\n          if (Array.isArray(handlers)) {\n            Array.prototype.push.apply(this.queueSuccess, handlers);\n          } else {\n            this.queueSuccess.push(handlers);\n          }\n          break;\n        case _this.FAIL:\n          if (!handlers) return;\n\n          if (Array.isArray(handlers)) {\n            Array.prototype.push.apply(this.queueFail, handlers);\n          } else {\n            this.queueFail.push(handlers);\n          }\n          break;\n        default:\n          throw new Error('undefined key');\n      }\n    };\n\n    fn.loadScript = function (path, id) {\n      if (!id) {\n        id = path.toLowerCase();\n      }\n\n      var script = $('script[id=' + id + ']');\n\n      if (!!script.length) {\n        (this.onSuccess || this.success).call(this);\n        return;\n      }\n\n      script = document.createElement('script');\n\n      document.getElementsByTagName('head')[0].appendChild(script);\n\n      script.addEventListener('load', (this.onSuccess || this.success).bind(this));\n      script.addEventListener('error', (this.onFail || this.fail).bind(this));\n\n      script.id = id;\n      script.type = 'text/javascript';\n      script.src = path;\n    };\n\n    fn.requestData = function (url, settings) {\n      var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'GET';\n\n      if ((typeof url === 'undefined' ? 'undefined' : _typeof(url)) === 'object') {\n        settings = Object.assign({}, defaultConfiguration, { url: url });\n      } else {\n        settings = Object.assign({}, defaultConfiguration, settings, { url: url });\n      }\n\n      settings.type = method.toUpperCase();\n\n      var success = function success() {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        var queueSuccess = Array.prototype.concat.call(_this.queueSuccess, this.queueSuccess);\n\n        var middlewares = app.getMiddleware(MIDDLEWARE.REDUCER, MIDDLEWARE_PROTOCOL.AFTER);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [app], function () {\n          if (!!queueSuccess.length || !!this.onSuccess) {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n              for (var _iterator = queueSuccess[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var item = _step.value;\n\n                item.apply(this, args);\n              }\n            } catch (err) {\n              _didIteratorError = true;\n              _iteratorError = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                  _iterator.return();\n                }\n              } finally {\n                if (_didIteratorError) {\n                  throw _iteratorError;\n                }\n              }\n            }\n\n            !!this.onSuccess && this.onSuccess.apply(this, args);\n          } else {\n            this.success.apply(this, args);\n          }\n        }.bind(this));\n      };\n\n      var fail = function fail() {\n        for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        var queueFail = Array.prototype.concat.call(_this.queueFail, this.queueFail);\n        var jqXHR = args[0];\n\n        var middlewares = app.getMiddleware(MIDDLEWARE.REDUCER, MIDDLEWARE_PROTOCOL.AFTER);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [app], function () {\n          if (!!jqXHR) {\n            args = [{\n              status: jqXHR.status,\n              statusText: jqXHR.statusText || '',\n              response: jqXHR.responseJSON || jqXHR.responseText\n            }];\n          }\n\n          if (!!queueFail.length || !!this.onFail) {\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n              for (var _iterator2 = queueFail[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                var item = _step2.value;\n\n                item.apply(this, args);\n              }\n            } catch (err) {\n              _didIteratorError2 = true;\n              _iteratorError2 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                  _iterator2.return();\n                }\n              } finally {\n                if (_didIteratorError2) {\n                  throw _iteratorError2;\n                }\n              }\n            }\n\n            !!this.onFail && this.onFail.apply(this, args);\n          } else {\n            this.fail.apply(this, args);\n          }\n        }.bind(this));\n      };\n\n      var middlewares = app.getMiddleware(MIDDLEWARE.REDUCER, MIDDLEWARE_PROTOCOL.BEFORE);\n\n      MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [settings, app], function () {\n        return $.ajax(settings).done(success.bind(this)).fail(fail.bind(this));\n      }.bind(this));\n    };\n\n    fn.getData = function (url, settings) {\n      return this.requestData(url, settings, 'get');\n    };\n\n    fn.putData = function (url, settings) {\n      return this.requestData(url, settings, 'put');\n    };\n\n    fn.postData = function (url, settings) {\n      return this.requestData(url, settings, 'post');\n    };\n\n    fn.deleteData = function (url, settings) {\n      return this.requestData(url, settings, 'delete');\n    };\n\n    fn.success = function (data) {};\n\n    fn.fail = function (request, error) {\n      if ('abort' in request) {\n        request.abort();\n      }\n\n      this.removeAction(this._id);\n      this.addError(error);\n    };\n\n    fn.finish = function () {\n      for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      this.subscriber && this.subscriber.apply(this, args);\n\n      this.removeAction(this._id);\n    };\n\n    fn.env = {};\n    fn.env.template = function (templateStr, env) {\n      if (typeof templateStr !== 'string') return templateStr;\n\n      var renderStr = templateStr;\n      var variables = templateStr.match(/{{\\w+}}/g);\n\n      if (variables) {\n        variables.forEach(function (v) {\n          var attrName = v.replace('{{', '').replace('}}', '');\n\n          if (attrName in env) {\n            renderStr = renderStr.replace(v, env[attrName]);\n          }\n        });\n      }\n\n      return renderStr;\n    };\n\n    return Reducer;\n  }\n};\n\nmodule.exports = function (toolset) {\n  if (!app) {\n    app = toolset;\n  }\n\n  return Reducer;\n};"
  },
  {
    "path": "lib/router.js",
    "content": "'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar MIDDLEWARE = require('./middleware').MIDDLEWARE;\nvar MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\nvar MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nvar app = void 0;\n\nfunction urlBuilder(path) {\n  return function (params) {\n    var url = path;\n\n    if (!params) {\n      return url;\n    }\n\n    if (Array.isArray(params)) {\n      var keys = path.match(/\\:\\w+/g);\n\n      if (keys.length !== params.length) {\n        console.error('It does not match the required input values.');\n        return url;\n      }\n\n      keys.forEach(function (key, index) {\n        url = url.replace(key, encodeURIComponent(params[index]));\n      });\n\n      return url;\n    }\n\n    if ((typeof params === 'undefined' ? 'undefined' : _typeof(params)) === 'object') {\n      for (var key in params) {\n        if (params.hasOwnProperty(key)) {\n          url = url.replace(':' + key, encodeURIComponent(params[key]));\n        }\n      }\n\n      return url;\n    }\n\n    console.error('Invalid params type');\n\n    return url;\n  };\n}\n\nmodule.exports = {\n  routeTables: {},\n  settings: null,\n  layouts: [],\n  currentView: '',\n  currentLayout: '',\n\n  bindLayout: function bindLayout(layout) {\n    this.layouts.push(layout);\n  },\n  design: function design(pages) {\n    var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var toolset = arguments[2];\n\n    this.settings = settings;\n    this.router = null;\n\n    app = toolset;\n\n    this.bindRouter(Array.isArray(pages) ? pages : [pages]);\n  },\n  bindRouter: function bindRouter(pages) {\n    var _this = this;\n\n    var options = { routes: {} };\n\n    var page = void 0,\n        routeId = void 0;\n\n    pages = Array.from(pages);\n\n    while (!!pages.length) {\n      page = pages.shift();\n\n      this.routeTables[page.routeName || page.view.viewname] = urlBuilder(page.url);\n\n      page.originUrl = page.url;\n\n      if (page.url.startsWith('/')) {\n        page.url = page.url.substr(1);\n      }\n\n      routeId = 'r' + page.url.toLowerCase() + Date.now();\n\n      options.routes[page.url] = routeId;\n\n      options[routeId] = function (page) {\n        for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        var currentHref = window.location.href;\n        var pageFeature = Object.assign({}, page);\n\n        if (!!pageFeature.view) delete pageFeature.view;\n        if (!!pageFeature.pages) delete pageFeature.pages;\n\n        var middlewares = app.getMiddleware(MIDDLEWARE.ROUTER, MIDDLEWARE_PROTOCOL.BEFORE);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [pageFeature, app], function () {\n          if (currentHref !== window.location.href) return;\n\n          var params = {};\n          var query = {};\n\n          var idx = 0;\n\n          if (page.url.startsWith('*')) {\n            params[page.url.split('*')[1]] = args[0];\n          } else {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n              for (var _iterator = page.url.split('/')[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                var part = _step.value;\n\n                if (part.startsWith(':')) {\n                  params[part.substr(1)] = decodeURIComponent(args[idx]);\n\n                  ++idx;\n                }\n              }\n            } catch (err) {\n              _didIteratorError = true;\n              _iteratorError = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion && _iterator.return) {\n                  _iterator.return();\n                }\n              } finally {\n                if (_didIteratorError) {\n                  throw _iteratorError;\n                }\n              }\n            }\n          }\n\n          var queryStr = decodeURIComponent(args[args.length - 1] || (window.location.search || '').substr(1));\n\n          if (!!queryStr && !!~queryStr.indexOf('=')) {\n            var queryArr = queryStr.split('&');\n\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n              for (var _iterator2 = queryArr[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                var q = _step2.value;\n\n                var arr = q.split('=');\n\n                if (arr.length === 2) {\n                  query[arr[0]] = arr[1];\n                }\n              }\n            } catch (err) {\n              _didIteratorError2 = true;\n              _iteratorError2 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                  _iterator2.return();\n                }\n              } finally {\n                if (_didIteratorError2) {\n                  throw _iteratorError2;\n                }\n              }\n            }\n          }\n\n          if (!!page.layout) {\n            var layout = this.layouts.find(function (layout) {\n              return layout.viewName === page.layout;\n            });\n\n            if (!this.currentLayout || this.currentLayout.viewname !== page.layout) {\n              if (!!layout) {\n                !!this.currentLayout && this.currentLayout.close();\n\n                layout.view.prototype.params = params;\n                layout.view.prototype.query = query;\n                layout.view.prototype.container = layout.container;\n\n                this.currentLayout = new layout.view();\n              }\n            } else {\n              if (layout.options.update) {\n                this.currentLayout['params'] = params;\n                this.currentLayout['query'] = query;\n\n                this.currentLayout.updateView();\n              }\n            }\n          }\n\n          page.view.prototype.params = params;\n          page.view.prototype.query = query;\n          page.view.prototype.container = page.container;\n\n          var view = new page.view();\n\n          if (!!this.currentView) {\n            this.currentView.close();\n          }\n\n          this.currentView = view;\n\n          middlewares = app.getMiddleware(MIDDLEWARE.ROUTER, MIDDLEWARE_PROTOCOL.AFTER);\n\n          MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [pageFeature, app]);\n        }.bind(this));\n      }.bind(this, page);\n\n      if (!!page.pages && !!page.pages.length) {\n        var url = page.originUrl || '';\n        var container = page.container || '';\n        var layout = page.layout || '';\n\n        var _iteratorNormalCompletion3 = true;\n        var _didIteratorError3 = false;\n        var _iteratorError3 = undefined;\n\n        try {\n          for (var _iterator3 = page.pages[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n            var subPage = _step3.value;\n\n            if (!subPage.url.startsWith('/')) {\n              subPage.url = (url === '/' ? '' : url) + '/' + subPage.url;\n            }\n\n            if (!subPage.container) {\n              subPage.container = container;\n            }\n\n            if (!subPage.layout) {\n              subPage.layout = layout;\n            }\n\n            pages.push(subPage);\n          }\n        } catch (err) {\n          _didIteratorError3 = true;\n          _iteratorError3 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion3 && _iterator3.return) {\n              _iterator3.return();\n            }\n          } finally {\n            if (_didIteratorError3) {\n              throw _iteratorError3;\n            }\n          }\n        }\n      }\n    }\n\n    options.routes['*actions'] = '___NOT_FOUND___';\n    options['___NOT_FOUND___'] = function (actions) {\n      if ('empty' in _this.settings) {\n        _this.settings.empty(actions);\n      }\n    };\n\n    this.router = new (Backbone.Router.extend(options))();\n  }\n};"
  },
  {
    "path": "lib/schema.js",
    "content": "'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nmodule.exports = {\n  create: function create(schemaName, defineSchema) {\n    var Schema = {\n      wwtype: 'schema',\n      schemaName: schemaName\n    };\n\n    function mixedDataWithSchema(data) {\n      var schema = {};\n\n      for (var key in defineSchema) {\n        if (defineSchema.hasOwnProperty(key)) {\n          schema[key] = void 0;\n        }\n      }\n\n      return Object.assign(schema, data);\n    }\n\n    Schema.validate = function (data) {\n      var mixedData = mixedDataWithSchema(data);\n\n      var errors = [];\n\n      for (var key in mixedData) {\n        if (mixedData.hasOwnProperty(key)) {\n          var type = defineSchema[key];\n\n          if (type && type.hasOwnProperty('__validate__')) {\n            var error = type.__validate__.call(type, key, data[key]);\n\n            if (error) errors.push(error);\n          } else {\n            (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && console.warn('Is not defined in the schema field \"' + key + '\" is present.');\n          }\n        }\n      }\n\n      return errors.length === 0 ? void 0 : errors;\n    };\n\n    Schema.toSchema = function () {\n      return defineSchema;\n    };\n\n    return Schema;\n  }\n};"
  },
  {
    "path": "lib/store.js",
    "content": "'use strict';\n\nmodule.exports = {\n  create: function create(states) {\n    return {\n      wwtype: 'store',\n      store: states\n    };\n  }\n};"
  },
  {
    "path": "lib/types.js",
    "content": "'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar Error = require('./error');\n\nvar TYPE = {\n  STRING: 'string',\n  NUMBER: 'number',\n  ARRAY: 'array',\n  EMAIL: 'email',\n  PHONE: 'phone',\n  BOOLEAN: 'boolean'\n};\nvar REQUIRED = 'required';\nvar DEFAULT_VALUE = 'defaultValue';\nvar MIN = 'min';\nvar MAX = 'max';\nvar FORMAT = 'format';\n\nvar defaultTypeOptions = {};\nvar partialValidator = {};\n\nvar validator = function validator(key, value) {\n  if (REQUIRED in this && !partialValidator[REQUIRED].call(this, value)) {\n    return Error.create('Required attribute \"' + key + '\" is missing.', { key: key, value: value });\n  }\n\n  if (value === void 0) return;\n\n  if (!partialValidator[this.name].call(this, value)) {\n    return Error.create('\"' + key + '\" type property must be \"' + this.name + '\".', { key: key, value: value });\n  }\n\n  if (this.name === TYPE.NUMBER) {\n    if (MIN in this && this[MIN] !== null && !partialValidator[MIN].call(this, value)) {\n      return Error.create('\"' + key + '\" is greater than ' + this[MIN] + '.', { key: key, value: value });\n    }\n\n    if (MAX in this && this[MAX] !== null && !partialValidator[MAX].call(this, value)) {\n      return Error.create('\"' + key + '\" may have a value of ' + this[MAX] + ' or less.', { key: key, value: value });\n    }\n  } else if (this.name === TYPE.STRING) {\n    if (MIN in this && this[MIN] !== null && !partialValidator[MIN].call(this, value)) {\n      return Error.create('\"' + key + '\" must be more than ' + this[MIN] + ' characters long.', { key: key, value: value });\n    }\n\n    if (MAX in this && this[MAX] !== null && !partialValidator[MAX].call(this, value)) {\n      return Error.create('\"' + key + '\" should be no longer than ' + this[MAX] + ' characters.', { key: key, value: value });\n    }\n  }\n};\n\nvar typeGenerator = function typeGenerator(name, supportOptions, options) {\n  var defaults = {},\n      type = void 0;\n\n  supportOptions.forEach(function (option) {\n    defaults[option] = defaultTypeOptions[option];\n  });\n\n  type = Object.assign({ name: name }, defaults, options);\n  type.__validate__ = validator;\n\n  return type;\n};\n\ndefaultTypeOptions[REQUIRED] = false;\ndefaultTypeOptions[DEFAULT_VALUE] = null;\ndefaultTypeOptions[MIN] = null;\ndefaultTypeOptions[MAX] = null;\ndefaultTypeOptions[FORMAT] = null;\n\npartialValidator[TYPE.STRING] = function (value) {\n  return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === TYPE.STRING;\n};\n\npartialValidator[TYPE.NUMBER] = function (value) {\n  if (typeof value === 'number') return true;\n\n  var stringType = String(value);\n  var match = stringType.match(/^[+-]?(\\d+\\.?\\d*)$|(\\d*\\.?\\d+)$/g);\n\n  if (!match) return false;\n  if (match.length > 1) return false;\n\n  return match[0].length === stringType.length;\n};\n\npartialValidator[TYPE.ARRAY] = function (value) {\n  return Array.isArray(value);\n};\n\npartialValidator[TYPE.EMAIL] = function (value) {\n  var regexp = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n  return regexp.test(value);\n};\n\npartialValidator[TYPE.BOOLEAN] = function (value) {\n  return Object.prototype.toString.call(value) === '[object Boolean]';\n};\n\npartialValidator[REQUIRED] = function (value) {\n  if (this[REQUIRED]) return value !== void 0 && value !== null;\n  return true;\n};\n\npartialValidator[MIN] = function (value) {\n  if (this.name === TYPE.NUMBER) {\n    return value >= this[MIN];\n  } else if (this.name === TYPE.STRING) {\n    return value.length >= this[MIN];\n  }\n  return true;\n};\n\npartialValidator[MAX] = function (value) {\n  if (this.name === TYPE.NUMBER) {\n    return value <= this[MAX];\n  } else if (this.name === TYPE.STRING) {\n    return value.length <= this[MAX];\n  }\n  return true;\n};\n\nmodule.exports = {\n  String: function String(options) {\n    return typeGenerator(TYPE.STRING, [REQUIRED, DEFAULT_VALUE, MIN, MAX, FORMAT], Object.assign({ defaultValue: '' }, options));\n  },\n  Number: function Number(options) {\n    return typeGenerator(TYPE.NUMBER, [REQUIRED, DEFAULT_VALUE, MIN, MAX], Object.assign({ defaultValue: 0 }, options));\n  },\n  Array: function Array(options) {\n    return typeGenerator(TYPE.ARRAY, [REQUIRED, DEFAULT_VALUE], Object.assign({ defaultValue: [] }, options));\n  },\n  Email: function Email(options) {\n    return typeGenerator(TYPE.EMAIL, [REQUIRED], Object.assign({}, options));\n  },\n  Boolean: function Boolean(options) {\n    return typeGenerator(TYPE.BOOLEAN, [REQUIRED], Object.assign({}, options));\n  }\n};"
  },
  {
    "path": "lib/view.js",
    "content": "'use strict';\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar Backbone = require('backbone');\n\nvar MIDDLEWARE = require('./middleware').MIDDLEWARE;\nvar MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\nvar MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nvar PluginText = require('./plugin/text');\nvar PluginInputText = require('./plugin/input-text');\nvar PluginCheckbox = require('./plugin/checkbox');\nvar PluginSelect = require('./plugin/select');\n\nvar delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\nvar childEventSplitter = /^\\@(\\w+)\\s*(.*)$/;\nvar DEFAULT_ATTR_TYPE = 'text';\n\nvar View = null;\nvar viewMount = null;\nvar app = null;\n\nviewMount = function viewMount() {\n  var tagName = this.tagName;\n  var container = this.container;\n  var template = this.template;\n  var domStr = void 0;\n  var $dom = void 0;\n\n  if (!container) {\n    throw new Error('[' + this.viewname + '] Required attribute \"container\" is missing.');\n  } else {\n    if (typeof container === 'string') {\n      container = $(container);\n    }\n  }\n\n  if (!container || !container.length) {\n    throw new Error('[' + this.viewname + '] \"container\" is undefined.');\n  }\n\n  var renderData = this.getModel();\n\n  if (typeof this.viewWillMount === 'function') {\n    renderData = this.viewWillMount(renderData) || renderData;\n  }\n\n  if (!!template) {\n    if (typeof template === 'string') {\n      domStr = template;\n    } else {\n      domStr = template(renderData);\n    }\n\n    if (tagName === 'div') {\n      var proto = this;\n\n      tagName = '';\n\n      do {\n        if (proto.hasOwnProperty('tagName') && !!proto.tagName) {\n          tagName = proto.tagName;\n          break;\n        }\n      } while ((proto = proto.__proto__) && proto.viewname !== '___WOOWA_VIEW___');\n    }\n\n    if (!!tagName || $(domStr).length > 1) {\n      $dom = $('<' + (tagName || 'div') + '>' + domStr + '</' + (tagName || 'div') + '>');\n    } else {\n      $dom = $(domStr);\n    }\n\n    if (!!this.className) {\n      $dom.addClass(this.className);\n    }\n\n    if (this._viewMounted) {\n      if ($.contains(container[0], this.el)) {\n        this.$el.replaceWith($dom);\n      } else {\n        container.html($dom);\n      }\n    } else {\n      if (!!this.append) {\n        container.append($dom);\n      } else if (!!this.prepend) {\n        container.prepend($dom);\n      } else if (!!this.after) {\n        container.after($dom);\n      } else {\n        container.html($dom);\n      }\n    }\n\n    this.setElement($dom);\n  } else {\n    this.setElement(container);\n  }\n\n  this._viewMounted = true;\n  this._bindRef();\n  this._bindModel();\n\n  if (typeof this.viewComponentDidMount === 'function') {\n    this.viewComponentDidMount($dom);\n  }\n\n  var viewDidMount = void 0;\n\n  if (typeof this.viewDidMount === 'function') {\n    viewDidMount = this.viewDidMount.bind(this, $dom);\n  }\n\n  var forceExcludeMiddleware = false;\n\n  if ('forceExcludeMiddleware' in this) {\n    forceExcludeMiddleware = typeof this.forceExcludeMiddleware === 'function' ? this.forceExcludeMiddleware() : this.forceExcludeMiddleware;\n  }\n\n  var middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.AFTER);\n\n  MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [this], function () {\n    var _this2 = this;\n\n    ['viewDidMount', 'mount'].forEach(function (type) {\n      _this2.dispatch(Woowahan.Event.create(type, _this2));\n      _this2.trigger(type);\n    });\n  }.bind(this), viewDidMount);\n};\n\nView = Backbone.View.extend({\n  super: function _super() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    View.prototype.initialize.apply(this, args);\n  },\n  initialize: function initialize(model) {\n    this._viewMounted = false;\n    this._views = {};\n    this.container = this.container;\n\n    if (!!model) {\n      this.setModel(model);\n    }\n\n    var forceExcludeMiddleware = false;\n\n    if ('forceExcludeMiddleware' in this) {\n      forceExcludeMiddleware = typeof this.forceExcludeMiddleware === 'function' ? this.forceExcludeMiddleware() : this.forceExcludeMiddleware;\n    }\n\n    var middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.BEFORE);\n\n    MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [this], function () {\n      viewMount.apply(this);\n    }.bind(this));\n  },\n\n\n  _plugins: {\n    'text': PluginText,\n    'input-text': PluginInputText,\n    'checkbox': PluginCheckbox,\n    'select': PluginSelect\n  },\n\n  delegateEvents: function delegateEvents(events) {\n    events = events || this.events;\n\n    if (!events) return this;\n\n    this.undelegateEvents();\n\n    for (var key in events) {\n      if (events.hasOwnProperty(key)) {\n        var method = events[key];\n        var match = key.match(delegateEventSplitter);\n        var childMatch = key.match(childEventSplitter);\n        var eventName = void 0;\n        var selector = void 0;\n        var listener = void 0;\n\n        if (!!childMatch) {\n          var index = method.indexOf('(');\n\n          var params = [];\n\n          eventName = childMatch[1];\n          selector = childMatch[2];\n\n          if (!!~index) {\n            params = method.substring(index + 1, method.length - 1).split(',').map(function (el) {\n              return $.trim(el);\n            });\n            method = method.substring(0, index);\n          }\n\n          listener = function (eventName, selector, method, params, event) {\n            var _this = this;\n\n            var getVal = function getVal($el) {\n              if ($el.is('input[type=checkbox]') || $el.is('input[type=radio]')) {\n                return $el.is(':checked');\n              } else if ($el.is('select')) {\n                return $el.val();\n              } else {\n                return $el.val() || $el.text();\n              }\n            };\n\n            var values = params.map(function (param) {\n              return getVal(_this.$(param));\n            });\n\n            if (eventName === 'submit') {\n              var inputs = {};\n\n              var _iteratorNormalCompletion = true;\n              var _didIteratorError = false;\n              var _iteratorError = undefined;\n\n              try {\n                for (var _iterator = _this.$(selector).find('input, select, textarea')[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                  var el = _step.value;\n\n                  inputs[$(el).attr('name')] = getVal($(el));\n                }\n              } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion && _iterator.return) {\n                    _iterator.return();\n                  }\n                } finally {\n                  if (_didIteratorError) {\n                    throw _iteratorError;\n                  }\n                }\n              }\n\n              values.push(inputs);\n            }\n\n            if (Object.prototype.toString.call(method) !== '[object Function]') {\n              method = this[method];\n            }\n\n            for (var _len2 = arguments.length, args = Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) {\n              args[_key2 - 5] = arguments[_key2];\n            }\n\n            return method.apply(this, Array.prototype.concat.call(values, args, event));\n          }.bind(this, eventName, selector, method, params);\n        } else {\n          if (Object.prototype.toString.call(method) !== '[object Function]') {\n            method = this[method];\n          }\n\n          if (!method) continue;\n\n          eventName = match[1];\n          selector = match[2];\n\n          listener = method.bind(this);\n        }\n\n        this.delegate(eventName, selector, listener);\n      }\n    }\n\n    return this;\n  },\n  updateView: function updateView(container, ChildView) {\n    for (var _len3 = arguments.length, args = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n      args[_key3 - 2] = arguments[_key3];\n    }\n\n    if (arguments.length === 0) {\n      this.close(false);\n\n      viewMount.apply(this);\n\n      return;\n    }\n\n    var viewContainer = void 0;\n    var viewId = void 0;\n\n    viewContainer = this.$(container);\n\n    if (!viewContainer.length) {\n      viewContainer = $(container);\n    }\n\n    if (!viewContainer.length) {\n      throw new Error('View must have container');\n    }\n\n    viewId = viewContainer.data('ref') || viewContainer.selector || container;\n\n    if (!!container && !ChildView) {\n      if (!!this._views[viewId]) {\n        this._views[viewId].close();\n\n        delete this._views[viewId];\n      }\n\n      return;\n    }\n\n    if (typeof ChildView !== 'function') {\n      args = ChildView;\n    }\n\n    var view = this._views[viewId];\n\n    if (!!view) {\n      view.setModel.apply(view, Array.prototype.concat.call(args, { silent: true }));\n      view.container = viewContainer;\n\n      var forceExcludeMiddleware = false;\n\n      if ('forceExcludeMiddleware' in view) {\n        forceExcludeMiddleware = typeof view.forceExcludeMiddleware === 'function' ? view.forceExcludeMiddleware() : view.forceExcludeMiddleware;\n      }\n\n      var middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.UNMOUNT);\n\n      MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.UNMOUNT, [this], function () {\n        if (typeof view.viewWillUnmount === 'function') {\n          view.viewWillUnmount.call(view);\n        }\n\n        view.dispatch(Woowahan.Event.create('unmount', this));\n        view.trigger('unmount');\n\n        viewMount.apply(this._views[viewId]);\n      }.bind(this));\n    } else {\n      ChildView.prototype.container = viewContainer;\n\n      view = new (Function.prototype.bind.apply(ChildView, Array.prototype.concat.call(ChildView, args)))();\n\n      this._views[viewId] = view;\n    }\n\n    return view;\n  },\n  addView: function addView(container, ChildView) {\n    this.removeView(container);\n\n    for (var _len4 = arguments.length, args = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {\n      args[_key4 - 2] = arguments[_key4];\n    }\n\n    return this.updateView.apply(this, [container, ChildView].concat(args));\n  },\n  removeView: function removeView(container) {\n    if (!!$(container).length) {\n      this.updateView(container);\n    }\n  },\n  addPopup: function addPopup(view) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var callback = arguments[2];\n\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n\n    view = typeof view === 'string' ? this.getComponent(view) : view;\n\n    var name = view.viewname;\n\n    var containerName = void 0;\n    var container = void 0;\n    var popup = void 0;\n\n    if (!!view) {\n      var _id = options._id || name + 'Container' + Date.now();\n\n      if (!!$('div[data-id=' + _id + ']').length) {\n        return;\n      }\n\n      containerName = _id;\n      container = $('<div data-id=\"' + containerName + '\"></div>');\n\n      $('body').append(container);\n\n      popup = this.addView('div[data-id=' + containerName + ']', view, Object.assign(options, { _id: _id }));\n\n      popup.on('remove', function () {\n        popup.off('remove');\n\n        $('div[data-id=' + containerName + ']').remove();\n      });\n\n      popup.closePopup = function (containerName, callback, data) {\n        this.removeView('div[data-id=' + containerName + ']');\n\n        if (!!callback) {\n          callback.call(this, data);\n        }\n      }.bind(this, containerName, callback);\n\n      return popup;\n    } else {\n      console.error('undefined popup name [' + name + ']');\n    }\n  },\n  getStates: function getStates(key) {\n    return app.getStates(key);\n  },\n  setStates: function setStates(key, value) {\n    app.setStates(key, value);\n  },\n  getComponent: function getComponent(name) {\n    return app.getComponent(name).extend({});\n  },\n  getRouteTables: function getRouteTables(routeName, params, query) {\n    if (routeName === void 0) {\n      return app.getRouteTables();\n    }\n\n    var path = app.getRouteTables()[routeName];\n\n    if (!path) {\n      console.error('\"' + routeName + '\" not found');\n      return;\n    }\n\n    if (typeof params === 'string') {\n      return path() + '?' + encodeURIComponent(params);\n    } else {\n      if (typeof query === 'string') {\n        return path(params) + '?' + encodeURIComponent(query);\n      } else {\n        return path(params);\n      }\n    }\n  },\n  dispatch: function dispatch(action, subscriber, options) {\n    var _$el;\n\n    action.__options = options || {};\n\n    switch (action.wwtype) {\n      case 'event':\n        (_$el = this.$el).trigger.apply(_$el, [action.type].concat(_toConsumableArray(action.data)));\n        break;\n      case 'action':\n        if (!!subscriber) {\n          subscriber = subscriber.bind(this);\n        }\n\n        app.dispatch(action, subscriber);\n        break;\n    }\n  },\n  setModel: function setModel(key, value) {\n    var attrs = void 0;\n\n    if (typeof key === 'string' && typeof value !== 'undefined') {\n      attrs = _defineProperty({}, key, value);\n    } else {\n      attrs = key;\n    }\n\n    if (attrs instanceof Backbone.Model) {\n      if (!!this.model) {\n        this._unbindModel();\n      }\n\n      this.model = attrs.clone();\n\n      if (this._viewMounted) {\n        this._bindModel();\n      }\n      return;\n    }\n\n    if (Object.prototype.toString.call(attrs) === '[object Null]' || !this.model || !(this.model instanceof Backbone.Model)) {\n      this.model = new Backbone.Model();\n\n      if (this._viewMounted) {\n        this._bindModel();\n      }\n    }\n\n    for (var attr in attrs) {\n      if (attrs.hasOwnProperty(attr)) {\n        var _value = this.model.get(attr);\n\n        if (_value !== attrs[attr]) {\n          this.model.set(attr, attrs[attr]);\n        }\n      }\n    }\n  },\n  getModel: function getModel(key) {\n    if (!this.model || !(this.model instanceof Backbone.Model)) {\n      this.model = new Backbone.Model();\n    }\n\n    if (!key) {\n      return this.model.clone().toJSON();\n    }\n\n    return this.model.clone().get(key);\n  },\n  log: function log() {\n    console.warn('View.log:: Deprecated and will be removed in a future release.');\n  },\n  logStamp: function logStamp() {\n    for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n      args[_key5] = arguments[_key5];\n    }\n\n    this.log(args);\n  },\n  close: function close(remove) {\n    this._unbindModel();\n\n    var forceExcludeMiddleware = false;\n\n    if ('forceExcludeMiddleware' in this) {\n      forceExcludeMiddleware = typeof this.forceExcludeMiddleware === 'function' ? this.forceExcludeMiddleware() : this.forceExcludeMiddleware;\n    }\n\n    var middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.UNMOUNT);\n\n    MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.UNMOUNT, [this], function () {\n      var _this3 = this;\n\n      if (typeof this.viewWillUnmount === 'function') {\n        this.viewWillUnmount();\n      }\n\n      if (this.refs) {\n        Object.keys(this.refs).forEach(function (refName) {\n          if (Array.isArray(_this3.refs[refName])) {\n            _this3.refs[refName] = [];\n          }\n        });\n      }\n\n      this.dispatch(Woowahan.Event.create('unmount', this));\n      this.trigger('unmount');\n\n      this._removeChild(remove);\n\n      if (remove + '' !== 'false' && !!this) {\n        this._unbindRef();\n        this.remove();\n      }\n    }.bind(this));\n  },\n  remove: function remove() {\n    this.dispatch(Woowahan.Event.create('remove', this));\n    this.trigger('remove');\n\n    for (var _len6 = arguments.length, args = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n      args[_key6] = arguments[_key6];\n    }\n\n    Backbone.View.prototype.remove.apply(this, args);\n  },\n  _syncElement: function _syncElement(source, target) {\n    var $source = $(source);\n    var $target = $(target);\n\n    if ($source.is('input[type=text]') || $source.is('input[type=number]') || $source.is('input[type=tel]') || $source.is('textarea')) {\n      $target.val($source.val());\n    } else if ($source.is('input[type=checkbox]') || $source.is('input[type=radio]')) {\n      $target.prop('checked', $source.is(':checked'));\n    } else if ($source.is('select')) {\n      $target.val($source.val());\n    }\n  },\n  _bindRef: function _bindRef() {\n    if (!this.refs) {\n      this.refs = {};\n    }\n\n    var _iteratorNormalCompletion2 = true;\n    var _didIteratorError2 = false;\n    var _iteratorError2 = undefined;\n\n    try {\n      for (var _iterator2 = this.$el.find('[data-ref]')[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n        var element = _step2.value;\n\n        var $element = $(element);\n        var refName = $element.data('ref');\n        var refGroup = $element.data('refGroup') || false;\n        var refFormRestore = $element.data('refFormRestore') || false;\n\n        if (refGroup) {\n          if (this.refs[refName]) {\n            this.refs[refName].push(element);\n          } else {\n            this.refs[refName] = [element];\n          }\n        } else {\n          var currentElement = this.refs[refName];\n\n          this.refs[refName] = element;\n\n          if (currentElement) {\n            refFormRestore && this._syncElement(currentElement, this.refs[refName]);\n            currentElement = null;\n          }\n        }\n      }\n    } catch (err) {\n      _didIteratorError2 = true;\n      _iteratorError2 = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n          _iterator2.return();\n        }\n      } finally {\n        if (_didIteratorError2) {\n          throw _iteratorError2;\n        }\n      }\n    }\n  },\n  _bindModel: function _bindModel() {\n    var _this4 = this;\n\n    this._unbindModel();\n\n    var targetElements = this.$el.find('[data-role=bind]');\n    var element = void 0;\n\n    var _iteratorNormalCompletion3 = true;\n    var _didIteratorError3 = false;\n    var _iteratorError3 = undefined;\n\n    try {\n      for (var _iterator3 = targetElements[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n        element = _step3.value;\n\n        var key = $(element).data('name');\n        var eventName = 'change:' + key;\n        var type = ($(element).data('type') || DEFAULT_ATTR_TYPE).toLowerCase();\n        var value = this.model.get(key);\n\n        this.listenTo(this.model, eventName, function (element, key, type) {\n          var value = this.model.get(key);\n\n          this._plugins[type].call(this, element, value);\n        }.bind(this, element, key, type));\n\n        if (typeof value !== 'undefined') this._plugins[type].call(this, element, value);\n      }\n    } catch (err) {\n      _didIteratorError3 = true;\n      _iteratorError3 = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion3 && _iterator3.return) {\n          _iterator3.return();\n        }\n      } finally {\n        if (_didIteratorError3) {\n          throw _iteratorError3;\n        }\n      }\n    }\n\n    targetElements = this.$el.find('[data-role=plugin]');\n\n    var _iteratorNormalCompletion4 = true;\n    var _didIteratorError4 = false;\n    var _iteratorError4 = undefined;\n\n    try {\n      for (var _iterator4 = targetElements[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n        element = _step4.value;\n\n        var plugins = $(element).data('plugins');\n\n        if (!plugins) throw new Error('plugin must have plugins');\n\n        plugins.split('+').map(function (s) {\n          return $.trim(s);\n        }).forEach(function (plugin) {\n          var _plugin$split$map = plugin.split('=>').map(function (s) {\n            return $.trim(s);\n          }),\n              _plugin$split$map2 = _slicedToArray(_plugin$split$map, 2),\n              keys = _plugin$split$map2[0],\n              type = _plugin$split$map2[1];\n\n          keys = keys.split(',').map(function (k) {\n            return $.trim(k);\n          });\n          type = type.toLowerCase();\n\n          keys.forEach(function (key) {\n            if (key === '') return;\n\n            var value = _this4.model.get(key);\n\n            _this4.listenTo(_this4.model, 'change:' + key, function (element, key, type) {\n              var value = this.model.get(key);\n\n              this._plugins[type].call(this, element, value);\n            }.bind(_this4, element, key, type));\n\n            if (typeof value !== 'undefined') _this4._plugins[type].call(_this4, element, value);\n          });\n        });\n      }\n    } catch (err) {\n      _didIteratorError4 = true;\n      _iteratorError4 = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion4 && _iterator4.return) {\n          _iterator4.return();\n        }\n      } finally {\n        if (_didIteratorError4) {\n          throw _iteratorError4;\n        }\n      }\n    }\n  },\n  _unbindRef: function _unbindRef() {\n    for (var ref in this.refs) {\n      if (this.refs.hasOwnProperty(ref)) {\n        this.refs[ref] = null;\n      }\n    }\n\n    this.refs = null;\n  },\n  _unbindModel: function _unbindModel() {\n    this.stopListening(this.model);\n  },\n  _removeChild: function _removeChild(remove) {\n    for (var key in this._views) {\n      if (this._views.hasOwnProperty(key)) {\n        this._views[key].close.call(this._views[key], remove);\n        delete this._views[key];\n      }\n    }\n  }\n});\n\nView.create = function (viewName, options) {\n  var view = View.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function (toolset) {\n  if (!app) {\n    app = toolset;\n  }\n\n  return View;\n};"
  },
  {
    "path": "lib/woowahan.js",
    "content": "'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Backbone = require('backbone');\nvar Router = require('./router');\nvar MIDDLEWARE = require('./middleware').MIDDLEWARE;\nvar MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\nvar MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nvar INTERVAL = 1000 / 60;\n\nvar toolset = {\n  get dispatch() {\n    return instance.dispatch.bind(instance);\n  },\n\n  get getMiddleware() {\n    return instance.getMiddleware.bind(instance);\n  },\n\n  get getStates() {\n    return instance.getStates.bind(instance);\n  },\n\n  get setStates() {\n    return instance.setStates.bind(instance);\n  },\n\n  get getComponent() {\n    return instance.getComponent.bind(instance);\n  },\n\n  get getRouteTables() {\n    return instance.getRouteTables.bind(instance);\n  },\n\n  get addAction() {\n    return instance.addAction.bind(instance);\n  },\n\n  get removeAction() {\n    return instance.removeAction.bind(instance);\n  },\n\n  get addError() {\n    return instance.addError.bind(instance);\n  }\n};\n\nvar instance = void 0;\n\nif (global.__backboneAgent) {\n  global.__backboneAgent.handleBackbone(Backbone);\n}\n\nBackbone.Model.prototype.idAttribute = '___ID_ATTR___';\nBackbone.View.prototype.viewname = '___WOOWA_VIEW___';\n\nvar Woowahan = function () {\n  function Woowahan() {\n    var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, Woowahan);\n\n    this.reducers = settings.reducers || {};\n    this.components = settings.components || {};\n    this.middlewares = {\n      app: {\n        before: [],\n        after: []\n      },\n      router: {\n        before: [],\n        after: []\n      },\n      reducer: {\n        before: [],\n        after: []\n      },\n      view: {\n        before: [],\n        after: [],\n        unmount: []\n      }\n    };\n\n    this.importViews = {};\n    this.store = null;\n    this.queue = [];\n    this.pretasks = [];\n    this.actionObject = {};\n    this.queuemonitor = null;\n\n    instance = this;\n\n    this.enableQueue();\n  }\n\n  _createClass(Woowahan, [{\n    key: 'import',\n    value: function _import(Package) {\n      var _this = this;\n\n      Object.keys(Package.reducers || {}).forEach(function (reducerName) {\n        return _this.use(Package.reducers[reducerName]);\n      });\n\n      Object.keys(Package.views || {}).forEach(function (viewname) {\n        return _this.importViews[viewname] = Package.views[viewname];\n      });\n    }\n  }, {\n    key: 'getView',\n    value: function getView(viewname) {\n      return this.importViews[viewname];\n    }\n  }, {\n    key: 'enableQueue',\n    value: function enableQueue() {\n      this.queuemonitor = setInterval(this.queuing.bind(this), INTERVAL);\n    }\n  }, {\n    key: 'disableQueue',\n    value: function disableQueue() {\n      this.queuemonitor = clearInterval(this.queuemonitor);\n    }\n  }, {\n    key: 'addAction',\n    value: function addAction(id) {\n      this.actionObject[id] = Date.now();\n\n      if (this.numberOfWorkAction() === 1) {\n        this.trigger('start');\n      }\n    }\n  }, {\n    key: 'removeAction',\n    value: function removeAction(id) {\n      delete this.actionObject[id];\n\n      if (this.numberOfWorkAction() === 0) {\n        this.trigger('finish');\n      }\n    }\n  }, {\n    key: 'addError',\n    value: function addError(err) {\n      this.trigger('error', err);\n    }\n  }, {\n    key: 'queuing',\n    value: function queuing() {\n      this.disableQueue();\n\n      var item = this.queue.shift();\n\n      if (!!item) {\n        var reducer = this.reducers[item.action.type];\n\n        if (!reducer) {\n          this.enableQueue();\n          throw new Error('The unregistered reducer. Please check the type of action, if there is a written reducer use after registration.');\n        }\n\n        item.subscriber = item.subscriber || function () {};\n\n        if (typeof item.subscriber !== 'function') {\n          this.enableQueue();\n          throw new Error('The listener must be a function. If you do not need the listener it may not be specified.');\n        }\n\n        if (reducer.schema) {\n          var errors = reducer.schema.validate(item.action.data);\n\n          if (errors) {\n            this.trigger('error', errors);\n          } else {\n            new (Function.prototype.bind.apply(reducer, Array.prototype.concat.call(reducer, item.action.data, item.subscriber.bind(this))))();\n          }\n        } else {\n          new (Function.prototype.bind.apply(reducer, Array.prototype.concat.call(reducer, item.action.data, item.subscriber.bind(this))))();\n        }\n      }\n\n      this.enableQueue();\n    }\n  }, {\n    key: 'bindStore',\n    value: function bindStore(store) {\n      this.store = store;\n    }\n  }, {\n    key: 'bindReducer',\n    value: function bindReducer(reducer) {\n      this.reducers[reducer.actionName] = reducer;\n    }\n  }, {\n    key: 'bindComponent',\n    value: function bindComponent(component) {\n      this.components[component.name] = component;\n    }\n  }, {\n    key: 'bindPlugin',\n    value: function bindPlugin(plugin) {\n      var type = plugin.type.toLowerCase();\n\n      if (Woowahan.View.prototype._plugins.hasOwnProperty(type)) {\n        throw new Error('Duplicate plugin name');\n      }\n\n      Woowahan.View.prototype._plugins[type] = plugin.plugin;\n    }\n  }, {\n    key: 'combineReducer',\n    value: function combineReducer(reducers) {\n      var _this2 = this;\n\n      if (!reducers) return;\n\n      reducers.forEach(function (reducer) {\n        _this2.bindReducer(reducer);\n      });\n    }\n  }, {\n    key: 'getStates',\n    value: function getStates(key) {\n      return typeof key !== 'undefined' ? this.store[key] : this.store;\n    }\n  }, {\n    key: 'setStates',\n    value: function setStates(key, value) {\n      var store = void 0;\n\n      if (typeof key === 'string' && typeof value !== 'undefined') {\n        store = _defineProperty({}, key, value);\n      } else {\n        store = key;\n      }\n\n      if (!this.store) {\n        this.store = {};\n      }\n\n      Object.assign(this.store, store);\n    }\n  }, {\n    key: 'getMiddleware',\n    value: function getMiddleware(type, delegate) {\n      return this.middlewares[type][delegate];\n    }\n  }, {\n    key: 'getComponent',\n    value: function getComponent(name) {\n      var component = this.components[name];\n\n      if (!!component) {\n        return component.view;\n      }\n    }\n  }, {\n    key: 'getRouteTables',\n    value: function getRouteTables() {\n      return Router.routeTables;\n    }\n  }, {\n    key: 'dispatch',\n    value: function dispatch(action, subscriber) {\n      this.queue.push({ action: action, subscriber: subscriber });\n    }\n  }, {\n    key: 'use',\n    value: function use(module) {\n      var _this3 = this;\n\n      if (Array.isArray(module)) {\n        module.forEach(function (m) {\n          return _this3.useModule(m);\n        });\n      } else {\n        if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && !('wwtype' in module)) {\n          Object.keys(module).forEach(function (key) {\n            if (typeof module[key] === 'function') _this3.useModule(module[key]);\n          });\n        } else {\n          this.useModule(module);\n        }\n      }\n    }\n  }, {\n    key: 'useModule',\n    value: function useModule(module) {\n      switch (module.wwtype) {\n        case 'reducer':\n          this.bindReducer(module);\n          break;\n        case 'layout':\n          Router.bindLayout(module);\n          break;\n        case 'store':\n          this.bindStore(module.store);\n          break;\n        case 'component':\n          console.warn('Component:: Deprecated and will be removed in a future release.');\n          this.bindComponent(module);\n          break;\n        case 'plugin':\n          this.bindPlugin(module);\n          break;\n      }\n    }\n  }, {\n    key: 'set',\n    value: function set(middleware) {\n      var _this4 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var instance = new middleware(options);\n\n      if (instance.mwtype) {\n        Object.values(MIDDLEWARE_PROTOCOL).forEach(function (delegate) {\n          delegate in instance && _this4.middlewares[instance.mwtype][delegate].push(instance);\n        });\n      } else {\n        throw new Error('Required attribute \"mwtype\" is missing.');\n      }\n    }\n  }, {\n    key: 'start',\n    value: function start(design) {\n      var _this5 = this;\n\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (typeof jQuery === 'undefined') {\n        throw new Error('jQuery is not loaded!!');\n      }\n\n      var wait = setInterval(function () {\n        switch (document.readyState) {\n          case 'complete':case 'loaded':\n            break;\n          default:\n            return;\n        }\n\n        clearInterval(wait);\n\n        if (Backbone.History.started) {\n          Backbone.history.stop();\n        }\n\n        if (!!design) {\n          Router.design(design, options, toolset);\n        }\n\n        var middlewares = _this5.getMiddleware(MIDDLEWARE.APP, MIDDLEWARE_PROTOCOL.BEFORE);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [toolset], function () {\n          middlewares = this.getMiddleware(MIDDLEWARE.APP, MIDDLEWARE_PROTOCOL.AFTER);\n\n          MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [toolset], function () {\n            Backbone.history.start({ pushState: !!options.pushState });\n          });\n        }.bind(_this5));\n      }, 1);\n    }\n  }, {\n    key: 'numberOfAction',\n    value: function numberOfAction() {\n      return this.queue.length;\n    }\n  }, {\n    key: 'numberOfWorkAction',\n    value: function numberOfWorkAction() {\n      return Object.keys(this.actionObject).length;\n    }\n  }]);\n\n  return Woowahan;\n}();\n\nObject.assign(Woowahan.prototype, Backbone.Events);\n\nWoowahan.$ = Backbone.$;\n\nWoowahan.View = require('./view')(toolset);\nWoowahan.Reducer = require('./reducer')(toolset);\nWoowahan.Error = require('./error');\nWoowahan.Types = require('./types');\nWoowahan.Store = require('./store');\nWoowahan.Action = require('./action');\nWoowahan.Event = require('./event');\nWoowahan.Schema = require('./schema');\nWoowahan.Layout = require('./layout');\nWoowahan.Component = require('./component');\nWoowahan.Plugin = require('./plugin');\n\nmodule.exports = global.Woowahan = Woowahan;\n\nWoowahan.CollectionView = require('./collection-view')(toolset);\nWoowahan.ItemView = require('./item-view')(toolset);\nWoowahan.PopupView = require('./popup-view')(toolset);\n\nWoowahan.version = '1.2.2';"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"woowahan\",\n  \"version\": \"1.2.2\",\n  \"description\": \"Web application framework for BackboneJS\",\n  \"main\": \"./lib/woowahan.js\",\n  \"scripts\": {\n    \"build\": \"run-s clean:* compile relocation bundling\",\n    \"clean:lib\": \"rm -rf lib\",\n    \"clean:dist\": \"rm -rf dist\",\n    \"compile\": \"babel --no-comments --presets es2015 --out-dir lib src/*js src/**/*js\",\n    \"relocation\": \"mv -f lib/src/* lib && rm -rf lib/src\",\n    \"bundling\": \"webpack ./index.js dist/woowahan.js --module-bind js=babel-loader --optimize-minimize\",\n    \"proxy-server\": \"node ./server/proxy.js\",\n    \"demo-server\": \"node ./server/demo.js\",\n    \"version-patch\": \"npm version patch\",\n    \"test\": \"./node_modules/mocha/bin/mocha --require babel-core/register\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/woowabros/WoowahanJS.git\"\n  },\n  \"keywords\": [\n    \"framework\",\n    \"backbonejs\",\n    \"woowahanjs\",\n    \"webapp\"\n  ],\n  \"author\": \"Woowabros\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/woowabros/WoowahanJS/issues\"\n  },\n  \"homepage\": \"https://github.com/woowabros/WoowahanJS#readme\",\n  \"dependencies\": {\n    \"backbone\": \"^1.3.3\",\n    \"jquery\": \"^2.2.4\",\n    \"lodash\": \"^4.17.5\"\n  },\n  \"devDependencies\": {\n    \"babel-cli\": \"^6.26.0\",\n    \"babel-core\": \"^6.26.0\",\n    \"babel-loader\": \"^7.1.2\",\n    \"babel-preset-es2015\": \"^6.24.1\",\n    \"chai\": \"^2.3.0\",\n    \"mocha\": \"^2.2.1\",\n    \"morgan\": \"^1.7.0\",\n    \"npm-run-all\": \"^4.1.2\",\n    \"uglifyjs-webpack-plugin\": \"^1.1.8\",\n    \"webpack\": \"^3.10.0\"\n  }\n}\n"
  },
  {
    "path": "src/action.js",
    "content": "module.exports = {\n  create(type, data = {}) {\n    return {\n      wwtype: 'action',\n      type: type,\n      data\n    };\n  }\n};"
  },
  {
    "path": "src/collection-view.js",
    "content": "const Collection = require('backbone').Collection;\nconst Woowahan = require('./woowahan');\nconst events = require('./events');\n\nconst ListViewEvents = [\n  events.SELECTED_ROW,\n  events.SELECTED_CELL\n];\n\nlet CollectionView;\nlet app;\n\nCollectionView = Woowahan.View.create('CollectionView', {\n  super(...args) {\n    CollectionView.prototype.initialize.apply(this, args);\n  },\n\n  initialize(...args) {\n    this.collection = this.collection || new Collection();\n    this.collection.on('add', this.addRowView, this);\n\n    this.rowViews = [];\n    this.reverse = false;\n\n    Woowahan.View.prototype.initialize.apply(this, args);\n  },\n  \n  viewWillUnmount() {\n    let model;\n\n    while (model = this.collection.first()) {\n      this.collection.remove(model);\n    }\n\n    this.rowViews = [];\n  },\n\n  addRowView(model) {\n    let container = this.$(this.rowContainer);\n\n    if (!container.length) {\n      container = this.$el;\n\n      if (!this.$el.is(this.rowContainer)) {\n        throw new Error('undefined rowContainer');\n      }\n    }\n\n    this.rowView.prototype.container = container;\n\n    if (this.reverse) {\n      this.rowView.prototype.prepend = true;\n    } else {\n      this.rowView.prototype.append = true;\n    }\n\n    let view = new this.rowView(model);\n\n    this.rowViews.push(view);\n\n    model.on('remove', () => {\n      this.rowViews.splice(this.rowViews.indexOf(view), 1);\n\n      view.close();\n    }, view);\n\n    model.on('change', data => {\n      view.setModel(data.toJSON());\n      view.updateView();\n    }, view);\n\n    ListViewEvents.forEach(event => view.on(event, this[`on${event.charAt(0).toUpperCase()}${event.slice(1)}`], this));\n  },\n\n  reload(data = [], options = {}) {\n    if (Object.prototype.toString.call(options) !== '[object Object]') {\n      throw new Error('invalid options!!!');\n    }\n\n    const uid = options.uid;\n\n    let renderData = data.filter(item => !!item).map(item => {\n      if (!!uid) {\n        const model = this.collection.findWhere({ [uid]: item[uid] });\n\n        if (!!model) {\n          model.set(item);\n\n          return model;\n        }\n      }\n\n      return item;\n    });\n\n    this.reverse = ('reverse' in options) ? options.reverse : false;\n\n    this.collection.set(renderData, { remove: ('reset' in options) ? options.reset : true });\n  },\n\n  getCollection() {\n    return this.rowViews.map(view => view.getModel());\n  },\n\n  onSelectedRow() {\n    this.log('selectedRow');\n  },\n\n  onSelectedCell() {\n    this.log('selectedCell');\n  },\n\n  onAction() {\n    this.log('onAction');\n  },\n\n  onClose() {\n    this.rowViews.forEach(row => row.close());\n  }\n});\n\nCollectionView.create = (viewName, options) => {\n  let view = CollectionView.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function(toolset) {\n  if (!app) {\n    app = toolset;\n  }\n  \n  return CollectionView;\n};"
  },
  {
    "path": "src/component.js",
    "content": "module.exports = (name, view) => {\n  return {\n    view: view,\n    name: name,\n    viewName: view.viewname,\n    wwtype: 'component'\n  };\n};"
  },
  {
    "path": "src/error.js",
    "content": "module.exports = {\n  create: (message, target) => ({ wwtype: 'error', code: 1, message, target })\n};"
  },
  {
    "path": "src/event.js",
    "content": "module.exports = {\n  create(type, ...args) {\n    return {\n      wwtype: 'event',\n      type: type,\n      data: args\n    };\n  }\n};"
  },
  {
    "path": "src/events.js",
    "content": "module.exports = {\n  SELECTED_ROW: 'selectedRow',\n  SELECTED_CELL: 'selectedCell'\n};"
  },
  {
    "path": "src/item-view.js",
    "content": "const Woowahan = require('./woowahan');\nconst events = require('./events');\n\nlet ItemView;\nlet app;\n\nItemView = Woowahan.View.create('ItemView', {\n\n  events: {\n    'click': '_onSelectedRow'\n  },\n\n  super(...args) {\n    ItemView.prototype.initialize.apply(this, args);\n  },\n\n  initialize(...args) {\n    Woowahan.View.prototype.initialize.apply(this, args);\n  },\n\n  _onSelectedRow(event) {\n    if (this.onSelectedRow && typeof this.onSelectedRow === 'function') {\n      this.onSelectedRow(event, function(...args) {\n        this.trigger.apply(this, Array.prototype.concat.call([], events.SELECTED_ROW, args));\n      }.bind(this));\n    }\n  },\n\n  _onSelectedCell(event) {\n    if (this.onSelectedCell && typeof this.onSelectedCell === 'function') {\n      this.onSelectedRow(event, function(...args) {\n        this.trigger.apply(this, Array.prototype.concat.call([], events.SELECTED_CELL, args));\n      }.bind(this));\n    }\n  }\n});\n\nItemView.create = (viewName, options) => {\n  let view = ItemView.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function(toolset) {\n  if (!app) {\n    app = toolset;\n  }\n  \n  return ItemView;\n};"
  },
  {
    "path": "src/layout.js",
    "content": "module.exports = (container, view, options) => {\n  return {\n    view,\n    container,\n    options: Object.assign({ update: true }, options),\n    viewName: view.viewname,\n    wwtype: 'layout'\n  };\n};"
  },
  {
    "path": "src/middleware.js",
    "content": "export const MIDDLEWARE = {\n  APP: 'app',\n  VIEW: 'view',\n  REDUCER: 'reducer',\n  ROUTER: 'router',\n};\n\nexport const MIDDLEWARE_PROTOCOL = {\n  BEFORE: 'before',\n  AFTER: 'after',\n  UNMOUNT: 'unmount',\n};\n\nconst queue = [];\n\nlet _isRunning = false;\n\nexport const MiddlewareRunner = {\n  get isRunning() {\n    return _isRunning;\n  },\n  run(middlewares, protocol, params, callback, preprocess) {\n    if (!Array.isArray(middlewares) || typeof protocol !== 'string') throw new Error('MiddlewareRunner arguments error');\n\n    if (_isRunning) {\n      queue.push([middlewares, protocol, params, callback, preprocess]);\n\n      return;\n    }\n\n    _isRunning = true;\n\n    const featuresLen = params.length;\n\n    let index = 0;\n\n    const next = function() {\n      const curr = middlewares[index++];\n\n      if (curr) {\n        const middleware = curr[protocol];\n\n        if (middleware.length > featuresLen) {\n          middleware.call(curr, ...params, next);\n        } else {\n          middleware.call(curr, ...params);\n\n          // next();\n          setTimeout(next, 1);\n        }\n      } else {\n        !!callback && callback();\n\n        const task = queue.shift();\n\n        _isRunning = false;\n\n        if (!!task) {\n          MiddlewareRunner.run(...task);\n        }\n      }\n    };\n\n    if (typeof preprocess === 'function') preprocess();\n\n    next();\n  }\n};"
  },
  {
    "path": "src/plugin/checkbox.js",
    "content": "module.exports = function(element, value) {\n  $(element).prop('checked', !!value);\n};"
  },
  {
    "path": "src/plugin/input-text.js",
    "content": "module.exports = function(element, value) {\n  $(element).val(value);\n};"
  },
  {
    "path": "src/plugin/select.js",
    "content": "module.exports = function(element, value) {\n  let selectedIndex = 0;\n  let opts;\n\n  if (Array.isArray(value)) {\n    if (!value.length) {\n      return;\n    } else {\n      opts = Array.from(value);\n    }\n  } else {\n    if (typeof value === 'undefined') {\n      return;\n    } else {\n      opts = Array.from([value]);\n    }\n  }\n\n  element.innerHTML = '';\n\n  for (const [index, opt] of opts.entries()) {\n    let label;\n    let val;\n\n    if (typeof opt === 'string') {\n      label = opt;\n      val = opt;\n    } else {\n      label = opt.label;\n      val = opt.value;\n    }\n\n    if (!!opt.selected) {\n      selectedIndex = index;\n    }\n\n    $(element).append(`<option value=\"${val}\">${label}</option>`);\n  }\n\n  $(element).children('option').eq(selectedIndex).attr('selected', 'selected');\n  $(element).trigger('change');\n};"
  },
  {
    "path": "src/plugin/text.js",
    "content": "module.exports = function(element, value) {\n  $(element).text(value);\n};"
  },
  {
    "path": "src/plugin.js",
    "content": "module.exports = (type, plugin) => {\n  return {\n    type: type,\n    plugin: plugin,\n    wwtype: 'plugin'\n  };\n};"
  },
  {
    "path": "src/popup-view.js",
    "content": "const Woowahan = require('./woowahan');\n\nlet PopupView;\nlet app;\nlet zIndex = 1000;\n\nconst defaultOverlayCss = {\n  position: 'fixed',\n  top: 0,\n  left: 0,\n  right: 0,\n  bottom: 0,\n  background: '#000',\n  opacity: 0.7\n};\n\nconst defaultCss = {\n  overflowY: 'auto',\n  display: 'block',\n  position: 'absolute',\n  top: '50%',\n  left: '50%',\n  width: '80%',\n  maxHeight: '80%',\n  background: '#fff',\n  webkitTransform: 'translate(-50%, -50%)',\n  transform: 'translate(-50%, -50%)'\n};\n\nPopupView = Woowahan.View.create('PopupView', {\n  overlayClassName: '',\n  overlayCss: {},\n  css: {},\n  showOverlay: true,\n  useDefaultCss: true,\n\n  super() {\n    PopupView.prototype.initialize.apply(this, this.arguments);\n  },\n\n  initialize(...args) {\n    this.overlay = $('<div></div>');\n\n    Woowahan.View.prototype.initialize.apply(this, args);\n  },\n\n  viewComponentDidMount($el) {\n    const model = this.getModel();\n\n    Object.keys(model).map(function(key) {\n      switch (key) {\n        case 'css':\n        case 'overlayCss':\n          this[key] = Object.assign({}, this[key], model[key]);\n          break;\n        case 'overlayClassName':\n        case 'showOverlay':\n        case 'useDefaultCss':\n          this[key] = model[key];\n          break;\n        case 'buttons':\n          const buttons = model.buttons;\n\n          if (!this.events) {\n            this.events = {};\n          }\n\n          for (const button in buttons) {\n            if (buttons.hasOwnProperty(button)) {\n              this.events[`click ${button}`] = buttons[button].bind(this);\n            }\n          }\n\n          this.delegateEvents();\n          break;\n      }\n    }.bind(this));\n\n    if (this.showOverlay) {\n      const overlay = this.overlay;\n\n      overlay.addClass(this.overlayClassName);\n      overlay.css(Object.assign({ zIndex }, defaultOverlayCss, this.overlayCss));\n\n      this.$el.parent().prepend(overlay);\n\n      zIndex += 100;\n\n      $(overlay).on('click', function() {\n        this.dispatch(Woowahan.Event.create('overlayClicked', this));\n      }.bind(this));\n    }\n\n    if (this.useDefaultCss) {\n      $el.css(defaultCss);\n    }\n\n    $el.css(Object.assign({ zIndex }, this.css));\n\n    zIndex += 100;\n  }\n});\n\nPopupView.create = (viewName, options) => {\n  let view = PopupView.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function(toolset) {\n  if (!app) {\n    app = toolset;\n  }\n\n  return PopupView;\n};"
  },
  {
    "path": "src/reducer.js",
    "content": "const MIDDLEWARE = require('./middleware').MIDDLEWARE;\n\nconst MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\n  const MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nconst defaultConfiguration = {\n  timeout: 5000\n};\n\nlet Reducer;\nlet app;\n\nReducer = {\n  SUCCESS: 'SUCCESS',\n  FAIL: 'FAIL',\n  queueSuccess: [],\n  queueFail: [],\n  extend(protoProps) {\n    const child = Object.assign({}, this);\n\n    if (!!protoProps.onSuccess) {\n      child.queueSuccess.push(protoProps.onSuccess);\n    }\n\n    if (!!protoProps.onFail) {\n      child.queueFail.push(protoProps.onFail);\n    }\n\n    return child;\n  },\n  create(actionName, schema, handler) {\n    if (typeof schema === 'function') {\n      handler = schema;\n      schema = void 0;\n    } else {\n      if (typeof schema === 'object' && schema.wwtype !== 'schema') {\n        throw new Error('The second argument of reducer will only function, or schema objects.');\n      }\n    }\n\n    const _this = this;\n\n    let Reducer = function(data, subscriber) {\n      this._timestamp = Date.now();\n      this._id = actionName.toLowerCase() + this._timestamp;\n      this.subscriber = subscriber;\n      this.queueSuccess = [];\n      this.queueFail = [];\n\n      this.useraction(data);\n      this.addAction(this._id);\n    };\n\n    Reducer.wwtype = 'reducer';\n    Reducer.actionName = actionName;\n    Reducer.schema = schema;\n\n    let fn = Object.assign(Reducer.prototype, {\n      onSuccess: _this.onSuccess,\n      onFail: _this.onFail\n    });\n\n    fn.useraction = handler;\n\n    fn.id = () => this._id;\n    fn.actionName = actionName;\n    fn.createtime = () => this._timestamp;\n    fn.addAction = (...args) => app.addAction(...args);\n    fn.addError = (...args) => app.addError(...args);\n    fn.removeAction = (...args) => app.removeAction(...args);\n    fn.getStates = (...args) => app.getStates(...args);\n    fn.setStates = (...args) => app.setStates(...args);\n\n    fn.use = function(key, handlers) {\n      switch (key) {\n        case _this.SUCCESS:\n          if (!handlers) return;\n\n          if (Array.isArray(handlers)) {\n            Array.prototype.push.apply(this.queueSuccess, handlers);\n          } else {\n            this.queueSuccess.push(handlers);\n          }\n          break;\n        case _this.FAIL:\n          if (!handlers) return;\n\n          if (Array.isArray(handlers)) {\n            Array.prototype.push.apply(this.queueFail, handlers);\n          } else {\n            this.queueFail.push(handlers);\n          }\n          break;\n        default:\n          throw new Error('undefined key');\n      }\n    };\n    \n    fn.loadScript = function(path, id) {\n      if (!id) {\n        id = path.toLowerCase();\n      }\n\n      let script = $('script[id=' + id + ']');\n\n      if (!!script.length) {\n        (this.onSuccess || this.success).call(this);\n        return;\n      }\n\n      script = document.createElement('script');\n      \n      document.getElementsByTagName('head')[0].appendChild(script);\n      \n      script.addEventListener('load', (this.onSuccess || this.success).bind(this));\n      script.addEventListener('error', (this.onFail || this.fail).bind(this));\n\n      script.id = id;\n      script.type = 'text/javascript';\n      script.src = path;\n    };\n\n    fn.requestData = function(url, settings, method = 'GET') {\n      if (typeof url === 'object') {\n        settings = Object.assign({}, defaultConfiguration, { url });\n      } else {\n        settings = Object.assign({}, defaultConfiguration, settings, { url });\n      }\n\n      settings.type = method.toUpperCase();\n\n      let success = function(...args) {\n        const queueSuccess = Array.prototype.concat.call(_this.queueSuccess, this.queueSuccess);\n\n        let middlewares = app.getMiddleware(MIDDLEWARE.REDUCER, MIDDLEWARE_PROTOCOL.AFTER);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [app], function() {\n          if (!!queueSuccess.length || !!this.onSuccess) {\n            for (const item of queueSuccess) {\n              item.apply(this, args);\n            }\n\n            !!this.onSuccess && this.onSuccess.apply(this, args);\n          } else {\n            this.success.apply(this, args);\n          }\n        }.bind(this));\n      };\n\n      let fail = function(...args) {\n        const queueFail = Array.prototype.concat.call(_this.queueFail, this.queueFail);\n        const jqXHR = args[0];\n\n        let middlewares = app.getMiddleware(MIDDLEWARE.REDUCER, MIDDLEWARE_PROTOCOL.AFTER);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [app], function() {\n          if (!!jqXHR) {\n            args = [{\n              status: jqXHR.status,\n              statusText: jqXHR.statusText || '',\n              response: jqXHR.responseJSON || jqXHR.responseText\n            }];\n          }\n\n          if (!!queueFail.length || !!this.onFail) {\n            for (const item of queueFail) {\n              item.apply(this, args);\n            }\n\n            !!this.onFail && this.onFail.apply(this, args);\n          } else {\n            this.fail.apply(this, args);\n          }\n        }.bind(this));\n      };\n\n      let middlewares = app.getMiddleware(MIDDLEWARE.REDUCER, MIDDLEWARE_PROTOCOL.BEFORE);\n\n      MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [settings, app], function() {\n        return $.ajax(settings)\n          .done(success.bind(this))\n          .fail(fail.bind(this));\n      }.bind(this));\n    };\n\n    /**\n     *\n     * @param url\n     * @param settings\n     */\n    fn.getData = function(url, settings) {\n      return this.requestData(url, settings, 'get');\n    };\n\n    /**\n     *\n     * @param url\n     * @param settings\n     */\n    fn.putData = function(url, settings) {\n      return this.requestData(url, settings, 'put');\n    };\n\n    /**\n     *\n     * @param url\n     * @param settings\n     */\n    fn.postData = function(url, settings) {\n      return this.requestData(url, settings, 'post');\n    };\n\n    /**\n     *\n     * @param url\n     * @param settings\n     */\n    fn.deleteData = function(url, settings) {\n      return this.requestData(url, settings, 'delete');\n    };\n\n    fn.success = function(data) {\n\n    };\n\n    fn.fail = function(request, error) {\n      if ('abort' in request) {\n        request.abort();\n      }\n\n      // TODO: 오류 발생시 바로 삭제하지 않고 작업을 Disable 시킨 후 오류 처리시 Retry 등의 로직을 수행할 수 있도록 선택지를 만듬\n      this.removeAction(this._id);\n      this.addError(error);\n    };\n\n    fn.finish = function(...args) {\n      this.subscriber && this.subscriber.apply(this, args);\n\n      this.removeAction(this._id);\n    };\n\n    fn.env = {};\n    fn.env.template = function(templateStr, env) {\n      if (typeof templateStr !== 'string') return templateStr;\n\n      let renderStr = templateStr;\n      let variables = templateStr.match(/{{\\w+}}/g);\n\n      if (variables) {\n        variables.forEach(v => {\n          let attrName = v.replace('{{', '').replace('}}', '');\n\n          if (attrName in env) {\n            renderStr = renderStr.replace(v, env[attrName]);\n          }\n        });\n      }\n\n      return renderStr;\n    };\n\n    return Reducer;\n  }\n};\n\nmodule.exports = function(toolset) {\n  if (!app) {\n    app = toolset;\n  }\n  \n  return Reducer;\n};"
  },
  {
    "path": "src/router.js",
    "content": "const MIDDLEWARE = require('./middleware').MIDDLEWARE;\nconst MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\nconst MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nlet app;\n\nfunction urlBuilder(path) {\n  return function(params) {\n    let url = path;\n\n    if (!params) {\n      return url;\n    }\n\n    if (Array.isArray(params)) {\n      let keys = path.match(/\\:\\w+/g);\n\n      if (keys.length !== params.length) {\n        console.error('It does not match the required input values.');\n        return url;\n      }\n\n      keys.forEach((key, index) => {\n        url = url.replace(key, encodeURIComponent(params[index]));\n      });\n\n      return url;\n    }\n\n    if (typeof params === 'object') {\n      for (let key in params) {\n        if (params.hasOwnProperty(key)) {\n          url = url.replace(':' + key, encodeURIComponent(params[key]));\n        }\n      }\n\n      return url;\n    }\n\n    console.error('Invalid params type');\n\n    return url;\n  };\n}\n\nmodule.exports = {\n  routeTables: {},\n  settings: null,\n  layouts: [],\n  currentView: '',\n  currentLayout: '',\n  \n  bindLayout(layout) {\n    this.layouts.push(layout);\n  },\n\n  design(pages, settings = {}, toolset) {\n    this.settings = settings;\n    this.router = null;\n\n    app = toolset;\n\n    this.bindRouter(Array.isArray(pages) ? pages : [pages]);\n  },\n\n  bindRouter(pages) {\n    const options = { routes: {} };\n\n    let page, routeId;\n\n    pages = Array.from(pages);\n\n    while (!!pages.length) {\n      page = pages.shift();\n\n      this.routeTables[page.routeName || page.view.viewname] = urlBuilder(page.url);\n\n      page.originUrl = page.url;\n\n      if (page.url.startsWith('/')) {\n        page.url = page.url.substr(1);\n      }\n\n      routeId = 'r' + page.url.toLowerCase() + Date.now();\n\n      options.routes[page.url] = routeId;\n\n      options[routeId] = function(page, ...args) {\n        const currentHref = window.location.href;\n        const pageFeature = Object.assign({}, page);\n\n        if (!!pageFeature.view) delete pageFeature.view;\n        if (!!pageFeature.pages) delete pageFeature.pages;\n\n        let middlewares = app.getMiddleware(MIDDLEWARE.ROUTER, MIDDLEWARE_PROTOCOL.BEFORE);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [pageFeature, app], function() {\n          if (currentHref !== window.location.href) return;\n\n          const params = {};\n          const query = {};\n\n          let idx = 0;\n\n          if (page.url.startsWith('*')) {\n            params[page.url.split('*')[1]] = args[0];\n          } else {\n            for (const part of page.url.split('/')) {\n              if (part.startsWith(':')) {\n                params[part.substr(1)] = decodeURIComponent(args[idx]);\n\n                ++idx;\n              }\n            }\n          }\n\n          const queryStr = decodeURIComponent(args[args.length - 1] || (window.location.search || '').substr(1));\n\n          if (!!queryStr && !!~queryStr.indexOf('=')) {\n            const queryArr = queryStr.split('&');\n\n            for (const q of queryArr) {\n              const arr = q.split('=');\n\n              if (arr.length === 2) {\n                query[arr[0]] = arr[1];\n              }\n            }\n          }\n\n          if (!!page.layout) {\n            const layout = this.layouts.find(layout => layout.viewName === page.layout);\n\n            if (!this.currentLayout || this.currentLayout.viewname !== page.layout) {\n              if (!!layout) {\n                !!this.currentLayout && this.currentLayout.close();\n\n                layout.view.prototype.params = params;\n                layout.view.prototype.query = query;\n                layout.view.prototype.container = layout.container;\n\n                this.currentLayout = new layout.view();\n              }\n            } else {\n              if (layout.options.update) {\n                this.currentLayout['params'] = params;\n                this.currentLayout['query'] = query;\n\n                this.currentLayout.updateView();\n              }\n            }\n          }\n\n          page.view.prototype.params = params;\n          page.view.prototype.query = query;\n          page.view.prototype.container = page.container;\n\n          const view = new page.view();\n\n          if (!!this.currentView) {\n            this.currentView.close();\n          }\n\n          this.currentView = view;\n\n          middlewares = app.getMiddleware(MIDDLEWARE.ROUTER, MIDDLEWARE_PROTOCOL.AFTER);\n\n          MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [pageFeature, app]);\n        }.bind(this));\n      }.bind(this, page);\n\n      if (!!page.pages && !!page.pages.length) {\n        const url = page.originUrl || '';\n        const container = page.container || '';\n        const layout = page.layout || '';\n\n        for (const subPage of page.pages) {\n          if (!subPage.url.startsWith('/')) {\n            subPage.url = `${url === '/' ? '' : url}/${subPage.url}`;\n          }\n\n          if (!subPage.container) {\n            subPage.container = container;\n          }\n\n          if (!subPage.layout) {\n            subPage.layout = layout;\n          }\n\n          pages.push(subPage);\n        }\n      }\n    }\n\n    options.routes['*actions'] = '___NOT_FOUND___';\n    options['___NOT_FOUND___'] = actions => {\n      if ('empty' in this.settings) {\n        this.settings.empty(actions);\n      }\n    };\n\n    this.router = new (Backbone.Router.extend(options));\n  }\n};"
  },
  {
    "path": "src/schema.js",
    "content": "\nmodule.exports = {\n  create(schemaName, defineSchema) {\n    const Schema = {\n      wwtype: 'schema',\n      schemaName\n    };\n\n    function mixedDataWithSchema(data) {\n      let schema = {};\n\n      for (let key in defineSchema) {\n        if (defineSchema.hasOwnProperty(key)) {\n          schema[key] = void 0;\n        }\n      }\n\n      return Object.assign(schema, data);\n    }\n\n    Schema.validate = function(data) {\n      const mixedData = mixedDataWithSchema(data);\n\n      let errors = [];\n      \n      for (let key in mixedData) {\n        if (mixedData.hasOwnProperty(key)) {\n          let type = defineSchema[key];\n\n          if (type && type.hasOwnProperty('__validate__')) {\n            let error = type.__validate__.call(type, key, data[key]);\n\n            if (error) errors.push(error);\n          } else {\n            typeof window === 'object' && console.warn(`Is not defined in the schema field \"${key}\" is present.`);\n          }\n        }\n      }\n\n      return errors.length === 0 ? void 0 : errors;\n    };\n\n    Schema.toSchema = function() {\n      return defineSchema;\n    };\n\n    return Schema;\n  }\n};\n"
  },
  {
    "path": "src/store.js",
    "content": "module.exports = {\n  create(states) {\n    return {\n      wwtype: 'store',\n      store: states\n    };\n  }\n};"
  },
  {
    "path": "src/types.js",
    "content": "const Error = require('./error');\n\nconst TYPE = {\n  STRING: 'string',\n  NUMBER: 'number',\n  ARRAY: 'array',\n  EMAIL: 'email',\n  PHONE: 'phone',\n  BOOLEAN: 'boolean'\n};\nconst REQUIRED = 'required';\nconst DEFAULT_VALUE = 'defaultValue';\nconst MIN = 'min';\nconst MAX = 'max';\nconst FORMAT = 'format';\n\nconst defaultTypeOptions = {};\nconst partialValidator = {};\n\nconst validator = function(key, value) {\n  if (REQUIRED in this && !partialValidator[REQUIRED].call(this, value)) {\n    return Error.create(`Required attribute \"${key}\" is missing.`, { key, value });\n  }\n\n  if (value === void 0) return;\n\n  // Data type checking\n  if (!partialValidator[this.name].call(this, value)) {\n    return Error.create(`\"${key}\" type property must be \"${this.name}\".`, { key, value });\n  }\n\n  if (this.name === TYPE.NUMBER) {\n    if (MIN in this && this[MIN] !== null && !partialValidator[MIN].call(this, value)) {\n      return Error.create(`\"${key}\" is greater than ${this[MIN]}.`, { key, value });\n    }\n\n    if (MAX in this && this[MAX] !== null && !partialValidator[MAX].call(this, value)) {\n      return Error.create(`\"${key}\" may have a value of ${this[MAX]} or less.`, { key, value });\n    }\n  } else if (this.name === TYPE.STRING) {\n    if (MIN in this && this[MIN] !== null && !partialValidator[MIN].call(this, value)) {\n      return Error.create(`\"${key}\" must be more than ${this[MIN]} characters long.`, { key, value });\n    }\n\n    if (MAX in this && this[MAX] !== null && !partialValidator[MAX].call(this, value)) {\n      return Error.create(`\"${key}\" should be no longer than ${this[MAX]} characters.`, { key, value });\n    }\n  }\n};\n\nconst typeGenerator = function(name, supportOptions, options) {\n  let defaults = {}, type;\n\n  supportOptions.forEach(option => {\n    defaults[option] = defaultTypeOptions[option];\n  });\n\n  type = Object.assign({ name: name }, defaults, options);\n  type.__validate__ = validator;\n\n  return type;\n};\n\ndefaultTypeOptions[REQUIRED] = false;\ndefaultTypeOptions[DEFAULT_VALUE] = null;\ndefaultTypeOptions[MIN] = null;\ndefaultTypeOptions[MAX] = null;\ndefaultTypeOptions[FORMAT] = null;\n\npartialValidator[TYPE.STRING] = function(value) {\n  return typeof value === TYPE.STRING;\n};\n\npartialValidator[TYPE.NUMBER] = function(value) {\n  if (typeof value === 'number') return true;\n\n  let stringType = String(value);\n  let match = stringType.match(/^[+-]?(\\d+\\.?\\d*)$|(\\d*\\.?\\d+)$/g);\n\n  if (!match) return false;\n  if (match.length > 1) return false;\n\n  return (match[0].length === stringType.length);\n};\n\npartialValidator[TYPE.ARRAY] = function(value) {\n  return Array.isArray(value);\n};\n\npartialValidator[TYPE.EMAIL] = function(value) {\n  const regexp = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n  return regexp.test(value);\n};\n\npartialValidator[TYPE.BOOLEAN] = function(value) {\n  return Object.prototype.toString.call(value) === '[object Boolean]';\n};\n\npartialValidator[REQUIRED] = function(value) {\n  if (this[REQUIRED]) return value !== void 0 && value !== null;\n  return true;\n};\n\npartialValidator[MIN] = function(value) {\n  if (this.name === TYPE.NUMBER) {\n    return value >= this[MIN];\n  } else if (this.name === TYPE.STRING) {\n    return value.length >= this[MIN];\n  }\n  return true;\n};\n\npartialValidator[MAX] = function(value) {\n  if (this.name === TYPE.NUMBER) {\n    return value <= this[MAX];\n  } else if (this.name === TYPE.STRING) {\n    return value.length <= this[MAX];\n  }\n  return true;\n};\n\nmodule.exports = {\n  String(options) {\n    return typeGenerator(TYPE.STRING, [\n      REQUIRED,\n      DEFAULT_VALUE,\n      MIN,\n      MAX,\n      FORMAT\n    ], Object.assign({ defaultValue: '' }, options));\n  },\n\n  Number(options) {\n    return typeGenerator(TYPE.NUMBER, [\n      REQUIRED,\n      DEFAULT_VALUE,\n      MIN,\n      MAX\n    ], Object.assign({ defaultValue: 0 }, options));\n  },\n\n  Array(options) {\n    return typeGenerator(TYPE.ARRAY, [\n      REQUIRED,\n      DEFAULT_VALUE\n    ], Object.assign({ defaultValue: [] }, options));\n  },\n\n  Email(options) {\n    return typeGenerator(TYPE.EMAIL, [\n      REQUIRED\n    ], Object.assign({}, options));\n  },\n\n  Boolean(options) {\n    return typeGenerator(TYPE.BOOLEAN, [\n      REQUIRED\n    ], Object.assign({}, options));\n  }\n};"
  },
  {
    "path": "src/view.js",
    "content": "const Backbone = require('backbone');\n\nconst MIDDLEWARE = require('./middleware').MIDDLEWARE;\nconst MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\nconst MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nconst PluginText = require('./plugin/text');\nconst PluginInputText = require('./plugin/input-text');\nconst PluginCheckbox = require('./plugin/checkbox');\nconst PluginSelect = require('./plugin/select');\n\nconst delegateEventSplitter = /^(\\S+)\\s*(.*)$/;\nconst childEventSplitter = /^\\@(\\w+)\\s*(.*)$/;\nconst DEFAULT_ATTR_TYPE = 'text';\n\nlet View = null;\nlet viewMount = null;\nlet app = null;\n\nviewMount = function() {\n  let tagName = this.tagName;\n  let container = this.container;\n  let template = this.template;\n  let domStr;\n  let $dom;\n\n  if (!container) {\n    throw new Error(`[${this.viewname}] Required attribute \"container\" is missing.`);\n  } else {\n    if (typeof container === 'string') {\n      container = $(container);\n    }\n  }\n\n  if (!container || !container.length) {\n    throw new Error(`[${this.viewname}] \"container\" is undefined.`);\n  }\n\n  let renderData = this.getModel();\n\n  if (typeof this.viewWillMount === 'function') {\n    renderData = this.viewWillMount(renderData) || renderData;\n  }\n\n  if (!!template) {\n    if (typeof template === 'string') {\n      domStr = template;\n    } else {\n      domStr = template(renderData);\n    }\n\n    if (tagName === 'div') {\n      let proto = this;\n\n      tagName = '';\n\n      do {\n        if (proto.hasOwnProperty('tagName') && !!proto.tagName) {\n          tagName = proto.tagName;\n          break;\n        }\n      } while ((proto = proto.__proto__) && (proto.viewname !== '___WOOWA_VIEW___'));\n    }\n\n    if (!!tagName || $(domStr).length > 1) {\n      $dom = $(`<${tagName || 'div'}>${domStr}</${tagName || 'div'}>`);\n    } else {\n      $dom = $(domStr);\n    }\n\n    if (!!this.className) {\n      $dom.addClass(this.className);\n    }\n\n    if (this._viewMounted) {\n      if ($.contains(container[0], this.el)) {\n        this.$el.replaceWith($dom);\n      } else {\n        container.html($dom);\n      }\n    } else {\n      if (!!this.append) {\n        container.append($dom);\n      } else if (!!this.prepend) {\n        container.prepend($dom);\n      } else if (!!this.after) {\n        container.after($dom);\n      } else {\n        container.html($dom);\n      }\n    }\n\n    this.setElement($dom);\n  } else {\n    this.setElement(container);\n  }\n\n  this._viewMounted = true;\n  this._bindRef();\n  this._bindModel();\n\n  if (typeof this.viewComponentDidMount === 'function') {\n    this.viewComponentDidMount($dom);\n  }\n\n  let viewDidMount;\n\n  if (typeof this.viewDidMount === 'function') {\n    viewDidMount = this.viewDidMount.bind(this, $dom);\n  }\n\n  let forceExcludeMiddleware = false;\n\n  if ('forceExcludeMiddleware' in this) {\n    forceExcludeMiddleware = (typeof this.forceExcludeMiddleware === 'function') ? this.forceExcludeMiddleware() : this.forceExcludeMiddleware;\n  }\n\n  const middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.AFTER);\n\n  MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [this], function() {\n    ['viewDidMount', 'mount'].forEach(type => {\n      this.dispatch(Woowahan.Event.create(type, this));\n      this.trigger(type);\n    });\n  }.bind(this), viewDidMount);\n};\n\nView = Backbone.View.extend({\n  super(...args) {\n    View.prototype.initialize.apply(this, args);\n  },\n\n  initialize(model) {\n    this._viewMounted = false;\n    this._views = {};\n    this.container = this.container;\n\n    if (!!model) {\n      this.setModel(model);\n    }\n\n    let forceExcludeMiddleware = false;\n\n    if ('forceExcludeMiddleware' in this) {\n      forceExcludeMiddleware = (typeof this.forceExcludeMiddleware === 'function') ? this.forceExcludeMiddleware() : this.forceExcludeMiddleware;\n    }\n\n    const middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.BEFORE);\n\n    MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [this], function() {\n      viewMount.apply(this);\n    }.bind(this));\n  },\n  \n  _plugins: {\n    'text': PluginText,\n    'input-text': PluginInputText,\n    'checkbox': PluginCheckbox,\n    'select': PluginSelect\n  },\n\n  delegateEvents(events) {\n    events = events || this.events;\n\n    if (!events) return this;\n\n    this.undelegateEvents();\n\n    for (let key in events) {\n      if (events.hasOwnProperty(key)) {\n        let method = events[key];\n        let match = key.match(delegateEventSplitter);\n        let childMatch = key.match(childEventSplitter);\n        let eventName;\n        let selector;\n        let listener;\n\n        if (!!childMatch) {\n          const index = method.indexOf('(');\n\n          let params = [];\n\n          eventName = childMatch[1];\n          selector = childMatch[2];\n\n          if (!!~index) {\n            params = method.substring(index + 1, method.length - 1).split(',').map(el => $.trim(el));\n            method = method.substring(0, index);\n          }\n\n          listener = function(eventName, selector, method, params, event, ...args) {\n            const _this = this;\n\n            const getVal = function($el) {\n              if ($el.is('input[type=checkbox]') || $el.is('input[type=radio]')) {\n                return $el.is(':checked');\n              } else if ($el.is('select')) {\n                return $el.val();\n              } else {\n                return $el.val() || $el.text();\n              }\n            };\n\n            const values = params.map(param => getVal(_this.$(param)));\n\n            if (eventName === 'submit') {\n              const inputs = {};\n\n              for (const el of _this.$(selector).find('input, select, textarea')) {\n                inputs[$(el).attr('name')] = getVal($(el));\n              }\n\n              values.push(inputs);\n            }\n\n            if (Object.prototype.toString.call(method) !== '[object Function]') {\n              method = this[method];\n            }\n\n            return method.apply(this, Array.prototype.concat.call(values, args, event));\n          }.bind(this, eventName, selector, method, params);\n        } else {\n          if (Object.prototype.toString.call(method) !== '[object Function]') {\n            method = this[method];\n          }\n\n          if (!method) continue;\n\n          eventName = match[1];\n          selector = match[2];\n\n          listener = method.bind(this);\n        }\n\n        this.delegate(eventName, selector, listener);\n      }\n    }\n\n    return this;\n  },\n\n  updateView(container, ChildView, ...args) {\n    if (arguments.length === 0) {\n      this.close(false);\n\n      viewMount.apply(this);\n\n      return;\n    }\n\n    let viewContainer;\n    let viewId;\n\n    viewContainer = this.$(container);\n\n    if (!viewContainer.length) {\n      viewContainer = $(container);\n    }\n\n    if (!viewContainer.length) {\n      throw new Error('View must have container');\n    }\n\n    viewId = viewContainer.data('ref') || viewContainer.selector || container;\n\n    if (!!container && !ChildView) {\n      if (!!this._views[viewId]) {\n        this._views[viewId].close();\n\n        delete this._views[viewId];\n      }\n\n      return;\n    }\n\n    if (typeof ChildView !== 'function') {\n      args = ChildView;\n    }\n\n    let view = this._views[viewId];\n\n    if (!!view) {\n      view.setModel.apply(view, Array.prototype.concat.call(args, { silent: true }));\n      view.container = viewContainer;\n\n      let forceExcludeMiddleware = false;\n\n      if ('forceExcludeMiddleware' in view) {\n        forceExcludeMiddleware = (typeof view.forceExcludeMiddleware === 'function') ? view.forceExcludeMiddleware() : view.forceExcludeMiddleware;\n      }\n\n      let middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.UNMOUNT);\n\n      MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.UNMOUNT, [this], function() {\n        if (typeof view.viewWillUnmount === 'function') {\n          view.viewWillUnmount.call(view);\n        }\n\n        view.dispatch(Woowahan.Event.create('unmount', this));\n        view.trigger('unmount');\n\n        viewMount.apply(this._views[viewId]);\n      }.bind(this));\n    } else {\n      ChildView.prototype.container = viewContainer;\n\n      view = new (Function.prototype.bind.apply(ChildView, Array.prototype.concat.call(ChildView, args)));\n\n      this._views[viewId] = view;\n    }\n\n    return view;\n  },\n\n  addView(container, ChildView, ...args) {\n    this.removeView(container);\n\n    return this.updateView(container, ChildView, ...args);\n  },\n\n  removeView(container) {\n    if (!!$(container).length) {\n      this.updateView(container);\n    }\n  },\n\n  addPopup(view, options = {}, callback) { // TODO: options 추가\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n\n    view = (typeof view === 'string') ? this.getComponent(view) : view;\n\n    const name = view.viewname;\n\n    let containerName;\n    let container;\n    let popup;\n\n    if (!!view) {\n      let _id = options._id || `${name}Container${Date.now()}`;\n\n      if (!!$(`div[data-id=${_id}]`).length) {\n        return;\n      }\n\n      containerName = _id;\n      container = $(`<div data-id=\"${containerName}\"></div>`);\n\n      $('body').append(container);\n\n      popup = this.addView(`div[data-id=${containerName}]`, view, Object.assign(options, { _id }));\n\n      popup.on('remove', function() {\n        popup.off('remove');\n\n        $(`div[data-id=${containerName}]`).remove();\n      });\n\n      popup.closePopup = function(containerName, callback, data) {\n        this.removeView(`div[data-id=${containerName}]`);\n\n        if (!!callback) {\n          callback.call(this, data);\n        }\n      }.bind(this, containerName, callback);\n\n      return popup;\n    } else {\n      console.error(`undefined popup name [${name}]`);\n    }\n  },\n\n  getStates(key) {\n    return app.getStates(key);\n  },\n\n  setStates(key, value) {\n    app.setStates(key, value);\n  },\n\n  getComponent(name) {\n    return app.getComponent(name).extend({});\n  },\n\n  getRouteTables(routeName, params, query) {\n    if (routeName === void 0) {\n      return app.getRouteTables();\n    }\n\n    let path = app.getRouteTables()[routeName];\n\n    if (!path) {\n      console.error(`\"${routeName}\" not found`);\n      return;\n    }\n\n    if (typeof params === 'string') {\n      return `${path()}?${encodeURIComponent(params)}`;\n    } else {\n      if (typeof query === 'string') {\n        return `${path(params)}?${encodeURIComponent(query)}`;\n      } else {\n        return path(params);\n      }\n    }\n  },\n\n  dispatch(action, subscriber, options) {\n    action.__options = options || {};\n    \n    switch (action.wwtype) {\n      case 'event':\n        this.$el.trigger(action.type, ...action.data);\n        break;\n      case 'action':\n        if (!!subscriber) {\n          subscriber = subscriber.bind(this);\n        }\n\n        app.dispatch(action, subscriber);\n        break;\n    }\n  },\n\n  setModel(key, value) {\n    let attrs;\n\n    if (typeof key === 'string' && typeof value !== 'undefined') {\n      attrs = { [key]: value };\n    } else {\n      attrs = key;\n    }\n\n    if (attrs instanceof Backbone.Model) {\n      if (!!this.model) {\n        this._unbindModel();\n      }\n      \n      this.model = attrs.clone();\n      \n      if (this._viewMounted) {\n        this._bindModel();\n      }\n      return;\n    }\n\n    if (Object.prototype.toString.call(attrs) === '[object Null]' || !this.model || !(this.model instanceof Backbone.Model)) {\n      this.model = new Backbone.Model();\n\n      if (this._viewMounted) {\n        this._bindModel();\n      }\n    }\n\n    for (let attr in attrs) {\n      if (attrs.hasOwnProperty(attr)) {\n        let value = this.model.get(attr);\n\n        if (value !== attrs[attr]) {\n          this.model.set(attr, attrs[attr]);\n        }\n      }\n    }\n  },\n\n  getModel(key) {\n    if (!this.model || !(this.model instanceof Backbone.Model)) {\n      this.model = new Backbone.Model();\n    }\n    \n    if (!key) {\n      return this.model.clone().toJSON();\n    }\n\n    return this.model.clone().get(key);\n  },\n\n  log() {\n    console.warn('View.log:: Deprecated and will be removed in a future release.');\n  },\n\n  logStamp(...args) {\n    this.log(args);\n  },\n\n  close(remove) {\n    this._unbindModel();\n\n    let forceExcludeMiddleware = false;\n\n    if ('forceExcludeMiddleware' in this) {\n      forceExcludeMiddleware = (typeof this.forceExcludeMiddleware === 'function') ? this.forceExcludeMiddleware() : this.forceExcludeMiddleware;\n    }\n\n    let middlewares = forceExcludeMiddleware ? [] : app.getMiddleware(MIDDLEWARE.VIEW, MIDDLEWARE_PROTOCOL.UNMOUNT);\n\n    MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.UNMOUNT, [this], function() {\n      if (typeof this.viewWillUnmount === 'function') {\n        this.viewWillUnmount();\n      }\n\n      if (this.refs) {\n        Object.keys(this.refs).forEach(refName => {\n          if (Array.isArray(this.refs[refName])) {\n            this.refs[refName] = [];\n          }\n        });\n      } \n\n      this.dispatch(Woowahan.Event.create('unmount', this));\n      this.trigger('unmount');\n\n      this._removeChild(remove);\n\n      if (remove + '' !== 'false' && !!this) {  \n        this._unbindRef();\n        this.remove();\n      }\n    }.bind(this));\n  },\n\n  remove(...args) {\n    this.dispatch(Woowahan.Event.create('remove', this));\n    this.trigger('remove');\n\n    Backbone.View.prototype.remove.apply(this, args);\n  },\n\n  _syncElement(source, target) {\n    let $source = $(source);\n    let $target = $(target);\n\n    if ($source.is('input[type=text]') || $source.is('input[type=number]') || $source.is('input[type=tel]') || $source.is('textarea')) {\n      $target.val($source.val());\n    } else if ($source.is('input[type=checkbox]') || $source.is('input[type=radio]')) {\n      $target.prop('checked', $source.is(':checked'));\n    } else if ($source.is('select')) {\n      $target.val($source.val());\n    }\n  },\n\n  _bindRef() {\n    if (!this.refs) {\n      this.refs = {};\n    }\n\n    for (const element of this.$el.find('[data-ref]')) {\n      let $element = $(element);\n      let refName = $element.data('ref');\n      let refGroup = $element.data('refGroup') || false;\n      let refFormRestore = $element.data('refFormRestore') || false;\n\n      if (refGroup) {\n        if (this.refs[refName]) {\n          this.refs[refName].push(element);\n        } else {\n          this.refs[refName] = [element];\n        }\n      } else {\n        let currentElement = this.refs[refName];\n\n        this.refs[refName] = element;\n\n        if (currentElement) {\n          refFormRestore && this._syncElement(currentElement, this.refs[refName]);\n          currentElement = null;\n        }\n      }\n    }\n  },\n\n  _bindModel() {\n    this._unbindModel();\n\n    let targetElements = this.$el.find('[data-role=bind]');\n    let element;\n\n    for (element of targetElements) {\n      let key = $(element).data('name');\n      let eventName = `change:${key}`;\n      let type = ($(element).data('type') || DEFAULT_ATTR_TYPE).toLowerCase();\n      let value = this.model.get(key);\n\n      this.listenTo(this.model, eventName, function(element, key, type) {\n        let value = this.model.get(key);\n\n        this._plugins[type].call(this, element, value);\n      }.bind(this, element, key, type));\n\n      if (typeof value !== 'undefined') this._plugins[type].call(this, element, value);\n    }\n\n    targetElements = this.$el.find('[data-role=plugin]');\n\n    for (element of targetElements) {\n      let plugins = $(element).data('plugins');\n\n      if (!plugins) throw new Error('plugin must have plugins');\n\n      plugins.split('+').map(s => $.trim(s)).forEach(plugin => {\n        let [keys, type] = plugin.split('=>').map(s => $.trim(s));\n\n        keys = keys.split(',').map(k => $.trim(k));\n        type = type.toLowerCase();\n        \n        keys.forEach(key => {\n          if (key === '') return;\n\n          let value = this.model.get(key);\n          \n          this.listenTo(this.model, `change:${key}`, function(element, key, type) {\n            let value = this.model.get(key);\n\n            this._plugins[type].call(this, element, value);\n          }.bind(this, element, key, type));\n\n          if (typeof value !== 'undefined') this._plugins[type].call(this, element, value);\n        });\n      });\n    }\n  },\n\n  _unbindRef() {\n    for (const ref in this.refs) {\n      if (this.refs.hasOwnProperty(ref)) {\n        this.refs[ref] = null;\n      }\n    }\n\n    this.refs = null;\n  },\n\n  _unbindModel() {\n    this.stopListening(this.model);\n  },\n\n  _removeChild(remove) {\n    for (let key in this._views) {\n      if (this._views.hasOwnProperty(key)) {\n        this._views[key].close.call(this._views[key], remove);\n        delete this._views[key];\n      }\n    }\n  }\n});\n\nView.create = (viewName, options) => {\n  let view = View.extend(options);\n\n  view.viewname = viewName;\n  Object.defineProperty(view.prototype, 'viewname', { value: viewName, writable: false });\n\n  return view;\n};\n\nmodule.exports = function(toolset) {\n  if (!app) {\n    app = toolset;\n  }\n  \n  return View;\n};"
  },
  {
    "path": "src/woowahan.js",
    "content": "const Backbone = require('backbone');\nconst Router = require('./router');\nconst MIDDLEWARE = require('./middleware').MIDDLEWARE;\nconst MIDDLEWARE_PROTOCOL = require('./middleware').MIDDLEWARE_PROTOCOL;\nconst MiddlewareRunner = require('./middleware').MiddlewareRunner;\n\nconst INTERVAL = 1000/60;\n\nconst toolset = {\n  get dispatch() {\n    return instance.dispatch.bind(instance);\n  },\n\n  get getMiddleware() {\n    return instance.getMiddleware.bind(instance);\n  },\n\n  get getStates() {\n    return instance.getStates.bind(instance);\n  },\n\n  get setStates() {\n    return instance.setStates.bind(instance);\n  },\n\n  get getComponent() {\n    return instance.getComponent.bind(instance);\n  },\n\n  get getRouteTables() {\n    return instance.getRouteTables.bind(instance);\n  },\n\n  get addAction() {\n    return instance.addAction.bind(instance);\n  },\n\n  get removeAction() {\n    return instance.removeAction.bind(instance);\n  },\n\n  get addError() {\n    return instance.addError.bind(instance);\n  }\n};\n\nlet instance;\n\n/* Enable backbone.js devtools for chrome */\nif (global.__backboneAgent) {\n  global.__backboneAgent.handleBackbone(Backbone);\n}\n\nBackbone.Model.prototype.idAttribute = '___ID_ATTR___';\nBackbone.View.prototype.viewname = '___WOOWA_VIEW___';\n\nclass Woowahan {\n  \n  constructor(settings = {}) {\n    this.reducers = settings.reducers || {};\n    this.components = settings.components || {};\n    this.middlewares = {\n      app: {\n        before: [],\n        after: [],\n      },\n      router: {\n        before: [],\n        after: [],\n      },\n      reducer: {\n        before: [],\n        after: [],\n      },\n      view: {\n        before: [],\n        after: [],\n        unmount: [],\n      },\n    };\n\n    this.importViews = {};\n    this.store = null;\n    this.queue = [];\n    this.pretasks = [];\n    this.actionObject = {};\n    this.queuemonitor = null;\n    \n    instance = this;\n    \n    this.enableQueue();\n  }\n\n  import(Package) {\n    Object.keys(Package.reducers || {}).forEach(reducerName => this.use(Package.reducers[reducerName]));\n    \n    Object.keys(Package.views || {}).forEach(viewname => this.importViews[viewname] = Package.views[viewname]);    \n  }\n\n  getView(viewname) {\n    return this.importViews[viewname];\n  }\n\n  enableQueue() {\n    this.queuemonitor = setInterval(this.queuing.bind(this), INTERVAL);\n  }\n\n  disableQueue() {\n    this.queuemonitor = clearInterval(this.queuemonitor);\n  }\n\n  addAction(id) {\n    this.actionObject[id] = Date.now();\n\n    if (this.numberOfWorkAction() === 1) {\n      this.trigger('start');\n    }\n  }\n\n  removeAction(id) {\n    delete this.actionObject[id];\n\n    if (this.numberOfWorkAction() === 0) {\n      this.trigger('finish');\n    }\n  }\n\n  addError(err) {\n    this.trigger('error', err);\n  }\n\n  queuing() {\n    this.disableQueue();\n\n    let item = this.queue.shift();\n\n    if (!!item) {\n      let reducer = this.reducers[item.action.type];\n\n      if (!reducer) {\n        this.enableQueue();\n        throw new Error('The unregistered reducer. Please check the type of action, if there is a written reducer use after registration.');\n      }\n\n      // 리스너가 없는 경우 허용\n      item.subscriber = item.subscriber || function() {};\n\n      if (typeof item.subscriber !== 'function') {\n        this.enableQueue();\n        throw new Error('The listener must be a function. If you do not need the listener it may not be specified.');\n      }\n\n      if (reducer.schema) {\n        let errors = reducer.schema.validate(item.action.data);\n\n        if (errors) {\n          this.trigger('error', errors);\n        } else {\n          new (Function.prototype.bind.apply(reducer, Array.prototype.concat.call(reducer, item.action.data, item.subscriber.bind(this))))();\n        }\n      } else {\n        new (Function.prototype.bind.apply(reducer, Array.prototype.concat.call(reducer, item.action.data, item.subscriber.bind(this))))();\n      }\n    }\n\n    this.enableQueue();\n  }\n\n  bindStore(store) {\n    this.store = store;\n  }\n\n  bindReducer(reducer) {\n    this.reducers[reducer.actionName] = reducer;\n  }\n\n  bindComponent(component) {\n    this.components[component.name] = component;\n  }\n\n  bindPlugin(plugin) {\n    const type = plugin.type.toLowerCase();\n\n    if (Woowahan.View.prototype._plugins.hasOwnProperty(type)) {\n      throw new Error('Duplicate plugin name');\n    }\n\n    Woowahan.View.prototype._plugins[type] = plugin.plugin;\n  }\n\n  combineReducer(reducers) {\n    if (!reducers) return;\n\n    reducers.forEach(reducer => {\n      this.bindReducer(reducer);\n    });\n  }\n\n  getStates(key) {\n    return (typeof key !== 'undefined') ? this.store[key] : this.store;\n  }\n\n  setStates(key, value) {\n    let store;\n\n    if (typeof key === 'string' && typeof value !== 'undefined') {\n      store = { [key]: value };\n    } else {\n      store = key;\n    }\n\n    if (!this.store) {\n      this.store = {};\n    }\n\n    Object.assign(this.store, store);\n  }\n\n  getMiddleware(type, delegate) {\n    return this.middlewares[type][delegate];\n  }\n\n  getComponent(name) {\n    const component = this.components[name];\n\n    if (!!component) {\n      return component.view;\n    }\n  }\n\n  getRouteTables() {\n    return Router.routeTables;\n  }\n\n  dispatch(action, subscriber) {\n    this.queue.push({ action, subscriber });\n  }\n  \n  use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(m => this.useModule(m));\n    } else {\n      if (typeof module === 'object' && !('wwtype' in module)) {\n        Object.keys(module).forEach(key => {\n          if (typeof module[key] === 'function')\n            this.useModule(module[key]);\n        });\n      } else { // function\n        this.useModule(module);\n      }\n    }\n  }\n\n  useModule(module) {\n    switch (module.wwtype) {\n      case 'reducer':\n        this.bindReducer(module);\n        break;\n      case 'layout':\n        Router.bindLayout(module);\n        break;\n      case 'store':\n        this.bindStore(module.store);\n        break;\n      case 'component':\n        console.warn('Component:: Deprecated and will be removed in a future release.');\n        this.bindComponent(module);\n        break;\n      case 'plugin':\n        this.bindPlugin(module);\n        break;\n    }\n  }\n\n  set(middleware, options = {}) {\n    let instance = new middleware(options);\n\n    if (instance.mwtype) {\n      Object.values(MIDDLEWARE_PROTOCOL).forEach(delegate => {\n        delegate in instance && this.middlewares[instance.mwtype][delegate].push(instance);\n      });\n    } else {\n      throw new Error('Required attribute \"mwtype\" is missing.');\n    }\n  }\n\n  start(design, options = {}) {\n    if (typeof jQuery === 'undefined') {\n      throw new Error('jQuery is not loaded!!');\n    }\n\n    let wait = setInterval(() => {\n      switch (document.readyState) {\n        case 'complete': case 'loaded': break;\n        default: return;\n      }\n\n      clearInterval(wait);\n\n      if (Backbone.History.started) {\n        Backbone.history.stop();\n      }\n\n      if (!!design) {\n        Router.design(design, options, toolset);\n      }\n\n      let middlewares = this.getMiddleware(MIDDLEWARE.APP, MIDDLEWARE_PROTOCOL.BEFORE);\n\n      MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.BEFORE, [toolset], function() {\n        middlewares = this.getMiddleware(MIDDLEWARE.APP, MIDDLEWARE_PROTOCOL.AFTER);\n\n        MiddlewareRunner.run(middlewares, MIDDLEWARE_PROTOCOL.AFTER, [toolset], function() {\n          Backbone.history.start({ pushState: !!options.pushState });\n        });\n      }.bind(this));\n    }, 1);\n  }\n\n  numberOfAction() {\n    return this.queue.length;\n  }\n\n  numberOfWorkAction() {\n    return Object.keys(this.actionObject).length;\n  }\n}\n\nObject.assign(Woowahan.prototype, Backbone.Events);\n\nWoowahan.$ = Backbone.$;\n\nWoowahan.View = require('./view')(toolset);\nWoowahan.Reducer = require('./reducer')(toolset);\nWoowahan.Error = require('./error');\nWoowahan.Types = require('./types');\nWoowahan.Store = require('./store');\nWoowahan.Action = require('./action');\nWoowahan.Event = require('./event');\nWoowahan.Schema = require('./schema');\nWoowahan.Layout = require('./layout');\nWoowahan.Component = require('./component');\nWoowahan.Plugin = require('./plugin');\n\nmodule.exports = global.Woowahan = Woowahan;\n\n/** components */\nWoowahan.CollectionView = require('./collection-view')(toolset);\nWoowahan.ItemView = require('./item-view')(toolset);\nWoowahan.PopupView = require('./popup-view')(toolset);\n\nWoowahan.version = '1.2.2';"
  },
  {
    "path": "test/mocha.opts",
    "content": ""
  },
  {
    "path": "test/schema.js",
    "content": "import { assert } from 'chai';\nimport Woowahan from '../';\n\ndescribe('Schema & Validation:', () => {\n  let defaultSchema = Woowahan.Schema.create('defaultSchema', {\n    name: Woowahan.Types.String(),\n    age: Woowahan.Types.Number()\n  });\n\n  let attrsSchema = Woowahan.Schema.create('attrsSchema', {\n    name: Woowahan.Types.String({ required: true }),\n    age: Woowahan.Types.Number({ min: 18, max: 120 }),\n    email: Woowahan.Types.Email()\n  });\n\n  it('Set woowahan type (wwtype) name', () => {\n    assert.equal(defaultSchema.wwtype, 'schema');\n  });\n\n  it('Set schema name', () => {\n    assert.equal(defaultSchema.schemaName, 'defaultSchema');\n  });\n\n  it('Check required attribute', () => {\n    assert.lengthOf(attrsSchema.validate({}), 1);\n  });\n\n  it('Check string data ', () => {\n    assert.equal(defaultSchema.validate({ name: 'kim' }), void 0);\n    assert.lengthOf(defaultSchema.validate({ name: 1 }), 1);\n  });\n\n  it('Check invalide number data', () => {\n    assert.lengthOf(defaultSchema.validate({ name: 'kim', age: '10살' }), 1);\n  });\n\n  it('Check valide string number data', () => {\n    assert.equal(defaultSchema.validate({ name: 'kim', age: '30' }), void 0);\n    assert.equal(defaultSchema.validate({ name: 'kim', age: '+30' }), void 0);\n    assert.lengthOf(defaultSchema.validate({ name: 'kim', age: '30.1 343' }), 1);\n    assert.lengthOf(defaultSchema.validate({ name: 'kim', age: '30.1.343' }), 1);\n  });\n\n  it('Check min value for number type', () => {\n    assert.equal(attrsSchema.validate({ name: 'kim', age: 25 }), void 0);\n    assert.equal(attrsSchema.validate({ name: 'kim', age: '25' }), void 0);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: 10 }), 1);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: '10' }), 1);\n  });\n\n  it('Check max value for number type', () => {\n    assert.equal(attrsSchema.validate({ name: 'kim', age: 20 }), void 0);\n    assert.equal(attrsSchema.validate({ name: 'kim', age: '20' }), void 0);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: 145 }), 1);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: '145' }), 1);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: '-145' }), 1);\n  });\n\n  it('Multiple validation', () => {\n    assert.lengthOf(attrsSchema.validate({ age: 200 }), 2);\n  });\n\n  it('Check valide email', () => {\n    assert.equal(attrsSchema.validate({ name: 'kim', age: 30, email: 'your.name@company.com' }), void 0);\n    assert.equal(attrsSchema.validate({ name: 'kim', age: 30, email: 'your-name@company.kr' }), void 0);\n    assert.equal(attrsSchema.validate({ name: 'kim', age: 30, email: 'yourname@company.co.kr' }), void 0);\n  });\n\n  it('Check invalide email', () => {\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: 30, email: '@company.com' }), 1);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: 30, email: 'company.com' }), 1);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: 30, email: '@@test' }), 1);\n    assert.lengthOf(attrsSchema.validate({ name: 'kim', age: 30, email: 'foo' }), 1);\n  });\n\n  describe('Default value', () => {\n    it('Default String', () => {\n      let defaultString = 'my xyz string';\n      let schema = Woowahan.Schema.create('schema', {\n        name: Woowahan.Types.String({ defaultValue: defaultString })\n      });\n\n      \n    });\n  });\n});"
  },
  {
    "path": "test/store.js",
    "content": "import { assert } from 'chai';\nimport Woowahan from '../';\n\ndescribe('Store', () => {\n  it('Create Store', () => {\n    let app = new Woowahan();\n\n    app.use(Woowahan.Store.create({ foo: {} }));\n\n    assert.typeOf(app.getStates().foo, 'object');\n  });\n});\n"
  },
  {
    "path": "test/types.js",
    "content": "import { assert } from 'chai';\nimport Woowahan from '../';\n\ndescribe('Types', () => {\n  describe('Create String Type', () => {\n    it('Default Attributes', () => {\n      let type = Woowahan.Types.String();\n\n      assert.typeOf(type, 'object');\n      assert.equal(type.name, 'string');\n      assert.equal(type.defaultValue, '');\n      assert.equal(type.required, false);\n    });\n\n    it('Set Required Attributes', () => {\n      let type = Woowahan.Types.String({ required: true });\n\n      assert.equal(type.required, true);\n    });\n\n    it('Set DefaultValue Attributes', () => {\n      let defaultValue = 'Do Something';\n      let type = Woowahan.Types.String({ defaultValue });\n\n      assert.equal(type.defaultValue, defaultValue);\n    });\n\n    it('Set Min, Max Attributes', () => {\n      let type = Woowahan.Types.String({ min: 4, max: 20 });\n\n      assert.equal(type.min, 4);\n      assert.equal(type.max, 20);\n    });\n  });\n\n  describe('Create Number Type', () => {\n    it('Default Attributes', () => {\n      let type = Woowahan.Types.Number();\n\n      assert.typeOf(type, 'object');\n      assert.equal(type.name, 'number');\n      assert.equal(type.defaultValue, 0);\n      assert.equal(type.required, false);\n    });\n\n    it('Set Required Attributes', () => {\n      let type = Woowahan.Types.Number({ required: true });\n\n      assert.equal(type.required, true);\n    });\n\n    it('Set DefaultValue Attributes', () => {\n      let defaultValue = 10;\n      let type = Woowahan.Types.Number({ defaultValue });\n\n      assert.equal(type.defaultValue, defaultValue);\n    });\n\n    it('Set Min, Max Attributes', () => {\n      let type = Woowahan.Types.Number({ min: 4, max: 20 });\n\n      assert.equal(type.min, 4);\n      assert.equal(type.max, 20);\n    });\n  });\n\n  describe('Create Array Type', () => {\n    it('Default Attributes', () => {\n      let type = Woowahan.Types.Array();\n\n      assert.typeOf(type, 'object');\n      assert.equal(type.name, 'array');\n    });\n\n    it('Set Required Attributes', () => {\n      let type = Woowahan.Types.Array({ required: true });\n\n      assert(type.required, true);\n    });\n  });\n\n  describe('Create Email Type', () => {\n    it('Default Attributes', () => {\n      let type = Woowahan.Types.Email();\n\n      assert.typeOf(type, 'object');\n      assert.equal(type.name, 'email');\n    });\n\n    it('Set Required Attributes', () => {\n      let type = Woowahan.Types.Email({ required: true });\n\n      assert(type.required, true);\n    });\n  });\n});"
  }
]