[
  {
    "path": "README.md",
    "content": "# React Mix \n\nReact Mix enables you to build all platform application base on React-Native. We create a mid-layer to support all CSS gramma, all JS dom event, all H5 framework on React-Native, and We have done these:\n- support CSS className\n- support CSS unit, px, pt, rem, em\n- unify box model measurement on all platform by CSS rem\n- support CSS two or more className combine or inherit, such as (.className1 .className2 .className3...)inhreit , (.className1.className2.className3)combine\n- support CSS selector(part done, progress), have support #id, .className, tagName\n- support DOM selector(part done, progress), have support $('#id'), $('.className'), $('TagName'), $('CSS3 selector')(by sizzle)\n- support DOM event, like onTouchXXXX, onLoad, onClick...eg(done)\n- support DOM Manipulation API like JQuery(part done, progress), have support part JQuery DOM API, all done until February\n- support ReactNative Bundle into two part, not single release, one is like common part, include nessesary component, bigger one, another is business code, smaller.(done, read react-native.js.split.build.js)\n- and more...\n\n- add a big game demo 2048 , can both run  iOS/Android/H5 , more detail see sourcecode\n\nBoth support ReactNative Android and IOS, more UI component is still in dev!\n\nWe promise , we do not change any react-native core code, we only do auto translate tools!\n\n## Have Support CSS Function\n- className\n- css unit, px , pt, em , rem\n- #id\n- .className\n- TagName\n- .className combine, like .a.b.c\n- .className inherit like .a .b .c\n\n## Have Support JQuery API\n- $, you can use $('#id'), $('.className') to find a instance\n- addClass\n- removeClass\n- hasClass\n- css\n- before\n- append\n- html\n- offset\n- attr\n- parent, because we simulate a DOM tree\n- on(=addEventListener)\n- off(=removeEventListener)\n\n## Have Support LocalStorage\n- API like web browser localstorage, example see ./reactnative/example_localstorage.js\n\n## Have Support Animation API\n- requestAnimationFrame\n- setInterval\n- setTimeout\n\n## Introduction\n\n很高兴给大家介绍我们基于ReactNative框架实现的，目标是完全兼容现有的H5开发方式的新一代框架ReactMix, 相信大家已经使用ReactNative去开发各自的应用有一段时间了，在这段时间，因为ReactNative的API频繁变动，且文档不全，而对于已经习惯写js,css开发的前端工作者来说，ReactNative又是一种新的开发模式，现在ReactMix就是为了解决大家现在遇到的这些问题而来了。\n\n我们通过中间层，来使得ReactNative，能支持现有的HTML5的js+ dom api + css的开发模式，完美的支持常用的\n- css className\n- 支持了css基本单位px, pt, rem\n- 彻底解决了ios安卓尺寸样式不统一的问题，基于rem的度量方式，而且自适应不同的屏幕和分辨率，再也不用为未来更大屏的设备写兼容代码了\n- 多个className的组合，或者className继承关系\n- css选择器，支持id, className, tag选择器\n- 支持Dom选择器，你可以使用#id, .className, TagName去定位和查找节点\n- 支持常用的js dom event api，支持例如onclick\n- 支持常用的dom操作api，比如insertBefore, html等等，你经常使用的api\n- 支持ReactNative代码的分割打包，这样你可以把reactnative的框架代码保存在app本地，但是业务代码通过在线直连的方法更新，保证网络传输量最小\n\n- 添加游戏2048的例子，现在启动默认进入2048,如果要修改其他例子，请修改index.ios.js的引用指向, 安卓修改index.android.js\n\n而且我们是基于自动化脚本动态翻译的方式，使得现有的HTML+CSS+JS的代码可以无修改的直接转换成为reactnative代码，且一套不需要修改的代码，直接在iOS,andorid,winphone,H5,PC平台实现展现完全一致\n\n## Getting Started\n\n- 从github上下载工程，然后在根目录执行一遍npm install，再进入reactnative目录执行一遍npm install\n- Mac的同学，可以直接执行install.sh,功能第一条类似，分别在更目录执行npm install和在./reactnative目录执行npm install\n- 根目录的npm主要是用来执行css动态翻译，以及web用的js动态翻译的，./reactnaitve的npm主要用来执行reactnative\n- 从根目录开始，reactnative目录是主要的业务开发代码，web目录是H5相关的代码\n- 我们通过代号为lightningStorm的框架代码使得reactnative支持类似html标签，和模拟css，和模拟dom api，框架地址为./reactnative/common/LightningStorm.js\n- 你可以打开安卓或者ios的reactnative的项目，来查看demo的例子，来了解我们的工作模式\n- 我们模拟了HTML常用的多个节点，比如Div替代了reactnative的View，Span替换了reactnative的Text, Img替换了reactnative的Image，其中Div, Span, Img的用法和HTML语法的基本用法保持一致\n- 主要文件说明如下: iOS入口文件还是index.ios.js,安卓同理index.android.js，但是里面只是壳子，import了框架的lightningStorm，大家都引用的index.js，这个是真正的业务入口\n- H5的入口文件也是html的壳子，在./web/index.html，同理引用的是index.build.js，这个文件基于webpack.config.js打包同步自动生成的，打包文件有详细的入口是依赖和iOS同样的index.ios.js\n- 项目中的三个重要的打包文件一个同步翻译css到react使用的css，是react.css.build.js，基于node实现的css同步翻译脚本\n- webpack.config.js是用来实现H5平台的同步翻译，把reactnative的index.ios.js同步翻译成为H5平台的业务代码\n- H5和app共用一套css代码，在./css目录里面，在文件中加载css的API暂定为includeCSS\n- 未来会支持所有现有的CSS的功能，包括ReactNative不支持的display，甚至是伪类等等，还有media query都会计划支持到\n- 目前拆出来的js文件，不包括完整的UI Component部分，UI部分计划另外开源，即时你不适用我们的ReactMix框架，你可以适用我们的UI在React或者ReactNative上面\n\n\n## Getting Help\n\n- 你可以提交issue，或者邮件我xueduanyang1985@163.com[mailto:xueduanyang1985@163.com]，来反馈遇到的问题和寻求帮助\n\n## Documentation\n\n第一篇原理揭秘文章在http://www.cnblogs.com/xueduanyang/p/5125781.html\n\n系列学习文章连载中http://www.cnblogs.com/xueduanyang/p/5128690.html\n\n更多的文档和例子正在完善中。。。\n\n## react-native目录主要文件介绍\n\n这里保持和官方的reactnative代码完全一致\n- css目录是存放通过根目录的react.css.build.js脚本同步编译过来的reactjs的css文件\n- 保留了官方原有的index.ios.js做入口\n- common目录是框架文件，以及UI组件的文件\n- index.js是页面入口文件，业务逻辑\n- common/LightningStorm.js是框架文件\n- common/rn目录是reactnative的UI组件文件，适配与native组件\n- 对应的在根目录web目录也有一个叫做common/html对应的是适配与H5的UI组件文件,和common/rn目录的API保持一致，但是不同实现\n- reactnative目录增加了一些demo的例子\n\n## Demo\n\n你可以发现，我们的代码基本类似现有的js+ html的开发模式\n![](http://statics1.jiaru.club/react-native-example/demo3.jpg)\n\n![](http://statics1.jiaru.club/react-native-example/demo4.jpg)\n\n![](http://statics1.jiaru.club/react-native-example/demo1.jpg)\n\n![](http://statics1.jiaru.club/react-native-example/demo2.jpg)\n\n\n\n"
  },
  {
    "path": "build/part1.js",
    "content": "__DEV__=\ntrue;\n\n\n__BUNDLE_START_TIME__=Date.now();\n(\nfunction(global){\nvar modules=Object.create(null);\nvar inGuard=false;\n\nfunction define(id,factory){\nmodules[id]={\nfactory:factory,\nmodule:{exports:{}},\nisInitialized:false,\nhasError:false};}\n\n\n\nfunction require(id){\nvar mod=modules[id];\nif(mod&&mod.isInitialized){\nreturn mod.module.exports;}\n\n\nreturn requireImpl(id);}\n\n\nfunction requireImpl(id){\nif(global.ErrorUtils&&!inGuard){\ninGuard=true;\nvar returnValue;\ntry{\nreturnValue=requireImpl.apply(this,arguments);}\ncatch(e) {\nglobal.ErrorUtils.reportFatalError(e);}\n\ninGuard=false;\nreturn returnValue;}\n\n\nvar mod=modules[id];\nif(!mod){\nvar msg='Requiring unknown module \"'+id+'\"';\nif(__DEV__){\nmsg+='. If you are sure the module is there, try restarting the packager.';}\n\nthrow new Error(msg);}\n\n\nif(mod.hasError){\nthrow new Error(\n'Requiring module \"'+id+'\" which threw an exception');}\n\n\n\ntry{\n\n\nmod.isInitialized=true;\n\n__DEV__&&BridgeProfiling().profile(id);\n\n\n\nmod.factory.call(global,global,require,mod.module,mod.module.exports);\n\n__DEV__&&BridgeProfiling().profileEnd();}\ncatch(e) {\nmod.hasError=true;\nmod.isInitialized=false;\nthrow e;}\n\n\nreturn mod.module.exports;}\n\n\nvar BridgeProfiling=__DEV__&&function(){\nvar _BridgeProfiling;\ntry{\n_BridgeProfiling=require('BridgeProfiling');}\ncatch(e) {}\n\nreturn _BridgeProfiling&&_BridgeProfiling.profile?\n_BridgeProfiling:{profile:function(){},profileEnd:function(){}};};\n\n\nglobal.__d=define;\nglobal.require=require;})(\nthis);\nObject.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nassign=function(target,sources){\nif(__DEV__){\nif(target==null){\nthrow new TypeError('Object.assign target cannot be null or undefined');}\n\nif(typeof target!=='object'&&typeof target!=='function'){\nthrow new TypeError(\n'In this environment the target of assign MUST be an object.'+\n'This error is a performance optimization and not spec compliant.');}}\n\n\n\n\nfor(var nextIndex=1;nextIndex<arguments.length;nextIndex++){\nvar nextSource=arguments[nextIndex];\nif(nextSource==null){\ncontinue;}\n\n\nif(__DEV__){\nif(typeof nextSource!=='object'&&\ntypeof nextSource!=='function'){\nthrow new TypeError(\n'In this environment the target of assign MUST be an object.'+\n'This error is a performance optimization and not spec compliant.');}}\n\n\n\n\n\n\n\n\nfor(var key in nextSource){\nif(__DEV__){\nvar hasOwnProperty=Object.prototype.hasOwnProperty;\nif(!hasOwnProperty.call(nextSource,key)){\nthrow new TypeError(\n'One of the sources to assign has an enumerable key on the '+\n'prototype chain. This is an edge case that we do not support. '+\n'This error is a performance optimization and not spec compliant.');}}\n\n\n\ntarget[key]=nextSource[key];}}\n\n\n\nreturn target;};\n(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction(global){\n'use strict';\n\nvar inspect=(function(){\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction inspect(obj,opts){\nvar ctx={\nseen:[],\nstylize:stylizeNoColor};\n\nreturn formatValue(ctx,obj,opts.depth);}\n\n\nfunction stylizeNoColor(str,styleType){\nreturn str;}\n\n\nfunction arrayToHash(array){\nvar hash={};\n\narray.forEach(function(val,idx){\nhash[val]=true;});\n\n\nreturn hash;}\n\n\n\nfunction formatValue(ctx,value,recurseTimes){\n\nvar primitive=formatPrimitive(ctx,value);\nif(primitive){\nreturn primitive;}\n\n\n\nvar keys=Object.keys(value);\nvar visibleKeys=arrayToHash(keys);\n\n\n\nif(isError(value)&&(\nkeys.indexOf('message')>=0||keys.indexOf('description')>=0)){\nreturn formatError(value);}\n\n\n\nif(keys.length===0){\nif(isFunction(value)){\nvar name=value.name?': '+value.name:'';\nreturn ctx.stylize('[Function'+name+']','special');}\n\nif(isRegExp(value)){\nreturn ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}\n\nif(isDate(value)){\nreturn ctx.stylize(Date.prototype.toString.call(value),'date');}\n\nif(isError(value)){\nreturn formatError(value);}}\n\n\n\nvar base='',array=false,braces=['{','}'];\n\n\nif(isArray(value)){\narray=true;\nbraces=['[',']'];}\n\n\n\nif(isFunction(value)){\nvar n=value.name?': '+value.name:'';\nbase=' [Function'+n+']';}\n\n\n\nif(isRegExp(value)){\nbase=' '+RegExp.prototype.toString.call(value);}\n\n\n\nif(isDate(value)){\nbase=' '+Date.prototype.toUTCString.call(value);}\n\n\n\nif(isError(value)){\nbase=' '+formatError(value);}\n\n\nif(keys.length===0&&(!array||value.length==0)){\nreturn braces[0]+base+braces[1];}\n\n\nif(recurseTimes<0){\nif(isRegExp(value)){\nreturn ctx.stylize(RegExp.prototype.toString.call(value),'regexp');}else \n{\nreturn ctx.stylize('[Object]','special');}}\n\n\n\nctx.seen.push(value);\n\nvar output;\nif(array){\noutput=formatArray(ctx,value,recurseTimes,visibleKeys,keys);}else \n{\noutput=keys.map(function(key){\nreturn formatProperty(ctx,value,recurseTimes,visibleKeys,key,array);});}\n\n\n\nctx.seen.pop();\n\nreturn reduceToSingleString(output,base,braces);}\n\n\n\nfunction formatPrimitive(ctx,value){\nif(isUndefined(value))\nreturn ctx.stylize('undefined','undefined');\nif(isString(value)){\nvar simple='\\''+JSON.stringify(value).replace(/^\"|\"$/g,'').\nreplace(/'/g,\"\\\\'\").\nreplace(/\\\\\"/g,'\"')+'\\'';\nreturn ctx.stylize(simple,'string');}\n\nif(isNumber(value))\nreturn ctx.stylize(''+value,'number');\nif(isBoolean(value))\nreturn ctx.stylize(''+value,'boolean');\n\nif(isNull(value))\nreturn ctx.stylize('null','null');}\n\n\n\nfunction formatError(value){\nreturn '['+Error.prototype.toString.call(value)+']';}\n\n\n\nfunction formatArray(ctx,value,recurseTimes,visibleKeys,keys){\nvar output=[];\nfor(var i=0,l=value.length;i<l;++i){\nif(hasOwnProperty(value,String(i))){\noutput.push(formatProperty(ctx,value,recurseTimes,visibleKeys,\nString(i),true));}else \n{\noutput.push('');}}\n\n\nkeys.forEach(function(key){\nif(!key.match(/^\\d+$/)){\noutput.push(formatProperty(ctx,value,recurseTimes,visibleKeys,\nkey,true));}});\n\n\nreturn output;}\n\n\n\nfunction formatProperty(ctx,value,recurseTimes,visibleKeys,key,array){\nvar name,str,desc;\ndesc=Object.getOwnPropertyDescriptor(value,key)||{value:value[key]};\nif(desc.get){\nif(desc.set){\nstr=ctx.stylize('[Getter/Setter]','special');}else \n{\nstr=ctx.stylize('[Getter]','special');}}else \n\n{\nif(desc.set){\nstr=ctx.stylize('[Setter]','special');}}\n\n\nif(!hasOwnProperty(visibleKeys,key)){\nname='['+key+']';}\n\nif(!str){\nif(ctx.seen.indexOf(desc.value)<0){\nif(isNull(recurseTimes)){\nstr=formatValue(ctx,desc.value,null);}else \n{\nstr=formatValue(ctx,desc.value,recurseTimes-1);}\n\nif(str.indexOf('\\n')>-1){\nif(array){\nstr=str.split('\\n').map(function(line){\nreturn '  '+line;}).\njoin('\\n').substr(2);}else \n{\nstr='\\n'+str.split('\\n').map(function(line){\nreturn '   '+line;}).\njoin('\\n');}}}else \n\n\n{\nstr=ctx.stylize('[Circular]','special');}}\n\n\nif(isUndefined(name)){\nif(array&&key.match(/^\\d+$/)){\nreturn str;}\n\nname=JSON.stringify(''+key);\nif(name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)){\nname=name.substr(1,name.length-2);\nname=ctx.stylize(name,'name');}else \n{\nname=name.replace(/'/g,\"\\\\'\").\nreplace(/\\\\\"/g,'\"').\nreplace(/(^\"|\"$)/g,\"'\");\nname=ctx.stylize(name,'string');}}\n\n\n\nreturn name+': '+str;}\n\n\n\nfunction reduceToSingleString(output,base,braces){\nvar numLinesEst=0;\nvar length=output.reduce(function(prev,cur){\nnumLinesEst++;\nif(cur.indexOf('\\n')>=0)numLinesEst++;\nreturn prev+cur.replace(/\\u001b\\[\\d\\d?m/g,'').length+1;},\n0);\n\nif(length>60){\nreturn braces[0]+(\nbase===''?'':base+'\\n ')+\n' '+\noutput.join(',\\n  ')+\n' '+\nbraces[1];}\n\n\nreturn braces[0]+base+' '+output.join(', ')+' '+braces[1];}\n\n\n\n\n\nfunction isArray(ar){\nreturn Array.isArray(ar);}\n\n\nfunction isBoolean(arg){\nreturn typeof arg==='boolean';}\n\n\nfunction isNull(arg){\nreturn arg===null;}\n\n\nfunction isNullOrUndefined(arg){\nreturn arg==null;}\n\n\nfunction isNumber(arg){\nreturn typeof arg==='number';}\n\n\nfunction isString(arg){\nreturn typeof arg==='string';}\n\n\nfunction isSymbol(arg){\nreturn typeof arg==='symbol';}\n\n\nfunction isUndefined(arg){\nreturn arg===void 0;}\n\n\nfunction isRegExp(re){\nreturn isObject(re)&&objectToString(re)==='[object RegExp]';}\n\n\nfunction isObject(arg){\nreturn typeof arg==='object'&&arg!==null;}\n\n\nfunction isDate(d){\nreturn isObject(d)&&objectToString(d)==='[object Date]';}\n\n\nfunction isError(e){\nreturn isObject(e)&&(\nobjectToString(e)==='[object Error]'||e instanceof Error);}\n\n\nfunction isFunction(arg){\nreturn typeof arg==='function';}\n\n\nfunction isPrimitive(arg){\nreturn arg===null||\ntypeof arg==='boolean'||\ntypeof arg==='number'||\ntypeof arg==='string'||\ntypeof arg==='symbol'||\ntypeof arg==='undefined';}\n\n\nfunction objectToString(o){\nreturn Object.prototype.toString.call(o);}\n\n\nfunction hasOwnProperty(obj,prop){\nreturn Object.prototype.hasOwnProperty.call(obj,prop);}\n\n\nreturn inspect;})();\n\n\n\nvar OBJECT_COLUMN_NAME='(index)';\nvar LOG_LEVELS={\ntrace:0,\ninfo:1,\nwarn:2,\nerror:3};\n\n\nfunction setupConsole(global){\nvar originalConsole=global.console;\n\nif(!global.nativeLoggingHook){\nreturn;}\n\n\nfunction getNativeLogFunction(level){\nreturn function(){\nvar str;\nif(arguments.length===1&&typeof arguments[0]==='string'){\nstr=arguments[0];}else \n{\nstr=Array.prototype.map.call(arguments,function(arg){\nreturn inspect(arg,{depth:10});}).\njoin(', ');}\n\n\nvar logLevel=level;\nif(str.slice(0,9)==='Warning: '&&logLevel>=LOG_LEVELS.error){\n\n\n\nlogLevel=LOG_LEVELS.warn;}\n\nglobal.nativeLoggingHook(str,logLevel);};}\n\n\n\nvar repeat=function(element,n){\nreturn Array.apply(null,Array(n)).map(function(){return element;});};\n\n\nfunction consoleTablePolyfill(rows){\n\nif(!Array.isArray(rows)){\nvar data=rows;\nrows=[];\nfor(var key in data){\nif(data.hasOwnProperty(key)){\nvar row=data[key];\nrow[OBJECT_COLUMN_NAME]=key;\nrows.push(row);}}}\n\n\n\nif(rows.length===0){\nglobal.nativeLoggingHook('',LOG_LEVELS.info);\nreturn;}\n\n\nvar columns=Object.keys(rows[0]).sort();\nvar stringRows=[];\nvar columnWidths=[];\n\n\n\ncolumns.forEach(function(k,i){\ncolumnWidths[i]=k.length;\nfor(var j=0;j<rows.length;j++){\nvar cellStr=rows[j][k].toString();\nstringRows[j]=stringRows[j]||[];\nstringRows[j][i]=cellStr;\ncolumnWidths[i]=Math.max(columnWidths[i],cellStr.length);}});\n\n\n\n\n\nvar joinRow=function(row,space){\nvar cells=row.map(function(cell,i){\nvar extraSpaces=repeat(' ',columnWidths[i]-cell.length).join('');\nreturn cell+extraSpaces;});\n\nspace=space||' ';\nreturn cells.join(space+'|'+space);};\n\n\nvar separators=columnWidths.map(function(columnWidth){\nreturn repeat('-',columnWidth).join('');});\n\nvar separatorRow=joinRow(separators,'-');\nvar header=joinRow(columns);\nvar table=[header,separatorRow];\n\nfor(var i=0;i<rows.length;i++){\ntable.push(joinRow(stringRows[i]));}\n\n\n\n\n\n\nglobal.nativeLoggingHook('\\n'+table.join('\\n'),LOG_LEVELS.info);}\n\n\nglobal.console={\nerror:getNativeLogFunction(LOG_LEVELS.error),\ninfo:getNativeLogFunction(LOG_LEVELS.info),\nlog:getNativeLogFunction(LOG_LEVELS.info),\nwarn:getNativeLogFunction(LOG_LEVELS.warn),\ntrace:getNativeLogFunction(LOG_LEVELS.trace),\ntable:consoleTablePolyfill};\n\n\n\n\n\nif(__DEV__&&originalConsole){\nObject.keys(global.console).forEach(function(methodName){\nvar reactNativeMethod=global.console[methodName];\nif(originalConsole[methodName]){\nglobal.console[methodName]=function(){\noriginalConsole[methodName].apply(originalConsole,arguments);\nreactNativeMethod.apply(global.console,arguments);};}});}}\n\n\n\n\n\n\nif(typeof module!=='undefined'){\nmodule.exports=setupConsole;}else \n{\nsetupConsole(global);}})(\n\n\nthis);\n(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction(global){\nvar ErrorUtils={\n_inGuard:0,\n_globalHandler:null,\nsetGlobalHandler:function(fun){\nErrorUtils._globalHandler=fun;},\n\nreportError:function(error){\nErrorUtils._globalHandler&&ErrorUtils._globalHandler(error);},\n\nreportFatalError:function(error){\nErrorUtils._globalHandler&&ErrorUtils._globalHandler(error,true);},\n\napplyWithGuard:function(fun,context,args){\ntry{\nErrorUtils._inGuard++;\nreturn fun.apply(context,args);}\ncatch(e) {\nErrorUtils.reportError(e);}finally \n{\nErrorUtils._inGuard--;}},\n\n\napplyWithGuardIfNeeded:function(fun,context,args){\nif(ErrorUtils.inGuard()){\nreturn fun.apply(context,args);}else \n{\nErrorUtils.applyWithGuard(fun,context,args);}},\n\n\ninGuard:function(){\nreturn ErrorUtils._inGuard;},\n\nguard:function(fun,name,context){\nif(typeof fun!=='function'){\nconsole.warn('A function must be passed to ErrorUtils.guard, got ',fun);\nreturn null;}\n\nname=name||fun.name||'<generated guard>';\nfunction guarded(){\nreturn (\nErrorUtils.applyWithGuard(\nfun,\ncontext||this,\narguments,\nnull,\nname));}\n\n\n\n\nreturn guarded;}};\n\n\nglobal.ErrorUtils=ErrorUtils;\n\n\n\n\n\nfunction setupErrorGuard(){\nvar onError=function(e){\nglobal.console.error(\n'Error: '+\n'\\n stack: '+e.stack+\n'\\n line: '+e.line+\n'\\n message: '+e.message,\ne);};\n\n\nglobal.ErrorUtils.setGlobalHandler(onError);}\n\n\nsetupErrorGuard();})(\nthis);\nif(\n\n\n\n\n\n\n\n\n\n\n\n!String.prototype.startsWith){\nString.prototype.startsWith=function(search){\n'use strict';\nif(this==null){\nthrow TypeError();}\n\nvar string=String(this);\nvar pos=arguments.length>1?\nNumber(arguments[1])||0:0;\nvar start=Math.min(Math.max(pos,0),string.length);\nreturn string.indexOf(String(search),pos)===start;};}\n\n\n\nif(!String.prototype.endsWith){\nString.prototype.endsWith=function(search){\n'use strict';\nif(this==null){\nthrow TypeError();}\n\nvar string=String(this);\nvar stringLength=string.length;\nvar searchString=String(search);\nvar pos=arguments.length>1?\nNumber(arguments[1])||0:stringLength;\nvar end=Math.min(Math.max(pos,0),stringLength);\nvar start=end-searchString.length;\nif(start<0){\nreturn false;}\n\nreturn string.lastIndexOf(searchString,start)===start;};}\n\n\n\nif(!String.prototype.contains){\nString.prototype.contains=function(search){\n'use strict';\nif(this==null){\nthrow TypeError();}\n\nvar string=String(this);\nvar pos=arguments.length>1?\nNumber(arguments[1])||0:0;\nreturn string.indexOf(String(search),pos)!==-1;};}\n\n\n\nif(!String.prototype.repeat){\nString.prototype.repeat=function(count){\n'use strict';\nif(this==null){\nthrow TypeError();}\n\nvar string=String(this);\ncount=Number(count)||0;\nif(count<0||count===Infinity){\nthrow RangeError();}\n\nif(count===1){\nreturn string;}\n\nvar result='';\nwhile(count){\nif(count&1){\nresult+=string;}\n\nif(count>>=1){\nstring+=string;}}\n\n\nreturn result;};}\n(\n\n\n\n\n\n\n\n\n\nfunction(undefined){\n\nfunction findIndex(predicate,context){\nif(this==null){\nthrow new TypeError(\n'Array.prototype.findIndex called on null or undefined');}\n\n\nif(typeof predicate!=='function'){\nthrow new TypeError('predicate must be a function');}\n\nvar list=Object(this);\nvar length=list.length>>>0;\nfor(var i=0;i<length;i++){\nif(predicate.call(context,list[i],i,list)){\nreturn i;}}\n\n\nreturn -1;}\n\n\nif(!Array.prototype.findIndex){\nObject.defineProperty(Array.prototype,'findIndex',{\nenumerable:false,\nwritable:true,\nconfigurable:true,\nvalue:findIndex});}\n\n\n\n\nif(!Array.prototype.find){\nObject.defineProperty(Array.prototype,'find',{\nenumerable:false,\nwritable:true,\nconfigurable:true,\nvalue:function(predicate,context){\nif(this==null){\nthrow new TypeError(\n'Array.prototype.find called on null or undefined');}\n\n\nvar index=findIndex.call(this,predicate,context);\nreturn index===-1?undefined:this[index];}});}})();\nif(\n\n\n\n\n\n\n\n\n\n\n\n\n!Array.from){\nArray.from=function(arrayLike){\nif(arrayLike==null){\nthrow new TypeError('Object is null or undefined');}\n\n\n\nvar mapFn=arguments[1];\nvar thisArg=arguments[2];\n\nvar C=this;\nvar items=Object(arrayLike);\nvar symbolIterator=typeof Symbol==='function'?\nSymbol.iterator:\n'@@iterator';\nvar mapping=typeof mapFn==='function';\nvar usingIterator=typeof items[symbolIterator]==='function';\nvar key=0;\nvar ret;\nvar value;\n\nif(usingIterator){\nret=typeof C==='function'?\nnew C():\n[];\nvar it=items[symbolIterator]();\nvar next;\n\nwhile(!(next=it.next()).done){\nvalue=next.value;\n\nif(mapping){\nvalue=mapFn.call(thisArg,value,key);}\n\n\nret[key]=value;\nkey+=1;}\n\n\nret.length=key;\nreturn ret;}\n\n\nvar len=items.length;\nif(isNaN(len)||len<0){\nlen=0;}\n\n\nret=typeof C==='function'?\nnew C(len):\nnew Array(len);\n\nwhile(key<len){\nvalue=items[key];\n\nif(mapping){\nvalue=mapFn.call(thisArg,value,key);}\n\n\nret[key]=value;\n\nkey+=1;}\n\n\nret.length=key;\nreturn ret;};}\n(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction(global){\nvar babelHelpers=global.babelHelpers={};\n\nbabelHelpers.createRawReactElement=(function(){\nvar REACT_ELEMENT_TYPE=typeof Symbol===\"function\"&&Symbol.for&&Symbol.for(\"react.element\")||0xeac7;\nreturn function createRawReactElement(type,key,props){\nreturn {\n$$typeof:REACT_ELEMENT_TYPE,\ntype:type,\nkey:key,\nref:null,\nprops:props,\n_owner:null};};})();\n\n\n\n\nbabelHelpers.classCallCheck=function(instance,Constructor){\nif(!(instance instanceof Constructor)){\nthrow new TypeError(\"Cannot call a class as a function\");}};\n\n\n\nbabelHelpers.createClass=(function(){\nfunction defineProperties(target,props){\nfor(var i=0;i<props.length;i++){\nvar descriptor=props[i];\ndescriptor.enumerable=descriptor.enumerable||false;\ndescriptor.configurable=true;\nif(\"value\" in descriptor)descriptor.writable=true;\nObject.defineProperty(target,descriptor.key,descriptor);}}\n\n\n\nreturn function(Constructor,protoProps,staticProps){\nif(protoProps)defineProperties(Constructor.prototype,protoProps);\nif(staticProps)defineProperties(Constructor,staticProps);\nreturn Constructor;};})();\n\n\n\nbabelHelpers.defineProperty=function(obj,key,value){\nif(key in obj){\nObject.defineProperty(obj,key,{\nvalue:value,\nenumerable:true,\nconfigurable:true,\nwritable:true});}else \n\n{\nobj[key]=value;}\n\n\nreturn obj;};\n\n\nbabelHelpers._extends=babelHelpers.extends=Object.assign||function(target){\nfor(var i=1;i<arguments.length;i++){\nvar source=arguments[i];\n\nfor(var key in source){\nif(Object.prototype.hasOwnProperty.call(source,key)){\ntarget[key]=source[key];}}}\n\n\n\n\nreturn target;};\n\n\nbabelHelpers.get=function get(object,property,receiver){\nif(object===null)object=Function.prototype;\nvar desc=Object.getOwnPropertyDescriptor(object,property);\n\nif(desc===undefined){\nvar parent=Object.getPrototypeOf(object);\n\nif(parent===null){\nreturn undefined;}else \n{\nreturn get(parent,property,receiver);}}else \n\nif(\"value\" in desc){\nreturn desc.value;}else \n{\nvar getter=desc.get;\n\nif(getter===undefined){\nreturn undefined;}\n\n\nreturn getter.call(receiver);}};\n\n\n\nbabelHelpers.inherits=function(subClass,superClass){\nif(typeof superClass!==\"function\"&&superClass!==null){\nthrow new TypeError(\"Super expression must either be null or a function, not \"+typeof superClass);}\n\n\nsubClass.prototype=Object.create(superClass&&superClass.prototype,{\nconstructor:{\nvalue:subClass,\nenumerable:false,\nwritable:true,\nconfigurable:true}});\n\n\nif(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass;};\n\n\nbabelHelpers.interopRequireDefault=function(obj){\nreturn obj&&obj.__esModule?obj:{\ndefault:obj};};\n\n\n\nbabelHelpers.interopRequireWildcard=function(obj){\nif(obj&&obj.__esModule){\nreturn obj;}else \n{\nvar newObj={};\n\nif(obj!=null){\nfor(var key in obj){\nif(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key];}}\n\n\n\nnewObj.default=obj;\nreturn newObj;}};\n\n\n\nbabelHelpers.objectWithoutProperties=function(obj,keys){\nvar target={};\n\nfor(var i in obj){\nif(keys.indexOf(i)>=0)continue;\nif(!Object.prototype.hasOwnProperty.call(obj,i))continue;\ntarget[i]=obj[i];}\n\n\nreturn target;};\n\n\nbabelHelpers.possibleConstructorReturn=function(self,call){\nif(!self){\nthrow new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");}\n\n\nreturn call&&(typeof call===\"object\"||typeof call===\"function\")?call:self;};\n\n\nbabelHelpers.slicedToArray=(function(){\nfunction sliceIterator(arr,i){\nvar _arr=[];\nvar _n=true;\nvar _d=false;\nvar _e=undefined;\n\ntry{\nfor(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){\n_arr.push(_s.value);\n\nif(i&&_arr.length===i)break;}}\n\ncatch(err) {\n_d=true;\n_e=err;}finally \n{\ntry{\nif(!_n&&_i[\"return\"])_i[\"return\"]();}finally \n{\nif(_d)throw _e;}}\n\n\n\nreturn _arr;}\n\n\nreturn function(arr,i){\nif(Array.isArray(arr)){\nreturn arr;}else \nif(Symbol.iterator in Object(arr)){\nreturn sliceIterator(arr,i);}else \n{\nthrow new TypeError(\"Invalid attempt to destructure non-iterable instance\");}};})();\n\n\n\n\nbabelHelpers.toConsumableArray=function(arr){\nif(Array.isArray(arr)){\nfor(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}\n\nreturn arr2;}else \n{\nreturn Array.from(arr);}};})(\n\n\ntypeof global!=='undefined'?global:typeof self!=='undefined'?self:this);\n__d('native/common/LightningStorm.js',function(global, require, module, exports) {  var window=window||new Function('return this')();\nwindow.isNative=true;\nif(window.document){\nisNative=false;}\n\n\n\n\nwindow.includeCSS=function(o){\nif(isNative){(function(){\nif(({}).toString.call(o)=='[object String]'){\ndeal(eval(o));}else \n{\ndeal(o);}\n\nfunction deal(cssObject){\nfor(var k in cssObject){\nif(/\\s+/.test(k)){\nvar a=k.split(/\\s+/);\nvar k1=a.pop();\nSTYLESHEET['+'+k1]={\ncss:cssObject[k],\ninherit:a};}else \n\n{\nSTYLESHEET[k]=cssObject[k];}}}})();}else \n\n\n\n\n{\nif(({}).toString.call(o)=='[object String]'){\nvar link=document.createElement('link');\nlink.rel='stylesheet';\nlink.href='../'+o.match(/css\\/[^']+/)[0]+'.css';\ndocument.getElementsByTagName('head')[0].appendChild(link);}else \n{}}};\n\n\n\n\n\n\n\n\nif(!window.console){\nwindow.console={\nlog:function(){},\ndebug:function(){},\nerror:function(){},\nwarn:function(){}};}else \n\n{\nif(!console.log){\nconsole.log=function(){};}\n\nif(!console.debug){\nconsole.debug=function(){};}\n\nif(!console.debug){\nconsole.debug=function(){};}\n\nif(!console.debug){\nconsole.debug=function(){};}}\n\n\n\n\n\nwindow.STYLESHEET={};\nwindow.DOMTREE_BYID={};\nwindow.DOMTREE_BYCLASS={};\n\nwindow.TimerMixin=require('native/common/TimerMixin.js');\n\n\nif(isNative){\nwindow.React=require('react-native/Libraries/react-native/react-native.js');\nwindow.requireNativeComponent=React.requireNativeComponent;\n\nwindow.Element=require('native/common/rn/Element.js');\nwindow.Text=React.Text;\nwindow.View=React.View;\nwindow.StyleSheet=React.StyleSheet;\nwindow.Image=React.Image;\nwindow.TouchableOpacity=React.TouchableOpacity;\nwindow.TouchableWithoutFeedback=React.TouchableWithoutFeedback;\nwindow.TextInput=React.TextInput;\nwindow.Input=require('native/common/rn/Input.js');\nwindow.Div=require('native/common/rn/Div.js');\nwindow.Body=require('native/common/rn/Body.js');\nwindow.Span=require('native/common/rn/Span.js');\nwindow.Img=require('native/common/rn/Img.js');\nwindow.Button=require('native/common/rn/Button.js');\nwindow.Tab=require('native/common/rn/Tab.js');\nwindow.TabItem=require('native/common/rn/TabItem.js');\nwindow.A=require('native/common/rn/A.js');\nwindow.Nav=require('native/common/rn/Nav.js');\nwindow.Navigator=React.Navigator;\n\n\nwindow.ListView=React.ListView;\nwindow.SimpleListView=require('native/common/rn/SimpleListView.js');\nwindow.Dimensions=require('Dimensions');\nwindow.PixelRatio=require('PixelRatio');\n\nwindow.ScrollView=React.ScrollView;\n\nwindow.localStorage=require('AsyncStorage');\nwindow.StateStore=require('native/common/StateStore.js');}else \n{\n\nwindow.StateStore=require('native/common/StateStore.js');}\n\n\n\n\n\n\n\n\n\n\nDate.prototype.format=function(fmt)\n{\nvar o={\n\"M+\":this.getMonth()+1,\n\"d+\":this.getDate(),\n\"h+\":this.getHours(),\n\"m+\":this.getMinutes(),\n\"s+\":this.getSeconds(),\n\"q+\":Math.floor((this.getMonth()+3)/3),\n\"S\":this.getMilliseconds()};\n\nif(/(y+)/.test(fmt))\nfmt=fmt.replace(RegExp.$1,(this.getFullYear()+\"\").substr(4-RegExp.$1.length));\nfor(var k in o){\nif(new RegExp(\"(\"+k+\")\").test(fmt))\nfmt=fmt.replace(RegExp.$1,RegExp.$1.length==1?o[k]:(\"00\"+o[k]).substr((\"\"+o[k]).length));}\nreturn fmt;};\n\n\nwindow.TemplateFill=function(template,source){\nvar newT={};\nfor(var k in template){\nnewT[k]=source[k]||null;}\n\nreturn newT;};\n\n\n\n\n\nif(isNative){\n\nwindow.windowHeight=Dimensions.get('window').height;\nwindow.windowWidth=Dimensions.get('window').width;\n\nwindow.dpr=PixelRatio.get();\n\n\n\nwindow.STYLESHEET.baseFontSize=20*(windowWidth/320);\nwindow.STYLESHEET.baseFontSize=window.STYLESHEET.baseFontSize>54?54:window.STYLESHEET.baseFontSize;}else \n\n\n\n{\nvar docEl=document.documentElement,\nisIPhone=window.navigator.appVersion.match(/iphone/gi),\nfontSize,scale,\nplatform=navigator.platform;\n\n(function recalc(){\nvar clientWidth=docEl.clientWidth;\nvar dpr=window.devicePixelRatio;\nvar justMobile=!/win32/i.test(platform);\n\n\nif(!(isIPhone&&justMobile)){\ndpr=1;}\n\n\nscale=1/(dpr>1?2:dpr);\n\nfontSize=20*(clientWidth/320)/scale;\n\nfontSize=fontSize>54?54:fontSize;\n\nwindow.STYLESHEET.baseFontSize=fontSize;\ndocEl.style.fontSize=fontSize+'px';\ndocEl.setAttribute('data-dpr',dpr);\n\n\nvar viewport=document.querySelector('meta[name=\"viewport\"]');\nvar viewport_content='initial-scale='+scale+', maximum-scale='+scale+', minimum-scale='+scale+', user-scalable=no';\n\nviewport&&viewport.setAttribute('content',viewport_content);\n\nwindow.windowHeight=document.documentElement.clientHeight/scale;\nwindow.windowWidth=document.documentElement.clientWidth/scale;})();}\n\n\n\nwindow.upperCaseFirstLetter=function(str){\nreturn str.replace(/^\\w/,function(w){return w.toUpperCase();});};\n\nString.prototype.toUpperCaseFirstLetter=function(){\nreturn upperCaseFirstLetter(this);};\n\n\n\n\nif(isNative){\nwindow.Header=require('native/common/rn/Header.js');\nwindow.RightSliderMenu=require('native/common/rn/RightSliderMenu.js');\nwindow.Carousel=require('native/common/rn/Carousel.js');}\n\n\n\n\n\n\n\nwindow.$=function(selector){\nif(/^#(.+)/.test(selector)){\nreturn DOMTREE_BYID[selector.match(/^#(.+)/)[1]];}else \nif(/^\\.(.+)/.test(selector)){\nreturn DOMTREE_BYCLASS[selector.match(/^\\.(.+)/)[1]];}\n\nreturn null;};\n});\n__d('native/common/TimerMixin.js',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\nvar GLOBAL=typeof window==='undefined'?global:window;\n\nvar setter=function(_setter,_clearer,array){\nreturn function(callback,delta){\nvar id=_setter((function(){\n_clearer.call(this,id);\ncallback.apply(this,arguments);}).\nbind(this),delta);\n\nif(!this[array]){\nthis[array]=[id];}else \n{\nthis[array].push(id);}\n\nreturn id;};};\n\n\n\nvar clearer=function(_clearer,array){\nreturn function(id){\nif(this[array]){\nvar index=this[array].indexOf(id);\nif(index!==-1){\nthis[array].splice(index,1);}}\n\n\n_clearer(id);};};\n\n\n\nvar _timeouts='TimerMixin_timeouts';\nvar _clearTimeout=clearer(GLOBAL.clearTimeout,_timeouts);\nvar _setTimeout=setter(GLOBAL.setTimeout,_clearTimeout,_timeouts);\n\nvar _intervals='TimerMixin_intervals';\nvar _clearInterval=clearer(GLOBAL.clearInterval,_intervals);\nvar _setInterval=setter(GLOBAL.setInterval,function(){},_intervals);\n\nvar _immediates='TimerMixin_immediates';\nvar _clearImmediate=clearer(GLOBAL.clearImmediate,_immediates);\nvar _setImmediate=setter(GLOBAL.setImmediate,_clearImmediate,_immediates);\n\nvar _rafs='TimerMixin_rafs';\nvar _cancelAnimationFrame=clearer(GLOBAL.cancelAnimationFrame,_rafs);\nvar _requestAnimationFrame=setter(GLOBAL.requestAnimationFrame,_cancelAnimationFrame,_rafs);\n\nvar TimerMixin={\ncomponentWillUnmount:function(){\nthis[_timeouts]&&this[_timeouts].forEach(function(id){\nGLOBAL.clearTimeout(id);});\n\nthis[_timeouts]=null;\nthis[_intervals]&&this[_intervals].forEach(function(id){\nGLOBAL.clearInterval(id);});\n\nthis[_intervals]=null;\nthis[_immediates]&&this[_immediates].forEach(function(id){\nGLOBAL.clearImmediate(id);});\n\nthis[_immediates]=null;\nthis[_rafs]&&this[_rafs].forEach(function(id){\nGLOBAL.cancelAnimationFrame(id);});\n\nthis[_rafs]=null;},\n\n\nsetTimeout:_setTimeout,\nclearTimeout:_clearTimeout,\n\nsetInterval:_setInterval,\nclearInterval:_clearInterval,\n\nsetImmediate:_setImmediate,\nclearImmediate:_clearImmediate,\n\nrequestAnimationFrame:_requestAnimationFrame,\ncancelAnimationFrame:_cancelAnimationFrame};\n\n\nmodule.exports=TimerMixin;\n});\n__d('react-native/Libraries/react-native/react-native.js',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNative=babelHelpers.extends(Object.create(require('React')),{\n\nActivityIndicatorIOS:require('ActivityIndicatorIOS'),\nART:require('ReactNativeART'),\nDatePickerIOS:require('DatePickerIOS'),\nDrawerLayoutAndroid:require('DrawerLayoutAndroid'),\nImage:require('Image'),\nListView:require('ListView'),\nMapView:require('MapView'),\nModal:require('Modal'),\nNavigator:require('Navigator'),\nNavigatorIOS:require('NavigatorIOS'),\nPickerIOS:require('PickerIOS'),\nProgressBarAndroid:require('ProgressBarAndroid'),\nProgressViewIOS:require('ProgressViewIOS'),\nScrollView:require('ScrollView'),\nSegmentedControlIOS:require('SegmentedControlIOS'),\nSliderIOS:require('SliderIOS'),\nSnapshotViewIOS:require('SnapshotViewIOS'),\nSwitch:require('Switch'),\nPullToRefreshViewAndroid:require('PullToRefreshViewAndroid'),\nSwitchAndroid:require('SwitchAndroid'),\nSwitchIOS:require('SwitchIOS'),\nTabBarIOS:require('TabBarIOS'),\nText:require('Text'),\nTextInput:require('TextInput'),\nToastAndroid:require('ToastAndroid'),\nToolbarAndroid:require('ToolbarAndroid'),\nTouchable:require('Touchable'),\nTouchableHighlight:require('TouchableHighlight'),\nTouchableNativeFeedback:require('TouchableNativeFeedback'),\nTouchableOpacity:require('TouchableOpacity'),\nTouchableWithoutFeedback:require('TouchableWithoutFeedback'),\nView:require('View'),\nViewPagerAndroid:require('ViewPagerAndroid'),\nWebView:require('WebView'),\n\n\nActionSheetIOS:require('ActionSheetIOS'),\nAdSupportIOS:require('AdSupportIOS'),\nAlertIOS:require('AlertIOS'),\nAnimated:require('Animated'),\nAppRegistry:require('AppRegistry'),\nAppStateIOS:require('AppStateIOS'),\nAsyncStorage:require('AsyncStorage'),\nBackAndroid:require('BackAndroid'),\nCameraRoll:require('CameraRoll'),\nDimensions:require('Dimensions'),\nEasing:require('Easing'),\nImagePickerIOS:require('ImagePickerIOS'),\nIntentAndroid:require('IntentAndroid'),\nInteractionManager:require('InteractionManager'),\nLayoutAnimation:require('LayoutAnimation'),\nLinkingIOS:require('LinkingIOS'),\nNetInfo:require('NetInfo'),\nPanResponder:require('PanResponder'),\nPixelRatio:require('PixelRatio'),\nPushNotificationIOS:require('PushNotificationIOS'),\nSettings:require('Settings'),\nStatusBarIOS:require('StatusBarIOS'),\nStyleSheet:require('StyleSheet'),\nVibrationIOS:require('VibrationIOS'),\n\n\nDeviceEventEmitter:require('RCTDeviceEventEmitter'),\nNativeAppEventEmitter:require('RCTNativeAppEventEmitter'),\nNativeModules:require('NativeModules'),\nPlatform:require('Platform'),\nprocessColor:require('processColor'),\nrequireNativeComponent:require('requireNativeComponent'),\n\n\nEdgeInsetsPropType:require('EdgeInsetsPropType'),\nPointPropType:require('PointPropType'),\n\n\naddons:{\nLinkedStateMixin:require('LinkedStateMixin'),\nPerf:undefined,\nPureRenderMixin:require('ReactComponentWithPureRenderMixin'),\nTestModule:require('NativeModules').TestModule,\nTestUtils:undefined,\nbatchedUpdates:require('ReactUpdates').batchedUpdates,\ncloneWithProps:require('cloneWithProps'),\ncreateFragment:require('ReactFragment').create,\nupdate:require('update')}});\n\n\n\nif(__DEV__){\nReactNative.addons.Perf=require('ReactDefaultPerf');\nReactNative.addons.TestUtils=require('ReactTestUtils');}\n\n\nmodule.exports=ReactNative;\n});\n__d('React',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=require('ReactNative');\n});\n__d('ReactNative',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeDefaultInjection=require('ReactNativeDefaultInjection');\n\nvar ReactChildren=require('ReactChildren');\nvar ReactClass=require('ReactClass');\nvar ReactComponent=require('ReactComponent');\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactElement=require('ReactElement');\nvar ReactElementValidator=require('ReactElementValidator');\nvar ReactInstanceHandles=require('ReactInstanceHandles');\nvar ReactNativeMount=require('ReactNativeMount');\nvar ReactPropTypes=require('ReactPropTypes');\nvar ReactUpdates=require('ReactUpdates');\n\nvar deprecated=require('deprecated');\nvar findNodeHandle=require('findNodeHandle');\nvar invariant=require('invariant');\nvar onlyChild=require('onlyChild');\nvar warning=require('warning');\n\nReactNativeDefaultInjection.inject();\n\nvar createElement=ReactElement.createElement;\nvar createFactory=ReactElement.createFactory;\nvar cloneElement=ReactElement.cloneElement;\n\nif(__DEV__){\ncreateElement=ReactElementValidator.createElement;\ncreateFactory=ReactElementValidator.createFactory;\ncloneElement=ReactElementValidator.cloneElement;}\n\n\nvar resolveDefaultProps=function(element){\n\nvar defaultProps=element.type.defaultProps;\nvar props=element.props;\nfor(var propName in defaultProps){\nif(props[propName]===undefined){\nprops[propName]=defaultProps[propName];}}};\n\n\n\n\n\nvar augmentElement=function(element){\nif(__DEV__){\ninvariant(\nfalse,\n'This optimized path should never be used in DEV mode because '+\n'it does not provide validation. Check your JSX transform.');}\n\n\nelement._owner=ReactCurrentOwner.current;\nif(element.type.defaultProps){\nresolveDefaultProps(element);}\n\nreturn element;};\n\n\nvar render=function(\nelement,\nmountInto,\ncallback)\n{\nreturn ReactNativeMount.renderComponent(element,mountInto,callback);};\n\n\nvar ReactNative={\nhasReactNativeInitialized:false,\nChildren:{\nmap:ReactChildren.map,\nforEach:ReactChildren.forEach,\ncount:ReactChildren.count,\nonly:onlyChild},\n\nComponent:ReactComponent,\nPropTypes:ReactPropTypes,\ncreateClass:ReactClass.createClass,\ncreateElement:createElement,\ncreateFactory:createFactory,\ncloneElement:cloneElement,\n_augmentElement:augmentElement,\nfindNodeHandle:findNodeHandle,\nrender:render,\nunmountComponentAtNode:ReactNativeMount.unmountComponentAtNode,\n\n\nunstable_batchedUpdates:ReactUpdates.batchedUpdates,\n\n\n\n__spread:Object.assign,\n\nunmountComponentAtNodeAndRemoveContainer:ReactNativeMount.unmountComponentAtNodeAndRemoveContainer,\nisValidClass:ReactElement.isValidFactory,\nisValidElement:ReactElement.isValidElement,\n\n\nrenderComponent:function(\nelement,\nmountInto,\ncallback)\n{\nwarning('Use React.render instead of React.renderComponent');\nreturn ReactNative.render(element,mountInto,callback);}};\n\n\n\n\n\n\nif(\ntypeof __REACT_DEVTOOLS_GLOBAL_HOOK__!=='undefined'&&\ntypeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject==='function'){\n__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\nCurrentOwner:ReactCurrentOwner,\nInstanceHandles:ReactInstanceHandles,\nMount:ReactNativeMount,\nReconciler:require('ReactReconciler'),\nTextComponent:require('ReactNativeTextComponent')});}\n\n\n\nmodule.exports=ReactNative;\n});\n__d('ReactNativeDefaultInjection',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nrequire('InitializeJavaScriptAppEngine');\n\nvar EventPluginHub=require('EventPluginHub');\nvar EventPluginUtils=require('EventPluginUtils');\nvar IOSDefaultEventPluginOrder=require('IOSDefaultEventPluginOrder');\nvar IOSNativeBridgeEventPlugin=require('IOSNativeBridgeEventPlugin');\nvar NodeHandle=require('NodeHandle');\nvar ReactComponentEnvironment=require('ReactComponentEnvironment');\nvar ReactDefaultBatchingStrategy=require('ReactDefaultBatchingStrategy');\nvar ReactEmptyComponent=require('ReactEmptyComponent');\nvar ReactInstanceHandles=require('ReactInstanceHandles');\nvar ReactNativeComponentEnvironment=require('ReactNativeComponentEnvironment');\nvar ReactNativeGlobalInteractionHandler=require('ReactNativeGlobalInteractionHandler');\nvar ReactNativeGlobalResponderHandler=require('ReactNativeGlobalResponderHandler');\nvar ReactNativeMount=require('ReactNativeMount');\nvar ReactNativeTextComponent=require('ReactNativeTextComponent');\nvar ReactNativeComponent=require('ReactNativeComponent');\nvar ReactUpdates=require('ReactUpdates');\nvar ResponderEventPlugin=require('ResponderEventPlugin');\nvar UniversalWorkerNodeHandle=require('UniversalWorkerNodeHandle');\n\nvar createReactNativeComponentClass=require('createReactNativeComponentClass');\nvar invariant=require('invariant');\n\n\nrequire('RCTEventEmitter');\nrequire('RCTLog');\nrequire('JSTimersExecution');\n\nfunction inject(){\n\n\n\nEventPluginHub.injection.injectEventPluginOrder(IOSDefaultEventPluginOrder);\nEventPluginHub.injection.injectInstanceHandle(ReactInstanceHandles);\n\nResponderEventPlugin.injection.injectGlobalResponderHandler(\nReactNativeGlobalResponderHandler);\n\n\nResponderEventPlugin.injection.injectGlobalInteractionHandler(\nReactNativeGlobalInteractionHandler);\n\n\n\n\n\n\nEventPluginHub.injection.injectEventPluginsByName({\n'ResponderEventPlugin':ResponderEventPlugin,\n'IOSNativeBridgeEventPlugin':IOSNativeBridgeEventPlugin});\n\n\nReactUpdates.injection.injectReconcileTransaction(\nReactNativeComponentEnvironment.ReactReconcileTransaction);\n\n\nReactUpdates.injection.injectBatchingStrategy(\nReactDefaultBatchingStrategy);\n\n\nReactComponentEnvironment.injection.injectEnvironment(\nReactNativeComponentEnvironment);\n\n\n\nvar RCTView=createReactNativeComponentClass({\nvalidAttributes:{},\nuiViewClassName:'RCTView'});\n\nReactEmptyComponent.injection.injectEmptyComponent(RCTView);\n\nEventPluginUtils.injection.injectMount(ReactNativeMount);\n\nReactNativeComponent.injection.injectTextComponentClass(\nReactNativeTextComponent);\n\nReactNativeComponent.injection.injectGenericComponentClass(function(tag){\n\nvar info='';\nif(typeof tag==='string'&&/^[a-z]/.test(tag)){\ninfo+=' Each component name should start with an uppercase letter.';}\n\ninvariant(false,'Expected a component class, got %s.%s',tag,info);});\n\n\nNodeHandle.injection.injectImplementation(UniversalWorkerNodeHandle);}\n\n\nmodule.exports={\ninject:inject};\n});\n__d('InitializeJavaScriptAppEngine',function(global, require, module, exports) {  require(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'regenerator/runtime.js');\n\nif(typeof GLOBAL==='undefined'){\nGLOBAL=this;}\n\n\nif(typeof window==='undefined'){\nwindow=GLOBAL;}\n\n\nfunction setUpConsole(){\n\nvar ExceptionsManager=require('ExceptionsManager');\nExceptionsManager.installConsoleErrorReporter();}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction polyfillGlobal(name,newValue){var scope=arguments.length<=2||arguments[2]===undefined?GLOBAL:arguments[2];\nvar descriptor=Object.getOwnPropertyDescriptor(scope,name)||{\n\n\n\n\nwritable:true};\n\n\nif(scope[name]!==undefined){\nvar backupName='original'+name[0].toUpperCase()+name.substr(1);\nObject.defineProperty(scope,backupName,babelHelpers.extends({},descriptor,{value:scope[name]}));}\n\n\nObject.defineProperty(scope,name,babelHelpers.extends({},descriptor,{value:newValue}));}\n\n\nfunction setUpErrorHandler(){\nif(global.__fbDisableExceptionsManager){\nreturn;}\n\n\nfunction handleError(e,isFatal){\ntry{\nrequire('ExceptionsManager').handleException(e,isFatal);}\ncatch(ee) {\nconsole.log('Failed to print error: ',ee.message);}}\n\n\n\nvar ErrorUtils=require('ErrorUtils');\nErrorUtils.setGlobalHandler(handleError);}\n\n\nfunction setUpFlowChecker(){\nif(__DEV__){\nvar checkFlowAtRuntime=require('checkFlowAtRuntime');\ncheckFlowAtRuntime();}}\n\n\n\n\n\n\n\n\n\n\nfunction setUpTimers(){\nvar JSTimers=require('JSTimers');\nGLOBAL.setTimeout=JSTimers.setTimeout;\nGLOBAL.setInterval=JSTimers.setInterval;\nGLOBAL.setImmediate=JSTimers.setImmediate;\nGLOBAL.clearTimeout=JSTimers.clearTimeout;\nGLOBAL.clearInterval=JSTimers.clearInterval;\nGLOBAL.clearImmediate=JSTimers.clearImmediate;\nGLOBAL.cancelAnimationFrame=JSTimers.clearInterval;\nGLOBAL.requestAnimationFrame=function(cb){\n\nreturn JSTimers.requestAnimationFrame(cb);};}\n\n\n\nfunction setUpAlert(){\nvar RCTAlertManager=require('NativeModules').AlertManager;\nif(!GLOBAL.alert){\nGLOBAL.alert=function(text){\nvar alertOpts={\ntitle:'Alert',\nmessage:''+text,\nbuttons:[{'cancel':'OK'}]};\n\nRCTAlertManager.alertWithArgs(alertOpts,function(){});};}}\n\n\n\n\nfunction setUpPromise(){\n\n\nGLOBAL.Promise=require('Promise');}\n\n\nfunction setUpXHR(){\n\n\npolyfillGlobal('XMLHttpRequest',require('XMLHttpRequest'));\npolyfillGlobal('FormData',require('FormData'));\n\nvar fetchPolyfill=require('fetch');\npolyfillGlobal('fetch',fetchPolyfill.fetch);\npolyfillGlobal('Headers',fetchPolyfill.Headers);\npolyfillGlobal('Request',fetchPolyfill.Request);\npolyfillGlobal('Response',fetchPolyfill.Response);}\n\n\nfunction setUpGeolocation(){\nGLOBAL.navigator=GLOBAL.navigator||{};\npolyfillGlobal('geolocation',require('Geolocation'),GLOBAL.navigator);}\n\n\nfunction setUpWebSockets(){\npolyfillGlobal('WebSocket',require('WebSocket'));}\n\n\nfunction setUpProfile(){\nif(__DEV__){\nvar BridgeProfiling=require('BridgeProfiling');\nBridgeProfiling.swizzleReactPerf();\nBridgeProfiling.attachToRelayProfiler();}}\n\n\n\nfunction setUpProcessEnv(){\nGLOBAL.process=GLOBAL.process||{};\nGLOBAL.process.env=GLOBAL.process.env||{};\nif(!GLOBAL.process.env.NODE_ENV){\nGLOBAL.process.env.NODE_ENV=__DEV__?'development':'production';}}\n\n\n\nfunction setUpNumber(){\nNumber.EPSILON=Number.EPSILON||Math.pow(2,-52);\nNumber.MAX_SAFE_INTEGER=Number.MAX_SAFE_INTEGER||Math.pow(2,53)-1;\nNumber.MIN_SAFE_INTEGER=Number.MIN_SAFE_INTEGER||-(Math.pow(2,53)-1);}\n\n\nfunction setUpDevTools(){\n\nif(__DEV__){\nif(!window.document&&require('Platform').OS==='ios'){\nvar setupDevtools=require('setupDevtools');\nsetupDevtools();}}}\n\n\n\n\nsetUpProcessEnv();\nsetUpConsole();\nsetUpTimers();\nsetUpAlert();\nsetUpPromise();\nsetUpErrorHandler();\nsetUpXHR();\nsetUpGeolocation();\nsetUpWebSockets();\nsetUpProfile();\nsetUpFlowChecker();\nsetUpNumber();\nsetUpDevTools();\n\n\n\nif(__DEV__){\nrequire('RCTDebugComponentOwnership');}\n\nrequire('RCTDeviceEventEmitter');\nrequire('PerformanceLogger');\n});\n__d('regenerator/runtime.js',function(global, require, module, exports) {  !\n\n\n\n\n\n\n\n\n\n(function(global){\n\"use strict\";\n\nvar hasOwn=Object.prototype.hasOwnProperty;\nvar undefined;\nvar $Symbol=typeof Symbol===\"function\"?Symbol:{};\nvar iteratorSymbol=$Symbol.iterator||\"@@iterator\";\nvar toStringTagSymbol=$Symbol.toStringTag||\"@@toStringTag\";\n\nvar inModule=typeof module===\"object\";\nvar runtime=global.regeneratorRuntime;\nif(runtime){\nif(inModule){\n\n\nmodule.exports=runtime;}\n\n\n\nreturn;}\n\n\n\n\nruntime=global.regeneratorRuntime=inModule?module.exports:{};\n\nfunction wrap(innerFn,outerFn,self,tryLocsList){\n\nvar generator=Object.create((outerFn||Generator).prototype);\nvar context=new Context(tryLocsList||[]);\n\n\n\ngenerator._invoke=makeInvokeMethod(innerFn,self,context);\n\nreturn generator;}\n\nruntime.wrap=wrap;\n\n\n\n\n\n\n\n\n\n\n\nfunction tryCatch(fn,obj,arg){\ntry{\nreturn {type:\"normal\",arg:fn.call(obj,arg)};}\ncatch(err) {\nreturn {type:\"throw\",arg:err};}}\n\n\n\nvar GenStateSuspendedStart=\"suspendedStart\";\nvar GenStateSuspendedYield=\"suspendedYield\";\nvar GenStateExecuting=\"executing\";\nvar GenStateCompleted=\"completed\";\n\n\n\nvar ContinueSentinel={};\n\n\n\n\n\nfunction Generator(){}\nfunction GeneratorFunction(){}\nfunction GeneratorFunctionPrototype(){}\n\nvar Gp=GeneratorFunctionPrototype.prototype=Generator.prototype;\nGeneratorFunction.prototype=Gp.constructor=GeneratorFunctionPrototype;\nGeneratorFunctionPrototype.constructor=GeneratorFunction;\nGeneratorFunctionPrototype[toStringTagSymbol]=GeneratorFunction.displayName=\"GeneratorFunction\";\n\n\n\nfunction defineIteratorMethods(prototype){\n[\"next\",\"throw\",\"return\"].forEach(function(method){\nprototype[method]=function(arg){\nreturn this._invoke(method,arg);};});}\n\n\n\n\nruntime.isGeneratorFunction=function(genFun){\nvar ctor=typeof genFun===\"function\"&&genFun.constructor;\nreturn ctor?\nctor===GeneratorFunction||\n\n\n(ctor.displayName||ctor.name)===\"GeneratorFunction\":\nfalse;};\n\n\nruntime.mark=function(genFun){\nif(Object.setPrototypeOf){\nObject.setPrototypeOf(genFun,GeneratorFunctionPrototype);}else \n{\ngenFun.__proto__=GeneratorFunctionPrototype;\nif(!(toStringTagSymbol in genFun)){\ngenFun[toStringTagSymbol]=\"GeneratorFunction\";}}\n\n\ngenFun.prototype=Object.create(Gp);\nreturn genFun;};\n\n\n\n\n\n\n\nruntime.awrap=function(arg){\nreturn new AwaitArgument(arg);};\n\n\nfunction AwaitArgument(arg){\nthis.arg=arg;}\n\n\nfunction AsyncIterator(generator){\nfunction invoke(method,arg,resolve,reject){\nvar record=tryCatch(generator[method],generator,arg);\nif(record.type===\"throw\"){\nreject(record.arg);}else \n{\nvar result=record.arg;\nvar value=result.value;\nif(value instanceof AwaitArgument){\nreturn Promise.resolve(value.arg).then(function(value){\ninvoke(\"next\",value,resolve,reject);},\nfunction(err){\ninvoke(\"throw\",err,resolve,reject);});}\n\n\n\nreturn Promise.resolve(value).then(function(unwrapped){\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nresult.value=unwrapped;\nresolve(result);},\nreject);}}\n\n\n\nif(typeof process===\"object\"&&process.domain){\ninvoke=process.domain.bind(invoke);}\n\n\nvar previousPromise;\n\nfunction enqueue(method,arg){\nfunction callInvokeWithMethodAndArg(){\nreturn new Promise(function(resolve,reject){\ninvoke(method,arg,resolve,reject);});}\n\n\n\nreturn previousPromise=\n\n\n\n\n\n\n\n\n\n\n\n\npreviousPromise?previousPromise.then(\ncallInvokeWithMethodAndArg,\n\n\ncallInvokeWithMethodAndArg):\ncallInvokeWithMethodAndArg();}\n\n\n\n\nthis._invoke=enqueue;}\n\n\ndefineIteratorMethods(AsyncIterator.prototype);\n\n\n\n\nruntime.async=function(innerFn,outerFn,self,tryLocsList){\nvar iter=new AsyncIterator(\nwrap(innerFn,outerFn,self,tryLocsList));\n\n\nreturn runtime.isGeneratorFunction(outerFn)?\niter:\niter.next().then(function(result){\nreturn result.done?result.value:iter.next();});};\n\n\n\nfunction makeInvokeMethod(innerFn,self,context){\nvar state=GenStateSuspendedStart;\n\nreturn function invoke(method,arg){\nif(state===GenStateExecuting){\nthrow new Error(\"Generator is already running\");}\n\n\nif(state===GenStateCompleted){\nif(method===\"throw\"){\nthrow arg;}\n\n\n\n\nreturn doneResult();}\n\n\nwhile(true){\nvar delegate=context.delegate;\nif(delegate){\nif(method===\"return\"||\nmethod===\"throw\"&&delegate.iterator[method]===undefined){\n\n\ncontext.delegate=null;\n\n\n\nvar returnMethod=delegate.iterator[\"return\"];\nif(returnMethod){\nvar record=tryCatch(returnMethod,delegate.iterator,arg);\nif(record.type===\"throw\"){\n\n\nmethod=\"throw\";\narg=record.arg;\ncontinue;}}\n\n\n\nif(method===\"return\"){\n\n\ncontinue;}}\n\n\n\nvar record=tryCatch(\ndelegate.iterator[method],\ndelegate.iterator,\narg);\n\n\nif(record.type===\"throw\"){\ncontext.delegate=null;\n\n\n\nmethod=\"throw\";\narg=record.arg;\ncontinue;}\n\n\n\n\n\nmethod=\"next\";\narg=undefined;\n\nvar info=record.arg;\nif(info.done){\ncontext[delegate.resultName]=info.value;\ncontext.next=delegate.nextLoc;}else \n{\nstate=GenStateSuspendedYield;\nreturn info;}\n\n\ncontext.delegate=null;}\n\n\nif(method===\"next\"){\nif(state===GenStateSuspendedYield){\ncontext.sent=arg;}else \n{\ncontext.sent=undefined;}}else \n\n\nif(method===\"throw\"){\nif(state===GenStateSuspendedStart){\nstate=GenStateCompleted;\nthrow arg;}\n\n\nif(context.dispatchException(arg)){\n\n\nmethod=\"next\";\narg=undefined;}}else \n\n\nif(method===\"return\"){\ncontext.abrupt(\"return\",arg);}\n\n\nstate=GenStateExecuting;\n\nvar record=tryCatch(innerFn,self,context);\nif(record.type===\"normal\"){\n\n\nstate=context.done?\nGenStateCompleted:\nGenStateSuspendedYield;\n\nvar info={\nvalue:record.arg,\ndone:context.done};\n\n\nif(record.arg===ContinueSentinel){\nif(context.delegate&&method===\"next\"){\n\n\narg=undefined;}}else \n\n{\nreturn info;}}else \n\n\nif(record.type===\"throw\"){\nstate=GenStateCompleted;\n\n\nmethod=\"throw\";\narg=record.arg;}}};}\n\n\n\n\n\n\n\ndefineIteratorMethods(Gp);\n\nGp[iteratorSymbol]=function(){\nreturn this;};\n\n\nGp[toStringTagSymbol]=\"Generator\";\n\nGp.toString=function(){\nreturn \"[object Generator]\";};\n\n\nfunction pushTryEntry(locs){\nvar entry={tryLoc:locs[0]};\n\nif(1 in locs){\nentry.catchLoc=locs[1];}\n\n\nif(2 in locs){\nentry.finallyLoc=locs[2];\nentry.afterLoc=locs[3];}\n\n\nthis.tryEntries.push(entry);}\n\n\nfunction resetTryEntry(entry){\nvar record=entry.completion||{};\nrecord.type=\"normal\";\ndelete record.arg;\nentry.completion=record;}\n\n\nfunction Context(tryLocsList){\n\n\n\nthis.tryEntries=[{tryLoc:\"root\"}];\ntryLocsList.forEach(pushTryEntry,this);\nthis.reset(true);}\n\n\nruntime.keys=function(object){\nvar keys=[];\nfor(var key in object){\nkeys.push(key);}\n\nkeys.reverse();\n\n\n\nreturn function next(){\nwhile(keys.length){\nvar key=keys.pop();\nif(key in object){\nnext.value=key;\nnext.done=false;\nreturn next;}}\n\n\n\n\n\n\nnext.done=true;\nreturn next;};};\n\n\n\nfunction values(iterable){\nif(iterable){\nvar iteratorMethod=iterable[iteratorSymbol];\nif(iteratorMethod){\nreturn iteratorMethod.call(iterable);}\n\n\nif(typeof iterable.next===\"function\"){\nreturn iterable;}\n\n\nif(!isNaN(iterable.length)){\nvar i=-1,next=function next(){\nwhile(++i<iterable.length){\nif(hasOwn.call(iterable,i)){\nnext.value=iterable[i];\nnext.done=false;\nreturn next;}}\n\n\n\nnext.value=undefined;\nnext.done=true;\n\nreturn next;};\n\n\nreturn next.next=next;}}\n\n\n\n\nreturn {next:doneResult};}\n\nruntime.values=values;\n\nfunction doneResult(){\nreturn {value:undefined,done:true};}\n\n\nContext.prototype={\nconstructor:Context,\n\nreset:function(skipTempReset){\nthis.prev=0;\nthis.next=0;\nthis.sent=undefined;\nthis.done=false;\nthis.delegate=null;\n\nthis.tryEntries.forEach(resetTryEntry);\n\nif(!skipTempReset){\nfor(var name in this){\n\nif(name.charAt(0)===\"t\"&&\nhasOwn.call(this,name)&&\n!isNaN(+name.slice(1))){\nthis[name]=undefined;}}}},\n\n\n\n\n\nstop:function(){\nthis.done=true;\n\nvar rootEntry=this.tryEntries[0];\nvar rootRecord=rootEntry.completion;\nif(rootRecord.type===\"throw\"){\nthrow rootRecord.arg;}\n\n\nreturn this.rval;},\n\n\ndispatchException:function(exception){\nif(this.done){\nthrow exception;}\n\n\nvar context=this;\nfunction handle(loc,caught){\nrecord.type=\"throw\";\nrecord.arg=exception;\ncontext.next=loc;\nreturn !!caught;}\n\n\nfor(var i=this.tryEntries.length-1;i>=0;--i){\nvar entry=this.tryEntries[i];\nvar record=entry.completion;\n\nif(entry.tryLoc===\"root\"){\n\n\n\nreturn handle(\"end\");}\n\n\nif(entry.tryLoc<=this.prev){\nvar hasCatch=hasOwn.call(entry,\"catchLoc\");\nvar hasFinally=hasOwn.call(entry,\"finallyLoc\");\n\nif(hasCatch&&hasFinally){\nif(this.prev<entry.catchLoc){\nreturn handle(entry.catchLoc,true);}else \nif(this.prev<entry.finallyLoc){\nreturn handle(entry.finallyLoc);}}else \n\n\nif(hasCatch){\nif(this.prev<entry.catchLoc){\nreturn handle(entry.catchLoc,true);}}else \n\n\nif(hasFinally){\nif(this.prev<entry.finallyLoc){\nreturn handle(entry.finallyLoc);}}else \n\n\n{\nthrow new Error(\"try statement without catch or finally\");}}}},\n\n\n\n\n\nabrupt:function(type,arg){\nfor(var i=this.tryEntries.length-1;i>=0;--i){\nvar entry=this.tryEntries[i];\nif(entry.tryLoc<=this.prev&&\nhasOwn.call(entry,\"finallyLoc\")&&\nthis.prev<entry.finallyLoc){\nvar finallyEntry=entry;\nbreak;}}\n\n\n\nif(finallyEntry&&(\ntype===\"break\"||\ntype===\"continue\")&&\nfinallyEntry.tryLoc<=arg&&\narg<=finallyEntry.finallyLoc){\n\n\nfinallyEntry=null;}\n\n\nvar record=finallyEntry?finallyEntry.completion:{};\nrecord.type=type;\nrecord.arg=arg;\n\nif(finallyEntry){\nthis.next=finallyEntry.finallyLoc;}else \n{\nthis.complete(record);}\n\n\nreturn ContinueSentinel;},\n\n\ncomplete:function(record,afterLoc){\nif(record.type===\"throw\"){\nthrow record.arg;}\n\n\nif(record.type===\"break\"||\nrecord.type===\"continue\"){\nthis.next=record.arg;}else \nif(record.type===\"return\"){\nthis.rval=record.arg;\nthis.next=\"end\";}else \nif(record.type===\"normal\"&&afterLoc){\nthis.next=afterLoc;}},\n\n\n\nfinish:function(finallyLoc){\nfor(var i=this.tryEntries.length-1;i>=0;--i){\nvar entry=this.tryEntries[i];\nif(entry.finallyLoc===finallyLoc){\nthis.complete(entry.completion,entry.afterLoc);\nresetTryEntry(entry);\nreturn ContinueSentinel;}}},\n\n\n\n\n\"catch\":function(tryLoc){\nfor(var i=this.tryEntries.length-1;i>=0;--i){\nvar entry=this.tryEntries[i];\nif(entry.tryLoc===tryLoc){\nvar record=entry.completion;\nif(record.type===\"throw\"){\nvar thrown=record.arg;\nresetTryEntry(entry);}\n\nreturn thrown;}}\n\n\n\n\n\nthrow new Error(\"illegal catch attempt\");},\n\n\ndelegateYield:function(iterable,resultName,nextLoc){\nthis.delegate={\niterator:values(iterable),\nresultName:resultName,\nnextLoc:nextLoc};\n\n\nreturn ContinueSentinel;}};})(\n\n\n\n\n\n\ntypeof global===\"object\"?global:\ntypeof window===\"object\"?window:\ntypeof self===\"object\"?self:this);\n});\n__d('ExceptionsManager',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTExceptionsManager=require('NativeModules').ExceptionsManager;\n\nvar loadSourceMap=require('loadSourceMap');\nvar parseErrorStack=require('parseErrorStack');\nvar stringifySafe=require('stringifySafe');\n\nvar sourceMapPromise;\n\nvar exceptionID=0;\n\n\n\n\nfunction reportException(e,isFatal){\nvar currentExceptionID=++exceptionID;\nif(RCTExceptionsManager){\nvar stack=parseErrorStack(e);\nif(isFatal){\nRCTExceptionsManager.reportFatalException(e.message,stack,currentExceptionID);}else \n{\nRCTExceptionsManager.reportSoftException(e.message,stack,currentExceptionID);}\n\nif(__DEV__){\n(sourceMapPromise=sourceMapPromise||loadSourceMap()).\nthen(function(map){\nvar prettyStack=parseErrorStack(e,map);\nRCTExceptionsManager.updateExceptionMessage(e.message,prettyStack,currentExceptionID);}).\n\ncatch(function(error){\n\n\nconsole.warn('Unable to load source map: '+error.message);});}}}\n\n\n\n\n\n\n\n\nfunction handleException(e,isFatal){\n\n\n\n\nif(!e.message){\ne=new Error(e);}\n\n\n(console._errorOriginal||console.error)(e.message);\nreportException(e,isFatal);}\n\n\n\n\n\n\nfunction installConsoleErrorReporter(){\n\nif(console._errorOriginal){\nreturn;}\n\nconsole._errorOriginal=console.error.bind(console);\nconsole.error=function reactConsoleError(){\nconsole._errorOriginal.apply(null,arguments);\nif(!console.reportErrorsAsExceptions){\nreturn;}\n\n\nif(arguments[0]&&arguments[0].stack){\nreportException(arguments[0],false);}else \n{\nvar str=Array.prototype.map.call(arguments,stringifySafe).join(', ');\nif(str.slice(0,10)==='\"Warning: '){\n\n\n\nreturn;}\n\nvar error=new Error('console.error: '+str);\nerror.framesToPop=1;\nreportException(error,false);}};\n\n\nif(console.reportErrorsAsExceptions===undefined){\nconsole.reportErrorsAsExceptions=true;}}\n\n\n\nmodule.exports={handleException:handleException,installConsoleErrorReporter:installConsoleErrorReporter};\n});\n__d('NativeModules',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeModules=require('BatchedBridge').RemoteModules;\n\nvar nativeModulePrefixNormalizer=require('nativeModulePrefixNormalizer');\n\nnativeModulePrefixNormalizer(NativeModules);\n\nmodule.exports=NativeModules;\n});\n__d('BatchedBridge',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar MessageQueue=require('MessageQueue');\n\nvar BatchedBridge=new MessageQueue(\n__fbBatchedBridgeConfig.remoteModuleConfig,\n__fbBatchedBridgeConfig.localModulesConfig);\n\n\nmodule.exports=BatchedBridge;\n});\n__d('MessageQueue',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar BridgeProfiling=require('BridgeProfiling');\nvar ErrorUtils=require('ErrorUtils');\nvar JSTimersExecution=require('JSTimersExecution');\nvar ReactUpdates=require('ReactUpdates');\n\nvar invariant=require('invariant');\nvar keyMirror=require('keyMirror');\nvar stringifySafe=require('stringifySafe');\n\nvar MODULE_IDS=0;\nvar METHOD_IDS=1;\nvar PARAMS=2;\nvar MIN_TIME_BETWEEN_FLUSHES_MS=5;\n\nvar SPY_MODE=false;\n\nvar MethodTypes=keyMirror({\nremote:null,\nremoteAsync:null});\n\n\nvar guard=function(fn){\ntry{\nfn();}\ncatch(error) {\nErrorUtils.reportFatalError(error);}};var \n\n\n\nMessageQueue=(function(){\n\nfunction MessageQueue(remoteModules,localModules,customRequire){var _this=this;babelHelpers.classCallCheck(this,MessageQueue);\nthis.RemoteModules={};\n\nthis._require=customRequire||require;\nthis._queue=[[],[],[]];\nthis._moduleTable={};\nthis._methodTable={};\nthis._callbacks=[];\nthis._callbackID=0;\nthis._lastFlush=0;\n\n[\n'invokeCallbackAndReturnFlushedQueue',\n'callFunctionReturnFlushedQueue',\n'flushedQueue'].\nforEach(function(fn){return _this[fn]=_this[fn].bind(_this);});\n\nvar modulesConfig=this._genModulesConfig(remoteModules);\nthis._genModules(modulesConfig);\nlocalModules&&this._genLookupTables(\nthis._genModulesConfig(localModules),this._moduleTable,this._methodTable);\n\n\nthis._copyNativeComponentConstants(this.RemoteModules);\n\nthis._debugInfo={};\nthis._remoteModuleTable={};\nthis._remoteMethodTable={};\nthis._genLookupTables(\nmodulesConfig,this._remoteModuleTable,this._remoteMethodTable);}babelHelpers.createClass(MessageQueue,[{key:'callFunctionReturnFlushedQueue',value:function callFunctionReturnFlushedQueue(\n\n\n\n\n\n\nmodule,method,args){var _this2=this;\nguard(function(){\n_this2.__callFunction(module,method,args);\n_this2.__callImmediates();});\n\n\nreturn this.flushedQueue();}},{key:'invokeCallbackAndReturnFlushedQueue',value:function invokeCallbackAndReturnFlushedQueue(\n\n\ncbID,args){var _this3=this;\nguard(function(){\n_this3.__invokeCallback(cbID,args);\n_this3.__callImmediates();});\n\n\nreturn this.flushedQueue();}},{key:'flushedQueue',value:function flushedQueue()\n\n\n{\nthis.__callImmediates();\n\nvar queue=this._queue;\nthis._queue=[[],[],[]];\nreturn queue[0].length?queue:null;}},{key:'__callImmediates',value:function __callImmediates()\n\n\n\n\n\n\n{\nBridgeProfiling.profile('JSTimersExecution.callImmediates()');\nguard(function(){return JSTimersExecution.callImmediates();});\nBridgeProfiling.profileEnd();}},{key:'__nativeCall',value:function __nativeCall(\n\n\nmodule,method,params,onFail,onSucc){\nif(onFail||onSucc){\n\nthis._callbackID>1<<5&&(\nthis._debugInfo[this._callbackID>>5]=null);\n\nthis._debugInfo[this._callbackID>>1]=[module,method];\nonFail&&params.push(this._callbackID);\nthis._callbacks[this._callbackID++]=onFail;\nonSucc&&params.push(this._callbackID);\nthis._callbacks[this._callbackID++]=onSucc;}\n\nthis._queue[MODULE_IDS].push(module);\nthis._queue[METHOD_IDS].push(method);\nthis._queue[PARAMS].push(params);\n\nvar now=new Date().getTime();\nif(global.nativeFlushQueueImmediate&&\nnow-this._lastFlush>=MIN_TIME_BETWEEN_FLUSHES_MS){\nglobal.nativeFlushQueueImmediate(this._queue);\nthis._queue=[[],[],[]];\nthis._lastFlush=now;}\n\nif(__DEV__&&SPY_MODE&&isFinite(module)){\nconsole.log('JS->N : '+this._remoteModuleTable[module]+'.'+\nthis._remoteMethodTable[module][method]+'('+JSON.stringify(params)+')');}}},{key:'__callFunction',value:function __callFunction(\n\n\n\nmodule,method,args){\nBridgeProfiling.profile(function(){return module+'.'+method+'('+stringifySafe(args)+')';});\nthis._lastFlush=new Date().getTime();\nif(isFinite(module)){\nmethod=this._methodTable[module][method];\nmodule=this._moduleTable[module];}\n\nif(__DEV__&&SPY_MODE){\nconsole.log('N->JS : '+module+'.'+method+'('+JSON.stringify(args)+')');}\n\nmodule=this._require(module);\nmodule[method].apply(module,args);\nBridgeProfiling.profileEnd();}},{key:'__invokeCallback',value:function __invokeCallback(\n\n\ncbID,args){\nBridgeProfiling.profile(\nfunction(){return 'MessageQueue.invokeCallback('+cbID+', '+stringifySafe(args)+')';});\nthis._lastFlush=new Date().getTime();\nvar callback=this._callbacks[cbID];\nif(!callback||__DEV__){\nvar debug=this._debugInfo[cbID>>1];\nvar _module=debug&&this._remoteModuleTable[debug[0]];\nvar method=debug&&this._remoteMethodTable[debug[0]][debug[1]];\ninvariant(\ncallback,'Callback with id '+\ncbID+': '+_module+'.'+method+'() not found');\n\nif(callback&&SPY_MODE){\nconsole.log('N->JS : <callback for '+_module+'.'+method+'>('+JSON.stringify(args)+')');}}\n\n\nthis._callbacks[cbID&~1]=null;\nthis._callbacks[cbID|1]=null;\ncallback.apply(null,args);\nBridgeProfiling.profileEnd();}},{key:'_copyNativeComponentConstants',value:function _copyNativeComponentConstants(\n\n\n\n\n\n\n\n\n\n\n\nremoteModules){\nvar UIManager=remoteModules.RCTUIManager;\nUIManager&&Object.keys(UIManager).forEach(function(viewName){\nvar viewConfig=UIManager[viewName];\nif(viewConfig.Manager){(function(){\nvar viewManager=remoteModules[viewConfig.Manager];\nviewManager&&Object.keys(viewManager).forEach(function(key){\nvar value=viewManager[key];\nif(typeof value!=='function'){\nif(!viewConfig.Constants){\nviewConfig.Constants={};}\n\nviewConfig.Constants[key]=value;}});})();}});}},{key:'_genModulesConfig',value:function _genModulesConfig(\n\n\n\n\n\n\n\n\n\n\n\nmodules){\nif(Array.isArray(modules)){\nreturn modules;}else \n{\nvar moduleArray=[];\nvar moduleNames=Object.keys(modules);\nfor(var i=0,l=moduleNames.length;i<l;i++){\nvar moduleName=moduleNames[i];\nvar moduleConfig=modules[moduleName];\nvar _module2=[moduleName];\nif(moduleConfig.constants){\n_module2.push(moduleConfig.constants);}\n\nvar methodsConfig=moduleConfig.methods;\nif(methodsConfig){\nvar methods=[];\nvar asyncMethods=[];\nvar methodNames=Object.keys(methodsConfig);\nfor(var j=0,ll=methodNames.length;j<ll;j++){\nvar methodName=methodNames[j];\nvar methodConfig=methodsConfig[methodName];\nmethods[methodConfig.methodID]=methodName;\nif(methodConfig.type===MethodTypes.remoteAsync){\nasyncMethods.push(methodConfig.methodID);}}\n\n\nif(methods.length){\n_module2.push(methods);\nif(asyncMethods.length){\n_module2.push(asyncMethods);}}}\n\n\n\nmoduleArray[moduleConfig.moduleID]=_module2;}\n\nreturn moduleArray;}}},{key:'_genLookupTables',value:function _genLookupTables(\n\n\n\nmodulesConfig,moduleTable,methodTable){\nmodulesConfig.forEach(function(module,moduleID){\nif(!module){\nreturn;}\n\n\nvar moduleName=undefined,methods=undefined;\nif(moduleHasConstants(module)){var _module3=babelHelpers.slicedToArray(\nmodule,3);moduleName=_module3[0];methods=_module3[2];}else \n{var _module4=babelHelpers.slicedToArray(\nmodule,2);moduleName=_module4[0];methods=_module4[1];}\n\n\nmoduleTable[moduleID]=moduleName;\nmethodTable[moduleID]=babelHelpers.extends({},methods);});}},{key:'_genModules',value:function _genModules(\n\n\n\nremoteModules){var _this4=this;\nremoteModules.forEach(function(module,moduleID){\nif(!module){\nreturn;}\n\n\nvar moduleName=undefined,constants=undefined,methods=undefined,asyncMethods=undefined;\nif(moduleHasConstants(module)){var _module5=babelHelpers.slicedToArray(\nmodule,4);moduleName=_module5[0];constants=_module5[1];methods=_module5[2];asyncMethods=_module5[3];}else \n{var _module6=babelHelpers.slicedToArray(\nmodule,3);moduleName=_module6[0];methods=_module6[1];asyncMethods=_module6[2];}\n\n\nvar moduleConfig={moduleID:moduleID,constants:constants,methods:methods,asyncMethods:asyncMethods};\n_this4.RemoteModules[moduleName]=_this4._genModule({},moduleConfig);});}},{key:'_genModule',value:function _genModule(\n\n\n\nmodule,moduleConfig){var _this5=this;var \nmoduleID=moduleConfig.moduleID;var constants=moduleConfig.constants;var _moduleConfig$methods=moduleConfig.methods;var methods=_moduleConfig$methods===undefined?[]:_moduleConfig$methods;var _moduleConfig$asyncMe=moduleConfig.asyncMethods;var asyncMethods=_moduleConfig$asyncMe===undefined?[]:_moduleConfig$asyncMe;\n\nmethods.forEach(function(methodName,methodID){\nvar methodType=\narrayContains(asyncMethods,methodID)?\nMethodTypes.remoteAsync:MethodTypes.remote;\nmodule[methodName]=_this5._genMethod(moduleID,methodID,methodType);});\n\nbabelHelpers.extends(module,constants);\n\nreturn module;}},{key:'_genMethod',value:function _genMethod(\n\n\nmodule,method,type){\nvar fn=null;\nvar self=this;\nif(type===MethodTypes.remoteAsync){\nfn=function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}\nreturn new Promise(function(resolve,reject){\nself.__nativeCall(module,method,args,resolve,function(errorData){\nvar error=createErrorFromErrorData(errorData);\nreject(error);});});};}else \n\n\n\n{\nfn=function(){for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2];}\nvar lastArg=args.length>0?args[args.length-1]:null;\nvar secondLastArg=args.length>1?args[args.length-2]:null;\nvar hasSuccCB=typeof lastArg==='function';\nvar hasErrorCB=typeof secondLastArg==='function';\nhasErrorCB&&invariant(\nhasSuccCB,\n'Cannot have a non-function arg after a function arg.');\n\nvar numCBs=hasSuccCB+hasErrorCB;\nvar onSucc=hasSuccCB?lastArg:null;\nvar onFail=hasErrorCB?secondLastArg:null;\nargs=args.slice(0,args.length-numCBs);\nreturn self.__nativeCall(module,method,args,onFail,onSucc);};}\n\n\nfn.type=type;\nreturn fn;}}]);return MessageQueue;})();\n\n\n\n\nfunction moduleHasConstants(moduleArray){\nreturn !Array.isArray(moduleArray[1]);}\n\n\nfunction arrayContains(array,value){\nreturn array.indexOf(value)!==-1;}\n\n\nfunction createErrorFromErrorData(errorData){var \n\nmessage=\n\nerrorData.message;var extraErrorInfo=babelHelpers.objectWithoutProperties(errorData,['message']);\nvar error=new Error(message);\nerror.framesToPop=1;\nreturn babelHelpers.extends(error,extraErrorInfo);}\n\n\nmodule.exports=MessageQueue;\n});\n__d('BridgeProfiling',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar GLOBAL=GLOBAL||this;\nvar TRACE_TAG_REACT_APPS=1<<17;\n\nvar _enabled;\nvar _ReactPerf=null;\nfunction ReactPerf(){\nif(!_ReactPerf){\n_ReactPerf=require('ReactPerf');}\n\nreturn _ReactPerf;}\n\n\nvar BridgeProfiling={\nsetEnabled:function(enabled){\n_enabled=enabled;\n\nReactPerf().enableMeasure=enabled;},\n\n\nprofile:function(profileName){\nif(_enabled){\nprofileName=typeof profileName==='function'?\nprofileName():profileName;\nglobal.nativeTraceBeginSection(TRACE_TAG_REACT_APPS,profileName);}},\n\n\n\nprofileEnd:function(){\nif(_enabled){\nglobal.nativeTraceEndSection(TRACE_TAG_REACT_APPS);}},\n\n\n\nreactPerfMeasure:function(objName,fnName,func){\nreturn function(component){\nif(!_enabled){\nreturn func.apply(this,arguments);}\n\n\nvar name=objName==='ReactCompositeComponent'&&this.getName()||'';\nBridgeProfiling.profile(objName+'.'+fnName+'('+name+')');\nvar ret=func.apply(this,arguments);\nBridgeProfiling.profileEnd();\nreturn ret;};},\n\n\n\nswizzleReactPerf:function(){\nReactPerf().injection.injectMeasure(BridgeProfiling.reactPerfMeasure);},\n\n\nattachToRelayProfiler:function(){\n\n\n\n\n\ntry{\nvar rpName='RelayProfiler';\nvar RelayProfiler=require(rpName);\nRelayProfiler.attachProfileHandler('*',function(name){\nBridgeProfiling.profile(name);\nreturn function(){\nBridgeProfiling.profileEnd();};});}\n\n\ncatch(err) {}},\n\n\n\n\nswizzleJSON:function(){\nBridgeProfiling.measureMethods(JSON,'JSON',[\n'parse',\n'stringify']);},\n\n\n\n\n\n\n\n\n\n\n\nmeasureMethods:function(object,objectName,methodNames){\nif(!__DEV__){\nreturn;}\n\n\nmethodNames.forEach(function(methodName){\nobject[methodName]=BridgeProfiling.measure(\nobjectName,\nmethodName,\nobject[methodName]);});},\n\n\n\n\n\n\n\n\n\n\n\n\n\nmeasure:function(objName,fnName,func){\nif(!__DEV__){\nreturn func;}\n\n\nvar profileName=objName+'.'+fnName;\nreturn function(){\nif(!_enabled){\nreturn func.apply(this,arguments);}\n\n\nBridgeProfiling.profile(profileName);\nvar ret=func.apply(this,arguments);\nBridgeProfiling.profileEnd();\nreturn ret;};}};\n\n\n\n\nBridgeProfiling.setEnabled(global.__RCTProfileIsProfiling||false);\n\nmodule.exports=BridgeProfiling;\n});\n__d('ReactPerf',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactPerf={\n\n\n\n\nenableMeasure:false,\n\n\n\n\n\nstoredMeasure:_noMeasure,\n\n\n\n\n\n\nmeasureMethods:function(object,objectName,methodNames){\nif(__DEV__){\nfor(var key in methodNames){\nif(!methodNames.hasOwnProperty(key)){\ncontinue;}\n\nobject[key]=ReactPerf.measure(\nobjectName,\nmethodNames[key],\nobject[key]);}}},\n\n\n\n\n\n\n\n\n\n\n\n\n\nmeasure:function(objName,fnName,func){\nif(__DEV__){\nvar measuredFunc=null;\nvar wrapper=function(){\nif(ReactPerf.enableMeasure){\nif(!measuredFunc){\nmeasuredFunc=ReactPerf.storedMeasure(objName,fnName,func);}\n\nreturn measuredFunc.apply(this,arguments);}\n\nreturn func.apply(this,arguments);};\n\nwrapper.displayName=objName+'_'+fnName;\nreturn wrapper;}\n\nreturn func;},\n\n\ninjection:{\n\n\n\ninjectMeasure:function(measure){\nReactPerf.storedMeasure=measure;}}};\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _noMeasure(objName,fnName,func){\nreturn func;}\n\n\nmodule.exports=ReactPerf;\n});\n__d('ErrorUtils',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\nGLOBAL=this;\n\n\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=GLOBAL.ErrorUtils;\n});\n__d('JSTimersExecution',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\nvar keyMirror=require('keyMirror');\nvar performanceNow=require('performanceNow');\nvar warning=require('warning');\nvar BridgeProfiling=require('BridgeProfiling');\n\n\n\n\n\n\nvar JSTimersExecution={\nGUID:1,\nType:keyMirror({\nsetTimeout:null,\nsetInterval:null,\nrequestAnimationFrame:null,\nsetImmediate:null}),\n\n\n\ncallbacks:[],\ntypes:[],\ntimerIDs:[],\nimmediates:[],\n\n\n\n\n\n\ncallTimer:function(timerID){\nwarning(timerID<=JSTimersExecution.GUID,'Tried to call timer with ID '+timerID+' but no such timer exists');\nvar timerIndex=JSTimersExecution.timerIDs.indexOf(timerID);\n\n\n\n\n\nif(timerIndex===-1){\nreturn;}\n\nvar type=JSTimersExecution.types[timerIndex];\nvar callback=JSTimersExecution.callbacks[timerIndex];\n\n\nif(type===JSTimersExecution.Type.setTimeout||\ntype===JSTimersExecution.Type.setImmediate||\ntype===JSTimersExecution.Type.requestAnimationFrame){\nJSTimersExecution._clearIndex(timerIndex);}\n\n\ntry{\nif(type===JSTimersExecution.Type.setTimeout||\ntype===JSTimersExecution.Type.setInterval||\ntype===JSTimersExecution.Type.setImmediate){\ncallback();}else \nif(type===JSTimersExecution.Type.requestAnimationFrame){\nvar currentTime=performanceNow();\ncallback(currentTime);}else \n{\nconsole.error('Tried to call a callback with invalid type: '+type);\nreturn;}}\n\ncatch(e) {\n\nJSTimersExecution.errors=JSTimersExecution.errors||[];\nJSTimersExecution.errors.push(e);}},\n\n\n\n\n\n\n\ncallTimers:function(timerIDs){\ninvariant(timerIDs.length!==0,'Probably shouldn\\'t call \"callTimers\" with no timerIDs');\n\nJSTimersExecution.errors=null;\ntimerIDs.forEach(JSTimersExecution.callTimer);\n\nvar errors=JSTimersExecution.errors;\nif(errors){\nvar errorCount=errors.length;\nif(errorCount>1){\n\n\nfor(var ii=1;ii<errorCount;ii++){\nrequire('JSTimers').setTimeout(\n(function(error){throw error;}).bind(null,errors[ii]),\n0);}}\n\n\n\nthrow errors[0];}},\n\n\n\n\n\n\n\ncallImmediatesPass:function(){\nBridgeProfiling.profile('JSTimersExecution.callImmediatesPass()');\n\n\n\nif(JSTimersExecution.immediates.length>0){\nvar passImmediates=JSTimersExecution.immediates.slice();\nJSTimersExecution.immediates=[];\n\npassImmediates.forEach(function(timerID){\nJSTimersExecution.callTimer(timerID);});}\n\n\n\nBridgeProfiling.profileEnd();\n\nreturn JSTimersExecution.immediates.length>0;},\n\n\n\n\n\n\ncallImmediates:function(){\nJSTimersExecution.errors=null;\nwhile(JSTimersExecution.callImmediatesPass()){}\nif(JSTimersExecution.errors){\nJSTimersExecution.errors.forEach(function(error){return (\nrequire('JSTimers').setTimeout(function(){throw error;},0));});}},\n\n\n\n\n_clearIndex:function(i){\nJSTimersExecution.timerIDs[i]=null;\nJSTimersExecution.callbacks[i]=null;\nJSTimersExecution.types[i]=null;}};\n\n\n\nmodule.exports=JSTimersExecution;\n});\n__d('invariant',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=function(condition,format,a,b,c,d,e,f){\nif(__DEV__){\nif(format===undefined){\nthrow new Error('invariant requires an error message argument');}}\n\n\n\nif(!condition){\nvar error;\nif(format===undefined){\nerror=new Error(\n'Minified exception occurred; use the non-minified dev environment '+\n'for the full error message and additional helpful warnings.');}else \n\n{\nvar args=[a,b,c,d,e,f];\nvar argIndex=0;\nerror=new Error(\n'Invariant Violation: '+\nformat.replace(/%s/g,function(){return args[argIndex++];}));}\n\n\n\nerror.framesToPop=1;\nthrow error;}};\n\n\n\nmodule.exports=invariant;\n});\n__d('keyMirror',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar keyMirror=function(obj){\nvar ret={};\nvar key;\ninvariant(\nobj instanceof Object&&!Array.isArray(obj),\n'keyMirror(...): Argument must be an object.');\n\nfor(key in obj){\nif(!obj.hasOwnProperty(key)){\ncontinue;}\n\nret[key]=key;}\n\nreturn ret;};\n\n\nmodule.exports=keyMirror;\n});\n__d('performanceNow',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\nperformance=require('performance');\nvar curPerformance=performance;\n\n\n\n\n\n\nif(!curPerformance||!curPerformance.now){\ncurPerformance=Date;}\n\n\nvar performanceNow=curPerformance.now.bind(curPerformance);\n\nmodule.exports=performanceNow;\n});\n__d('performance',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ExecutionEnvironment=require('ExecutionEnvironment');\n\nvar performance;\n\nif(ExecutionEnvironment.canUseDOM){\nperformance=\nwindow.performance||\nwindow.msPerformance||\nwindow.webkitPerformance;}\n\n\nmodule.exports=performance||{};\n});\n__d('ExecutionEnvironment',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar canUseDOM=false;\n\n\n\n\n\n\n\nvar ExecutionEnvironment={\n\ncanUseDOM:canUseDOM,\n\ncanUseWorkers:typeof Worker!=='undefined',\n\ncanUseEventListeners:\ncanUseDOM&&!!(window.addEventListener||window.attachEvent),\n\ncanUseViewport:canUseDOM&&!!window.screen,\n\nisInWorker:!canUseDOM};\n\n\n\nmodule.exports=ExecutionEnvironment;\n});\n__d('warning',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar emptyFunction=require('emptyFunction');\n\n\n\n\n\n\n\n\nvar warning=emptyFunction;\n\nif(__DEV__){\nwarning=function(condition,format){for(var _len=arguments.length,args=Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){args[_key-2]=arguments[_key];}\nif(format===undefined){\nthrow new Error(\n'`warning(condition, format, ...args)` requires a warning '+\n'message argument');}\n\n\n\nif(format.indexOf('Failed Composite propType: ')===0){\nreturn;}\n\n\nif(!condition){\nvar argIndex=0;\nvar message='Warning: '+format.replace(/%s/g,function(){return args[argIndex++];});\nif(typeof console!=='undefined'){\nconsole.error(message);}\n\ntry{\n\n\n\nthrow new Error(message);}\ncatch(x) {}}};}\n\n\n\n\nmodule.exports=warning;\n});\n__d('emptyFunction',function(global, require, module, exports) {  function \n\n\n\n\n\n\n\n\n\n\nmakeEmptyFunction(arg){\nreturn function(){\nreturn arg;};}\n\n\n\n\n\n\n\n\nfunction emptyFunction(){}\n\nemptyFunction.thatReturns=makeEmptyFunction;\nemptyFunction.thatReturnsFalse=makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue=makeEmptyFunction(true);\nemptyFunction.thatReturnsNull=makeEmptyFunction(null);\nemptyFunction.thatReturnsThis=function(){return this;};\nemptyFunction.thatReturnsArgument=function(arg){return arg;};\n\nmodule.exports=emptyFunction;\n});\n__d('JSTimers',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTTiming=require('NativeModules').Timing;\nvar JSTimersExecution=require('JSTimersExecution');\n\n\n\n\n\n\nvar JSTimers={\nTypes:JSTimersExecution.Types,\n\n\n\n\n\n_getFreeIndex:function(){\nvar freeIndex=JSTimersExecution.timerIDs.indexOf(null);\nif(freeIndex===-1){\nfreeIndex=JSTimersExecution.timerIDs.length;}\n\nreturn freeIndex;},\n\n\n\n\n\n\nsetTimeout:function(func,duration){for(var _len=arguments.length,args=Array(_len>2?_len-2:0),_key=2;_key<_len;_key++){args[_key-2]=arguments[_key];}\nvar newID=JSTimersExecution.GUID++;\nvar freeIndex=JSTimers._getFreeIndex();\nJSTimersExecution.timerIDs[freeIndex]=newID;\nJSTimersExecution.callbacks[freeIndex]=function(){\nreturn func.apply(undefined,args);};\n\nJSTimersExecution.types[freeIndex]=JSTimersExecution.Type.setTimeout;\nRCTTiming.createTimer(newID,duration||0,Date.now(),false);\nreturn newID;},\n\n\n\n\n\n\nsetInterval:function(func,duration){for(var _len2=arguments.length,args=Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++){args[_key2-2]=arguments[_key2];}\nvar newID=JSTimersExecution.GUID++;\nvar freeIndex=JSTimers._getFreeIndex();\nJSTimersExecution.timerIDs[freeIndex]=newID;\nJSTimersExecution.callbacks[freeIndex]=function(){\nreturn func.apply(undefined,args);};\n\nJSTimersExecution.types[freeIndex]=JSTimersExecution.Type.setInterval;\nRCTTiming.createTimer(newID,duration||0,Date.now(),true);\nreturn newID;},\n\n\n\n\n\n\nsetImmediate:function(func){for(var _len3=arguments.length,args=Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++){args[_key3-1]=arguments[_key3];}\nvar newID=JSTimersExecution.GUID++;\nvar freeIndex=JSTimers._getFreeIndex();\nJSTimersExecution.timerIDs[freeIndex]=newID;\nJSTimersExecution.callbacks[freeIndex]=function(){\nreturn func.apply(undefined,args);};\n\nJSTimersExecution.types[freeIndex]=JSTimersExecution.Type.setImmediate;\nJSTimersExecution.immediates.push(newID);\nreturn newID;},\n\n\n\n\n\nrequestAnimationFrame:function(func){\nvar newID=JSTimersExecution.GUID++;\nvar freeIndex=JSTimers._getFreeIndex();\nJSTimersExecution.timerIDs[freeIndex]=newID;\nJSTimersExecution.callbacks[freeIndex]=func;\nJSTimersExecution.types[freeIndex]=JSTimersExecution.Type.requestAnimationFrame;\nRCTTiming.createTimer(newID,1,Date.now(),false);\nreturn newID;},\n\n\nclearTimeout:function(timerID){\nJSTimers._clearTimerID(timerID);},\n\n\nclearInterval:function(timerID){\nJSTimers._clearTimerID(timerID);},\n\n\nclearImmediate:function(timerID){\nJSTimers._clearTimerID(timerID);\nJSTimersExecution.immediates.splice(\nJSTimersExecution.immediates.indexOf(timerID),\n1);},\n\n\n\ncancelAnimationFrame:function(timerID){\nJSTimers._clearTimerID(timerID);},\n\n\n_clearTimerID:function(timerID){\n\n\nif(timerID==null){\nreturn;}\n\n\nvar index=JSTimersExecution.timerIDs.indexOf(timerID);\n\nif(index!==-1){\nJSTimersExecution._clearIndex(index);\nif(JSTimersExecution.types[index]!==JSTimersExecution.Type.setImmediate){\nRCTTiming.deleteTimer(timerID);}}}};\n\n\n\n\n\nmodule.exports=JSTimers;\n});\n__d('ReactUpdates',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar CallbackQueue=require('CallbackQueue');\nvar PooledClass=require('PooledClass');\nvar ReactPerf=require('ReactPerf');\nvar ReactReconciler=require('ReactReconciler');\nvar Transaction=require('Transaction');\n\nvar assign=require('Object.assign');\nvar invariant=require('invariant');\n\nvar dirtyComponents=[];\nvar asapCallbackQueue=CallbackQueue.getPooled();\nvar asapEnqueued=false;\n\nvar batchingStrategy=null;\n\nfunction ensureInjected(){\ninvariant(\nReactUpdates.ReactReconcileTransaction&&batchingStrategy,\n'ReactUpdates: must inject a reconcile transaction class and batching '+\n'strategy');}\n\n\n\nvar NESTED_UPDATES={\ninitialize:function(){\nthis.dirtyComponentsLength=dirtyComponents.length;},\n\nclose:function(){\nif(this.dirtyComponentsLength!==dirtyComponents.length){\n\n\n\n\n\ndirtyComponents.splice(0,this.dirtyComponentsLength);\nflushBatchedUpdates();}else \n{\ndirtyComponents.length=0;}}};\n\n\n\n\nvar UPDATE_QUEUEING={\ninitialize:function(){\nthis.callbackQueue.reset();},\n\nclose:function(){\nthis.callbackQueue.notifyAll();}};\n\n\n\nvar TRANSACTION_WRAPPERS=[NESTED_UPDATES,UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction(){\nthis.reinitializeTransaction();\nthis.dirtyComponentsLength=null;\nthis.callbackQueue=CallbackQueue.getPooled();\nthis.reconcileTransaction=\nReactUpdates.ReactReconcileTransaction.getPooled(false);}\n\n\nassign(\nReactUpdatesFlushTransaction.prototype,\nTransaction.Mixin,\n{\ngetTransactionWrappers:function(){\nreturn TRANSACTION_WRAPPERS;},\n\n\ndestructor:function(){\nthis.dirtyComponentsLength=null;\nCallbackQueue.release(this.callbackQueue);\nthis.callbackQueue=null;\nReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\nthis.reconcileTransaction=null;},\n\n\nperform:function(method,scope,a){\n\n\nreturn Transaction.Mixin.perform.call(\nthis,\nthis.reconcileTransaction.perform,\nthis.reconcileTransaction,\nmethod,\nscope,\na);}});\n\n\n\n\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback,a,b,c,d,e){\nensureInjected();\nbatchingStrategy.batchedUpdates(callback,a,b,c,d,e);}\n\n\n\n\n\n\n\n\n\nfunction mountOrderComparator(c1,c2){\nreturn c1._mountOrder-c2._mountOrder;}\n\n\nfunction runBatchedUpdates(transaction){\nvar len=transaction.dirtyComponentsLength;\ninvariant(\nlen===dirtyComponents.length,\n'Expected flush transaction\\'s stored dirty-components length (%s) to '+\n'match dirty-components array length (%s).',\nlen,\ndirtyComponents.length);\n\n\n\n\n\ndirtyComponents.sort(mountOrderComparator);\n\nfor(var i=0;i<len;i++){\n\n\n\nvar component=dirtyComponents[i];\n\n\n\n\nvar callbacks=component._pendingCallbacks;\ncomponent._pendingCallbacks=null;\n\nReactReconciler.performUpdateIfNecessary(\ncomponent,\ntransaction.reconcileTransaction);\n\n\nif(callbacks){\nfor(var j=0;j<callbacks.length;j++){\ntransaction.callbackQueue.enqueue(\ncallbacks[j],\ncomponent.getPublicInstance());}}}}\n\n\n\n\n\n\nvar flushBatchedUpdates=function(){\n\n\n\n\nwhile(dirtyComponents.length||asapEnqueued){\nif(dirtyComponents.length){\nvar transaction=ReactUpdatesFlushTransaction.getPooled();\ntransaction.perform(runBatchedUpdates,null,transaction);\nReactUpdatesFlushTransaction.release(transaction);}\n\n\nif(asapEnqueued){\nasapEnqueued=false;\nvar queue=asapCallbackQueue;\nasapCallbackQueue=CallbackQueue.getPooled();\nqueue.notifyAll();\nCallbackQueue.release(queue);}}};\n\n\n\nflushBatchedUpdates=ReactPerf.measure(\n'ReactUpdates',\n'flushBatchedUpdates',\nflushBatchedUpdates);\n\n\n\n\n\n\nfunction enqueueUpdate(component){\nensureInjected();\n\n\n\n\n\n\n\nif(!batchingStrategy.isBatchingUpdates){\nbatchingStrategy.batchedUpdates(enqueueUpdate,component);\nreturn;}\n\n\ndirtyComponents.push(component);}\n\n\n\n\n\n\nfunction asap(callback,context){\ninvariant(\nbatchingStrategy.isBatchingUpdates,\n'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context where'+\n'updates are not being batched.');\n\nasapCallbackQueue.enqueue(callback,context);\nasapEnqueued=true;}\n\n\nvar ReactUpdatesInjection={\ninjectReconcileTransaction:function(ReconcileTransaction){\ninvariant(\nReconcileTransaction,\n'ReactUpdates: must provide a reconcile transaction class');\n\nReactUpdates.ReactReconcileTransaction=ReconcileTransaction;},\n\n\ninjectBatchingStrategy:function(_batchingStrategy){\ninvariant(\n_batchingStrategy,\n'ReactUpdates: must provide a batching strategy');\n\ninvariant(\ntypeof _batchingStrategy.batchedUpdates==='function',\n'ReactUpdates: must provide a batchedUpdates() function');\n\ninvariant(\ntypeof _batchingStrategy.isBatchingUpdates==='boolean',\n'ReactUpdates: must provide an isBatchingUpdates boolean attribute');\n\nbatchingStrategy=_batchingStrategy;}};\n\n\n\nvar ReactUpdates={\n\n\n\n\n\n\nReactReconcileTransaction:null,\n\nbatchedUpdates:batchedUpdates,\nenqueueUpdate:enqueueUpdate,\nflushBatchedUpdates:flushBatchedUpdates,\ninjection:ReactUpdatesInjection,\nasap:asap};\n\n\nmodule.exports=ReactUpdates;\n});\n__d('CallbackQueue',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar PooledClass=require('PooledClass');\n\nvar assign=require('Object.assign');\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\nfunction CallbackQueue(){\nthis._callbacks=null;\nthis._contexts=null;}\n\n\nassign(CallbackQueue.prototype,{\n\n\n\n\n\n\n\n\nenqueue:function(callback,context){\nthis._callbacks=this._callbacks||[];\nthis._contexts=this._contexts||[];\nthis._callbacks.push(callback);\nthis._contexts.push(context);},\n\n\n\n\n\n\n\n\nnotifyAll:function(){\nvar callbacks=this._callbacks;\nvar contexts=this._contexts;\nif(callbacks){\ninvariant(\ncallbacks.length===contexts.length,\n'Mismatched list of contexts in callback queue');\n\nthis._callbacks=null;\nthis._contexts=null;\nfor(var i=0;i<callbacks.length;i++){\ncallbacks[i].call(contexts[i]);}\n\ncallbacks.length=0;\ncontexts.length=0;}},\n\n\n\n\n\n\n\n\nreset:function(){\nthis._callbacks=null;\nthis._contexts=null;},\n\n\n\n\n\ndestructor:function(){\nthis.reset();}});\n\n\n\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports=CallbackQueue;\n});\n__d('PooledClass',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\nvar oneArgumentPooler=function(copyFieldsFrom){\nvar Klass=this;\nif(Klass.instancePool.length){\nvar instance=Klass.instancePool.pop();\nKlass.call(instance,copyFieldsFrom);\nreturn instance;}else \n{\nreturn new Klass(copyFieldsFrom);}};\n\n\n\nvar twoArgumentPooler=function(a1,a2){\nvar Klass=this;\nif(Klass.instancePool.length){\nvar instance=Klass.instancePool.pop();\nKlass.call(instance,a1,a2);\nreturn instance;}else \n{\nreturn new Klass(a1,a2);}};\n\n\n\nvar threeArgumentPooler=function(a1,a2,a3){\nvar Klass=this;\nif(Klass.instancePool.length){\nvar instance=Klass.instancePool.pop();\nKlass.call(instance,a1,a2,a3);\nreturn instance;}else \n{\nreturn new Klass(a1,a2,a3);}};\n\n\n\nvar fourArgumentPooler=function(a1,a2,a3,a4){\nvar Klass=this;\nif(Klass.instancePool.length){\nvar instance=Klass.instancePool.pop();\nKlass.call(instance,a1,a2,a3,a4);\nreturn instance;}else \n{\nreturn new Klass(a1,a2,a3,a4);}};\n\n\n\nvar fiveArgumentPooler=function(a1,a2,a3,a4,a5){\nvar Klass=this;\nif(Klass.instancePool.length){\nvar instance=Klass.instancePool.pop();\nKlass.call(instance,a1,a2,a3,a4,a5);\nreturn instance;}else \n{\nreturn new Klass(a1,a2,a3,a4,a5);}};\n\n\n\nvar standardReleaser=function(instance){\nvar Klass=this;\ninvariant(\ninstance instanceof Klass,\n'Trying to release an instance into a pool of a different type.');\n\ninstance.destructor();\nif(Klass.instancePool.length<Klass.poolSize){\nKlass.instancePool.push(instance);}};\n\n\n\nvar DEFAULT_POOL_SIZE=10;\nvar DEFAULT_POOLER=oneArgumentPooler;\n\n\n\n\n\n\n\n\n\n\nvar addPoolingTo=function(CopyConstructor,pooler){\nvar NewKlass=CopyConstructor;\nNewKlass.instancePool=[];\nNewKlass.getPooled=pooler||DEFAULT_POOLER;\nif(!NewKlass.poolSize){\nNewKlass.poolSize=DEFAULT_POOL_SIZE;}\n\nNewKlass.release=standardReleaser;\nreturn NewKlass;};\n\n\nvar PooledClass={\naddPoolingTo:addPoolingTo,\noneArgumentPooler:oneArgumentPooler,\ntwoArgumentPooler:twoArgumentPooler,\nthreeArgumentPooler:threeArgumentPooler,\nfourArgumentPooler:fourArgumentPooler,\nfiveArgumentPooler:fiveArgumentPooler};\n\n\nmodule.exports=PooledClass;\n});\n__d('Object.assign',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction assign(target,sources){\nif(target==null){\nthrow new TypeError('Object.assign target cannot be null or undefined');}\n\n\nvar to=Object(target);\nvar hasOwnProperty=Object.prototype.hasOwnProperty;\n\nfor(var nextIndex=1;nextIndex<arguments.length;nextIndex++){\nvar nextSource=arguments[nextIndex];\nif(nextSource==null){\ncontinue;}\n\n\nvar from=Object(nextSource);\n\n\n\n\n\n\nfor(var key in from){\nif(hasOwnProperty.call(from,key)){\nto[key]=from[key];}}}\n\n\n\n\nreturn to;}\n\n\nmodule.exports=assign;\n});\n__d('ReactReconciler',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactRef=require('ReactRef');\n\n\n\n\n\nfunction attachRefs(){\nReactRef.attachRefs(this,this._currentElement);}\n\n\nvar ReactReconciler={\n\n\n\n\n\n\n\n\n\n\n\nmountComponent:function(internalInstance,rootID,transaction,context){\nvar markup=internalInstance.mountComponent(rootID,transaction,context);\nif(internalInstance._currentElement&&\ninternalInstance._currentElement.ref!=null){\ntransaction.getReactMountReady().enqueue(attachRefs,internalInstance);}\n\nreturn markup;},\n\n\n\n\n\n\n\n\nunmountComponent:function(internalInstance){\nReactRef.detachRefs(internalInstance,internalInstance._currentElement);\ninternalInstance.unmountComponent();},\n\n\n\n\n\n\n\n\n\n\n\nreceiveComponent:function(\ninternalInstance,nextElement,transaction,context)\n{\nvar prevElement=internalInstance._currentElement;\n\nif(nextElement===prevElement&&\ncontext===internalInstance._context)\n{\n\n\n\n\n\n\n\n\n\n\nreturn;}\n\n\nvar refsChanged=ReactRef.shouldUpdateRefs(\nprevElement,\nnextElement);\n\n\nif(refsChanged){\nReactRef.detachRefs(internalInstance,prevElement);}\n\n\ninternalInstance.receiveComponent(nextElement,transaction,context);\n\nif(refsChanged&&\ninternalInstance._currentElement&&\ninternalInstance._currentElement.ref!=null){\ntransaction.getReactMountReady().enqueue(attachRefs,internalInstance);}},\n\n\n\n\n\n\n\n\n\n\nperformUpdateIfNecessary:function(\ninternalInstance,\ntransaction)\n{\ninternalInstance.performUpdateIfNecessary(transaction);}};\n\n\n\n\nmodule.exports=ReactReconciler;\n});\n__d('ReactRef',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactOwner=require('ReactOwner');\n\nvar ReactRef={};\n\nfunction attachRef(ref,component,owner){\nif(typeof ref==='function'){\nref(component.getPublicInstance());}else \n{\n\nReactOwner.addComponentAsRefTo(component,ref,owner);}}\n\n\n\nfunction detachRef(ref,component,owner){\nif(typeof ref==='function'){\nref(null);}else \n{\n\nReactOwner.removeComponentAsRefFrom(component,ref,owner);}}\n\n\n\nReactRef.attachRefs=function(instance,element){\nif(element===null||element===false){\nreturn;}\n\nvar ref=element.ref;\nif(ref!=null){\nattachRef(ref,instance,element._owner);}};\n\n\n\nReactRef.shouldUpdateRefs=function(prevElement,nextElement){\n\n\n\n\n\n\n\n\n\n\n\n\nvar prevEmpty=prevElement===null||prevElement===false;\nvar nextEmpty=nextElement===null||nextElement===false;\n\nreturn (\n\nprevEmpty||nextEmpty||\nnextElement._owner!==prevElement._owner||\nnextElement.ref!==prevElement.ref);};\n\n\n\nReactRef.detachRefs=function(instance,element){\nif(element===null||element===false){\nreturn;}\n\nvar ref=element.ref;\nif(ref!=null){\ndetachRef(ref,instance,element._owner);}};\n\n\n\nmodule.exports=ReactRef;\n});\n__d('ReactOwner',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactOwner={\n\n\n\n\n\n\nisValidOwner:function(object){\nreturn !!(\nobject&&\ntypeof object.attachRef==='function'&&\ntypeof object.detachRef==='function');},\n\n\n\n\n\n\n\n\n\n\n\n\naddComponentAsRefTo:function(component,ref,owner){\ninvariant(\nReactOwner.isValidOwner(owner),\n'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might '+\n'be adding a ref to a component that was not created inside a component\\'s '+\n'`render` method, or you have multiple copies of React loaded '+\n'(details: https://fb.me/react-refs-must-have-owner).');\n\nowner.attachRef(ref,component);},\n\n\n\n\n\n\n\n\n\n\n\nremoveComponentAsRefFrom:function(component,ref,owner){\ninvariant(\nReactOwner.isValidOwner(owner),\n'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might '+\n'be removing a ref to a component that was not created inside a component\\'s '+\n'`render` method, or you have multiple copies of React loaded '+\n'(details: https://fb.me/react-refs-must-have-owner).');\n\n\n\nif(owner.getPublicInstance().refs[ref]===component.getPublicInstance()){\nowner.detachRef(ref);}}};\n\n\n\n\n\nmodule.exports=ReactOwner;\n});\n__d('Transaction',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Mixin={\n\n\n\n\n\n\n\nreinitializeTransaction:function(){\nthis.transactionWrappers=this.getTransactionWrappers();\nif(this.wrapperInitData){\nthis.wrapperInitData.length=0;}else \n{\nthis.wrapperInitData=[];}\n\nthis._isInTransaction=false;},\n\n\n_isInTransaction:false,\n\n\n\n\n\ngetTransactionWrappers:null,\n\nisInTransaction:function(){\nreturn !!this._isInTransaction;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nperform:function(method,scope,a,b,c,d,e,f){\ninvariant(\n!this.isInTransaction(),\n'Transaction.perform(...): Cannot initialize a transaction when there '+\n'is already an outstanding transaction.');\n\nvar errorThrown;\nvar ret;\ntry{\nthis._isInTransaction=true;\n\n\n\n\nerrorThrown=true;\nthis.initializeAll(0);\nret=method.call(scope,a,b,c,d,e,f);\nerrorThrown=false;}finally \n{\ntry{\nif(errorThrown){\n\n\ntry{\nthis.closeAll(0);}\ncatch(err) {}}else \n\n{\n\n\nthis.closeAll(0);}}finally \n\n{\nthis._isInTransaction=false;}}\n\n\nreturn ret;},\n\n\ninitializeAll:function(startIndex){\nvar transactionWrappers=this.transactionWrappers;\nfor(var i=startIndex;i<transactionWrappers.length;i++){\nvar wrapper=transactionWrappers[i];\ntry{\n\n\n\n\nthis.wrapperInitData[i]=Transaction.OBSERVED_ERROR;\nthis.wrapperInitData[i]=wrapper.initialize?\nwrapper.initialize.call(this):\nnull;}finally \n{\nif(this.wrapperInitData[i]===Transaction.OBSERVED_ERROR){\n\n\n\ntry{\nthis.initializeAll(i+1);}\ncatch(err) {}}}}},\n\n\n\n\n\n\n\n\n\n\n\n\ncloseAll:function(startIndex){\ninvariant(\nthis.isInTransaction(),\n'Transaction.closeAll(): Cannot close transaction when none are open.');\n\nvar transactionWrappers=this.transactionWrappers;\nfor(var i=startIndex;i<transactionWrappers.length;i++){\nvar wrapper=transactionWrappers[i];\nvar initData=this.wrapperInitData[i];\nvar errorThrown;\ntry{\n\n\n\n\nerrorThrown=true;\nif(initData!==Transaction.OBSERVED_ERROR&&wrapper.close){\nwrapper.close.call(this,initData);}\n\nerrorThrown=false;}finally \n{\nif(errorThrown){\n\n\n\ntry{\nthis.closeAll(i+1);}\ncatch(e) {}}}}\n\n\n\n\nthis.wrapperInitData.length=0;}};\n\n\n\nvar Transaction={\n\nMixin:Mixin,\n\n\n\n\nOBSERVED_ERROR:{}};\n\n\n\nmodule.exports=Transaction;\n});\n__d('stringifySafe',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction stringifySafe(arg){\nvar ret;\nvar type=typeof arg;\nif(arg===undefined){\nret='undefined';}else \nif(arg===null){\nret='null';}else \nif(type==='string'){\nret='\"'+arg+'\"';}else \nif(type==='function'){\ntry{\nret=arg.toString();}\ncatch(e) {\nret='[function unknown]';}}else \n\n{\n\n\ntry{\nret=JSON.stringify(arg);}\ncatch(e) {\nif(typeof arg.toString==='function'){\ntry{\nret=arg.toString();}\ncatch(E) {}}}}\n\n\n\nreturn ret||'[\"'+type+'\" failed to stringify]';}\n\n\nmodule.exports=stringifySafe;\n});\n__d('nativeModulePrefixNormalizer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction nativeModulePrefixNormalizer(\nmodules)\n{\nObject.keys(modules).forEach(function(moduleName){\nvar strippedName=moduleName.replace(/^(RCT|RK)/,'');\nif(modules['RCT'+strippedName]&&modules['RK'+strippedName]){\nthrow new Error(\n'Module cannot be registered as both RCT and RK: '+moduleName);}\n\n\nif(strippedName!==moduleName){\nmodules[strippedName]=modules[moduleName];\ndelete modules[moduleName];}});}\n\n\n\n\nmodule.exports=nativeModulePrefixNormalizer;\n});\n__d('loadSourceMap',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Promise=require('Promise');\nvar NativeModules=require('NativeModules');\nvar SourceMapConsumer=require('SourceMap').SourceMapConsumer;\nvar SourceMapURL=require('react-native/Libraries/JavaScriptAppEngine/Initialization/source-map-url.js');\n\nvar RCTSourceCode=NativeModules.SourceCode;\nvar RCTNetworking=NativeModules.Networking;\n\nfunction loadSourceMap(){\nreturn fetchSourceMap().\nthen(function(map){return new SourceMapConsumer(map);});}\n\n\nfunction fetchSourceMap(){\nif(global.RAW_SOURCE_MAP){\nreturn Promise.resolve(global.RAW_SOURCE_MAP);}\n\n\nif(!RCTSourceCode){\nreturn Promise.reject(new Error('RCTSourceCode module is not available'));}\n\n\nif(!RCTNetworking){\n\nreturn Promise.reject(new Error('RCTNetworking module is not available'));}\n\n\nreturn new Promise(RCTSourceCode.getScriptText).\nthen(extractSourceMapURL).\nthen(function(url){\nif(url===null){\nreturn Promise.reject(new Error('No source map URL found. May be running from bundled file.'));}\n\nreturn Promise.resolve(url);}).\n\nthen(fetch).\nthen(function(response){return response.text();});}\n\n\nfunction extractSourceMapURL(_ref){var url=_ref.url;var text=_ref.text;var fullSourceMappingURL=_ref.fullSourceMappingURL;\nif(fullSourceMappingURL){\nreturn fullSourceMappingURL;}\n\nvar mapURL=SourceMapURL.getFrom(text);\nif(!mapURL){\nreturn null;}\n\nvar baseURL=url.match(/(.+:\\/\\/.*?)\\//)[1];\nreturn baseURL+mapURL;}\n\n\nmodule.exports=loadSourceMap;\n});\n__d('Promise',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nglobal.setImmediate=require('setImmediate');\nvar Promise=require('promise/setimmediate/es6-extensions.js');\nrequire('promise/setimmediate/done.js');\n\n\n\n\nPromise.prototype.finally=function(onSettled){\nreturn this.then(onSettled,onSettled);};\n\n\n\nmodule.exports=Promise;\n});\n__d('setImmediate',function(global, require, module, exports) {  module.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexports=global.setImmediate||\nrequire('ImmediateImplementation').setImmediate;\n});\n__d('ImmediateImplementation',function(global, require, module, exports) {  /**\n * @generated SignedSource<<57d0446bbd1186485d372efe6b323dca>>\n *\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n * !! This file is a check-in of a static_upstream project!      !!\n * !!                                                            !!\n * !! You should not modify this file directly. Instead:         !!\n * !! 1) Use `fjs use-upstream` to temporarily replace this with !!\n * !!    the latest version from upstream.                       !!\n * !! 2) Make your changes, test them, etc.                      !!\n * !! 3) Use `fjs push-upstream` to copy your changes back to    !!\n * !!    static_upstream.                                        !!\n * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n *\n * Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic\n * Denicola\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @preserve-header\n * @providesModule ImmediateImplementation\n */\n\n(function(global,undefined){\n\"use strict\";\n\nvar nextHandle=1;\nvar tasksByHandle={};\nvar queueHead={};\nvar queueTail=queueHead;\nvar currentlyRunningATask=false;\nvar doc=global.document;\nvar setImmediate;\n\nfunction addFromSetImmediateArguments(args){\nvar handler=args[0];\nargs=Array.prototype.slice.call(args,1);\ntasksByHandle[nextHandle]=function(){\nhandler.apply(undefined,args);};\n\nqueueTail=queueTail.next={handle:nextHandle++};\nreturn queueTail.handle;}\n\n\nfunction flushQueue(){\nvar next,task;\nwhile(!currentlyRunningATask&&(next=queueHead.next)){\nqueueHead=next;\nif(task=tasksByHandle[next.handle]){\ncurrentlyRunningATask=true;\ntry{\ntask();\ncurrentlyRunningATask=false;}finally \n{\nclearImmediate(next.handle);\nif(currentlyRunningATask){\ncurrentlyRunningATask=false;\n\n\n\n\n\n\nif(queueHead.next){\nsetImmediate(flushQueue);}}}}}}\n\n\n\n\n\n\n\nfunction clearImmediate(handle){\ndelete tasksByHandle[handle];}\n\n\nfunction canUsePostMessage(){\n\n\nif(global.postMessage&&!global.importScripts){\nvar postMessageIsAsynchronous=true;\n\nvar onMessage=function(){\npostMessageIsAsynchronous=false;\nif(global.removeEventListener){\nglobal.removeEventListener(\"message\",onMessage,false);}else \n{\nglobal.detachEvent(\"onmessage\",onMessage);}};\n\n\n\nif(global.addEventListener){\nglobal.addEventListener(\"message\",onMessage,false);}else \nif(global.attachEvent){\nglobal.attachEvent(\"onmessage\",onMessage);}else \n{\nreturn false;}\n\n\nglobal.postMessage(\"\",\"*\");\nreturn postMessageIsAsynchronous;}}\n\n\n\nfunction installPostMessageImplementation(){\n\n\nvar messagePrefix=\"setImmediate$\"+Math.random()+\"$\";\nvar onGlobalMessage=function(event){\nif(event.source===global&&\ntypeof event.data===\"string\"&&\nevent.data.indexOf(messagePrefix)===0){\nflushQueue();}};\n\n\n\nif(global.addEventListener){\nglobal.addEventListener(\"message\",onGlobalMessage,false);}else \n{\nglobal.attachEvent(\"onmessage\",onGlobalMessage);}\n\n\nsetImmediate=function(){\nvar handle=addFromSetImmediateArguments(arguments);\nglobal.postMessage(messagePrefix+handle,\"*\");\nreturn handle;};}\n\n\n\nfunction installMessageChannelImplementation(){\nvar channel=new MessageChannel();\nchannel.port1.onmessage=flushQueue;\nsetImmediate=function(){\nvar handle=addFromSetImmediateArguments(arguments);\nchannel.port2.postMessage(handle);\nreturn handle;};}\n\n\n\nfunction installReadyStateChangeImplementation(){\nvar html=doc.documentElement;\nsetImmediate=function(){\nvar handle=addFromSetImmediateArguments(arguments);\n\n\nvar script=doc.createElement(\"script\");\nscript.onreadystatechange=function(){\nscript.onreadystatechange=null;\nhtml.removeChild(script);\nscript=null;\nflushQueue();};\n\nhtml.appendChild(script);\nreturn handle;};}\n\n\n\nfunction installSetTimeoutImplementation(){\nsetImmediate=function(){\nsetTimeout(flushQueue,0);\nreturn addFromSetImmediateArguments(arguments);};}\n\n\n\nif(canUsePostMessage()){\n\ninstallPostMessageImplementation();}else \n\nif(global.MessageChannel){\n\ninstallMessageChannelImplementation();}else \n\nif(doc&&\"onreadystatechange\" in doc.createElement(\"script\")){\n\ninstallReadyStateChangeImplementation();}else \n\n{\n\ninstallSetTimeoutImplementation();}\n\n\nexports.setImmediate=setImmediate;\nexports.clearImmediate=clearImmediate;})(\nFunction(\"return this\")());\n});\n__d('promise/setimmediate/es6-extensions.js',function(global, require, module, exports) {  'use strict';\n\n\n\nvar Promise=require('promise/setimmediate/core.js');\n\nmodule.exports=Promise;\n\n\n\nvar TRUE=valuePromise(true);\nvar FALSE=valuePromise(false);\nvar NULL=valuePromise(null);\nvar UNDEFINED=valuePromise(undefined);\nvar ZERO=valuePromise(0);\nvar EMPTYSTRING=valuePromise('');\n\nfunction valuePromise(value){\nvar p=new Promise(Promise._99);\np._37=1;\np._12=value;\nreturn p;}\n\nPromise.resolve=function(value){\nif(value instanceof Promise)return value;\n\nif(value===null)return NULL;\nif(value===undefined)return UNDEFINED;\nif(value===true)return TRUE;\nif(value===false)return FALSE;\nif(value===0)return ZERO;\nif(value==='')return EMPTYSTRING;\n\nif(typeof value==='object'||typeof value==='function'){\ntry{\nvar then=value.then;\nif(typeof then==='function'){\nreturn new Promise(then.bind(value));}}\n\ncatch(ex) {\nreturn new Promise(function(resolve,reject){\nreject(ex);});}}\n\n\n\nreturn valuePromise(value);};\n\n\nPromise.all=function(arr){\nvar args=Array.prototype.slice.call(arr);\n\nreturn new Promise(function(resolve,reject){\nif(args.length===0)return resolve([]);\nvar remaining=args.length;\nfunction res(i,val){\nif(val&&(typeof val==='object'||typeof val==='function')){\nif(val instanceof Promise&&val.then===Promise.prototype.then){\nwhile(val._37===3){\nval=val._12;}\n\nif(val._37===1)return res(i,val._12);\nif(val._37===2)reject(val._12);\nval.then(function(val){\nres(i,val);},\nreject);\nreturn;}else \n{\nvar then=val.then;\nif(typeof then==='function'){\nvar p=new Promise(then.bind(val));\np.then(function(val){\nres(i,val);},\nreject);\nreturn;}}}\n\n\n\nargs[i]=val;\nif(--remaining===0){\nresolve(args);}}\n\n\nfor(var i=0;i<args.length;i++){\nres(i,args[i]);}});};\n\n\n\n\nPromise.reject=function(value){\nreturn new Promise(function(resolve,reject){\nreject(value);});};\n\n\n\nPromise.race=function(values){\nreturn new Promise(function(resolve,reject){\nvalues.forEach(function(value){\nPromise.resolve(value).then(resolve,reject);});});};\n\n\n\n\n\n\nPromise.prototype['catch']=function(onRejected){\nreturn this.then(null,onRejected);};\n});\n__d('promise/setimmediate/core.js',function(global, require, module, exports) {  'use strict';\n\n\n\nfunction noop(){}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar LAST_ERROR=null;\nvar IS_ERROR={};\nfunction getThen(obj){\ntry{\nreturn obj.then;}\ncatch(ex) {\nLAST_ERROR=ex;\nreturn IS_ERROR;}}\n\n\n\nfunction tryCallOne(fn,a){\ntry{\nreturn fn(a);}\ncatch(ex) {\nLAST_ERROR=ex;\nreturn IS_ERROR;}}\n\n\nfunction tryCallTwo(fn,a,b){\ntry{\nfn(a,b);}\ncatch(ex) {\nLAST_ERROR=ex;\nreturn IS_ERROR;}}\n\n\n\nmodule.exports=Promise;\n\nfunction Promise(fn){\nif(typeof this!=='object'){\nthrow new TypeError('Promises must be constructed via new');}\n\nif(typeof fn!=='function'){\nthrow new TypeError('not a function');}\n\nthis._37=0;\nthis._12=null;\nthis._59=[];\nif(fn===noop)return;\ndoResolve(fn,this);}\n\nPromise._99=noop;\n\nPromise.prototype.then=function(onFulfilled,onRejected){\nif(this.constructor!==Promise){\nreturn safeThen(this,onFulfilled,onRejected);}\n\nvar res=new Promise(noop);\nhandle(this,new Handler(onFulfilled,onRejected,res));\nreturn res;};\n\n\nfunction safeThen(self,onFulfilled,onRejected){\nreturn new self.constructor(function(resolve,reject){\nvar res=new Promise(noop);\nres.then(resolve,reject);\nhandle(self,new Handler(onFulfilled,onRejected,res));});}\n\n;\nfunction handle(self,deferred){\nwhile(self._37===3){\nself=self._12;}\n\nif(self._37===0){\nself._59.push(deferred);\nreturn;}\n\nsetImmediate(function(){\nvar cb=self._37===1?deferred.onFulfilled:deferred.onRejected;\nif(cb===null){\nif(self._37===1){\nresolve(deferred.promise,self._12);}else \n{\nreject(deferred.promise,self._12);}\n\nreturn;}\n\nvar ret=tryCallOne(cb,self._12);\nif(ret===IS_ERROR){\nreject(deferred.promise,LAST_ERROR);}else \n{\nresolve(deferred.promise,ret);}});}\n\n\n\nfunction resolve(self,newValue){\n\nif(newValue===self){\nreturn reject(\nself,\nnew TypeError('A promise cannot be resolved with itself.'));}\n\n\nif(\nnewValue&&(\ntypeof newValue==='object'||typeof newValue==='function'))\n{\nvar then=getThen(newValue);\nif(then===IS_ERROR){\nreturn reject(self,LAST_ERROR);}\n\nif(\nthen===self.then&&\nnewValue instanceof Promise)\n{\nself._37=3;\nself._12=newValue;\nfinale(self);\nreturn;}else \nif(typeof then==='function'){\ndoResolve(then.bind(newValue),self);\nreturn;}}\n\n\nself._37=1;\nself._12=newValue;\nfinale(self);}\n\n\nfunction reject(self,newValue){\nself._37=2;\nself._12=newValue;\nfinale(self);}\n\nfunction finale(self){\nfor(var i=0;i<self._59.length;i++){\nhandle(self,self._59[i]);}\n\nself._59=null;}\n\n\nfunction Handler(onFulfilled,onRejected,promise){\nthis.onFulfilled=typeof onFulfilled==='function'?onFulfilled:null;\nthis.onRejected=typeof onRejected==='function'?onRejected:null;\nthis.promise=promise;}\n\n\n\n\n\n\n\n\nfunction doResolve(fn,promise){\nvar done=false;\nvar res=tryCallTwo(fn,function(value){\nif(done)return;\ndone=true;\nresolve(promise,value);},\nfunction(reason){\nif(done)return;\ndone=true;\nreject(promise,reason);});\n\nif(!done&&res===IS_ERROR){\ndone=true;\nreject(promise,LAST_ERROR);}}\n});\n__d('promise/setimmediate/done.js',function(global, require, module, exports) {  'use strict';\n\nvar Promise=require('promise/setimmediate/core.js');\n\nmodule.exports=Promise;\nPromise.prototype.done=function(onFulfilled,onRejected){\nvar self=arguments.length?this.then.apply(this,arguments):this;\nself.then(null,function(err){\nsetTimeout(function(){\nthrow err;},\n0);});};\n});\n__d('SourceMap',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nscope={};\nwrapper.call(scope);\n\nmodule.exports=scope.sourceMap;\n\nfunction wrapper(){\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction define(moduleName,deps,payload){\nif(typeof moduleName!=\"string\"){\nthrow new TypeError('Expected string, got: '+moduleName);}\n\n\nif(arguments.length==2){\npayload=deps;}\n\n\nif(moduleName in define.modules){\nthrow new Error(\"Module already defined: \"+moduleName);}\n\ndefine.modules[moduleName]=payload;}\n;\n\n\n\n\ndefine.modules={};\n\n\n\n\n\n\n\n\n\n\nfunction Domain(){\nthis.modules={};\nthis._currentModule=null;}\n\n\n(function(){\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDomain.prototype.require=function(deps,callback){\nif(Array.isArray(deps)){\nvar params=deps.map(function(dep){\nreturn this.lookup(dep);},\nthis);\nif(callback){\ncallback.apply(null,params);}\n\nreturn undefined;}else \n\n{\nreturn this.lookup(deps);}};\n\n\n\nfunction normalize(path){\nvar bits=path.split('/');\nvar i=1;\nwhile(i<bits.length){\nif(bits[i]==='..'){\nbits.splice(i-1,1);}else \nif(bits[i]==='.'){\nbits.splice(i,1);}else \n{\ni++;}}\n\n\nreturn bits.join('/');}\n\n\nfunction join(a,b){\na=a.trim();\nb=b.trim();\nif(/^\\//.test(b)){\nreturn b;}else \n{\nreturn a.replace(/\\/*$/,'/')+b;}}\n\n\n\nfunction dirname(path){\nvar bits=path.split('/');\nbits.pop();\nreturn bits.join('/');}\n\n\n\n\n\n\n\n\nDomain.prototype.lookup=function(moduleName){\nif(/^\\./.test(moduleName)){\nmoduleName=normalize(join(dirname(this._currentModule),moduleName));}\n\n\nif(moduleName in this.modules){\nvar module=this.modules[moduleName];\nreturn module;}\n\n\nif(!(moduleName in define.modules)){\nthrow new Error(\"Module not defined: \"+moduleName);}\n\n\nvar module=define.modules[moduleName];\n\nif(typeof module==\"function\"){\nvar exports={};\nvar previousModule=this._currentModule;\nthis._currentModule=moduleName;\nmodule(this.require.bind(this),exports,{id:moduleName,uri:\"\"});\nthis._currentModule=previousModule;\nmodule=exports;}\n\n\n\nthis.modules[moduleName]=module;\n\nreturn module;};})();\n\n\n\n\ndefine.Domain=Domain;\ndefine.globalDomain=new Domain();\nvar require=define.globalDomain.require.bind(define.globalDomain);\n\n\n\n\n\n\ndefine('source-map/source-map-generator',['require','exports','module','source-map/base64-vlq','source-map/util','source-map/array-set'],function(require,exports,module){\n\nvar base64VLQ=require('./base64-vlq');\nvar util=require('./util');\nvar ArraySet=require('./array-set').ArraySet;\n\n\n\n\n\n\n\n\n\nfunction SourceMapGenerator(aArgs){\nthis._file=util.getArg(aArgs,'file');\nthis._sourceRoot=util.getArg(aArgs,'sourceRoot',null);\nthis._sources=new ArraySet();\nthis._names=new ArraySet();\nthis._mappings=[];\nthis._sourcesContents=null;}\n\n\nSourceMapGenerator.prototype._version=3;\n\n\n\n\n\n\nSourceMapGenerator.fromSourceMap=\nfunction SourceMapGenerator_fromSourceMap(aSourceMapConsumer){\nvar sourceRoot=aSourceMapConsumer.sourceRoot;\nvar generator=new SourceMapGenerator({\nfile:aSourceMapConsumer.file,\nsourceRoot:sourceRoot});\n\naSourceMapConsumer.eachMapping(function(mapping){\nvar newMapping={\ngenerated:{\nline:mapping.generatedLine,\ncolumn:mapping.generatedColumn}};\n\n\n\nif(mapping.source){\nnewMapping.source=mapping.source;\nif(sourceRoot){\nnewMapping.source=util.relative(sourceRoot,newMapping.source);}\n\n\nnewMapping.original={\nline:mapping.originalLine,\ncolumn:mapping.originalColumn};\n\n\nif(mapping.name){\nnewMapping.name=mapping.name;}}\n\n\n\ngenerator.addMapping(newMapping);});\n\naSourceMapConsumer.sources.forEach(function(sourceFile){\nvar content=aSourceMapConsumer.sourceContentFor(sourceFile);\nif(content){\ngenerator.setSourceContent(sourceFile,content);}});\n\n\nreturn generator;};\n\n\n\n\n\n\n\n\n\n\n\n\nSourceMapGenerator.prototype.addMapping=\nfunction SourceMapGenerator_addMapping(aArgs){\nvar generated=util.getArg(aArgs,'generated');\nvar original=util.getArg(aArgs,'original',null);\nvar source=util.getArg(aArgs,'source',null);\nvar name=util.getArg(aArgs,'name',null);\n\nthis._validateMapping(generated,original,source,name);\n\nif(source&&!this._sources.has(source)){\nthis._sources.add(source);}\n\n\nif(name&&!this._names.has(name)){\nthis._names.add(name);}\n\n\nthis._mappings.push({\ngeneratedLine:generated.line,\ngeneratedColumn:generated.column,\noriginalLine:original!=null&&original.line,\noriginalColumn:original!=null&&original.column,\nsource:source,\nname:name});};\n\n\n\n\n\n\nSourceMapGenerator.prototype.setSourceContent=\nfunction SourceMapGenerator_setSourceContent(aSourceFile,aSourceContent){\nvar source=aSourceFile;\nif(this._sourceRoot){\nsource=util.relative(this._sourceRoot,source);}\n\n\nif(aSourceContent!==null){\n\n\nif(!this._sourcesContents){\nthis._sourcesContents={};}\n\nthis._sourcesContents[util.toSetString(source)]=aSourceContent;}else \n{\n\n\ndelete this._sourcesContents[util.toSetString(source)];\nif(Object.keys(this._sourcesContents).length===0){\nthis._sourcesContents=null;}}};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSourceMapGenerator.prototype.applySourceMap=\nfunction SourceMapGenerator_applySourceMap(aSourceMapConsumer,aSourceFile){\n\nif(!aSourceFile){\naSourceFile=aSourceMapConsumer.file;}\n\nvar sourceRoot=this._sourceRoot;\n\nif(sourceRoot){\naSourceFile=util.relative(sourceRoot,aSourceFile);}\n\n\n\nvar newSources=new ArraySet();\nvar newNames=new ArraySet();\n\n\nthis._mappings.forEach(function(mapping){\nif(mapping.source===aSourceFile&&mapping.originalLine){\n\nvar original=aSourceMapConsumer.originalPositionFor({\nline:mapping.originalLine,\ncolumn:mapping.originalColumn});\n\nif(original.source!==null){\n\nif(sourceRoot){\nmapping.source=util.relative(sourceRoot,original.source);}else \n{\nmapping.source=original.source;}\n\nmapping.originalLine=original.line;\nmapping.originalColumn=original.column;\nif(original.name!==null&&mapping.name!==null){\n\n\nmapping.name=original.name;}}}\n\n\n\n\nvar source=mapping.source;\nif(source&&!newSources.has(source)){\nnewSources.add(source);}\n\n\nvar name=mapping.name;\nif(name&&!newNames.has(name)){\nnewNames.add(name);}},\n\n\nthis);\nthis._sources=newSources;\nthis._names=newNames;\n\n\naSourceMapConsumer.sources.forEach(function(sourceFile){\nvar content=aSourceMapConsumer.sourceContentFor(sourceFile);\nif(content){\nif(sourceRoot){\nsourceFile=util.relative(sourceRoot,sourceFile);}\n\nthis.setSourceContent(sourceFile,content);}},\n\nthis);};\n\n\n\n\n\n\n\n\n\n\n\n\n\nSourceMapGenerator.prototype._validateMapping=\nfunction SourceMapGenerator_validateMapping(aGenerated,aOriginal,aSource,\naName){\nif(aGenerated&&'line' in aGenerated&&'column' in aGenerated&&\naGenerated.line>0&&aGenerated.column>=0&&\n!aOriginal&&!aSource&&!aName){\n\nreturn;}else \n\nif(aGenerated&&'line' in aGenerated&&'column' in aGenerated&&\naOriginal&&'line' in aOriginal&&'column' in aOriginal&&\naGenerated.line>0&&aGenerated.column>=0&&\naOriginal.line>0&&aOriginal.column>=0&&\naSource){\n\nreturn;}else \n\n{\nthrow new Error('Invalid mapping: '+JSON.stringify({\ngenerated:aGenerated,\nsource:aSource,\norginal:aOriginal,\nname:aName}));}};\n\n\n\n\n\n\n\n\nSourceMapGenerator.prototype._serializeMappings=\nfunction SourceMapGenerator_serializeMappings(){\nvar previousGeneratedColumn=0;\nvar previousGeneratedLine=1;\nvar previousOriginalColumn=0;\nvar previousOriginalLine=0;\nvar previousName=0;\nvar previousSource=0;\nvar result='';\nvar mapping;\n\n\n\n\n\n\nthis._mappings.sort(util.compareByGeneratedPositions);\n\nfor(var i=0,len=this._mappings.length;i<len;i++){\nmapping=this._mappings[i];\n\nif(mapping.generatedLine!==previousGeneratedLine){\npreviousGeneratedColumn=0;\nwhile(mapping.generatedLine!==previousGeneratedLine){\nresult+=';';\npreviousGeneratedLine++;}}else \n\n\n{\nif(i>0){\nif(!util.compareByGeneratedPositions(mapping,this._mappings[i-1])){\ncontinue;}\n\nresult+=',';}}\n\n\n\nresult+=base64VLQ.encode(mapping.generatedColumn-\npreviousGeneratedColumn);\npreviousGeneratedColumn=mapping.generatedColumn;\n\nif(mapping.source){\nresult+=base64VLQ.encode(this._sources.indexOf(mapping.source)-\npreviousSource);\npreviousSource=this._sources.indexOf(mapping.source);\n\n\nresult+=base64VLQ.encode(mapping.originalLine-1-\npreviousOriginalLine);\npreviousOriginalLine=mapping.originalLine-1;\n\nresult+=base64VLQ.encode(mapping.originalColumn-\npreviousOriginalColumn);\npreviousOriginalColumn=mapping.originalColumn;\n\nif(mapping.name){\nresult+=base64VLQ.encode(this._names.indexOf(mapping.name)-\npreviousName);\npreviousName=this._names.indexOf(mapping.name);}}}\n\n\n\n\nreturn result;};\n\n\nSourceMapGenerator.prototype._generateSourcesContent=\nfunction SourceMapGenerator_generateSourcesContent(aSources,aSourceRoot){\nreturn aSources.map(function(source){\nif(!this._sourcesContents){\nreturn null;}\n\nif(aSourceRoot){\nsource=util.relative(aSourceRoot,source);}\n\nvar key=util.toSetString(source);\nreturn Object.prototype.hasOwnProperty.call(this._sourcesContents,\nkey)?\nthis._sourcesContents[key]:\nnull;},\nthis);};\n\n\n\n\n\nSourceMapGenerator.prototype.toJSON=\nfunction SourceMapGenerator_toJSON(){\nvar map={\nversion:this._version,\nfile:this._file,\nsources:this._sources.toArray(),\nnames:this._names.toArray(),\nmappings:this._serializeMappings()};\n\nif(this._sourceRoot){\nmap.sourceRoot=this._sourceRoot;}\n\nif(this._sourcesContents){\nmap.sourcesContent=this._generateSourcesContent(map.sources,map.sourceRoot);}\n\n\nreturn map;};\n\n\n\n\n\nSourceMapGenerator.prototype.toString=\nfunction SourceMapGenerator_toString(){\nreturn JSON.stringify(this);};\n\n\nexports.SourceMapGenerator=SourceMapGenerator;});\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndefine('source-map/base64-vlq',['require','exports','module','source-map/base64'],function(require,exports,module){\n\nvar base64=require('./base64');\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar VLQ_BASE_SHIFT=5;\n\n\nvar VLQ_BASE=1<<VLQ_BASE_SHIFT;\n\n\nvar VLQ_BASE_MASK=VLQ_BASE-1;\n\n\nvar VLQ_CONTINUATION_BIT=VLQ_BASE;\n\n\n\n\n\n\n\nfunction toVLQSigned(aValue){\nreturn aValue<0?\n(-aValue<<1)+1:\n(aValue<<1)+0;}\n\n\n\n\n\n\n\n\nfunction fromVLQSigned(aValue){\nvar isNegative=(aValue&1)===1;\nvar shifted=aValue>>1;\nreturn isNegative?\n-shifted:\nshifted;}\n\n\n\n\n\nexports.encode=function base64VLQ_encode(aValue){\nvar encoded=\"\";\nvar digit;\n\nvar vlq=toVLQSigned(aValue);\n\ndo {\ndigit=vlq&VLQ_BASE_MASK;\nvlq>>>=VLQ_BASE_SHIFT;\nif(vlq>0){\n\n\ndigit|=VLQ_CONTINUATION_BIT;}\n\nencoded+=base64.encode(digit);}while(\nvlq>0);\n\nreturn encoded;};\n\n\n\n\n\n\nexports.decode=function base64VLQ_decode(aStr){\nvar i=0;\nvar strLen=aStr.length;\nvar result=0;\nvar shift=0;\nvar continuation,digit;\n\ndo {\nif(i>=strLen){\nthrow new Error(\"Expected more digits in base 64 VLQ value.\");}\n\ndigit=base64.decode(aStr.charAt(i++));\ncontinuation=!!(digit&VLQ_CONTINUATION_BIT);\ndigit&=VLQ_BASE_MASK;\nresult=result+(digit<<shift);\nshift+=VLQ_BASE_SHIFT;}while(\ncontinuation);\n\nreturn {\nvalue:fromVLQSigned(result),\nrest:aStr.slice(i)};};});\n\n\n\n\n\n\n\n\n\n\ndefine('source-map/base64',['require','exports','module'],function(require,exports,module){\n\nvar charToIntMap={};\nvar intToCharMap={};\n\n'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.\nsplit('').\nforEach(function(ch,index){\ncharToIntMap[ch]=index;\nintToCharMap[index]=ch;});\n\n\n\n\n\nexports.encode=function base64_encode(aNumber){\nif(aNumber in intToCharMap){\nreturn intToCharMap[aNumber];}\n\nthrow new TypeError(\"Must be between 0 and 63: \"+aNumber);};\n\n\n\n\n\nexports.decode=function base64_decode(aChar){\nif(aChar in charToIntMap){\nreturn charToIntMap[aChar];}\n\nthrow new TypeError(\"Not a valid base 64 digit: \"+aChar);};});\n\n\n\n\n\n\n\n\n\ndefine('source-map/util',['require','exports','module'],function(require,exports,module){\n\n\n\n\n\n\n\n\n\n\n\nfunction getArg(aArgs,aName,aDefaultValue){\nif(aName in aArgs){\nreturn aArgs[aName];}else \nif(arguments.length===3){\nreturn aDefaultValue;}else \n{\nthrow new Error('\"'+aName+'\" is a required argument.');}}\n\n\nexports.getArg=getArg;\n\nvar urlRegexp=/([\\w+\\-.]+):\\/\\/((\\w+:\\w+)@)?([\\w.]+)?(:(\\d+))?(\\S+)?/;\nvar dataUrlRegexp=/^data:.+\\,.+/;\n\nfunction urlParse(aUrl){\nvar match=aUrl.match(urlRegexp);\nif(!match){\nreturn null;}\n\nreturn {\nscheme:match[1],\nauth:match[3],\nhost:match[4],\nport:match[6],\npath:match[7]};}\n\n\nexports.urlParse=urlParse;\n\nfunction urlGenerate(aParsedUrl){\nvar url=aParsedUrl.scheme+\"://\";\nif(aParsedUrl.auth){\nurl+=aParsedUrl.auth+\"@\";}\n\nif(aParsedUrl.host){\nurl+=aParsedUrl.host;}\n\nif(aParsedUrl.port){\nurl+=\":\"+aParsedUrl.port;}\n\nif(aParsedUrl.path){\nurl+=aParsedUrl.path;}\n\nreturn url;}\n\nexports.urlGenerate=urlGenerate;\n\nfunction join(aRoot,aPath){\nvar url;\n\nif(aPath.match(urlRegexp)||aPath.match(dataUrlRegexp)){\nreturn aPath;}\n\n\nif(aPath.charAt(0)==='/'&&(url=urlParse(aRoot))){\nurl.path=aPath;\nreturn urlGenerate(url);}\n\n\nreturn aRoot.replace(/\\/$/,'')+'/'+aPath;}\n\nexports.join=join;\n\n\n\n\n\n\n\n\n\n\nfunction toSetString(aStr){\nreturn '$'+aStr;}\n\nexports.toSetString=toSetString;\n\nfunction fromSetString(aStr){\nreturn aStr.substr(1);}\n\nexports.fromSetString=fromSetString;\n\nfunction relative(aRoot,aPath){\naRoot=aRoot.replace(/\\/$/,'');\n\nvar url=urlParse(aRoot);\nif(aPath.charAt(0)==\"/\"&&url&&url.path==\"/\"){\nreturn aPath.slice(1);}\n\n\nreturn aPath.indexOf(aRoot+'/')===0?\naPath.substr(aRoot.length+1):\naPath;}\n\nexports.relative=relative;\n\nfunction strcmp(aStr1,aStr2){\nvar s1=aStr1||\"\";\nvar s2=aStr2||\"\";\nreturn (s1>s2)-(s1<s2);}\n\n\n\n\n\n\n\n\n\n\nfunction compareByOriginalPositions(mappingA,mappingB,onlyCompareOriginal){\nvar cmp;\n\ncmp=strcmp(mappingA.source,mappingB.source);\nif(cmp){\nreturn cmp;}\n\n\ncmp=mappingA.originalLine-mappingB.originalLine;\nif(cmp){\nreturn cmp;}\n\n\ncmp=mappingA.originalColumn-mappingB.originalColumn;\nif(cmp||onlyCompareOriginal){\nreturn cmp;}\n\n\ncmp=strcmp(mappingA.name,mappingB.name);\nif(cmp){\nreturn cmp;}\n\n\ncmp=mappingA.generatedLine-mappingB.generatedLine;\nif(cmp){\nreturn cmp;}\n\n\nreturn mappingA.generatedColumn-mappingB.generatedColumn;}\n;\nexports.compareByOriginalPositions=compareByOriginalPositions;\n\n\n\n\n\n\n\n\n\n\nfunction compareByGeneratedPositions(mappingA,mappingB,onlyCompareGenerated){\nvar cmp;\n\ncmp=mappingA.generatedLine-mappingB.generatedLine;\nif(cmp){\nreturn cmp;}\n\n\ncmp=mappingA.generatedColumn-mappingB.generatedColumn;\nif(cmp||onlyCompareGenerated){\nreturn cmp;}\n\n\ncmp=strcmp(mappingA.source,mappingB.source);\nif(cmp){\nreturn cmp;}\n\n\ncmp=mappingA.originalLine-mappingB.originalLine;\nif(cmp){\nreturn cmp;}\n\n\ncmp=mappingA.originalColumn-mappingB.originalColumn;\nif(cmp){\nreturn cmp;}\n\n\nreturn strcmp(mappingA.name,mappingB.name);}\n;\nexports.compareByGeneratedPositions=compareByGeneratedPositions;});\n\n\n\n\n\n\n\n\ndefine('source-map/array-set',['require','exports','module','source-map/util'],function(require,exports,module){\n\nvar util=require('./util');\n\n\n\n\n\n\n\nfunction ArraySet(){\nthis._array=[];\nthis._set={};}\n\n\n\n\n\nArraySet.fromArray=function ArraySet_fromArray(aArray,aAllowDuplicates){\nvar set=new ArraySet();\nfor(var i=0,len=aArray.length;i<len;i++){\nset.add(aArray[i],aAllowDuplicates);}\n\nreturn set;};\n\n\n\n\n\n\n\nArraySet.prototype.add=function ArraySet_add(aStr,aAllowDuplicates){\nvar isDuplicate=this.has(aStr);\nvar idx=this._array.length;\nif(!isDuplicate||aAllowDuplicates){\nthis._array.push(aStr);}\n\nif(!isDuplicate){\nthis._set[util.toSetString(aStr)]=idx;}};\n\n\n\n\n\n\n\n\nArraySet.prototype.has=function ArraySet_has(aStr){\nreturn Object.prototype.hasOwnProperty.call(this._set,\nutil.toSetString(aStr));};\n\n\n\n\n\n\n\nArraySet.prototype.indexOf=function ArraySet_indexOf(aStr){\nif(this.has(aStr)){\nreturn this._set[util.toSetString(aStr)];}\n\nthrow new Error('\"'+aStr+'\" is not in the set.');};\n\n\n\n\n\n\n\nArraySet.prototype.at=function ArraySet_at(aIdx){\nif(aIdx>=0&&aIdx<this._array.length){\nreturn this._array[aIdx];}\n\nthrow new Error('No element indexed by '+aIdx);};\n\n\n\n\n\n\n\nArraySet.prototype.toArray=function ArraySet_toArray(){\nreturn this._array.slice();};\n\n\nexports.ArraySet=ArraySet;});\n\n\n\n\n\n\n\n\ndefine('source-map/source-map-consumer',['require','exports','module','source-map/util','source-map/binary-search','source-map/array-set','source-map/base64-vlq'],function(require,exports,module){\n\nvar util=require('./util');\nvar binarySearch=require('./binary-search');\nvar ArraySet=require('./array-set').ArraySet;\nvar base64VLQ=require('./base64-vlq');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction SourceMapConsumer(aSourceMap){\nvar sourceMap=aSourceMap;\nif(typeof aSourceMap==='string'){\nsourceMap=JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/,''));}\n\n\nvar version=util.getArg(sourceMap,'version');\nvar sources=util.getArg(sourceMap,'sources');\n\n\nvar names=util.getArg(sourceMap,'names',[]);\nvar sourceRoot=util.getArg(sourceMap,'sourceRoot',null);\nvar sourcesContent=util.getArg(sourceMap,'sourcesContent',null);\nvar mappings=util.getArg(sourceMap,'mappings');\nvar file=util.getArg(sourceMap,'file',null);\n\n\n\nif(version!=this._version){\nthrow new Error('Unsupported version: '+version);}\n\n\n\n\n\n\nthis._names=ArraySet.fromArray(names,true);\nthis._sources=ArraySet.fromArray(sources,true);\n\nthis.sourceRoot=sourceRoot;\nthis.sourcesContent=sourcesContent;\nthis._mappings=mappings;\nthis.file=file;}\n\n\n\n\n\n\n\n\n\nSourceMapConsumer.fromSourceMap=\nfunction SourceMapConsumer_fromSourceMap(aSourceMap){\nvar smc=Object.create(SourceMapConsumer.prototype);\n\nsmc._names=ArraySet.fromArray(aSourceMap._names.toArray(),true);\nsmc._sources=ArraySet.fromArray(aSourceMap._sources.toArray(),true);\nsmc.sourceRoot=aSourceMap._sourceRoot;\nsmc.sourcesContent=aSourceMap._generateSourcesContent(smc._sources.toArray(),\nsmc.sourceRoot);\nsmc.file=aSourceMap._file;\n\nsmc.__generatedMappings=aSourceMap._mappings.slice().\nsort(util.compareByGeneratedPositions);\nsmc.__originalMappings=aSourceMap._mappings.slice().\nsort(util.compareByOriginalPositions);\n\nreturn smc;};\n\n\n\n\n\nSourceMapConsumer.prototype._version=3;\n\n\n\n\nObject.defineProperty(SourceMapConsumer.prototype,'sources',{\nget:function(){\nreturn this._sources.toArray().map(function(s){\nreturn this.sourceRoot?util.join(this.sourceRoot,s):s;},\nthis);}});\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSourceMapConsumer.prototype.__generatedMappings=null;\nObject.defineProperty(SourceMapConsumer.prototype,'_generatedMappings',{\nget:function(){\nif(!this.__generatedMappings){\nthis.__generatedMappings=[];\nthis.__originalMappings=[];\nthis._parseMappings(this._mappings,this.sourceRoot);}\n\n\nreturn this.__generatedMappings;}});\n\n\n\nSourceMapConsumer.prototype.__originalMappings=null;\nObject.defineProperty(SourceMapConsumer.prototype,'_originalMappings',{\nget:function(){\nif(!this.__originalMappings){\nthis.__generatedMappings=[];\nthis.__originalMappings=[];\nthis._parseMappings(this._mappings,this.sourceRoot);}\n\n\nreturn this.__originalMappings;}});\n\n\n\n\n\n\n\n\nSourceMapConsumer.prototype._parseMappings=\nfunction SourceMapConsumer_parseMappings(aStr,aSourceRoot){\nvar generatedLine=1;\nvar previousGeneratedColumn=0;\nvar previousOriginalLine=0;\nvar previousOriginalColumn=0;\nvar previousSource=0;\nvar previousName=0;\nvar mappingSeparator=/^[,;]/;\nvar str=aStr;\nvar mapping;\nvar temp;\n\nwhile(str.length>0){\nif(str.charAt(0)===';'){\ngeneratedLine++;\nstr=str.slice(1);\npreviousGeneratedColumn=0;}else \n\nif(str.charAt(0)===','){\nstr=str.slice(1);}else \n\n{\nmapping={};\nmapping.generatedLine=generatedLine;\n\n\ntemp=base64VLQ.decode(str);\nmapping.generatedColumn=previousGeneratedColumn+temp.value;\npreviousGeneratedColumn=mapping.generatedColumn;\nstr=temp.rest;\n\nif(str.length>0&&!mappingSeparator.test(str.charAt(0))){\n\ntemp=base64VLQ.decode(str);\nmapping.source=this._sources.at(previousSource+temp.value);\npreviousSource+=temp.value;\nstr=temp.rest;\nif(str.length===0||mappingSeparator.test(str.charAt(0))){\nthrow new Error('Found a source, but no line and column');}\n\n\n\ntemp=base64VLQ.decode(str);\nmapping.originalLine=previousOriginalLine+temp.value;\npreviousOriginalLine=mapping.originalLine;\n\nmapping.originalLine+=1;\nstr=temp.rest;\nif(str.length===0||mappingSeparator.test(str.charAt(0))){\nthrow new Error('Found a source and line, but no column');}\n\n\n\ntemp=base64VLQ.decode(str);\nmapping.originalColumn=previousOriginalColumn+temp.value;\npreviousOriginalColumn=mapping.originalColumn;\nstr=temp.rest;\n\nif(str.length>0&&!mappingSeparator.test(str.charAt(0))){\n\ntemp=base64VLQ.decode(str);\nmapping.name=this._names.at(previousName+temp.value);\npreviousName+=temp.value;\nstr=temp.rest;}}\n\n\n\nthis.__generatedMappings.push(mapping);\nif(typeof mapping.originalLine==='number'){\nthis.__originalMappings.push(mapping);}}}\n\n\n\n\nthis.__originalMappings.sort(util.compareByOriginalPositions);};\n\n\n\n\n\n\nSourceMapConsumer.prototype._findMapping=\nfunction SourceMapConsumer_findMapping(aNeedle,aMappings,aLineName,\naColumnName,aComparator){\n\n\n\n\n\nif(aNeedle[aLineName]<=0){\nthrow new TypeError('Line must be greater than or equal to 1, got '+\naNeedle[aLineName]);}\n\nif(aNeedle[aColumnName]<0){\nthrow new TypeError('Column must be greater than or equal to 0, got '+\naNeedle[aColumnName]);}\n\n\nreturn binarySearch.search(aNeedle,aMappings,aComparator);};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSourceMapConsumer.prototype.originalPositionFor=\nfunction SourceMapConsumer_originalPositionFor(aArgs){\nvar needle={\ngeneratedLine:util.getArg(aArgs,'line'),\ngeneratedColumn:util.getArg(aArgs,'column')};\n\n\nvar mapping=this._findMapping(needle,\nthis._generatedMappings,\n\"generatedLine\",\n\"generatedColumn\",\nutil.compareByGeneratedPositions);\n\nif(mapping){\nvar source=util.getArg(mapping,'source',null);\nif(source&&this.sourceRoot){\nsource=util.join(this.sourceRoot,source);}\n\nreturn {\nsource:source,\nline:util.getArg(mapping,'originalLine',null),\ncolumn:util.getArg(mapping,'originalColumn',null),\nname:util.getArg(mapping,'name',null)};}\n\n\n\nreturn {\nsource:null,\nline:null,\ncolumn:null,\nname:null};};\n\n\n\n\n\n\n\n\nSourceMapConsumer.prototype.sourceContentFor=\nfunction SourceMapConsumer_sourceContentFor(aSource){\nif(!this.sourcesContent){\nreturn null;}\n\n\nif(this.sourceRoot){\naSource=util.relative(this.sourceRoot,aSource);}\n\n\nif(this._sources.has(aSource)){\nreturn this.sourcesContent[this._sources.indexOf(aSource)];}\n\n\nvar url;\nif(this.sourceRoot&&(\nurl=util.urlParse(this.sourceRoot))){\n\n\n\n\nvar fileUriAbsPath=aSource.replace(/^file:\\/\\//,\"\");\nif(url.scheme==\"file\"&&\nthis._sources.has(fileUriAbsPath)){\nreturn this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];}\n\n\nif((!url.path||url.path==\"/\")&&\nthis._sources.has(\"/\"+aSource)){\nreturn this.sourcesContent[this._sources.indexOf(\"/\"+aSource)];}}\n\n\n\nthrow new Error('\"'+aSource+'\" is not in the SourceMap.');};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSourceMapConsumer.prototype.generatedPositionFor=\nfunction SourceMapConsumer_generatedPositionFor(aArgs){\nvar needle={\nsource:util.getArg(aArgs,'source'),\noriginalLine:util.getArg(aArgs,'line'),\noriginalColumn:util.getArg(aArgs,'column')};\n\n\nif(this.sourceRoot){\nneedle.source=util.relative(this.sourceRoot,needle.source);}\n\n\nvar mapping=this._findMapping(needle,\nthis._originalMappings,\n\"originalLine\",\n\"originalColumn\",\nutil.compareByOriginalPositions);\n\nif(mapping){\nreturn {\nline:util.getArg(mapping,'generatedLine',null),\ncolumn:util.getArg(mapping,'generatedColumn',null)};}\n\n\n\nreturn {\nline:null,\ncolumn:null};};\n\n\n\nSourceMapConsumer.GENERATED_ORDER=1;\nSourceMapConsumer.ORIGINAL_ORDER=2;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSourceMapConsumer.prototype.eachMapping=\nfunction SourceMapConsumer_eachMapping(aCallback,aContext,aOrder){\nvar context=aContext||null;\nvar order=aOrder||SourceMapConsumer.GENERATED_ORDER;\n\nvar mappings;\nswitch(order){\ncase SourceMapConsumer.GENERATED_ORDER:\nmappings=this._generatedMappings;\nbreak;\ncase SourceMapConsumer.ORIGINAL_ORDER:\nmappings=this._originalMappings;\nbreak;\ndefault:\nthrow new Error(\"Unknown order of iteration.\");}\n\n\nvar sourceRoot=this.sourceRoot;\nmappings.map(function(mapping){\nvar source=mapping.source;\nif(source&&sourceRoot){\nsource=util.join(sourceRoot,source);}\n\nreturn {\nsource:source,\ngeneratedLine:mapping.generatedLine,\ngeneratedColumn:mapping.generatedColumn,\noriginalLine:mapping.originalLine,\noriginalColumn:mapping.originalColumn,\nname:mapping.name};}).\n\nforEach(aCallback,context);};\n\n\nexports.SourceMapConsumer=SourceMapConsumer;});\n\n\n\n\n\n\n\n\ndefine('source-map/binary-search',['require','exports','module'],function(require,exports,module){\n\n\n\n\n\n\n\n\n\n\nfunction recursiveSearch(aLow,aHigh,aNeedle,aHaystack,aCompare){\n\n\n\n\n\n\n\n\n\n\nvar mid=Math.floor((aHigh-aLow)/2)+aLow;\nvar cmp=aCompare(aNeedle,aHaystack[mid],true);\nif(cmp===0){\n\nreturn aHaystack[mid];}else \n\nif(cmp>0){\n\nif(aHigh-mid>1){\n\nreturn recursiveSearch(mid,aHigh,aNeedle,aHaystack,aCompare);}\n\n\n\nreturn aHaystack[mid];}else \n\n{\n\nif(mid-aLow>1){\n\nreturn recursiveSearch(aLow,mid,aNeedle,aHaystack,aCompare);}\n\n\n\nreturn aLow<0?\nnull:\naHaystack[aLow];}}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexports.search=function search(aNeedle,aHaystack,aCompare){\nreturn aHaystack.length>0?\nrecursiveSearch(-1,aHaystack.length,aNeedle,aHaystack,aCompare):\nnull;};});\n\n\n\n\n\n\n\n\n\ndefine('source-map/source-node',['require','exports','module','source-map/source-map-generator','source-map/util'],function(require,exports,module){\n\nvar SourceMapGenerator=require('./source-map-generator').SourceMapGenerator;\nvar util=require('./util');\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction SourceNode(aLine,aColumn,aSource,aChunks,aName){\nthis.children=[];\nthis.sourceContents={};\nthis.line=aLine===undefined?null:aLine;\nthis.column=aColumn===undefined?null:aColumn;\nthis.source=aSource===undefined?null:aSource;\nthis.name=aName===undefined?null:aName;\nif(aChunks!=null)this.add(aChunks);}\n\n\n\n\n\n\n\n\nSourceNode.fromStringWithSourceMap=\nfunction SourceNode_fromStringWithSourceMap(aGeneratedCode,aSourceMapConsumer){\n\n\nvar node=new SourceNode();\n\n\n\nvar remainingLines=aGeneratedCode.split('\\n');\n\n\nvar lastGeneratedLine=1,lastGeneratedColumn=0;\n\n\n\n\nvar lastMapping=null;\n\naSourceMapConsumer.eachMapping(function(mapping){\nif(lastMapping===null){\n\n\n\nwhile(lastGeneratedLine<mapping.generatedLine){\nnode.add(remainingLines.shift()+\"\\n\");\nlastGeneratedLine++;}\n\nif(lastGeneratedColumn<mapping.generatedColumn){\nvar nextLine=remainingLines[0];\nnode.add(nextLine.substr(0,mapping.generatedColumn));\nremainingLines[0]=nextLine.substr(mapping.generatedColumn);\nlastGeneratedColumn=mapping.generatedColumn;}}else \n\n{\n\n\nif(lastGeneratedLine<mapping.generatedLine){\nvar code=\"\";\n\ndo {\ncode+=remainingLines.shift()+\"\\n\";\nlastGeneratedLine++;\nlastGeneratedColumn=0;}while(\nlastGeneratedLine<mapping.generatedLine);\n\n\nif(lastGeneratedColumn<mapping.generatedColumn){\nvar nextLine=remainingLines[0];\ncode+=nextLine.substr(0,mapping.generatedColumn);\nremainingLines[0]=nextLine.substr(mapping.generatedColumn);\nlastGeneratedColumn=mapping.generatedColumn;}\n\n\naddMappingWithCode(lastMapping,code);}else \n{\n\n\n\nvar nextLine=remainingLines[0];\nvar code=nextLine.substr(0,mapping.generatedColumn-\nlastGeneratedColumn);\nremainingLines[0]=nextLine.substr(mapping.generatedColumn-\nlastGeneratedColumn);\nlastGeneratedColumn=mapping.generatedColumn;\naddMappingWithCode(lastMapping,code);}}\n\n\nlastMapping=mapping;},\nthis);\n\n\n\naddMappingWithCode(lastMapping,remainingLines.join(\"\\n\"));\n\n\naSourceMapConsumer.sources.forEach(function(sourceFile){\nvar content=aSourceMapConsumer.sourceContentFor(sourceFile);\nif(content){\nnode.setSourceContent(sourceFile,content);}});\n\n\n\nreturn node;\n\nfunction addMappingWithCode(mapping,code){\nif(mapping===null||mapping.source===undefined){\nnode.add(code);}else \n{\nnode.add(new SourceNode(mapping.originalLine,\nmapping.originalColumn,\nmapping.source,\ncode,\nmapping.name));}}};\n\n\n\n\n\n\n\n\n\n\nSourceNode.prototype.add=function SourceNode_add(aChunk){\nif(Array.isArray(aChunk)){\naChunk.forEach(function(chunk){\nthis.add(chunk);},\nthis);}else \n\nif(aChunk instanceof SourceNode||typeof aChunk===\"string\"){\nif(aChunk){\nthis.children.push(aChunk);}}else \n\n\n{\nthrow new TypeError(\n\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \"+aChunk);}\n\n\nreturn this;};\n\n\n\n\n\n\n\n\nSourceNode.prototype.prepend=function SourceNode_prepend(aChunk){\nif(Array.isArray(aChunk)){\nfor(var i=aChunk.length-1;i>=0;i--){\nthis.prepend(aChunk[i]);}}else \n\n\nif(aChunk instanceof SourceNode||typeof aChunk===\"string\"){\nthis.children.unshift(aChunk);}else \n\n{\nthrow new TypeError(\n\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \"+aChunk);}\n\n\nreturn this;};\n\n\n\n\n\n\n\n\n\nSourceNode.prototype.walk=function SourceNode_walk(aFn){\nvar chunk;\nfor(var i=0,len=this.children.length;i<len;i++){\nchunk=this.children[i];\nif(chunk instanceof SourceNode){\nchunk.walk(aFn);}else \n\n{\nif(chunk!==''){\naFn(chunk,{source:this.source,\nline:this.line,\ncolumn:this.column,\nname:this.name});}}}};\n\n\n\n\n\n\n\n\n\n\n\nSourceNode.prototype.join=function SourceNode_join(aSep){\nvar newChildren;\nvar i;\nvar len=this.children.length;\nif(len>0){\nnewChildren=[];\nfor(i=0;i<len-1;i++){\nnewChildren.push(this.children[i]);\nnewChildren.push(aSep);}\n\nnewChildren.push(this.children[i]);\nthis.children=newChildren;}\n\nreturn this;};\n\n\n\n\n\n\n\n\n\nSourceNode.prototype.replaceRight=function SourceNode_replaceRight(aPattern,aReplacement){\nvar lastChild=this.children[this.children.length-1];\nif(lastChild instanceof SourceNode){\nlastChild.replaceRight(aPattern,aReplacement);}else \n\nif(typeof lastChild==='string'){\nthis.children[this.children.length-1]=lastChild.replace(aPattern,aReplacement);}else \n\n{\nthis.children.push(''.replace(aPattern,aReplacement));}\n\nreturn this;};\n\n\n\n\n\n\n\n\n\nSourceNode.prototype.setSourceContent=\nfunction SourceNode_setSourceContent(aSourceFile,aSourceContent){\nthis.sourceContents[util.toSetString(aSourceFile)]=aSourceContent;};\n\n\n\n\n\n\n\n\nSourceNode.prototype.walkSourceContents=\nfunction SourceNode_walkSourceContents(aFn){\nfor(var i=0,len=this.children.length;i<len;i++){\nif(this.children[i] instanceof SourceNode){\nthis.children[i].walkSourceContents(aFn);}}\n\n\n\nvar sources=Object.keys(this.sourceContents);\nfor(var i=0,len=sources.length;i<len;i++){\naFn(util.fromSetString(sources[i]),this.sourceContents[sources[i]]);}};\n\n\n\n\n\n\n\nSourceNode.prototype.toString=function SourceNode_toString(){\nvar str=\"\";\nthis.walk(function(chunk){\nstr+=chunk;});\n\nreturn str;};\n\n\n\n\n\n\nSourceNode.prototype.toStringWithSourceMap=function SourceNode_toStringWithSourceMap(aArgs){\nvar generated={\ncode:\"\",\nline:1,\ncolumn:0};\n\nvar map=new SourceMapGenerator(aArgs);\nvar sourceMappingActive=false;\nvar lastOriginalSource=null;\nvar lastOriginalLine=null;\nvar lastOriginalColumn=null;\nvar lastOriginalName=null;\nthis.walk(function(chunk,original){\ngenerated.code+=chunk;\nif(original.source!==null&&\noriginal.line!==null&&\noriginal.column!==null){\nif(lastOriginalSource!==original.source||\nlastOriginalLine!==original.line||\nlastOriginalColumn!==original.column||\nlastOriginalName!==original.name){\nmap.addMapping({\nsource:original.source,\noriginal:{\nline:original.line,\ncolumn:original.column},\n\ngenerated:{\nline:generated.line,\ncolumn:generated.column},\n\nname:original.name});}\n\n\nlastOriginalSource=original.source;\nlastOriginalLine=original.line;\nlastOriginalColumn=original.column;\nlastOriginalName=original.name;\nsourceMappingActive=true;}else \nif(sourceMappingActive){\nmap.addMapping({\ngenerated:{\nline:generated.line,\ncolumn:generated.column}});\n\n\nlastOriginalSource=null;\nsourceMappingActive=false;}\n\nchunk.split('').forEach(function(ch){\nif(ch==='\\n'){\ngenerated.line++;\ngenerated.column=0;}else \n{\ngenerated.column++;}});});\n\n\n\nthis.walkSourceContents(function(sourceFile,sourceContent){\nmap.setSourceContent(sourceFile,sourceContent);});\n\n\nreturn {code:generated.code,map:map};};\n\n\nexports.SourceNode=SourceNode;});\n\n\n\n\n\nthis.sourceMap={\nSourceMapConsumer:require('source-map/source-map-consumer').SourceMapConsumer,\nSourceMapGenerator:require('source-map/source-map-generator').SourceMapGenerator,\nSourceNode:require('source-map/source-node').SourceNode};}\n});\n__d('react-native/Libraries/JavaScriptAppEngine/Initialization/source-map-url.js',function(global, require, module, exports) {  (\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction(){\nvar define=null;\n\n\n\n\nvoid (function(root,factory){\nif(typeof define===\"function\"&&define.amd){\ndefine(factory);}else \nif(typeof exports===\"object\"){\nmodule.exports=factory();}else \n{\nroot.sourceMappingURL=factory();}})(\n\nthis,function(){\n\nvar innerRegex=/[#@] sourceMappingURL=([^\\s'\"]*)/;\n\nvar regex=RegExp(\n\"(?:\"+\n\"/\\\\*\"+\n\"(?:\\\\s*\\r?\\n(?://)?)?\"+\n\"(?:\"+innerRegex.source+\")\"+\n\"\\\\s*\"+\n\"\\\\*/\"+\n\"|\"+\n\"//(?:\"+innerRegex.source+\")\"+\n\")\"+\n\"\\\\s*$\");\n\n\nreturn {\n\nregex:regex,\n_innerRegex:innerRegex,\n\ngetFrom:function(code){\nvar match=code.match(regex);\nreturn match?match[1]||match[2]||\"\":null;},\n\n\nexistsIn:function(code){\nreturn regex.test(code);},\n\n\nremoveFrom:function(code){\nreturn code.replace(regex,\"\");},\n\n\ninsertBefore:function(code,string){\nvar match=code.match(regex);\nif(match){\nreturn code.slice(0,match.index)+string+code.slice(match.index);}else \n{\nreturn code+string;}}};});})();\n});\n__d('parseErrorStack',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar stacktraceParser=require('stacktrace-parser/index.js');\n\nfunction resolveSourceMaps(sourceMapInstance,stackFrame){\ntry{\nvar orig=sourceMapInstance.originalPositionFor({\nline:stackFrame.lineNumber,\ncolumn:stackFrame.column});\n\nif(orig){\nstackFrame.file=orig.source;\nstackFrame.lineNumber=orig.line;\nstackFrame.column=orig.column;}}\n\ncatch(innerEx) {}}\n\n\n\nfunction parseErrorStack(e,sourceMapInstance){\nif(!e||!e.stack){\nreturn [];}\n\n\nvar stack=Array.isArray(e.stack)?e.stack:stacktraceParser.parse(e.stack);\n\nvar framesToPop=e.framesToPop||0;\nwhile(framesToPop--){\nstack.shift();}\n\n\nif(sourceMapInstance){\nstack.forEach(resolveSourceMaps.bind(null,sourceMapInstance));}\n\n\nreturn stack;}\n\n\nmodule.exports=parseErrorStack;\n});\n__d('stacktrace-parser/index.js',function(global, require, module, exports) {  module.exports=require('stacktrace-parser/lib/stacktrace-parser.js');\n});\n__d('stacktrace-parser/lib/stacktrace-parser.js',function(global, require, module, exports) {  var \n\nUNKNOWN_FUNCTION='<unknown>';\n\nvar StackTraceParser={\n\n\n\n\nparse:function(stackString){\nvar chrome=/^\\s*at (?:(?:(?:Anonymous function)?|((?:\\[object object\\])?\\S+(?: \\[as \\S+\\])?)) )?\\(?((?:file|http|https):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\ngecko=/^(?:\\s*(\\S*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i,\nnode=/^\\s*at (?:((?:\\[object object\\])?\\S+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i,\nlines=stackString.split('\\n'),\nstack=[],\nparts,\nelement;\n\nfor(var i=0,j=lines.length;i<j;++i){\nif(parts=gecko.exec(lines[i])){\nelement={\n'file':parts[3],\n'methodName':parts[1]||UNKNOWN_FUNCTION,\n'lineNumber':+parts[4],\n'column':parts[5]?+parts[5]:null};}else \n\nif(parts=chrome.exec(lines[i])){\nelement={\n'file':parts[2],\n'methodName':parts[1]||UNKNOWN_FUNCTION,\n'lineNumber':+parts[3],\n'column':parts[4]?+parts[4]:null};}else \n\nif(parts=node.exec(lines[i])){\nelement={\n'file':parts[2],\n'methodName':parts[1]||UNKNOWN_FUNCTION,\n'lineNumber':+parts[3],\n'column':parts[4]?+parts[4]:null};}else \n\n{\ncontinue;}\n\n\nstack.push(element);}\n\n\nreturn stack;}};\n\n\n\n\nmodule.exports=StackTraceParser;\n});\n__d('checkFlowAtRuntime',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nfunction checkFlowAtRuntime(){\nvar url=getPackagerURL();\nif(!url){\nreturn;}\n\nfetch(url+'flow/').\nthen(function(response){return response.json();}).\nthen(function(response){\nif(response.silentError){\nreturn;}\n\nthrow {\nmessage:response.message,\nstack:response.errors.map(function(err){\nreturn babelHelpers.extends({},\nerr,{\nmethodName:err.description,\nfile:err.filename});})};},\n\n\n\n\nfunction(){}).\n\n\ndone();}\n\n\nfunction getPackagerURL(){\nvar NativeModules=require('NativeModules');\nvar scriptURL=NativeModules&&\nNativeModules.SourceCode&&\nNativeModules.SourceCode.scriptURL||\n'';\n\n\n\n\nreturn getFirstOrNull(scriptURL.match(/^https?:\\/\\/[^/]+\\//));}\n\n\nfunction getFirstOrNull(ar){\nreturn ar?ar[0]:null;}\n\n\nmodule.exports=checkFlowAtRuntime;\n});\n__d('XMLHttpRequest',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar FormData=require('FormData');\nvar RCTNetworking=require('RCTNetworking');\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\n\nvar XMLHttpRequestBase=require('XMLHttpRequestBase');var \n\nXMLHttpRequest=(function(_XMLHttpRequestBase){babelHelpers.inherits(XMLHttpRequest,_XMLHttpRequestBase);\nfunction XMLHttpRequest(){babelHelpers.classCallCheck(this,XMLHttpRequest);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(XMLHttpRequest).call(this));\n\n\n_this.upload={};return _this;}babelHelpers.createClass(XMLHttpRequest,[{key:'sendImpl',value:function sendImpl(\n\n\nmethod,url,headers,data){\nif(typeof data==='string'){\ndata={string:data};}else \nif(data instanceof FormData){\ndata={formData:data.getParts()};}\n\nRCTNetworking.sendRequest(\n{\nmethod:method,\nurl:url,\ndata:data,\nheaders:headers,\nincrementalUpdates:this.onreadystatechange?true:false},\n\nthis.didCreateRequest.bind(this));}}]);return XMLHttpRequest;})(XMLHttpRequestBase);\n\n\n\n\nmodule.exports=XMLHttpRequest;\n});\n__d('FormData',function(global, require, module, exports) {  'use strict';var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFormData=(function(){\n\n\nfunction FormData(){babelHelpers.classCallCheck(this,FormData);\nthis._parts=[];}babelHelpers.createClass(FormData,[{key:'append',value:function append(\n\n\nkey,value){\n\n\n\n\n\nthis._parts.push([key,value]);}},{key:'getParts',value:function getParts()\n\n\n{\nreturn this._parts.map(function(_ref){var _ref2=babelHelpers.slicedToArray(_ref,2);var name=_ref2[0];var value=_ref2[1];\nvar contentDisposition='form-data; name=\"'+name+'\"';\nvar headers={'content-disposition':contentDisposition};\nif(typeof value==='string'){\nreturn {string:value,headers:headers,fieldName:name};}\n\n\n\n\n\n\nif(typeof value.name==='string'){\nheaders['content-disposition']+='; filename=\"'+value.name+'\"';}\n\nif(typeof value.type==='string'){\nheaders['content-type']=value.type;}\n\nreturn babelHelpers.extends({},value,{headers:headers,fieldName:name});});}}]);return FormData;})();\n\n\n\n\nmodule.exports=FormData;\n});\n__d('RCTNetworking',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar RCTNetworkingNative=require('NativeModules').Networking;var \n\n\n\n\nRCTNetworking=(function(){function RCTNetworking(){babelHelpers.classCallCheck(this,RCTNetworking);}babelHelpers.createClass(RCTNetworking,null,[{key:'sendRequest',value:function sendRequest(\n\nquery,callback){\nRCTNetworkingNative.sendRequest(query,callback);}},{key:'abortRequest',value:function abortRequest(\n\n\nrequestId){\nRCTNetworkingNative.cancelRequest(requestId);}}]);return RCTNetworking;})();\n\n\n\n\nmodule.exports=RCTNetworking;\n});\n__d('RCTDeviceEventEmitter',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventEmitter=require('EventEmitter');\n\nvar RCTDeviceEventEmitter=new EventEmitter();\n\nmodule.exports=RCTDeviceEventEmitter;\n});\n__d('EventEmitter',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEmitterSubscription=require('EmitterSubscription');\nvar ErrorUtils=require('ErrorUtils');\nvar EventSubscriptionVendor=require('EventSubscriptionVendor');\nvar emptyFunction=require('emptyFunction');\nvar invariant=require('invariant');var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEventEmitter=(function(){\n\n\n\nfunction EventEmitter(){babelHelpers.classCallCheck(this,EventEmitter);\nthis._subscriber=new EventSubscriptionVendor();}babelHelpers.createClass(EventEmitter,[{key:'addListener',value:function addListener(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\neventType,listener,context){\nreturn this._subscriber.addSubscription(\neventType,\nnew EmitterSubscription(this._subscriber,listener,context));}},{key:'once',value:function once(\n\n\n\n\n\n\n\n\n\n\n\n\neventType,listener,context){\nvar emitter=this;\nreturn this.addListener(eventType,function(){\nemitter.removeCurrentListener();\nlistener.apply(context,arguments);});}},{key:'removeAllListeners',value:function removeAllListeners(\n\n\n\n\n\n\n\n\n\n\neventType){\nthis._subscriber.removeAllSubscriptions(eventType);}},{key:'removeCurrentListener',value:function removeCurrentListener()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{\ninvariant(\n!!this._currentSubscription,\n'Not in an emitting cycle; there is no current subscription');\n\nthis._subscriber.removeSubscription(this._currentSubscription);}},{key:'listeners',value:function listeners(\n\n\n\n\n\n\n\n\n\neventType){\nvar subscriptions=this._subscriber.getSubscriptionsForType(eventType);\nreturn subscriptions?\nsubscriptions.filter(emptyFunction.thatReturnsTrue).map(\nfunction(subscription){\nreturn subscription.listener;}):\n\n[];}},{key:'emit',value:function emit(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\neventType){\nvar subscriptions=this._subscriber.getSubscriptionsForType(eventType);\nif(subscriptions){\nvar keys=Object.keys(subscriptions);\nfor(var ii=0;ii<keys.length;ii++){\nvar key=keys[ii];\nvar subscription=subscriptions[key];\n\n\nif(subscription){\nthis._currentSubscription=subscription;\n\nErrorUtils.applyWithGuard(\nsubscription.listener,\nsubscription.context,\nArray.prototype.slice.call(arguments,1),\nnull,\n'EventEmitter:'+eventType);}}\n\n\n\nthis._currentSubscription=null;}}}]);return EventEmitter;})();\n\n\n\n\nmodule.exports=EventEmitter;\n});\n__d('EmitterSubscription',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventSubscription=require('EventSubscription');var \n\n\n\n\nEmitterSubscription=(function(_EventSubscription){babelHelpers.inherits(EmitterSubscription,_EventSubscription);\n\n\n\n\n\n\n\n\n\nfunction EmitterSubscription(subscriber,listener,context){babelHelpers.classCallCheck(this,EmitterSubscription);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(EmitterSubscription).call(this,\nsubscriber));\n_this.listener=listener;\n_this.context=context;return _this;}return EmitterSubscription;})(EventSubscription);\n\n\n\nmodule.exports=EmitterSubscription;\n});\n__d('EventSubscription',function(global, require, module, exports) {  'use strict';var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEventSubscription=(function(){\n\n\n\n\n\nfunction EventSubscription(subscriber){babelHelpers.classCallCheck(this,EventSubscription);\nthis.subscriber=subscriber;}babelHelpers.createClass(EventSubscription,[{key:'remove',value:function remove()\n\n\n\n\n\n{\nthis.subscriber.removeSubscription(this);}}]);return EventSubscription;})();\n\n\n\nmodule.exports=EventSubscription;\n});\n__d('EventSubscriptionVendor',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');var \n\n\n\n\n\nEventSubscriptionVendor=(function(){\n\nfunction EventSubscriptionVendor(){babelHelpers.classCallCheck(this,EventSubscriptionVendor);\nthis._subscriptionsForType={};\nthis._currentSubscription=null;}babelHelpers.createClass(EventSubscriptionVendor,[{key:'addSubscription',value:function addSubscription(\n\n\n\n\n\n\n\n\n\neventType,subscription){\ninvariant(\nsubscription.subscriber===this,\n'The subscriber of the subscription is incorrectly set.');\nif(!this._subscriptionsForType[eventType]){\nthis._subscriptionsForType[eventType]=[];}\n\nvar key=this._subscriptionsForType[eventType].length;\nthis._subscriptionsForType[eventType].push(subscription);\nsubscription.eventType=eventType;\nsubscription.key=key;\nreturn subscription;}},{key:'removeAllSubscriptions',value:function removeAllSubscriptions(\n\n\n\n\n\n\n\n\neventType){\nif(eventType===undefined){\nthis._subscriptionsForType={};}else \n{\ndelete this._subscriptionsForType[eventType];}}},{key:'removeSubscription',value:function removeSubscription(\n\n\n\n\n\n\n\n\n\nsubscription){\nvar eventType=subscription.eventType;\nvar key=subscription.key;\n\nvar subscriptionsForType=this._subscriptionsForType[eventType];\nif(subscriptionsForType){\ndelete subscriptionsForType[key];}}},{key:'getSubscriptionsForType',value:function getSubscriptionsForType(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\neventType){\nreturn this._subscriptionsForType[eventType];}}]);return EventSubscriptionVendor;})();\n\n\n\nmodule.exports=EventSubscriptionVendor;\n});\n__d('XMLHttpRequestBase',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTNetworking=require('RCTNetworking');\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');var \n\n\n\n\nXMLHttpRequestBase=(function(){\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction XMLHttpRequestBase(){babelHelpers.classCallCheck(this,XMLHttpRequestBase);\nthis.UNSENT=0;\nthis.OPENED=1;\nthis.HEADERS_RECEIVED=2;\nthis.LOADING=3;\nthis.DONE=4;\n\nthis.onreadystatechange=null;\nthis.onload=null;\nthis.upload=undefined;\n\nthis._reset();\nthis._method=null;\nthis._url=null;\nthis._aborted=false;}babelHelpers.createClass(XMLHttpRequestBase,[{key:'_reset',value:function _reset()\n\n\n{\nthis.readyState=this.UNSENT;\nthis.responseHeaders=undefined;\nthis.responseText='';\nthis.status=0;\n\nthis._requestId=null;\n\nthis._headers={};\nthis._sent=false;\nthis._lowerCaseResponseHeaders={};\n\nthis._clearSubscriptions();}},{key:'didCreateRequest',value:function didCreateRequest(\n\n\nrequestId){var _this=this;\nthis._requestId=requestId;\nthis._subscriptions.push(RCTDeviceEventEmitter.addListener(\n'didSendNetworkData',\nfunction(args){var _didUploadProgress2;return (_didUploadProgress2=_this._didUploadProgress).call.apply(_didUploadProgress2,[_this].concat(babelHelpers.toConsumableArray(args)));}));\n\nthis._subscriptions.push(RCTDeviceEventEmitter.addListener(\n'didReceiveNetworkResponse',\nfunction(args){var _didReceiveResponse2;return (_didReceiveResponse2=_this._didReceiveResponse).call.apply(_didReceiveResponse2,[_this].concat(babelHelpers.toConsumableArray(args)));}));\n\nthis._subscriptions.push(RCTDeviceEventEmitter.addListener(\n'didReceiveNetworkData',\nfunction(args){var _didReceiveData2;return (_didReceiveData2=_this._didReceiveData).call.apply(_didReceiveData2,[_this].concat(babelHelpers.toConsumableArray(args)));}));\n\nthis._subscriptions.push(RCTDeviceEventEmitter.addListener(\n'didCompleteNetworkResponse',\nfunction(args){var _didCompleteResponse2;return (_didCompleteResponse2=_this._didCompleteResponse).call.apply(_didCompleteResponse2,[_this].concat(babelHelpers.toConsumableArray(args)));}));}},{key:'_didUploadProgress',value:function _didUploadProgress(\n\n\n\nrequestId,progress,total){\nif(requestId===this._requestId&&this.upload&&this.upload.onprogress){\nvar event={\nlengthComputable:true,\nloaded:progress,\ntotal:total};\n\nthis.upload.onprogress(event);}}},{key:'_didReceiveResponse',value:function _didReceiveResponse(\n\n\n\nrequestId,status,responseHeaders){\nif(requestId===this._requestId){\nthis.status=status;\nthis.setResponseHeaders(responseHeaders);\nthis.setReadyState(this.HEADERS_RECEIVED);}}},{key:'_didReceiveData',value:function _didReceiveData(\n\n\n\nrequestId,responseText){\nif(requestId===this._requestId){\nif(!this.responseText){\nthis.responseText=responseText;}else \n{\nthis.responseText+=responseText;}\n\nthis.setReadyState(this.LOADING);}}},{key:'_didCompleteResponse',value:function _didCompleteResponse(\n\n\n\nrequestId,error){\nif(requestId===this._requestId){\nif(error){\nthis.responseText=error;}\n\nthis._clearSubscriptions();\nthis._requestId=null;\nthis.setReadyState(this.DONE);}}},{key:'_clearSubscriptions',value:function _clearSubscriptions()\n\n\n\n{\n(this._subscriptions||[]).forEach(function(sub){\nsub.remove();});\n\nthis._subscriptions=[];}},{key:'getAllResponseHeaders',value:function getAllResponseHeaders()\n\n\n{\nif(!this.responseHeaders){\n\nreturn null;}\n\nvar headers=this.responseHeaders||{};\nreturn Object.keys(headers).map(function(headerName){\nreturn headerName+': '+headers[headerName];}).\njoin('\\n');}},{key:'getResponseHeader',value:function getResponseHeader(\n\n\nheader){\nvar value=this._lowerCaseResponseHeaders[header.toLowerCase()];\nreturn value!==undefined?value:null;}},{key:'setRequestHeader',value:function setRequestHeader(\n\n\nheader,value){\nif(this.readyState!==this.OPENED){\nthrow new Error('Request has not been opened');}\n\nthis._headers[header.toLowerCase()]=value;}},{key:'open',value:function open(\n\n\nmethod,url,async){\n\nif(this.readyState!==this.UNSENT){\nthrow new Error('Cannot open, already sending');}\n\nif(async!==undefined&&!async){\n\nthrow new Error('Synchronous http requests are not supported');}\n\nthis._reset();\nthis._method=method;\nthis._url=url;\nthis._aborted=false;\nthis.setReadyState(this.OPENED);}},{key:'sendImpl',value:function sendImpl(\n\n\nmethod,url,headers,data){\nthrow new Error('Subclass must define sendImpl method');}},{key:'send',value:function send(\n\n\ndata){\nif(this.readyState!==this.OPENED){\nthrow new Error('Request has not been opened');}\n\nif(this._sent){\nthrow new Error('Request has already been sent');}\n\nthis._sent=true;\nthis.sendImpl(this._method,this._url,this._headers,data);}},{key:'abort',value:function abort()\n\n\n{\nthis._aborted=true;\nif(this._requestId){\nRCTNetworking.abortRequest(this._requestId);}\n\n\n\nif(!(this.readyState===this.UNSENT||\nthis.readyState===this.OPENED&&!this._sent||\nthis.readyState===this.DONE)){\nthis._reset();\nthis.setReadyState(this.DONE);}\n\n\nthis._reset();}},{key:'setResponseHeaders',value:function setResponseHeaders(\n\n\nresponseHeaders){\nthis.responseHeaders=responseHeaders||null;\nvar headers=responseHeaders||{};\nthis._lowerCaseResponseHeaders=\nObject.keys(headers).reduce(function(lcaseHeaders,headerName){\nlcaseHeaders[headerName.toLowerCase()]=headers[headerName];\nreturn lcaseHeaders;},\n{});}},{key:'setReadyState',value:function setReadyState(\n\n\nnewState){\nthis.readyState=newState;\n\nvar onreadystatechange=this.onreadystatechange;\nif(onreadystatechange){\n\n\nonreadystatechange(null);}\n\nif(newState===this.DONE&&!this._aborted){\nthis._sendLoad();}}},{key:'_sendLoad',value:function _sendLoad()\n\n\n\n{\n\nvar onload=this.onload;\nif(onload){\n\n\nonload(null);}}}]);return XMLHttpRequestBase;})();\n\n\n\n\nmodule.exports=XMLHttpRequestBase;\n});\n__d('fetch',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar self={};\n\n/**\n * Copyright (c) 2014 GitHub, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n * @preserve-header\n */\n(function(){\n'use strict';\n\nif(self.fetch){\nreturn;}\n\n\nfunction normalizeName(name){\nif(typeof name!=='string'){\nname=String(name);}\n\nif(/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)){\nthrow new TypeError('Invalid character in header field name');}\n\nreturn name.toLowerCase();}\n\n\nfunction normalizeValue(value){\nif(typeof value!=='string'){\nvalue=String(value);}\n\nreturn value;}\n\n\nfunction Headers(headers){\nthis.map={};\n\nif(headers instanceof Headers){\nheaders.forEach(function(value,name){\nthis.append(name,value);},\nthis);}else \n\nif(headers){\nObject.getOwnPropertyNames(headers).forEach(function(name){\nthis.append(name,headers[name]);},\nthis);}}\n\n\n\nHeaders.prototype.append=function(name,value){\nname=normalizeName(name);\nvalue=normalizeValue(value);\nvar list=this.map[name];\nif(!list){\nlist=[];\nthis.map[name]=list;}\n\nlist.push(value);};\n\n\nHeaders.prototype['delete']=function(name){\ndelete this.map[normalizeName(name)];};\n\n\nHeaders.prototype.get=function(name){\nvar values=this.map[normalizeName(name)];\nreturn values?values[0]:null;};\n\n\nHeaders.prototype.getAll=function(name){\nreturn this.map[normalizeName(name)]||[];};\n\n\nHeaders.prototype.has=function(name){\nreturn this.map.hasOwnProperty(normalizeName(name));};\n\n\nHeaders.prototype.set=function(name,value){\nthis.map[normalizeName(name)]=[normalizeValue(value)];};\n\n\nHeaders.prototype.forEach=function(callback,thisArg){\nObject.getOwnPropertyNames(this.map).forEach(function(name){\nthis.map[name].forEach(function(value){\ncallback.call(thisArg,value,name,this);},\nthis);},\nthis);};\n\n\nfunction consumed(body){\nif(body.bodyUsed){\nreturn Promise.reject(new TypeError('Already read'));}\n\nbody.bodyUsed=true;}\n\n\nfunction fileReaderReady(reader){\nreturn new Promise(function(resolve,reject){\nreader.onload=function(){\nresolve(reader.result);};\n\nreader.onerror=function(){\nreject(reader.error);};});}\n\n\n\n\nfunction readBlobAsArrayBuffer(blob){\nvar reader=new FileReader();\nreader.readAsArrayBuffer(blob);\nreturn fileReaderReady(reader);}\n\n\nfunction readBlobAsText(blob){\nvar reader=new FileReader();\nreader.readAsText(blob);\nreturn fileReaderReady(reader);}\n\n\nvar support={\nblob:typeof FileReader==='function'&&typeof Blob==='function'&&(function(){\ntry{\nnew Blob();\nreturn true;}\ncatch(e) {\nreturn false;}})(),\n\n\nformData:typeof FormData==='function'};\n\n\nfunction Body(){\nthis.bodyUsed=false;\n\n\nthis._initBody=function(body){\nthis._bodyInit=body;\nif(typeof body==='string'){\nthis._bodyText=body;}else \nif(support.blob&&Blob.prototype.isPrototypeOf(body)){\nthis._bodyBlob=body;}else \nif(support.formData&&FormData.prototype.isPrototypeOf(body)){\nthis._bodyFormData=body;}else \nif(!body){\nthis._bodyText='';}else \n{\nthrow new Error('unsupported BodyInit type');}};\n\n\n\nif(support.blob){\nthis.blob=function(){\nvar rejected=consumed(this);\nif(rejected){\nreturn rejected;}\n\n\nif(this._bodyBlob){\nreturn Promise.resolve(this._bodyBlob);}else \nif(this._bodyFormData){\nthrow new Error('could not read FormData body as blob');}else \n{\nreturn Promise.resolve(new Blob([this._bodyText]));}};\n\n\n\nthis.arrayBuffer=function(){\nreturn this.blob().then(readBlobAsArrayBuffer);};\n\n\nthis.text=function(){\nvar rejected=consumed(this);\nif(rejected){\nreturn rejected;}\n\n\nif(this._bodyBlob){\nreturn readBlobAsText(this._bodyBlob);}else \nif(this._bodyFormData){\nthrow new Error('could not read FormData body as text');}else \n{\nreturn Promise.resolve(this._bodyText);}};}else \n\n\n{\nthis.text=function(){\nvar rejected=consumed(this);\nreturn rejected?rejected:Promise.resolve(this._bodyText);};}\n\n\n\nif(support.formData){\nthis.formData=function(){\nreturn this.text().then(decode);};}\n\n\n\nthis.json=function(){\nreturn this.text().then(JSON.parse);};\n\n\nreturn this;}\n\n\n\nvar methods=['DELETE','GET','HEAD','OPTIONS','POST','PUT'];\n\nfunction normalizeMethod(method){\nvar upcased=method.toUpperCase();\nreturn methods.indexOf(upcased)>-1?upcased:method;}\n\n\nfunction Request(input,options){\noptions=options||{};\nvar body=options.body;\nif(Request.prototype.isPrototypeOf(input)){\nif(input.bodyUsed){\nthrow new TypeError('Already read');}\n\nthis.url=input.url;\nthis.credentials=input.credentials;\nif(!options.headers){\nthis.headers=new Headers(input.headers);}\n\nthis.method=input.method;\nthis.mode=input.mode;\nif(!body){\nbody=input._bodyInit;\ninput.bodyUsed=true;}}else \n\n{\nthis.url=input;}\n\n\nthis.credentials=options.credentials||this.credentials||'omit';\nif(options.headers||!this.headers){\nthis.headers=new Headers(options.headers);}\n\nthis.method=normalizeMethod(options.method||this.method||'GET');\nthis.mode=options.mode||this.mode||null;\nthis.referrer=null;\n\nif((this.method==='GET'||this.method==='HEAD')&&body){\nthrow new TypeError('Body not allowed for GET or HEAD requests');}\n\nthis._initBody(body);}\n\n\nRequest.prototype.clone=function(){\nreturn new Request(this);};\n\n\nfunction decode(body){\nvar form=new FormData();\nbody.trim().split('&').forEach(function(bytes){\nif(bytes){\nvar split=bytes.split('=');\nvar name=split.shift().replace(/\\+/g,' ');\nvar value=split.join('=').replace(/\\+/g,' ');\nform.append(decodeURIComponent(name),decodeURIComponent(value));}});\n\n\nreturn form;}\n\n\nfunction headers(xhr){\nvar head=new Headers();\nvar pairs=xhr.getAllResponseHeaders().trim().split('\\n');\npairs.forEach(function(header){\nvar split=header.trim().split(':');\nvar key=split.shift().trim();\nvar value=split.join(':').trim();\nhead.append(key,value);});\n\nreturn head;}\n\n\nBody.call(Request.prototype);\n\nfunction Response(bodyInit,options){\nif(!options){\noptions={};}\n\n\nthis._initBody(bodyInit);\nthis.type='default';\nthis.url=null;\nthis.status=options.status;\nthis.ok=this.status>=200&&this.status<300;\nthis.statusText=options.statusText;\nthis.headers=options.headers instanceof Headers?options.headers:new Headers(options.headers);\nthis.url=options.url||'';}\n\n\nResponse.prototype.clone=function(){\nreturn new Response(this._bodyInit,{\nstatus:this.status,\nstatusText:this.statusText,\nheaders:new Headers(this.headers),\nurl:this.url});};\n\n\n\nBody.call(Response.prototype);\n\nself.Headers=Headers;\nself.Request=Request;\nself.Response=Response;\n\nself.fetch=function(input,init){\nvar request;\nif(Request.prototype.isPrototypeOf(input)&&!init){\nrequest=input;}else \n{\nrequest=new Request(input,init);}\n\n\nreturn new Promise(function(resolve,reject){\nvar xhr=new XMLHttpRequest();\n\nfunction responseURL(){\nif('responseURL' in xhr){\nreturn xhr.responseURL;}\n\n\n\nif(/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())){\nreturn xhr.getResponseHeader('X-Request-URL');}\n\n\nreturn;}\n\n\nxhr.onload=function(){\nvar status=xhr.status===1223?204:xhr.status;\nif(status<100||status>599){\nreject(new TypeError('Network request failed'));\nreturn;}\n\nvar options={\nstatus:status,\nstatusText:xhr.statusText,\nheaders:headers(xhr),\nurl:responseURL()};\n\nvar body='response' in xhr?xhr.response:xhr.responseText;\nresolve(new Response(body,options));};\n\n\nxhr.onerror=function(){\nreject(new TypeError('Network request failed'));};\n\n\nxhr.open(request.method,request.url,true);\n\nif(request.credentials==='include'){\nxhr.withCredentials=true;}\n\n\nif('responseType' in xhr&&support.blob){\nxhr.responseType='blob';}\n\n\nrequest.headers.forEach(function(value,name){\nxhr.setRequestHeader(name,value);});\n\n\nxhr.send(typeof request._bodyInit==='undefined'?null:request._bodyInit);});};\n\n\nself.fetch.polyfill=true;})();\n\n\n\n\nmodule.exports=self;\n});\n__d('Geolocation',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar RCTLocationObserver=require('NativeModules').LocationObserver;\n\nvar invariant=require('invariant');\nvar logError=require('logError');\nvar warning=require('warning');\n\nvar subscriptions=[];\n\nvar updatesEnabled=false;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Geolocation={\n\n\n\n\n\ngetCurrentPosition:function(\ngeo_success,\ngeo_error,\ngeo_options)\n{\ninvariant(\ntypeof geo_success==='function',\n'Must provide a valid geo_success callback.');\n\nRCTLocationObserver.getCurrentPosition(\ngeo_options||{},\ngeo_success,\ngeo_error||logError);},\n\n\n\n\n\n\n\nwatchPosition:function(success,error,options){\nif(!updatesEnabled){\nRCTLocationObserver.startObserving(options||{});\nupdatesEnabled=true;}\n\nvar watchID=subscriptions.length;\nsubscriptions.push([\nRCTDeviceEventEmitter.addListener(\n'geolocationDidChange',\nsuccess),\n\nerror?RCTDeviceEventEmitter.addListener(\n'geolocationError',\nerror):\nnull]);\n\nreturn watchID;},\n\n\nclearWatch:function(watchID){\nvar sub=subscriptions[watchID];\nif(!sub){\n\n\nreturn;}\n\n\nsub[0].remove();\n\nvar sub1=sub[1];sub1&&sub1.remove();\nsubscriptions[watchID]=undefined;\nvar noWatchers=true;\nfor(var ii=0;ii<subscriptions.length;ii++){\nif(subscriptions[ii]){\nnoWatchers=false;}}\n\n\nif(noWatchers){\nGeolocation.stopObserving();}},\n\n\n\nstopObserving:function(){\nif(updatesEnabled){\nRCTLocationObserver.stopObserving();\nupdatesEnabled=false;\nfor(var ii=0;ii<subscriptions.length;ii++){\nvar sub=subscriptions[ii];\nif(sub){\nwarning('Called stopObserving with existing subscriptions.');\nsub[0].remove();\n\nvar sub1=sub[1];sub1&&sub1.remove();}}\n\n\nsubscriptions=[];}}};\n\n\n\n\nmodule.exports=Geolocation;\n});\n__d('logError',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar logError=function(){\nif(arguments.length===1&&arguments[0] instanceof Error){\nvar err=arguments[0];\nconsole.error('Error: \"'+err.message+'\".  Stack:\\n'+err.stack);}else \n{\nconsole.error.apply(console,arguments);}};\n\n\n\nmodule.exports=logError;\n});\n__d('WebSocket',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar RCTWebSocketModule=require('NativeModules').WebSocketModule;\n\nvar Platform=require('Platform');\nvar WebSocketBase=require('WebSocketBase');\nvar WebSocketEvent=require('WebSocketEvent');\n\nvar WebSocketId=0;\nvar CLOSE_NORMAL=1000;var \n\n\n\n\n\n\nWebSocket=(function(_WebSocketBase){babelHelpers.inherits(WebSocket,_WebSocketBase);function WebSocket(){babelHelpers.classCallCheck(this,WebSocket);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(WebSocket).apply(this,arguments));}babelHelpers.createClass(WebSocket,[{key:'connectToSocketImpl',value:function connectToSocketImpl(\n\n\n\nurl){\nthis._socketId=WebSocketId++;\n\nRCTWebSocketModule.connect(url,this._socketId);\n\nthis._registerEvents(this._socketId);}},{key:'closeConnectionImpl',value:function closeConnectionImpl(\n\n\ncode,reason){\nthis._closeWebSocket(this._socketId,code,reason);}},{key:'cancelConnectionImpl',value:function cancelConnectionImpl()\n\n\n{\nthis._closeWebSocket(this._socketId);}},{key:'sendStringImpl',value:function sendStringImpl(\n\n\nmessage){\nRCTWebSocketModule.send(message,this._socketId);}},{key:'sendArrayBufferImpl',value:function sendArrayBufferImpl()\n\n\n{\n\nconsole.warn('Sending ArrayBuffers is not yet supported');}},{key:'_closeWebSocket',value:function _closeWebSocket(\n\n\nid,code,reason){\nif(Platform.OS==='android'){\n\n\n\nvar statusCode=typeof code==='number'?code:CLOSE_NORMAL;\nvar closeReason=typeof reason==='string'?reason:'';\nRCTWebSocketModule.close(statusCode,closeReason,id);}else \n{\nRCTWebSocketModule.close(id);}}},{key:'_unregisterEvents',value:function _unregisterEvents()\n\n\n\n{\nthis._subs.forEach(function(e){return e.remove();});\nthis._subs=[];}},{key:'_registerEvents',value:function _registerEvents(\n\n\nid){var _this2=this;\nthis._subs=[\nRCTDeviceEventEmitter.addListener('websocketMessage',function(ev){\nif(ev.id!==id){\nreturn;}\n\nvar event=new WebSocketEvent('message',{\ndata:ev.data});\n\n_this2.onmessage&&_this2.onmessage(event);\n_this2.dispatchEvent(event);}),\n\nRCTDeviceEventEmitter.addListener('websocketOpen',function(ev){\nif(ev.id!==id){\nreturn;}\n\n_this2.readyState=_this2.OPEN;\nvar event=new WebSocketEvent('open');\n_this2.onopen&&_this2.onopen(event);\n_this2.dispatchEvent(event);}),\n\nRCTDeviceEventEmitter.addListener('websocketClosed',function(ev){\nif(ev.id!==id){\nreturn;}\n\n_this2.readyState=_this2.CLOSED;\nvar event=new WebSocketEvent('close');\nevent.code=ev.code;\nevent.reason=ev.reason;\n_this2.onclose&&_this2.onclose(event);\n_this2.dispatchEvent(event);\n_this2._unregisterEvents();\n_this2.close();}),\n\nRCTDeviceEventEmitter.addListener('websocketFailed',function(ev){\nif(ev.id!==id){\nreturn;}\n\nvar event=new WebSocketEvent('error');\nevent.message=ev.message;\n_this2.onerror&&_this2.onerror(event);\n_this2.dispatchEvent(event);\n_this2._unregisterEvents();\n_this2.close();})];}}]);return WebSocket;})(WebSocketBase);\n\n\n\n\n\nmodule.exports=WebSocket;\n});\n__d('Platform',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Platform={\nOS:'ios'};\n\n\nmodule.exports=Platform;\n});\n__d('WebSocketBase',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar EventTarget=require('event-target-shim/lib/event-target.js');var \n\n\n\n\nWebSocketBase=(function(_EventTarget){babelHelpers.inherits(WebSocketBase,_EventTarget);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction WebSocketBase(url,protocols){babelHelpers.classCallCheck(this,WebSocketBase);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(WebSocketBase).call(this));\n\n_this.CONNECTING=0;\n_this.OPEN=1;\n_this.CLOSING=2;\n_this.CLOSED=3;\n\nif(!protocols){\nprotocols=[];}\n\n\n_this.readyState=_this.CONNECTING;\n_this.connectToSocketImpl(url);return _this;}babelHelpers.createClass(WebSocketBase,[{key:'close',value:function close()\n\n\n{\nif(this.readyState===this.CLOSING||\nthis.readyState===this.CLOSED){\nreturn;}\n\n\nif(this.readyState===this.CONNECTING){\nthis.cancelConnectionImpl();}\n\n\nthis.readyState=this.CLOSING;\nthis.closeConnectionImpl();}},{key:'send',value:function send(\n\n\ndata){\nif(this.readyState===this.CONNECTING){\nthrow new Error('INVALID_STATE_ERR');}\n\n\nif(typeof data==='string'){\nthis.sendStringImpl(data);}else \nif(data instanceof ArrayBuffer){\nthis.sendArrayBufferImpl(data);}else \n{\nthrow new Error('Not supported data type');}}},{key:'closeConnectionImpl',value:function closeConnectionImpl()\n\n\n\n{\nthrow new Error('Subclass must define closeConnectionImpl method');}},{key:'connectToSocketImpl',value:function connectToSocketImpl()\n\n\n{\nthrow new Error('Subclass must define connectToSocketImpl method');}},{key:'cancelConnectionImpl',value:function cancelConnectionImpl()\n\n\n{\nthrow new Error('Subclass must define cancelConnectionImpl method');}},{key:'sendStringImpl',value:function sendStringImpl()\n\n\n{\nthrow new Error('Subclass must define sendStringImpl method');}},{key:'sendArrayBufferImpl',value:function sendArrayBufferImpl()\n\n\n{\nthrow new Error('Subclass must define sendArrayBufferImpl method');}}]);return WebSocketBase;})(EventTarget);\n\n\n\nWebSocketBase.CONNECTING=0;\nWebSocketBase.OPEN=1;\nWebSocketBase.CLOSING=2;\nWebSocketBase.CLOSED=3;\n\nmodule.exports=WebSocketBase;\n});\n__d('event-target-shim/lib/event-target.js',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\nvar Commons=require(\"event-target-shim/lib/commons.js\");\nvar CustomEventTarget=require(\"event-target-shim/lib/custom-event-target.js\");\nvar EventWrapper=require(\"event-target-shim/lib/event-wrapper.js\");\nvar LISTENERS=Commons.LISTENERS;\nvar CAPTURE=Commons.CAPTURE;\nvar BUBBLE=Commons.BUBBLE;\nvar ATTRIBUTE=Commons.ATTRIBUTE;\nvar newNode=Commons.newNode;\nvar defineCustomEventTarget=CustomEventTarget.defineCustomEventTarget;\nvar createEventWrapper=EventWrapper.createEventWrapper;\nvar STOP_IMMEDIATE_PROPAGATION_FLAG=\nEventWrapper.STOP_IMMEDIATE_PROPAGATION_FLAG;\n\n\n\n\n\n\n\n\n\n\n\nvar HAS_EVENTTARGET_INTERFACE=\ntypeof window!==\"undefined\"&&\ntypeof window.EventTarget!==\"undefined\";\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventTarget=module.exports=function EventTarget(){\nif(this instanceof EventTarget){\n\n\n\n\n\n\n\n\n\nObject.defineProperty(this,LISTENERS,{value:Object.create(null)});}else \n\nif(arguments.length===1&&Array.isArray(arguments[0])){\nreturn defineCustomEventTarget(EventTarget,arguments[0]);}else \n\nif(arguments.length>0){\nvar types=Array(arguments.length);\nfor(var i=0;i<arguments.length;++i){\ntypes[i]=arguments[i];}\n\n\n\n\n\n\n\nreturn defineCustomEventTarget(EventTarget,types);}else \n\n{\nthrow new TypeError(\"Cannot call a class as a function\");}};\n\n\n\nEventTarget.prototype=Object.create(\n(HAS_EVENTTARGET_INTERFACE?window.EventTarget:Object).prototype,\n{\nconstructor:{\nvalue:EventTarget,\nwritable:true,\nconfigurable:true},\n\n\naddEventListener:{\nvalue:function addEventListener(type,listener,capture){\nif(listener==null){\nreturn false;}\n\nif(typeof listener!==\"function\"&&typeof listener!==\"object\"){\nthrow new TypeError(\"\\\"listener\\\" is not an object.\");}\n\n\nvar kind=capture?CAPTURE:BUBBLE;\nvar node=this[LISTENERS][type];\nif(node==null){\nthis[LISTENERS][type]=newNode(listener,kind);\nreturn true;}\n\n\nvar prev=null;\nwhile(node!=null){\nif(node.listener===listener&&node.kind===kind){\n\nreturn false;}\n\nprev=node;\nnode=node.next;}\n\n\nprev.next=newNode(listener,kind);\nreturn true;},\n\nconfigurable:true,\nwritable:true},\n\n\nremoveEventListener:{\nvalue:function removeEventListener(type,listener,capture){\nif(listener==null){\nreturn false;}\n\n\nvar kind=capture?CAPTURE:BUBBLE;\nvar prev=null;\nvar node=this[LISTENERS][type];\nwhile(node!=null){\nif(node.listener===listener&&node.kind===kind){\nif(prev==null){\nthis[LISTENERS][type]=node.next;}else \n\n{\nprev.next=node.next;}\n\nreturn true;}\n\n\nprev=node;\nnode=node.next;}\n\n\nreturn false;},\n\nconfigurable:true,\nwritable:true},\n\n\ndispatchEvent:{\nvalue:function dispatchEvent(event){\n\nvar node=this[LISTENERS][event.type];\nif(node==null){\nreturn true;}\n\n\n\nvar wrapped=createEventWrapper(event,this);\n\n\n\nwhile(node!=null){\nif(typeof node.listener===\"function\"){\nnode.listener.call(this,wrapped);}else \n\nif(node.kind!==ATTRIBUTE&&typeof node.listener.handleEvent===\"function\"){\nnode.listener.handleEvent(wrapped);}\n\n\nif(wrapped[STOP_IMMEDIATE_PROPAGATION_FLAG]){\nbreak;}\n\nnode=node.next;}\n\n\nreturn !wrapped.defaultPrevented;},\n\nconfigurable:true,\nwritable:true}});\n});\n__d('event-target-shim/lib/commons.js',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar createUniqueKey=exports.createUniqueKey=typeof Symbol!==\"undefined\"?\nSymbol:\nfunction createUniqueKey(name){\nreturn \"[[\"+name+\"_\"+Math.random().toFixed(8).slice(2)+\"]]\";};\n\n\n\n\n\n\n\n\nexports.LISTENERS=createUniqueKey(\"listeners\");\n\n\n\n\n\n\n\nexports.CAPTURE=1;\n\n\n\n\n\n\n\nexports.BUBBLE=2;\n\n\n\n\n\n\n\nexports.ATTRIBUTE=3;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexports.newNode=function newNode(listener,kind){\nreturn {listener:listener,kind:kind,next:null};};\n});\n__d('event-target-shim/lib/custom-event-target.js',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\nvar Commons=require(\"event-target-shim/lib/commons.js\");\nvar LISTENERS=Commons.LISTENERS;\nvar ATTRIBUTE=Commons.ATTRIBUTE;\nvar newNode=Commons.newNode;\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getAttributeListener(eventTarget,type){\nvar node=eventTarget[LISTENERS][type];\nwhile(node!=null){\nif(node.kind===ATTRIBUTE){\nreturn node.listener;}\n\nnode=node.next;}\n\nreturn null;}\n\n\n\n\n\n\n\n\n\n\nfunction setAttributeListener(eventTarget,type,listener){\nif(typeof listener!==\"function\"&&typeof listener!==\"object\"){\nlistener=null;}\n\n\nvar prev=null;\nvar node=eventTarget[LISTENERS][type];\nwhile(node!=null){\nif(node.kind===ATTRIBUTE){\n\nif(prev==null){\neventTarget[LISTENERS][type]=node.next;}else \n\n{\nprev.next=node.next;}}else \n\n\n{\nprev=node;}\n\n\nnode=node.next;}\n\n\n\nif(listener!=null){\nif(prev==null){\neventTarget[LISTENERS][type]=newNode(listener,ATTRIBUTE);}else \n\n{\nprev.next=newNode(listener,ATTRIBUTE);}}}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexports.defineCustomEventTarget=function(EventTargetBase,types){\nfunction EventTarget(){\nEventTargetBase.call(this);}\n\n\nvar descripter={\nconstructor:{\nvalue:EventTarget,\nconfigurable:true,\nwritable:true}};\n\n\n\ntypes.forEach(function(type){\ndescripter[\"on\"+type]={\nget:function(){return getAttributeListener(this,type);},\nset:function(listener){setAttributeListener(this,type,listener);},\nconfigurable:true,\nenumerable:true};});\n\n\n\nEventTarget.prototype=Object.create(EventTargetBase.prototype,descripter);\n\nreturn EventTarget;};\n});\n__d('event-target-shim/lib/event-wrapper.js',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\nvar createUniqueKey=require(\"event-target-shim/lib/commons.js\").createUniqueKey;\n\n\n\n\n\n\n\n\n\n\n\nvar STOP_IMMEDIATE_PROPAGATION_FLAG=\ncreateUniqueKey(\"stop_immediate_propagation_flag\");\n\n\n\n\n\n\n\nvar CANCELED_FLAG=createUniqueKey(\"canceled_flag\");\n\n\n\n\n\n\n\nvar ORIGINAL_EVENT=createUniqueKey(\"original_event\");\n\n\n\n\n\n\n\nvar wrapperPrototypeDefinition=Object.freeze({\nstopPropagation:Object.freeze({\nvalue:function stopPropagation(){\nvar e=this[ORIGINAL_EVENT];\nif(typeof e.stopPropagation===\"function\"){\ne.stopPropagation();}},\n\n\nwritable:true,\nconfigurable:true}),\n\n\nstopImmediatePropagation:Object.freeze({\nvalue:function stopImmediatePropagation(){\nthis[STOP_IMMEDIATE_PROPAGATION_FLAG]=true;\n\nvar e=this[ORIGINAL_EVENT];\nif(typeof e.stopImmediatePropagation===\"function\"){\ne.stopImmediatePropagation();}},\n\n\nwritable:true,\nconfigurable:true}),\n\n\npreventDefault:Object.freeze({\nvalue:function preventDefault(){\nif(this.cancelable===true){\nthis[CANCELED_FLAG]=true;}\n\n\nvar e=this[ORIGINAL_EVENT];\nif(typeof e.preventDefault===\"function\"){\ne.preventDefault();}},\n\n\nwritable:true,\nconfigurable:true}),\n\n\ndefaultPrevented:Object.freeze({\nget:function defaultPrevented(){return this[CANCELED_FLAG];},\nenumerable:true,\nconfigurable:true})});\n\n\n\n\n\n\n\nexports.STOP_IMMEDIATE_PROPAGATION_FLAG=STOP_IMMEDIATE_PROPAGATION_FLAG;\n\n\n\n\n\n\n\n\n\n\n\n\nexports.createEventWrapper=function createEventWrapper(event,eventTarget){\nvar timeStamp=\ntypeof event.timeStamp===\"number\"?event.timeStamp:Date.now();\n\nvar propertyDefinition={\ntype:{value:event.type,enumerable:true},\ntarget:{value:eventTarget,enumerable:true},\ncurrentTarget:{value:eventTarget,enumerable:true},\neventPhase:{value:2,enumerable:true},\nbubbles:{value:Boolean(event.bubbles),enumerable:true},\ncancelable:{value:Boolean(event.cancelable),enumerable:true},\ntimeStamp:{value:timeStamp,enumerable:true},\nisTrusted:{value:false,enumerable:true}};\n\npropertyDefinition[STOP_IMMEDIATE_PROPAGATION_FLAG]={value:false,writable:true};\npropertyDefinition[CANCELED_FLAG]={value:false,writable:true};\npropertyDefinition[ORIGINAL_EVENT]={value:event};\n\n\nif(typeof event.detail!==\"undefined\"){\npropertyDefinition.detail={value:event.detail,enumerable:true};}\n\n\nreturn Object.create(\nObject.create(event,wrapperPrototypeDefinition),\npropertyDefinition);};\n});\n__d('WebSocketEvent',function(global, require, module, exports) {  'use strict';var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nWebSocketEvent=\nfunction WebSocketEvent(type,eventInitDict){babelHelpers.classCallCheck(this,WebSocketEvent);\nthis.type=type.toString();\nbabelHelpers.extends(this,eventInitDict);};\n\n\n\nmodule.exports=WebSocketEvent;\n});\n__d('setupDevtools',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nfunction setupDevtools(){\nvar messageListeners=[];\nvar closeListeners=[];\nvar ws=new window.WebSocket('ws://localhost:8097/devtools');\n\nvar FOR_BACKEND={\nresolveRNStyle:require('flattenStyle'),\nwall:{\nlisten:function(fn){\nmessageListeners.push(fn);},\n\nonClose:function(fn){\ncloseListeners.push(fn);},\n\nsend:function(data){\nws.send(JSON.stringify(data));}}};\n\n\n\nws.onclose=function(){\nsetTimeout(setupDevtools,200);\ncloseListeners.forEach(function(fn){return fn();});};\n\nws.onerror=function(error){\nsetTimeout(setupDevtools,200);\ncloseListeners.forEach(function(fn){return fn();});};\n\nws.onopen=function(){\ntryToConnect();};\n\n\nfunction tryToConnect(){\nws.send('attach:agent');\nvar _interval=setInterval(function(){return ws.send('attach:agent');},500);\nws.onmessage=function(evt){\nif(evt.data.indexOf('eval:')===0){\nclearInterval(_interval);\ninitialize(evt.data.slice('eval:'.length));}};}\n\n\n\n\nfunction initialize(text){\ntry{\n\neval(text);}\ncatch(e) {\nconsole.error('Failed to eval: '+e.message);\nreturn;}\n\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\nCurrentOwner:require('ReactCurrentOwner'),\nInstanceHandles:require('ReactInstanceHandles'),\nMount:require('ReactNativeMount'),\nReconciler:require('ReactReconciler'),\nTextComponent:require('ReactNativeTextComponent')});\n\nws.onmessage=handleMessage;}\n\n\nfunction handleMessage(evt){\n\n\nvar data;\ntry{\ndata=JSON.parse(evt.data);}\ncatch(e) {\nreturn console.error('failed to parse json: '+evt.data);}\n\n\nif(data.$close||data.$error){\ncloseListeners.forEach(function(fn){return fn();});\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.emit('shutdown');\ntryToConnect();\nreturn;}\n\nif(data.$open){\nreturn;}\n\nmessageListeners.forEach(function(fn){\ntry{\nfn(data);}\ncatch(e) {\n\n\n\nconsole.log(data);\nthrow e;}});}}\n\n\n\n\n\nmodule.exports=setupDevtools;\n});\n__d('flattenStyle',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar StyleSheetRegistry=require('StyleSheetRegistry');\nvar invariant=require('invariant');\n\n\n\nfunction getStyle(style){\nif(typeof style==='number'){\nreturn StyleSheetRegistry.getStyleByID(style);}\n\nreturn style;}\n\n\nfunction flattenStyle(style){\nif(!style){\nreturn undefined;}\n\ninvariant(style!==true,'style may be false but not true');\n\nif(!Array.isArray(style)){\nreturn getStyle(style);}\n\n\nvar result={};\nfor(var i=0;i<style.length;++i){\nvar computedStyle=flattenStyle(style[i]);\nif(computedStyle){\nfor(var key in computedStyle){\nresult[key]=computedStyle[key];\n\nif(__DEV__){\nvar value=computedStyle[key];}}}}\n\n\n\n\nreturn result;}\n\n\nmodule.exports=flattenStyle;\n});\n__d('StyleSheetTypes',function(global, require, module, exports) {  'use strict';\n});\n__d('StyleSheetRegistry',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar styles={};\nvar uniqueID=1;\nvar emptyStyle={};var \n\nStyleSheetRegistry=(function(){function StyleSheetRegistry(){babelHelpers.classCallCheck(this,StyleSheetRegistry);}babelHelpers.createClass(StyleSheetRegistry,null,[{key:'registerStyle',value:function registerStyle(\nstyle){\nvar id=++uniqueID;\nif(__DEV__){\nObject.freeze(style);}\n\nstyles[id]=style;\nreturn id;}},{key:'getStyleByID',value:function getStyleByID(\n\n\nid){\nif(!id){\n\n\nreturn emptyStyle;}\n\n\nvar style=styles[id];\nif(!style){\nconsole.warn('Invalid style with id `'+id+'`. Skipping ...');\nreturn emptyStyle;}\n\nreturn style;}}]);return StyleSheetRegistry;})();\n\n\n\nmodule.exports=StyleSheetRegistry;\n});\n__d('ReactCurrentOwner',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactCurrentOwner={\n\n\n\n\n\ncurrent:null};\n\n\n\nmodule.exports=ReactCurrentOwner;\n});\n__d('ReactInstanceHandles',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactRootIndex=require('ReactRootIndex');\n\nvar invariant=require('invariant');\n\nvar SEPARATOR='.';\nvar SEPARATOR_LENGTH=SEPARATOR.length;\n\n\n\n\nvar MAX_TREE_DEPTH=10000;\n\n\n\n\n\n\n\n\nfunction getReactRootIDString(index){\nreturn SEPARATOR+index.toString(36);}\n\n\n\n\n\n\n\n\n\n\nfunction isBoundary(id,index){\nreturn id.charAt(index)===SEPARATOR||index===id.length;}\n\n\n\n\n\n\n\n\n\nfunction isValidID(id){\nreturn id===''||\nid.charAt(0)===SEPARATOR&&id.charAt(id.length-1)!==SEPARATOR;}\n\n\n\n\n\n\n\n\n\n\n\nfunction isAncestorIDOf(ancestorID,descendantID){\nreturn (\ndescendantID.indexOf(ancestorID)===0&&\nisBoundary(descendantID,ancestorID.length));}\n\n\n\n\n\n\n\n\n\n\nfunction getParentID(id){\nreturn id?id.substr(0,id.lastIndexOf(SEPARATOR)):'';}\n\n\n\n\n\n\n\n\n\n\n\nfunction getNextDescendantID(ancestorID,destinationID){\ninvariant(\nisValidID(ancestorID)&&isValidID(destinationID),\n'getNextDescendantID(%s, %s): Received an invalid React DOM ID.',\nancestorID,\ndestinationID);\n\ninvariant(\nisAncestorIDOf(ancestorID,destinationID),\n'getNextDescendantID(...): React has made an invalid assumption about '+\n'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.',\nancestorID,\ndestinationID);\n\nif(ancestorID===destinationID){\nreturn ancestorID;}\n\n\n\nvar start=ancestorID.length+SEPARATOR_LENGTH;\nvar i;\nfor(i=start;i<destinationID.length;i++){\nif(isBoundary(destinationID,i)){\nbreak;}}\n\n\nreturn destinationID.substr(0,i);}\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getFirstCommonAncestorID(oneID,twoID){\nvar minLength=Math.min(oneID.length,twoID.length);\nif(minLength===0){\nreturn '';}\n\nvar lastCommonMarkerIndex=0;\n\nfor(var i=0;i<=minLength;i++){\nif(isBoundary(oneID,i)&&isBoundary(twoID,i)){\nlastCommonMarkerIndex=i;}else \nif(oneID.charAt(i)!==twoID.charAt(i)){\nbreak;}}\n\n\nvar longestCommonID=oneID.substr(0,lastCommonMarkerIndex);\ninvariant(\nisValidID(longestCommonID),\n'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s',\noneID,\ntwoID,\nlongestCommonID);\n\nreturn longestCommonID;}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction traverseParentPath(start,stop,cb,arg,skipFirst,skipLast){\nstart=start||'';\nstop=stop||'';\ninvariant(\nstart!==stop,\n'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.',\nstart);\n\nvar traverseUp=isAncestorIDOf(stop,start);\ninvariant(\ntraverseUp||isAncestorIDOf(start,stop),\n'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do '+\n'not have a parent path.',\nstart,\nstop);\n\n\nvar depth=0;\nvar traverse=traverseUp?getParentID:getNextDescendantID;\nfor(var id=start;;id=traverse(id,stop)){\nvar ret;\nif((!skipFirst||id!==start)&&(!skipLast||id!==stop)){\nret=cb(id,traverseUp,arg);}\n\nif(ret===false||id===stop){\n\nbreak;}\n\ninvariant(\ndepth++<MAX_TREE_DEPTH,\n'traverseParentPath(%s, %s, ...): Detected an infinite loop while '+\n'traversing the React DOM ID tree. This may be due to malformed IDs: %s',\nstart,stop,id);}}\n\n\n\n\n\n\n\n\n\n\n\nvar ReactInstanceHandles={\n\n\n\n\n\ncreateReactRootID:function(){\nreturn getReactRootIDString(ReactRootIndex.createReactRootIndex());},\n\n\n\n\n\n\n\n\n\n\ncreateReactID:function(rootID,name){\nreturn rootID+name;},\n\n\n\n\n\n\n\n\n\n\ngetReactRootIDFromNodeID:function(id){\nif(id&&id.charAt(0)===SEPARATOR&&id.length>1){\nvar index=id.indexOf(SEPARATOR,1);\nreturn index>-1?id.substr(0,index):id;}\n\nreturn null;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntraverseEnterLeave:function(leaveID,enterID,cb,upArg,downArg){\nvar ancestorID=getFirstCommonAncestorID(leaveID,enterID);\nif(ancestorID!==leaveID){\ntraverseParentPath(leaveID,ancestorID,cb,upArg,false,true);}\n\nif(ancestorID!==enterID){\ntraverseParentPath(ancestorID,enterID,cb,downArg,true,false);}},\n\n\n\n\n\n\n\n\n\n\n\n\n\ntraverseTwoPhase:function(targetID,cb,arg){\nif(targetID){\ntraverseParentPath('',targetID,cb,arg,true,false);\ntraverseParentPath(targetID,'',cb,arg,false,true);}},\n\n\n\n\n\n\ntraverseTwoPhaseSkipTarget:function(targetID,cb,arg){\nif(targetID){\ntraverseParentPath('',targetID,cb,arg,true,true);\ntraverseParentPath(targetID,'',cb,arg,true,true);}},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntraverseAncestors:function(targetID,cb,arg){\ntraverseParentPath('',targetID,cb,arg,true,false);},\n\n\ngetFirstCommonAncestorID:getFirstCommonAncestorID,\n\n\n\n\n\n_getNextDescendantID:getNextDescendantID,\n\nisAncestorIDOf:isAncestorIDOf,\n\nSEPARATOR:SEPARATOR};\n\n\n\nmodule.exports=ReactInstanceHandles;\n});\n__d('ReactRootIndex',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactRootIndexInjection={\n\n\n\ninjectCreateReactRootIndex:function(_createReactRootIndex){\nReactRootIndex.createReactRootIndex=_createReactRootIndex;}};\n\n\n\nvar ReactRootIndex={\ncreateReactRootIndex:null,\ninjection:ReactRootIndexInjection};\n\n\nmodule.exports=ReactRootIndex;\n});\n__d('ReactNativeMount',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTUIManager=require('NativeModules').UIManager;\n\nvar ReactElement=require('ReactElement');\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\nvar ReactNativeViewPool=require('ReactNativeViewPool');\nvar ReactPerf=require('ReactPerf');\nvar ReactReconciler=require('ReactReconciler');\nvar ReactUpdateQueue=require('ReactUpdateQueue');\nvar ReactUpdates=require('ReactUpdates');\n\nvar emptyObject=require('emptyObject');\nvar instantiateReactComponent=require('instantiateReactComponent');\nvar shouldUpdateReactComponent=require('shouldUpdateReactComponent');\n\nfunction instanceNumberToChildRootID(rootNodeID,instanceNumber){\nreturn rootNodeID+'['+instanceNumber+']';}\n\n\n\n\n\n\n\nvar TopLevelWrapper=function(){};\nTopLevelWrapper.prototype.isReactComponent={};\nif(__DEV__){\nTopLevelWrapper.displayName='TopLevelWrapper';}\n\nTopLevelWrapper.prototype.render=function(){\n\nreturn this.props;};\n\n\n\n\n\n\n\n\n\n\nfunction mountComponentIntoNode(\ncomponentInstance,\nrootID,\ncontainer,\ntransaction){\nvar markup=ReactReconciler.mountComponent(\ncomponentInstance,rootID,transaction,emptyObject);\n\ncomponentInstance._renderedComponent._topLevelWrapper=componentInstance;\nReactNativeMount._mountImageIntoNode(markup,container);}\n\n\n\n\n\n\n\n\n\nfunction batchedMountComponentIntoNode(\ncomponentInstance,\nrootID,\ncontainer){\nvar transaction=ReactUpdates.ReactReconcileTransaction.getPooled();\ntransaction.perform(\nmountComponentIntoNode,\nnull,\ncomponentInstance,\nrootID,\ncontainer,\ntransaction);\n\nReactUpdates.ReactReconcileTransaction.release(transaction);}\n\n\n\n\n\n\nvar ReactNativeMount={\ninstanceCount:0,\n\n_instancesByContainerID:{},\n\n\nfindNodeHandle:require('findNodeHandle'),\nnativeTagToRootNodeID:function(nativeTag){\nreturn ReactNativeTagHandles.tagToRootNodeID[nativeTag];},\n\n\n\n\n\n\nrenderComponent:function(\nnextElement,\ncontainerTag,\ncallback)\n{\nvar nextWrappedElement=new ReactElement(\nTopLevelWrapper,\nnull,\nnull,\nnull,\nnull,\nnull,\nnextElement);\n\n\nvar topRootNodeID=ReactNativeTagHandles.tagToRootNodeID[containerTag];\nif(topRootNodeID){\nvar prevComponent=ReactNativeMount._instancesByContainerID[topRootNodeID];\nif(prevComponent){\nvar prevWrappedElement=prevComponent._currentElement;\nvar prevElement=prevWrappedElement.props;\nif(shouldUpdateReactComponent(prevElement,nextElement)){\nReactUpdateQueue.enqueueElementInternal(prevComponent,nextWrappedElement);\nif(callback){\nReactUpdateQueue.enqueueCallbackInternal(prevComponent,callback);}\n\nreturn prevComponent;}else \n{\nReactNativeMount.unmountComponentAtNode(containerTag);}}}\n\n\n\n\nif(!ReactNativeTagHandles.reactTagIsNativeTopRootID(containerTag)){\nconsole.error('You cannot render into anything but a top root');\nreturn;}\n\n\nvar topRootNodeID=ReactNativeTagHandles.allocateRootNodeIDForTag(containerTag);\nReactNativeTagHandles.associateRootNodeIDWithMountedNodeHandle(\ntopRootNodeID,\ncontainerTag);\n\n\nvar instance=instantiateReactComponent(nextWrappedElement);\nReactNativeMount._instancesByContainerID[topRootNodeID]=instance;\n\nvar childRootNodeID=instanceNumberToChildRootID(\ntopRootNodeID,\nReactNativeMount.instanceCount++);\n\n\n\n\n\n\nReactUpdates.batchedUpdates(\nbatchedMountComponentIntoNode,\ninstance,\nchildRootNodeID,\ntopRootNodeID);\n\nvar component=instance.getPublicInstance();\nif(callback){\ncallback.call(component);}\n\nreturn component;},\n\n\n\n\n\n\n_mountImageIntoNode:ReactPerf.measure(\n\n'ReactComponentBrowserEnvironment',\n'mountImageIntoNode',\nfunction(mountImage,containerID){\n\n\nReactNativeTagHandles.associateRootNodeIDWithMountedNodeHandle(\nmountImage.rootNodeID,\nmountImage.tag);\n\nvar addChildTags=[mountImage.tag];\nvar addAtIndices=[0];\nRCTUIManager.manageChildren(\nReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(containerID),\nnull,\nnull,\naddChildTags,\naddAtIndices,\nnull);}),\n\n\n\n\n\n\n\n\n\n\n\n\nunmountComponentAtNodeAndRemoveContainer:function(\ncontainerTag)\n{\nReactNativeMount.unmountComponentAtNode(containerTag);\n\nRCTUIManager.removeRootView(containerTag);\nReactNativeViewPool.clearPoolForRootView(containerTag);},\n\n\n\n\n\n\n\nunmountComponentAtNode:function(containerTag){\nif(!ReactNativeTagHandles.reactTagIsNativeTopRootID(containerTag)){\nconsole.error('You cannot render into anything but a top root');\nreturn false;}\n\n\nvar containerID=ReactNativeTagHandles.tagToRootNodeID[containerTag];\nvar instance=ReactNativeMount._instancesByContainerID[containerID];\nif(!instance){\nreturn false;}\n\nReactNativeMount.unmountComponentFromNode(instance,containerID);\ndelete ReactNativeMount._instancesByContainerID[containerID];\nreturn true;},\n\n\n\n\n\n\n\n\n\n\n\nunmountComponentFromNode:function(\ninstance,\ncontainerID)\n{\n\nReactReconciler.unmountComponent(instance);\nvar containerTag=\nReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(containerID);\nRCTUIManager.removeSubviewsFromContainerWithID(containerTag);},\n\n\ngetNode:function(rootNodeID){\nreturn ReactNativeTagHandles.rootNodeIDToTag[rootNodeID];},\n\n\ngetID:function(nativeTag){\nreturn ReactNativeTagHandles.tagToRootNodeID[nativeTag];}};\n\n\n\nReactNativeMount.renderComponent=ReactPerf.measure(\n'ReactMount',\n'_renderNewRootComponent',\nReactNativeMount.renderComponent);\n\n\nmodule.exports=ReactNativeMount;\n});\n__d('ReactElement',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactCurrentOwner=require('ReactCurrentOwner');\n\nvar assign=require('Object.assign');\nvar canDefineProperty=require('canDefineProperty');\n\n\n\nvar REACT_ELEMENT_TYPE=\ntypeof Symbol==='function'&&Symbol.for&&Symbol.for('react.element')||\n0xeac7;\n\nvar RESERVED_PROPS={\nkey:true,\nref:true,\n__self:true,\n__source:true};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactElement=function(type,key,ref,self,source,owner,props){\nvar element={\n\n$$typeof:REACT_ELEMENT_TYPE,\n\n\ntype:type,\nkey:key,\nref:ref,\nprops:props,\n\n\n_owner:owner};\n\n\nif(__DEV__){\n\n\n\n\nelement._store={};\n\n\n\n\n\nif(canDefineProperty){\nObject.defineProperty(element._store,'validated',{\nconfigurable:false,\nenumerable:false,\nwritable:true,\nvalue:false});\n\n\nObject.defineProperty(element,'_self',{\nconfigurable:false,\nenumerable:false,\nwritable:false,\nvalue:self});\n\n\n\nObject.defineProperty(element,'_source',{\nconfigurable:false,\nenumerable:false,\nwritable:false,\nvalue:source});}else \n\n{\nelement._store.validated=false;\nelement._self=self;\nelement._source=source;}\n\nObject.freeze(element.props);\nObject.freeze(element);}\n\n\nreturn element;};\n\n\nReactElement.createElement=function(type,config,children){\nvar propName;\n\n\nvar props={};\n\nvar key=null;\nvar ref=null;\nvar self=null;\nvar source=null;\n\nif(config!=null){\nref=config.ref===undefined?null:config.ref;\nkey=config.key===undefined?null:''+config.key;\nself=config.__self===undefined?null:config.__self;\nsource=config.__source===undefined?null:config.__source;\n\nfor(propName in config){\nif(config.hasOwnProperty(propName)&&\n!RESERVED_PROPS.hasOwnProperty(propName)){\nprops[propName]=config[propName];}}}\n\n\n\n\n\n\nvar childrenLength=arguments.length-2;\nif(childrenLength===1){\nprops.children=children;}else \nif(childrenLength>1){\nvar childArray=Array(childrenLength);\nfor(var i=0;i<childrenLength;i++){\nchildArray[i]=arguments[i+2];}\n\nprops.children=childArray;}\n\n\n\nif(type&&type.defaultProps){\nvar defaultProps=type.defaultProps;\nfor(propName in defaultProps){\nif(typeof props[propName]==='undefined'){\nprops[propName]=defaultProps[propName];}}}\n\n\n\n\nreturn ReactElement(\ntype,\nkey,\nref,\nself,\nsource,\nReactCurrentOwner.current,\nprops);};\n\n\n\nReactElement.createFactory=function(type){\nvar factory=ReactElement.createElement.bind(null,type);\n\n\n\n\n\nfactory.type=type;\nreturn factory;};\n\n\nReactElement.cloneAndReplaceKey=function(oldElement,newKey){\nvar newElement=ReactElement(\noldElement.type,\nnewKey,\noldElement.ref,\noldElement._self,\noldElement._source,\noldElement._owner,\noldElement.props);\n\n\nreturn newElement;};\n\n\nReactElement.cloneAndReplaceProps=function(oldElement,newProps){\nvar newElement=ReactElement(\noldElement.type,\noldElement.key,\noldElement.ref,\noldElement._self,\noldElement._source,\noldElement._owner,\nnewProps);\n\n\nif(__DEV__){\n\nnewElement._store.validated=oldElement._store.validated;}\n\n\nreturn newElement;};\n\n\nReactElement.cloneElement=function(element,config,children){\nvar propName;\n\n\nvar props=assign({},element.props);\n\n\nvar key=element.key;\nvar ref=element.ref;\n\nvar self=element._self;\n\n\n\nvar source=element._source;\n\n\nvar owner=element._owner;\n\nif(config!=null){\nif(config.ref!==undefined){\n\nref=config.ref;\nowner=ReactCurrentOwner.current;}\n\nif(config.key!==undefined){\nkey=''+config.key;}\n\n\nfor(propName in config){\nif(config.hasOwnProperty(propName)&&\n!RESERVED_PROPS.hasOwnProperty(propName)){\nprops[propName]=config[propName];}}}\n\n\n\n\n\n\nvar childrenLength=arguments.length-2;\nif(childrenLength===1){\nprops.children=children;}else \nif(childrenLength>1){\nvar childArray=Array(childrenLength);\nfor(var i=0;i<childrenLength;i++){\nchildArray[i]=arguments[i+2];}\n\nprops.children=childArray;}\n\n\nreturn ReactElement(\nelement.type,\nkey,\nref,\nself,\nsource,\nowner,\nprops);};\n\n\n\n\n\n\n\n\nReactElement.isValidElement=function(object){\nreturn (\ntypeof object==='object'&&\nobject!==null&&\nobject.$$typeof===REACT_ELEMENT_TYPE);};\n\n\n\nmodule.exports=ReactElement;\n});\n__d('canDefineProperty',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar canDefineProperty=false;\nif(__DEV__){\ntry{\nObject.defineProperty({},'x',{get:function(){}});\ncanDefineProperty=true;}\ncatch(x) {}}\n\n\n\n\nmodule.exports=canDefineProperty;\n});\n__d('ReactNativeTagHandles',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar INITIAL_TAG_COUNT=1;\nvar NATIVE_TOP_ROOT_ID_SEPARATOR='{TOP_LEVEL}';\nvar ReactNativeTagHandles={\ntagsStartAt:INITIAL_TAG_COUNT,\ntagCount:INITIAL_TAG_COUNT,\n\nallocateTag:function(){\n\nwhile(this.reactTagIsNativeTopRootID(ReactNativeTagHandles.tagCount)){\nReactNativeTagHandles.tagCount++;}\n\nvar tag=ReactNativeTagHandles.tagCount;\nReactNativeTagHandles.tagCount++;\nreturn tag;},\n\n\n\n\n\n\n\n\n\n\n\nassociateRootNodeIDWithMountedNodeHandle:function(\nrootNodeID,\ntag)\n{\nwarning(rootNodeID&&tag,'Root node or tag is null when associating');\nif(rootNodeID&&tag){\nReactNativeTagHandles.tagToRootNodeID[tag]=rootNodeID;\nReactNativeTagHandles.rootNodeIDToTag[rootNodeID]=tag;}},\n\n\n\nallocateRootNodeIDForTag:function(tag){\ninvariant(\nthis.reactTagIsNativeTopRootID(tag),\n'Expect a native root tag, instead got ',tag);\n\nreturn '.r['+tag+']'+NATIVE_TOP_ROOT_ID_SEPARATOR;},\n\n\nreactTagIsNativeTopRootID:function(reactTag){\n\nreturn reactTag%10===1;},\n\n\ngetNativeTopRootIDFromNodeID:function(nodeID){\nif(!nodeID){\nreturn null;}\n\nvar index=nodeID.indexOf(NATIVE_TOP_ROOT_ID_SEPARATOR);\nif(index===-1){\nreturn null;}\n\nreturn nodeID.substr(0,index+NATIVE_TOP_ROOT_ID_SEPARATOR.length);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmostRecentMountedNodeHandleForRootNodeID:function(\nrootNodeID)\n{\nreturn ReactNativeTagHandles.rootNodeIDToTag[rootNodeID];},\n\n\ntagToRootNodeID:[],\n\nrootNodeIDToTag:{}};\n\n\nmodule.exports=ReactNativeTagHandles;\n});\n__d('ReactNativeViewPool',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\nvar ReactNativeAttributePayload=require('ReactNativeAttributePayload');\nvar RCTUIManager=require('NativeModules').UIManager;\nvar Platform=require('Platform');\n\nvar deepFreezeAndThrowOnMutationInDev=require('deepFreezeAndThrowOnMutationInDev');\nvar emptyFunction=require('emptyFunction');\nvar flattenStyle=require('flattenStyle');\n\nvar EMPTY_POOL=[[]];\n\nvar ENABLED=!!RCTUIManager.dropViews;\n\n\nvar TAGS_IDX=0;\nvar KEYS_IDX=1;\nvar PROPS_IDX=2;\n\nvar _pools={};\nvar _poolSize={};\n\nvar layoutOnlyProps=RCTUIManager.layoutOnlyProps;\n\nfunction isCollapsableForStyle(style){\nvar flatStyle=flattenStyle(style);\nfor(var styleKey in flatStyle){\nif(layoutOnlyProps[styleKey]!==true){\nreturn false;}}\n\n\nreturn true;}\n\n\nfunction isCollapsable(viewRef){\nvar props=viewRef._currentElement.props;\nif(props.collapsable!==undefined&&!props.collapsable){\nreturn false;}\n\nvar validAttributes=viewRef.viewConfig.validAttributes;\nfor(var propKey in props){\nif(!!validAttributes[propKey]&&propKey!=='style'&&propKey!=='collapsable'){\nreturn false;}}\n\n\nreturn !props.style||isCollapsableForStyle(viewRef._currentElement.props.style);}\n\n\nfunction enqueueCreate(viewRef,rootTag){\nvar tag=ReactNativeTagHandles.allocateTag();\n\nif(__DEV__){\ndeepFreezeAndThrowOnMutationInDev(viewRef._currentElement.props);}\n\n\nvar updatePayload=ReactNativeAttributePayload.create(\nviewRef._currentElement.props,\nviewRef.viewConfig.validAttributes);\n\n\nRCTUIManager.createView(\ntag,\nviewRef.viewConfig.uiViewClassName,\nrootTag,\nupdatePayload);\n\n\nreturn tag;}\n\n\nfunction getViewTag(viewRef){\nreturn ReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(viewRef._rootNodeID);}\n\n\nfunction getViewProps(viewRef){\nreturn viewRef._currentElement.props;}\n\n\nfunction getViewValidAttributes(viewRef){\nreturn viewRef.viewConfig.validAttributes;}\n\n\nfunction getRootViewTag(viewRef){\nvar nativeTopRootID=ReactNativeTagHandles.getNativeTopRootIDFromNodeID(viewRef._rootNodeID);\nreturn ReactNativeTagHandles.rootNodeIDToTag[nativeTopRootID];}\n\n\nfunction poolKey(viewRef){\nvar viewClass=viewRef.viewConfig.uiViewClassName;\nif(Platform.OS==='android'&&viewClass==='RCTView'){\nreturn isCollapsable(viewRef)?'CollapsedRCTView':'RCTView';}\n\nreturn viewClass;}var \n\n\nReactNativeViewPool=(function(){\nfunction ReactNativeViewPool(){babelHelpers.classCallCheck(this,ReactNativeViewPool);\nthis._pool={};\nthis._poolQueue={};\nthis._addToPool=[[],[],[]];\nthis._viewsToDelete=[];\nif(__DEV__){\nthis._recycleStats={};\nthis._deleteStats={};}}babelHelpers.createClass(ReactNativeViewPool,[{key:'onReconcileTransactionClose',value:function onReconcileTransactionClose()\n\n\n\n{\n\nif(this._viewsToDelete.length>0){\nRCTUIManager.dropViews(this._viewsToDelete);}\n\nvar addToPoolTags=this._addToPool[TAGS_IDX];\nvar addToPoolKeys=this._addToPool[KEYS_IDX];\nvar addToPoolProps=this._addToPool[PROPS_IDX];\nfor(var i=addToPoolTags.length-1;i>=0;i--){\nvar nativeTag=addToPoolTags[i];\nvar key=addToPoolKeys[i];\nvar props=addToPoolProps[i];\nvar views=this._pool[key]||[[],[]];\nviews[0].push(nativeTag);\nviews[1].push(props);\nthis._pool[key]=views;}\n\nthis._viewsToDelete=[];\nthis._addToPool=[[],[],[]];\nthis._poolQueue={};}},{key:'acquire',value:function acquire(\n\n\nviewRef,rootTag){\nvar key=poolKey(viewRef);\nif((this._pool[key]||EMPTY_POOL)[0].length){\nvar views=this._pool[key];\nvar nativeTag=views[0].pop();\nvar oldProps=views[1].pop();\nvar updatePayload=ReactNativeAttributePayload.diff(\noldProps,\ngetViewProps(viewRef),\ngetViewValidAttributes(viewRef));\n\nif(__DEV__){\nthis._recycleStats[key]=(this._recycleStats[key]||0)+1;}\n\n\nif(updatePayload){\nRCTUIManager.updateView(\nnativeTag,\nviewRef.viewConfig.uiViewClassName,\nupdatePayload);}\n\n\nreturn nativeTag;}else \n{\n\nreturn enqueueCreate(viewRef,rootTag);}}},{key:'release',value:function release(\n\n\n\nviewRef){\nvar key=poolKey(viewRef);\nvar nativeTag=getViewTag(viewRef);\nvar pooledCount=(this._pool[key]||EMPTY_POOL)[0].length+(this._poolQueue[key]||0);\nif(pooledCount<(_poolSize[key]||0)){\n\n\n\nthis._addToPool[TAGS_IDX].push(nativeTag);\nthis._addToPool[KEYS_IDX].push(key);\nthis._addToPool[PROPS_IDX].push(getViewProps(viewRef));\nthis._poolQueue[key]=(this._poolQueue[key]||0)+1;}else \n{\nif(__DEV__){\nif(_poolSize[key]){\nthis._deleteStats[key]=(this._deleteStats[key]||0)+1;}}\n\n\nthis._viewsToDelete.push(nativeTag);}}},{key:'clear',value:function clear()\n\n\n\n{\nfor(var key in this._pool){\nvar poolTags=this._pool[key][0];\nfor(var i=poolTags.length-1;i>=0;i--){\nthis._viewsToDelete.push(poolTags[i]);}}\n\n\nvar addToPoolTags=this._addToPool[0];\nfor(var i=addToPoolTags.length-1;i>=0;i--){\nthis._viewsToDelete.push(addToPoolTags[i]);}\n\nthis._addToPool=[[],[],[]];\nthis.onReconcileTransactionClose();}},{key:'printStats',value:function printStats()\n\n\n{\nif(__DEV__){\nconsole.log('Stats',this._recycleStats,this._deleteStats);}}}]);return ReactNativeViewPool;})();\n\n\n\n\nmodule.exports={\n\nonReconcileTransactionClose:function(){\nif(ENABLED){\nfor(var pool in _pools){\n_pools[pool].onReconcileTransactionClose();}}},\n\n\n\n\nacquire:function(viewRef){\nvar rootTag=getRootViewTag(viewRef);\nif(ENABLED){\nvar pool=_pools[rootTag];\nif(!pool){\npool=_pools[rootTag]=new ReactNativeViewPool();}\n\nreturn pool.acquire(viewRef,rootTag);}else \n{\nreturn enqueueCreate(viewRef,rootTag);}},\n\n\n\nrelease:ENABLED?function(viewRef){\nvar pool=_pools[getRootViewTag(viewRef)];\nif(pool){\npool.release(viewRef);}}:\n\nemptyFunction,\n\nclearPoolForRootView:ENABLED?function(rootID){\nvar pool=_pools[rootID];\nif(pool){\npool.clear();\ndelete _pools[rootID];}}:\n\nemptyFunction,\n\nconfigure:function(pool_size){\n_poolSize=pool_size;},\n\n\nprintStats:function(){\nif(__DEV__){\nconsole.log('Pool size',_poolSize);\nfor(var pool in _pools){\n_pools[pool].onReconcileTransactionClose();}}}};\n});\n__d('ReactNativeAttributePayload',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Platform=require('Platform');\n\nvar deepDiffer=require('deepDiffer');\nvar styleDiffer=require('styleDiffer');\nvar flattenStyle=require('flattenStyle');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction translateKey(propKey){\nif(propKey==='transform'){\n\n\n\n\nif(Platform.OS==='android'){\nreturn 'decomposedMatrix';}else \n{\nreturn 'transformMatrix';}}\n\n\nreturn propKey;}\n\n\nfunction defaultDiffer(prevProp,nextProp){\nif(typeof nextProp!=='object'||nextProp===null){\n\nreturn true;}else \n{\n\nreturn deepDiffer(prevProp,nextProp);}}\n\n\n\nfunction diffNestedProperty(\nupdatePayload,\nprevProp,\nnextProp,\nvalidAttributes)\n{\n\n\n\n\n\nif(!styleDiffer(prevProp,nextProp)){\nreturn updatePayload;}\n\n\n\n\nvar previousFlattenedStyle=flattenStyle(prevProp);\nvar nextFlattenedStyle=flattenStyle(nextProp);\n\nif(!previousFlattenedStyle||!nextFlattenedStyle){\nif(nextFlattenedStyle){\nreturn addProperties(\nupdatePayload,\nnextFlattenedStyle,\nvalidAttributes);}\n\n\nif(previousFlattenedStyle){\nreturn clearProperties(\nupdatePayload,\npreviousFlattenedStyle,\nvalidAttributes);}\n\n\nreturn updatePayload;}\n\n\n\nreturn diffProperties(\nupdatePayload,\npreviousFlattenedStyle,\nnextFlattenedStyle,\nvalidAttributes);}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction clearNestedProperty(\nupdatePayload,\nprevProp,\nvalidAttributes)\n{\n\nreturn diffNestedProperty(updatePayload,prevProp,{},validAttributes);}\n\n\n\n\n\n\n\n\nfunction diffProperties(\nupdatePayload,\nprevProps,\nnextProps,\nvalidAttributes)\n{\nvar attributeConfig;\nvar nextProp;\nvar prevProp;\n\nfor(var propKey in nextProps){\nattributeConfig=validAttributes[propKey];\nif(!attributeConfig){\ncontinue;}\n\n\nvar altKey=translateKey(propKey);\nif(!validAttributes[altKey]){\n\naltKey=propKey;}\n\n\nif(updatePayload&&updatePayload[altKey]!==undefined){\n\n\ncontinue;}\n\nprevProp=prevProps[propKey];\nnextProp=nextProps[propKey];\n\n\n\nif(typeof nextProp==='function'){\nnextProp=true;\n\n\nif(typeof prevProp==='function'){\nprevProp=true;}}\n\n\n\nif(prevProp===nextProp){\ncontinue;}\n\n\n\nif(typeof attributeConfig!=='object'){\n\nif(defaultDiffer(prevProp,nextProp)){\n\n(updatePayload||(updatePayload={}))[altKey]=nextProp;}}else \n\nif(typeof attributeConfig.diff==='function'||\ntypeof attributeConfig.process==='function'){\n\nvar shouldUpdate=prevProp===undefined||(\ntypeof attributeConfig.diff==='function'?\nattributeConfig.diff(prevProp,nextProp):\ndefaultDiffer(prevProp,nextProp));\n\nif(shouldUpdate){\nvar nextValue=typeof attributeConfig.process==='function'?\nattributeConfig.process(nextProp):\nnextProp;\n(updatePayload||(updatePayload={}))[altKey]=nextValue;}}else \n\n{\n\nupdatePayload=diffNestedProperty(\nupdatePayload,\nprevProp,\nnextProp,\nattributeConfig);}}\n\n\n\n\n\n\n\nfor(var propKey in prevProps){\nif(nextProps[propKey]!==undefined){\ncontinue;}\n\nattributeConfig=validAttributes[propKey];\nif(!attributeConfig){\ncontinue;}\n\n\nprevProp=prevProps[propKey];\nif(prevProp===undefined){\ncontinue;}\n\n\nif(typeof attributeConfig!=='object'||\ntypeof attributeConfig.diff==='function'||\ntypeof attributeConfig.process==='function'){\n\n\n\n(updatePayload||(updatePayload={}))[translateKey(propKey)]=null;}else \n{\n\n\n\nupdatePayload=clearNestedProperty(\nupdatePayload,\nprevProp,\nattributeConfig);}}\n\n\n\nreturn updatePayload;}\n\n\n\n\n\nfunction addProperties(\nupdatePayload,\nprops,\nvalidAttributes)\n{\nreturn diffProperties(updatePayload,{},props,validAttributes);}\n\n\n\n\n\n\nfunction clearProperties(\nupdatePayload,\nprevProps,\nvalidAttributes)\n{\nreturn diffProperties(updatePayload,prevProps,{},validAttributes);}\n\n\nvar ReactNativeAttributePayload={\n\ncreate:function(\nprops,\nvalidAttributes)\n{\nreturn addProperties(\nnull,\nprops,\nvalidAttributes);},\n\n\n\ndiff:function(\nprevProps,\nnextProps,\nvalidAttributes)\n{\nreturn diffProperties(\nnull,\nprevProps,\nnextProps,\nvalidAttributes);}};\n\n\n\n\n\nmodule.exports=ReactNativeAttributePayload;\n});\n__d('deepDiffer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar deepDiffer=function(one,two){\nif(one===two){\n\nreturn false;}\n\nif(typeof one==='function'&&typeof two==='function'){\n\nreturn false;}\n\nif(typeof one!=='object'||one===null){\n\nreturn one!==two;}\n\nif(typeof two!=='object'||two===null){\n\n\nreturn true;}\n\nif(one.constructor!==two.constructor){\nreturn true;}\n\nif(Array.isArray(one)){\n\nvar len=one.length;\nif(two.length!==len){\nreturn true;}\n\nfor(var ii=0;ii<len;ii++){\nif(deepDiffer(one[ii],two[ii])){\nreturn true;}}}else \n\n\n{\nfor(var key in one){\nif(deepDiffer(one[key],two[key])){\nreturn true;}}\n\n\nfor(var twoKey in two){\n\n\nif(one[twoKey]===undefined&&two[twoKey]!==undefined){\nreturn true;}}}\n\n\n\nreturn false;};\n\n\nmodule.exports=deepDiffer;\n});\n__d('styleDiffer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar deepDiffer=require('deepDiffer');\n\nfunction styleDiffer(a,b){\nreturn !styleEqual(a,b);}\n\n\nfunction styleEqual(a,b){\nif(!a){\nreturn !b;}\n\nif(!b){\nreturn !a;}\n\nif(typeof a!==typeof b){\nreturn false;}\n\nif(typeof a==='number'){\nreturn a===b;}\n\n\nif(Array.isArray(a)){\nif(!Array.isArray(b)||a.length!==b.length){\nreturn false;}\n\nfor(var i=0;i<a.length;++i){\nif(!styleEqual(a[i],b[i])){\nreturn false;}}\n\n\nreturn true;}\n\n\nfor(var key in a){\nif(deepDiffer(a[key],b[key])){\nreturn false;}}\n\n\n\nfor(var key in b){\nif(!a.hasOwnProperty(key)){\nreturn false;}}\n\n\n\nreturn true;}\n\n\nmodule.exports=styleDiffer;\n});\n__d('deepFreezeAndThrowOnMutationInDev',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction deepFreezeAndThrowOnMutationInDev(object){\nif(__DEV__){\nif(typeof object!=='object'||\nobject===null||\nObject.isFrozen(object)||\nObject.isSealed(object)){\nreturn;}\n\n\nfor(var key in object){\nif(object.hasOwnProperty(key)){\nobject.__defineGetter__(key,identity.bind(null,object[key]));\nobject.__defineSetter__(key,throwOnImmutableMutation.bind(null,key));\ndeepFreezeAndThrowOnMutationInDev(object[key]);}}\n\n\nObject.freeze(object);\nObject.seal(object);}}\n\n\n\nfunction throwOnImmutableMutation(key,value){\nthrow Error(\n'You attempted to set the key `'+key+'` with the value `'+\nJSON.stringify(value)+'` on an object that is meant to be immutable '+\n'and has been frozen.');}\n\n\n\nfunction identity(value){\nreturn value;}\n\n\nmodule.exports=deepFreezeAndThrowOnMutationInDev;\n});\n__d('ReactUpdateQueue',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactElement=require('ReactElement');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactUpdates=require('ReactUpdates');\n\nvar assign=require('Object.assign');\nvar invariant=require('invariant');\nvar warning=require('warning');\n\nfunction enqueueUpdate(internalInstance){\nReactUpdates.enqueueUpdate(internalInstance);}\n\n\nfunction getInternalInstanceReadyForUpdate(publicInstance,callerName){\nvar internalInstance=ReactInstanceMap.get(publicInstance);\nif(!internalInstance){\nif(__DEV__){\n\n\n\nwarning(\n!callerName,\n'%s(...): Can only update a mounted or mounting component. '+\n'This usually means you called %s() on an unmounted component. '+\n'This is a no-op. Please check the code for the %s component.',\ncallerName,\ncallerName,\npublicInstance.constructor.displayName);}\n\n\nreturn null;}\n\n\nif(__DEV__){\nwarning(\nReactCurrentOwner.current==null,\n'%s(...): Cannot update during an existing state transition '+\n'(such as within `render`). Render methods should be a pure function '+\n'of props and state.',\ncallerName);}\n\n\n\nreturn internalInstance;}\n\n\n\n\n\n\nvar ReactUpdateQueue={\n\n\n\n\n\n\n\n\nisMounted:function(publicInstance){\nif(__DEV__){\nvar owner=ReactCurrentOwner.current;\nif(owner!==null){\nwarning(\nowner._warnedAboutRefsInRender,\n'%s is accessing isMounted inside its render() function. '+\n'render() should be a pure function of props and state. It should '+\n'never access something that requires stale data from the previous '+\n'render, such as refs. Move this logic to componentDidMount and '+\n'componentDidUpdate instead.',\nowner.getName()||'A component');\n\nowner._warnedAboutRefsInRender=true;}}\n\n\nvar internalInstance=ReactInstanceMap.get(publicInstance);\nif(internalInstance){\n\n\n\nreturn !!internalInstance._renderedComponent;}else \n{\nreturn false;}},\n\n\n\n\n\n\n\n\n\n\n\nenqueueCallback:function(publicInstance,callback){\ninvariant(\ntypeof callback==='function',\n'enqueueCallback(...): You called `setProps`, `replaceProps`, '+\n'`setState`, `replaceState`, or `forceUpdate` with a callback that '+\n'isn\\'t callable.');\n\nvar internalInstance=getInternalInstanceReadyForUpdate(publicInstance);\n\n\n\n\n\n\nif(!internalInstance){\nreturn null;}\n\n\nif(internalInstance._pendingCallbacks){\ninternalInstance._pendingCallbacks.push(callback);}else \n{\ninternalInstance._pendingCallbacks=[callback];}\n\n\n\n\n\nenqueueUpdate(internalInstance);},\n\n\nenqueueCallbackInternal:function(internalInstance,callback){\ninvariant(\ntypeof callback==='function',\n'enqueueCallback(...): You called `setProps`, `replaceProps`, '+\n'`setState`, `replaceState`, or `forceUpdate` with a callback that '+\n'isn\\'t callable.');\n\nif(internalInstance._pendingCallbacks){\ninternalInstance._pendingCallbacks.push(callback);}else \n{\ninternalInstance._pendingCallbacks=[callback];}\n\nenqueueUpdate(internalInstance);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nenqueueForceUpdate:function(publicInstance){\nvar internalInstance=getInternalInstanceReadyForUpdate(\npublicInstance,\n'forceUpdate');\n\n\nif(!internalInstance){\nreturn;}\n\n\ninternalInstance._pendingForceUpdate=true;\n\nenqueueUpdate(internalInstance);},\n\n\n\n\n\n\n\n\n\n\n\n\n\nenqueueReplaceState:function(publicInstance,completeState){\nvar internalInstance=getInternalInstanceReadyForUpdate(\npublicInstance,\n'replaceState');\n\n\nif(!internalInstance){\nreturn;}\n\n\ninternalInstance._pendingStateQueue=[completeState];\ninternalInstance._pendingReplaceState=true;\n\nenqueueUpdate(internalInstance);},\n\n\n\n\n\n\n\n\n\n\n\n\nenqueueSetState:function(publicInstance,partialState){\nvar internalInstance=getInternalInstanceReadyForUpdate(\npublicInstance,\n'setState');\n\n\nif(!internalInstance){\nreturn;}\n\n\nvar queue=\ninternalInstance._pendingStateQueue||(\ninternalInstance._pendingStateQueue=[]);\nqueue.push(partialState);\n\nenqueueUpdate(internalInstance);},\n\n\n\n\n\n\n\n\n\nenqueueSetProps:function(publicInstance,partialProps){\nvar internalInstance=getInternalInstanceReadyForUpdate(\npublicInstance,\n'setProps');\n\nif(!internalInstance){\nreturn;}\n\nReactUpdateQueue.enqueueSetPropsInternal(internalInstance,partialProps);},\n\n\nenqueueSetPropsInternal:function(internalInstance,partialProps){\nvar topLevelWrapper=internalInstance._topLevelWrapper;\ninvariant(\ntopLevelWrapper,\n'setProps(...): You called `setProps` on a '+\n'component with a parent. This is an anti-pattern since props will '+\n'get reactively updated when rendered. Instead, change the owner\\'s '+\n'`render` method to pass the correct value as props to the component '+\n'where it is created.');\n\n\n\n\nvar wrapElement=topLevelWrapper._pendingElement||\ntopLevelWrapper._currentElement;\nvar element=wrapElement.props;\nvar props=assign({},element.props,partialProps);\ntopLevelWrapper._pendingElement=ReactElement.cloneAndReplaceProps(\nwrapElement,\nReactElement.cloneAndReplaceProps(element,props));\n\n\nenqueueUpdate(topLevelWrapper);},\n\n\n\n\n\n\n\n\n\nenqueueReplaceProps:function(publicInstance,props){\nvar internalInstance=getInternalInstanceReadyForUpdate(\npublicInstance,\n'replaceProps');\n\nif(!internalInstance){\nreturn;}\n\nReactUpdateQueue.enqueueReplacePropsInternal(internalInstance,props);},\n\n\nenqueueReplacePropsInternal:function(internalInstance,props){\nvar topLevelWrapper=internalInstance._topLevelWrapper;\ninvariant(\ntopLevelWrapper,\n'replaceProps(...): You called `replaceProps` on a '+\n'component with a parent. This is an anti-pattern since props will '+\n'get reactively updated when rendered. Instead, change the owner\\'s '+\n'`render` method to pass the correct value as props to the component '+\n'where it is created.');\n\n\n\n\nvar wrapElement=topLevelWrapper._pendingElement||\ntopLevelWrapper._currentElement;\nvar element=wrapElement.props;\ntopLevelWrapper._pendingElement=ReactElement.cloneAndReplaceProps(\nwrapElement,\nReactElement.cloneAndReplaceProps(element,props));\n\n\nenqueueUpdate(topLevelWrapper);},\n\n\nenqueueElementInternal:function(internalInstance,newElement){\ninternalInstance._pendingElement=newElement;\nenqueueUpdate(internalInstance);}};\n\n\n\n\nmodule.exports=ReactUpdateQueue;\n});\n__d('ReactInstanceMap',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactInstanceMap={\n\n\n\n\n\n\nremove:function(key){\nkey._reactInternalInstance=undefined;},\n\n\nget:function(key){\nreturn key._reactInternalInstance;},\n\n\nhas:function(key){\nreturn key._reactInternalInstance!==undefined;},\n\n\nset:function(key,value){\nkey._reactInternalInstance=value;}};\n\n\n\n\nmodule.exports=ReactInstanceMap;\n});\n__d('emptyObject',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar emptyObject={};\n\nif(__DEV__){\nObject.freeze(emptyObject);}\n\n\nmodule.exports=emptyObject;\n});\n__d('instantiateReactComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactCompositeComponent=require('ReactCompositeComponent');\nvar ReactEmptyComponent=require('ReactEmptyComponent');\nvar ReactNativeComponent=require('ReactNativeComponent');\n\nvar assign=require('Object.assign');\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\nvar ReactCompositeComponentWrapper=function(){};\nassign(\nReactCompositeComponentWrapper.prototype,\nReactCompositeComponent.Mixin,\n{\n_instantiateReactComponent:instantiateReactComponent});\n\n\n\nfunction getDeclarationErrorAddendum(owner){\nif(owner){\nvar name=owner.getName();\nif(name){\nreturn ' Check the render method of `'+name+'`.';}}\n\n\nreturn '';}\n\n\n\n\n\n\n\n\n\nfunction isInternalComponentType(type){\nreturn (\ntypeof type==='function'&&\ntypeof type.prototype!=='undefined'&&\ntypeof type.prototype.mountComponent==='function'&&\ntypeof type.prototype.receiveComponent==='function');}\n\n\n\n\n\n\n\n\n\n\nfunction instantiateReactComponent(node){\nvar instance;\n\nif(node===null||node===false){\ninstance=new ReactEmptyComponent(instantiateReactComponent);}else \nif(typeof node==='object'){\nvar element=node;\ninvariant(\nelement&&(typeof element.type==='function'||\ntypeof element.type==='string'),\n'Element type is invalid: expected a string (for built-in components) '+\n'or a class/function (for composite components) but got: %s.%s',\nelement.type==null?element.type:typeof element.type,\ngetDeclarationErrorAddendum(element._owner));\n\n\n\nif(typeof element.type==='string'){\ninstance=ReactNativeComponent.createInternalComponent(element);}else \nif(isInternalComponentType(element.type)){\n\n\n\ninstance=new element.type(element);}else \n{\ninstance=new ReactCompositeComponentWrapper();}}else \n\nif(typeof node==='string'||typeof node==='number'){\ninstance=ReactNativeComponent.createInstanceForText(node);}else \n{\ninvariant(\nfalse,\n'Encountered invalid React node of type %s',\ntypeof node);}\n\n\n\nif(__DEV__){\nwarning(\ntypeof instance.construct==='function'&&\ntypeof instance.mountComponent==='function'&&\ntypeof instance.receiveComponent==='function'&&\ntypeof instance.unmountComponent==='function',\n'Only React Components can be mounted.');}\n\n\n\n\ninstance.construct(node);\n\n\n\n\ninstance._mountIndex=0;\ninstance._mountImage=null;\n\nif(__DEV__){\ninstance._isOwnerNecessary=false;\ninstance._warnedAboutRefsInRender=false;}\n\n\n\n\nif(__DEV__){\nif(Object.preventExtensions){\nObject.preventExtensions(instance);}}\n\n\n\nreturn instance;}\n\n\nmodule.exports=instantiateReactComponent;\n});\n__d('ReactCompositeComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactComponentEnvironment=require('ReactComponentEnvironment');\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactElement=require('ReactElement');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactPerf=require('ReactPerf');\nvar ReactPropTypeLocations=require('ReactPropTypeLocations');\nvar ReactPropTypeLocationNames=require('ReactPropTypeLocationNames');\nvar ReactReconciler=require('ReactReconciler');\nvar ReactUpdateQueue=require('ReactUpdateQueue');\n\nvar assign=require('Object.assign');\nvar emptyObject=require('emptyObject');\nvar invariant=require('invariant');\nvar shouldUpdateReactComponent=require('shouldUpdateReactComponent');\nvar warning=require('warning');\n\nfunction getDeclarationErrorAddendum(component){\nvar owner=component._currentElement._owner||null;\nif(owner){\nvar name=owner.getName();\nif(name){\nreturn ' Check the render method of `'+name+'`.';}}\n\n\nreturn '';}\n\n\nfunction StatelessComponent(Component){}\n\nStatelessComponent.prototype.render=function(){\nvar Component=ReactInstanceMap.get(this)._currentElement.type;\nreturn Component(this.props,this.context,this.updater);};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar nextMountID=1;\n\n\n\n\nvar ReactCompositeComponentMixin={\n\n\n\n\n\n\n\n\nconstruct:function(element){\nthis._currentElement=element;\nthis._rootNodeID=null;\nthis._instance=null;\n\n\nthis._pendingElement=null;\nthis._pendingStateQueue=null;\nthis._pendingReplaceState=false;\nthis._pendingForceUpdate=false;\n\nthis._renderedComponent=null;\n\nthis._context=null;\nthis._mountOrder=0;\nthis._topLevelWrapper=null;\n\n\nthis._pendingCallbacks=null;},\n\n\n\n\n\n\n\n\n\n\n\nmountComponent:function(rootID,transaction,context){\nthis._context=context;\nthis._mountOrder=nextMountID++;\nthis._rootNodeID=rootID;\n\nvar publicProps=this._processProps(this._currentElement.props);\nvar publicContext=this._processContext(context);\n\nvar Component=this._currentElement.type;\n\n\nvar inst;\nvar renderedElement;\n\n\n\n\n\nvar canInstantiate='prototype' in Component;\n\nif(canInstantiate){\nif(__DEV__){\nReactCurrentOwner.current=this;\ntry{\ninst=new Component(publicProps,publicContext,ReactUpdateQueue);}finally \n{\nReactCurrentOwner.current=null;}}else \n\n{\ninst=new Component(publicProps,publicContext,ReactUpdateQueue);}}\n\n\n\nif(!canInstantiate||inst===null||inst===false||ReactElement.isValidElement(inst)){\nrenderedElement=inst;\ninst=new StatelessComponent(Component);}\n\n\nif(__DEV__){\n\n\nif(inst.render==null){\nwarning(\nfalse,\n'%s(...): No `render` method found on the returned component '+\n'instance: you may have forgotten to define `render`, returned '+\n'null/false from a stateless component, or tried to render an '+\n'element whose type is a function that isn\\'t a React component.',\nComponent.displayName||Component.name||'Component');}else \n\n{\n\n\nwarning(\nComponent.prototype&&Component.prototype.isReactComponent||\n!canInstantiate||\n!(inst instanceof Component),\n'%s(...): React component classes must extend React.Component.',\nComponent.displayName||Component.name||'Component');}}\n\n\n\n\n\n\ninst.props=publicProps;\ninst.context=publicContext;\ninst.refs=emptyObject;\ninst.updater=ReactUpdateQueue;\n\nthis._instance=inst;\n\n\nReactInstanceMap.set(inst,this);\n\nif(__DEV__){\n\n\n\nwarning(\n!inst.getInitialState||\ninst.getInitialState.isReactClassApproved,\n'getInitialState was defined on %s, a plain JavaScript class. '+\n'This is only supported for classes created using React.createClass. '+\n'Did you mean to define a state property instead?',\nthis.getName()||'a component');\n\nwarning(\n!inst.getDefaultProps||\ninst.getDefaultProps.isReactClassApproved,\n'getDefaultProps was defined on %s, a plain JavaScript class. '+\n'This is only supported for classes created using React.createClass. '+\n'Use a static property to define defaultProps instead.',\nthis.getName()||'a component');\n\nwarning(\n!inst.propTypes,\n'propTypes was defined as an instance property on %s. Use a static '+\n'property to define propTypes instead.',\nthis.getName()||'a component');\n\nwarning(\n!inst.contextTypes,\n'contextTypes was defined as an instance property on %s. Use a '+\n'static property to define contextTypes instead.',\nthis.getName()||'a component');\n\nwarning(\ntypeof inst.componentShouldUpdate!=='function',\n'%s has a method called '+\n'componentShouldUpdate(). Did you mean shouldComponentUpdate()? '+\n'The name is phrased as a question because the function is '+\n'expected to return a value.',\nthis.getName()||'A component');\n\nwarning(\ntypeof inst.componentDidUnmount!=='function',\n'%s has a method called '+\n'componentDidUnmount(). But there is no such lifecycle method. '+\n'Did you mean componentWillUnmount()?',\nthis.getName()||'A component');\n\nwarning(\ntypeof inst.componentWillRecieveProps!=='function',\n'%s has a method called '+\n'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\nthis.getName()||'A component');}\n\n\n\nvar initialState=inst.state;\nif(initialState===undefined){\ninst.state=initialState=null;}\n\ninvariant(\ntypeof initialState==='object'&&!Array.isArray(initialState),\n'%s.state: must be set to an object or null',\nthis.getName()||'ReactCompositeComponent');\n\n\nthis._pendingStateQueue=null;\nthis._pendingReplaceState=false;\nthis._pendingForceUpdate=false;\n\nif(inst.componentWillMount){\ninst.componentWillMount();\n\n\nif(this._pendingStateQueue){\ninst.state=this._processPendingState(inst.props,inst.context);}}\n\n\n\n\nif(renderedElement===undefined){\nrenderedElement=this._renderValidatedComponent();}\n\n\nthis._renderedComponent=this._instantiateReactComponent(\nrenderedElement);\n\n\nvar markup=ReactReconciler.mountComponent(\nthis._renderedComponent,\nrootID,\ntransaction,\nthis._processChildContext(context));\n\nif(inst.componentDidMount){\ntransaction.getReactMountReady().enqueue(inst.componentDidMount,inst);}\n\n\nreturn markup;},\n\n\n\n\n\n\n\n\nunmountComponent:function(){\nvar inst=this._instance;\n\nif(inst.componentWillUnmount){\ninst.componentWillUnmount();}\n\n\nReactReconciler.unmountComponent(this._renderedComponent);\nthis._renderedComponent=null;\nthis._instance=null;\n\n\n\n\nthis._pendingStateQueue=null;\nthis._pendingReplaceState=false;\nthis._pendingForceUpdate=false;\nthis._pendingCallbacks=null;\nthis._pendingElement=null;\n\n\n\nthis._context=null;\nthis._rootNodeID=null;\nthis._topLevelWrapper=null;\n\n\n\n\nReactInstanceMap.remove(inst);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_maskContext:function(context){\nvar maskedContext=null;\nvar Component=this._currentElement.type;\nvar contextTypes=Component.contextTypes;\nif(!contextTypes){\nreturn emptyObject;}\n\nmaskedContext={};\nfor(var contextName in contextTypes){\nmaskedContext[contextName]=context[contextName];}\n\nreturn maskedContext;},\n\n\n\n\n\n\n\n\n\n\n_processContext:function(context){\nvar maskedContext=this._maskContext(context);\nif(__DEV__){\nvar Component=this._currentElement.type;\nif(Component.contextTypes){\nthis._checkPropTypes(\nComponent.contextTypes,\nmaskedContext,\nReactPropTypeLocations.context);}}\n\n\n\nreturn maskedContext;},\n\n\n\n\n\n\n\n_processChildContext:function(currentContext){\nvar Component=this._currentElement.type;\nvar inst=this._instance;\nvar childContext=inst.getChildContext&&inst.getChildContext();\nif(childContext){\ninvariant(\ntypeof Component.childContextTypes==='object',\n'%s.getChildContext(): childContextTypes must be defined in order to '+\n'use getChildContext().',\nthis.getName()||'ReactCompositeComponent');\n\nif(__DEV__){\nthis._checkPropTypes(\nComponent.childContextTypes,\nchildContext,\nReactPropTypeLocations.childContext);}\n\n\nfor(var name in childContext){\ninvariant(\nname in Component.childContextTypes,\n'%s.getChildContext(): key \"%s\" is not defined in childContextTypes.',\nthis.getName()||'ReactCompositeComponent',\nname);}\n\n\nreturn assign({},currentContext,childContext);}\n\nreturn currentContext;},\n\n\n\n\n\n\n\n\n\n\n\n_processProps:function(newProps){\nif(__DEV__){\nvar Component=this._currentElement.type;\nif(Component.propTypes){\nthis._checkPropTypes(\nComponent.propTypes,\nnewProps,\nReactPropTypeLocations.prop);}}\n\n\n\nreturn newProps;},\n\n\n\n\n\n\n\n\n\n\n_checkPropTypes:function(propTypes,props,location){\n\n\nvar componentName=this.getName();\nfor(var propName in propTypes){\nif(propTypes.hasOwnProperty(propName)){\nvar error;\ntry{\n\n\ninvariant(\ntypeof propTypes[propName]==='function',\n'%s: %s type `%s` is invalid; it must be a function, usually '+\n'from React.PropTypes.',\ncomponentName||'React class',\nReactPropTypeLocationNames[location],\npropName);\n\nerror=propTypes[propName](props,propName,componentName,location);}\ncatch(ex) {\nerror=ex;}\n\nif(error instanceof Error){\n\n\n\nvar addendum=getDeclarationErrorAddendum(this);\n\nif(location===ReactPropTypeLocations.prop){\n\nwarning(\nfalse,\n'Failed Composite propType: %s%s',\nerror.message,\naddendum);}else \n\n{\nwarning(\nfalse,\n'Failed Context Types: %s%s',\nerror.message,\naddendum);}}}}},\n\n\n\n\n\n\n\nreceiveComponent:function(nextElement,transaction,nextContext){\nvar prevElement=this._currentElement;\nvar prevContext=this._context;\n\nthis._pendingElement=null;\n\nthis.updateComponent(\ntransaction,\nprevElement,\nnextElement,\nprevContext,\nnextContext);},\n\n\n\n\n\n\n\n\n\n\nperformUpdateIfNecessary:function(transaction){\nif(this._pendingElement!=null){\nReactReconciler.receiveComponent(\nthis,\nthis._pendingElement||this._currentElement,\ntransaction,\nthis._context);}\n\n\n\nif(this._pendingStateQueue!==null||this._pendingForceUpdate){\nthis.updateComponent(\ntransaction,\nthis._currentElement,\nthis._currentElement,\nthis._context,\nthis._context);}},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nupdateComponent:function(\ntransaction,\nprevParentElement,\nnextParentElement,\nprevUnmaskedContext,\nnextUnmaskedContext)\n{\nvar inst=this._instance;\n\nvar nextContext=this._context===nextUnmaskedContext?\ninst.context:\nthis._processContext(nextUnmaskedContext);\nvar nextProps;\n\n\nif(prevParentElement===nextParentElement){\n\n\nnextProps=nextParentElement.props;}else \n{\nnextProps=this._processProps(nextParentElement.props);\n\n\n\n\nif(inst.componentWillReceiveProps){\ninst.componentWillReceiveProps(nextProps,nextContext);}}\n\n\n\nvar nextState=this._processPendingState(nextProps,nextContext);\n\nvar shouldUpdate=\nthis._pendingForceUpdate||\n!inst.shouldComponentUpdate||\ninst.shouldComponentUpdate(nextProps,nextState,nextContext);\n\nif(__DEV__){\nwarning(\ntypeof shouldUpdate!=='undefined',\n'%s.shouldComponentUpdate(): Returned undefined instead of a '+\n'boolean value. Make sure to return true or false.',\nthis.getName()||'ReactCompositeComponent');}\n\n\n\nif(shouldUpdate){\nthis._pendingForceUpdate=false;\n\nthis._performComponentUpdate(\nnextParentElement,\nnextProps,\nnextState,\nnextContext,\ntransaction,\nnextUnmaskedContext);}else \n\n{\n\n\nthis._currentElement=nextParentElement;\nthis._context=nextUnmaskedContext;\ninst.props=nextProps;\ninst.state=nextState;\ninst.context=nextContext;}},\n\n\n\n_processPendingState:function(props,context){\nvar inst=this._instance;\nvar queue=this._pendingStateQueue;\nvar replace=this._pendingReplaceState;\nthis._pendingReplaceState=false;\nthis._pendingStateQueue=null;\n\nif(!queue){\nreturn inst.state;}\n\n\nif(replace&&queue.length===1){\nreturn queue[0];}\n\n\nvar nextState=assign({},replace?queue[0]:inst.state);\nfor(var i=replace?1:0;i<queue.length;i++){\nvar partial=queue[i];\nassign(\nnextState,\ntypeof partial==='function'?\npartial.call(inst,nextState,props,context):\npartial);}\n\n\n\nreturn nextState;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_performComponentUpdate:function(\nnextElement,\nnextProps,\nnextState,\nnextContext,\ntransaction,\nunmaskedContext)\n{\nvar inst=this._instance;\n\nvar hasComponentDidUpdate=Boolean(inst.componentDidUpdate);\nvar prevProps;\nvar prevState;\nvar prevContext;\nif(hasComponentDidUpdate){\nprevProps=inst.props;\nprevState=inst.state;\nprevContext=inst.context;}\n\n\nif(inst.componentWillUpdate){\ninst.componentWillUpdate(nextProps,nextState,nextContext);}\n\n\nthis._currentElement=nextElement;\nthis._context=unmaskedContext;\ninst.props=nextProps;\ninst.state=nextState;\ninst.context=nextContext;\n\nthis._updateRenderedComponent(transaction,unmaskedContext);\n\nif(hasComponentDidUpdate){\ntransaction.getReactMountReady().enqueue(\ninst.componentDidUpdate.bind(inst,prevProps,prevState,prevContext),\ninst);}},\n\n\n\n\n\n\n\n\n\n\n_updateRenderedComponent:function(transaction,context){\nvar prevComponentInstance=this._renderedComponent;\nvar prevRenderedElement=prevComponentInstance._currentElement;\nvar nextRenderedElement=this._renderValidatedComponent();\nif(shouldUpdateReactComponent(prevRenderedElement,nextRenderedElement)){\nReactReconciler.receiveComponent(\nprevComponentInstance,\nnextRenderedElement,\ntransaction,\nthis._processChildContext(context));}else \n\n{\n\nvar thisID=this._rootNodeID;\nvar prevComponentID=prevComponentInstance._rootNodeID;\nReactReconciler.unmountComponent(prevComponentInstance);\n\nthis._renderedComponent=this._instantiateReactComponent(\nnextRenderedElement);\n\nvar nextMarkup=ReactReconciler.mountComponent(\nthis._renderedComponent,\nthisID,\ntransaction,\nthis._processChildContext(context));\n\nthis._replaceNodeWithMarkupByID(prevComponentID,nextMarkup);}},\n\n\n\n\n\n\n_replaceNodeWithMarkupByID:function(prevComponentID,nextMarkup){\nReactComponentEnvironment.replaceNodeWithMarkupByID(\nprevComponentID,\nnextMarkup);},\n\n\n\n\n\n\n_renderValidatedComponentWithoutOwnerOrContext:function(){\nvar inst=this._instance;\nvar renderedComponent=inst.render();\nif(__DEV__){\n\nif(typeof renderedComponent==='undefined'&&\ninst.render._isMockFunction){\n\n\nrenderedComponent=null;}}\n\n\n\nreturn renderedComponent;},\n\n\n\n\n\n_renderValidatedComponent:function(){\nvar renderedComponent;\nReactCurrentOwner.current=this;\ntry{\nrenderedComponent=\nthis._renderValidatedComponentWithoutOwnerOrContext();}finally \n{\nReactCurrentOwner.current=null;}\n\ninvariant(\n\nrenderedComponent===null||renderedComponent===false||\nReactElement.isValidElement(renderedComponent),\n'%s.render(): A valid ReactComponent must be returned. You may have '+\n'returned undefined, an array or some other invalid object.',\nthis.getName()||'ReactCompositeComponent');\n\nreturn renderedComponent;},\n\n\n\n\n\n\n\n\n\n\nattachRef:function(ref,component){\nvar inst=this.getPublicInstance();\ninvariant(inst!=null,'Stateless function components cannot have refs.');\nvar publicComponentInstance=component.getPublicInstance();\nif(__DEV__){\nvar componentName=component&&component.getName?\ncomponent.getName():'a component';\nwarning(publicComponentInstance!=null,\n'Stateless function components cannot be given refs '+\n'(See ref \"%s\" in %s created by %s). '+\n'Attempts to access this ref will fail.',\nref,\ncomponentName,\nthis.getName());}\n\n\nvar refs=inst.refs===emptyObject?inst.refs={}:inst.refs;\nrefs[ref]=publicComponentInstance;},\n\n\n\n\n\n\n\n\n\ndetachRef:function(ref){\nvar refs=this.getPublicInstance().refs;\ndelete refs[ref];},\n\n\n\n\n\n\n\n\ngetName:function(){\nvar type=this._currentElement.type;\nvar constructor=this._instance&&this._instance.constructor;\nreturn (\ntype.displayName||constructor&&constructor.displayName||\ntype.name||constructor&&constructor.name||\nnull);},\n\n\n\n\n\n\n\n\n\n\n\ngetPublicInstance:function(){\nvar inst=this._instance;\nif(inst instanceof StatelessComponent){\nreturn null;}\n\nreturn inst;},\n\n\n\n_instantiateReactComponent:null};\n\n\n\nReactPerf.measureMethods(\nReactCompositeComponentMixin,\n'ReactCompositeComponent',\n{\nmountComponent:'mountComponent',\nupdateComponent:'updateComponent',\n_renderValidatedComponent:'_renderValidatedComponent'});\n\n\n\nvar ReactCompositeComponent={\n\nMixin:ReactCompositeComponentMixin};\n\n\n\nmodule.exports=ReactCompositeComponent;\n});\n__d('ReactComponentEnvironment',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\nvar injected=false;\n\nvar ReactComponentEnvironment={\n\n\n\n\n\n\nunmountIDFromEnvironment:null,\n\n\n\n\n\nreplaceNodeWithMarkupByID:null,\n\n\n\n\n\nprocessChildrenUpdates:null,\n\ninjection:{\ninjectEnvironment:function(environment){\ninvariant(\n!injected,\n'ReactCompositeComponent: injectEnvironment() can only be called once.');\n\nReactComponentEnvironment.unmountIDFromEnvironment=\nenvironment.unmountIDFromEnvironment;\nReactComponentEnvironment.replaceNodeWithMarkupByID=\nenvironment.replaceNodeWithMarkupByID;\nReactComponentEnvironment.processChildrenUpdates=\nenvironment.processChildrenUpdates;\ninjected=true;}}};\n\n\n\n\n\nmodule.exports=ReactComponentEnvironment;\n});\n__d('ReactPropTypeLocations',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar keyMirror=require('keyMirror');\n\nvar ReactPropTypeLocations=keyMirror({\nprop:null,\ncontext:null,\nchildContext:null});\n\n\nmodule.exports=ReactPropTypeLocations;\n});\n__d('ReactPropTypeLocationNames',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactPropTypeLocationNames={};\n\nif(__DEV__){\nReactPropTypeLocationNames={\nprop:'prop',\ncontext:'context',\nchildContext:'child context'};}\n\n\n\nmodule.exports=ReactPropTypeLocationNames;\n});\n__d('shouldUpdateReactComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction shouldUpdateReactComponent(prevElement,nextElement){\nvar prevEmpty=prevElement===null||prevElement===false;\nvar nextEmpty=nextElement===null||nextElement===false;\nif(prevEmpty||nextEmpty){\nreturn prevEmpty===nextEmpty;}\n\n\nvar prevType=typeof prevElement;\nvar nextType=typeof nextElement;\nif(prevType==='string'||prevType==='number'){\nreturn nextType==='string'||nextType==='number';}else \n{\nreturn (\nnextType==='object'&&\nprevElement.type===nextElement.type&&\nprevElement.key===nextElement.key);}\n\n\nreturn false;}\n\n\nmodule.exports=shouldUpdateReactComponent;\n});\n__d('ReactEmptyComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactElement=require('ReactElement');\nvar ReactEmptyComponentRegistry=require('ReactEmptyComponentRegistry');\nvar ReactReconciler=require('ReactReconciler');\n\nvar assign=require('Object.assign');\n\nvar placeholderElement;\n\nvar ReactEmptyComponentInjection={\ninjectEmptyComponent:function(component){\nplaceholderElement=ReactElement.createElement(component);}};\n\n\n\nvar ReactEmptyComponent=function(instantiate){\nthis._currentElement=null;\nthis._rootNodeID=null;\nthis._renderedComponent=instantiate(placeholderElement);};\n\nassign(ReactEmptyComponent.prototype,{\nconstruct:function(element){},\n\nmountComponent:function(rootID,transaction,context){\nReactEmptyComponentRegistry.registerNullComponentID(rootID);\nthis._rootNodeID=rootID;\nreturn ReactReconciler.mountComponent(\nthis._renderedComponent,\nrootID,\ntransaction,\ncontext);},\n\n\nreceiveComponent:function(){},\n\nunmountComponent:function(rootID,transaction,context){\nReactReconciler.unmountComponent(this._renderedComponent);\nReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID);\nthis._rootNodeID=null;\nthis._renderedComponent=null;}});\n\n\n\nReactEmptyComponent.injection=ReactEmptyComponentInjection;\n\nmodule.exports=ReactEmptyComponent;\n});\n__d('ReactEmptyComponentRegistry',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar nullComponentIDsRegistry={};\n\n\n\n\n\nfunction isNullComponentID(id){\nreturn !!nullComponentIDsRegistry[id];}\n\n\n\n\n\n\nfunction registerNullComponentID(id){\nnullComponentIDsRegistry[id]=true;}\n\n\n\n\n\n\nfunction deregisterNullComponentID(id){\ndelete nullComponentIDsRegistry[id];}\n\n\nvar ReactEmptyComponentRegistry={\nisNullComponentID:isNullComponentID,\nregisterNullComponentID:registerNullComponentID,\nderegisterNullComponentID:deregisterNullComponentID};\n\n\nmodule.exports=ReactEmptyComponentRegistry;\n});\n__d('ReactNativeComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar assign=require('Object.assign');\nvar invariant=require('invariant');\n\nvar autoGenerateWrapperClass=null;\nvar genericComponentClass=null;\n\nvar tagToComponentClass={};\nvar textComponentClass=null;\n\nvar ReactNativeComponentInjection={\n\n\ninjectGenericComponentClass:function(componentClass){\ngenericComponentClass=componentClass;},\n\n\n\ninjectTextComponentClass:function(componentClass){\ntextComponentClass=componentClass;},\n\n\n\ninjectComponentClasses:function(componentClasses){\nassign(tagToComponentClass,componentClasses);}};\n\n\n\n\n\n\n\n\n\nfunction getComponentClassForElement(element){\nif(typeof element.type==='function'){\nreturn element.type;}\n\nvar tag=element.type;\nvar componentClass=tagToComponentClass[tag];\nif(componentClass==null){\ntagToComponentClass[tag]=componentClass=autoGenerateWrapperClass(tag);}\n\nreturn componentClass;}\n\n\n\n\n\n\n\n\nfunction createInternalComponent(element){\ninvariant(\ngenericComponentClass,\n'There is no registered component for the tag %s',\nelement.type);\n\nreturn new genericComponentClass(element.type,element.props);}\n\n\n\n\n\n\nfunction createInstanceForText(text){\nreturn new textComponentClass(text);}\n\n\n\n\n\n\nfunction isTextComponent(component){\nreturn component instanceof textComponentClass;}\n\n\nvar ReactNativeComponent={\ngetComponentClassForElement:getComponentClassForElement,\ncreateInternalComponent:createInternalComponent,\ncreateInstanceForText:createInstanceForText,\nisTextComponent:isTextComponent,\ninjection:ReactNativeComponentInjection};\n\n\nmodule.exports=ReactNativeComponent;\n});\n__d('findNodeHandle',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\n\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction findNodeHandle(componentOrHandle){\nif(__DEV__){\nvar owner=ReactCurrentOwner.current;\nif(owner!==null){\nwarning(\nowner._warnedAboutRefsInRender,\n'%s is accessing findNodeHandle inside its render(). '+\n'render() should be a pure function of props and state. It should '+\n'never access something that requires stale data from the previous '+\n'render, such as refs. Move this logic to componentDidMount and '+\n'componentDidUpdate instead.',\nowner.getName()||'A component');\n\nowner._warnedAboutRefsInRender=true;}}\n\n\nif(componentOrHandle==null){\nreturn null;}\n\nif(typeof componentOrHandle==='number'){\n\nreturn componentOrHandle;}\n\n\nvar component=componentOrHandle;\n\n\n\nvar internalInstance=ReactInstanceMap.get(component);\nif(internalInstance){\nreturn ReactNativeTagHandles.rootNodeIDToTag[internalInstance._rootNodeID];}else \n{\nvar rootNodeID=component._rootNodeID;\nif(rootNodeID){\nreturn ReactNativeTagHandles.rootNodeIDToTag[rootNodeID];}else \n{\ninvariant(\n\n\ntypeof component==='object'&&\n'_rootNodeID' in component||\n\n\ncomponent.render!=null&&\ntypeof component.render==='function',\n\n'findNodeHandle(...): Argument is not a component '+\n'(type: %s, keys: %s)',\ntypeof component,\nObject.keys(component));\n\ninvariant(\nfalse,\n'findNodeHandle(...): Unable to find node handle for unmounted '+\n'component.');}}}\n\n\n\n\n\nmodule.exports=findNodeHandle;\n});\n__d('ReactNativeTextComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\nvar RCTUIManager=require('NativeModules').UIManager;\n\nvar assign=require('Object.assign');\nvar invariant=require('invariant');\n\nvar ReactNativeTextComponent=function(props){};\n\n\n\nassign(ReactNativeTextComponent.prototype,{\n\nconstruct:function(text){\n\nthis._currentElement=text;\nthis._stringText=''+text;\nthis._rootNodeID=null;},\n\n\nmountComponent:function(rootID,transaction,context){\ninvariant(\ncontext.isInAParentText,\n'RawText \"'+this._stringText+'\" must be wrapped in an explicit '+\n'<Text> component.');\n\nthis._rootNodeID=rootID;\nvar tag=ReactNativeTagHandles.allocateTag();\nvar nativeTopRootID=ReactNativeTagHandles.getNativeTopRootIDFromNodeID(rootID);\nRCTUIManager.createView(\ntag,\n'RCTRawText',\nnativeTopRootID?ReactNativeTagHandles.rootNodeIDToTag[nativeTopRootID]:null,\n{text:this._stringText});\n\nreturn {\nrootNodeID:rootID,\ntag:tag};},\n\n\n\nreceiveComponent:function(nextText,transaction,context){\nif(nextText!==this._currentElement){\nthis._currentElement=nextText;\nvar nextStringText=''+nextText;\nif(nextStringText!==this._stringText){\nthis._stringText=nextStringText;\nRCTUIManager.updateView(\nReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(\nthis._rootNodeID),\n\n'RCTRawText',\n{text:this._stringText});}}},\n\n\n\n\n\nunmountComponent:function(){\nthis._currentElement=null;\nthis._stringText=null;\nthis._rootNodeID=null;}});\n\n\n\n\nmodule.exports=ReactNativeTextComponent;\n});\n__d('RCTDebugComponentOwnership',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DebugComponentOwnershipModule=require('NativeModules').DebugComponentOwnershipModule;\nvar InspectorUtils=require('InspectorUtils');\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\n\nfunction componentToString(component){\nreturn component.getName?component.getName():'Unknown';}\n\n\nfunction getRootTagForTag(tag){\nvar rootNodeID=ReactNativeTagHandles.tagToRootNodeID[tag];\nif(!rootNodeID){\nreturn null;}\n\nvar rootID=ReactNativeTagHandles.getNativeTopRootIDFromNodeID(rootNodeID);\nif(!rootID){\nreturn null;}\n\nreturn ReactNativeTagHandles.rootNodeIDToTag[rootID];}\n\n\nmodule.exports={\n\n\n\n\n\n\n\n\ngetOwnerHierarchy:function(requestID,tag){\nvar rootTag=getRootTagForTag(tag);\nvar instance=InspectorUtils.findInstanceByNativeTag(rootTag,tag);\nvar ownerHierarchy=instance?\nInspectorUtils.getOwnerHierarchy(instance).map(componentToString):\nnull;\nDebugComponentOwnershipModule.receiveOwnershipHierarchy(requestID,tag,ownerHierarchy);}};\n});\n__d('InspectorUtils',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar ReactInstanceHandles=require('ReactInstanceHandles');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactNativeMount=require('ReactNativeMount');\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\n\nfunction traverseOwnerTreeUp(hierarchy,instance){\nif(instance){\nhierarchy.unshift(instance);\ntraverseOwnerTreeUp(hierarchy,instance._currentElement._owner);}}\n\n\n\nfunction findInstance(component,targetID){\nif(targetID===findRootNodeID(component)){\nreturn component;}\n\nif(component._renderedComponent){\nreturn findInstance(component._renderedComponent,targetID);}else \n{\nfor(var key in component._renderedChildren){\nvar child=component._renderedChildren[key];\nif(ReactInstanceHandles.isAncestorIDOf(findRootNodeID(child),targetID)){\nvar instance=findInstance(child,targetID);\nif(instance){\nreturn instance;}}}}}\n\n\n\n\n\n\nfunction findRootNodeID(component){\nvar internalInstance=ReactInstanceMap.get(component);\nreturn internalInstance?internalInstance._rootNodeID:component._rootNodeID;}\n\n\nfunction findInstanceByNativeTag(rootTag,nativeTag){\nvar containerID=ReactNativeTagHandles.tagToRootNodeID[rootTag];\nvar rootInstance=ReactNativeMount._instancesByContainerID[containerID];\nvar targetID=ReactNativeTagHandles.tagToRootNodeID[nativeTag];\nif(!targetID){\nreturn undefined;}\n\nreturn findInstance(rootInstance,targetID);}\n\n\nfunction getOwnerHierarchy(instance){\nvar hierarchy=[];\ntraverseOwnerTreeUp(hierarchy,instance);\nreturn hierarchy;}\n\n\nmodule.exports={findInstanceByNativeTag:findInstanceByNativeTag,getOwnerHierarchy:getOwnerHierarchy};\n});\n__d('PerformanceLogger',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar performanceNow=require('performanceNow');\n\nvar timespans={};\nvar extras={};\n\n\n\n\n\nvar PerformanceLogger={\naddTimespan:function(key,lengthInMs,description){\nif(timespans[key]){\nif(__DEV__){\nconsole.log(\n'PerformanceLogger: Attempting to add a timespan that already exists ',\nkey);}\n\n\nreturn;}\n\n\ntimespans[key]={\ndescription:description,\ntotalTime:lengthInMs};},\n\n\n\nstartTimespan:function(key,description){\nif(timespans[key]){\nif(__DEV__){\nconsole.log(\n'PerformanceLogger: Attempting to start a timespan that already exists ',\nkey);}\n\n\nreturn;}\n\n\ntimespans[key]={\ndescription:description,\nstartTime:performanceNow()};},\n\n\n\nstopTimespan:function(key){\nif(!timespans[key]||!timespans[key].startTime){\nif(__DEV__){\nconsole.log(\n'PerformanceLogger: Attempting to end a timespan that has not started ',\nkey);}\n\n\nreturn;}\n\n\ntimespans[key].endTime=performanceNow();\ntimespans[key].totalTime=\ntimespans[key].endTime-timespans[key].startTime;},\n\n\nclear:function(){\ntimespans={};\nextras={};},\n\n\nclearExceptTimespans:function(keys){\ntimespans=Object.keys(timespans).reduce(function(previous,key){\nif(keys.indexOf(key)!==-1){\nprevious[key]=timespans[key];}\n\nreturn previous;},\n{});\nextras={};},\n\n\ngetTimespans:function(){\nreturn timespans;},\n\n\nhasTimespan:function(key){\nreturn !!timespans[key];},\n\n\nlogTimespans:function(){\nfor(var key in timespans){\nif(timespans[key].totalTime){\nconsole.log(key+': '+timespans[key].totalTime+'ms');}}},\n\n\n\n\naddTimespans:function(newTimespans,labels){\nfor(var i=0,l=newTimespans.length;i<l;i+=2){\nvar label=labels[i/2];\nPerformanceLogger.addTimespan(\nlabel,\nnewTimespans[i+1]-newTimespans[i],\nlabel);}},\n\n\n\n\nsetExtra:function(key,value){\nif(extras[key]){\nif(__DEV__){\nconsole.log(\n'PerformanceLogger: Attempting to set an extra that already exists ',\nkey);}\n\n\nreturn;}\n\nextras[key]=value;},\n\n\ngetExtras:function(){\nreturn extras;}};\n\n\n\nmodule.exports=PerformanceLogger;\n});\n__d('EventPluginHub',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventPluginRegistry=require('EventPluginRegistry');\nvar EventPluginUtils=require('EventPluginUtils');\nvar ReactErrorUtils=require('ReactErrorUtils');\n\nvar accumulateInto=require('accumulateInto');\nvar forEachAccumulated=require('forEachAccumulated');\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\n\n\nvar listenerBank={};\n\n\n\n\n\nvar eventQueue=null;\n\n\n\n\n\n\n\n\nvar executeDispatchesAndRelease=function(event,simulated){\nif(event){\nEventPluginUtils.executeDispatchesInOrder(event,simulated);\n\nif(!event.isPersistent()){\nevent.constructor.release(event);}}};\n\n\n\nvar executeDispatchesAndReleaseSimulated=function(e){\nreturn executeDispatchesAndRelease(e,true);};\n\nvar executeDispatchesAndReleaseTopLevel=function(e){\nreturn executeDispatchesAndRelease(e,false);};\n\n\n\n\n\n\nvar InstanceHandle=null;\n\nfunction validateInstanceHandle(){\nvar valid=\nInstanceHandle&&\nInstanceHandle.traverseTwoPhase&&\nInstanceHandle.traverseEnterLeave;\nwarning(\nvalid,\n'InstanceHandle not injected before use!');}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventPluginHub={\n\n\n\n\ninjection:{\n\n\n\n\n\ninjectMount:EventPluginUtils.injection.injectMount,\n\n\n\n\n\ninjectInstanceHandle:function(InjectedInstanceHandle){\nInstanceHandle=InjectedInstanceHandle;\nif(__DEV__){\nvalidateInstanceHandle();}},\n\n\n\ngetInstanceHandle:function(){\nif(__DEV__){\nvalidateInstanceHandle();}\n\nreturn InstanceHandle;},\n\n\n\n\n\n\ninjectEventPluginOrder:EventPluginRegistry.injectEventPluginOrder,\n\n\n\n\ninjectEventPluginsByName:EventPluginRegistry.injectEventPluginsByName},\n\n\n\neventNameDispatchConfigs:EventPluginRegistry.eventNameDispatchConfigs,\n\nregistrationNameModules:EventPluginRegistry.registrationNameModules,\n\n\n\n\n\n\n\n\nputListener:function(id,registrationName,listener){\ninvariant(\ntypeof listener==='function',\n'Expected %s listener to be a function, instead got type %s',\nregistrationName,typeof listener);\n\n\nvar bankForRegistrationName=\nlistenerBank[registrationName]||(listenerBank[registrationName]={});\nbankForRegistrationName[id]=listener;\n\nvar PluginModule=\nEventPluginRegistry.registrationNameModules[registrationName];\nif(PluginModule&&PluginModule.didPutListener){\nPluginModule.didPutListener(id,registrationName,listener);}},\n\n\n\n\n\n\n\n\ngetListener:function(id,registrationName){\nvar bankForRegistrationName=listenerBank[registrationName];\nreturn bankForRegistrationName&&bankForRegistrationName[id];},\n\n\n\n\n\n\n\n\ndeleteListener:function(id,registrationName){\nvar PluginModule=\nEventPluginRegistry.registrationNameModules[registrationName];\nif(PluginModule&&PluginModule.willDeleteListener){\nPluginModule.willDeleteListener(id,registrationName);}\n\n\nvar bankForRegistrationName=listenerBank[registrationName];\n\nif(bankForRegistrationName){\ndelete bankForRegistrationName[id];}},\n\n\n\n\n\n\n\n\ndeleteAllListeners:function(id){\nfor(var registrationName in listenerBank){\nif(!listenerBank[registrationName][id]){\ncontinue;}\n\n\nvar PluginModule=\nEventPluginRegistry.registrationNameModules[registrationName];\nif(PluginModule&&PluginModule.willDeleteListener){\nPluginModule.willDeleteListener(id,registrationName);}\n\n\ndelete listenerBank[registrationName][id];}},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nextractEvents:function(\ntopLevelType,\ntopLevelTarget,\ntopLevelTargetID,\nnativeEvent,\nnativeEventTarget){\nvar events;\nvar plugins=EventPluginRegistry.plugins;\nfor(var i=0;i<plugins.length;i++){\n\nvar possiblePlugin=plugins[i];\nif(possiblePlugin){\nvar extractedEvents=possiblePlugin.extractEvents(\ntopLevelType,\ntopLevelTarget,\ntopLevelTargetID,\nnativeEvent,\nnativeEventTarget);\n\nif(extractedEvents){\nevents=accumulateInto(events,extractedEvents);}}}\n\n\n\nreturn events;},\n\n\n\n\n\n\n\n\n\nenqueueEvents:function(events){\nif(events){\neventQueue=accumulateInto(eventQueue,events);}},\n\n\n\n\n\n\n\n\nprocessEventQueue:function(simulated){\n\n\nvar processingEventQueue=eventQueue;\neventQueue=null;\nif(simulated){\nforEachAccumulated(\nprocessingEventQueue,\nexecuteDispatchesAndReleaseSimulated);}else \n\n{\nforEachAccumulated(\nprocessingEventQueue,\nexecuteDispatchesAndReleaseTopLevel);}\n\n\ninvariant(\n!eventQueue,\n'processEventQueue(): Additional events were enqueued while processing '+\n'an event queue. Support for this has not yet been implemented.');\n\n\nReactErrorUtils.rethrowCaughtError();},\n\n\n\n\n\n__purge:function(){\nlistenerBank={};},\n\n\n__getListenerBank:function(){\nreturn listenerBank;}};\n\n\n\n\nmodule.exports=EventPluginHub;\n});\n__d('EventPluginRegistry',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\nvar EventPluginOrder=null;\n\n\n\n\nvar namesToPlugins={};\n\n\n\n\n\n\nfunction recomputePluginOrdering(){\nif(!EventPluginOrder){\n\nreturn;}\n\nfor(var pluginName in namesToPlugins){\nvar PluginModule=namesToPlugins[pluginName];\nvar pluginIndex=EventPluginOrder.indexOf(pluginName);\ninvariant(\npluginIndex>-1,\n'EventPluginRegistry: Cannot inject event plugins that do not exist in '+\n'the plugin ordering, `%s`.',\npluginName);\n\nif(EventPluginRegistry.plugins[pluginIndex]){\ncontinue;}\n\ninvariant(\nPluginModule.extractEvents,\n'EventPluginRegistry: Event plugins must implement an `extractEvents` '+\n'method, but `%s` does not.',\npluginName);\n\nEventPluginRegistry.plugins[pluginIndex]=PluginModule;\nvar publishedEvents=PluginModule.eventTypes;\nfor(var eventName in publishedEvents){\ninvariant(\npublishEventForPlugin(\npublishedEvents[eventName],\nPluginModule,\neventName),\n\n'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.',\neventName,\npluginName);}}}\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction publishEventForPlugin(dispatchConfig,PluginModule,eventName){\ninvariant(\n!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName),\n'EventPluginHub: More than one plugin attempted to publish the same '+\n'event name, `%s`.',\neventName);\n\nEventPluginRegistry.eventNameDispatchConfigs[eventName]=dispatchConfig;\n\nvar phasedRegistrationNames=dispatchConfig.phasedRegistrationNames;\nif(phasedRegistrationNames){\nfor(var phaseName in phasedRegistrationNames){\nif(phasedRegistrationNames.hasOwnProperty(phaseName)){\nvar phasedRegistrationName=phasedRegistrationNames[phaseName];\npublishRegistrationName(\nphasedRegistrationName,\nPluginModule,\neventName);}}\n\n\n\nreturn true;}else \nif(dispatchConfig.registrationName){\npublishRegistrationName(\ndispatchConfig.registrationName,\nPluginModule,\neventName);\n\nreturn true;}\n\nreturn false;}\n\n\n\n\n\n\n\n\n\n\nfunction publishRegistrationName(registrationName,PluginModule,eventName){\ninvariant(\n!EventPluginRegistry.registrationNameModules[registrationName],\n'EventPluginHub: More than one plugin attempted to publish the same '+\n'registration name, `%s`.',\nregistrationName);\n\nEventPluginRegistry.registrationNameModules[registrationName]=PluginModule;\nEventPluginRegistry.registrationNameDependencies[registrationName]=\nPluginModule.eventTypes[eventName].dependencies;}\n\n\n\n\n\n\n\nvar EventPluginRegistry={\n\n\n\n\nplugins:[],\n\n\n\n\neventNameDispatchConfigs:{},\n\n\n\n\nregistrationNameModules:{},\n\n\n\n\nregistrationNameDependencies:{},\n\n\n\n\n\n\n\n\n\n\ninjectEventPluginOrder:function(InjectedEventPluginOrder){\ninvariant(\n!EventPluginOrder,\n'EventPluginRegistry: Cannot inject event plugin ordering more than '+\n'once. You are likely trying to load more than one copy of React.');\n\n\nEventPluginOrder=Array.prototype.slice.call(InjectedEventPluginOrder);\nrecomputePluginOrdering();},\n\n\n\n\n\n\n\n\n\n\n\n\ninjectEventPluginsByName:function(injectedNamesToPlugins){\nvar isOrderingDirty=false;\nfor(var pluginName in injectedNamesToPlugins){\nif(!injectedNamesToPlugins.hasOwnProperty(pluginName)){\ncontinue;}\n\nvar PluginModule=injectedNamesToPlugins[pluginName];\nif(!namesToPlugins.hasOwnProperty(pluginName)||\nnamesToPlugins[pluginName]!==PluginModule){\ninvariant(\n!namesToPlugins[pluginName],\n'EventPluginRegistry: Cannot inject two different event plugins '+\n'using the same name, `%s`.',\npluginName);\n\nnamesToPlugins[pluginName]=PluginModule;\nisOrderingDirty=true;}}\n\n\nif(isOrderingDirty){\nrecomputePluginOrdering();}},\n\n\n\n\n\n\n\n\n\n\ngetPluginModuleForEvent:function(event){\nvar dispatchConfig=event.dispatchConfig;\nif(dispatchConfig.registrationName){\nreturn EventPluginRegistry.registrationNameModules[\ndispatchConfig.registrationName]||\nnull;}\n\nfor(var phase in dispatchConfig.phasedRegistrationNames){\nif(!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)){\ncontinue;}\n\nvar PluginModule=EventPluginRegistry.registrationNameModules[\ndispatchConfig.phasedRegistrationNames[phase]];\n\nif(PluginModule){\nreturn PluginModule;}}\n\n\nreturn null;},\n\n\n\n\n\n\n_resetEventPlugins:function(){\nEventPluginOrder=null;\nfor(var pluginName in namesToPlugins){\nif(namesToPlugins.hasOwnProperty(pluginName)){\ndelete namesToPlugins[pluginName];}}\n\n\nEventPluginRegistry.plugins.length=0;\n\nvar eventNameDispatchConfigs=EventPluginRegistry.eventNameDispatchConfigs;\nfor(var eventName in eventNameDispatchConfigs){\nif(eventNameDispatchConfigs.hasOwnProperty(eventName)){\ndelete eventNameDispatchConfigs[eventName];}}\n\n\n\nvar registrationNameModules=EventPluginRegistry.registrationNameModules;\nfor(var registrationName in registrationNameModules){\nif(registrationNameModules.hasOwnProperty(registrationName)){\ndelete registrationNameModules[registrationName];}}}};\n\n\n\n\n\n\nmodule.exports=EventPluginRegistry;\n});\n__d('EventPluginUtils',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventConstants=require('EventConstants');\nvar ReactErrorUtils=require('ReactErrorUtils');\n\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\nvar injection={\nMount:null,\ninjectMount:function(InjectedMount){\ninjection.Mount=InjectedMount;\nif(__DEV__){\nwarning(\nInjectedMount&&InjectedMount.getNode&&InjectedMount.getID,\n'EventPluginUtils.injection.injectMount(...): Injected Mount '+\n'module is missing getNode or getID.');}}};\n\n\n\n\n\nvar topLevelTypes=EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType){\nreturn topLevelType===topLevelTypes.topMouseUp||\ntopLevelType===topLevelTypes.topTouchEnd||\ntopLevelType===topLevelTypes.topTouchCancel;}\n\n\nfunction isMoveish(topLevelType){\nreturn topLevelType===topLevelTypes.topMouseMove||\ntopLevelType===topLevelTypes.topTouchMove;}\n\nfunction isStartish(topLevelType){\nreturn topLevelType===topLevelTypes.topMouseDown||\ntopLevelType===topLevelTypes.topTouchStart;}\n\n\n\nvar validateEventDispatches;\nif(__DEV__){\nvalidateEventDispatches=function(event){\nvar dispatchListeners=event._dispatchListeners;\nvar dispatchIDs=event._dispatchIDs;\n\nvar listenersIsArr=Array.isArray(dispatchListeners);\nvar idsIsArr=Array.isArray(dispatchIDs);\nvar IDsLen=idsIsArr?dispatchIDs.length:dispatchIDs?1:0;\nvar listenersLen=listenersIsArr?\ndispatchListeners.length:\ndispatchListeners?1:0;\n\nwarning(\nidsIsArr===listenersIsArr&&IDsLen===listenersLen,\n'EventPluginUtils: Invalid `event`.');};}\n\n\n\n\n\n\n\n\n\n\n\nfunction executeDispatch(event,simulated,listener,domID){\nvar type=event.type||'unknown-event';\nevent.currentTarget=injection.Mount.getNode(domID);\nif(simulated){\nReactErrorUtils.invokeGuardedCallbackWithCatch(\ntype,\nlistener,\nevent,\ndomID);}else \n\n{\nReactErrorUtils.invokeGuardedCallback(type,listener,event,domID);}\n\nevent.currentTarget=null;}\n\n\n\n\n\nfunction executeDispatchesInOrder(event,simulated){\nvar dispatchListeners=event._dispatchListeners;\nvar dispatchIDs=event._dispatchIDs;\nif(__DEV__){\nvalidateEventDispatches(event);}\n\nif(Array.isArray(dispatchListeners)){\nfor(var i=0;i<dispatchListeners.length;i++){\nif(event.isPropagationStopped()){\nbreak;}\n\n\nexecuteDispatch(event,simulated,dispatchListeners[i],dispatchIDs[i]);}}else \n\nif(dispatchListeners){\nexecuteDispatch(event,simulated,dispatchListeners,dispatchIDs);}\n\nevent._dispatchListeners=null;\nevent._dispatchIDs=null;}\n\n\n\n\n\n\n\n\n\nfunction executeDispatchesInOrderStopAtTrueImpl(event){\nvar dispatchListeners=event._dispatchListeners;\nvar dispatchIDs=event._dispatchIDs;\nif(__DEV__){\nvalidateEventDispatches(event);}\n\nif(Array.isArray(dispatchListeners)){\nfor(var i=0;i<dispatchListeners.length;i++){\nif(event.isPropagationStopped()){\nbreak;}\n\n\nif(dispatchListeners[i](event,dispatchIDs[i])){\nreturn dispatchIDs[i];}}}else \n\n\nif(dispatchListeners){\nif(dispatchListeners(event,dispatchIDs)){\nreturn dispatchIDs;}}\n\n\nreturn null;}\n\n\n\n\n\nfunction executeDispatchesInOrderStopAtTrue(event){\nvar ret=executeDispatchesInOrderStopAtTrueImpl(event);\nevent._dispatchIDs=null;\nevent._dispatchListeners=null;\nreturn ret;}\n\n\n\n\n\n\n\n\n\n\n\nfunction executeDirectDispatch(event){\nif(__DEV__){\nvalidateEventDispatches(event);}\n\nvar dispatchListener=event._dispatchListeners;\nvar dispatchID=event._dispatchIDs;\ninvariant(\n!Array.isArray(dispatchListener),\n'executeDirectDispatch(...): Invalid `event`.');\n\nvar res=dispatchListener?\ndispatchListener(event,dispatchID):\nnull;\nevent._dispatchListeners=null;\nevent._dispatchIDs=null;\nreturn res;}\n\n\n\n\n\n\nfunction hasDispatches(event){\nreturn !!event._dispatchListeners;}\n\n\n\n\n\nvar EventPluginUtils={\nisEndish:isEndish,\nisMoveish:isMoveish,\nisStartish:isStartish,\n\nexecuteDirectDispatch:executeDirectDispatch,\nexecuteDispatchesInOrder:executeDispatchesInOrder,\nexecuteDispatchesInOrderStopAtTrue:executeDispatchesInOrderStopAtTrue,\nhasDispatches:hasDispatches,\n\ngetNode:function(id){\nreturn injection.Mount.getNode(id);},\n\ngetID:function(node){\nreturn injection.Mount.getID(node);},\n\n\ninjection:injection};\n\n\nmodule.exports=EventPluginUtils;\n});\n__d('EventConstants',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar keyMirror=require('keyMirror');\n\nvar PropagationPhases=keyMirror({bubbled:null,captured:null});\n\n\n\n\nvar topLevelTypes=keyMirror({\ntopAbort:null,\ntopBlur:null,\ntopCanPlay:null,\ntopCanPlayThrough:null,\ntopChange:null,\ntopClick:null,\ntopCompositionEnd:null,\ntopCompositionStart:null,\ntopCompositionUpdate:null,\ntopContextMenu:null,\ntopCopy:null,\ntopCut:null,\ntopDoubleClick:null,\ntopDrag:null,\ntopDragEnd:null,\ntopDragEnter:null,\ntopDragExit:null,\ntopDragLeave:null,\ntopDragOver:null,\ntopDragStart:null,\ntopDrop:null,\ntopDurationChange:null,\ntopEmptied:null,\ntopEncrypted:null,\ntopEnded:null,\ntopError:null,\ntopFocus:null,\ntopInput:null,\ntopKeyDown:null,\ntopKeyPress:null,\ntopKeyUp:null,\ntopLoad:null,\ntopLoadedData:null,\ntopLoadedMetadata:null,\ntopLoadStart:null,\ntopMouseDown:null,\ntopMouseMove:null,\ntopMouseOut:null,\ntopMouseOver:null,\ntopMouseUp:null,\ntopPaste:null,\ntopPause:null,\ntopPlay:null,\ntopPlaying:null,\ntopProgress:null,\ntopRateChange:null,\ntopReset:null,\ntopScroll:null,\ntopSeeked:null,\ntopSeeking:null,\ntopSelectionChange:null,\ntopStalled:null,\ntopSubmit:null,\ntopSuspend:null,\ntopTextInput:null,\ntopTimeUpdate:null,\ntopTouchCancel:null,\ntopTouchEnd:null,\ntopTouchMove:null,\ntopTouchStart:null,\ntopVolumeChange:null,\ntopWaiting:null,\ntopWheel:null});\n\n\nvar EventConstants={\ntopLevelTypes:topLevelTypes,\nPropagationPhases:PropagationPhases};\n\n\nmodule.exports=EventConstants;\n});\n__d('ReactErrorUtils',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar caughtError=null;\n\n\n\n\n\n\n\n\n\nfunction invokeGuardedCallback(name,func,a,b){\ntry{\nreturn func(a,b);}\ncatch(x) {\nif(caughtError===null){\ncaughtError=x;}\n\nreturn undefined;}}\n\n\n\nvar ReactErrorUtils={\ninvokeGuardedCallback:invokeGuardedCallback,\n\n\n\n\n\ninvokeGuardedCallbackWithCatch:invokeGuardedCallback,\n\n\n\n\n\nrethrowCaughtError:function(){\nif(caughtError){\nvar error=caughtError;\ncaughtError=null;\nthrow error;}}};\n\n\n\n\nif(__DEV__){\n\n\n\n\nif(typeof window!=='undefined'&&\ntypeof window.dispatchEvent==='function'&&\ntypeof document!=='undefined'&&\ntypeof document.createEvent==='function'){\nvar fakeNode=document.createElement('react');\nReactErrorUtils.invokeGuardedCallback=function(name,func,a,b){\nvar boundFunc=func.bind(null,a,b);\nvar evtType='react-'+name;\nfakeNode.addEventListener(evtType,boundFunc,false);\nvar evt=document.createEvent('Event');\nevt.initEvent(evtType,false,false);\nfakeNode.dispatchEvent(evt);\nfakeNode.removeEventListener(evtType,boundFunc,false);};}}\n\n\n\n\nmodule.exports=ReactErrorUtils;\n});\n__d('accumulateInto',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction accumulateInto(current,next){\ninvariant(\nnext!=null,\n'accumulateInto(...): Accumulated items must not be null or undefined.');\n\nif(current==null){\nreturn next;}\n\n\n\n\nvar currentIsArray=Array.isArray(current);\nvar nextIsArray=Array.isArray(next);\n\nif(currentIsArray&&nextIsArray){\ncurrent.push.apply(current,next);\nreturn current;}\n\n\nif(currentIsArray){\ncurrent.push(next);\nreturn current;}\n\n\nif(nextIsArray){\n\nreturn [current].concat(next);}\n\n\nreturn [current,next];}\n\n\nmodule.exports=accumulateInto;\n});\n__d('forEachAccumulated',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar forEachAccumulated=function(arr,cb,scope){\nif(Array.isArray(arr)){\narr.forEach(cb,scope);}else \nif(arr){\ncb.call(scope,arr);}};\n\n\n\nmodule.exports=forEachAccumulated;\n});\n__d('IOSDefaultEventPluginOrder',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar IOSDefaultEventPluginOrder=[\n'ResponderEventPlugin',\n'IOSNativeBridgeEventPlugin'];\n\n\nmodule.exports=IOSDefaultEventPluginOrder;\n});\n__d('IOSNativeBridgeEventPlugin',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventPropagators=require('EventPropagators');\nvar NativeModules=require('NativeModules');\nvar SyntheticEvent=require('SyntheticEvent');\n\nvar merge=require('merge');\nvar warning=require('warning');\n\nvar RCTUIManager=NativeModules.UIManager;\n\nvar customBubblingEventTypes=RCTUIManager.customBubblingEventTypes;\nvar customDirectEventTypes=RCTUIManager.customDirectEventTypes;\n\nvar allTypesByEventName={};\n\nfor(var bubblingTypeName in customBubblingEventTypes){\nallTypesByEventName[bubblingTypeName]=customBubblingEventTypes[bubblingTypeName];}\n\n\nfor(var directTypeName in customDirectEventTypes){\nwarning(\n!customBubblingEventTypes[directTypeName],\n'Event cannot be both direct and bubbling: %s',\ndirectTypeName);\n\nallTypesByEventName[directTypeName]=customDirectEventTypes[directTypeName];}\n\n\nvar IOSNativeBridgeEventPlugin={\n\neventTypes:merge(customBubblingEventTypes,customDirectEventTypes),\n\n\n\n\n\n\n\n\n\nextractEvents:function(\ntopLevelType,\ntopLevelTarget,\ntopLevelTargetID,\nnativeEvent)\n{\nvar bubbleDispatchConfig=customBubblingEventTypes[topLevelType];\nvar directDispatchConfig=customDirectEventTypes[topLevelType];\nvar event=SyntheticEvent.getPooled(\nbubbleDispatchConfig||directDispatchConfig,\ntopLevelTargetID,\nnativeEvent);\n\nif(bubbleDispatchConfig){\nEventPropagators.accumulateTwoPhaseDispatches(event);}else \nif(directDispatchConfig){\nEventPropagators.accumulateDirectDispatches(event);}else \n{\nreturn null;}\n\nreturn event;}};\n\n\n\nmodule.exports=IOSNativeBridgeEventPlugin;\n});\n__d('EventPropagators',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventConstants=require('EventConstants');\nvar EventPluginHub=require('EventPluginHub');\n\nvar warning=require('warning');\n\nvar accumulateInto=require('accumulateInto');\nvar forEachAccumulated=require('forEachAccumulated');\n\nvar PropagationPhases=EventConstants.PropagationPhases;\nvar getListener=EventPluginHub.getListener;\n\n\n\n\n\nfunction listenerAtPhase(id,event,propagationPhase){\nvar registrationName=\nevent.dispatchConfig.phasedRegistrationNames[propagationPhase];\nreturn getListener(id,registrationName);}\n\n\n\n\n\n\n\n\nfunction accumulateDirectionalDispatches(domID,upwards,event){\nif(__DEV__){\nwarning(\ndomID,\n'Dispatching id must not be null');}\n\n\nvar phase=upwards?PropagationPhases.bubbled:PropagationPhases.captured;\nvar listener=listenerAtPhase(domID,event,phase);\nif(listener){\nevent._dispatchListeners=\naccumulateInto(event._dispatchListeners,listener);\nevent._dispatchIDs=accumulateInto(event._dispatchIDs,domID);}}\n\n\n\n\n\n\n\n\n\n\nfunction accumulateTwoPhaseDispatchesSingle(event){\nif(event&&event.dispatchConfig.phasedRegistrationNames){\nEventPluginHub.injection.getInstanceHandle().traverseTwoPhase(\nevent.dispatchMarker,\naccumulateDirectionalDispatches,\nevent);}}\n\n\n\n\n\n\n\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event){\nif(event&&event.dispatchConfig.phasedRegistrationNames){\nEventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(\nevent.dispatchMarker,\naccumulateDirectionalDispatches,\nevent);}}\n\n\n\n\n\n\n\n\n\n\nfunction accumulateDispatches(id,ignoredDirection,event){\nif(event&&event.dispatchConfig.registrationName){\nvar registrationName=event.dispatchConfig.registrationName;\nvar listener=getListener(id,registrationName);\nif(listener){\nevent._dispatchListeners=\naccumulateInto(event._dispatchListeners,listener);\nevent._dispatchIDs=accumulateInto(event._dispatchIDs,id);}}}\n\n\n\n\n\n\n\n\n\nfunction accumulateDirectDispatchesSingle(event){\nif(event&&event.dispatchConfig.registrationName){\naccumulateDispatches(event.dispatchMarker,null,event);}}\n\n\n\nfunction accumulateTwoPhaseDispatches(events){\nforEachAccumulated(events,accumulateTwoPhaseDispatchesSingle);}\n\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events){\nforEachAccumulated(events,accumulateTwoPhaseDispatchesSingleSkipTarget);}\n\n\nfunction accumulateEnterLeaveDispatches(leave,enter,fromID,toID){\nEventPluginHub.injection.getInstanceHandle().traverseEnterLeave(\nfromID,\ntoID,\naccumulateDispatches,\nleave,\nenter);}\n\n\n\n\nfunction accumulateDirectDispatches(events){\nforEachAccumulated(events,accumulateDirectDispatchesSingle);}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventPropagators={\naccumulateTwoPhaseDispatches:accumulateTwoPhaseDispatches,\naccumulateTwoPhaseDispatchesSkipTarget:accumulateTwoPhaseDispatchesSkipTarget,\naccumulateDirectDispatches:accumulateDirectDispatches,\naccumulateEnterLeaveDispatches:accumulateEnterLeaveDispatches};\n\n\nmodule.exports=EventPropagators;\n});\n__d('SyntheticEvent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar PooledClass=require('PooledClass');\n\nvar assign=require('Object.assign');\nvar emptyFunction=require('emptyFunction');\nvar warning=require('warning');\n\n\n\n\n\nvar EventInterface={\ntype:null,\n\ncurrentTarget:emptyFunction.thatReturnsNull,\neventPhase:null,\nbubbles:null,\ncancelable:null,\ntimeStamp:function(event){\nreturn event.timeStamp||Date.now();},\n\ndefaultPrevented:null,\nisTrusted:null};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction SyntheticEvent(dispatchConfig,dispatchMarker,nativeEvent,nativeEventTarget){\nthis.dispatchConfig=dispatchConfig;\nthis.dispatchMarker=dispatchMarker;\nthis.nativeEvent=nativeEvent;\nthis.target=nativeEventTarget;\nthis.currentTarget=nativeEventTarget;\n\nvar Interface=this.constructor.Interface;\nfor(var propName in Interface){\nif(!Interface.hasOwnProperty(propName)){\ncontinue;}\n\nvar normalize=Interface[propName];\nif(normalize){\nthis[propName]=normalize(nativeEvent);}else \n{\nthis[propName]=nativeEvent[propName];}}\n\n\n\nvar defaultPrevented=nativeEvent.defaultPrevented!=null?\nnativeEvent.defaultPrevented:\nnativeEvent.returnValue===false;\nif(defaultPrevented){\nthis.isDefaultPrevented=emptyFunction.thatReturnsTrue;}else \n{\nthis.isDefaultPrevented=emptyFunction.thatReturnsFalse;}\n\nthis.isPropagationStopped=emptyFunction.thatReturnsFalse;}\n\n\nassign(SyntheticEvent.prototype,{\n\npreventDefault:function(){\nthis.defaultPrevented=true;\nvar event=this.nativeEvent;\nif(__DEV__){\nwarning(\nevent,\n'This synthetic event is reused for performance reasons. If you\\'re '+\n'seeing this, you\\'re calling `preventDefault` on a '+\n'released/nullified synthetic event. This is a no-op. See '+\n'https://fb.me/react-event-pooling for more information.');}\n\n\nif(!event){\nreturn;}\n\n\nif(event.preventDefault){\nevent.preventDefault();}else \n{\nevent.returnValue=false;}\n\nthis.isDefaultPrevented=emptyFunction.thatReturnsTrue;},\n\n\nstopPropagation:function(){\nvar event=this.nativeEvent;\nif(__DEV__){\nwarning(\nevent,\n'This synthetic event is reused for performance reasons. If you\\'re '+\n'seeing this, you\\'re calling `stopPropagation` on a '+\n'released/nullified synthetic event. This is a no-op. See '+\n'https://fb.me/react-event-pooling for more information.');}\n\n\nif(!event){\nreturn;}\n\n\nif(event.stopPropagation){\nevent.stopPropagation();}else \n{\nevent.cancelBubble=true;}\n\nthis.isPropagationStopped=emptyFunction.thatReturnsTrue;},\n\n\n\n\n\n\n\npersist:function(){\nthis.isPersistent=emptyFunction.thatReturnsTrue;},\n\n\n\n\n\n\n\nisPersistent:emptyFunction.thatReturnsFalse,\n\n\n\n\ndestructor:function(){\nvar Interface=this.constructor.Interface;\nfor(var propName in Interface){\nthis[propName]=null;}\n\nthis.dispatchConfig=null;\nthis.dispatchMarker=null;\nthis.nativeEvent=null;}});\n\n\n\n\nSyntheticEvent.Interface=EventInterface;\n\n\n\n\n\n\n\nSyntheticEvent.augmentClass=function(Class,Interface){\nvar Super=this;\n\nvar prototype=Object.create(Super.prototype);\nassign(prototype,Class.prototype);\nClass.prototype=prototype;\nClass.prototype.constructor=Class;\n\nClass.Interface=assign({},Super.Interface,Interface);\nClass.augmentClass=Super.augmentClass;\n\nPooledClass.addPoolingTo(Class,PooledClass.fourArgumentPooler);};\n\n\nPooledClass.addPoolingTo(SyntheticEvent,PooledClass.fourArgumentPooler);\n\nmodule.exports=SyntheticEvent;\n});\n__d('merge',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar mergeInto=require('mergeInto');\n\n\n\n\n\n\n\n\nvar merge=function(one,two){\nvar result={};\nmergeInto(result,one);\nmergeInto(result,two);\nreturn result;};\n\n\nmodule.exports=merge;\n});\n__d('mergeInto',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar mergeHelpers=require('mergeHelpers');\n\nvar checkMergeObjectArg=mergeHelpers.checkMergeObjectArg;\nvar checkMergeIntoObjectArg=mergeHelpers.checkMergeIntoObjectArg;\n\n\n\n\n\n\n\nfunction mergeInto(one,two){\ncheckMergeIntoObjectArg(one);\nif(two!=null){\ncheckMergeObjectArg(two);\nfor(var key in two){\nif(!two.hasOwnProperty(key)){\ncontinue;}\n\none[key]=two[key];}}}\n\n\n\n\nmodule.exports=mergeInto;\n});\n__d('mergeHelpers',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\nvar keyMirror=require('keyMirror');\n\n\n\n\n\nvar MAX_MERGE_DEPTH=36;\n\n\n\n\n\n\n\nvar isTerminal=function(o){\nreturn typeof o!=='object'||o===null;};\n\n\nvar mergeHelpers={\n\nMAX_MERGE_DEPTH:MAX_MERGE_DEPTH,\n\nisTerminal:isTerminal,\n\n\n\n\n\n\n\nnormalizeMergeArg:function(arg){\nreturn arg===undefined||arg===null?{}:arg;},\n\n\n\n\n\n\n\n\n\n\ncheckMergeArrayArgs:function(one,two){\ninvariant(\nArray.isArray(one)&&Array.isArray(two),\n'Tried to merge arrays, instead got %s and %s.',\none,\ntwo);},\n\n\n\n\n\n\n\ncheckMergeObjectArgs:function(one,two){\nmergeHelpers.checkMergeObjectArg(one);\nmergeHelpers.checkMergeObjectArg(two);},\n\n\n\n\n\ncheckMergeObjectArg:function(arg){\ninvariant(\n!isTerminal(arg)&&!Array.isArray(arg),\n'Tried to merge an object, instead got %s.',\narg);},\n\n\n\n\n\n\ncheckMergeIntoObjectArg:function(arg){\ninvariant(\n(!isTerminal(arg)||typeof arg==='function')&&!Array.isArray(arg),\n'Tried to merge into an object, instead got %s.',\narg);},\n\n\n\n\n\n\n\n\n\ncheckMergeLevel:function(level){\ninvariant(\nlevel<MAX_MERGE_DEPTH,\n'Maximum deep merge depth exceeded. You may be attempting to merge '+\n'circular structures in an unsupported way.');},\n\n\n\n\n\n\n\n\ncheckArrayStrategy:function(strategy){\ninvariant(\nstrategy===undefined||strategy in mergeHelpers.ArrayStrategies,\n'You must provide an array strategy to deep merge functions to '+\n'instruct the deep merge how to resolve merging two arrays.');},\n\n\n\n\n\n\n\n\n\n\nArrayStrategies:keyMirror({\nClobber:true,\nIndexByIndex:true})};\n\n\n\n\nmodule.exports=mergeHelpers;\n});\n__d('NodeHandle',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNodeHandle={\n\n\n\ninjection:{\ninjectImplementation:function(Impl){\nNodeHandle._Implementation=Impl;}},\n\n\n\n_Implementation:null,\n\n\n\n\n\ngetRootNodeID:function(nodeHandle){\nreturn NodeHandle._Implementation.getRootNodeID(nodeHandle);}};\n\n\n\nmodule.exports=NodeHandle;\n});\n__d('ReactDefaultBatchingStrategy',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactUpdates=require('ReactUpdates');\nvar Transaction=require('Transaction');\n\nvar assign=require('Object.assign');\nvar emptyFunction=require('emptyFunction');\n\nvar RESET_BATCHED_UPDATES={\ninitialize:emptyFunction,\nclose:function(){\nReactDefaultBatchingStrategy.isBatchingUpdates=false;}};\n\n\n\nvar FLUSH_BATCHED_UPDATES={\ninitialize:emptyFunction,\nclose:ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)};\n\n\nvar TRANSACTION_WRAPPERS=[FLUSH_BATCHED_UPDATES,RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction(){\nthis.reinitializeTransaction();}\n\n\nassign(\nReactDefaultBatchingStrategyTransaction.prototype,\nTransaction.Mixin,\n{\ngetTransactionWrappers:function(){\nreturn TRANSACTION_WRAPPERS;}});\n\n\n\n\nvar transaction=new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy={\nisBatchingUpdates:false,\n\n\n\n\n\nbatchedUpdates:function(callback,a,b,c,d,e){\nvar alreadyBatchingUpdates=ReactDefaultBatchingStrategy.isBatchingUpdates;\n\nReactDefaultBatchingStrategy.isBatchingUpdates=true;\n\n\nif(alreadyBatchingUpdates){\ncallback(a,b,c,d,e);}else \n{\ntransaction.perform(callback,null,a,b,c,d,e);}}};\n\n\n\n\nmodule.exports=ReactDefaultBatchingStrategy;\n});\n__d('ReactNativeComponentEnvironment',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeDOMIDOperations=require('ReactNativeDOMIDOperations');\nvar ReactNativeReconcileTransaction=require('ReactNativeReconcileTransaction');\n\nvar ReactNativeComponentEnvironment={\n\nprocessChildrenUpdates:ReactNativeDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\nreplaceNodeWithMarkupByID:ReactNativeDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,\n\n\n\n\n\n\nunmountIDFromEnvironment:function(){},\n\n\n\n\n\n\nclearNode:function(){},\n\n\n\nReactReconcileTransaction:ReactNativeReconcileTransaction};\n\n\nmodule.exports=ReactNativeComponentEnvironment;\n});\n__d('ReactNativeDOMIDOperations',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\nvar ReactMultiChildUpdateTypes=require('ReactMultiChildUpdateTypes');\nvar RCTUIManager=require('NativeModules').UIManager;\nvar ReactPerf=require('ReactPerf');\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar dangerouslyProcessChildrenUpdates=function(childrenUpdates,markupList){\nif(!childrenUpdates.length){\nreturn;}\n\nvar byContainerTag={};\n\n\nfor(var i=0;i<childrenUpdates.length;i++){\nvar update=childrenUpdates[i];\nvar containerTag=ReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(update.parentID);\nvar updates=byContainerTag[containerTag]||(byContainerTag[containerTag]={});\nif(update.type===ReactMultiChildUpdateTypes.MOVE_EXISTING){\n(updates.moveFromIndices||(updates.moveFromIndices=[])).push(update.fromIndex);\n(updates.moveToIndices||(updates.moveToIndices=[])).push(update.toIndex);}else \nif(update.type===ReactMultiChildUpdateTypes.REMOVE_NODE){\n(updates.removeAtIndices||(updates.removeAtIndices=[])).push(update.fromIndex);}else \nif(update.type===ReactMultiChildUpdateTypes.INSERT_MARKUP){\nvar mountImage=markupList[update.markupIndex];\nvar tag=mountImage.tag;\nvar rootNodeID=mountImage.rootNodeID;\nReactNativeTagHandles.associateRootNodeIDWithMountedNodeHandle(rootNodeID,tag);\n(updates.addAtIndices||(updates.addAtIndices=[])).push(update.toIndex);\n(updates.addChildTags||(updates.addChildTags=[])).push(tag);}}\n\n\n\n\n\nfor(var updateParentTagString in byContainerTag){\nvar updateParentTagNumber=+updateParentTagString;\nvar childUpdatesToSend=byContainerTag[updateParentTagNumber];\nRCTUIManager.manageChildren(\nupdateParentTagNumber,\nchildUpdatesToSend.moveFromIndices,\nchildUpdatesToSend.moveToIndices,\nchildUpdatesToSend.addChildTags,\nchildUpdatesToSend.addAtIndices,\nchildUpdatesToSend.removeAtIndices);}};\n\n\n\n\n\n\n\n\nvar ReactNativeDOMIDOperations={\ndangerouslyProcessChildrenUpdates:ReactPerf.measure(\n\n'ReactDOMIDOperations',\n'dangerouslyProcessChildrenUpdates',\ndangerouslyProcessChildrenUpdates),\n\n\n\n\n\n\n\n\ndangerouslyReplaceNodeWithMarkupByID:ReactPerf.measure(\n'ReactDOMIDOperations',\n'dangerouslyReplaceNodeWithMarkupByID',\nfunction(id,mountImage){\nvar oldTag=ReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(id);\nRCTUIManager.replaceExistingNonRootView(oldTag,mountImage.tag);\nReactNativeTagHandles.associateRootNodeIDWithMountedNodeHandle(id,mountImage.tag);})};\n\n\n\n\nmodule.exports=ReactNativeDOMIDOperations;\n});\n__d('ReactMultiChildUpdateTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar keyMirror=require('keyMirror');\n\n\n\n\n\n\n\n\n\nvar ReactMultiChildUpdateTypes=keyMirror({\nINSERT_MARKUP:null,\nMOVE_EXISTING:null,\nREMOVE_NODE:null,\nSET_MARKUP:null,\nTEXT_CONTENT:null});\n\n\nmodule.exports=ReactMultiChildUpdateTypes;\n});\n__d('ReactNativeReconcileTransaction',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar CallbackQueue=require('CallbackQueue');\nvar PooledClass=require('PooledClass');\nvar Transaction=require('Transaction');\nvar ReactNativeViewPool=require('ReactNativeViewPool');\n\n\n\n\n\nvar ON_DOM_READY_QUEUEING={\n\n\n\ninitialize:function(){\nthis.reactMountReady.reset();},\n\n\n\n\n\nclose:function(){\nthis.reactMountReady.notifyAll();}};\n\n\n\nvar RN_VIEW_POOL_WRAPPER={\nclose:function(){\nReactNativeViewPool.onReconcileTransactionClose();}};\n\n\n\n\n\n\n\n\nvar TRANSACTION_WRAPPERS=[ON_DOM_READY_QUEUEING,RN_VIEW_POOL_WRAPPER];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ReactNativeReconcileTransaction(){\nthis.reinitializeTransaction();\nthis.reactMountReady=CallbackQueue.getPooled(null);}\n\n\nvar Mixin={\n\n\n\n\n\n\n\ngetTransactionWrappers:function(){\nreturn TRANSACTION_WRAPPERS;},\n\n\n\n\n\n\ngetReactMountReady:function(){\nreturn this.reactMountReady;},\n\n\n\n\n\n\ndestructor:function(){\nCallbackQueue.release(this.reactMountReady);\nthis.reactMountReady=null;}};\n\n\n\nbabelHelpers.extends(\nReactNativeReconcileTransaction.prototype,\nTransaction.Mixin,\nReactNativeReconcileTransaction,\nMixin);\n\n\nPooledClass.addPoolingTo(ReactNativeReconcileTransaction);\n\nmodule.exports=ReactNativeReconcileTransaction;\n});\n__d('ReactNativeGlobalInteractionHandler',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar InteractionManager=require('InteractionManager');\n\n\n\nvar interactionHandle=null;\n\nvar ReactNativeGlobalInteractionHandler={\nonChange:function(numberActiveTouches){\nif(numberActiveTouches===0){\nif(interactionHandle){\nInteractionManager.clearInteractionHandle(interactionHandle);\ninteractionHandle=null;}}else \n\nif(!interactionHandle){\ninteractionHandle=InteractionManager.createInteractionHandle();}}};\n\n\n\n\nmodule.exports=ReactNativeGlobalInteractionHandler;\n});\n__d('InteractionManager',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ErrorUtils=require('ErrorUtils');\nvar EventEmitter=require('EventEmitter');\nvar Set=require('Set');\n\nvar invariant=require('invariant');\nvar keyMirror=require('keyMirror');\nvar setImmediate=require('setImmediate');\n\n\n\nvar _emitter=new EventEmitter();\nvar _interactionSet=new Set();\nvar _addInteractionSet=new Set();\nvar _deleteInteractionSet=new Set();\nvar _nextUpdateHandle=null;\nvar _queue=[];\nvar _inc=0;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar InteractionManager={\nEvents:keyMirror({\ninteractionStart:true,\ninteractionComplete:true}),\n\n\n\n\n\nrunAfterInteractions:function(callback){\nreturn new Promise(function(resolve){\nscheduleUpdate();\nif(callback){\n_queue.push(callback);}\n\n_queue.push(resolve);});},\n\n\n\n\n\n\ncreateInteractionHandle:function(){\nscheduleUpdate();\nvar handle=++_inc;\n_addInteractionSet.add(handle);\nreturn handle;},\n\n\n\n\n\nclearInteractionHandle:function(handle){\ninvariant(\n!!handle,\n'Must provide a handle to clear.');\n\nscheduleUpdate();\n_addInteractionSet.delete(handle);\n_deleteInteractionSet.add(handle);},\n\n\naddListener:_emitter.addListener.bind(_emitter)};\n\n\n\n\n\nfunction scheduleUpdate(){\nif(!_nextUpdateHandle){\n_nextUpdateHandle=setImmediate(processUpdate);}}\n\n\n\n\n\n\nfunction processUpdate(){\n_nextUpdateHandle=null;\n\nvar interactionCount=_interactionSet.size;\n_addInteractionSet.forEach(function(handle){return (\n_interactionSet.add(handle));});\n\n_deleteInteractionSet.forEach(function(handle){return (\n_interactionSet.delete(handle));});\n\nvar nextInteractionCount=_interactionSet.size;\n\nif(interactionCount!==0&&nextInteractionCount===0){\n\n_emitter.emit(InteractionManager.Events.interactionComplete);}else \nif(interactionCount===0&&nextInteractionCount!==0){\n\n_emitter.emit(InteractionManager.Events.interactionStart);}\n\n\n\nif(nextInteractionCount===0){\nvar queue=_queue;\n_queue=[];\nqueue.forEach(function(callback){\nErrorUtils.applyWithGuard(callback);});}\n\n\n\n_addInteractionSet.clear();\n_deleteInteractionSet.clear();}\n\n\nmodule.exports=InteractionManager;\n});\n__d('Set',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nMap=require('Map');\nvar toIterator=require('toIterator');\nvar _shouldPolyfillES6Collection=require('_shouldPolyfillES6Collection');\n\nmodule.exports=(function(global,undefined){\n\n\n\n\n\nif(!_shouldPolyfillES6Collection('Set')){\nreturn global.Set;}var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nSet=(function(){\n\n\n\n\n\n\n\n\n\n\nfunction Set(iterable){babelHelpers.classCallCheck(this,Set);\nif(this==null||\ntypeof this!=='object'&&typeof this!=='function'){\nthrow new TypeError('Wrong set object type.');}\n\n\ninitSet(this);\n\nif(iterable!=null){\nvar it=toIterator(iterable);\nvar next;\nwhile(!(next=it.next()).done){\nthis.add(next.value);}}}babelHelpers.createClass(Set,[{key:'add',value:function add(\n\n\n\n\n\n\n\n\n\n\n\n\nvalue){\nthis._map.set(value,value);\nthis.size=this._map.size;\nreturn this;}},{key:'clear',value:function clear()\n\n\n\n\n\n\n\n{\ninitSet(this);}},{key:'delete',value:function _delete(\n\n\n\n\n\n\n\n\n\n\n\nvalue){\nvar ret=this._map.delete(value);\nthis.size=this._map.size;\nreturn ret;}},{key:'entries',value:function entries()\n\n\n\n\n\n\n\n{\nreturn this._map.entries();}},{key:'forEach',value:function forEach(\n\n\n\n\n\n\n\n\n\ncallback){\nvar thisArg=arguments[1];\nvar it=this._map.keys();\nvar next;\nwhile(!(next=it.next()).done){\ncallback.call(thisArg,next.value,next.value,this);}}},{key:'has',value:function has(\n\n\n\n\n\n\n\n\n\n\n\nvalue){\nreturn this._map.has(value);}},{key:'values',value:function values()\n\n\n\n\n\n\n\n{\nreturn this._map.values();}}]);return Set;})();\n\n\n\n\nSet.prototype[toIterator.ITERATOR_SYMBOL]=Set.prototype.values;\n\n\nSet.prototype.keys=Set.prototype.values;\n\nfunction initSet(set){\nset._map=new Map();\nset.size=set._map.size;}\n\n\nreturn Set;})(\nFunction('return this')());\n});\n__d('Map',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nguid=require('guid');\nvar isNode=require('isNode');\nvar toIterator=require('toIterator');\nvar _shouldPolyfillES6Collection=require('_shouldPolyfillES6Collection');\n\nmodule.exports=(function(global,undefined){\n\n\n\n\nif(!_shouldPolyfillES6Collection('Map')){\nreturn global.Map;}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KIND_KEY='key';\nvar KIND_VALUE='value';\nvar KIND_KEY_VALUE='key+value';\n\n\n\nvar KEY_PREFIX='$map_';\n\n\n\nvar SECRET_SIZE_PROP;\nif(__DEV__){\nSECRET_SIZE_PROP='$size'+guid();}\n\n\n\nvar OLD_IE_HASH_PREFIX='IE_HASH_';var \n\nMap=(function(){\n\n\n\n\n\n\n\n\n\n\nfunction Map(iterable){babelHelpers.classCallCheck(this,Map);\nif(!isObject(this)){\nthrow new TypeError('Wrong map object type.');}\n\n\ninitMap(this);\n\nif(iterable!=null){\nvar it=toIterator(iterable);\nvar next;\nwhile(!(next=it.next()).done){\nif(!isObject(next.value)){\nthrow new TypeError('Expected iterable items to be pair objects.');}\n\nthis.set(next.value[0],next.value[1]);}}}babelHelpers.createClass(Map,[{key:'clear',value:function clear()\n\n\n\n\n\n\n\n\n{\ninitMap(this);}},{key:'has',value:function has(\n\n\n\n\n\n\n\n\n\nkey){\nvar index=getIndex(this,key);\nreturn !!(index!=null&&this._mapData[index]);}},{key:'set',value:function set(\n\n\n\n\n\n\n\n\n\n\nkey,value){\nvar index=getIndex(this,key);\n\nif(index!=null&&this._mapData[index]){\nthis._mapData[index][1]=value;}else \n{\nindex=this._mapData.push([\nkey,\nvalue])-\n1;\nsetIndex(this,key,index);\nif(__DEV__){\nthis[SECRET_SIZE_PROP]+=1;}else \n{\nthis.size+=1;}}\n\n\n\nreturn this;}},{key:'get',value:function get(\n\n\n\n\n\n\n\n\n\nkey){\nvar index=getIndex(this,key);\nif(index==null){\nreturn undefined;}else \n{\nreturn this._mapData[index][1];}}},{key:'delete',value:function _delete(\n\n\n\n\n\n\n\n\n\n\n\nkey){\nvar index=getIndex(this,key);\nif(index!=null&&this._mapData[index]){\nsetIndex(this,key,undefined);\nthis._mapData[index]=undefined;\nif(__DEV__){\nthis[SECRET_SIZE_PROP]-=1;}else \n{\nthis.size-=1;}\n\nreturn true;}else \n{\nreturn false;}}},{key:'entries',value:function entries()\n\n\n\n\n\n\n\n\n\n\n{\nreturn new MapIterator(this,KIND_KEY_VALUE);}},{key:'keys',value:function keys()\n\n\n\n\n\n\n\n\n{\nreturn new MapIterator(this,KIND_KEY);}},{key:'values',value:function values()\n\n\n\n\n\n\n\n\n{\nreturn new MapIterator(this,KIND_VALUE);}},{key:'forEach',value:function forEach(\n\n\n\n\n\n\n\n\n\n\n\ncallback,thisArg){\nif(typeof callback!=='function'){\nthrow new TypeError('Callback must be callable.');}\n\n\nvar boundCallback=callback.bind(thisArg||undefined);\nvar mapData=this._mapData;\n\n\n\n\nfor(var i=0;i<mapData.length;i++){\nvar entry=mapData[i];\nif(entry!=null){\nboundCallback(entry[1],entry[0],this);}}}}]);return Map;})();\n\n\n\n\n\n\nMap.prototype[toIterator.ITERATOR_SYMBOL]=Map.prototype.entries;var \n\nMapIterator=(function(){\n\n\n\n\n\n\n\n\n\nfunction MapIterator(map,kind){babelHelpers.classCallCheck(this,MapIterator);\nif(!(isObject(map)&&map['_mapData'])){\nthrow new TypeError('Object is not a map.');}\n\n\nif([KIND_KEY,KIND_KEY_VALUE,KIND_VALUE].indexOf(kind)===-1){\nthrow new Error('Invalid iteration kind.');}\n\n\nthis._map=map;\nthis._nextIndex=0;\nthis._kind=kind;}babelHelpers.createClass(MapIterator,[{key:'next',value:function next()\n\n\n\n\n\n\n\n\n{\nif(!this instanceof Map){\nthrow new TypeError('Expected to be called on a MapIterator.');}\n\n\nvar map=this._map;\nvar index=this._nextIndex;\nvar kind=this._kind;\n\nif(map==null){\nreturn createIterResultObject(undefined,true);}\n\n\nvar entries=map['_mapData'];\n\nwhile(index<entries.length){\nvar record=entries[index];\n\nindex+=1;\nthis._nextIndex=index;\n\nif(record){\nif(kind===KIND_KEY){\nreturn createIterResultObject(record[0],false);}else \nif(kind===KIND_VALUE){\nreturn createIterResultObject(record[1],false);}else \nif(kind){\nreturn createIterResultObject(record,false);}}}\n\n\n\n\nthis._map=undefined;\n\nreturn createIterResultObject(undefined,true);}}]);return MapIterator;})();\n\n\n\n\n\n\nMapIterator.prototype[toIterator.ITERATOR_SYMBOL]=function(){\nreturn this;};\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getIndex(map,key){\nif(isObject(key)){\nvar hash=getHash(key);\nreturn map._objectIndex[hash];}else \n{\nvar prefixedKey=KEY_PREFIX+key;\nif(typeof key==='string'){\nreturn map._stringIndex[prefixedKey];}else \n{\nreturn map._otherIndex[prefixedKey];}}}\n\n\n\n\n\n\n\n\n\n\nfunction setIndex(map,key,index){\nvar shouldDelete=index==null;\n\nif(isObject(key)){\nvar hash=getHash(key);\nif(shouldDelete){\ndelete map._objectIndex[hash];}else \n{\nmap._objectIndex[hash]=index;}}else \n\n{\nvar prefixedKey=KEY_PREFIX+key;\nif(typeof key==='string'){\nif(shouldDelete){\ndelete map._stringIndex[prefixedKey];}else \n{\nmap._stringIndex[prefixedKey]=index;}}else \n\n{\nif(shouldDelete){\ndelete map._otherIndex[prefixedKey];}else \n{\nmap._otherIndex[prefixedKey]=index;}}}}\n\n\n\n\n\n\n\n\n\n\nfunction initMap(map){\n\n\n\n\n\n\nmap._mapData=[];\n\n\n\n\n\n\n\nmap._objectIndex={};\n\n\nmap._stringIndex={};\n\n\nmap._otherIndex={};\n\n\n\n\n\n\n\nif(__DEV__){\nif(isES5){\n\n\n\nif(map.hasOwnProperty(SECRET_SIZE_PROP)){\nmap[SECRET_SIZE_PROP]=0;}else \n{\nObject.defineProperty(map,SECRET_SIZE_PROP,{\nvalue:0,\nwritable:true});\n\nObject.defineProperty(map,'size',{\nset:function(v){\nconsole.error(\n'PLEASE FIX ME: You are changing the map size property which '+\n'should not be writable and will break in production.');\n\nthrow new Error('The map size property is not writable.');},\n\nget:function(){return map[SECRET_SIZE_PROP];}});}\n\n\n\n\nreturn;}}\n\n\n\n\n\nmap.size=0;}\n\n\n\n\n\n\n\n\nfunction isObject(o){\nreturn o!=null&&(typeof o==='object'||typeof o==='function');}\n\n\n\n\n\n\n\n\n\nfunction createIterResultObject(value,done){\nreturn {value:value,done:done};}\n\n\n\nvar isES5=(function(){\ntry{\nObject.defineProperty({},'x',{});\nreturn true;}\ncatch(e) {\nreturn false;}})();\n\n\n\n\n\n\n\n\n\nfunction isExtensible(o){\nif(!isES5){\nreturn true;}else \n{\nreturn Object.isExtensible(o);}}\n\n\n\n\n\n\n\n\n\n\n\nfunction getIENodeHash(node){\nvar uniqueID;\nswitch(node.nodeType){\ncase 1:\nuniqueID=node.uniqueID;\nbreak;\ncase 9:\nuniqueID=node.documentElement.uniqueID;\nbreak;\ndefault:\nreturn null;}\n\n\nif(uniqueID){\nreturn OLD_IE_HASH_PREFIX+uniqueID;}else \n{\nreturn null;}}\n\n\n\nvar getHash=(function(){\nvar propIsEnumerable=Object.prototype.propertyIsEnumerable;\nvar hashProperty=guid();\nvar hashCounter=0;\n\n\n\n\n\n\n\nreturn function getHash(o){\nif(o[hashProperty]){\nreturn o[hashProperty];}else \nif(!isES5&&\no.propertyIsEnumerable&&\no.propertyIsEnumerable[hashProperty]){\nreturn o.propertyIsEnumerable[hashProperty];}else \nif(!isES5&&\nisNode(o)&&\ngetIENodeHash(o)){\nreturn getIENodeHash(o);}else \nif(!isES5&&o[hashProperty]){\nreturn o[hashProperty];}\n\n\nif(isExtensible(o)){\nhashCounter+=1;\nif(isES5){\nObject.defineProperty(o,hashProperty,{\nenumerable:false,\nwritable:false,\nconfigurable:false,\nvalue:hashCounter});}else \n\nif(o.propertyIsEnumerable){\n\n\n\n\no.propertyIsEnumerable=function(){\nreturn propIsEnumerable.apply(this,arguments);};\n\no.propertyIsEnumerable[hashProperty]=hashCounter;}else \nif(isNode(o)){\n\n\n\n\no[hashProperty]=hashCounter;}else \n{\nthrow new Error('Unable to set a non-enumerable property on object.');}\n\nreturn hashCounter;}else \n{\nthrow new Error('Non-extensible objects are not allowed as keys.');}};})();\n\n\n\n\nreturn Map;})(\nFunction('return this')());\n});\n__d('guid',function(global, require, module, exports) {  function \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nguid(){\nreturn 'f'+(Math.random()*(1<<30)).toString(16).replace('.','');}\n\n\nmodule.exports=guid;\n});\n__d('isNode',function(global, require, module, exports) {  function \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nisNode(object){\nreturn !!(object&&(\ntypeof Node==='function'?object instanceof Node:\ntypeof object==='object'&&\ntypeof object.nodeType==='number'&&\ntypeof object.nodeName==='string'));}\n\n\n\nmodule.exports=isNode;\n});\n__d('toIterator',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nKIND_KEY='key';\nvar KIND_VALUE='value';\nvar KIND_KEY_VAL='key+value';\n\nvar ITERATOR_SYMBOL=typeof Symbol==='function'?\nSymbol.iterator:\n'@@iterator';\n\nvar toIterator=(function(){\nif(!(Array.prototype[ITERATOR_SYMBOL]&&\nString.prototype[ITERATOR_SYMBOL])){\n\nreturn (function(){var \nArrayIterator=(function(){\n\nfunction ArrayIterator(array,kind){babelHelpers.classCallCheck(this,ArrayIterator);\nif(!Array.isArray(array)){\nthrow new TypeError('Object is not an Array');}\n\nthis._iteratedObject=array;\nthis._kind=kind;\nthis._nextIndex=0;}babelHelpers.createClass(ArrayIterator,[{key:'next',value:function next()\n\n\n\n{\nif(!this instanceof ArrayIterator){\nthrow new TypeError('Object is not an ArrayIterator');}\n\n\nif(this._iteratedObject==null){\nreturn createIterResultObject(undefined,true);}\n\n\nvar array=this._iteratedObject;\nvar len=this._iteratedObject.length;\nvar index=this._nextIndex;\nvar kind=this._kind;\n\nif(index>=len){\nthis._iteratedObject=undefined;\nreturn createIterResultObject(undefined,true);}\n\n\nthis._nextIndex=index+1;\n\nif(kind===KIND_KEY){\nreturn createIterResultObject(index,false);}else \nif(kind===KIND_VALUE){\nreturn createIterResultObject(array[index],false);}else \nif(kind===KIND_KEY_VAL){\nreturn createIterResultObject([index,array[index]],false);}}},{key:\n\n\n\n\n'@@iterator',value:function iterator(){\nreturn this;}}]);return ArrayIterator;})();var \n\n\n\nStringIterator=(function(){\n\nfunction StringIterator(string){babelHelpers.classCallCheck(this,StringIterator);\nif(typeof string!=='string'){\nthrow new TypeError('Object is not a string');}\n\nthis._iteratedString=string;\nthis._nextIndex=0;}babelHelpers.createClass(StringIterator,[{key:'next',value:function next()\n\n\n\n{\nif(!this instanceof StringIterator){\nthrow new TypeError('Object is not a StringIterator');}\n\n\nif(this._iteratedString==null){\nreturn createIterResultObject(undefined,true);}\n\n\nvar index=this._nextIndex;\nvar s=this._iteratedString;\nvar len=s.length;\n\nif(index>=len){\nthis._iteratedString=undefined;\nreturn createIterResultObject(undefined,true);}\n\n\nvar ret;\nvar first=s.charCodeAt(index);\n\nif(first<0xD800||first>0xDBFF||index+1===len){\nret=s[index];}else \n{\nvar second=s.charCodeAt(index+1);\nif(second<0xDC00||second>0xDFFF){\nret=s[index];}else \n{\nret=s[index]+s[index+1];}}\n\n\n\nthis._nextIndex=index+ret.length;\n\nreturn createIterResultObject(ret,false);}},{key:\n\n\n\n'@@iterator',value:function iterator(){\nreturn this;}}]);return StringIterator;})();\n\n\n\n\nfunction createIterResultObject(value,done){\nreturn {value:value,done:done};}\n\n\nreturn function(object,kind){\nif(typeof object==='string'){\nreturn new StringIterator(object);}else \nif(Array.isArray(object)){\nreturn new ArrayIterator(object,kind||KIND_VALUE);}else \n{\nreturn object[ITERATOR_SYMBOL]();}};})();}else \n\n\n\n{\nreturn function(object){\nreturn object[ITERATOR_SYMBOL]();};}})();\n\n\n\n\n\n\n\n\nbabelHelpers.extends(toIterator,{\nKIND_KEY:KIND_KEY,\nKIND_VALUE:KIND_VALUE,\nKIND_KEY_VAL:KIND_KEY_VAL,\nITERATOR_SYMBOL:ITERATOR_SYMBOL});\n\n\nmodule.exports=toIterator;\n});\n__d('_shouldPolyfillES6Collection',function(global, require, module, exports) {  function \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nshouldPolyfillES6Collection(collectionName){\nvar Collection=global[collectionName];\nif(Collection==null){\nreturn true;}\n\n\n\n\n\n\nif(typeof global.Symbol!=='function'){\nreturn true;}\n\n\nvar proto=Collection.prototype;\n\n\n\n\nreturn Collection==null||\ntypeof Collection!=='function'||\ntypeof proto.clear!=='function'||\nnew Collection().size!==0||\ntypeof proto.keys!=='function'||\ntypeof proto.forEach!=='function';}\n\n\nmodule.exports=shouldPolyfillES6Collection;\n});\n__d('ReactNativeGlobalResponderHandler',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTUIManager=require('NativeModules').UIManager;\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\n\nvar ReactNativeGlobalResponderHandler={\nonChange:function(from,to,blockNativeResponder){\nif(to!==null){\nRCTUIManager.setJSResponder(\nReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(to),\nblockNativeResponder);}else \n\n{\nRCTUIManager.clearJSResponder();}}};\n\n\n\n\nmodule.exports=ReactNativeGlobalResponderHandler;\n});\n__d('ResponderEventPlugin',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventConstants=require('EventConstants');\nvar EventPluginUtils=require('EventPluginUtils');\nvar EventPropagators=require('EventPropagators');\nvar ReactInstanceHandles=require('ReactInstanceHandles');\nvar ResponderSyntheticEvent=require('ResponderSyntheticEvent');\nvar ResponderTouchHistoryStore=require('ResponderTouchHistoryStore');\n\nvar accumulate=require('accumulate');\nvar invariant=require('invariant');\nvar keyOf=require('keyOf');\n\nvar isStartish=EventPluginUtils.isStartish;\nvar isMoveish=EventPluginUtils.isMoveish;\nvar isEndish=EventPluginUtils.isEndish;\nvar executeDirectDispatch=EventPluginUtils.executeDirectDispatch;\nvar hasDispatches=EventPluginUtils.hasDispatches;\nvar executeDispatchesInOrderStopAtTrue=\nEventPluginUtils.executeDispatchesInOrderStopAtTrue;\n\n\n\n\n\nvar responderID=null;\n\n\n\n\n\nvar trackedTouchCount=0;\n\n\n\n\nvar previousActiveTouches=0;\n\nvar changeResponder=function(nextResponderID,blockNativeResponder){\nvar oldResponderID=responderID;\nresponderID=nextResponderID;\nif(ResponderEventPlugin.GlobalResponderHandler!==null){\nResponderEventPlugin.GlobalResponderHandler.onChange(\noldResponderID,\nnextResponderID,\nblockNativeResponder);}};\n\n\n\n\nvar eventTypes={\n\n\n\n\nstartShouldSetResponder:{\nphasedRegistrationNames:{\nbubbled:keyOf({onStartShouldSetResponder:null}),\ncaptured:keyOf({onStartShouldSetResponderCapture:null})}},\n\n\n\n\n\n\n\n\n\n\n\n\nscrollShouldSetResponder:{\nphasedRegistrationNames:{\nbubbled:keyOf({onScrollShouldSetResponder:null}),\ncaptured:keyOf({onScrollShouldSetResponderCapture:null})}},\n\n\n\n\n\n\n\n\n\n\nselectionChangeShouldSetResponder:{\nphasedRegistrationNames:{\nbubbled:keyOf({onSelectionChangeShouldSetResponder:null}),\ncaptured:keyOf({onSelectionChangeShouldSetResponderCapture:null})}},\n\n\n\n\n\n\n\nmoveShouldSetResponder:{\nphasedRegistrationNames:{\nbubbled:keyOf({onMoveShouldSetResponder:null}),\ncaptured:keyOf({onMoveShouldSetResponderCapture:null})}},\n\n\n\n\n\n\nresponderStart:{registrationName:keyOf({onResponderStart:null})},\nresponderMove:{registrationName:keyOf({onResponderMove:null})},\nresponderEnd:{registrationName:keyOf({onResponderEnd:null})},\nresponderRelease:{registrationName:keyOf({onResponderRelease:null})},\nresponderTerminationRequest:{\nregistrationName:keyOf({onResponderTerminationRequest:null})},\n\nresponderGrant:{registrationName:keyOf({onResponderGrant:null})},\nresponderReject:{registrationName:keyOf({onResponderReject:null})},\nresponderTerminate:{registrationName:keyOf({onResponderTerminate:null})}};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction setResponderAndExtractTransfer(\ntopLevelType,\ntopLevelTargetID,\nnativeEvent,\nnativeEventTarget){\nvar shouldSetEventType=\nisStartish(topLevelType)?eventTypes.startShouldSetResponder:\nisMoveish(topLevelType)?eventTypes.moveShouldSetResponder:\ntopLevelType===EventConstants.topLevelTypes.topSelectionChange?\neventTypes.selectionChangeShouldSetResponder:\neventTypes.scrollShouldSetResponder;\n\n\nvar bubbleShouldSetFrom=!responderID?\ntopLevelTargetID:\nReactInstanceHandles.getFirstCommonAncestorID(responderID,topLevelTargetID);\n\n\n\n\n\nvar skipOverBubbleShouldSetFrom=bubbleShouldSetFrom===responderID;\nvar shouldSetEvent=ResponderSyntheticEvent.getPooled(\nshouldSetEventType,\nbubbleShouldSetFrom,\nnativeEvent,\nnativeEventTarget);\n\nshouldSetEvent.touchHistory=ResponderTouchHistoryStore.touchHistory;\nif(skipOverBubbleShouldSetFrom){\nEventPropagators.accumulateTwoPhaseDispatchesSkipTarget(shouldSetEvent);}else \n{\nEventPropagators.accumulateTwoPhaseDispatches(shouldSetEvent);}\n\nvar wantsResponderID=executeDispatchesInOrderStopAtTrue(shouldSetEvent);\nif(!shouldSetEvent.isPersistent()){\nshouldSetEvent.constructor.release(shouldSetEvent);}\n\n\nif(!wantsResponderID||wantsResponderID===responderID){\nreturn null;}\n\nvar extracted;\nvar grantEvent=ResponderSyntheticEvent.getPooled(\neventTypes.responderGrant,\nwantsResponderID,\nnativeEvent,\nnativeEventTarget);\n\ngrantEvent.touchHistory=ResponderTouchHistoryStore.touchHistory;\n\nEventPropagators.accumulateDirectDispatches(grantEvent);\nvar blockNativeResponder=executeDirectDispatch(grantEvent)===true;\nif(responderID){\n\nvar terminationRequestEvent=ResponderSyntheticEvent.getPooled(\neventTypes.responderTerminationRequest,\nresponderID,\nnativeEvent,\nnativeEventTarget);\n\nterminationRequestEvent.touchHistory=ResponderTouchHistoryStore.touchHistory;\nEventPropagators.accumulateDirectDispatches(terminationRequestEvent);\nvar shouldSwitch=!hasDispatches(terminationRequestEvent)||\nexecuteDirectDispatch(terminationRequestEvent);\nif(!terminationRequestEvent.isPersistent()){\nterminationRequestEvent.constructor.release(terminationRequestEvent);}\n\n\nif(shouldSwitch){\nvar terminateType=eventTypes.responderTerminate;\nvar terminateEvent=ResponderSyntheticEvent.getPooled(\nterminateType,\nresponderID,\nnativeEvent,\nnativeEventTarget);\n\nterminateEvent.touchHistory=ResponderTouchHistoryStore.touchHistory;\nEventPropagators.accumulateDirectDispatches(terminateEvent);\nextracted=accumulate(extracted,[grantEvent,terminateEvent]);\nchangeResponder(wantsResponderID,blockNativeResponder);}else \n{\nvar rejectEvent=ResponderSyntheticEvent.getPooled(\neventTypes.responderReject,\nwantsResponderID,\nnativeEvent,\nnativeEventTarget);\n\nrejectEvent.touchHistory=ResponderTouchHistoryStore.touchHistory;\nEventPropagators.accumulateDirectDispatches(rejectEvent);\nextracted=accumulate(extracted,rejectEvent);}}else \n\n{\nextracted=accumulate(extracted,grantEvent);\nchangeResponder(wantsResponderID,blockNativeResponder);}\n\nreturn extracted;}\n\n\n\n\n\n\n\n\n\n\nfunction canTriggerTransfer(topLevelType,topLevelTargetID,nativeEvent){\nreturn topLevelTargetID&&(\n\n\n\ntopLevelType===EventConstants.topLevelTypes.topScroll&&\n!nativeEvent.responderIgnoreScroll||\ntrackedTouchCount>0&&\ntopLevelType===EventConstants.topLevelTypes.topSelectionChange||\nisStartish(topLevelType)||\nisMoveish(topLevelType));}\n\n\n\n\n\n\n\n\n\n\nfunction noResponderTouches(nativeEvent){\nvar touches=nativeEvent.touches;\nif(!touches||touches.length===0){\nreturn true;}\n\nfor(var i=0;i<touches.length;i++){\nvar activeTouch=touches[i];\nvar target=activeTouch.target;\nif(target!==null&&target!==undefined&&target!==0){\n\nvar isAncestor=\nReactInstanceHandles.isAncestorIDOf(\nresponderID,\nEventPluginUtils.getID(target));\n\nif(isAncestor){\nreturn false;}}}\n\n\n\nreturn true;}\n\n\n\nvar ResponderEventPlugin={\n\ngetResponderID:function(){\nreturn responderID;},\n\n\neventTypes:eventTypes,\n\n\n\n\n\n\n\n\n\n\n\n\n\nextractEvents:function(\ntopLevelType,\ntopLevelTarget,\ntopLevelTargetID,\nnativeEvent,\nnativeEventTarget){\nif(isStartish(topLevelType)){\ntrackedTouchCount+=1;}else \nif(isEndish(topLevelType)){\ntrackedTouchCount-=1;\ninvariant(\ntrackedTouchCount>=0,\n'Ended a touch event which was not counted in trackedTouchCount.');}\n\n\n\nResponderTouchHistoryStore.recordTouchTrack(topLevelType,nativeEvent,nativeEventTarget);\n\nvar extracted=canTriggerTransfer(topLevelType,topLevelTargetID,nativeEvent)?\nsetResponderAndExtractTransfer(\ntopLevelType,\ntopLevelTargetID,\nnativeEvent,\nnativeEventTarget):\nnull;\n\n\n\n\n\n\n\n\n\n\nvar isResponderTouchStart=responderID&&isStartish(topLevelType);\nvar isResponderTouchMove=responderID&&isMoveish(topLevelType);\nvar isResponderTouchEnd=responderID&&isEndish(topLevelType);\nvar incrementalTouch=\nisResponderTouchStart?eventTypes.responderStart:\nisResponderTouchMove?eventTypes.responderMove:\nisResponderTouchEnd?eventTypes.responderEnd:\nnull;\n\nif(incrementalTouch){\nvar gesture=\nResponderSyntheticEvent.getPooled(\nincrementalTouch,\nresponderID,\nnativeEvent,\nnativeEventTarget);\n\ngesture.touchHistory=ResponderTouchHistoryStore.touchHistory;\nEventPropagators.accumulateDirectDispatches(gesture);\nextracted=accumulate(extracted,gesture);}\n\n\nvar isResponderTerminate=\nresponderID&&\ntopLevelType===EventConstants.topLevelTypes.topTouchCancel;\nvar isResponderRelease=\nresponderID&&\n!isResponderTerminate&&\nisEndish(topLevelType)&&\nnoResponderTouches(nativeEvent);\nvar finalTouch=\nisResponderTerminate?eventTypes.responderTerminate:\nisResponderRelease?eventTypes.responderRelease:\nnull;\nif(finalTouch){\nvar finalEvent=\nResponderSyntheticEvent.getPooled(finalTouch,responderID,nativeEvent,nativeEventTarget);\nfinalEvent.touchHistory=ResponderTouchHistoryStore.touchHistory;\nEventPropagators.accumulateDirectDispatches(finalEvent);\nextracted=accumulate(extracted,finalEvent);\nchangeResponder(null);}\n\n\nvar numberActiveTouches=\nResponderTouchHistoryStore.touchHistory.numberActiveTouches;\nif(ResponderEventPlugin.GlobalInteractionHandler&&\nnumberActiveTouches!==previousActiveTouches){\nResponderEventPlugin.GlobalInteractionHandler.onChange(\nnumberActiveTouches);}\n\n\npreviousActiveTouches=numberActiveTouches;\n\nreturn extracted;},\n\n\nGlobalResponderHandler:null,\nGlobalInteractionHandler:null,\n\ninjection:{\n\n\n\n\n\ninjectGlobalResponderHandler:function(GlobalResponderHandler){\nResponderEventPlugin.GlobalResponderHandler=GlobalResponderHandler;},\n\n\n\n\n\n\ninjectGlobalInteractionHandler:function(GlobalInteractionHandler){\nResponderEventPlugin.GlobalInteractionHandler=GlobalInteractionHandler;}}};\n\n\n\n\nmodule.exports=ResponderEventPlugin;\n});\n__d('ResponderSyntheticEvent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar SyntheticEvent=require('SyntheticEvent');\n\n\n\n\n\n\nvar ResponderEventInterface={\ntouchHistory:function(nativeEvent){\nreturn null;}};\n\n\n\n\n\n\n\n\n\nfunction ResponderSyntheticEvent(dispatchConfig,dispatchMarker,nativeEvent,nativeEventTarget){\nSyntheticEvent.call(this,dispatchConfig,dispatchMarker,nativeEvent,nativeEventTarget);}\n\n\nSyntheticEvent.augmentClass(ResponderSyntheticEvent,ResponderEventInterface);\n\nmodule.exports=ResponderSyntheticEvent;\n});\n__d('ResponderTouchHistoryStore',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventPluginUtils=require('EventPluginUtils');\n\nvar invariant=require('invariant');\n\nvar isMoveish=EventPluginUtils.isMoveish;\nvar isStartish=EventPluginUtils.isStartish;\nvar isEndish=EventPluginUtils.isEndish;\n\nvar MAX_TOUCH_BANK=20;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar touchHistory={\ntouchBank:[],\nnumberActiveTouches:0,\n\n\n\nindexOfSingleActiveTouch:-1,\nmostRecentTimeStamp:0};\n\n\nvar timestampForTouch=function(touch){\n\n\n\nreturn touch.timeStamp||touch.timestamp;};\n\n\n\n\n\n\n\nvar initializeTouchData=function(touch){\nreturn {\ntouchActive:true,\nstartTimeStamp:timestampForTouch(touch),\nstartPageX:touch.pageX,\nstartPageY:touch.pageY,\ncurrentPageX:touch.pageX,\ncurrentPageY:touch.pageY,\ncurrentTimeStamp:timestampForTouch(touch),\npreviousPageX:touch.pageX,\npreviousPageY:touch.pageY,\npreviousTimeStamp:timestampForTouch(touch)};};\n\n\n\nvar reinitializeTouchTrack=function(touchTrack,touch){\ntouchTrack.touchActive=true;\ntouchTrack.startTimeStamp=timestampForTouch(touch);\ntouchTrack.startPageX=touch.pageX;\ntouchTrack.startPageY=touch.pageY;\ntouchTrack.currentPageX=touch.pageX;\ntouchTrack.currentPageY=touch.pageY;\ntouchTrack.currentTimeStamp=timestampForTouch(touch);\ntouchTrack.previousPageX=touch.pageX;\ntouchTrack.previousPageY=touch.pageY;\ntouchTrack.previousTimeStamp=timestampForTouch(touch);};\n\n\nvar validateTouch=function(touch){\nvar identifier=touch.identifier;\ninvariant(identifier!=null,'Touch object is missing identifier');\nif(identifier>MAX_TOUCH_BANK){\nconsole.warn(\n'Touch identifier '+identifier+' is greater than maximum '+\n'supported '+MAX_TOUCH_BANK+' which causes performance issues '+\n'backfilling array locations for all of the indices.');}};\n\n\n\n\nvar recordStartTouchData=function(touch){\nvar touchBank=touchHistory.touchBank;\nvar identifier=touch.identifier;\nvar touchTrack=touchBank[identifier];\nif(__DEV__){\nvalidateTouch(touch);}\n\nif(touchTrack){\nreinitializeTouchTrack(touchTrack,touch);}else \n{\ntouchBank[touch.identifier]=initializeTouchData(touch);}\n\ntouchHistory.mostRecentTimeStamp=timestampForTouch(touch);};\n\n\nvar recordMoveTouchData=function(touch){\nvar touchBank=touchHistory.touchBank;\nvar touchTrack=touchBank[touch.identifier];\nif(__DEV__){\nvalidateTouch(touch);\ninvariant(touchTrack,'Touch data should have been recorded on start');}\n\ntouchTrack.touchActive=true;\ntouchTrack.previousPageX=touchTrack.currentPageX;\ntouchTrack.previousPageY=touchTrack.currentPageY;\ntouchTrack.previousTimeStamp=touchTrack.currentTimeStamp;\ntouchTrack.currentPageX=touch.pageX;\ntouchTrack.currentPageY=touch.pageY;\ntouchTrack.currentTimeStamp=timestampForTouch(touch);\ntouchHistory.mostRecentTimeStamp=timestampForTouch(touch);};\n\n\nvar recordEndTouchData=function(touch){\nvar touchBank=touchHistory.touchBank;\nvar touchTrack=touchBank[touch.identifier];\nif(__DEV__){\nvalidateTouch(touch);\ninvariant(touchTrack,'Touch data should have been recorded on start');}\n\ntouchTrack.previousPageX=touchTrack.currentPageX;\ntouchTrack.previousPageY=touchTrack.currentPageY;\ntouchTrack.previousTimeStamp=touchTrack.currentTimeStamp;\ntouchTrack.currentPageX=touch.pageX;\ntouchTrack.currentPageY=touch.pageY;\ntouchTrack.currentTimeStamp=timestampForTouch(touch);\ntouchTrack.touchActive=false;\ntouchHistory.mostRecentTimeStamp=timestampForTouch(touch);};\n\n\nvar ResponderTouchHistoryStore={\nrecordTouchTrack:function(topLevelType,nativeEvent){\nvar touchBank=touchHistory.touchBank;\nif(isMoveish(topLevelType)){\nnativeEvent.changedTouches.forEach(recordMoveTouchData);}else \nif(isStartish(topLevelType)){\nnativeEvent.changedTouches.forEach(recordStartTouchData);\ntouchHistory.numberActiveTouches=nativeEvent.touches.length;\nif(touchHistory.numberActiveTouches===1){\ntouchHistory.indexOfSingleActiveTouch=nativeEvent.touches[0].identifier;}}else \n\nif(isEndish(topLevelType)){\nnativeEvent.changedTouches.forEach(recordEndTouchData);\ntouchHistory.numberActiveTouches=nativeEvent.touches.length;\nif(touchHistory.numberActiveTouches===1){\nfor(var i=0;i<touchBank.length;i++){\nvar touchTrackToCheck=touchBank[i];\nif(touchTrackToCheck!=null&&touchTrackToCheck.touchActive){\ntouchHistory.indexOfSingleActiveTouch=i;\nbreak;}}\n\n\nif(__DEV__){\nvar activeTouchData=touchBank[touchHistory.indexOfSingleActiveTouch];\nvar foundActive=activeTouchData!=null&&!!activeTouchData.touchActive;\ninvariant(foundActive,'Cannot find single active touch');}}}},\n\n\n\n\n\ntouchHistory:touchHistory};\n\n\n\nmodule.exports=ResponderTouchHistoryStore;\n});\n__d('accumulate',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\nfunction accumulate(current,next){\ninvariant(\nnext!=null,\n'accumulate(...): Accumulated items must be not be null or undefined.');\n\nif(current==null){\nreturn next;}else \n{\n\n\nvar currentIsArray=Array.isArray(current);\nvar nextIsArray=Array.isArray(next);\nif(currentIsArray){\nreturn current.concat(next);}else \n{\nif(nextIsArray){\nreturn [current].concat(next);}else \n{\nreturn [current,next];}}}}\n\n\n\n\n\nmodule.exports=accumulate;\n});\n__d('keyOf',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nkeyOf=function(oneKeyObj){\nvar key;\nfor(key in oneKeyObj){\nif(!oneKeyObj.hasOwnProperty(key)){\ncontinue;}\n\nreturn key;}\n\nreturn null;};\n\n\n\nmodule.exports=keyOf;\n});\n__d('UniversalWorkerNodeHandle',function(global, require, module, exports) {  var \n\n\n\nReactNativeTagHandles=require('ReactNativeTagHandles');\n\nvar invariant=require('invariant');\n\nvar UniversalWorkerNodeHandle={\ngetRootNodeID:function(nodeHandle){\ninvariant(\nnodeHandle!==undefined&&nodeHandle!==null&&nodeHandle!==0,\n'No node handle defined');\n\nreturn ReactNativeTagHandles.tagToRootNodeID[nodeHandle];}};\n\n\n\nmodule.exports=UniversalWorkerNodeHandle;\n});\n__d('createReactNativeComponentClass',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeBaseComponent=require('ReactNativeBaseComponent');\n\n\n\n\n\n\n\n\n\n\n\n\nvar createReactNativeComponentClass=function(\nviewConfig)\n{\nvar Constructor=function(element){\nthis._currentElement=element;\n\nthis._rootNodeID=null;\nthis._renderedChildren=null;};\n\nConstructor.displayName=viewConfig.uiViewClassName;\nConstructor.viewConfig=viewConfig;\nConstructor.propTypes=viewConfig.propTypes;\nConstructor.prototype=new ReactNativeBaseComponent(viewConfig);\nConstructor.prototype.constructor=Constructor;\n\nreturn Constructor;};\n\n\nmodule.exports=createReactNativeComponentClass;\n});\n__d('ReactNativeBaseComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar ReactNativeAttributePayload=require('ReactNativeAttributePayload');\nvar ReactNativeEventEmitter=require('ReactNativeEventEmitter');\nvar ReactNativeStyleAttributes=require('ReactNativeStyleAttributes');\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\nvar ReactNativeViewPool=require('ReactNativeViewPool');\nvar ReactMultiChild=require('ReactMultiChild');\nvar RCTUIManager=require('NativeModules').UIManager;\n\nvar deepFreezeAndThrowOnMutationInDev=require('deepFreezeAndThrowOnMutationInDev');\nvar warning=require('warning');\n\nvar registrationNames=ReactNativeEventEmitter.registrationNames;\nvar putListener=ReactNativeEventEmitter.putListener;\nvar deleteListener=ReactNativeEventEmitter.deleteListener;\nvar deleteAllListeners=ReactNativeEventEmitter.deleteAllListeners;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeBaseComponent=function(\nviewConfig)\n{\nthis.viewConfig=viewConfig;};\n\n\n\n\n\n\n\n\n\n\n\n\nvar cachedIndexArray=function(size){\nvar cachedResult=cachedIndexArray._cache[size];\nif(!cachedResult){\nvar arr=[];\nfor(var i=0;i<size;i++){\narr[i]=i;}\n\ncachedIndexArray._cache[size]=arr;\nreturn arr;}else \n{\nreturn cachedResult;}};\n\n\ncachedIndexArray._cache={};\n\n\n\n\n\nReactNativeBaseComponent.Mixin={\ngetPublicInstance:function(){\n\nreturn this;},\n\n\nconstruct:function(element){\nthis._currentElement=element;},\n\n\nunmountComponent:function(){\ndeleteAllListeners(this._rootNodeID);\nthis.unmountChildren();\nReactNativeViewPool.release(this);\nthis._rootNodeID=null;},\n\n\n\n\n\n\n\n\n\n\ninitializeChildren:function(children,containerTag,transaction,context){\nvar mountImages=this.mountChildren(children,transaction,context);\n\n\n\nif(mountImages.length){\nvar indexes=cachedIndexArray(mountImages.length);\n\n\nvar createdTags=[];\nfor(var i=0;i<mountImages.length;i++){\nvar mountImage=mountImages[i];\nvar childTag=mountImage.tag;\nvar childID=mountImage.rootNodeID;\nwarning(\nmountImage&&mountImage.rootNodeID&&mountImage.tag,\n'Mount image returned does not have required data');\n\nReactNativeTagHandles.associateRootNodeIDWithMountedNodeHandle(\nchildID,\nchildTag);\n\ncreatedTags[i]=mountImage.tag;}\n\nRCTUIManager.\nmanageChildren(containerTag,null,null,createdTags,indexes,null);}},\n\n\n\n\n\n\n\n\n\n\n\nreceiveComponent:function(nextElement,transaction,context){\nvar prevElement=this._currentElement;\nthis._currentElement=nextElement;\n\nif(__DEV__){\ndeepFreezeAndThrowOnMutationInDev(this._currentElement.props);}\n\n\nvar updatePayload=ReactNativeAttributePayload.diff(\nprevElement.props,\nnextElement.props,\nthis.viewConfig.validAttributes);\n\n\nif(updatePayload){\nRCTUIManager.updateView(\nReactNativeTagHandles.mostRecentMountedNodeHandleForRootNodeID(this._rootNodeID),\nthis.viewConfig.uiViewClassName,\nupdatePayload);}\n\n\n\nthis._reconcileListenersUponUpdate(\nprevElement.props,\nnextElement.props);\n\nthis.updateChildren(nextElement.props.children,transaction,context);},\n\n\n\n\n\n_registerListenersUponCreation:function(initialProps){\nfor(var key in initialProps){\n\n\nif(registrationNames[key]&&initialProps[key]){\nvar listener=initialProps[key];\nputListener(this._rootNodeID,key,listener);}}},\n\n\n\n\n\n\n\n\n\n_reconcileListenersUponUpdate:function(prevProps,nextProps){\nfor(var key in nextProps){\nif(registrationNames[key]&&nextProps[key]!==prevProps[key]){\nif(nextProps[key]){\nputListener(this._rootNodeID,key,nextProps[key]);}else \n{\ndeleteListener(this._rootNodeID,key);}}}},\n\n\n\n\n\n\n\n\n\n\nmountComponent:function(rootID,transaction,context){\nthis._rootNodeID=rootID;\n\nvar tag=ReactNativeViewPool.acquire(this);\n\nthis._registerListenersUponCreation(this._currentElement.props);\nthis.initializeChildren(\nthis._currentElement.props.children,\ntag,\ntransaction,\ncontext);\n\nreturn {\nrootNodeID:rootID,\ntag:tag};}};\n\n\n\n\n\n\n\n\nbabelHelpers.extends(\nReactNativeBaseComponent.prototype,\nReactMultiChild.Mixin,\nReactNativeBaseComponent.Mixin,\nNativeMethodsMixin);\n\n\nmodule.exports=ReactNativeBaseComponent;\n});\n__d('NativeMethodsMixin',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeModules=require('NativeModules');\nvar RCTUIManager=NativeModules.UIManager;\nvar ReactNativeAttributePayload=require('ReactNativeAttributePayload');\nvar TextInputState=require('TextInputState');\n\nvar findNodeHandle=require('findNodeHandle');\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction warnForStyleProps(props,validAttributes){\nfor(var key in validAttributes.style){\nif(!(validAttributes[key]||props[key]===undefined)){\nconsole.error(\n'You are setting the style `{ '+key+': ... }` as a prop. You '+\n'should nest it in a style object. '+\n'E.g. `{ style: { '+key+': ... } }`');}}}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin={\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmeasure:function(callback){\nRCTUIManager.measure(\nfindNodeHandle(this),\nmountSafeCallback(this,callback));},\n\n\n\n\n\n\n\n\n\n\n\nmeasureLayout:function(\nrelativeToNativeNode,\nonSuccess,\nonFail)\n{\nRCTUIManager.measureLayout(\nfindNodeHandle(this),\nrelativeToNativeNode,\nmountSafeCallback(this,onFail),\nmountSafeCallback(this,onSuccess));},\n\n\n\n\n\n\n\n\n\nsetNativeProps:function(nativeProps){\nif(__DEV__){\nwarnForStyleProps(nativeProps,this.viewConfig.validAttributes);}\n\n\nvar updatePayload=ReactNativeAttributePayload.create(\nnativeProps,\nthis.viewConfig.validAttributes);\n\n\nRCTUIManager.updateView(\nfindNodeHandle(this),\nthis.viewConfig.uiViewClassName,\nupdatePayload);},\n\n\n\n\n\n\n\nfocus:function(){\nTextInputState.focusTextInput(findNodeHandle(this));},\n\n\n\n\n\nblur:function(){\nTextInputState.blurTextInput(findNodeHandle(this));}};\n\n\n\nfunction throwOnStylesProp(component,props){\nif(props.styles!==undefined){\nvar owner=component._owner||null;\nvar name=component.constructor.displayName;\nvar msg='`styles` is not a supported property of `'+name+'`, did '+\n'you mean `style` (singular)?';\nif(owner&&owner.constructor&&owner.constructor.displayName){\nmsg+='\\n\\nCheck the `'+owner.constructor.displayName+'` parent '+\n' component.';}\n\nthrow new Error(msg);}}\n\n\nif(__DEV__){\n\n\n\nvar NativeMethodsMixin_DEV=NativeMethodsMixin;\ninvariant(\n!NativeMethodsMixin_DEV.componentWillMount&&\n!NativeMethodsMixin_DEV.componentWillReceiveProps,\n'Do not override existing functions.');\n\nNativeMethodsMixin_DEV.componentWillMount=function(){\nthrowOnStylesProp(this,this.props);};\n\nNativeMethodsMixin_DEV.componentWillReceiveProps=function(newProps){\nthrowOnStylesProp(this,newProps);};}\n\n\n\n\n\n\n\nvar mountSafeCallback=function(context,callback){\nreturn function(){\nif(!callback||context.isMounted&&!context.isMounted()){\nreturn;}\n\nreturn callback.apply(context,arguments);};};\n\n\n\nmodule.exports=NativeMethodsMixin;\n});\n__d('TextInputState',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Platform=require('Platform');\nvar RCTUIManager=require('NativeModules').UIManager;\n\nvar TextInputState={\n\n\n\n_currentlyFocusedID:null,\n\n\n\n\n\ncurrentlyFocusedField:function(){\nreturn this._currentlyFocusedID;},\n\n\n\n\n\n\n\nfocusTextInput:function(textFieldID){\nif(this._currentlyFocusedID!==textFieldID&&textFieldID!==null){\nthis._currentlyFocusedID=textFieldID;\nif(Platform.OS==='ios'){\nRCTUIManager.focus(textFieldID);}else \nif(Platform.OS==='android'){\nRCTUIManager.dispatchViewManagerCommand(\ntextFieldID,\nRCTUIManager.AndroidTextInput.Commands.focusTextInput,\nnull);}}},\n\n\n\n\n\n\n\n\n\n\nblurTextInput:function(textFieldID){\nif(this._currentlyFocusedID===textFieldID&&textFieldID!==null){\nthis._currentlyFocusedID=null;\nif(Platform.OS==='ios'){\nRCTUIManager.blur(textFieldID);}else \nif(Platform.OS==='android'){\nRCTUIManager.dispatchViewManagerCommand(\ntextFieldID,\nRCTUIManager.AndroidTextInput.Commands.blurTextInput,\nnull);}}}};\n\n\n\n\n\n\nmodule.exports=TextInputState;\n});\n__d('ReactNativeEventEmitter',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventPluginHub=require('EventPluginHub');\nvar ReactEventEmitterMixin=require('ReactEventEmitterMixin');\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\nvar NodeHandle=require('NodeHandle');\nvar EventConstants=require('EventConstants');\n\nvar merge=require('merge');\nvar warning=require('warning');\n\nvar topLevelTypes=EventConstants.topLevelTypes;\n\n\n\n\n\n\n\nvar EMPTY_NATIVE_EVENT={};\n\n\n\n\n\n\n\n\nvar touchSubsequence=function(touches,indices){\nvar ret=[];\nfor(var i=0;i<indices.length;i++){\nret.push(touches[indices[i]]);}\n\nreturn ret;};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar removeTouchesAtIndices=function(\ntouches,\nindices)\n{\nvar rippedOut=[];\n\n\nvar temp=touches;\nfor(var i=0;i<indices.length;i++){\nvar index=indices[i];\nrippedOut.push(touches[index]);\ntemp[index]=null;}\n\nvar fillAt=0;\nfor(var j=0;j<temp.length;j++){\nvar cur=temp[j];\nif(cur!==null){\ntemp[fillAt++]=cur;}}\n\n\ntemp.length=fillAt;\nreturn rippedOut;};\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeEventEmitter=merge(ReactEventEmitterMixin,{\n\nregistrationNames:EventPluginHub.registrationNameModules,\n\nputListener:EventPluginHub.putListener,\n\ngetListener:EventPluginHub.getListener,\n\ndeleteListener:EventPluginHub.deleteListener,\n\ndeleteAllListeners:EventPluginHub.deleteAllListeners,\n\n\n\n\n\n\n\n\n\n\n\n_receiveRootNodeIDEvent:function(\nrootNodeID,\ntopLevelType,\nnativeEventParam)\n{\nvar nativeEvent=nativeEventParam||EMPTY_NATIVE_EVENT;\nReactNativeEventEmitter.handleTopLevel(\ntopLevelType,\nrootNodeID,\nrootNodeID,\nnativeEvent,\nnativeEvent.target);},\n\n\n\n\n\n\n\n\n\n\nreceiveEvent:function(\ntag,\ntopLevelType,\nnativeEventParam)\n{\nvar rootNodeID=ReactNativeTagHandles.tagToRootNodeID[tag];\nReactNativeEventEmitter._receiveRootNodeIDEvent(\nrootNodeID,\ntopLevelType,\nnativeEventParam);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nreceiveTouches:function(\neventTopLevelType,\ntouches,\nchangedIndices)\n{\nvar changedTouches=\neventTopLevelType===topLevelTypes.topTouchEnd||\neventTopLevelType===topLevelTypes.topTouchCancel?\nremoveTouchesAtIndices(touches,changedIndices):\ntouchSubsequence(touches,changedIndices);\n\nfor(var jj=0;jj<changedTouches.length;jj++){\nvar touch=changedTouches[jj];\n\n\ntouch.changedTouches=changedTouches;\ntouch.touches=touches;\nvar nativeEvent=touch;\nvar rootNodeID=null;\nvar target=nativeEvent.target;\nif(target!==null&&target!==undefined){\nif(target<ReactNativeTagHandles.tagsStartAt){\nif(__DEV__){\nwarning(\nfalse,\n'A view is reporting that a touch occured on tag zero.');}}else \n\n\n{\nrootNodeID=NodeHandle.getRootNodeID(target);}}\n\n\nReactNativeEventEmitter._receiveRootNodeIDEvent(\nrootNodeID,\neventTopLevelType,\nnativeEvent);}}});\n\n\n\n\n\nmodule.exports=ReactNativeEventEmitter;\n});\n__d('ReactEventEmitterMixin',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventPluginHub=require('EventPluginHub');\n\nfunction runEventQueueInBatch(events){\nEventPluginHub.enqueueEvents(events);\nEventPluginHub.processEventQueue(false);}\n\n\nvar ReactEventEmitterMixin={\n\n\n\n\n\n\n\n\n\n\nhandleTopLevel:function(\ntopLevelType,\ntopLevelTarget,\ntopLevelTargetID,\nnativeEvent,\nnativeEventTarget){\nvar events=EventPluginHub.extractEvents(\ntopLevelType,\ntopLevelTarget,\ntopLevelTargetID,\nnativeEvent,\nnativeEventTarget);\n\nrunEventQueueInBatch(events);}};\n\n\n\nmodule.exports=ReactEventEmitterMixin;\n});\n__d('ReactNativeStyleAttributes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ImageStylePropTypes=require('ImageStylePropTypes');\nvar TextStylePropTypes=require('TextStylePropTypes');\nvar ViewStylePropTypes=require('ViewStylePropTypes');\n\nvar keyMirror=require('keyMirror');\nvar matricesDiffer=require('matricesDiffer');\nvar processColor=require('processColor');\nvar processTransform=require('processTransform');\nvar sizesDiffer=require('sizesDiffer');\n\nvar ReactNativeStyleAttributes=babelHelpers.extends({},\nkeyMirror(ViewStylePropTypes),\nkeyMirror(TextStylePropTypes),\nkeyMirror(ImageStylePropTypes));\n\n\nReactNativeStyleAttributes.transform={process:processTransform};\nReactNativeStyleAttributes.transformMatrix={diff:matricesDiffer};\nReactNativeStyleAttributes.shadowOffset={diff:sizesDiffer};\n\n\nReactNativeStyleAttributes.decomposedMatrix='decomposedMatrix';\n\nvar colorAttributes={process:processColor};\nReactNativeStyleAttributes.backgroundColor=colorAttributes;\nReactNativeStyleAttributes.borderBottomColor=colorAttributes;\nReactNativeStyleAttributes.borderColor=colorAttributes;\nReactNativeStyleAttributes.borderLeftColor=colorAttributes;\nReactNativeStyleAttributes.borderRightColor=colorAttributes;\nReactNativeStyleAttributes.borderTopColor=colorAttributes;\nReactNativeStyleAttributes.color=colorAttributes;\nReactNativeStyleAttributes.shadowColor=colorAttributes;\nReactNativeStyleAttributes.textDecorationColor=colorAttributes;\nReactNativeStyleAttributes.tintColor=colorAttributes;\n\nmodule.exports=ReactNativeStyleAttributes;\n});\n__d('ImageStylePropTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ImageResizeMode=require('ImageResizeMode');\nvar LayoutPropTypes=require('LayoutPropTypes');\nvar ReactPropTypes=require('ReactPropTypes');\nvar TransformPropTypes=require('TransformPropTypes');\n\nvar ImageStylePropTypes=babelHelpers.extends({},\nLayoutPropTypes,\nTransformPropTypes,{\nresizeMode:ReactPropTypes.oneOf(Object.keys(ImageResizeMode)),\nbackgroundColor:ReactPropTypes.string,\nborderColor:ReactPropTypes.string,\nborderWidth:ReactPropTypes.number,\nborderRadius:ReactPropTypes.number,\noverflow:ReactPropTypes.oneOf(['visible','hidden']),\n\n\n\ntintColor:ReactPropTypes.string,\nopacity:ReactPropTypes.number});\n\n\nmodule.exports=ImageStylePropTypes;\n});\n__d('ImageResizeMode',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar keyMirror=require('keyMirror');\n\n\n\n\n\nvar ImageResizeMode=keyMirror({\n\n\n\n\ncontain:null,\n\n\n\n\ncover:null,\n\n\n\n\n\nstretch:null});\n\n\nmodule.exports=ImageResizeMode;\n});\n__d('LayoutPropTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactPropTypes=require('ReactPropTypes');\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar LayoutPropTypes={\nwidth:ReactPropTypes.number,\nmaxWidth:ReactPropTypes.number,\nminWidth:ReactPropTypes.number,\nheight:ReactPropTypes.number,\nmaxHeight:ReactPropTypes.number,\nminHeight:ReactPropTypes.number,\ntop:ReactPropTypes.number,\nleft:ReactPropTypes.number,\nright:ReactPropTypes.number,\nbottom:ReactPropTypes.number,\nmargin:ReactPropTypes.number,\nmarginVertical:ReactPropTypes.number,\nmarginHorizontal:ReactPropTypes.number,\nmarginTop:ReactPropTypes.number,\nmarginBottom:ReactPropTypes.number,\nmarginLeft:ReactPropTypes.number,\nmarginRight:ReactPropTypes.number,\npadding:ReactPropTypes.number,\npaddingVertical:ReactPropTypes.number,\npaddingHorizontal:ReactPropTypes.number,\npaddingTop:ReactPropTypes.number,\npaddingBottom:ReactPropTypes.number,\npaddingLeft:ReactPropTypes.number,\npaddingRight:ReactPropTypes.number,\nborderWidth:ReactPropTypes.number,\nborderTopWidth:ReactPropTypes.number,\nborderRightWidth:ReactPropTypes.number,\nborderBottomWidth:ReactPropTypes.number,\nborderLeftWidth:ReactPropTypes.number,\n\nposition:ReactPropTypes.oneOf([\n'absolute',\n'relative']),\n\n\n\nflexDirection:ReactPropTypes.oneOf([\n'row',\n'column']),\n\n\n\nflexWrap:ReactPropTypes.oneOf([\n'wrap',\n'nowrap']),\n\n\n\n\njustifyContent:ReactPropTypes.oneOf([\n'flex-start',\n'flex-end',\n'center',\n'space-between',\n'space-around']),\n\n\n\n\nalignItems:ReactPropTypes.oneOf([\n'flex-start',\n'flex-end',\n'center',\n'stretch']),\n\n\n\n\nalignSelf:ReactPropTypes.oneOf([\n'auto',\n'flex-start',\n'flex-end',\n'center',\n'stretch']),\n\n\n\nflex:ReactPropTypes.number};\n\n\nmodule.exports=LayoutPropTypes;\n});\n__d('ReactPropTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactElement=require('ReactElement');\nvar ReactPropTypeLocationNames=require('ReactPropTypeLocationNames');\n\nvar emptyFunction=require('emptyFunction');\nvar getIteratorFn=require('getIteratorFn');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ANONYMOUS='<<anonymous>>';\n\nvar ReactPropTypes={\narray:createPrimitiveTypeChecker('array'),\nbool:createPrimitiveTypeChecker('boolean'),\nfunc:createPrimitiveTypeChecker('function'),\nnumber:createPrimitiveTypeChecker('number'),\nobject:createPrimitiveTypeChecker('object'),\nstring:createPrimitiveTypeChecker('string'),\n\nany:createAnyTypeChecker(),\narrayOf:createArrayOfTypeChecker,\nelement:createElementTypeChecker(),\ninstanceOf:createInstanceTypeChecker,\nnode:createNodeChecker(),\nobjectOf:createObjectOfTypeChecker,\noneOf:createEnumTypeChecker,\noneOfType:createUnionTypeChecker,\nshape:createShapeTypeChecker};\n\n\nfunction createChainableTypeChecker(validate){\nfunction checkType(\nisRequired,\nprops,\npropName,\ncomponentName,\nlocation,\npropFullName)\n{\ncomponentName=componentName||ANONYMOUS;\npropFullName=propFullName||propName;\nif(props[propName]==null){\nvar locationName=ReactPropTypeLocationNames[location];\nif(isRequired){\nreturn new Error(\n'Required '+locationName+' `'+propFullName+'` was not specified in '+('`'+\ncomponentName+'`.'));}\n\n\nreturn null;}else \n{\nreturn validate(props,propName,componentName,location,propFullName);}}\n\n\n\nvar chainedCheckType=checkType.bind(null,false);\nchainedCheckType.isRequired=checkType.bind(null,true);\n\nreturn chainedCheckType;}\n\n\nfunction createPrimitiveTypeChecker(expectedType){\nfunction validate(props,propName,componentName,location,propFullName){\nvar propValue=props[propName];\nvar propType=getPropType(propValue);\nif(propType!==expectedType){\nvar locationName=ReactPropTypeLocationNames[location];\n\n\n\nvar preciseType=getPreciseType(propValue);\n\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` of type '+('`'+\npreciseType+'` supplied to `'+componentName+'`, expected ')+('`'+\nexpectedType+'`.'));}\n\n\nreturn null;}\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createAnyTypeChecker(){\nreturn createChainableTypeChecker(emptyFunction.thatReturns(null));}\n\n\nfunction createArrayOfTypeChecker(typeChecker){\nfunction validate(props,propName,componentName,location,propFullName){\nvar propValue=props[propName];\nif(!Array.isArray(propValue)){\nvar locationName=ReactPropTypeLocationNames[location];\nvar propType=getPropType(propValue);\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` of type '+('`'+\npropType+'` supplied to `'+componentName+'`, expected an array.'));}\n\n\nfor(var i=0;i<propValue.length;i++){\nvar error=typeChecker(\npropValue,\ni,\ncomponentName,\nlocation,\npropFullName+'['+i+']');\n\nif(error instanceof Error){\nreturn error;}}\n\n\nreturn null;}\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createElementTypeChecker(){\nfunction validate(props,propName,componentName,location,propFullName){\nif(!ReactElement.isValidElement(props[propName])){\nvar locationName=ReactPropTypeLocationNames[location];\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` supplied to '+('`'+\ncomponentName+'`, expected a single ReactElement.'));}\n\n\nreturn null;}\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createInstanceTypeChecker(expectedClass){\nfunction validate(props,propName,componentName,location,propFullName){\nif(!(props[propName] instanceof expectedClass)){\nvar locationName=ReactPropTypeLocationNames[location];\nvar expectedClassName=expectedClass.name||ANONYMOUS;\nvar actualClassName=getClassName(props[propName]);\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` of type '+('`'+\nactualClassName+'` supplied to `'+componentName+'`, expected ')+('instance of `'+\nexpectedClassName+'`.'));}\n\n\nreturn null;}\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createEnumTypeChecker(expectedValues){\nif(!Array.isArray(expectedValues)){\nreturn createChainableTypeChecker(function(){\nreturn new Error('Invalid argument supplied to oneOf, expected an instance of array.');});}\n\n\n\n\n\nfunction validate(props,propName,componentName,location,propFullName){\nvar propValue=props[propName];\nfor(var i=0;i<expectedValues.length;i++){\nif(propValue===expectedValues[i]){\nreturn null;}}\n\n\n\nvar locationName=ReactPropTypeLocationNames[location];\nvar valuesString=JSON.stringify(expectedValues);\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` of value `'+propValue+'` '+('supplied to `'+\ncomponentName+'`, expected one of '+valuesString+'.'));}\n\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createObjectOfTypeChecker(typeChecker){\nfunction validate(props,propName,componentName,location,propFullName){\nvar propValue=props[propName];\nvar propType=getPropType(propValue);\nif(propType!=='object'){\nvar locationName=ReactPropTypeLocationNames[location];\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` of type '+('`'+\npropType+'` supplied to `'+componentName+'`, expected an object.'));}\n\n\nfor(var key in propValue){\nif(propValue.hasOwnProperty(key)){\nvar error=typeChecker(\npropValue,\nkey,\ncomponentName,\nlocation,\npropFullName+'.'+key);\n\nif(error instanceof Error){\nreturn error;}}}\n\n\n\nreturn null;}\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers){\nif(!Array.isArray(arrayOfTypeCheckers)){\nreturn createChainableTypeChecker(function(){\nreturn new Error('Invalid argument supplied to oneOfType, expected an instance of array.');});}\n\n\n\n\n\nfunction validate(props,propName,componentName,location,propFullName){\nfor(var i=0;i<arrayOfTypeCheckers.length;i++){\nvar checker=arrayOfTypeCheckers[i];\nif(\nchecker(props,propName,componentName,location,propFullName)==null)\n{\nreturn null;}}\n\n\n\nvar locationName=ReactPropTypeLocationNames[location];\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` supplied to '+('`'+\ncomponentName+'`.'));}\n\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createNodeChecker(){\nfunction validate(props,propName,componentName,location,propFullName){\nif(!isNode(props[propName])){\nvar locationName=ReactPropTypeLocationNames[location];\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` supplied to '+('`'+\ncomponentName+'`, expected a ReactNode.'));}\n\n\nreturn null;}\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction createShapeTypeChecker(shapeTypes){\nfunction validate(props,propName,componentName,location,propFullName){\nvar propValue=props[propName];\nvar propType=getPropType(propValue);\nif(propType!=='object'){\nvar locationName=ReactPropTypeLocationNames[location];\nreturn new Error(\n'Invalid '+locationName+' `'+propFullName+'` of type `'+propType+'` '+('supplied to `'+\ncomponentName+'`, expected `object`.'));}\n\n\nfor(var key in shapeTypes){\nvar checker=shapeTypes[key];\nif(!checker){\ncontinue;}\n\nvar error=checker(\npropValue,\nkey,\ncomponentName,\nlocation,\npropFullName+'.'+key);\n\nif(error){\nreturn error;}}\n\n\nreturn null;}\n\nreturn createChainableTypeChecker(validate);}\n\n\nfunction isNode(propValue){\nswitch(typeof propValue){\ncase 'number':\ncase 'string':\ncase 'undefined':\nreturn true;\ncase 'boolean':\nreturn !propValue;\ncase 'object':\nif(Array.isArray(propValue)){\nreturn propValue.every(isNode);}\n\nif(propValue===null||ReactElement.isValidElement(propValue)){\nreturn true;}\n\n\nvar iteratorFn=getIteratorFn(propValue);\nif(iteratorFn){\nvar iterator=iteratorFn.call(propValue);\nvar step;\nif(iteratorFn!==propValue.entries){\nwhile(!(step=iterator.next()).done){\nif(!isNode(step.value)){\nreturn false;}}}else \n\n\n{\n\nwhile(!(step=iterator.next()).done){\nvar entry=step.value;\nif(entry){\nif(!isNode(entry[1])){\nreturn false;}}}}}else \n\n\n\n\n{\nreturn false;}\n\n\nreturn true;\ndefault:\nreturn false;}}\n\n\n\n\nfunction getPropType(propValue){\nvar propType=typeof propValue;\nif(Array.isArray(propValue)){\nreturn 'array';}\n\nif(propValue instanceof RegExp){\n\n\n\nreturn 'object';}\n\nreturn propType;}\n\n\n\n\nfunction getPreciseType(propValue){\nvar propType=getPropType(propValue);\nif(propType==='object'){\nif(propValue instanceof Date){\nreturn 'date';}else \nif(propValue instanceof RegExp){\nreturn 'regexp';}}\n\n\nreturn propType;}\n\n\n\nfunction getClassName(propValue){\nif(!propValue.constructor||!propValue.constructor.name){\nreturn '<<anonymous>>';}\n\nreturn propValue.constructor.name;}\n\n\nmodule.exports=ReactPropTypes;\n});\n__d('getIteratorFn',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ITERATOR_SYMBOL=typeof Symbol==='function'&&Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL='@@iterator';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getIteratorFn(maybeIterable){\nvar iteratorFn=maybeIterable&&(\nITERATOR_SYMBOL&&maybeIterable[ITERATOR_SYMBOL]||\nmaybeIterable[FAUX_ITERATOR_SYMBOL]);\n\nif(typeof iteratorFn==='function'){\nreturn iteratorFn;}}\n\n\n\nmodule.exports=getIteratorFn;\n});\n__d('TransformPropTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactPropTypes=require('ReactPropTypes');\n\nvar ArrayOfNumberPropType=ReactPropTypes.arrayOf(ReactPropTypes.number);\n\nvar TransformMatrixPropType=function(\nprops,\npropName,\ncomponentName)\n{\nif(props.transform&&props.transformMatrix){\nreturn new Error(\n'transformMatrix and transform styles cannot be used on the same '+\n'component');}\n\n\nreturn ArrayOfNumberPropType(props,propName,componentName);};\n\n\nvar TransformPropTypes={\ntransform:ReactPropTypes.arrayOf(\nReactPropTypes.oneOfType([\nReactPropTypes.shape({perspective:ReactPropTypes.number}),\nReactPropTypes.shape({rotate:ReactPropTypes.string}),\nReactPropTypes.shape({rotateX:ReactPropTypes.string}),\nReactPropTypes.shape({rotateY:ReactPropTypes.string}),\nReactPropTypes.shape({rotateZ:ReactPropTypes.string}),\nReactPropTypes.shape({scale:ReactPropTypes.number}),\nReactPropTypes.shape({scaleX:ReactPropTypes.number}),\nReactPropTypes.shape({scaleY:ReactPropTypes.number}),\nReactPropTypes.shape({translateX:ReactPropTypes.number}),\nReactPropTypes.shape({translateY:ReactPropTypes.number}),\nReactPropTypes.shape({skewX:ReactPropTypes.string}),\nReactPropTypes.shape({skewY:ReactPropTypes.string})])),\n\n\ntransformMatrix:TransformMatrixPropType,\n\n\nscaleX:ReactPropTypes.number,\nscaleY:ReactPropTypes.number,\nrotation:ReactPropTypes.number,\ntranslateX:ReactPropTypes.number,\ntranslateY:ReactPropTypes.number};\n\n\nmodule.exports=TransformPropTypes;\n});\n__d('TextStylePropTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactPropTypes=require('ReactPropTypes');\nvar ViewStylePropTypes=require('ViewStylePropTypes');\n\n\nvar TextStylePropTypes=babelHelpers.extends(Object.create(ViewStylePropTypes),{\ncolor:ReactPropTypes.string,\nfontFamily:ReactPropTypes.string,\nfontSize:ReactPropTypes.number,\nfontStyle:ReactPropTypes.oneOf(['normal','italic']),\n\n\n\n\n\nfontWeight:ReactPropTypes.oneOf(\n['normal','bold',\n'100','200','300','400','500','600','700','800','900']),\n\n\n\n\nletterSpacing:ReactPropTypes.number,\nlineHeight:ReactPropTypes.number,\n\n\n\ntextAlign:ReactPropTypes.oneOf(\n['auto','left','right','center','justify']),\n\n\n\n\ntextDecorationLine:ReactPropTypes.oneOf(\n['none','underline','line-through','underline line-through']),\n\n\n\n\ntextDecorationStyle:ReactPropTypes.oneOf(\n['solid','double','dotted','dashed']),\n\n\n\n\ntextDecorationColor:ReactPropTypes.string,\n\n\n\nwritingDirection:ReactPropTypes.oneOf(\n['auto','ltr','rtl'])});\n\n\n\n\nvar unsupportedProps=Object.keys({\npadding:null,\npaddingTop:null,\npaddingLeft:null,\npaddingRight:null,\npaddingBottom:null,\npaddingVertical:null,\npaddingHorizontal:null});\n\n\nfor(var ii=0;ii<unsupportedProps.length;ii++){\ndelete TextStylePropTypes[unsupportedProps[ii]];}\n\n\nmodule.exports=TextStylePropTypes;\n});\n__d('ViewStylePropTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar LayoutPropTypes=require('LayoutPropTypes');\nvar ReactPropTypes=require('ReactPropTypes');\nvar TransformPropTypes=require('TransformPropTypes');\n\n\n\n\nvar ViewStylePropTypes=babelHelpers.extends({},\nLayoutPropTypes,\nTransformPropTypes,{\nbackfaceVisibility:ReactPropTypes.oneOf(['visible','hidden']),\nbackgroundColor:ReactPropTypes.string,\nborderColor:ReactPropTypes.string,\nborderTopColor:ReactPropTypes.string,\nborderRightColor:ReactPropTypes.string,\nborderBottomColor:ReactPropTypes.string,\nborderLeftColor:ReactPropTypes.string,\nborderRadius:ReactPropTypes.number,\nborderTopLeftRadius:ReactPropTypes.number,\nborderTopRightRadius:ReactPropTypes.number,\nborderBottomLeftRadius:ReactPropTypes.number,\nborderBottomRightRadius:ReactPropTypes.number,\nborderStyle:ReactPropTypes.oneOf(['solid','dotted','dashed']),\nborderWidth:ReactPropTypes.number,\nborderTopWidth:ReactPropTypes.number,\nborderRightWidth:ReactPropTypes.number,\nborderBottomWidth:ReactPropTypes.number,\nborderLeftWidth:ReactPropTypes.number,\nopacity:ReactPropTypes.number,\noverflow:ReactPropTypes.oneOf(['visible','hidden']),\nshadowColor:ReactPropTypes.string,\nshadowOffset:ReactPropTypes.shape(\n{width:ReactPropTypes.number,height:ReactPropTypes.number}),\n\nshadowOpacity:ReactPropTypes.number,\nshadowRadius:ReactPropTypes.number,\n\n\n\n\n\n\n\nelevation:ReactPropTypes.number});\n\n\nmodule.exports=ViewStylePropTypes;\n});\n__d('matricesDiffer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar matricesDiffer=function(one,two){\nif(one===two){\nreturn false;}\n\nreturn !one||!two||\none[12]!==two[12]||\none[13]!==two[13]||\none[14]!==two[14]||\none[5]!==two[5]||\none[10]!==two[10]||\none[1]!==two[1]||\none[2]!==two[2]||\none[3]!==two[3]||\none[4]!==two[4]||\none[6]!==two[6]||\none[7]!==two[7]||\none[8]!==two[8]||\none[9]!==two[9]||\none[11]!==two[11]||\none[15]!==two[15];};\n\n\nmodule.exports=matricesDiffer;\n});\n__d('processColor',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar tinycolor=require('tinycolor');\nvar Platform=require('Platform');\n\n\nfunction processColor(color){\nif(!color||typeof color==='number'){\nreturn color;}else \nif(color instanceof Array){\nreturn color.map(processColor);}else \n{\nvar color=tinycolor(color);\nif(color.isValid()){\nvar rgb=color.toRgb();\n\n\nvar colorInt=Math.round(rgb.a*255)*(1<<24)+rgb.r*(1<<16)+rgb.g*(1<<8)+rgb.b;\nif(Platform.OS==='android'){\n\n\n\n\ncolorInt=colorInt|0x0;}\n\nreturn colorInt;}\n\nreturn 0;}}\n\n\n\nmodule.exports=processColor;\n});\n__d('tinycolor',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\nvar trimLeft=/^[\\s,#]+/,\ntrimRight=/\\s+$/,\ntinyCounter=0,\nmathRound=Math.round,\nmathMin=Math.min,\nmathMax=Math.max;\n\nfunction tinycolor(color,opts){\n\nif(!(this instanceof tinycolor)){\nreturn new tinycolor(color,opts);}\n\n\ncolor=color?color:'';\nopts=opts||{};\n\nvar rgb=inputToRGB(color);\nthis._r=rgb.r,\nthis._g=rgb.g,\nthis._b=rgb.b,\nthis._a=rgb.a,\n\nthis._ok=rgb.ok;}\n\n\ntinycolor.prototype={\ntoRgb:function(){\nreturn {r:mathRound(this._r),g:mathRound(this._g),b:mathRound(this._b),a:this._a};},\n\nisValid:function(){\nreturn this._ok;}};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction inputToRGB(color){\nvar rgb={r:0,g:0,b:0};\nvar a=1;\nvar ok=false;\nvar format=false;\n\nif(typeof color==\"string\"){\ncolor=stringInputToObject(color);}\n\n\nif(typeof color==\"object\"){\nif(color.hasOwnProperty(\"r\")&&color.hasOwnProperty(\"g\")&&color.hasOwnProperty(\"b\")){\nrgb=rgbToRgb(color.r,color.g,color.b);\nok=true;}else \n\nif(color.hasOwnProperty(\"h\")&&color.hasOwnProperty(\"s\")&&color.hasOwnProperty(\"v\")){\ncolor.s=convertToPercentage(color.s);\ncolor.v=convertToPercentage(color.v);\nrgb=hsvToRgb(color.h,color.s,color.v);\nok=true;}else \n\nif(color.hasOwnProperty(\"h\")&&color.hasOwnProperty(\"s\")&&color.hasOwnProperty(\"l\")){\ncolor.s=convertToPercentage(color.s);\ncolor.l=convertToPercentage(color.l);\nrgb=hslToRgb(color.h,color.s,color.l);\nok=true;}\n\n\nif(color.hasOwnProperty(\"a\")){\na=color.a;}}\n\n\n\na=boundAlpha(a);\n\nreturn {\nok:ok,\nr:mathMin(255,mathMax(rgb.r,0)),\ng:mathMin(255,mathMax(rgb.g,0)),\nb:mathMin(255,mathMax(rgb.b,0)),\na:a};}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction rgbToRgb(r,g,b){\nreturn {\nr:bound01(r,255)*255,\ng:bound01(g,255)*255,\nb:bound01(b,255)*255};}\n\n\n\n\n\n\n\nfunction hslToRgb(h,s,l){\nvar r,g,b;\n\nh=bound01(h,360);\ns=bound01(s,100);\nl=bound01(l,100);\n\nfunction hue2rgb(p,q,t){\nif(t<0)t+=1;\nif(t>1)t-=1;\nif(t<1/6)return p+(q-p)*6*t;\nif(t<1/2)return q;\nif(t<2/3)return p+(q-p)*(2/3-t)*6;\nreturn p;}\n\n\nif(s===0){\nr=g=b=l;}else \n\n{\nvar q=l<0.5?l*(1+s):l+s-l*s;\nvar p=2*l-q;\nr=hue2rgb(p,q,h+1/3);\ng=hue2rgb(p,q,h);\nb=hue2rgb(p,q,h-1/3);}\n\n\nreturn {r:r*255,g:g*255,b:b*255};}\n\n\n\n\n\n\nfunction hsvToRgb(h,s,v){\nh=bound01(h,360)*6;\ns=bound01(s,100);\nv=bound01(v,100);\n\nvar i=math.floor(h),\nf=h-i,\np=v*(1-s),\nq=v*(1-f*s),\nt=v*(1-(1-f)*s),\nmod=i%6,\nr=[v,q,p,p,t,v][mod],\ng=[t,v,v,q,p,p][mod],\nb=[p,p,t,v,v,q][mod];\n\nreturn {r:r*255,g:g*255,b:b*255};}\n\n\n\n\n\nvar names=tinycolor.names={\naliceblue:\"f0f8ff\",\nantiquewhite:\"faebd7\",\naqua:\"0ff\",\naquamarine:\"7fffd4\",\nazure:\"f0ffff\",\nbeige:\"f5f5dc\",\nbisque:\"ffe4c4\",\nblack:\"000\",\nblanchedalmond:\"ffebcd\",\nblue:\"00f\",\nblueviolet:\"8a2be2\",\nbrown:\"a52a2a\",\nburlywood:\"deb887\",\nburntsienna:\"ea7e5d\",\ncadetblue:\"5f9ea0\",\nchartreuse:\"7fff00\",\nchocolate:\"d2691e\",\ncoral:\"ff7f50\",\ncornflowerblue:\"6495ed\",\ncornsilk:\"fff8dc\",\ncrimson:\"dc143c\",\ncyan:\"0ff\",\ndarkblue:\"00008b\",\ndarkcyan:\"008b8b\",\ndarkgoldenrod:\"b8860b\",\ndarkgray:\"a9a9a9\",\ndarkgreen:\"006400\",\ndarkgrey:\"a9a9a9\",\ndarkkhaki:\"bdb76b\",\ndarkmagenta:\"8b008b\",\ndarkolivegreen:\"556b2f\",\ndarkorange:\"ff8c00\",\ndarkorchid:\"9932cc\",\ndarkred:\"8b0000\",\ndarksalmon:\"e9967a\",\ndarkseagreen:\"8fbc8f\",\ndarkslateblue:\"483d8b\",\ndarkslategray:\"2f4f4f\",\ndarkslategrey:\"2f4f4f\",\ndarkturquoise:\"00ced1\",\ndarkviolet:\"9400d3\",\ndeeppink:\"ff1493\",\ndeepskyblue:\"00bfff\",\ndimgray:\"696969\",\ndimgrey:\"696969\",\ndodgerblue:\"1e90ff\",\nfirebrick:\"b22222\",\nfloralwhite:\"fffaf0\",\nforestgreen:\"228b22\",\nfuchsia:\"f0f\",\ngainsboro:\"dcdcdc\",\nghostwhite:\"f8f8ff\",\ngold:\"ffd700\",\ngoldenrod:\"daa520\",\ngray:\"808080\",\ngreen:\"008000\",\ngreenyellow:\"adff2f\",\ngrey:\"808080\",\nhoneydew:\"f0fff0\",\nhotpink:\"ff69b4\",\nindianred:\"cd5c5c\",\nindigo:\"4b0082\",\nivory:\"fffff0\",\nkhaki:\"f0e68c\",\nlavender:\"e6e6fa\",\nlavenderblush:\"fff0f5\",\nlawngreen:\"7cfc00\",\nlemonchiffon:\"fffacd\",\nlightblue:\"add8e6\",\nlightcoral:\"f08080\",\nlightcyan:\"e0ffff\",\nlightgoldenrodyellow:\"fafad2\",\nlightgray:\"d3d3d3\",\nlightgreen:\"90ee90\",\nlightgrey:\"d3d3d3\",\nlightpink:\"ffb6c1\",\nlightsalmon:\"ffa07a\",\nlightseagreen:\"20b2aa\",\nlightskyblue:\"87cefa\",\nlightslategray:\"789\",\nlightslategrey:\"789\",\nlightsteelblue:\"b0c4de\",\nlightyellow:\"ffffe0\",\nlime:\"0f0\",\nlimegreen:\"32cd32\",\nlinen:\"faf0e6\",\nmagenta:\"f0f\",\nmaroon:\"800000\",\nmediumaquamarine:\"66cdaa\",\nmediumblue:\"0000cd\",\nmediumorchid:\"ba55d3\",\nmediumpurple:\"9370db\",\nmediumseagreen:\"3cb371\",\nmediumslateblue:\"7b68ee\",\nmediumspringgreen:\"00fa9a\",\nmediumturquoise:\"48d1cc\",\nmediumvioletred:\"c71585\",\nmidnightblue:\"191970\",\nmintcream:\"f5fffa\",\nmistyrose:\"ffe4e1\",\nmoccasin:\"ffe4b5\",\nnavajowhite:\"ffdead\",\nnavy:\"000080\",\noldlace:\"fdf5e6\",\nolive:\"808000\",\nolivedrab:\"6b8e23\",\norange:\"ffa500\",\norangered:\"ff4500\",\norchid:\"da70d6\",\npalegoldenrod:\"eee8aa\",\npalegreen:\"98fb98\",\npaleturquoise:\"afeeee\",\npalevioletred:\"db7093\",\npapayawhip:\"ffefd5\",\npeachpuff:\"ffdab9\",\nperu:\"cd853f\",\npink:\"ffc0cb\",\nplum:\"dda0dd\",\npowderblue:\"b0e0e6\",\npurple:\"800080\",\nrebeccapurple:\"663399\",\nred:\"f00\",\nrosybrown:\"bc8f8f\",\nroyalblue:\"4169e1\",\nsaddlebrown:\"8b4513\",\nsalmon:\"fa8072\",\nsandybrown:\"f4a460\",\nseagreen:\"2e8b57\",\nseashell:\"fff5ee\",\nsienna:\"a0522d\",\nsilver:\"c0c0c0\",\nskyblue:\"87ceeb\",\nslateblue:\"6a5acd\",\nslategray:\"708090\",\nslategrey:\"708090\",\nsnow:\"fffafa\",\nspringgreen:\"00ff7f\",\nsteelblue:\"4682b4\",\ntan:\"d2b48c\",\nteal:\"008080\",\nthistle:\"d8bfd8\",\ntomato:\"ff6347\",\nturquoise:\"40e0d0\",\nviolet:\"ee82ee\",\nwheat:\"f5deb3\",\nwhite:\"fff\",\nwhitesmoke:\"f5f5f5\",\nyellow:\"ff0\",\nyellowgreen:\"9acd32\"};\n\n\n\nfunction boundAlpha(a){\na=parseFloat(a);\n\nif(isNaN(a)||a<0||a>1){\na=1;}\n\n\nreturn a;}\n\n\n\nfunction bound01(n,max){\nif(isOnePointZero(n)){n=\"100%\";}\n\nvar processPercent=isPercentage(n);\nn=mathMin(max,mathMax(0,parseFloat(n)));\n\n\nif(processPercent){\nn=parseInt(n*max,10)/100;}\n\n\n\nif(Math.abs(n-max)<0.000001){\nreturn 1;}\n\n\n\nreturn n%max/parseFloat(max);}\n\n\n\nfunction parseIntFromHex(val){\nreturn parseInt(val,16);}\n\n\n\n\nfunction isOnePointZero(n){\nreturn typeof n==\"string\"&&n.indexOf('.')!=-1&&parseFloat(n)===1;}\n\n\n\nfunction isPercentage(n){\nreturn typeof n===\"string\"&&n.indexOf('%')!=-1;}\n\n\n\nfunction convertToPercentage(n){\nif(n<=1){\nn=n*100+\"%\";}\n\n\nreturn n;}\n\n\n\nfunction convertHexToDecimal(h){\nreturn parseIntFromHex(h)/255;}\n\n\nvar matchers=(function(){\n\nvar CSS_INTEGER=\"[-\\\\+]?\\\\d+%?\";\n\n\nvar CSS_NUMBER=\"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n\nvar CSS_UNIT=\"(?:\"+CSS_NUMBER+\")|(?:\"+CSS_INTEGER+\")\";\n\n\n\n\nvar PERMISSIVE_MATCH3=\"[\\\\s|\\\\(]+(\"+CSS_UNIT+\")[,|\\\\s]+(\"+CSS_UNIT+\")[,|\\\\s]+(\"+CSS_UNIT+\")\\\\s*\\\\)?\";\nvar PERMISSIVE_MATCH4=\"[\\\\s|\\\\(]+(\"+CSS_UNIT+\")[,|\\\\s]+(\"+CSS_UNIT+\")[,|\\\\s]+(\"+CSS_UNIT+\")[,|\\\\s]+(\"+CSS_UNIT+\")\\\\s*\\\\)?\";\n\nreturn {\nrgb:new RegExp(\"rgb\"+PERMISSIVE_MATCH3),\nrgba:new RegExp(\"rgba\"+PERMISSIVE_MATCH4),\nhsl:new RegExp(\"hsl\"+PERMISSIVE_MATCH3),\nhsla:new RegExp(\"hsla\"+PERMISSIVE_MATCH4),\nhsv:new RegExp(\"hsv\"+PERMISSIVE_MATCH3),\nhsva:new RegExp(\"hsva\"+PERMISSIVE_MATCH4),\nhex3:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\nhex4:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\nhex6:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\nhex8:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};})();\n\n\n\n\n\n\nfunction stringInputToObject(color){\ncolor=color.replace(trimLeft,'').replace(trimRight,'').toLowerCase();\nvar named=false;\nif(names[color]){\ncolor=names[color];\nnamed=true;}else \n\nif(color=='transparent'){\nreturn {r:0,g:0,b:0,a:0,format:\"name\"};}\n\n\n\n\n\n\nvar match;\nif(match=matchers.rgb.exec(color)){\nreturn {r:match[1],g:match[2],b:match[3]};}\n\nif(match=matchers.rgba.exec(color)){\nreturn {r:match[1],g:match[2],b:match[3],a:match[4]};}\n\nif(match=matchers.hsl.exec(color)){\nreturn {h:match[1],s:match[2],l:match[3]};}\n\nif(match=matchers.hsla.exec(color)){\nreturn {h:match[1],s:match[2],l:match[3],a:match[4]};}\n\nif(match=matchers.hsv.exec(color)){\nreturn {h:match[1],s:match[2],v:match[3]};}\n\nif(match=matchers.hsva.exec(color)){\nreturn {h:match[1],s:match[2],v:match[3],a:match[4]};}\n\nif(match=matchers.hex8.exec(color)){\nreturn {\nr:parseIntFromHex(match[1]),\ng:parseIntFromHex(match[2]),\nb:parseIntFromHex(match[3]),\na:convertHexToDecimal(match[4]),\nformat:named?\"name\":\"hex\"};}\n\n\nif(match=matchers.hex6.exec(color)){\nreturn {\nr:parseIntFromHex(match[1]),\ng:parseIntFromHex(match[2]),\nb:parseIntFromHex(match[3]),\nformat:named?\"name\":\"hex\"};}\n\n\nif(match=matchers.hex4.exec(color)){\nreturn {\nr:parseIntFromHex(match[1]+''+match[1]),\ng:parseIntFromHex(match[2]+''+match[2]),\nb:parseIntFromHex(match[3]+''+match[3]),\na:convertHexToDecimal(match[4]+''+match[4]),\nformat:named?\"name\":\"hex\"};}\n\n\nif(match=matchers.hex3.exec(color)){\nreturn {\nr:parseIntFromHex(match[1]+''+match[1]),\ng:parseIntFromHex(match[2]+''+match[2]),\nb:parseIntFromHex(match[3]+''+match[3]),\nformat:named?\"name\":\"hex\"};}\n\n\n\nreturn false;}\n\n\nmodule.exports=tinycolor;\n});\n__d('processTransform',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar MatrixMath=require('MatrixMath');\nvar Platform=require('Platform');\n\nvar invariant=require('invariant');\nvar stringifySafe=require('stringifySafe');\n\n\n\n\n\n\n\n\n\nfunction processTransform(transform){\nvar result=MatrixMath.createIdentityMatrix();\n\ntransform.forEach(function(transformation){\nvar key=Object.keys(transformation)[0];\nvar value=transformation[key];\nif(__DEV__){\n_validateTransform(key,value,transformation);}\n\n\nswitch(key){\ncase 'matrix':\nMatrixMath.multiplyInto(result,result,value);\nbreak;\ncase 'perspective':\n_multiplyTransform(result,MatrixMath.reusePerspectiveCommand,[value]);\nbreak;\ncase 'rotateX':\n_multiplyTransform(result,MatrixMath.reuseRotateXCommand,[_convertToRadians(value)]);\nbreak;\ncase 'rotateY':\n_multiplyTransform(result,MatrixMath.reuseRotateYCommand,[_convertToRadians(value)]);\nbreak;\ncase 'rotate':\ncase 'rotateZ':\n_multiplyTransform(result,MatrixMath.reuseRotateZCommand,[_convertToRadians(value)]);\nbreak;\ncase 'scale':\n_multiplyTransform(result,MatrixMath.reuseScaleCommand,[value]);\nbreak;\ncase 'scaleX':\n_multiplyTransform(result,MatrixMath.reuseScaleXCommand,[value]);\nbreak;\ncase 'scaleY':\n_multiplyTransform(result,MatrixMath.reuseScaleYCommand,[value]);\nbreak;\ncase 'translate':\n_multiplyTransform(result,MatrixMath.reuseTranslate3dCommand,[value[0],value[1],value[2]||0]);\nbreak;\ncase 'translateX':\n_multiplyTransform(result,MatrixMath.reuseTranslate2dCommand,[value,0]);\nbreak;\ncase 'translateY':\n_multiplyTransform(result,MatrixMath.reuseTranslate2dCommand,[0,value]);\nbreak;\ncase 'skewX':\n_multiplyTransform(result,MatrixMath.reuseSkewXCommand,[_convertToRadians(value)]);\nbreak;\ncase 'skewY':\n_multiplyTransform(result,MatrixMath.reuseSkewYCommand,[_convertToRadians(value)]);\nbreak;\ndefault:\nthrow new Error('Invalid transform name: '+key);}});\n\n\n\n\n\n\n\nif(Platform.OS==='android'){\nreturn MatrixMath.decomposeMatrix(result);}\n\nreturn result;}\n\n\n\n\n\nfunction _multiplyTransform(\nresult,\nmatrixMathFunction,\nargs)\n{\nvar matrixToApply=MatrixMath.createIdentityMatrix();\nvar argsWithIdentity=[matrixToApply].concat(args);\nmatrixMathFunction.apply(this,argsWithIdentity);\nMatrixMath.multiplyInto(result,result,matrixToApply);}\n\n\n\n\n\n\nfunction _convertToRadians(value){\nvar floatValue=parseFloat(value,10);\nreturn value.indexOf('rad')>-1?floatValue:floatValue*Math.PI/180;}\n\n\nfunction _validateTransform(key,value,transformation){\ninvariant(\n!value.getValue,\n'You passed an Animated.Value to a normal component. '+\n'You need to wrap that component in an Animated. For example, '+\n'replace <View /> by <Animated.View />.');\n\n\nvar multivalueTransforms=[\n'matrix',\n'translate'];\n\nif(multivalueTransforms.indexOf(key)!==-1){\ninvariant(\nArray.isArray(value),\n'Transform with key of %s must have an array as the value: %s',\nkey,\nstringifySafe(transformation));}\n\n\nswitch(key){\ncase 'matrix':\ninvariant(\nvalue.length===9||value.length===16,\n'Matrix transform must have a length of 9 (2d) or 16 (3d). '+\n'Provided matrix has a length of %s: %s',\nvalue.length,\nstringifySafe(transformation));\n\nbreak;\ncase 'translate':\nbreak;\ncase 'rotateX':\ncase 'rotateY':\ncase 'rotateZ':\ncase 'rotate':\ncase 'skewX':\ncase 'skewY':\ninvariant(\ntypeof value==='string',\n'Transform with key of \"%s\" must be a string: %s',\nkey,\nstringifySafe(transformation));\n\ninvariant(\nvalue.indexOf('deg')>-1||value.indexOf('rad')>-1,\n'Rotate transform must be expressed in degrees (deg) or radians '+\n'(rad): %s',\nstringifySafe(transformation));\n\nbreak;\ndefault:\ninvariant(\ntypeof value==='number',\n'Transform with key of \"%s\" must be a number: %s',\nkey,\nstringifySafe(transformation));}}\n\n\n\n\nmodule.exports=processTransform;\n});\n__d('MatrixMath',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\n\n\n\n\nvar MatrixMath={\ncreateIdentityMatrix:function(){\nreturn [\n1,0,0,0,\n0,1,0,0,\n0,0,1,0,\n0,0,0,1];},\n\n\n\ncreateCopy:function(m){\nreturn [\nm[0],m[1],m[2],m[3],\nm[4],m[5],m[6],m[7],\nm[8],m[9],m[10],m[11],\nm[12],m[13],m[14],m[15]];},\n\n\n\ncreateOrthographic:function(left,right,bottom,top,near,far){\nvar a=2/(right-left);\nvar b=2/(top-bottom);\nvar c=-2/(far-near);\n\nvar tx=-(right+left)/(right-left);\nvar ty=-(top+bottom)/(top-bottom);\nvar tz=-(far+near)/(far-near);\n\nreturn [\na,0,0,0,\n0,b,0,0,\n0,0,c,0,\ntx,ty,tz,1];},\n\n\n\ncreateFrustum:function(left,right,bottom,top,near,far){\nvar r_width=1/(right-left);\nvar r_height=1/(top-bottom);\nvar r_depth=1/(near-far);\nvar x=2*(near*r_width);\nvar y=2*(near*r_height);\nvar A=(right+left)*r_width;\nvar B=(top+bottom)*r_height;\nvar C=(far+near)*r_depth;\nvar D=2*(far*near*r_depth);\nreturn [\nx,0,0,0,\n0,y,0,0,\nA,B,C,-1,\n0,0,D,0];},\n\n\n\ncreatePerspective:function(fovInRadians,aspect,near,far){\nvar h=1/Math.tan(fovInRadians);\nvar r_depth=1/(near-far);\nvar C=(far+near)*r_depth;\nvar D=2*(far*near*r_depth);\nreturn [\nh/aspect,0,0,0,\n0,h,0,0,\n0,0,C,-1,\n0,0,D,0];},\n\n\n\ncreateTranslate2d:function(x,y){\nvar mat=MatrixMath.createIdentityMatrix();\nMatrixMath.reuseTranslate2dCommand(mat,x,y);\nreturn mat;},\n\n\nreuseTranslate2dCommand:function(matrixCommand,x,y){\nmatrixCommand[12]=x;\nmatrixCommand[13]=y;},\n\n\nreuseTranslate3dCommand:function(matrixCommand,x,y,z){\nmatrixCommand[12]=x;\nmatrixCommand[13]=y;\nmatrixCommand[14]=z;},\n\n\ncreateScale:function(factor){\nvar mat=MatrixMath.createIdentityMatrix();\nMatrixMath.reuseScaleCommand(mat,factor);\nreturn mat;},\n\n\nreuseScaleCommand:function(matrixCommand,factor){\nmatrixCommand[0]=factor;\nmatrixCommand[5]=factor;},\n\n\nreuseScale3dCommand:function(matrixCommand,x,y,z){\nmatrixCommand[0]=x;\nmatrixCommand[5]=y;\nmatrixCommand[10]=z;},\n\n\nreusePerspectiveCommand:function(matrixCommand,p){\nmatrixCommand[11]=-1/p;},\n\n\nreuseScaleXCommand:function(matrixCommand,factor){\nmatrixCommand[0]=factor;},\n\n\nreuseScaleYCommand:function(matrixCommand,factor){\nmatrixCommand[5]=factor;},\n\n\nreuseScaleZCommand:function(matrixCommand,factor){\nmatrixCommand[10]=factor;},\n\n\nreuseRotateXCommand:function(matrixCommand,radians){\nmatrixCommand[5]=Math.cos(radians);\nmatrixCommand[6]=Math.sin(radians);\nmatrixCommand[9]=-Math.sin(radians);\nmatrixCommand[10]=Math.cos(radians);},\n\n\nreuseRotateYCommand:function(matrixCommand,amount){\nmatrixCommand[0]=Math.cos(amount);\nmatrixCommand[2]=-Math.sin(amount);\nmatrixCommand[8]=Math.sin(amount);\nmatrixCommand[10]=Math.cos(amount);},\n\n\n\nreuseRotateZCommand:function(matrixCommand,radians){\nmatrixCommand[0]=Math.cos(radians);\nmatrixCommand[1]=Math.sin(radians);\nmatrixCommand[4]=-Math.sin(radians);\nmatrixCommand[5]=Math.cos(radians);},\n\n\ncreateRotateZ:function(radians){\nvar mat=MatrixMath.createIdentityMatrix();\nMatrixMath.reuseRotateZCommand(mat,radians);\nreturn mat;},\n\n\nreuseSkewXCommand:function(matrixCommand,radians){\nmatrixCommand[4]=Math.sin(radians);\nmatrixCommand[5]=Math.cos(radians);},\n\n\nreuseSkewYCommand:function(matrixCommand,radians){\nmatrixCommand[0]=Math.cos(radians);\nmatrixCommand[1]=Math.sin(radians);},\n\n\nmultiplyInto:function(out,a,b){\nvar a00=a[0],a01=a[1],a02=a[2],a03=a[3],\na10=a[4],a11=a[5],a12=a[6],a13=a[7],\na20=a[8],a21=a[9],a22=a[10],a23=a[11],\na30=a[12],a31=a[13],a32=a[14],a33=a[15];\n\nvar b0=b[0],b1=b[1],b2=b[2],b3=b[3];\nout[0]=b0*a00+b1*a10+b2*a20+b3*a30;\nout[1]=b0*a01+b1*a11+b2*a21+b3*a31;\nout[2]=b0*a02+b1*a12+b2*a22+b3*a32;\nout[3]=b0*a03+b1*a13+b2*a23+b3*a33;\n\nb0=b[4];b1=b[5];b2=b[6];b3=b[7];\nout[4]=b0*a00+b1*a10+b2*a20+b3*a30;\nout[5]=b0*a01+b1*a11+b2*a21+b3*a31;\nout[6]=b0*a02+b1*a12+b2*a22+b3*a32;\nout[7]=b0*a03+b1*a13+b2*a23+b3*a33;\n\nb0=b[8];b1=b[9];b2=b[10];b3=b[11];\nout[8]=b0*a00+b1*a10+b2*a20+b3*a30;\nout[9]=b0*a01+b1*a11+b2*a21+b3*a31;\nout[10]=b0*a02+b1*a12+b2*a22+b3*a32;\nout[11]=b0*a03+b1*a13+b2*a23+b3*a33;\n\nb0=b[12];b1=b[13];b2=b[14];b3=b[15];\nout[12]=b0*a00+b1*a10+b2*a20+b3*a30;\nout[13]=b0*a01+b1*a11+b2*a21+b3*a31;\nout[14]=b0*a02+b1*a12+b2*a22+b3*a32;\nout[15]=b0*a03+b1*a13+b2*a23+b3*a33;},\n\n\ndeterminant:function(matrix){var _matrix=babelHelpers.slicedToArray(\n\n\n\n\n\nmatrix,16);var m00=_matrix[0];var m01=_matrix[1];var m02=_matrix[2];var m03=_matrix[3];var m10=_matrix[4];var m11=_matrix[5];var m12=_matrix[6];var m13=_matrix[7];var m20=_matrix[8];var m21=_matrix[9];var m22=_matrix[10];var m23=_matrix[11];var m30=_matrix[12];var m31=_matrix[13];var m32=_matrix[14];var m33=_matrix[15];\nreturn (\nm03*m12*m21*m30-m02*m13*m21*m30-\nm03*m11*m22*m30+m01*m13*m22*m30+\nm02*m11*m23*m30-m01*m12*m23*m30-\nm03*m12*m20*m31+m02*m13*m20*m31+\nm03*m10*m22*m31-m00*m13*m22*m31-\nm02*m10*m23*m31+m00*m12*m23*m31+\nm03*m11*m20*m32-m01*m13*m20*m32-\nm03*m10*m21*m32+m00*m13*m21*m32+\nm01*m10*m23*m32-m00*m11*m23*m32-\nm02*m11*m20*m33+m01*m12*m20*m33+\nm02*m10*m21*m33-m00*m12*m21*m33-\nm01*m10*m22*m33+m00*m11*m22*m33);},\n\n\n\n\n\n\n\n\n\n\ninverse:function(matrix){\nvar det=MatrixMath.determinant(matrix);\nif(!det){\nreturn matrix;}var _matrix2=babelHelpers.slicedToArray(\n\n\n\n\n\n\nmatrix,16);var m00=_matrix2[0];var m01=_matrix2[1];var m02=_matrix2[2];var m03=_matrix2[3];var m10=_matrix2[4];var m11=_matrix2[5];var m12=_matrix2[6];var m13=_matrix2[7];var m20=_matrix2[8];var m21=_matrix2[9];var m22=_matrix2[10];var m23=_matrix2[11];var m30=_matrix2[12];var m31=_matrix2[13];var m32=_matrix2[14];var m33=_matrix2[15];\nreturn [\n(m12*m23*m31-m13*m22*m31+m13*m21*m32-m11*m23*m32-m12*m21*m33+m11*m22*m33)/det,\n(m03*m22*m31-m02*m23*m31-m03*m21*m32+m01*m23*m32+m02*m21*m33-m01*m22*m33)/det,\n(m02*m13*m31-m03*m12*m31+m03*m11*m32-m01*m13*m32-m02*m11*m33+m01*m12*m33)/det,\n(m03*m12*m21-m02*m13*m21-m03*m11*m22+m01*m13*m22+m02*m11*m23-m01*m12*m23)/det,\n(m13*m22*m30-m12*m23*m30-m13*m20*m32+m10*m23*m32+m12*m20*m33-m10*m22*m33)/det,\n(m02*m23*m30-m03*m22*m30+m03*m20*m32-m00*m23*m32-m02*m20*m33+m00*m22*m33)/det,\n(m03*m12*m30-m02*m13*m30-m03*m10*m32+m00*m13*m32+m02*m10*m33-m00*m12*m33)/det,\n(m02*m13*m20-m03*m12*m20+m03*m10*m22-m00*m13*m22-m02*m10*m23+m00*m12*m23)/det,\n(m11*m23*m30-m13*m21*m30+m13*m20*m31-m10*m23*m31-m11*m20*m33+m10*m21*m33)/det,\n(m03*m21*m30-m01*m23*m30-m03*m20*m31+m00*m23*m31+m01*m20*m33-m00*m21*m33)/det,\n(m01*m13*m30-m03*m11*m30+m03*m10*m31-m00*m13*m31-m01*m10*m33+m00*m11*m33)/det,\n(m03*m11*m20-m01*m13*m20-m03*m10*m21+m00*m13*m21+m01*m10*m23-m00*m11*m23)/det,\n(m12*m21*m30-m11*m22*m30-m12*m20*m31+m10*m22*m31+m11*m20*m32-m10*m21*m32)/det,\n(m01*m22*m30-m02*m21*m30+m02*m20*m31-m00*m22*m31-m01*m20*m32+m00*m21*m32)/det,\n(m02*m11*m30-m01*m12*m30-m02*m10*m31+m00*m12*m31+m01*m10*m32-m00*m11*m32)/det,\n(m01*m12*m20-m02*m11*m20+m02*m10*m21-m00*m12*m21-m01*m10*m22+m00*m11*m22)/det];},\n\n\n\n\n\n\ntranspose:function(m){\nreturn [\nm[0],m[4],m[8],m[12],\nm[1],m[5],m[9],m[13],\nm[2],m[6],m[10],m[14],\nm[3],m[7],m[11],m[15]];},\n\n\n\n\n\n\nmultiplyVectorByMatrix:function(\nv,\nm)\n{var _v=babelHelpers.slicedToArray(\nv,4);var vx=_v[0];var vy=_v[1];var vz=_v[2];var vw=_v[3];\nreturn [\nvx*m[0]+vy*m[4]+vz*m[8]+vw*m[12],\nvx*m[1]+vy*m[5]+vz*m[9]+vw*m[13],\nvx*m[2]+vy*m[6]+vz*m[10]+vw*m[14],\nvx*m[3]+vy*m[7]+vz*m[11]+vw*m[15]];},\n\n\n\n\n\n\nv3Length:function(a){\nreturn Math.sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);},\n\n\n\n\n\nv3Normalize:function(\nvector,\nv3Length)\n{\nvar im=1/(v3Length||MatrixMath.v3Length(vector));\nreturn [\nvector[0]*im,\nvector[1]*im,\nvector[2]*im];},\n\n\n\n\n\n\n\nv3Dot:function(a,b){\nreturn a[0]*b[0]+\na[1]*b[1]+\na[2]*b[2];},\n\n\n\n\n\n\nv3Combine:function(\na,\nb,\naScale,\nbScale)\n{\nreturn [\naScale*a[0]+bScale*b[0],\naScale*a[1]+bScale*b[1],\naScale*a[2]+bScale*b[2]];},\n\n\n\n\n\n\n\nv3Cross:function(a,b){\nreturn [\na[1]*b[2]-a[2]*b[1],\na[2]*b[0]-a[0]*b[2],\na[0]*b[1]-a[1]*b[0]];},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nquaternionToDegreesXYZ:function(q,matrix,row){var _q=babelHelpers.slicedToArray(\nq,4);var qx=_q[0];var qy=_q[1];var qz=_q[2];var qw=_q[3];\nvar qw2=qw*qw;\nvar qx2=qx*qx;\nvar qy2=qy*qy;\nvar qz2=qz*qz;\nvar test=qx*qy+qz*qw;\nvar unit=qw2+qx2+qy2+qz2;\nvar conv=180/Math.PI;\n\nif(test>0.49999*unit){\nreturn [0,2*Math.atan2(qx,qw)*conv,90];}\n\nif(test<-0.49999*unit){\nreturn [0,-2*Math.atan2(qx,qw)*conv,-90];}\n\n\nreturn [\nMatrixMath.roundTo3Places(\nMath.atan2(2*qx*qw-2*qy*qz,1-2*qx2-2*qz2)*conv),\n\nMatrixMath.roundTo3Places(\nMath.atan2(2*qy*qw-2*qx*qz,1-2*qy2-2*qz2)*conv),\n\nMatrixMath.roundTo3Places(\nMath.asin(2*qx*qy+2*qz*qw)*conv)];},\n\n\n\n\n\n\n\n\nroundTo3Places:function(n){\nvar arr=n.toString().split('e');\nreturn Math.round(arr[0]+'e'+(arr[1]?+arr[1]-3:3))*0.001;},\n\n\n\n\n\n\n\n\n\n\n\n\n\ndecomposeMatrix:function(transformMatrix){\n\ninvariant(\ntransformMatrix.length===16,\n'Matrix decomposition needs a list of 3d matrix values, received %s',\ntransformMatrix);\n\n\n\nvar perspective=[];\nvar quaternion=[];\nvar scale=[];\nvar skew=[];\nvar translation=[];\n\n\n\nif(!transformMatrix[15]){\nreturn;}\n\nvar matrix=[];\nvar perspectiveMatrix=[];\nfor(var i=0;i<4;i++){\nmatrix.push([]);\nfor(var j=0;j<4;j++){\nvar value=transformMatrix[i*4+j]/transformMatrix[15];\nmatrix[i].push(value);\nperspectiveMatrix.push(j===3?0:value);}}\n\n\nperspectiveMatrix[15]=1;\n\n\nif(!MatrixMath.determinant(perspectiveMatrix)){\nreturn;}\n\n\n\nif(matrix[0][3]!==0||matrix[1][3]!==0||matrix[2][3]!==0){\n\n\nvar rightHandSide=[\nmatrix[0][3],\nmatrix[1][3],\nmatrix[2][3],\nmatrix[3][3]];\n\n\n\n\nvar inversePerspectiveMatrix=MatrixMath.inverse3x3(\nperspectiveMatrix);\n\nvar transposedInversePerspectiveMatrix=MatrixMath.transpose4x4(\ninversePerspectiveMatrix);\n\nvar perspective=MatrixMath.multiplyVectorByMatrix(\nrightHandSide,\ntransposedInversePerspectiveMatrix);}else \n\n{\n\nperspective[0]=perspective[1]=perspective[2]=0;\nperspective[3]=1;}\n\n\n\nfor(var i=0;i<3;i++){\ntranslation[i]=matrix[3][i];}\n\n\n\n\nvar row=[];\nfor(i=0;i<3;i++){\nrow[i]=[\nmatrix[i][0],\nmatrix[i][1],\nmatrix[i][2]];}\n\n\n\n\nscale[0]=MatrixMath.v3Length(row[0]);\nrow[0]=MatrixMath.v3Normalize(row[0],scale[0]);\n\n\nskew[0]=MatrixMath.v3Dot(row[0],row[1]);\nrow[1]=MatrixMath.v3Combine(row[1],row[0],1.0,-skew[0]);\n\n\nskew[0]=MatrixMath.v3Dot(row[0],row[1]);\nrow[1]=MatrixMath.v3Combine(row[1],row[0],1.0,-skew[0]);\n\n\nscale[1]=MatrixMath.v3Length(row[1]);\nrow[1]=MatrixMath.v3Normalize(row[1],scale[1]);\nskew[0]/=scale[1];\n\n\nskew[1]=MatrixMath.v3Dot(row[0],row[2]);\nrow[2]=MatrixMath.v3Combine(row[2],row[0],1.0,-skew[1]);\nskew[2]=MatrixMath.v3Dot(row[1],row[2]);\nrow[2]=MatrixMath.v3Combine(row[2],row[1],1.0,-skew[2]);\n\n\nscale[2]=MatrixMath.v3Length(row[2]);\nrow[2]=MatrixMath.v3Normalize(row[2],scale[2]);\nskew[1]/=scale[2];\nskew[2]/=scale[2];\n\n\n\n\nvar pdum3=MatrixMath.v3Cross(row[1],row[2]);\nif(MatrixMath.v3Dot(row[0],pdum3)<0){\nfor(i=0;i<3;i++){\nscale[i]*=-1;\nrow[i][0]*=-1;\nrow[i][1]*=-1;\nrow[i][2]*=-1;}}\n\n\n\n\nquaternion[0]=\n0.5*Math.sqrt(Math.max(1+row[0][0]-row[1][1]-row[2][2],0));\nquaternion[1]=\n0.5*Math.sqrt(Math.max(1-row[0][0]+row[1][1]-row[2][2],0));\nquaternion[2]=\n0.5*Math.sqrt(Math.max(1-row[0][0]-row[1][1]+row[2][2],0));\nquaternion[3]=\n0.5*Math.sqrt(Math.max(1+row[0][0]+row[1][1]+row[2][2],0));\n\nif(row[2][1]>row[1][2]){\nquaternion[0]=-quaternion[0];}\n\nif(row[0][2]>row[2][0]){\nquaternion[1]=-quaternion[1];}\n\nif(row[1][0]>row[0][1]){\nquaternion[2]=-quaternion[2];}\n\n\n\nvar rotationDegrees;\nif(\nquaternion[0]<0.001&&quaternion[0]>=0&&\nquaternion[1]<0.001&&quaternion[1]>=0)\n{\n\nrotationDegrees=[0,0,MatrixMath.roundTo3Places(\nMath.atan2(row[0][1],row[0][0])*180/Math.PI)];}else \n\n{\nrotationDegrees=MatrixMath.quaternionToDegreesXYZ(quaternion,matrix,row);}\n\n\n\nreturn {\nrotationDegrees:rotationDegrees,\nperspective:perspective,\nquaternion:quaternion,\nscale:scale,\nskew:skew,\ntranslation:translation,\n\nrotate:rotationDegrees[2],\nscaleX:scale[0],\nscaleY:scale[1],\ntranslateX:translation[0],\ntranslateY:translation[1]};}};\n\n\n\n\n\nmodule.exports=MatrixMath;\n});\n__d('sizesDiffer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\nvar dummySize={width:undefined,height:undefined};\n\nvar sizesDiffer=function(one,two){\none=one||dummySize;\ntwo=two||dummySize;\nreturn one!==two&&(\none.width!==two.width||\none.height!==two.height);};\n\n\n\nmodule.exports=sizesDiffer;\n});\n__d('ReactMultiChild',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactComponentEnvironment=require('ReactComponentEnvironment');\nvar ReactMultiChildUpdateTypes=require('ReactMultiChildUpdateTypes');\n\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactReconciler=require('ReactReconciler');\nvar ReactChildReconciler=require('ReactChildReconciler');\n\nvar flattenChildren=require('flattenChildren');\n\n\n\n\n\n\n\n\nvar updateDepth=0;\n\n\n\n\n\n\n\n\n\nvar updateQueue=[];\n\n\n\n\n\n\n\nvar markupQueue=[];\n\n\n\n\n\n\n\n\n\nfunction enqueueInsertMarkup(parentID,markup,toIndex){\n\nupdateQueue.push({\nparentID:parentID,\nparentNode:null,\ntype:ReactMultiChildUpdateTypes.INSERT_MARKUP,\nmarkupIndex:markupQueue.push(markup)-1,\ncontent:null,\nfromIndex:null,\ntoIndex:toIndex});}\n\n\n\n\n\n\n\n\n\n\n\nfunction enqueueMove(parentID,fromIndex,toIndex){\n\nupdateQueue.push({\nparentID:parentID,\nparentNode:null,\ntype:ReactMultiChildUpdateTypes.MOVE_EXISTING,\nmarkupIndex:null,\ncontent:null,\nfromIndex:fromIndex,\ntoIndex:toIndex});}\n\n\n\n\n\n\n\n\n\n\nfunction enqueueRemove(parentID,fromIndex){\n\nupdateQueue.push({\nparentID:parentID,\nparentNode:null,\ntype:ReactMultiChildUpdateTypes.REMOVE_NODE,\nmarkupIndex:null,\ncontent:null,\nfromIndex:fromIndex,\ntoIndex:null});}\n\n\n\n\n\n\n\n\n\n\nfunction enqueueSetMarkup(parentID,markup){\n\nupdateQueue.push({\nparentID:parentID,\nparentNode:null,\ntype:ReactMultiChildUpdateTypes.SET_MARKUP,\nmarkupIndex:null,\ncontent:markup,\nfromIndex:null,\ntoIndex:null});}\n\n\n\n\n\n\n\n\n\n\nfunction enqueueTextContent(parentID,textContent){\n\nupdateQueue.push({\nparentID:parentID,\nparentNode:null,\ntype:ReactMultiChildUpdateTypes.TEXT_CONTENT,\nmarkupIndex:null,\ncontent:textContent,\nfromIndex:null,\ntoIndex:null});}\n\n\n\n\n\n\n\n\nfunction processQueue(){\nif(updateQueue.length){\nReactComponentEnvironment.processChildrenUpdates(\nupdateQueue,\nmarkupQueue);\n\nclearQueue();}}\n\n\n\n\n\n\n\n\nfunction clearQueue(){\nupdateQueue.length=0;\nmarkupQueue.length=0;}\n\n\n\n\n\n\n\n\nvar ReactMultiChild={\n\n\n\n\n\n\n\n\nMixin:{\n\n_reconcilerInstantiateChildren:function(nestedChildren,transaction,context){\nif(__DEV__){\nif(this._currentElement){\ntry{\nReactCurrentOwner.current=this._currentElement._owner;\nreturn ReactChildReconciler.instantiateChildren(\nnestedChildren,transaction,context);}finally \n\n{\nReactCurrentOwner.current=null;}}}\n\n\n\nreturn ReactChildReconciler.instantiateChildren(\nnestedChildren,transaction,context);},\n\n\n\n_reconcilerUpdateChildren:function(prevChildren,nextNestedChildrenElements,transaction,context){\nvar nextChildren;\nif(__DEV__){\nif(this._currentElement){\ntry{\nReactCurrentOwner.current=this._currentElement._owner;\nnextChildren=flattenChildren(nextNestedChildrenElements);}finally \n{\nReactCurrentOwner.current=null;}\n\nreturn ReactChildReconciler.updateChildren(\nprevChildren,nextChildren,transaction,context);}}\n\n\n\nnextChildren=flattenChildren(nextNestedChildrenElements);\nreturn ReactChildReconciler.updateChildren(\nprevChildren,nextChildren,transaction,context);},\n\n\n\n\n\n\n\n\n\n\n\nmountChildren:function(nestedChildren,transaction,context){\nvar children=this._reconcilerInstantiateChildren(\nnestedChildren,transaction,context);\n\nthis._renderedChildren=children;\nvar mountImages=[];\nvar index=0;\nfor(var name in children){\nif(children.hasOwnProperty(name)){\nvar child=children[name];\n\nvar rootID=this._rootNodeID+name;\nvar mountImage=ReactReconciler.mountComponent(\nchild,\nrootID,\ntransaction,\ncontext);\n\nchild._mountIndex=index++;\nmountImages.push(mountImage);}}\n\n\nreturn mountImages;},\n\n\n\n\n\n\n\n\nupdateTextContent:function(nextContent){\nupdateDepth++;\nvar errorThrown=true;\ntry{\nvar prevChildren=this._renderedChildren;\n\nReactChildReconciler.unmountChildren(prevChildren);\n\nfor(var name in prevChildren){\nif(prevChildren.hasOwnProperty(name)){\nthis._unmountChild(prevChildren[name]);}}\n\n\n\nthis.setTextContent(nextContent);\nerrorThrown=false;}finally \n{\nupdateDepth--;\nif(!updateDepth){\nif(errorThrown){\nclearQueue();}else \n{\nprocessQueue();}}}},\n\n\n\n\n\n\n\n\n\n\n\nupdateMarkup:function(nextMarkup){\nupdateDepth++;\nvar errorThrown=true;\ntry{\nvar prevChildren=this._renderedChildren;\n\nReactChildReconciler.unmountChildren(prevChildren);\nfor(var name in prevChildren){\nif(prevChildren.hasOwnProperty(name)){\nthis._unmountChildByName(prevChildren[name],name);}}\n\n\nthis.setMarkup(nextMarkup);\nerrorThrown=false;}finally \n{\nupdateDepth--;\nif(!updateDepth){\nif(errorThrown){\nclearQueue();}else \n{\nprocessQueue();}}}},\n\n\n\n\n\n\n\n\n\n\n\n\nupdateChildren:function(nextNestedChildrenElements,transaction,context){\nupdateDepth++;\nvar errorThrown=true;\ntry{\nthis._updateChildren(nextNestedChildrenElements,transaction,context);\nerrorThrown=false;}finally \n{\nupdateDepth--;\nif(!updateDepth){\nif(errorThrown){\nclearQueue();}else \n{\nprocessQueue();}}}},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_updateChildren:function(nextNestedChildrenElements,transaction,context){\nvar prevChildren=this._renderedChildren;\nvar nextChildren=this._reconcilerUpdateChildren(\nprevChildren,nextNestedChildrenElements,transaction,context);\n\nthis._renderedChildren=nextChildren;\nif(!nextChildren&&!prevChildren){\nreturn;}\n\nvar name;\n\n\nvar lastIndex=0;\nvar nextIndex=0;\nfor(name in nextChildren){\nif(!nextChildren.hasOwnProperty(name)){\ncontinue;}\n\nvar prevChild=prevChildren&&prevChildren[name];\nvar nextChild=nextChildren[name];\nif(prevChild===nextChild){\nthis.moveChild(prevChild,nextIndex,lastIndex);\nlastIndex=Math.max(prevChild._mountIndex,lastIndex);\nprevChild._mountIndex=nextIndex;}else \n{\nif(prevChild){\n\nlastIndex=Math.max(prevChild._mountIndex,lastIndex);\nthis._unmountChild(prevChild);}\n\n\nthis._mountChildByNameAtIndex(\nnextChild,name,nextIndex,transaction,context);}\n\n\nnextIndex++;}\n\n\nfor(name in prevChildren){\nif(prevChildren.hasOwnProperty(name)&&\n!(nextChildren&&nextChildren.hasOwnProperty(name))){\nthis._unmountChild(prevChildren[name]);}}},\n\n\n\n\n\n\n\n\n\n\nunmountChildren:function(){\nvar renderedChildren=this._renderedChildren;\nReactChildReconciler.unmountChildren(renderedChildren);\nthis._renderedChildren=null;},\n\n\n\n\n\n\n\n\n\n\nmoveChild:function(child,toIndex,lastIndex){\n\n\n\nif(child._mountIndex<lastIndex){\nenqueueMove(this._rootNodeID,child._mountIndex,toIndex);}},\n\n\n\n\n\n\n\n\n\n\ncreateChild:function(child,mountImage){\nenqueueInsertMarkup(this._rootNodeID,mountImage,child._mountIndex);},\n\n\n\n\n\n\n\n\nremoveChild:function(child){\nenqueueRemove(this._rootNodeID,child._mountIndex);},\n\n\n\n\n\n\n\n\nsetTextContent:function(textContent){\nenqueueTextContent(this._rootNodeID,textContent);},\n\n\n\n\n\n\n\n\nsetMarkup:function(markup){\nenqueueSetMarkup(this._rootNodeID,markup);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n_mountChildByNameAtIndex:function(\nchild,\nname,\nindex,\ntransaction,\ncontext){\n\nvar rootID=this._rootNodeID+name;\nvar mountImage=ReactReconciler.mountComponent(\nchild,\nrootID,\ntransaction,\ncontext);\n\nchild._mountIndex=index;\nthis.createChild(child,mountImage);},\n\n\n\n\n\n\n\n\n\n\n_unmountChild:function(child){\nthis.removeChild(child);\nchild._mountIndex=null;}}};\n\n\n\n\n\n\nmodule.exports=ReactMultiChild;\n});\n__d('ReactChildReconciler',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactReconciler=require('ReactReconciler');\n\nvar instantiateReactComponent=require('instantiateReactComponent');\nvar shouldUpdateReactComponent=require('shouldUpdateReactComponent');\nvar traverseAllChildren=require('traverseAllChildren');\nvar warning=require('warning');\n\nfunction instantiateChild(childInstances,child,name){\n\nvar keyUnique=childInstances[name]===undefined;\nif(__DEV__){\nwarning(\nkeyUnique,\n'flattenChildren(...): Encountered two children with the same key, '+\n'`%s`. Child keys must be unique; when two children share a key, only '+\n'the first child will be used.',\nname);}\n\n\nif(child!=null&&keyUnique){\nchildInstances[name]=instantiateReactComponent(child,null);}}\n\n\n\n\n\n\n\n\nvar ReactChildReconciler={\n\n\n\n\n\n\n\n\ninstantiateChildren:function(nestedChildNodes,transaction,context){\nif(nestedChildNodes==null){\nreturn null;}\n\nvar childInstances={};\ntraverseAllChildren(nestedChildNodes,instantiateChild,childInstances);\nreturn childInstances;},\n\n\n\n\n\n\n\n\n\n\n\n\nupdateChildren:function(\nprevChildren,\nnextChildren,\ntransaction,\ncontext){\n\n\n\n\n\nif(!nextChildren&&!prevChildren){\nreturn null;}\n\nvar name;\nfor(name in nextChildren){\nif(!nextChildren.hasOwnProperty(name)){\ncontinue;}\n\nvar prevChild=prevChildren&&prevChildren[name];\nvar prevElement=prevChild&&prevChild._currentElement;\nvar nextElement=nextChildren[name];\nif(prevChild!=null&&\nshouldUpdateReactComponent(prevElement,nextElement)){\nReactReconciler.receiveComponent(\nprevChild,nextElement,transaction,context);\n\nnextChildren[name]=prevChild;}else \n{\nif(prevChild){\nReactReconciler.unmountComponent(prevChild,name);}\n\n\nvar nextChildInstance=instantiateReactComponent(\nnextElement,\nnull);\n\nnextChildren[name]=nextChildInstance;}}\n\n\n\nfor(name in prevChildren){\nif(prevChildren.hasOwnProperty(name)&&\n!(nextChildren&&nextChildren.hasOwnProperty(name))){\nReactReconciler.unmountComponent(prevChildren[name]);}}\n\n\nreturn nextChildren;},\n\n\n\n\n\n\n\n\n\nunmountChildren:function(renderedChildren){\nfor(var name in renderedChildren){\nif(renderedChildren.hasOwnProperty(name)){\nvar renderedChild=renderedChildren[name];\nReactReconciler.unmountComponent(renderedChild);}}}};\n\n\n\n\n\n\nmodule.exports=ReactChildReconciler;\n});\n__d('traverseAllChildren',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactElement=require('ReactElement');\nvar ReactInstanceHandles=require('ReactInstanceHandles');\n\nvar getIteratorFn=require('getIteratorFn');\nvar invariant=require('invariant');\nvar warning=require('warning');\n\nvar SEPARATOR=ReactInstanceHandles.SEPARATOR;\nvar SUBSEPARATOR=':';\n\n\n\n\n\n\nvar userProvidedKeyEscaperLookup={\n'=':'=0',\n'.':'=1',\n':':'=2'};\n\n\nvar userProvidedKeyEscapeRegex=/[=.:]/g;\n\nvar didWarnAboutMaps=false;\n\nfunction userProvidedKeyEscaper(match){\nreturn userProvidedKeyEscaperLookup[match];}\n\n\n\n\n\n\n\n\n\nfunction getComponentKey(component,index){\nif(component&&component.key!=null){\n\nreturn wrapUserProvidedKey(component.key);}\n\n\nreturn index.toString(36);}\n\n\n\n\n\n\n\n\nfunction escapeUserProvidedKey(text){\nreturn (''+text).replace(\nuserProvidedKeyEscapeRegex,\nuserProvidedKeyEscaper);}\n\n\n\n\n\n\n\n\n\n\nfunction wrapUserProvidedKey(key){\nreturn '$'+escapeUserProvidedKey(key);}\n\n\n\n\n\n\n\n\n\n\nfunction traverseAllChildrenImpl(\nchildren,\nnameSoFar,\ncallback,\ntraverseContext)\n{\nvar type=typeof children;\n\nif(type==='undefined'||type==='boolean'){\n\nchildren=null;}\n\n\nif(children===null||\ntype==='string'||\ntype==='number'||\nReactElement.isValidElement(children)){\ncallback(\ntraverseContext,\nchildren,\n\n\nnameSoFar===''?SEPARATOR+getComponentKey(children,0):nameSoFar);\n\nreturn 1;}\n\n\nvar child;\nvar nextName;\nvar subtreeCount=0;\nvar nextNamePrefix=nameSoFar===''?SEPARATOR:nameSoFar+SUBSEPARATOR;\n\nif(Array.isArray(children)){\nfor(var i=0;i<children.length;i++){\nchild=children[i];\nnextName=nextNamePrefix+getComponentKey(child,i);\nsubtreeCount+=traverseAllChildrenImpl(\nchild,\nnextName,\ncallback,\ntraverseContext);}}else \n\n\n{\nvar iteratorFn=getIteratorFn(children);\nif(iteratorFn){\nvar iterator=iteratorFn.call(children);\nvar step;\nif(iteratorFn!==children.entries){\nvar ii=0;\nwhile(!(step=iterator.next()).done){\nchild=step.value;\nnextName=nextNamePrefix+getComponentKey(child,ii++);\nsubtreeCount+=traverseAllChildrenImpl(\nchild,\nnextName,\ncallback,\ntraverseContext);}}else \n\n\n{\nif(__DEV__){\nwarning(\ndidWarnAboutMaps,\n'Using Maps as children is not yet fully supported. It is an '+\n'experimental feature that might be removed. Convert it to a '+\n'sequence / iterable of keyed ReactElements instead.');\n\ndidWarnAboutMaps=true;}\n\n\nwhile(!(step=iterator.next()).done){\nvar entry=step.value;\nif(entry){\nchild=entry[1];\nnextName=\nnextNamePrefix+\nwrapUserProvidedKey(entry[0])+SUBSEPARATOR+\ngetComponentKey(child,0);\n\nsubtreeCount+=traverseAllChildrenImpl(\nchild,\nnextName,\ncallback,\ntraverseContext);}}}}else \n\n\n\n\nif(type==='object'){\nvar addendum='';\nif(__DEV__){\naddendum=\n' If you meant to render a collection of children, use an array '+\n'instead or wrap the object using createFragment(object) from the '+\n'React add-ons.';\nif(children._isReactElement){\naddendum=\n' It looks like you\\'re using an element created by a different '+\n'version of React. Make sure to use only one copy of React.';}\n\nif(ReactCurrentOwner.current){\nvar name=ReactCurrentOwner.current.getName();\nif(name){\naddendum+=' Check the render method of `'+name+'`.';}}}\n\n\n\nvar childrenString=String(children);\ninvariant(\nfalse,\n'Objects are not valid as a React child (found: %s).%s',\nchildrenString==='[object Object]'?\n'object with keys {'+Object.keys(children).join(', ')+'}':\nchildrenString,\naddendum);}}\n\n\n\n\nreturn subtreeCount;}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction traverseAllChildren(children,callback,traverseContext){\nif(children==null){\nreturn 0;}\n\n\nreturn traverseAllChildrenImpl(children,'',callback,traverseContext);}\n\n\nmodule.exports=traverseAllChildren;\n});\n__d('flattenChildren',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar traverseAllChildren=require('traverseAllChildren');\nvar warning=require('warning');\n\n\n\n\n\n\nfunction flattenSingleChildIntoContext(traverseContext,child,name){\n\nvar result=traverseContext;\nvar keyUnique=result[name]===undefined;\nif(__DEV__){\nwarning(\nkeyUnique,\n'flattenChildren(...): Encountered two children with the same key, '+\n'`%s`. Child keys must be unique; when two children share a key, only '+\n'the first child will be used.',\nname);}\n\n\nif(keyUnique&&child!=null){\nresult[name]=child;}}\n\n\n\n\n\n\n\n\nfunction flattenChildren(children){\nif(children==null){\nreturn children;}\n\nvar result={};\ntraverseAllChildren(children,flattenSingleChildIntoContext,result);\nreturn result;}\n\n\nmodule.exports=flattenChildren;\n});\n__d('RCTEventEmitter',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeEventEmitter=require('ReactNativeEventEmitter');\n\n\nmodule.exports=ReactNativeEventEmitter;\n});\n__d('RCTLog',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\nvar levelsMap={\nlog:'log',\ninfo:'info',\nwarn:'warn',\nerror:'error',\nfatal:'error'};var \n\n\nRCTLog=(function(){function RCTLog(){babelHelpers.classCallCheck(this,RCTLog);}babelHelpers.createClass(RCTLog,null,[{key:'logIfNoNativeHook',value:function logIfNoNativeHook()\n\n{\nvar args=Array.prototype.slice.call(arguments);\nvar level=args.shift();\nvar logFn=levelsMap[level];\ninvariant(\nlogFn,\n'Level \"'+level+'\" not one of '+Object.keys(levelsMap));\n\nif(typeof global.nativeLoggingHook==='undefined'){\n\nconsole[logFn].apply(console,args);}\n\nreturn true;}}]);return RCTLog;})();\n\n\n\nmodule.exports=RCTLog;\n});\n__d('ReactChildren',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar PooledClass=require('PooledClass');\nvar ReactElement=require('ReactElement');\n\nvar emptyFunction=require('emptyFunction');\nvar traverseAllChildren=require('traverseAllChildren');\n\nvar twoArgumentPooler=PooledClass.twoArgumentPooler;\nvar fourArgumentPooler=PooledClass.fourArgumentPooler;\n\n\nvar userProvidedKeyEscapeRegex=/\\/(?!\\/)/g;\nfunction escapeUserProvidedKey(text){\nreturn (''+text).replace(userProvidedKeyEscapeRegex,'//');}\n\n\n\n\n\n\n\n\n\n\n\nfunction ForEachBookKeeping(forEachFunction,forEachContext){\nthis.func=forEachFunction;\nthis.context=forEachContext;\nthis.count=0;}\n\nForEachBookKeeping.prototype.destructor=function(){\nthis.func=null;\nthis.context=null;\nthis.count=0;};\n\nPooledClass.addPoolingTo(ForEachBookKeeping,twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping,child,name){var \nfunc=bookKeeping.func;var context=bookKeeping.context;\nfunc.call(context,child,bookKeeping.count++);}\n\n\n\n\n\n\n\n\n\n\n\n\nfunction forEachChildren(children,forEachFunc,forEachContext){\nif(children==null){\nreturn children;}\n\nvar traverseContext=\nForEachBookKeeping.getPooled(forEachFunc,forEachContext);\ntraverseAllChildren(children,forEachSingleChild,traverseContext);\nForEachBookKeeping.release(traverseContext);}\n\n\n\n\n\n\n\n\n\n\n\n\nfunction MapBookKeeping(mapResult,keyPrefix,mapFunction,mapContext){\nthis.result=mapResult;\nthis.keyPrefix=keyPrefix;\nthis.func=mapFunction;\nthis.context=mapContext;\nthis.count=0;}\n\nMapBookKeeping.prototype.destructor=function(){\nthis.result=null;\nthis.keyPrefix=null;\nthis.func=null;\nthis.context=null;\nthis.count=0;};\n\nPooledClass.addPoolingTo(MapBookKeeping,fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping,child,childKey){var \nresult=bookKeeping.result;var keyPrefix=bookKeeping.keyPrefix;var func=bookKeeping.func;var context=bookKeeping.context;\n\nvar mappedChild=func.call(context,child,bookKeeping.count++);\nif(Array.isArray(mappedChild)){\nmapIntoWithKeyPrefixInternal(\nmappedChild,\nresult,\nchildKey,\nemptyFunction.thatReturnsArgument);}else \n\nif(mappedChild!=null){\nif(ReactElement.isValidElement(mappedChild)){\nmappedChild=ReactElement.cloneAndReplaceKey(\nmappedChild,\n\n\nkeyPrefix+(\n\nmappedChild!==child?\nescapeUserProvidedKey(mappedChild.key||'')+'/':\n'')+\n\nchildKey);}\n\n\nresult.push(mappedChild);}}\n\n\n\nfunction mapIntoWithKeyPrefixInternal(children,array,prefix,func,context){\nvar escapedPrefix='';\nif(prefix!=null){\nescapedPrefix=escapeUserProvidedKey(prefix)+'/';}\n\nvar traverseContext=MapBookKeeping.getPooled(\narray,\nescapedPrefix,\nfunc,\ncontext);\n\ntraverseAllChildren(children,mapSingleChildIntoContext,traverseContext);\nMapBookKeeping.release(traverseContext);}\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction mapChildren(children,func,context){\nif(children==null){\nreturn children;}\n\nvar result=[];\nmapIntoWithKeyPrefixInternal(children,result,null,func,context);\nreturn result;}\n\n\n\n\nfunction forEachSingleChildDummy(traverseContext,child,name){\nreturn null;}\n\n\n\n\n\n\n\n\n\nfunction countChildren(children,context){\nreturn traverseAllChildren(children,forEachSingleChildDummy,null);}\n\n\n\n\n\n\n\nfunction toArray(children){\nvar result=[];\nmapIntoWithKeyPrefixInternal(\nchildren,\nresult,\nnull,\nemptyFunction.thatReturnsArgument);\n\nreturn result;}\n\n\n\nvar ReactChildren={\nforEach:forEachChildren,\nmap:mapChildren,\nmapIntoWithKeyPrefixInternal:mapIntoWithKeyPrefixInternal,\ncount:countChildren,\ntoArray:toArray};\n\n\nmodule.exports=ReactChildren;\n});\n__d('ReactClass',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactComponent=require('ReactComponent');\nvar ReactElement=require('ReactElement');\nvar ReactPropTypeLocations=require('ReactPropTypeLocations');\nvar ReactPropTypeLocationNames=require('ReactPropTypeLocationNames');\nvar ReactNoopUpdateQueue=require('ReactNoopUpdateQueue');\n\nvar assign=require('Object.assign');\nvar emptyObject=require('emptyObject');\nvar invariant=require('invariant');\nvar keyMirror=require('keyMirror');\nvar keyOf=require('keyOf');\nvar warning=require('warning');\n\nvar MIXINS_KEY=keyOf({mixins:null});\n\n\n\n\nvar SpecPolicy=keyMirror({\n\n\n\nDEFINE_ONCE:null,\n\n\n\n\nDEFINE_MANY:null,\n\n\n\nOVERRIDE_BASE:null,\n\n\n\n\n\nDEFINE_MANY_MERGED:null});\n\n\n\nvar injectedMixins=[];\n\nvar warnedSetProps=false;\nfunction warnSetProps(){\nif(!warnedSetProps){\nwarnedSetProps=true;\nwarning(\nfalse,\n'setProps(...) and replaceProps(...) are deprecated. '+\n'Instead, call render again at the top level.');}}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactClassInterface={\n\n\n\n\n\n\n\nmixins:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\nstatics:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\npropTypes:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\ncontextTypes:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\nchildContextTypes:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\n\n\n\n\n\ngetDefaultProps:SpecPolicy.DEFINE_MANY_MERGED,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ngetInitialState:SpecPolicy.DEFINE_MANY_MERGED,\n\n\n\n\n\ngetChildContext:SpecPolicy.DEFINE_MANY_MERGED,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nrender:SpecPolicy.DEFINE_ONCE,\n\n\n\n\n\n\n\n\n\n\n\n\ncomponentWillMount:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\n\n\n\ncomponentDidMount:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncomponentWillReceiveProps:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nshouldComponentUpdate:SpecPolicy.DEFINE_ONCE,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncomponentWillUpdate:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\n\n\n\n\n\ncomponentDidUpdate:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\n\n\n\n\ncomponentWillUnmount:SpecPolicy.DEFINE_MANY,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nupdateComponent:SpecPolicy.OVERRIDE_BASE};\n\n\n\n\n\n\n\n\n\n\n\n\nvar RESERVED_SPEC_KEYS={\ndisplayName:function(Constructor,displayName){\nConstructor.displayName=displayName;},\n\nmixins:function(Constructor,mixins){\nif(mixins){\nfor(var i=0;i<mixins.length;i++){\nmixSpecIntoComponent(Constructor,mixins[i]);}}},\n\n\n\nchildContextTypes:function(Constructor,childContextTypes){\nif(__DEV__){\nvalidateTypeDef(\nConstructor,\nchildContextTypes,\nReactPropTypeLocations.childContext);}\n\n\nConstructor.childContextTypes=assign(\n{},\nConstructor.childContextTypes,\nchildContextTypes);},\n\n\ncontextTypes:function(Constructor,contextTypes){\nif(__DEV__){\nvalidateTypeDef(\nConstructor,\ncontextTypes,\nReactPropTypeLocations.context);}\n\n\nConstructor.contextTypes=assign(\n{},\nConstructor.contextTypes,\ncontextTypes);},\n\n\n\n\n\n\ngetDefaultProps:function(Constructor,getDefaultProps){\nif(Constructor.getDefaultProps){\nConstructor.getDefaultProps=createMergedResultFunction(\nConstructor.getDefaultProps,\ngetDefaultProps);}else \n\n{\nConstructor.getDefaultProps=getDefaultProps;}},\n\n\npropTypes:function(Constructor,propTypes){\nif(__DEV__){\nvalidateTypeDef(\nConstructor,\npropTypes,\nReactPropTypeLocations.prop);}\n\n\nConstructor.propTypes=assign(\n{},\nConstructor.propTypes,\npropTypes);},\n\n\nstatics:function(Constructor,statics){\nmixStaticSpecIntoComponent(Constructor,statics);},\n\nautobind:function(){}};\n\n\nfunction validateTypeDef(Constructor,typeDef,location){\nfor(var propName in typeDef){\nif(typeDef.hasOwnProperty(propName)){\n\n\nwarning(\ntypeof typeDef[propName]==='function',\n'%s: %s type `%s` is invalid; it must be a function, usually from '+\n'React.PropTypes.',\nConstructor.displayName||'ReactClass',\nReactPropTypeLocationNames[location],\npropName);}}}\n\n\n\n\n\nfunction validateMethodOverride(proto,name){\nvar specPolicy=ReactClassInterface.hasOwnProperty(name)?\nReactClassInterface[name]:\nnull;\n\n\nif(ReactClassMixin.hasOwnProperty(name)){\ninvariant(\nspecPolicy===SpecPolicy.OVERRIDE_BASE,\n'ReactClassInterface: You are attempting to override '+\n'`%s` from your class specification. Ensure that your method names '+\n'do not overlap with React methods.',\nname);}\n\n\n\n\nif(proto.hasOwnProperty(name)){\ninvariant(\nspecPolicy===SpecPolicy.DEFINE_MANY||\nspecPolicy===SpecPolicy.DEFINE_MANY_MERGED,\n'ReactClassInterface: You are attempting to define '+\n'`%s` on your component more than once. This conflict may be due '+\n'to a mixin.',\nname);}}\n\n\n\n\n\n\n\n\nfunction mixSpecIntoComponent(Constructor,spec){\nif(!spec){\nreturn;}\n\n\ninvariant(\ntypeof spec!=='function',\n'ReactClass: You\\'re attempting to '+\n'use a component class as a mixin. Instead, just use a regular object.');\n\ninvariant(\n!ReactElement.isValidElement(spec),\n'ReactClass: You\\'re attempting to '+\n'use a component as a mixin. Instead, just use a regular object.');\n\n\nvar proto=Constructor.prototype;\n\n\n\n\nif(spec.hasOwnProperty(MIXINS_KEY)){\nRESERVED_SPEC_KEYS.mixins(Constructor,spec.mixins);}\n\n\nfor(var name in spec){\nif(!spec.hasOwnProperty(name)){\ncontinue;}\n\n\nif(name===MIXINS_KEY){\n\ncontinue;}\n\n\nvar property=spec[name];\nvalidateMethodOverride(proto,name);\n\nif(RESERVED_SPEC_KEYS.hasOwnProperty(name)){\nRESERVED_SPEC_KEYS[name](Constructor,property);}else \n{\n\n\n\n\nvar isReactClassMethod=\nReactClassInterface.hasOwnProperty(name);\nvar isAlreadyDefined=proto.hasOwnProperty(name);\nvar isFunction=typeof property==='function';\nvar shouldAutoBind=\nisFunction&&\n!isReactClassMethod&&\n!isAlreadyDefined&&\nspec.autobind!==false;\n\nif(shouldAutoBind){\nif(!proto.__reactAutoBindMap){\nproto.__reactAutoBindMap={};}\n\nproto.__reactAutoBindMap[name]=property;\nproto[name]=property;}else \n{\nif(isAlreadyDefined){\nvar specPolicy=ReactClassInterface[name];\n\n\ninvariant(\nisReactClassMethod&&(\nspecPolicy===SpecPolicy.DEFINE_MANY_MERGED||\nspecPolicy===SpecPolicy.DEFINE_MANY),\n\n'ReactClass: Unexpected spec policy %s for key %s '+\n'when mixing in component specs.',\nspecPolicy,\nname);\n\n\n\n\nif(specPolicy===SpecPolicy.DEFINE_MANY_MERGED){\nproto[name]=createMergedResultFunction(proto[name],property);}else \nif(specPolicy===SpecPolicy.DEFINE_MANY){\nproto[name]=createChainedFunction(proto[name],property);}}else \n\n{\nproto[name]=property;\nif(__DEV__){\n\n\nif(typeof property==='function'&&spec.displayName){\nproto[name].displayName=spec.displayName+'_'+name;}}}}}}}\n\n\n\n\n\n\n\n\nfunction mixStaticSpecIntoComponent(Constructor,statics){\nif(!statics){\nreturn;}\n\nfor(var name in statics){\nvar property=statics[name];\nif(!statics.hasOwnProperty(name)){\ncontinue;}\n\n\nvar isReserved=name in RESERVED_SPEC_KEYS;\ninvariant(\n!isReserved,\n'ReactClass: You are attempting to define a reserved '+\n'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it '+\n'as an instance property instead; it will still be accessible on the '+\n'constructor.',\nname);\n\n\nvar isInherited=name in Constructor;\ninvariant(\n!isInherited,\n'ReactClass: You are attempting to define '+\n'`%s` on your component more than once. This conflict may be '+\n'due to a mixin.',\nname);\n\nConstructor[name]=property;}}\n\n\n\n\n\n\n\n\n\n\nfunction mergeIntoWithNoDuplicateKeys(one,two){\ninvariant(\none&&two&&typeof one==='object'&&typeof two==='object',\n'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.');\n\n\nfor(var key in two){\nif(two.hasOwnProperty(key)){\ninvariant(\none[key]===undefined,\n'mergeIntoWithNoDuplicateKeys(): '+\n'Tried to merge two objects with the same key: `%s`. This conflict '+\n'may be due to a mixin; in particular, this may be caused by two '+\n'getInitialState() or getDefaultProps() methods returning objects '+\n'with clashing keys.',\nkey);\n\none[key]=two[key];}}\n\n\nreturn one;}\n\n\n\n\n\n\n\n\n\n\nfunction createMergedResultFunction(one,two){\nreturn function mergedResult(){\nvar a=one.apply(this,arguments);\nvar b=two.apply(this,arguments);\nif(a==null){\nreturn b;}else \nif(b==null){\nreturn a;}\n\nvar c={};\nmergeIntoWithNoDuplicateKeys(c,a);\nmergeIntoWithNoDuplicateKeys(c,b);\nreturn c;};}\n\n\n\n\n\n\n\n\n\n\n\nfunction createChainedFunction(one,two){\nreturn function chainedFunction(){\none.apply(this,arguments);\ntwo.apply(this,arguments);};}\n\n\n\n\n\n\n\n\n\n\nfunction bindAutoBindMethod(component,method){\nvar boundMethod=method.bind(component);\nif(__DEV__){\nboundMethod.__reactBoundContext=component;\nboundMethod.__reactBoundMethod=method;\nboundMethod.__reactBoundArguments=null;\nvar componentName=component.constructor.displayName;\nvar _bind=boundMethod.bind;\n\nboundMethod.bind=function(newThis){for(var _len=arguments.length,args=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key];}\n\n\n\nif(newThis!==component&&newThis!==null){\nwarning(\nfalse,\n'bind(): React component methods may only be bound to the '+\n'component instance. See %s',\ncomponentName);}else \n\nif(!args.length){\nwarning(\nfalse,\n'bind(): You are binding a component method to the component. '+\n'React does this for you automatically in a high-performance '+\n'way, so you can safely remove this call. See %s',\ncomponentName);\n\nreturn boundMethod;}\n\nvar reboundMethod=_bind.apply(boundMethod,arguments);\nreboundMethod.__reactBoundContext=component;\nreboundMethod.__reactBoundMethod=method;\nreboundMethod.__reactBoundArguments=args;\nreturn reboundMethod;};}\n\n\n\nreturn boundMethod;}\n\n\n\n\n\n\n\nfunction bindAutoBindMethods(component){\nfor(var autoBindKey in component.__reactAutoBindMap){\nif(component.__reactAutoBindMap.hasOwnProperty(autoBindKey)){\nvar method=component.__reactAutoBindMap[autoBindKey];\ncomponent[autoBindKey]=bindAutoBindMethod(\ncomponent,\nmethod);}}}\n\n\n\n\n\n\n\n\n\nvar ReactClassMixin={\n\n\n\n\n\nreplaceState:function(newState,callback){\nthis.updater.enqueueReplaceState(this,newState);\nif(callback){\nthis.updater.enqueueCallback(this,callback);}},\n\n\n\n\n\n\n\n\n\nisMounted:function(){\nreturn this.updater.isMounted(this);},\n\n\n\n\n\n\n\n\n\n\n\nsetProps:function(partialProps,callback){\nif(__DEV__){\nwarnSetProps();}\n\nthis.updater.enqueueSetProps(this,partialProps);\nif(callback){\nthis.updater.enqueueCallback(this,callback);}},\n\n\n\n\n\n\n\n\n\n\n\n\nreplaceProps:function(newProps,callback){\nif(__DEV__){\nwarnSetProps();}\n\nthis.updater.enqueueReplaceProps(this,newProps);\nif(callback){\nthis.updater.enqueueCallback(this,callback);}}};\n\n\n\n\nvar ReactClassComponent=function(){};\nassign(\nReactClassComponent.prototype,\nReactComponent.prototype,\nReactClassMixin);\n\n\n\n\n\n\n\nvar ReactClass={\n\n\n\n\n\n\n\n\ncreateClass:function(spec){\nvar Constructor=function(props,context,updater){\n\n\n\nif(__DEV__){\nwarning(\nthis instanceof Constructor,\n'Something is calling a React component directly. Use a factory or '+\n'JSX instead. See: https://fb.me/react-legacyfactory');}\n\n\n\n\nif(this.__reactAutoBindMap){\nbindAutoBindMethods(this);}\n\n\nthis.props=props;\nthis.context=context;\nthis.refs=emptyObject;\nthis.updater=updater||ReactNoopUpdateQueue;\n\nthis.state=null;\n\n\n\n\nvar initialState=this.getInitialState?this.getInitialState():null;\nif(__DEV__){\n\nif(typeof initialState==='undefined'&&\nthis.getInitialState._isMockFunction){\n\n\ninitialState=null;}}\n\n\ninvariant(\ntypeof initialState==='object'&&!Array.isArray(initialState),\n'%s.getInitialState(): must return an object or null',\nConstructor.displayName||'ReactCompositeComponent');\n\n\nthis.state=initialState;};\n\nConstructor.prototype=new ReactClassComponent();\nConstructor.prototype.constructor=Constructor;\n\ninjectedMixins.forEach(\nmixSpecIntoComponent.bind(null,Constructor));\n\n\nmixSpecIntoComponent(Constructor,spec);\n\n\nif(Constructor.getDefaultProps){\nConstructor.defaultProps=Constructor.getDefaultProps();}\n\n\nif(__DEV__){\n\n\n\n\nif(Constructor.getDefaultProps){\nConstructor.getDefaultProps.isReactClassApproved={};}\n\nif(Constructor.prototype.getInitialState){\nConstructor.prototype.getInitialState.isReactClassApproved={};}}\n\n\n\ninvariant(\nConstructor.prototype.render,\n'createClass(...): Class specification must implement a `render` method.');\n\n\nif(__DEV__){\nwarning(\n!Constructor.prototype.componentShouldUpdate,\n'%s has a method called '+\n'componentShouldUpdate(). Did you mean shouldComponentUpdate()? '+\n'The name is phrased as a question because the function is '+\n'expected to return a value.',\nspec.displayName||'A component');\n\nwarning(\n!Constructor.prototype.componentWillRecieveProps,\n'%s has a method called '+\n'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?',\nspec.displayName||'A component');}\n\n\n\n\nfor(var methodName in ReactClassInterface){\nif(!Constructor.prototype[methodName]){\nConstructor.prototype[methodName]=null;}}\n\n\n\nreturn Constructor;},\n\n\ninjection:{\ninjectMixin:function(mixin){\ninjectedMixins.push(mixin);}}};\n\n\n\n\n\nmodule.exports=ReactClass;\n});\n__d('ReactComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNoopUpdateQueue=require('ReactNoopUpdateQueue');\n\nvar canDefineProperty=require('canDefineProperty');\nvar emptyObject=require('emptyObject');\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\n\n\nfunction ReactComponent(props,context,updater){\nthis.props=props;\nthis.context=context;\nthis.refs=emptyObject;\n\n\nthis.updater=updater||ReactNoopUpdateQueue;}\n\n\nReactComponent.prototype.isReactComponent={};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nReactComponent.prototype.setState=function(partialState,callback){\ninvariant(\ntypeof partialState==='object'||\ntypeof partialState==='function'||\npartialState==null,\n'setState(...): takes an object of state variables to update or a '+\n'function which returns an object of state variables.');\n\nif(__DEV__){\nwarning(\npartialState!=null,\n'setState(...): You passed an undefined or null state object; '+\n'instead, use forceUpdate().');}\n\n\nthis.updater.enqueueSetState(this,partialState);\nif(callback){\nthis.updater.enqueueCallback(this,callback);}};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nReactComponent.prototype.forceUpdate=function(callback){\nthis.updater.enqueueForceUpdate(this);\nif(callback){\nthis.updater.enqueueCallback(this,callback);}};\n\n\n\n\n\n\n\n\nif(__DEV__){\nvar deprecatedAPIs={\ngetDOMNode:[\n'getDOMNode',\n'Use ReactDOM.findDOMNode(component) instead.'],\n\nisMounted:[\n'isMounted',\n'Instead, make sure to clean up subscriptions and pending requests in '+\n'componentWillUnmount to prevent memory leaks.'],\n\nreplaceProps:[\n'replaceProps',\n'Instead, call render again at the top level.'],\n\nreplaceState:[\n'replaceState',\n'Refactor your code to use setState instead (see '+\n'https://github.com/facebook/react/issues/3236).'],\n\nsetProps:[\n'setProps',\n'Instead, call render again at the top level.']};\n\n\nvar defineDeprecationWarning=function(methodName,info){\nif(canDefineProperty){\nObject.defineProperty(ReactComponent.prototype,methodName,{\nget:function(){\nwarning(\nfalse,\n'%s(...) is deprecated in plain JavaScript React classes. %s',\ninfo[0],\ninfo[1]);\n\nreturn undefined;}});}};\n\n\n\n\nfor(var fnName in deprecatedAPIs){\nif(deprecatedAPIs.hasOwnProperty(fnName)){\ndefineDeprecationWarning(fnName,deprecatedAPIs[fnName]);}}}\n\n\n\n\nmodule.exports=ReactComponent;\n});\n__d('ReactNoopUpdateQueue',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar warning=require('warning');\n\nfunction warnTDZ(publicInstance,callerName){\nif(__DEV__){\nwarning(\nfalse,\n'%s(...): Can only update a mounted or mounting component. '+\n'This usually means you called %s() on an unmounted component. '+\n'This is a no-op. Please check the code for the %s component.',\ncallerName,\ncallerName,\npublicInstance.constructor&&publicInstance.constructor.displayName||'');}}\n\n\n\n\n\n\n\nvar ReactNoopUpdateQueue={\n\n\n\n\n\n\n\n\nisMounted:function(publicInstance){\nreturn false;},\n\n\n\n\n\n\n\n\n\n\nenqueueCallback:function(publicInstance,callback){},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nenqueueForceUpdate:function(publicInstance){\nwarnTDZ(publicInstance,'forceUpdate');},\n\n\n\n\n\n\n\n\n\n\n\n\n\nenqueueReplaceState:function(publicInstance,completeState){\nwarnTDZ(publicInstance,'replaceState');},\n\n\n\n\n\n\n\n\n\n\n\n\nenqueueSetState:function(publicInstance,partialState){\nwarnTDZ(publicInstance,'setState');},\n\n\n\n\n\n\n\n\n\nenqueueSetProps:function(publicInstance,partialProps){\nwarnTDZ(publicInstance,'setProps');},\n\n\n\n\n\n\n\n\n\nenqueueReplaceProps:function(publicInstance,props){\nwarnTDZ(publicInstance,'replaceProps');}};\n\n\n\n\nmodule.exports=ReactNoopUpdateQueue;\n});\n__d('ReactElementValidator',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactElement=require('ReactElement');\nvar ReactPropTypeLocations=require('ReactPropTypeLocations');\nvar ReactPropTypeLocationNames=require('ReactPropTypeLocationNames');\nvar ReactCurrentOwner=require('ReactCurrentOwner');\n\nvar canDefineProperty=require('canDefineProperty');\nvar getIteratorFn=require('getIteratorFn');\nvar invariant=require('invariant');\nvar warning=require('warning');\n\nfunction getDeclarationErrorAddendum(){\nif(ReactCurrentOwner.current){\nvar name=ReactCurrentOwner.current.getName();\nif(name){\nreturn ' Check the render method of `'+name+'`.';}}\n\n\nreturn '';}\n\n\n\n\n\n\n\nvar ownerHasKeyUseWarning={};\n\nvar loggedTypeFailures={};\n\n\n\n\n\n\n\n\n\n\n\nfunction validateExplicitKey(element,parentType){\nif(!element._store||element._store.validated||element.key!=null){\nreturn;}\n\nelement._store.validated=true;\n\nvar addenda=getAddendaForKeyUse('uniqueKey',element,parentType);\nif(addenda===null){\n\nreturn;}\n\nwarning(\nfalse,\n'Each child in an array or iterator should have a unique \"key\" prop.'+\n'%s%s%s',\naddenda.parentOrOwner||'',\naddenda.childOwner||'',\naddenda.url||'');}\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getAddendaForKeyUse(messageType,element,parentType){\nvar addendum=getDeclarationErrorAddendum();\nif(!addendum){\nvar parentName=typeof parentType==='string'?\nparentType:parentType.displayName||parentType.name;\nif(parentName){\naddendum=' Check the top-level render call using <'+parentName+'>.';}}\n\n\n\nvar memoizer=ownerHasKeyUseWarning[messageType]||(\nownerHasKeyUseWarning[messageType]={});\n\nif(memoizer[addendum]){\nreturn null;}\n\nmemoizer[addendum]=true;\n\nvar addenda={\nparentOrOwner:addendum,\nurl:' See https://fb.me/react-warning-keys for more information.',\nchildOwner:null};\n\n\n\n\n\nif(element&&\nelement._owner&&\nelement._owner!==ReactCurrentOwner.current){\n\naddenda.childOwner=' It was passed a child from '+\nelement._owner.getName()+'.';}\n\n\nreturn addenda;}\n\n\n\n\n\n\n\n\n\n\n\nfunction validateChildKeys(node,parentType){\nif(typeof node!=='object'){\nreturn;}\n\nif(Array.isArray(node)){\nfor(var i=0;i<node.length;i++){\nvar child=node[i];\nif(ReactElement.isValidElement(child)){\nvalidateExplicitKey(child,parentType);}}}else \n\n\nif(ReactElement.isValidElement(node)){\n\nif(node._store){\nnode._store.validated=true;}}else \n\nif(node){\nvar iteratorFn=getIteratorFn(node);\n\nif(iteratorFn){\nif(iteratorFn!==node.entries){\nvar iterator=iteratorFn.call(node);\nvar step;\nwhile(!(step=iterator.next()).done){\nif(ReactElement.isValidElement(step.value)){\nvalidateExplicitKey(step.value,parentType);}}}}}}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction checkPropTypes(componentName,propTypes,props,location){\nfor(var propName in propTypes){\nif(propTypes.hasOwnProperty(propName)){\nvar error;\n\n\n\ntry{\n\n\ninvariant(\ntypeof propTypes[propName]==='function',\n'%s: %s type `%s` is invalid; it must be a function, usually from '+\n'React.PropTypes.',\ncomponentName||'React class',\nReactPropTypeLocationNames[location],\npropName);\n\nerror=propTypes[propName](props,propName,componentName,location);}\ncatch(ex) {\nerror=ex;}\n\nwarning(\n!error||error instanceof Error,\n'%s: type specification of %s `%s` is invalid; the type checker '+\n'function must return `null` or an `Error` but returned a %s. '+\n'You may have forgotten to pass an argument to the type checker '+\n'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and '+\n'shape all require an argument).',\ncomponentName||'React class',\nReactPropTypeLocationNames[location],\npropName,\ntypeof error);\n\nif(error instanceof Error&&!(error.message in loggedTypeFailures)){\n\n\nloggedTypeFailures[error.message]=true;\n\nvar addendum=getDeclarationErrorAddendum();\nwarning(false,'Failed propType: %s%s',error.message,addendum);}}}}\n\n\n\n\n\n\n\n\n\n\n\nfunction validatePropTypes(element){\nvar componentClass=element.type;\nif(typeof componentClass!=='function'){\nreturn;}\n\nvar name=componentClass.displayName||componentClass.name;\nif(componentClass.propTypes){\ncheckPropTypes(\nname,\ncomponentClass.propTypes,\nelement.props,\nReactPropTypeLocations.prop);}\n\n\nif(typeof componentClass.getDefaultProps==='function'){\nwarning(\ncomponentClass.getDefaultProps.isReactClassApproved,\n'getDefaultProps is only used on classic React.createClass '+\n'definitions. Use a static property named `defaultProps` instead.');}}\n\n\n\n\nvar ReactElementValidator={\n\ncreateElement:function(type,props,children){\nvar validType=typeof type==='string'||typeof type==='function';\n\n\nwarning(\nvalidType,\n'React.createElement: type should not be null, undefined, boolean, or '+\n'number. It should be a string (for DOM elements) or a ReactClass '+\n'(for composite components).%s',\ngetDeclarationErrorAddendum());\n\n\nvar element=ReactElement.createElement.apply(this,arguments);\n\n\n\nif(element==null){\nreturn element;}\n\n\n\n\n\n\n\nif(validType){\nfor(var i=2;i<arguments.length;i++){\nvalidateChildKeys(arguments[i],type);}}\n\n\n\nvalidatePropTypes(element);\n\nreturn element;},\n\n\ncreateFactory:function(type){\nvar validatedFactory=ReactElementValidator.createElement.bind(\nnull,\ntype);\n\n\nvalidatedFactory.type=type;\n\nif(__DEV__){\nif(canDefineProperty){\nObject.defineProperty(\nvalidatedFactory,\n'type',\n{\nenumerable:false,\nget:function(){\nwarning(\nfalse,\n'Factory.type is deprecated. Access the class directly '+\n'before passing it to createFactory.');\n\nObject.defineProperty(this,'type',{\nvalue:type});\n\nreturn type;}});}}\n\n\n\n\n\n\n\nreturn validatedFactory;},\n\n\ncloneElement:function(element,props,children){\nvar newElement=ReactElement.cloneElement.apply(this,arguments);\nfor(var i=2;i<arguments.length;i++){\nvalidateChildKeys(arguments[i],newElement.type);}\n\nvalidatePropTypes(newElement);\nreturn newElement;}};\n\n\n\n\nmodule.exports=ReactElementValidator;\n});\n__d('deprecated',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar assign=require('Object.assign');\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\n\n\n\nfunction deprecated(fnName,newModule,newPackage,ctx,fn){\nvar warned=false;\nif(__DEV__){\nvar newFn=function(){\nwarning(\nwarned,\n\n\n\n'React.%s is deprecated. Please use %s.%s from require'+'(\\'%s\\') '+\n'instead.',\nfnName,\nnewModule,\nfnName,\nnewPackage);\n\nwarned=true;\nreturn fn.apply(ctx,arguments);};\n\n\n\nreturn assign(newFn,fn);}\n\n\nreturn fn;}\n\n\nmodule.exports=deprecated;\n});\n__d('onlyChild',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar ReactElement=require('ReactElement');\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\nfunction onlyChild(children){\ninvariant(\nReactElement.isValidElement(children),\n'onlyChild must be passed a children with exactly one child.');\n\nreturn children;}\n\n\nmodule.exports=onlyChild;\n});\n__d('ActivityIndicatorIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar GRAY='#999999';\n\n\n\n\n\n\n\n\nvar ActivityIndicatorIOS=React.createClass({displayName:'ActivityIndicatorIOS',\nmixins:[NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\nanimating:PropTypes.bool,\n\n\n\ncolor:PropTypes.string,\n\n\n\nhidesWhenStopped:PropTypes.bool,\n\n\n\nsize:PropTypes.oneOf([\n'small',\n'large']),\n\n\n\n\n\n\nonLayout:PropTypes.func}),\n\n\ngetDefaultProps:function(){\nreturn {\nanimating:true,\ncolor:GRAY,\nhidesWhenStopped:true,\nsize:'small'};},\n\n\n\nrender:function(){var _props=\nthis.props;var onLayout=_props.onLayout;var style=_props.style;var props=babelHelpers.objectWithoutProperties(_props,['onLayout','style']);\nvar sizeStyle=this.props.size==='large'?styles.sizeLarge:styles.sizeSmall;\nreturn (\nReact.createElement(View,{\nonLayout:onLayout,\nstyle:[styles.container,style]},\nReact.createElement(RCTActivityIndicatorView,babelHelpers.extends({},props,{style:sizeStyle}))));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\ncontainer:{\nalignItems:'center',\njustifyContent:'center'},\n\nsizeSmall:{\nwidth:20,\nheight:20},\n\nsizeLarge:{\nwidth:36,\nheight:36}});\n\n\n\nvar RCTActivityIndicatorView=requireNativeComponent(\n'RCTActivityIndicatorView',\nActivityIndicatorIOS,\n{nativeOnly:{activityIndicatorViewStyle:true}});\n\n\nmodule.exports=ActivityIndicatorIOS;\n});\n__d('StyleSheet',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar StyleSheetRegistry=require('StyleSheetRegistry');\nvar StyleSheetValidation=require('StyleSheetValidation');\nvar flattenStyle=require('flattenStyle');var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nStyleSheet=(function(){function StyleSheet(){babelHelpers.classCallCheck(this,StyleSheet);}babelHelpers.createClass(StyleSheet,null,[{key:'create',value:function create(\n\n\nobj){\nvar result={};\nfor(var key in obj){\nStyleSheetValidation.validateStyle(key,obj);\nresult[key]=StyleSheetRegistry.registerStyle(obj[key]);}\n\nreturn result;}}]);return StyleSheet;})();\n\n\n\n\nStyleSheet.flatten=flattenStyle;\n\nmodule.exports=StyleSheet;\n});\n__d('StyleSheetValidation',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ImageStylePropTypes=require('ImageStylePropTypes');\nvar ReactPropTypeLocations=require('ReactPropTypeLocations');\nvar TextStylePropTypes=require('TextStylePropTypes');\nvar ViewStylePropTypes=require('ViewStylePropTypes');\n\nvar invariant=require('invariant');var \n\nStyleSheetValidation=(function(){function StyleSheetValidation(){babelHelpers.classCallCheck(this,StyleSheetValidation);}babelHelpers.createClass(StyleSheetValidation,null,[{key:'validateStyleProp',value:function validateStyleProp(\nprop,style,caller){\nif(!__DEV__){\nreturn;}\n\nif(allStylePropTypes[prop]===undefined){\nvar message1='\"'+prop+'\" is not a valid style property.';\nvar message2='\\nValid style props: '+\nJSON.stringify(Object.keys(allStylePropTypes).sort(),null,'  ');\nstyleError(message1,style,caller,message2);}\n\nvar error=allStylePropTypes[prop](\nstyle,\nprop,\ncaller,\nReactPropTypeLocations.prop);\n\nif(error){\nstyleError(error.message,style,caller);}}},{key:'validateStyle',value:function validateStyle(\n\n\n\nname,styles){\nif(!__DEV__){\nreturn;}\n\nfor(var prop in styles[name]){\nStyleSheetValidation.validateStyleProp(prop,styles[name],'StyleSheet '+name);}}},{key:'addValidStylePropTypes',value:function addValidStylePropTypes(\n\n\n\nstylePropTypes){\nfor(var key in stylePropTypes){\nallStylePropTypes[key]=stylePropTypes[key];}}}]);return StyleSheetValidation;})();\n\n\n\n\nvar styleError=function(message1,style,caller,message2){\ninvariant(\nfalse,\nmessage1+'\\n'+(caller||'<<unknown>>')+': '+\nJSON.stringify(style,null,'  ')+(message2||''));};\n\n\n\nvar allStylePropTypes={};\n\nStyleSheetValidation.addValidStylePropTypes(ImageStylePropTypes);\nStyleSheetValidation.addValidStylePropTypes(TextStylePropTypes);\nStyleSheetValidation.addValidStylePropTypes(ViewStylePropTypes);\n\nmodule.exports=StyleSheetValidation;\n});\n__d('View',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar PropTypes=require('ReactPropTypes');\nvar RCTUIManager=require('NativeModules').UIManager;\nvar React=require('React');\nvar ReactNativeStyleAttributes=require('ReactNativeStyleAttributes');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\nvar StyleSheetPropType=require('StyleSheetPropType');\nvar ViewStylePropTypes=require('ViewStylePropTypes');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar stylePropType=StyleSheetPropType(ViewStylePropTypes);\n\nvar AccessibilityTraits=[\n'none',\n'button',\n'link',\n'header',\n'search',\n'image',\n'selected',\n'plays',\n'key',\n'text',\n'summary',\n'disabled',\n'frequentUpdates',\n'startsMedia',\n'adjustable',\n'allowsDirectInteraction',\n'pageTurn'];\n\n\nvar AccessibilityComponentType=[\n'none',\n'button',\n'radiobutton_checked',\n'radiobutton_unchecked'];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar View=React.createClass({displayName:'View',\nmixins:[NativeMethodsMixin],\n\n\n\n\n\nviewConfig:{\nuiViewClassName:'RCTView',\nvalidAttributes:ReactNativeViewAttributes.RCTView},\n\n\nstatics:{\nAccessibilityTraits:AccessibilityTraits,\nAccessibilityComponentType:AccessibilityComponentType},\n\n\npropTypes:{\n\n\n\n\naccessible:PropTypes.bool,\n\n\n\n\n\n\naccessibilityLabel:PropTypes.string,\n\n\n\n\n\n\naccessibilityComponentType:PropTypes.oneOf(AccessibilityComponentType),\n\n\n\n\n\n\n\n\naccessibilityLiveRegion:PropTypes.oneOf([\n'none',\n'polite',\n'assertive']),\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimportantForAccessibility:PropTypes.oneOf([\n'auto',\n'yes',\n'no',\n'no-hide-descendants']),\n\n\n\n\n\n\n\naccessibilityTraits:PropTypes.oneOfType([\nPropTypes.oneOf(AccessibilityTraits),\nPropTypes.arrayOf(PropTypes.oneOf(AccessibilityTraits))]),\n\n\n\n\n\n\nonAccessibilityTap:PropTypes.func,\n\n\n\n\n\nonMagicTap:PropTypes.func,\n\n\n\n\n\ntestID:PropTypes.string,\n\n\n\n\n\n\nonResponderGrant:PropTypes.func,\nonResponderMove:PropTypes.func,\nonResponderReject:PropTypes.func,\nonResponderRelease:PropTypes.func,\nonResponderTerminate:PropTypes.func,\nonResponderTerminationRequest:PropTypes.func,\nonStartShouldSetResponder:PropTypes.func,\nonStartShouldSetResponderCapture:PropTypes.func,\nonMoveShouldSetResponder:PropTypes.func,\nonMoveShouldSetResponderCapture:PropTypes.func,\n\n\n\n\n\n\n\n\n\n\nonLayout:PropTypes.func,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\npointerEvents:PropTypes.oneOf([\n'box-none',\n'none',\n'box-only',\n'auto']),\n\nstyle:stylePropType,\n\n\n\n\n\n\n\n\n\nremoveClippedSubviews:PropTypes.bool,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nrenderToHardwareTextureAndroid:PropTypes.bool,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nshouldRasterizeIOS:PropTypes.bool,\n\n\n\n\n\n\n\n\ncollapsable:PropTypes.bool,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nneedsOffscreenAlphaCompositing:PropTypes.bool},\n\n\nrender:function(){\nreturn React.createElement(RCTView,this.props);}});\n\n\n\nvar RCTView=requireNativeComponent('RCTView',View,{\nnativeOnly:{\nnativeBackgroundAndroid:true}});\n\n\n\nif(__DEV__){\nvar viewConfig=RCTUIManager.viewConfigs&&RCTUIManager.viewConfigs.RCTView||{};\nfor(var prop in viewConfig.nativeProps){\nvar viewAny=View;\nif(!viewAny.propTypes[prop]&&!ReactNativeStyleAttributes[prop]){\nthrow new Error(\n'View is missing propType for native prop `'+prop+'`');}}}\n\n\n\n\n\nvar ViewToExport=RCTView;\nif(__DEV__){\nViewToExport=View;}\n\n\nmodule.exports=ViewToExport;\n});\n__d('ReactNativeViewAttributes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeStyleAttributes=require('ReactNativeStyleAttributes');\n\nvar ReactNativeViewAttributes={};\n\nReactNativeViewAttributes.UIView={\npointerEvents:true,\naccessible:true,\naccessibilityLabel:true,\naccessibilityComponentType:true,\naccessibilityLiveRegion:true,\naccessibilityTraits:true,\nimportantForAccessibility:true,\ntestID:true,\nrenderToHardwareTextureAndroid:true,\nshouldRasterizeIOS:true,\nonLayout:true,\nonAccessibilityTap:true,\nonMagicTap:true,\ncollapsable:true,\nneedsOffscreenAlphaCompositing:true,\nstyle:ReactNativeStyleAttributes};\n\n\nReactNativeViewAttributes.RCTView=babelHelpers.extends({},\nReactNativeViewAttributes.UIView,{\n\n\n\n\n\n\nremoveClippedSubviews:true});\n\n\nmodule.exports=ReactNativeViewAttributes;\n});\n__d('StyleSheetPropType',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar createStrictShapeTypeChecker=require('createStrictShapeTypeChecker');\nvar flattenStyle=require('flattenStyle');\n\nfunction StyleSheetPropType(\nshape)\n{\nvar shapePropType=createStrictShapeTypeChecker(shape);\nreturn function(props,propName,componentName,location){\nvar newProps=props;\nif(props[propName]){\n\nnewProps={};\nnewProps[propName]=flattenStyle(props[propName]);}\n\nreturn shapePropType(newProps,propName,componentName,location);};}\n\n\n\nmodule.exports=StyleSheetPropType;\n});\n__d('createStrictShapeTypeChecker',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactPropTypeLocationNames=require('ReactPropTypeLocationNames');\n\nvar invariant=require('invariant');\nvar merge=require('merge');\n\nfunction createStrictShapeTypeChecker(\nshapeTypes)\n{\nfunction checkType(isRequired,props,propName,componentName,location){\nif(!props[propName]){\nif(isRequired){\ninvariant(\nfalse,\n'Required object `'+propName+'` was not specified in '+('`'+\ncomponentName+'`.'));}\n\n\nreturn;}\n\nvar propValue=props[propName];\nvar propType=typeof propValue;\nvar locationName=\nlocation&&ReactPropTypeLocationNames[location]||'(unknown)';\nif(propType!=='object'){\ninvariant(\nfalse,\n'Invalid '+locationName+' `'+propName+'` of type `'+propType+'` '+('supplied to `'+\ncomponentName+'`, expected `object`.'));}\n\n\n\n\nvar allKeys=merge(props[propName],shapeTypes);\nfor(var key in allKeys){\nvar checker=shapeTypes[key];\nif(!checker){\ninvariant(\nfalse,\n'Invalid props.'+propName+' key `'+key+'` supplied to `'+componentName+'`.'+'\\nBad object: '+\nJSON.stringify(props[propName],null,'  ')+'\\nValid keys: '+\nJSON.stringify(Object.keys(shapeTypes),null,'  '));}\n\n\nvar error=checker(propValue,key,componentName,location);\nif(error){\ninvariant(\nfalse,\nerror.message+'\\nBad object: '+\nJSON.stringify(props[propName],null,'  '));}}}\n\n\n\n\nfunction chainedCheckType(\nprops,\npropName,\ncomponentName,\nlocation)\n{\nreturn checkType(false,props,propName,componentName,location);}\n\nchainedCheckType.isRequired=checkType.bind(null,true);\nreturn chainedCheckType;}\n\n\nmodule.exports=createStrictShapeTypeChecker;\n});\n__d('requireNativeComponent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTUIManager=require('NativeModules').UIManager;\nvar ReactNativeStyleAttributes=require('ReactNativeStyleAttributes');\nvar UnimplementedView=require('UnimplementedView');\n\nvar createReactNativeComponentClass=require('createReactNativeComponentClass');\nvar insetsDiffer=require('insetsDiffer');\nvar pointsDiffer=require('pointsDiffer');\nvar matricesDiffer=require('matricesDiffer');\nvar processColor=require('processColor');\nvar sizesDiffer=require('sizesDiffer');\nvar verifyPropTypes=require('verifyPropTypes');\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction requireNativeComponent(\nviewName,\ncomponentInterface,\nextraConfig)\n{\nvar viewConfig=RCTUIManager[viewName];\nif(!viewConfig||!viewConfig.NativeProps){\nwarning(false,'Native component for \"%s\" does not exist',viewName);\nreturn UnimplementedView;}\n\nvar nativeProps=babelHelpers.extends({},\nRCTUIManager.RCTView.NativeProps,\nviewConfig.NativeProps);\n\nviewConfig.uiViewClassName=viewName;\nviewConfig.validAttributes={};\nviewConfig.propTypes=componentInterface&&componentInterface.propTypes;\nfor(var key in nativeProps){\nvar useAttribute=false;\nvar attribute={};\n\nvar differ=TypeToDifferMap[nativeProps[key]];\nif(differ){\nattribute.diff=differ;\nuseAttribute=true;}\n\n\nvar processor=TypeToProcessorMap[nativeProps[key]];\nif(processor){\nattribute.process=processor;\nuseAttribute=true;}\n\n\nviewConfig.validAttributes[key]=useAttribute?attribute:true;}\n\n\n\n\n\n\n\nviewConfig.validAttributes.style=ReactNativeStyleAttributes;\n\nif(__DEV__){\ncomponentInterface&&verifyPropTypes(\ncomponentInterface,\nviewConfig,\nextraConfig&&extraConfig.nativeOnly);}\n\n\nreturn createReactNativeComponentClass(viewConfig);}\n\n\nvar TypeToDifferMap={\n\nCATransform3D:matricesDiffer,\nCGPoint:pointsDiffer,\nCGSize:sizesDiffer,\nUIEdgeInsets:insetsDiffer};\n\n\n\n\nvar TypeToProcessorMap={\n\nCGColor:processColor,\nCGColorArray:processColor,\nUIColor:processColor,\nUIColorArray:processColor,\n\nColor:processColor};\n\n\nmodule.exports=requireNativeComponent;\n});\n__d('verifyPropTypes',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeStyleAttributes=require('ReactNativeStyleAttributes');\n\n\n\n\n\n\n\nfunction verifyPropTypes(\ncomponentInterface,\nviewConfig,\nnativePropsToIgnore)\n{\nif(!viewConfig){\nreturn;}\n\nvar componentName=componentInterface.name||\ncomponentInterface.displayName||\n'unknown';\nif(!componentInterface.propTypes){\nthrow new Error(\n'`'+componentName+'` has no propTypes defined`');}\n\n\n\nvar nativeProps=viewConfig.NativeProps;\nfor(var prop in nativeProps){\nif(!componentInterface.propTypes[prop]&&\n!ReactNativeStyleAttributes[prop]&&(\n!nativePropsToIgnore||!nativePropsToIgnore[prop])){\nthrow new Error(\n'`'+componentName+'` has no propType for native prop `'+\nviewConfig.uiViewClassName+'.'+prop+'` of native type `'+\nnativeProps[prop]+'`');}}}\n\n\n\n\n\nmodule.exports=verifyPropTypes;\n});\n__d('UnimplementedView',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar UnimplementedView=React.createClass({displayName:'UnimplementedView',\nsetNativeProps:function(){},\n\n\n\n\nrender:function(){\nreturn (\nReact.createElement(View,{style:[styles.unimplementedView,this.props.style]},\nthis.props.children));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nunimplementedView:{\nborderWidth:1,\nborderColor:'red',\nalignSelf:'flex-start'}});\n\n\n\nmodule.exports=UnimplementedView;\n});\n__d('insetsDiffer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar dummyInsets={\ntop:undefined,\nleft:undefined,\nright:undefined,\nbottom:undefined};\n\n\nvar insetsDiffer=function(\none,\ntwo)\n{\none=one||dummyInsets;\ntwo=two||dummyInsets;\nreturn one!==two&&(\none.top!==two.top||\none.left!==two.left||\none.right!==two.right||\none.bottom!==two.bottom);};\n\n\n\nmodule.exports=insetsDiffer;\n});\n__d('pointsDiffer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar dummyPoint={x:undefined,y:undefined};\n\nvar pointsDiffer=function(one,two){\none=one||dummyPoint;\ntwo=two||dummyPoint;\nreturn one!==two&&(\none.x!==two.x||\none.y!==two.y);};\n\n\n\nmodule.exports=pointsDiffer;\n});\n__d('ReactNativeART',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar Color=require('art/core/color.js');\nvar Path=require('ARTSerializablePath');\nvar Transform=require('art/core/transform.js');\n\nvar React=require('React');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\n\nvar createReactNativeComponentClass=require('createReactNativeComponentClass');\nvar merge=require('merge');\n\n\n\nfunction arrayDiffer(a,b){\nif(a==null){\nreturn true;}\n\nif(a.length!==b.length){\nreturn true;}\n\nfor(var i=0;i<a.length;i++){\nif(a[i]!==b[i]){\nreturn true;}}\n\n\nreturn false;}\n\n\nfunction fontAndLinesDiffer(a,b){\nif(a===b){\nreturn false;}\n\nif(a.font!==b.font){\nif(a.font===null){\nreturn true;}\n\nif(b.font===null){\nreturn true;}\n\n\nif(\na.font.fontFamily!==b.font.fontFamily||\na.font.fontSize!==b.font.fontSize||\na.font.fontWeight!==b.font.fontWeight||\na.font.fontStyle!==b.font.fontStyle)\n{\nreturn true;}}\n\n\nreturn arrayDiffer(a.lines,b.lines);}\n\n\n\n\nvar SurfaceViewAttributes=merge(ReactNativeViewAttributes.UIView,{});\n\n\n\n\n\nvar NodeAttributes={\ntransform:{diff:arrayDiffer},\nopacity:true};\n\n\nvar GroupAttributes=merge(NodeAttributes,{\nclipping:{diff:arrayDiffer}});\n\n\nvar RenderableAttributes=merge(NodeAttributes,{\nfill:{diff:arrayDiffer},\nstroke:{diff:arrayDiffer},\nstrokeWidth:true,\nstrokeCap:true,\nstrokeJoin:true,\nstrokeDash:{diff:arrayDiffer}});\n\n\nvar ShapeAttributes=merge(RenderableAttributes,{\nd:{diff:arrayDiffer}});\n\n\nvar TextAttributes=merge(RenderableAttributes,{\nalignment:true,\nframe:{diff:fontAndLinesDiffer},\npath:{diff:arrayDiffer}});\n\n\n\n\nvar NativeSurfaceView=createReactNativeComponentClass({\nvalidAttributes:SurfaceViewAttributes,\nuiViewClassName:'ARTSurfaceView'});\n\n\nvar NativeGroup=createReactNativeComponentClass({\nvalidAttributes:GroupAttributes,\nuiViewClassName:'ARTGroup'});\n\n\nvar NativeShape=createReactNativeComponentClass({\nvalidAttributes:ShapeAttributes,\nuiViewClassName:'ARTShape'});\n\n\nvar NativeText=createReactNativeComponentClass({\nvalidAttributes:TextAttributes,\nuiViewClassName:'ARTText'});\n\n\n\n\nfunction childrenAsString(children){\nif(!children){\nreturn '';}\n\nif(typeof children==='string'){\nreturn children;}\n\nif(children.length){\nreturn children.join('\\n');}\n\nreturn '';}\n\n\n\n\nvar Surface=React.createClass({displayName:'Surface',\n\nrender:function(){\nvar props=this.props;\nvar w=extractNumber(props.width,0);\nvar h=extractNumber(props.height,0);\nreturn (\nReact.createElement(NativeSurfaceView,{style:[props.style,{width:w,height:h}]},\nthis.props.children));}});\n\n\n\n\n\n\n\n\n\n\n\nfunction extractNumber(value,defaultValue){\nif(value==null){\nreturn defaultValue;}\n\nreturn +value;}\n\n\nvar pooledTransform=new Transform();\n\nfunction extractTransform(props){\nvar scaleX=props.scaleX!=null?props.scaleX:\nprops.scale!=null?props.scale:1;\nvar scaleY=props.scaleY!=null?props.scaleY:\nprops.scale!=null?props.scale:1;\n\npooledTransform.\ntransformTo(1,0,0,1,0,0).\nmove(props.x||0,props.y||0).\nrotate(props.rotation||0,props.originX,props.originY).\nscale(scaleX,scaleY,props.originX,props.originY);\n\nif(props.transform!=null){\npooledTransform.transform(props.transform);}\n\n\nreturn [\npooledTransform.xx,pooledTransform.yx,\npooledTransform.xy,pooledTransform.yy,\npooledTransform.x,pooledTransform.y];}\n\n\n\nfunction extractOpacity(props){\n\nif(props.visible===false){\nreturn 0;}\n\nif(props.opacity==null){\nreturn 1;}\n\nreturn +props.opacity;}\n\n\n\n\n\n\n\nvar Group=React.createClass({displayName:'Group',\n\nrender:function(){\nvar props=this.props;\nreturn (\nReact.createElement(NativeGroup,{\nopacity:extractOpacity(props),\ntransform:extractTransform(props)},\nthis.props.children));}});\n\n\n\n\n\n\nvar ClippingRectangle=React.createClass({displayName:'ClippingRectangle',\n\nrender:function(){\nvar props=this.props;\nvar x=extractNumber(props.x,0);\nvar y=extractNumber(props.y,0);\nvar w=extractNumber(props.width,0);\nvar h=extractNumber(props.height,0);\nvar clipping=new Path().\nmoveTo(x,y).\nline(w,0).\nline(0,h).\nline(w,0).\nclose().\ntoJSON();\n\nvar propsExcludingXAndY=merge(props);\ndelete propsExcludingXAndY.x;\ndelete propsExcludingXAndY.y;\nreturn (\nReact.createElement(NativeGroup,{\nclipping:clipping,\nopacity:extractOpacity(props),\ntransform:extractTransform(propsExcludingXAndY)},\nthis.props.children));}});\n\n\n\n\n\n\n\n\nvar SOLID_COLOR=0;\nvar LINEAR_GRADIENT=1;\nvar RADIAL_GRADIENT=2;\nvar PATTERN=3;\n\nfunction insertColorIntoArray(color,targetArray,atIndex){\nvar c=new Color(color);\ntargetArray[atIndex+0]=c.red/255;\ntargetArray[atIndex+1]=c.green/255;\ntargetArray[atIndex+2]=c.blue/255;\ntargetArray[atIndex+3]=c.alpha;}\n\n\nfunction insertColorsIntoArray(stops,targetArray,atIndex){\nvar i=0;\nif('length' in stops){\nwhile(i<stops.length){\ninsertColorIntoArray(stops[i],targetArray,atIndex+i*4);\ni++;}}else \n\n{\nfor(var offset in stops){\ninsertColorIntoArray(stops[offset],targetArray,atIndex+i*4);\ni++;}}\n\n\nreturn atIndex+i*4;}\n\n\nfunction insertOffsetsIntoArray(stops,targetArray,atIndex,multi,reverse){\nvar offsetNumber;\nvar i=0;\nif('length' in stops){\nwhile(i<stops.length){\noffsetNumber=i/(stops.length-1)*multi;\ntargetArray[atIndex+i]=reverse?1-offsetNumber:offsetNumber;\ni++;}}else \n\n{\nfor(var offsetString in stops){\noffsetNumber=+offsetString*multi;\ntargetArray[atIndex+i]=reverse?1-offsetNumber:offsetNumber;\ni++;}}\n\n\nreturn atIndex+i;}\n\n\nfunction insertColorStopsIntoArray(stops,targetArray,atIndex){\nvar lastIndex=insertColorsIntoArray(stops,targetArray,atIndex);\ninsertOffsetsIntoArray(stops,targetArray,lastIndex,1,false);}\n\n\nfunction insertDoubleColorStopsIntoArray(stops,targetArray,atIndex){\nvar lastIndex=insertColorsIntoArray(stops,targetArray,atIndex);\nlastIndex=insertColorsIntoArray(stops,targetArray,lastIndex);\nlastIndex=insertOffsetsIntoArray(stops,targetArray,lastIndex,0.5,false);\ninsertOffsetsIntoArray(stops,targetArray,lastIndex,0.5,true);}\n\n\nfunction applyBoundingBoxToBrushData(brushData,props){\nvar type=brushData[0];\nvar width=+props.width;\nvar height=+props.height;\nif(type===LINEAR_GRADIENT){\nbrushData[1]*=width;\nbrushData[2]*=height;\nbrushData[3]*=width;\nbrushData[4]*=height;}else \nif(type===RADIAL_GRADIENT){\nbrushData[1]*=width;\nbrushData[2]*=height;\nbrushData[3]*=width;\nbrushData[4]*=height;\nbrushData[5]*=width;\nbrushData[6]*=height;}else \nif(type===PATTERN){}}\n\n\n\n\nfunction extractBrush(colorOrBrush,props){\nif(colorOrBrush==null){\nreturn null;}\n\nif(colorOrBrush._brush){\nif(colorOrBrush._bb){\n\n\n\n\n\napplyBoundingBoxToBrushData(colorOrBrush._brush,props);\ncolorOrBrush._bb=false;}\n\nreturn colorOrBrush._brush;}\n\nvar c=new Color(colorOrBrush);\nreturn [SOLID_COLOR,c.red/255,c.green/255,c.blue/255,c.alpha];}\n\n\nfunction extractColor(color){\nif(color==null){\nreturn null;}\n\nvar c=new Color(color);\nreturn [c.red/255,c.green/255,c.blue/255,c.alpha];}\n\n\nfunction extractStrokeCap(strokeCap){\nswitch(strokeCap){\ncase 'butt':return 0;\ncase 'square':return 2;\ndefault:return 1;}}\n\n\n\nfunction extractStrokeJoin(strokeJoin){\nswitch(strokeJoin){\ncase 'miter':return 0;\ncase 'bevel':return 2;\ndefault:return 1;}}\n\n\n\n\n\n\n\n\nvar Shape=React.createClass({displayName:'Shape',\n\nrender:function(){\nvar props=this.props;\nvar path=props.d||childrenAsString(props.children);\nvar d=new Path(path).toJSON();\nreturn (\nReact.createElement(NativeShape,{\nfill:extractBrush(props.fill,props),\nopacity:extractOpacity(props),\nstroke:extractColor(props.stroke),\nstrokeCap:extractStrokeCap(props.strokeCap),\nstrokeDash:props.strokeDash||null,\nstrokeJoin:extractStrokeJoin(props.strokeJoin),\nstrokeWidth:extractNumber(props.strokeWidth,1),\ntransform:extractTransform(props),\n\nd:d}));}});\n\n\n\n\n\n\n\n\nvar cachedFontObjectsFromString={};\n\nvar fontFamilyPrefix=/^[\\s\"']*/;\nvar fontFamilySuffix=/[\\s\"']*$/;\n\nfunction extractSingleFontFamily(fontFamilyString){\n\n\n\nreturn fontFamilyString.split(',')[0].\nreplace(fontFamilyPrefix,'').\nreplace(fontFamilySuffix,'');}\n\n\nfunction parseFontString(font){\nif(cachedFontObjectsFromString.hasOwnProperty(font)){\nreturn cachedFontObjectsFromString[font];}\n\nvar regexp=/^\\s*((?:(?:normal|bold|italic)\\s+)*)(?:(\\d+(?:\\.\\d+)?)[ptexm\\%]*(?:\\s*\\/.*?)?\\s+)?\\s*\\\"?([^\\\"]*)/i;\nvar match=regexp.exec(font);\nif(!match){\nreturn null;}\n\nvar fontFamily=extractSingleFontFamily(match[3]);\nvar fontSize=+match[2]||12;\nvar isBold=/bold/.exec(match[1]);\nvar isItalic=/italic/.exec(match[1]);\ncachedFontObjectsFromString[font]={\nfontFamily:fontFamily,\nfontSize:fontSize,\nfontWeight:isBold?'bold':'normal',\nfontStyle:isItalic?'italic':'normal'};\n\nreturn cachedFontObjectsFromString[font];}\n\n\nfunction extractFont(font){\nif(font==null){\nreturn null;}\n\nif(typeof font==='string'){\nreturn parseFontString(font);}\n\nvar fontFamily=extractSingleFontFamily(font.fontFamily);\nvar fontSize=+font.fontSize||12;\nreturn {\n\nfontFamily:fontFamily,\nfontSize:fontSize,\nfontWeight:font.fontWeight,\nfontStyle:font.fontStyle};}\n\n\n\nvar newLine=/\\n/g;\nfunction extractFontAndLines(font,text){\nreturn {font:extractFont(font),lines:text.split(newLine)};}\n\n\nfunction extractAlignment(alignment){\nswitch(alignment){\ncase 'right':\nreturn 1;\ncase 'center':\nreturn 2;\ndefault:\nreturn 0;}}\n\n\n\nvar Text=React.createClass({displayName:'Text',\n\nrender:function(){\nvar props=this.props;\nvar textPath=props.path?new Path(props.path).toJSON():null;\nvar textFrame=extractFontAndLines(\nprops.font,\nchildrenAsString(props.children));\n\nreturn (\nReact.createElement(NativeText,{\nfill:extractBrush(props.fill,props),\nopacity:extractOpacity(props),\nstroke:extractColor(props.stroke),\nstrokeCap:extractStrokeCap(props.strokeCap),\nstrokeDash:props.strokeDash||null,\nstrokeJoin:extractStrokeJoin(props.strokeJoin),\nstrokeWidth:extractNumber(props.strokeWidth,1),\ntransform:extractTransform(props),\n\nalignment:extractAlignment(props.alignment),\nframe:textFrame,\npath:textPath}));}});\n\n\n\n\n\n\n\n\nfunction LinearGradient(stops,x1,y1,x2,y2){\nvar type=LINEAR_GRADIENT;\n\nif(arguments.length<5){\nvar angle=(x1==null?270:x1)*Math.PI/180;\n\nvar x=Math.cos(angle);\nvar y=-Math.sin(angle);\nvar l=(Math.abs(x)+Math.abs(y))/2;\n\nx*=l;y*=l;\n\nx1=0.5-x;\nx2=0.5+x;\ny1=0.5-y;\ny2=0.5+y;\nthis._bb=true;}else \n{\nthis._bb=false;}\n\n\nvar brushData=[type,+x1,+y1,+x2,+y2];\ninsertColorStopsIntoArray(stops,brushData,5);\nthis._brush=brushData;}\n\n\nfunction RadialGradient(stops,fx,fy,rx,ry,cx,cy){\nif(ry==null){\nry=rx;}\n\nif(cx==null){\ncx=fx;}\n\nif(cy==null){\ncy=fy;}\n\nif(fx==null){\n\n\nfx=fy=rx=ry=cx=cy=0.5;\nthis._bb=true;}else \n{\nthis._bb=false;}\n\n\n\n\n\nvar brushData=[RADIAL_GRADIENT,+fx,+fy,+rx*2,+ry*2,+cx,+cy];\ninsertDoubleColorStopsIntoArray(stops,brushData,7);\nthis._brush=brushData;}\n\n\nfunction Pattern(url,width,height,left,top){\nthis._brush=[PATTERN,url,+left||0,+top||0,+width,+height];}\n\n\n\n\n\nfunction CSSBackgroundPattern(){\nreturn new Color('rgba(0,0,0,0)');}\n\n\nvar ReactART={\nLinearGradient:LinearGradient,\nRadialGradient:RadialGradient,\nPattern:Pattern,\nTransform:Transform,\nPath:Path,\nSurface:Surface,\nGroup:Group,\nClippingRectangle:ClippingRectangle,\nShape:Shape,\nText:Text,\nCSSBackgroundPattern:CSSBackgroundPattern};\n\n\nmodule.exports=ReactART;\n});\n__d('art/core/color.js',function(global, require, module, exports) {  var colors={\nmaroon:'#800000',red:'#ff0000',orange:'#ffA500',yellow:'#ffff00',olive:'#808000',\npurple:'#800080',fuchsia:\"#ff00ff\",white:'#ffffff',lime:'#00ff00',green:'#008000',\nnavy:'#000080',blue:'#0000ff',aqua:'#00ffff',teal:'#008080',\nblack:'#000000',silver:'#c0c0c0',gray:'#808080'};\n\n\nvar map=function(array,fn){\nvar results=[];\nfor(var i=0,l=array.length;i<l;i++){\nresults[i]=fn(array[i],i);}\nreturn results;};\n\n\nvar Color=function(color,type){\n\nif(color.isColor){\n\nthis.red=color.red;\nthis.green=color.green;\nthis.blue=color.blue;\nthis.alpha=color.alpha;}else \n\n{\n\nvar namedColor=colors[color];\nif(namedColor){\ncolor=namedColor;\ntype='hex';}\n\n\nswitch(typeof color){\ncase 'string':if(!type)type=(type=color.match(/^rgb|^hsb|^hsl/))?type[0]:'hex';break;\ncase 'object':type=type||'rgb';color=color.toString();break;\ncase 'number':type='hex';color=color.toString(16);break;}\n\n\ncolor=Color['parse'+type.toUpperCase()](color);\nthis.red=color[0];\nthis.green=color[1];\nthis.blue=color[2];\nthis.alpha=color[3];}\n\n\nthis.isColor=true;};\n\n\n\nvar limit=function(number,min,max){\nreturn Math.min(max,Math.max(min,number));};\n\n\nvar listMatch=/([-.\\d]+\\%?)\\s*,\\s*([-.\\d]+\\%?)\\s*,\\s*([-.\\d]+\\%?)\\s*,?\\s*([-.\\d]*\\%?)/;\nvar hexMatch=/^#?([a-f0-9]{1,2})([a-f0-9]{1,2})([a-f0-9]{1,2})([a-f0-9]{0,2})$/i;\n\nColor.parseRGB=function(color){\nreturn map(color.match(listMatch).slice(1),function(bit,i){\nif(bit)bit=parseFloat(bit)*(bit[bit.length-1]=='%'?2.55:1);\nreturn i<3?Math.round((bit%=256)<0?bit+256:bit):limit(bit===''?1:Number(bit),0,1);});};\n\n\n\nColor.parseHEX=function(color){\nif(color.length==1)color=color+color+color;\nreturn map(color.match(hexMatch).slice(1),function(bit,i){\nif(i==3)return bit?parseInt(bit,16)/255:1;\nreturn parseInt(bit.length==1?bit+bit:bit,16);});};\n\n\n\nColor.parseHSB=function(color){\nvar hsb=map(color.match(listMatch).slice(1),function(bit,i){\nif(bit)bit=parseFloat(bit);\nif(i===0)return Math.round((bit%=360)<0?bit+360:bit);else \nif(i<3)return limit(Math.round(bit),0,100);else \nreturn limit(bit===''?1:Number(bit),0,1);});\n\n\nvar a=hsb[3];\nvar br=Math.round(hsb[2]/100*255);\nif(hsb[1]==0)return [br,br,br,a];\n\nvar hue=hsb[0];\nvar f=hue%60;\nvar p=Math.round(hsb[2]*(100-hsb[1])/10000*255);\nvar q=Math.round(hsb[2]*(6000-hsb[1]*f)/600000*255);\nvar t=Math.round(hsb[2]*(6000-hsb[1]*(60-f))/600000*255);\n\nswitch(Math.floor(hue/60)){\ncase 0:return [br,t,p,a];\ncase 1:return [q,br,p,a];\ncase 2:return [p,br,t,a];\ncase 3:return [p,q,br,a];\ncase 4:return [t,p,br,a];\ndefault:return [br,p,q,a];}};\n\n\n\nColor.parseHSL=function(color){\nvar hsb=map(color.match(listMatch).slice(1),function(bit,i){\nif(bit)bit=parseFloat(bit);\nif(i===0)return Math.round((bit%=360)<0?bit+360:bit);else \nif(i<3)return limit(Math.round(bit),0,100);else \nreturn limit(bit===''?1:Number(bit),0,1);});\n\n\nvar h=hsb[0]/60;\nvar s=hsb[1]/100;\nvar l=hsb[2]/100;\nvar a=hsb[3];\n\nvar c=(1-Math.abs(2*l-1))*s;\nvar x=c*(1-Math.abs(h%2-1));\nvar m=l-c/2;\n\nvar p=Math.round((c+m)*255);\nvar q=Math.round((x+m)*255);\nvar t=Math.round(m*255);\n\nswitch(Math.floor(h)){\ncase 0:return [p,q,t,a];\ncase 1:return [q,p,t,a];\ncase 2:return [t,p,q,a];\ncase 3:return [t,q,p,a];\ncase 4:return [q,t,p,a];\ndefault:return [p,t,q,a];}};\n\n\n\nvar toString=function(type,array){\nif(array[3]!=1)type+='a';else \narray.pop();\nreturn type+'('+array.join(', ')+')';};\n\n\nColor.prototype={\n\ntoHSB:function(array){\nvar red=this.red,green=this.green,blue=this.blue,alpha=this.alpha;\n\nvar max=Math.max(red,green,blue),min=Math.min(red,green,blue),delta=max-min;\nvar hue=0,saturation=delta!=0?delta/max:0,brightness=max/255;\nif(saturation){\nvar rr=(max-red)/delta,gr=(max-green)/delta,br=(max-blue)/delta;\nhue=red==max?br-gr:green==max?2+rr-br:4+gr-rr;\nif((hue/=6)<0)hue++;}\n\n\nvar hsb=[Math.round(hue*360),Math.round(saturation*100),Math.round(brightness*100),alpha];\n\nreturn array?hsb:toString('hsb',hsb);},\n\n\ntoHSL:function(array){\nvar red=this.red,green=this.green,blue=this.blue,alpha=this.alpha;\n\nvar max=Math.max(red,green,blue),min=Math.min(red,green,blue),delta=max-min;\nvar hue=0,saturation=delta!=0?delta/(255-Math.abs(max+min-255)):0,lightness=(max+min)/512;\nif(saturation){\nvar rr=(max-red)/delta,gr=(max-green)/delta,br=(max-blue)/delta;\nhue=red==max?br-gr:green==max?2+rr-br:4+gr-rr;\nif((hue/=6)<0)hue++;}\n\n\nvar hsl=[Math.round(hue*360),Math.round(saturation*100),Math.round(lightness*100),alpha];\n\nreturn array?hsl:toString('hsl',hsl);},\n\n\ntoHEX:function(array){\n\nvar a=this.alpha;\nvar alpha=(a=Math.round(a*255).toString(16)).length==1?a+a:a;\n\nvar hex=map([this.red,this.green,this.blue],function(bit){\nbit=bit.toString(16);\nreturn bit.length==1?'0'+bit:bit;});\n\n\nreturn array?hex.concat(alpha):'#'+hex.join('')+(alpha=='ff'?'':alpha);},\n\n\ntoRGB:function(array){\nvar rgb=[this.red,this.green,this.blue,this.alpha];\nreturn array?rgb:toString('rgb',rgb);}};\n\n\n\n\nColor.prototype.toString=Color.prototype.toRGB;\n\nColor.hex=function(hex){\nreturn new Color(hex,'hex');};\n\n\nif(this.hex==null)this.hex=Color.hex;\n\nColor.hsb=function(h,s,b,a){\nreturn new Color([h||0,s||0,b||0,a==null?1:a],'hsb');};\n\n\nif(this.hsb==null)this.hsb=Color.hsb;\n\nColor.hsl=function(h,s,l,a){\nreturn new Color([h||0,s||0,l||0,a==null?1:a],'hsl');};\n\n\nif(this.hsl==null)this.hsl=Color.hsl;\n\nColor.rgb=function(r,g,b,a){\nreturn new Color([r||0,g||0,b||0,a==null?1:a],'rgb');};\n\n\nif(this.rgb==null)this.rgb=Color.rgb;\n\nColor.detach=function(color){\ncolor=new Color(color);\nreturn [Color.rgb(color.red,color.green,color.blue).toString(),color.alpha];};\n\n\nmodule.exports=Color;\n});\n__d('ARTSerializablePath',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Class=require('art/core/class.js');\nvar Path=require('art/core/path.js');\n\nvar MOVE_TO=0;\nvar CLOSE=1;\nvar LINE_TO=2;\nvar CURVE_TO=3;\nvar ARC=4;\n\nvar SerializablePath=Class(Path,{\n\ninitialize:function(path){\nthis.reset();\nif(path instanceof SerializablePath){\nthis.path=path.path.slice(0);}else \nif(path){\nif(path.applyToPath){\npath.applyToPath(this);}else \n{\nthis.push(path);}}},\n\n\n\n\nonReset:function(){\nthis.path=[];},\n\n\nonMove:function(sx,sy,x,y){\nthis.path.push(MOVE_TO,x,y);},\n\n\nonLine:function(sx,sy,x,y){\nthis.path.push(LINE_TO,x,y);},\n\n\nonBezierCurve:function(sx,sy,p1x,p1y,p2x,p2y,x,y){\nthis.path.push(CURVE_TO,p1x,p1y,p2x,p2y,x,y);},\n\n\n_arcToBezier:Path.prototype.onArc,\n\nonArc:function(sx,sy,ex,ey,cx,cy,rx,ry,sa,ea,ccw,rotation){\nif(rx!==ry||rotation){\nreturn this._arcToBezier(\nsx,sy,ex,ey,cx,cy,rx,ry,sa,ea,ccw,rotation);}\n\n\nthis.path.push(ARC,cx,cy,rx,sa,ea,ccw?0:1);},\n\n\nonClose:function(){\nthis.path.push(CLOSE);},\n\n\ntoJSON:function(){\nreturn this.path;}});\n\n\n\n\nmodule.exports=SerializablePath;\n});\n__d('art/core/class.js',function(global, require, module, exports) {  module.exports=function(mixins){\nvar proto={};\nfor(var i=0,l=arguments.length;i<l;i++){\nvar mixin=arguments[i];\nif(typeof mixin=='function')mixin=mixin.prototype;\nfor(var key in mixin){proto[key]=mixin[key];}}\n\nif(!proto.initialize)proto.initialize=function(){};\nproto.constructor=function(a,b,c,d,e,f,g,h){\nreturn new proto.initialize(a,b,c,d,e,f,g,h);};\n\nproto.constructor.prototype=proto.initialize.prototype=proto;\nreturn proto.constructor;};\n});\n__d('art/core/path.js',function(global, require, module, exports) {  var Class=require('art/core/class.js');\n\nmodule.exports=Class({\n\ninitialize:function(path){\nthis.reset().push(path);},\n\n\n\n\npush:function(){\nvar p=Array.prototype.join.call(arguments,' ').\nmatch(/[a-df-z]|[\\-+]?(?:[\\d\\.]e[\\-+]?|[^\\s\\-+,a-z])+/ig);\nif(!p)return this;\n\nvar last,cmd=p[0],i=1;\nwhile(cmd){\nswitch(cmd){\ncase 'm':this.move(p[i++],p[i++]);break;\ncase 'l':this.line(p[i++],p[i++]);break;\ncase 'c':this.curve(p[i++],p[i++],p[i++],p[i++],p[i++],p[i++]);break;\ncase 's':this.curve(p[i++],p[i++],null,null,p[i++],p[i++]);break;\ncase 'q':this.curve(p[i++],p[i++],p[i++],p[i++]);break;\ncase 't':this.curve(p[i++],p[i++]);break;\ncase 'a':this.arc(p[i+5],p[i+6],p[i],p[i+1],p[i+3],! +p[i+4],p[i+2]);i+=7;break;\ncase 'h':this.line(p[i++],0);break;\ncase 'v':this.line(0,p[i++]);break;\n\ncase 'M':this.moveTo(p[i++],p[i++]);break;\ncase 'L':this.lineTo(p[i++],p[i++]);break;\ncase 'C':this.curveTo(p[i++],p[i++],p[i++],p[i++],p[i++],p[i++]);break;\ncase 'S':this.curveTo(p[i++],p[i++],null,null,p[i++],p[i++]);break;\ncase 'Q':this.curveTo(p[i++],p[i++],p[i++],p[i++]);break;\ncase 'T':this.curveTo(p[i++],p[i++]);break;\ncase 'A':this.arcTo(p[i+5],p[i+6],p[i],p[i+1],p[i+3],! +p[i+4],p[i+2]);i+=7;break;\ncase 'H':this.lineTo(p[i++],this.penY);break;\ncase 'V':this.lineTo(this.penX,p[i++]);break;\n\ncase 'Z':case 'z':this.close();break;\ndefault:cmd=last;i--;continue;}\n\n\nlast=cmd;\nif(last=='m')last='l';else \nif(last=='M')last='L';\ncmd=p[i++];}\n\nreturn this;},\n\n\n\n\nreset:function(){\nthis.penX=this.penY=0;\nthis.penDownX=this.penDownY=null;\nthis._pivotX=this._pivotY=0;\nthis.onReset();\nreturn this;},\n\n\nmove:function(x,y){\nthis.onMove(this.penX,this.penY,this._pivotX=this.penX+=+x,this._pivotY=this.penY+=+y);\nreturn this;},\n\nmoveTo:function(x,y){\nthis.onMove(this.penX,this.penY,this._pivotX=this.penX=+x,this._pivotY=this.penY=+y);\nreturn this;},\n\n\nline:function(x,y){\nreturn this.lineTo(this.penX+ +x,this.penY+ +y);},\n\nlineTo:function(x,y){\nif(this.penDownX==null){this.penDownX=this.penX;this.penDownY=this.penY;}\nthis.onLine(this.penX,this.penY,this._pivotX=this.penX=+x,this._pivotY=this.penY=+y);\nreturn this;},\n\n\ncurve:function(c1x,c1y,c2x,c2y,ex,ey){\nvar x=this.penX,y=this.penY;\nreturn this.curveTo(\nx+ +c1x,y+ +c1y,\nc2x==null?null:x+ +c2x,\nc2y==null?null:y+ +c2y,\nex==null?null:x+ +ex,\ney==null?null:y+ +ey);},\n\n\ncurveTo:function(c1x,c1y,c2x,c2y,ex,ey){\nvar x=this.penX,y=this.penY;\nif(c2x==null){\nc2x=+c1x;c2y=+c1y;\nc1x=x*2-(this._pivotX||0);c1y=y*2-(this._pivotY||0);}\n\nif(ex==null){\nthis._pivotX=+c1x;this._pivotY=+c1y;\nex=+c2x;ey=+c2y;\nc2x=(ex+ +c1x*2)/3;c2y=(ey+ +c1y*2)/3;\nc1x=(x+ +c1x*2)/3;c1y=(y+ +c1y*2)/3;}else \n{\nthis._pivotX=+c2x;this._pivotY=+c2y;}\n\nif(this.penDownX==null){this.penDownX=x;this.penDownY=y;}\nthis.onBezierCurve(x,y,+c1x,+c1y,+c2x,+c2y,this.penX=+ex,this.penY=+ey);\nreturn this;},\n\n\narc:function(x,y,rx,ry,outer,counterClockwise,rotation){\nreturn this.arcTo(this.penX+ +x,this.penY+ +y,rx,ry,outer,counterClockwise,rotation);},\n\narcTo:function(x,y,rx,ry,outer,counterClockwise,rotation){\nry=Math.abs(+ry||+rx||+y-this.penY);\nrx=Math.abs(+rx||+x-this.penX);\n\nif(!rx||!ry||x==this.penX&&y==this.penY)return this.lineTo(x,y);\n\nvar tX=this.penX,tY=this.penY,clockwise=! +counterClockwise,large=!! +outer;\n\nvar rad=rotation?rotation*Math.PI/180:0,cos=Math.cos(rad),sin=Math.sin(rad);\nx-=tX;y-=tY;\n\n\nvar cx=cos*x/2+sin*y/2,\ncy=-sin*x/2+cos*y/2,\nrxry=rx*rx*ry*ry,\nrycx=ry*ry*cx*cx,\nrxcy=rx*rx*cy*cy,\na=rxry-rxcy-rycx;\n\nif(a<0){\na=Math.sqrt(1-a/rxry);\nrx*=a;ry*=a;\ncx=x/2;cy=y/2;}else \n{\na=Math.sqrt(a/(rxcy+rycx));\nif(large==clockwise)a=-a;\nvar cxd=-a*cy*rx/ry,\ncyd=a*cx*ry/rx;\ncx=cos*cxd-sin*cyd+x/2;\ncy=sin*cxd+cos*cyd+y/2;}\n\n\n\nvar xx=cos/rx,yx=sin/rx,\nxy=-sin/ry,yy=cos/ry;\n\n\nvar sa=Math.atan2(xy*-cx+yy*-cy,xx*-cx+yx*-cy),\nea=Math.atan2(xy*(x-cx)+yy*(y-cy),xx*(x-cx)+yx*(y-cy));\n\ncx+=tX;cy+=tY;\nx+=tX;y+=tY;\n\n\nif(this.penDownX==null){this.penDownX=this.penX;this.penDownY=this.penY;}\nthis.onArc(\ntX,tY,this._pivotX=this.penX=x,this._pivotY=this.penY=y,\ncx,cy,rx,ry,sa,ea,!clockwise,rotation);\n\nreturn this;},\n\n\ncounterArc:function(x,y,rx,ry,outer){\nreturn this.arc(x,y,rx,ry,outer,true);},\n\ncounterArcTo:function(x,y,rx,ry,outer){\nreturn this.arcTo(x,y,rx,ry,outer,true);},\n\n\nclose:function(){\nif(this.penDownX!=null){\nthis.onClose(this.penX,this.penY,this.penX=this.penDownX,this.penY=this.penDownY);\nthis.penDownX=null;}\n\nreturn this;},\n\n\n\n\nonReset:function(){},\n\n\nonMove:function(sx,sy,ex,ey){},\n\n\nonLine:function(sx,sy,ex,ey){\nthis.onBezierCurve(sx,sy,sx,sy,ex,ey,ex,ey);},\n\n\nonBezierCurve:function(sx,sy,c1x,c1y,c2x,c2y,ex,ey){\nvar gx=ex-sx,gy=ey-sy,\ng=gx*gx+gy*gy,\nv1,v2,cx,cy,u;\n\ncx=c1x-sx;cy=c1y-sy;\nu=cx*gx+cy*gy;\n\nif(u>g){\ncx-=gx;\ncy-=gy;}else \nif(u>0&&g!=0){\ncx-=u/g*gx;\ncy-=u/g*gy;}\n\n\nv1=cx*cx+cy*cy;\n\ncx=c2x-sx;cy=c2y-sy;\nu=cx*gx+cy*gy;\n\nif(u>g){\ncx-=gx;\ncy-=gy;}else \nif(u>0&&g!=0){\ncx-=u/g*gx;\ncy-=u/g*gy;}\n\n\nv2=cx*cx+cy*cy;\n\nif(v1<0.01&&v2<0.01){\nthis.onLine(sx,sy,ex,ey);\nreturn;}\n\n\n\nif(isNaN(v1)||isNaN(v2)){\nthrow new Error('Bad input');}\n\n\n\nvar s1x=(c1x+c2x)*0.5,s1y=(c1y+c2y)*0.5,\nl1x=(c1x+sx)*0.5,l1y=(c1y+sy)*0.5,\nl2x=(l1x+s1x)*0.5,l2y=(l1y+s1y)*0.5,\nr2x=(ex+c2x)*0.5,r2y=(ey+c2y)*0.5,\nr1x=(r2x+s1x)*0.5,r1y=(r2y+s1y)*0.5,\nl2r1x=(l2x+r1x)*0.5,l2r1y=(l2y+r1y)*0.5;\n\n\nthis.onBezierCurve(sx,sy,l1x,l1y,l2x,l2y,l2r1x,l2r1y);\nthis.onBezierCurve(l2r1x,l2r1y,r1x,r1y,r2x,r2y,ex,ey);},\n\n\nonArc:function(sx,sy,ex,ey,cx,cy,rx,ry,sa,ea,ccw,rotation){\n\nvar rad=rotation?rotation*Math.PI/180:0,cos=Math.cos(rad),sin=Math.sin(rad),\nxx=cos*rx,yx=-sin*ry,\nxy=sin*rx,yy=cos*ry;\n\n\nvar arc=ea-sa;\nif(arc<0&&!ccw)arc+=Math.PI*2;else \nif(arc>0&&ccw)arc-=Math.PI*2;\n\nvar n=Math.ceil(Math.abs(arc/(Math.PI/2))),\nstep=arc/n,\nk=4/3*Math.tan(step/4);\n\nvar x=Math.cos(sa),y=Math.sin(sa);\n\nfor(var i=0;i<n;i++){\nvar cp1x=x-k*y,cp1y=y+k*x;\n\nsa+=step;\nx=Math.cos(sa);y=Math.sin(sa);\n\nvar cp2x=x+k*y,cp2y=y-k*x;\n\nthis.onBezierCurve(\nsx,sy,\ncx+xx*cp1x+yx*cp1y,cy+xy*cp1x+yy*cp1y,\ncx+xx*cp2x+yx*cp2y,cy+xy*cp2x+yy*cp2y,\nsx=cx+xx*x+yx*y,sy=cy+xy*x+yy*y);}},\n\n\n\n\nonClose:function(sx,sy,ex,ey){\nthis.onLine(sx,sy,ex,ey);}});\n});\n__d('art/core/transform.js',function(global, require, module, exports) {  var Class=require('art/core/class.js');\n\nfunction Transform(xx,yx,xy,yy,x,y){\nif(xx&&typeof xx=='object'){\nyx=xx.yx;yy=xx.yy;y=xx.y;\nxy=xx.xy;x=xx.x;xx=xx.xx;}\n\nthis.xx=xx==null?1:xx;\nthis.yx=yx||0;\nthis.xy=xy||0;\nthis.yy=yy==null?1:yy;\nthis.x=(x==null?this.x:x)||0;\nthis.y=(y==null?this.y:y)||0;\nthis._transform();\nreturn this;}\n;\n\nmodule.exports=Class({\n\ninitialize:Transform,\n\n_transform:function(){},\n\nxx:1,yx:0,x:0,\nxy:0,yy:1,y:0,\n\ntransform:function(xx,yx,xy,yy,x,y){\nvar m=this;\nif(xx&&typeof xx=='object'){\nyx=xx.yx;yy=xx.yy;y=xx.y;\nxy=xx.xy;x=xx.x;xx=xx.xx;}\n\nif(!x)x=0;\nif(!y)y=0;\nreturn this.transformTo(\nm.xx*xx+m.xy*yx,\nm.yx*xx+m.yy*yx,\nm.xx*xy+m.xy*yy,\nm.yx*xy+m.yy*yy,\nm.xx*x+m.xy*y+m.x,\nm.yx*x+m.yy*y+m.y);},\n\n\n\ntransformTo:Transform,\n\ntranslate:function(x,y){\nreturn this.transform(1,0,0,1,x,y);},\n\n\nmove:function(x,y){\nthis.x+=x||0;\nthis.y+=y||0;\nthis._transform();\nreturn this;},\n\n\nscale:function(x,y){\nif(y==null)y=x;\nreturn this.transform(x,0,0,y,0,0);},\n\n\nrotate:function(deg,x,y){\nif(x==null||y==null){\nx=(this.left||0)+(this.width||0)/2;\ny=(this.top||0)+(this.height||0)/2;}\n\n\nvar rad=deg*Math.PI/180,sin=Math.sin(rad),cos=Math.cos(rad);\n\nthis.transform(1,0,0,1,x,y);\nvar m=this;\n\nreturn this.transformTo(\ncos*m.xx-sin*m.yx,\nsin*m.xx+cos*m.yx,\ncos*m.xy-sin*m.yy,\nsin*m.xy+cos*m.yy,\nm.x,\nm.y).\ntransform(1,0,0,1,-x,-y);},\n\n\nmoveTo:function(x,y){\nvar m=this;\nreturn this.transformTo(m.xx,m.yx,m.xy,m.yy,x,y);},\n\n\nrotateTo:function(deg,x,y){\nvar m=this;\nvar flip=m.yx/m.xx>m.yy/m.xy?-1:1;\nif(m.xx<0?m.xy>=0:m.xy<0)flip=-flip;\nreturn this.rotate(deg-Math.atan2(flip*m.yx,flip*m.xx)*180/Math.PI,x,y);},\n\n\nscaleTo:function(x,y){\n\nvar m=this;\n\nvar h=Math.sqrt(m.xx*m.xx+m.yx*m.yx);\nm.xx/=h;m.yx/=h;\n\nh=Math.sqrt(m.yy*m.yy+m.xy*m.xy);\nm.yy/=h;m.xy/=h;\n\nreturn this.scale(x,y);},\n\n\nresizeTo:function(width,height){\nvar w=this.width,h=this.height;\nif(!w||!h)return this;\nreturn this.scaleTo(width/w,height/h);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ninversePoint:function(x,y){\nvar a=this.xx,b=this.yx,\nc=this.xy,d=this.yy,\ne=this.x,f=this.y;\nvar det=b*c-a*d;\nif(det==0)return null;\nreturn {\nx:(d*(e-x)+c*(y-f))/det,\ny:(a*(f-y)+b*(x-e))/det};},\n\n\n\npoint:function(x,y){\nvar m=this;\nreturn {\nx:m.xx*x+m.xy*y+m.x,\ny:m.yx*x+m.yy*y+m.y};}});\n});\n__d('DatePickerIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar RCTDatePickerIOSConsts=require('NativeModules').UIManager.RCTDatePicker.Constants;\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar DATEPICKER='datepicker';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DatePickerIOS=React.createClass({displayName:'DatePickerIOS',\nmixins:[NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\ndate:PropTypes.instanceOf(Date).isRequired,\n\n\n\n\n\n\n\n\nonDateChange:PropTypes.func.isRequired,\n\n\n\n\n\n\nmaximumDate:PropTypes.instanceOf(Date),\n\n\n\n\n\n\nminimumDate:PropTypes.instanceOf(Date),\n\n\n\n\nmode:PropTypes.oneOf(['date','time','datetime']),\n\n\n\n\nminuteInterval:PropTypes.oneOf([1,2,3,4,5,6,10,12,15,20,30]),\n\n\n\n\n\n\n\n\ntimeZoneOffsetInMinutes:PropTypes.number}),\n\n\ngetDefaultProps:function(){\nreturn {\nmode:'datetime'};},\n\n\n\n_onChange:function(event){\nvar nativeTimeStamp=event.nativeEvent.timestamp;\nthis.props.onDateChange&&this.props.onDateChange(\nnew Date(nativeTimeStamp));\n\nthis.props.onChange&&this.props.onChange(event);\n\n\n\n\n\nvar propsTimeStamp=this.props.date.getTime();\nif(nativeTimeStamp!==propsTimeStamp){\nthis.refs[DATEPICKER].setNativeProps({\ndate:propsTimeStamp});}},\n\n\n\n\nrender:function(){\nvar props=this.props;\nreturn (\nReact.createElement(View,{style:props.style},\nReact.createElement(RCTDatePickerIOS,{\nref:DATEPICKER,\nstyle:styles.datePickerIOS,\ndate:props.date.getTime(),\nmaximumDate:\nprops.maximumDate?props.maximumDate.getTime():undefined,\n\nminimumDate:\nprops.minimumDate?props.minimumDate.getTime():undefined,\n\nmode:props.mode,\nminuteInterval:props.minuteInterval,\ntimeZoneOffsetInMinutes:props.timeZoneOffsetInMinutes,\nonChange:this._onChange})));}});\n\n\n\n\n\n\nvar styles=StyleSheet.create({\ndatePickerIOS:{\nheight:RCTDatePickerIOSConsts.ComponentHeight,\nwidth:RCTDatePickerIOSConsts.ComponentWidth}});\n\n\n\nvar RCTDatePickerIOS=requireNativeComponent('RCTDatePicker',DatePickerIOS,{\nnativeOnly:{onChange:true}});\n\n\nmodule.exports=DatePickerIOS;\n});\n__d('DrawerLayoutAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=require('UnimplementedView');\n});\n__d('Image',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EdgeInsetsPropType=require('EdgeInsetsPropType');\nvar ImageResizeMode=require('ImageResizeMode');\nvar ImageStylePropTypes=require('ImageStylePropTypes');\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar NativeModules=require('NativeModules');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\nvar View=require('View');\nvar StyleSheet=require('StyleSheet');\nvar StyleSheetPropType=require('StyleSheetPropType');\n\nvar flattenStyle=require('flattenStyle');\nvar invariant=require('invariant');\nvar requireNativeComponent=require('requireNativeComponent');\nvar resolveAssetSource=require('resolveAssetSource');\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Image=React.createClass({displayName:'Image',\npropTypes:{\nstyle:StyleSheetPropType(ImageStylePropTypes),\n\n\n\n\n\nsource:PropTypes.oneOfType([\nPropTypes.shape({\nuri:PropTypes.string}),\n\n\nPropTypes.number]),\n\n\n\n\n\n\ndefaultSource:PropTypes.shape({\nuri:PropTypes.string}),\n\n\n\n\n\naccessible:PropTypes.bool,\n\n\n\n\n\naccessibilityLabel:PropTypes.string,\n\n\n\n\n\n\n\n\ncapInsets:EdgeInsetsPropType,\n\n\n\n\nresizeMode:PropTypes.oneOf(['cover','contain','stretch']),\n\n\n\n\ntestID:PropTypes.string,\n\n\n\n\nonLayout:PropTypes.func,\n\n\n\n\nonLoadStart:PropTypes.func,\n\n\n\n\nonProgress:PropTypes.func,\n\n\n\n\nonError:PropTypes.func,\n\n\n\n\nonLoad:PropTypes.func,\n\n\n\n\nonLoadEnd:PropTypes.func},\n\n\nstatics:{\nresizeMode:ImageResizeMode},\n\n\nmixins:[NativeMethodsMixin],\n\n\n\n\n\nviewConfig:{\nuiViewClassName:'UIView',\nvalidAttributes:ReactNativeViewAttributes.UIView},\n\n\ncontextTypes:{\nisInAParentText:React.PropTypes.bool},\n\n\nrender:function(){\nfor(var prop in cfg.nativeOnly){\nif(this.props[prop]!==undefined){\nconsole.warn('Prop `'+prop+' = '+this.props[prop]+'` should '+\n'not be set directly on Image.');}}\n\n\nvar source=resolveAssetSource(this.props.source)||{};\nvar defaultSource=this.props.defaultSource&&resolveAssetSource(this.props.defaultSource)||{};var \n\nwidth=source.width;var height=source.height;\nvar style=flattenStyle([{width:width,height:height},styles.base,this.props.style])||{};\n\nif(source.uri===''){\nconsole.warn('source.uri should not be an empty string');\nreturn React.createElement(View,babelHelpers.extends({},this.props,{style:style}));}\n\n\nvar isNetwork=source.uri&&source.uri.match(/^https?:/);\nvar RawImage=isNetwork?RCTNetworkImageView:RCTImageView;\nvar resizeMode=this.props.resizeMode||(style||{}).resizeMode||'cover';\nvar tintColor=(style||{}).tintColor;\n\n\n\nif(isNetwork&&tintColor){\nRawImage=RCTImageView;}\n\n\nif(this.context.isInAParentText){\nreturn React.createElement(RCTVirtualImage,{source:source});}else \n{\nreturn (\nReact.createElement(RawImage,babelHelpers.extends({},\nthis.props,{\nstyle:style,\nresizeMode:resizeMode,\ntintColor:tintColor,\nsrc:source.uri,\ndefaultImageSrc:defaultSource.uri})));}}});\n\n\n\n\n\n\nvar styles=StyleSheet.create({\nbase:{\noverflow:'hidden'}});\n\n\n\nvar cfg={\nnativeOnly:{\nsrc:true,\ndefaultImageSrc:true,\nimageTag:true,\nprogressHandlerRegistered:true}};\n\n\nvar RCTImageView=requireNativeComponent('RCTImageView',Image,cfg);\nvar RCTNetworkImageView=NativeModules.NetworkImageViewManager?requireNativeComponent('RCTNetworkImageView',Image,cfg):RCTImageView;\nvar RCTVirtualImage=requireNativeComponent('RCTVirtualImage',Image);\n\nmodule.exports=Image;\n});\n__d('EdgeInsetsPropType',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar PropTypes=require('ReactPropTypes');\n\nvar createStrictShapeTypeChecker=require('createStrictShapeTypeChecker');\n\nvar EdgeInsetsPropType=createStrictShapeTypeChecker({\ntop:PropTypes.number,\nleft:PropTypes.number,\nbottom:PropTypes.number,\nright:PropTypes.number});\n\n\nmodule.exports=EdgeInsetsPropType;\n});\n__d('resolveAssetSource',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AssetRegistry=require('AssetRegistry');\nvar PixelRatio=require('PixelRatio');\nvar Platform=require('Platform');\nvar SourceCode=require('NativeModules').SourceCode;\n\nvar _serverURL,_offlinePath;\n\nfunction getDevServerURL(){\nif(_serverURL===undefined){\nvar scriptURL=SourceCode.scriptURL;\nvar match=scriptURL&&scriptURL.match(/^https?:\\/\\/.*?\\//);\nif(match){\n\n_serverURL=match[0];}else \n{\n\n_serverURL=null;}}\n\n\n\nreturn _serverURL;}\n\n\nfunction getOfflinePath(){\nif(_offlinePath===undefined){\nvar scriptURL=SourceCode.scriptURL;\nvar match=scriptURL&&scriptURL.match(/^file:\\/\\/(\\/.*\\/)/);\nif(match){\n_offlinePath=match[1];}else \n{\n_offlinePath='';}}\n\n\n\nreturn _offlinePath;}\n\n\n\n\n\nfunction getPathInArchive(asset){\nif(Platform.OS==='android'){\nvar assetDir=getBasePath(asset);\n\n\nreturn (assetDir+'/'+asset.name).\ntoLowerCase().\nreplace(/\\//g,'_').\nreplace(/([^a-z0-9_])/g,'').\nreplace(/^assets_/,'');}else \n{\n\nreturn getOfflinePath()+getScaledAssetPath(asset);}}\n\n\n\n\n\n\n\nfunction getPathOnDevserver(devServerUrl,asset){\nreturn devServerUrl+getScaledAssetPath(asset)+'?platform='+Platform.OS+\n'&hash='+asset.hash;}\n\n\n\n\n\nfunction getBasePath(asset){\n\n\nvar path=asset.httpServerLocation;\nif(path[0]==='/'){\npath=path.substr(1);}\n\nreturn path;}\n\n\n\n\n\nfunction getScaledAssetPath(asset){\nvar scale=pickScale(asset.scales,PixelRatio.get());\nvar scaleSuffix=scale===1?'':'@'+scale+'x';\nvar assetDir=getBasePath(asset);\nreturn assetDir+'/'+asset.name+scaleSuffix+'.'+asset.type;}\n\n\nfunction pickScale(scales,deviceScale){\n\nfor(var i=0;i<scales.length;i++){\nif(scales[i]>=deviceScale){\nreturn scales[i];}}\n\n\n\n\n\n\nreturn scales[scales.length-1]||1;}\n\n\nfunction resolveAssetSource(source){\nif(typeof source==='object'){\nreturn source;}\n\n\nvar asset=AssetRegistry.getAssetByID(source);\nif(asset){\nreturn assetToImageSource(asset);}\n\n\nreturn null;}\n\n\nfunction assetToImageSource(asset){\nvar devServerURL=getDevServerURL();\nreturn {\n__packager_asset:true,\nwidth:asset.width,\nheight:asset.height,\nuri:devServerURL?getPathOnDevserver(devServerURL,asset):getPathInArchive(asset),\nscale:pickScale(asset.scales,PixelRatio.get())};}\n\n\n\nmodule.exports=resolveAssetSource;\nmodule.exports.pickScale=pickScale;\n});\n__d('AssetRegistry',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar assets=[];\n\nfunction registerAsset(asset){\n\n\nreturn assets.push(asset);}\n\n\nfunction getAssetByID(assetId){\nreturn assets[assetId-1];}\n\n\nmodule.exports={registerAsset:registerAsset,getAssetByID:getAssetByID};\n});\n__d('PixelRatio',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dimensions=require('Dimensions');var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPixelRatio=(function(){function PixelRatio(){babelHelpers.classCallCheck(this,PixelRatio);}babelHelpers.createClass(PixelRatio,null,[{key:'get',value:function get()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{\nreturn Dimensions.get('window').scale;}},{key:'getFontScale',value:function getFontScale()\n\n\n\n\n\n\n\n\n\n\n\n\n\n{\nreturn Dimensions.get('window').fontScale||PixelRatio.get();}},{key:'getPixelSizeForLayoutSize',value:function getPixelSizeForLayoutSize(\n\n\n\n\n\n\n\nlayoutSize){\nreturn Math.round(layoutSize*PixelRatio.get());}},{key:'startDetecting',value:function startDetecting()\n\n\n\n{}}]);return PixelRatio;})();\n\n\nmodule.exports=PixelRatio;\n});\n__d('Dimensions',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeModules=require('NativeModules');\n\nvar invariant=require('invariant');\n\nvar dimensions=NativeModules.UIManager.Dimensions;\n\n\n\n\nif(dimensions&&dimensions.windowPhysicalPixels){\n\ndimensions=JSON.parse(JSON.stringify(dimensions));\n\nvar windowPhysicalPixels=dimensions.windowPhysicalPixels;\ndimensions.window={\nwidth:windowPhysicalPixels.width/windowPhysicalPixels.scale,\nheight:windowPhysicalPixels.height/windowPhysicalPixels.scale,\nscale:windowPhysicalPixels.scale,\nfontScale:windowPhysicalPixels.fontScale};\n\n\n\ndelete dimensions.windowPhysicalPixels;}var \n\n\nDimensions=(function(){function Dimensions(){babelHelpers.classCallCheck(this,Dimensions);}babelHelpers.createClass(Dimensions,null,[{key:'set',value:function set(\n\n\n\n\n\ndims){\nbabelHelpers.extends(dimensions,dims);\nreturn true;}},{key:'get',value:function get(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndim){\ninvariant(dimensions[dim],'No dimension set for key '+dim);\nreturn dimensions[dim];}}]);return Dimensions;})();\n\n\n\nmodule.exports=Dimensions;\n});\n__d('ListView',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ListViewDataSource=require('ListViewDataSource');\nvar React=require('React');\nvar RCTUIManager=require('NativeModules').UIManager;\nvar RCTScrollViewManager=require('NativeModules').ScrollViewManager;\nvar ScrollView=require('ScrollView');\nvar ScrollResponder=require('ScrollResponder');\nvar StaticRenderer=require('StaticRenderer');\nvar TimerMixin=require('react-timer-mixin/TimerMixin.js');\n\nvar isEmpty=require('isEmpty');\nvar logError=require('logError');\nvar merge=require('merge');\n\nvar PropTypes=React.PropTypes;\n\nvar DEFAULT_PAGE_SIZE=1;\nvar DEFAULT_INITIAL_ROWS=10;\nvar DEFAULT_SCROLL_RENDER_AHEAD=1000;\nvar DEFAULT_END_REACHED_THRESHOLD=1000;\nvar DEFAULT_SCROLL_CALLBACK_THROTTLE=50;\nvar SCROLLVIEW_REF='listviewscroll';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ListView=React.createClass({displayName:'ListView',\nmixins:[ScrollResponder.Mixin,TimerMixin],\n\nstatics:{\nDataSource:ListViewDataSource},\n\n\n\n\n\n\n\n\n\npropTypes:babelHelpers.extends({},\nScrollView.propTypes,{\n\ndataSource:PropTypes.instanceOf(ListViewDataSource).isRequired,\n\n\n\n\n\n\n\nrenderSeparator:PropTypes.func,\n\n\n\n\n\n\n\n\n\n\nrenderRow:PropTypes.func.isRequired,\n\n\n\n\n\ninitialListSize:PropTypes.number,\n\n\n\n\n\nonEndReached:PropTypes.func,\n\n\n\nonEndReachedThreshold:PropTypes.number,\n\n\n\npageSize:PropTypes.number,\n\n\n\n\n\n\n\n\nrenderFooter:PropTypes.func,\nrenderHeader:PropTypes.func,\n\n\n\n\n\n\n\n\n\nrenderSectionHeader:PropTypes.func,\n\n\n\n\n\n\nrenderScrollComponent:React.PropTypes.func.isRequired,\n\n\n\n\nscrollRenderAheadDistance:React.PropTypes.number,\n\n\n\n\n\n\n\n\n\nonChangeVisibleRows:React.PropTypes.func,\n\n\n\n\n\nremoveClippedSubviews:React.PropTypes.bool}),\n\n\n\n\n\ngetMetrics:function(){\nreturn {\ncontentLength:this.scrollProperties.contentLength,\ntotalRows:this.props.dataSource.getRowCount(),\nrenderedRows:this.state.curRenderedRowsCount,\nvisibleRows:Object.keys(this._visibleRows).length};},\n\n\n\n\n\n\n\ngetScrollResponder:function(){\nreturn this.refs[SCROLLVIEW_REF]&&\nthis.refs[SCROLLVIEW_REF].getScrollResponder&&\nthis.refs[SCROLLVIEW_REF].getScrollResponder();},\n\n\nsetNativeProps:function(props){\nthis.refs[SCROLLVIEW_REF].setNativeProps(props);},\n\n\n\n\n\n\ngetDefaultProps:function(){\nreturn {\ninitialListSize:DEFAULT_INITIAL_ROWS,\npageSize:DEFAULT_PAGE_SIZE,\nrenderScrollComponent:function(props){return React.createElement(ScrollView,props);},\nscrollRenderAheadDistance:DEFAULT_SCROLL_RENDER_AHEAD,\nonEndReachedThreshold:DEFAULT_END_REACHED_THRESHOLD};},\n\n\n\ngetInitialState:function(){\nreturn {\ncurRenderedRowsCount:this.props.initialListSize,\nprevRenderedRowsCount:0,\nhighlightedRow:{}};},\n\n\n\ngetInnerViewNode:function(){\nreturn this.refs[SCROLLVIEW_REF].getInnerViewNode();},\n\n\ncomponentWillMount:function(){\n\nthis.scrollProperties={\nvisibleLength:null,\ncontentLength:null,\noffset:0};\n\nthis._childFrames=[];\nthis._visibleRows={};},\n\n\ncomponentDidMount:function(){var _this=this;\n\n\nthis.requestAnimationFrame(function(){\n_this._measureAndUpdateScrollProps();});},\n\n\n\ncomponentWillReceiveProps:function(nextProps){\nif(this.props.dataSource!==nextProps.dataSource){\nthis.setState(function(state,props){\nvar rowsToRender=Math.min(\nstate.curRenderedRowsCount+props.pageSize,\nprops.dataSource.getRowCount());\n\nreturn {\nprevRenderedRowsCount:0,\ncurRenderedRowsCount:rowsToRender};});}},\n\n\n\n\n\ncomponentDidUpdate:function(){var _this2=this;\nthis.requestAnimationFrame(function(){\n_this2._measureAndUpdateScrollProps();});},\n\n\n\nonRowHighlighted:function(sectionID,rowID){\nthis.setState({highlightedRow:{sectionID:sectionID,rowID:rowID}});},\n\n\nrender:function(){\nvar bodyComponents=[];\n\nvar dataSource=this.props.dataSource;\nvar allRowIDs=dataSource.rowIdentities;\nvar rowCount=0;\nvar sectionHeaderIndices=[];\n\nvar header=this.props.renderHeader&&this.props.renderHeader();\nvar footer=this.props.renderFooter&&this.props.renderFooter();\nvar totalIndex=header?1:0;\n\nfor(var sectionIdx=0;sectionIdx<allRowIDs.length;sectionIdx++){\nvar sectionID=dataSource.sectionIdentities[sectionIdx];\nvar rowIDs=allRowIDs[sectionIdx];\nif(rowIDs.length===0){\ncontinue;}\n\n\nif(this.props.renderSectionHeader){\nvar shouldUpdateHeader=rowCount>=this.state.prevRenderedRowsCount&&\ndataSource.sectionHeaderShouldUpdate(sectionIdx);\nbodyComponents.push(\nReact.createElement(StaticRenderer,{\nkey:'s_'+sectionID,\nshouldUpdate:!!shouldUpdateHeader,\nrender:this.props.renderSectionHeader.bind(\nnull,\ndataSource.getSectionHeaderData(sectionIdx),\nsectionID)}));\n\n\n\nsectionHeaderIndices.push(totalIndex++);}\n\n\nfor(var rowIdx=0;rowIdx<rowIDs.length;rowIdx++){\nvar rowID=rowIDs[rowIdx];\nvar comboID=sectionID+'_'+rowID;\nvar shouldUpdateRow=rowCount>=this.state.prevRenderedRowsCount&&\ndataSource.rowShouldUpdate(sectionIdx,rowIdx);\nvar row=\nReact.createElement(StaticRenderer,{\nkey:'r_'+comboID,\nshouldUpdate:!!shouldUpdateRow,\nrender:this.props.renderRow.bind(\nnull,\ndataSource.getRowData(sectionIdx,rowIdx),\nsectionID,\nrowID,\nthis.onRowHighlighted)});\n\n\nbodyComponents.push(row);\ntotalIndex++;\n\nif(this.props.renderSeparator&&(\nrowIdx!==rowIDs.length-1||sectionIdx===allRowIDs.length-1)){\nvar adjacentRowHighlighted=\nthis.state.highlightedRow.sectionID===sectionID&&(\nthis.state.highlightedRow.rowID===rowID||\nthis.state.highlightedRow.rowID===rowIDs[rowIdx+1]);\n\nvar separator=this.props.renderSeparator(\nsectionID,\nrowID,\nadjacentRowHighlighted);\n\nbodyComponents.push(separator);\ntotalIndex++;}\n\nif(++rowCount===this.state.curRenderedRowsCount){\nbreak;}}\n\n\nif(rowCount>=this.state.curRenderedRowsCount){\nbreak;}}var _props=\n\n\n\n\n\n\nthis.props;var renderScrollComponent=_props.renderScrollComponent;var props=babelHelpers.objectWithoutProperties(_props,['renderScrollComponent']);\nif(!props.scrollEventThrottle){\nprops.scrollEventThrottle=DEFAULT_SCROLL_CALLBACK_THROTTLE;}\n\nif(props.removeClippedSubviews===undefined){\nprops.removeClippedSubviews=true;}\n\nbabelHelpers.extends(props,{\nonScroll:this._onScroll,\nstickyHeaderIndices:sectionHeaderIndices,\n\n\n\nonKeyboardWillShow:undefined,\nonKeyboardWillHide:undefined,\nonKeyboardDidShow:undefined,\nonKeyboardDidHide:undefined});\n\n\n\n\nreturn React.cloneElement(renderScrollComponent(props),{\nref:SCROLLVIEW_REF,\nonContentSizeChange:this._onContentSizeChange,\nonLayout:this._onLayout},\nheader,bodyComponents,footer);},\n\n\n\n\n\n\n_measureAndUpdateScrollProps:function(){\nvar scrollComponent=this.getScrollResponder();\nif(!scrollComponent||!scrollComponent.getInnerViewNode){\nreturn;}\n\n\n\n\nRCTScrollViewManager&&RCTScrollViewManager.calculateChildFrames&&\nRCTScrollViewManager.calculateChildFrames(\nReact.findNodeHandle(scrollComponent),\nthis._updateChildFrames);},\n\n\n\n_onContentSizeChange:function(width,height){\nthis.scrollProperties.contentLength=!this.props.horizontal?\nheight:width;\nthis._updateVisibleRows();\nthis._renderMoreRowsIfNeeded();},\n\n\n_onLayout:function(event){var _event$nativeEvent$la=\nevent.nativeEvent.layout;var width=_event$nativeEvent$la.width;var height=_event$nativeEvent$la.height;\nthis.scrollProperties.visibleLength=!this.props.horizontal?\nheight:width;\nthis._updateVisibleRows();\nthis._renderMoreRowsIfNeeded();},\n\n\n_setScrollVisibleLength:function(left,top,width,height){\nthis.scrollProperties.visibleLength=!this.props.horizontal?\nheight:width;\nthis._updateVisibleRows();\nthis._renderMoreRowsIfNeeded();},\n\n\n_updateChildFrames:function(childFrames){\nthis._updateVisibleRows(childFrames);},\n\n\n_maybeCallOnEndReached:function(event){\nif(this.props.onEndReached&&\nthis.scrollProperties.contentLength!==this._sentEndForContentLength&&\nthis._getDistanceFromEnd(this.scrollProperties)<this.props.onEndReachedThreshold&&\nthis.state.curRenderedRowsCount===this.props.dataSource.getRowCount()){\nthis._sentEndForContentLength=this.scrollProperties.contentLength;\nthis.props.onEndReached(event);\nreturn true;}\n\nreturn false;},\n\n\n_renderMoreRowsIfNeeded:function(){\nif(this.scrollProperties.contentLength===null||\nthis.scrollProperties.visibleLength===null||\nthis.state.curRenderedRowsCount===this.props.dataSource.getRowCount()){\nthis._maybeCallOnEndReached();\nreturn;}\n\n\nvar distanceFromEnd=this._getDistanceFromEnd(this.scrollProperties);\nif(distanceFromEnd<this.props.scrollRenderAheadDistance){\nthis._pageInNewRows();}},\n\n\n\n_pageInNewRows:function(){var _this3=this;\nthis.setState(function(state,props){\nvar rowsToRender=Math.min(\nstate.curRenderedRowsCount+props.pageSize,\nprops.dataSource.getRowCount());\n\nreturn {\nprevRenderedRowsCount:state.curRenderedRowsCount,\ncurRenderedRowsCount:rowsToRender};},\n\nfunction(){\n_this3._measureAndUpdateScrollProps();\n_this3.setState(function(state){return {\nprevRenderedRowsCount:state.curRenderedRowsCount};});});},\n\n\n\n\n_getDistanceFromEnd:function(scrollProperties){\nvar maxLength=Math.max(\nscrollProperties.contentLength,\nscrollProperties.visibleLength);\n\nreturn maxLength-scrollProperties.visibleLength-scrollProperties.offset;},\n\n\n_updateVisibleRows:function(updatedFrames){var _this4=this;\nif(!this.props.onChangeVisibleRows){\nreturn;}\n\nif(updatedFrames){\nupdatedFrames.forEach(function(newFrame){\n_this4._childFrames[newFrame.index]=merge(newFrame);});}\n\n\nvar isVertical=!this.props.horizontal;\nvar dataSource=this.props.dataSource;\nvar visibleMin=this.scrollProperties.offset;\nvar visibleMax=visibleMin+this.scrollProperties.visibleLength;\nvar allRowIDs=dataSource.rowIdentities;\n\nvar header=this.props.renderHeader&&this.props.renderHeader();\nvar totalIndex=header?1:0;\nvar visibilityChanged=false;\nvar changedRows={};\nfor(var sectionIdx=0;sectionIdx<allRowIDs.length;sectionIdx++){\nvar rowIDs=allRowIDs[sectionIdx];\nif(rowIDs.length===0){\ncontinue;}\n\nvar sectionID=dataSource.sectionIdentities[sectionIdx];\nif(this.props.renderSectionHeader){\ntotalIndex++;}\n\nvar visibleSection=this._visibleRows[sectionID];\nif(!visibleSection){\nvisibleSection={};}\n\nfor(var rowIdx=0;rowIdx<rowIDs.length;rowIdx++){\nvar rowID=rowIDs[rowIdx];\nvar frame=this._childFrames[totalIndex];\ntotalIndex++;\nif(!frame){\nbreak;}\n\nvar rowVisible=visibleSection[rowID];\nvar min=isVertical?frame.y:frame.x;\nvar max=min+(isVertical?frame.height:frame.width);\nif(min>visibleMax||max<visibleMin){\nif(rowVisible){\nvisibilityChanged=true;\ndelete visibleSection[rowID];\nif(!changedRows[sectionID]){\nchangedRows[sectionID]={};}\n\nchangedRows[sectionID][rowID]=false;}}else \n\nif(!rowVisible){\nvisibilityChanged=true;\nvisibleSection[rowID]=true;\nif(!changedRows[sectionID]){\nchangedRows[sectionID]={};}\n\nchangedRows[sectionID][rowID]=true;}}\n\n\nif(!isEmpty(visibleSection)){\nthis._visibleRows[sectionID]=visibleSection;}else \nif(this._visibleRows[sectionID]){\ndelete this._visibleRows[sectionID];}}\n\n\nvisibilityChanged&&this.props.onChangeVisibleRows(this._visibleRows,changedRows);},\n\n\n_onScroll:function(e){\nvar isVertical=!this.props.horizontal;\nthis.scrollProperties.visibleLength=e.nativeEvent.layoutMeasurement[\nisVertical?'height':'width'];\n\nthis.scrollProperties.contentLength=e.nativeEvent.contentSize[\nisVertical?'height':'width'];\n\nthis.scrollProperties.offset=e.nativeEvent.contentOffset[\nisVertical?'y':'x'];\n\nthis._updateVisibleRows(e.nativeEvent.updatedChildFrames);\nif(!this._maybeCallOnEndReached(e)){\nthis._renderMoreRowsIfNeeded();}\n\n\nif(this.props.onEndReached&&\nthis._getDistanceFromEnd(this.scrollProperties)>this.props.onEndReachedThreshold){\n\nthis._sentEndForContentLength=null;}\n\n\nthis.props.onScroll&&this.props.onScroll(e);}});\n\n\n\nmodule.exports=ListView;\n});\n__d('ListViewDataSource',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\nvar isEmpty=require('isEmpty');\nvar warning=require('warning');\n\nfunction defaultGetRowData(\ndataBlob,\nsectionID,\nrowID)\n{\nreturn dataBlob[sectionID][rowID];}\n\n\nfunction defaultGetSectionHeaderData(\ndataBlob,\nsectionID)\n{\nreturn dataBlob[sectionID];}var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nListViewDataSource=(function(){\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction ListViewDataSource(params){babelHelpers.classCallCheck(this,ListViewDataSource);\ninvariant(\nparams&&typeof params.rowHasChanged==='function',\n'Must provide a rowHasChanged function.');\n\nthis._rowHasChanged=params.rowHasChanged;\nthis._getRowData=params.getRowData||defaultGetRowData;\nthis._sectionHeaderHasChanged=params.sectionHeaderHasChanged;\nthis._getSectionHeaderData=\nparams.getSectionHeaderData||defaultGetSectionHeaderData;\n\nthis._dataBlob=null;\nthis._dirtyRows=[];\nthis._dirtySections=[];\nthis._cachedRowCount=0;\n\n\n\nthis.rowIdentities=[];\nthis.sectionIdentities=[];}babelHelpers.createClass(ListViewDataSource,[{key:'cloneWithRows',value:function cloneWithRows(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndataBlob,\nrowIdentities)\n{\nvar rowIds=rowIdentities?[rowIdentities]:null;\nif(!this._sectionHeaderHasChanged){\nthis._sectionHeaderHasChanged=function(){return false;};}\n\nreturn this.cloneWithRowsAndSections({s1:dataBlob},['s1'],rowIds);}},{key:'cloneWithRowsAndSections',value:function cloneWithRowsAndSections(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndataBlob,\nsectionIdentities,\nrowIdentities)\n{\ninvariant(\ntypeof this._sectionHeaderHasChanged==='function',\n'Must provide a sectionHeaderHasChanged function with section data.');\n\nvar newSource=new ListViewDataSource({\ngetRowData:this._getRowData,\ngetSectionHeaderData:this._getSectionHeaderData,\nrowHasChanged:this._rowHasChanged,\nsectionHeaderHasChanged:this._sectionHeaderHasChanged});\n\nnewSource._dataBlob=dataBlob;\nif(sectionIdentities){\nnewSource.sectionIdentities=sectionIdentities;}else \n{\nnewSource.sectionIdentities=Object.keys(dataBlob);}\n\nif(rowIdentities){\nnewSource.rowIdentities=rowIdentities;}else \n{\nnewSource.rowIdentities=[];\nnewSource.sectionIdentities.forEach(function(sectionID){\nnewSource.rowIdentities.push(Object.keys(dataBlob[sectionID]));});}\n\n\nnewSource._cachedRowCount=countRows(newSource.rowIdentities);\n\nnewSource._calculateDirtyArrays(\nthis._dataBlob,\nthis.sectionIdentities,\nthis.rowIdentities);\n\n\nreturn newSource;}},{key:'getRowCount',value:function getRowCount()\n\n\n{\nreturn this._cachedRowCount;}},{key:'rowShouldUpdate',value:function rowShouldUpdate(\n\n\n\n\n\nsectionIndex,rowIndex){\nvar needsUpdate=this._dirtyRows[sectionIndex][rowIndex];\nwarning(needsUpdate!==undefined,\n'missing dirtyBit for section, row: '+sectionIndex+', '+rowIndex);\nreturn needsUpdate;}},{key:'getRowData',value:function getRowData(\n\n\n\n\n\nsectionIndex,rowIndex){\nvar sectionID=this.sectionIdentities[sectionIndex];\nvar rowID=this.rowIdentities[sectionIndex][rowIndex];\nwarning(\nsectionID!==undefined&&rowID!==undefined,\n'rendering invalid section, row: '+sectionIndex+', '+rowIndex);\n\nreturn this._getRowData(this._dataBlob,sectionID,rowID);}},{key:'getRowIDForFlatIndex',value:function getRowIDForFlatIndex(\n\n\n\n\n\n\nindex){\nvar accessIndex=index;\nfor(var ii=0;ii<this.sectionIdentities.length;ii++){\nif(accessIndex>=this.rowIdentities[ii].length){\naccessIndex-=this.rowIdentities[ii].length;}else \n{\nreturn this.rowIdentities[ii][accessIndex];}}\n\n\nreturn null;}},{key:'getSectionIDForFlatIndex',value:function getSectionIDForFlatIndex(\n\n\n\n\n\n\nindex){\nvar accessIndex=index;\nfor(var ii=0;ii<this.sectionIdentities.length;ii++){\nif(accessIndex>=this.rowIdentities[ii].length){\naccessIndex-=this.rowIdentities[ii].length;}else \n{\nreturn this.sectionIdentities[ii];}}\n\n\nreturn null;}},{key:'getSectionLengths',value:function getSectionLengths()\n\n\n\n\n\n{\nvar results=[];\nfor(var ii=0;ii<this.sectionIdentities.length;ii++){\nresults.push(this.rowIdentities[ii].length);}\n\nreturn results;}},{key:'sectionHeaderShouldUpdate',value:function sectionHeaderShouldUpdate(\n\n\n\n\n\nsectionIndex){\nvar needsUpdate=this._dirtySections[sectionIndex];\nwarning(needsUpdate!==undefined,\n'missing dirtyBit for section: '+sectionIndex);\nreturn needsUpdate;}},{key:'getSectionHeaderData',value:function getSectionHeaderData(\n\n\n\n\n\nsectionIndex){\nif(!this._getSectionHeaderData){\nreturn null;}\n\nvar sectionID=this.sectionIdentities[sectionIndex];\nwarning(sectionID!==undefined,\n'renderSection called on invalid section: '+sectionIndex);\nreturn this._getSectionHeaderData(this._dataBlob,sectionID);}},{key:'_calculateDirtyArrays',value:function _calculateDirtyArrays(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nprevDataBlob,\nprevSectionIDs,\nprevRowIDs)\n{\n\nvar prevSectionsHash=keyedDictionaryFromArray(prevSectionIDs);\nvar prevRowsHash={};\nfor(var ii=0;ii<prevRowIDs.length;ii++){\nvar sectionID=prevSectionIDs[ii];\nwarning(\n!prevRowsHash[sectionID],\n'SectionID appears more than once: '+sectionID);\n\nprevRowsHash[sectionID]=keyedDictionaryFromArray(prevRowIDs[ii]);}\n\n\n\nthis._dirtySections=[];\nthis._dirtyRows=[];\n\nvar dirty;\nfor(var sIndex=0;sIndex<this.sectionIdentities.length;sIndex++){\nvar sectionID=this.sectionIdentities[sIndex];\n\ndirty=!prevSectionsHash[sectionID];\nvar sectionHeaderHasChanged=this._sectionHeaderHasChanged;\nif(!dirty&&sectionHeaderHasChanged){\ndirty=sectionHeaderHasChanged(\nthis._getSectionHeaderData(prevDataBlob,sectionID),\nthis._getSectionHeaderData(this._dataBlob,sectionID));}\n\n\nthis._dirtySections.push(!!dirty);\n\nthis._dirtyRows[sIndex]=[];\nfor(var rIndex=0;rIndex<this.rowIdentities[sIndex].length;rIndex++){\nvar rowID=this.rowIdentities[sIndex][rIndex];\n\ndirty=\n!prevSectionsHash[sectionID]||\n!prevRowsHash[sectionID][rowID]||\nthis._rowHasChanged(\nthis._getRowData(prevDataBlob,sectionID,rowID),\nthis._getRowData(this._dataBlob,sectionID,rowID));\n\nthis._dirtyRows[sIndex].push(!!dirty);}}}}]);return ListViewDataSource;})();\n\n\n\n\n\nfunction countRows(allRowIDs){\nvar totalRows=0;\nfor(var sectionIdx=0;sectionIdx<allRowIDs.length;sectionIdx++){\nvar rowIDs=allRowIDs[sectionIdx];\ntotalRows+=rowIDs.length;}\n\nreturn totalRows;}\n\n\nfunction keyedDictionaryFromArray(arr){\nif(isEmpty(arr)){\nreturn {};}\n\nvar result={};\nfor(var ii=0;ii<arr.length;ii++){\nvar key=arr[ii];\nwarning(!result[key],'Value appears more than once in array: '+key);\nresult[key]=true;}\n\nreturn result;}\n\n\n\nmodule.exports=ListViewDataSource;\n});\n__d('isEmpty',function(global, require, module, exports) {  function \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nisEmpty(obj){\nif(Array.isArray(obj)){\nreturn obj.length===0;}else \nif(typeof obj==='object'){\nfor(var i in obj){\nreturn false;}\n\nreturn true;}else \n{\nreturn !obj;}}\n\n\n\nmodule.exports=isEmpty;\n});\n__d('ScrollView',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EdgeInsetsPropType=require('EdgeInsetsPropType');\nvar Platform=require('Platform');\nvar PointPropType=require('PointPropType');\nvar RCTScrollView=require('NativeModules').UIManager.RCTScrollView;\nvar RCTScrollViewManager=require('NativeModules').ScrollViewManager;\nvar React=require('React');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\nvar RCTUIManager=require('NativeModules').UIManager;\nvar ScrollResponder=require('ScrollResponder');\nvar StyleSheet=require('StyleSheet');\nvar StyleSheetPropType=require('StyleSheetPropType');\nvar View=require('View');\nvar ViewStylePropTypes=require('ViewStylePropTypes');\n\nvar deepDiffer=require('deepDiffer');\nvar dismissKeyboard=require('dismissKeyboard');\nvar flattenStyle=require('flattenStyle');\nvar insetsDiffer=require('insetsDiffer');\nvar invariant=require('invariant');\nvar pointsDiffer=require('pointsDiffer');\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar PropTypes=React.PropTypes;\n\nvar SCROLLVIEW='ScrollView';\nvar INNERVIEW='InnerScrollView';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ScrollView=React.createClass({displayName:'ScrollView',\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\n\n\n\nautomaticallyAdjustContentInsets:PropTypes.bool,\n\n\n\n\n\ncontentInset:EdgeInsetsPropType,\n\n\n\n\n\ncontentOffset:PointPropType,\n\n\n\n\n\n\n\nbounces:PropTypes.bool,\n\n\n\n\n\n\nbouncesZoom:PropTypes.bool,\n\n\n\n\n\n\nalwaysBounceHorizontal:PropTypes.bool,\n\n\n\n\n\n\nalwaysBounceVertical:PropTypes.bool,\n\n\n\n\n\n\n\ncenterContent:PropTypes.bool,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncontentContainerStyle:StyleSheetPropType(ViewStylePropTypes),\n\n\n\n\n\n\n\ndecelerationRate:PropTypes.number,\n\n\n\n\nhorizontal:PropTypes.bool,\n\n\n\n\n\ndirectionalLockEnabled:PropTypes.bool,\n\n\n\n\n\ncanCancelContentTouches:PropTypes.bool,\n\n\n\n\n\n\n\n\nkeyboardDismissMode:PropTypes.oneOf([\n'none',\n'interactive',\n'on-drag']),\n\n\n\n\n\n\n\nkeyboardShouldPersistTaps:PropTypes.bool,\n\n\n\n\nmaximumZoomScale:PropTypes.number,\n\n\n\n\nminimumZoomScale:PropTypes.number,\n\n\n\n\nonScroll:PropTypes.func,\n\n\n\n\nonScrollAnimationEnd:PropTypes.func,\n\n\n\n\n\nonContentSizeChange:PropTypes.func,\n\n\n\n\n\n\npagingEnabled:PropTypes.bool,\n\n\n\n\n\nscrollEnabled:PropTypes.bool,\n\n\n\n\n\n\n\n\n\nscrollEventThrottle:PropTypes.number,\n\n\n\n\n\n\nscrollIndicatorInsets:EdgeInsetsPropType,\n\n\n\n\n\nscrollsToTop:PropTypes.bool,\n\n\n\nshowsHorizontalScrollIndicator:PropTypes.bool,\n\n\n\nshowsVerticalScrollIndicator:PropTypes.bool,\n\n\n\n\n\n\n\n\nstickyHeaderIndices:PropTypes.arrayOf(PropTypes.number),\nstyle:StyleSheetPropType(ViewStylePropTypes),\n\n\n\n\n\n\n\nsnapToInterval:PropTypes.number,\n\n\n\n\n\n\n\n\nsnapToAlignment:PropTypes.oneOf([\n'start',\n'center',\n'end']),\n\n\n\n\n\n\n\nremoveClippedSubviews:PropTypes.bool,\n\n\n\n\nzoomScale:PropTypes.number,\n\n\n\n\n\n\n\n\n\n\n\n\n\nonRefreshStart:PropTypes.func}),\n\n\n\nmixins:[ScrollResponder.Mixin],\n\ngetInitialState:function(){\nreturn this.scrollResponderMixinGetInitialState();},\n\n\nsetNativeProps:function(props){\nthis.refs[SCROLLVIEW].setNativeProps(props);},\n\n\nendRefreshing:function(){\nRCTScrollViewManager.endRefreshing(\nReact.findNodeHandle(this));},\n\n\n\n\n\n\n\n\n\ngetScrollResponder:function(){\nreturn this;},\n\n\ngetInnerViewNode:function(){\nreturn React.findNodeHandle(this.refs[INNERVIEW]);},\n\n\nscrollTo:function(destY,destX){\n\nthis.getScrollResponder().scrollResponderScrollTo(destX||0,destY||0);},\n\n\nscrollWithoutAnimationTo:function(destY,destX){\n\nthis.getScrollResponder().scrollResponderScrollWithouthAnimationTo(\ndestX||0,\ndestY||0);},\n\n\n\nhandleScroll:function(e){\nif(__DEV__){\nif(this.props.onScroll&&!this.props.scrollEventThrottle){\nconsole.log(\n'You specified `onScroll` on a <ScrollView> but not '+\n'`scrollEventThrottle`. You will only receive one event. '+\n'Using `16` you get all the events but be aware that it may '+\n'cause frame drops, use a bigger number if you don\\'t need as '+\n'much precision.');}}\n\n\n\nif(Platform.OS==='android'){\nif(this.props.keyboardDismissMode==='on-drag'){\ndismissKeyboard();}}\n\n\nthis.scrollResponderHandleScroll(e);},\n\n\n_handleContentOnLayout:function(e){var _e$nativeEvent$layout=\ne.nativeEvent.layout;var width=_e$nativeEvent$layout.width;var height=_e$nativeEvent$layout.height;\nthis.props.onContentSizeChange&&this.props.onContentSizeChange(width,height);},\n\n\nrender:function(){\nvar contentContainerStyle=[\nthis.props.horizontal&&styles.contentContainerHorizontal,\nthis.props.contentContainerStyle];\n\nif(__DEV__&&this.props.style){\nvar style=flattenStyle(this.props.style);\nvar childLayoutProps=['alignItems','justifyContent'].\nfilter(function(prop){return style&&style[prop]!==undefined;});\ninvariant(\nchildLayoutProps.length===0,\n'ScrollView child layout ('+JSON.stringify(childLayoutProps)+\n') must by applied through the contentContainerStyle prop.');}\n\n\n\nvar contentSizeChangeProps={};\nif(this.props.onContentSizeChange){\ncontentSizeChangeProps={\nonLayout:this._handleContentOnLayout};}\n\n\n\nvar contentContainer=\nReact.createElement(View,babelHelpers.extends({},\ncontentSizeChangeProps,{\nref:INNERVIEW,\nstyle:contentContainerStyle,\nremoveClippedSubviews:this.props.removeClippedSubviews,\ncollapsable:false}),\nthis.props.children);\n\n\nvar alwaysBounceHorizontal=\nthis.props.alwaysBounceHorizontal!==undefined?\nthis.props.alwaysBounceHorizontal:\nthis.props.horizontal;\n\nvar alwaysBounceVertical=\nthis.props.alwaysBounceVertical!==undefined?\nthis.props.alwaysBounceVertical:\n!this.props.horizontal;\n\nvar props=babelHelpers.extends({},\nthis.props,{\nalwaysBounceHorizontal:alwaysBounceHorizontal,\nalwaysBounceVertical:alwaysBounceVertical,\nstyle:[styles.base,this.props.style],\nonTouchStart:this.scrollResponderHandleTouchStart,\nonTouchMove:this.scrollResponderHandleTouchMove,\nonTouchEnd:this.scrollResponderHandleTouchEnd,\nonScrollBeginDrag:this.scrollResponderHandleScrollBeginDrag,\nonScrollEndDrag:this.scrollResponderHandleScrollEndDrag,\nonMomentumScrollBegin:this.scrollResponderHandleMomentumScrollBegin,\nonMomentumScrollEnd:this.scrollResponderHandleMomentumScrollEnd,\nonStartShouldSetResponder:this.scrollResponderHandleStartShouldSetResponder,\nonStartShouldSetResponderCapture:this.scrollResponderHandleStartShouldSetResponderCapture,\nonScrollShouldSetResponder:this.scrollResponderHandleScrollShouldSetResponder,\nonScroll:this.handleScroll,\nonResponderGrant:this.scrollResponderHandleResponderGrant,\nonResponderTerminationRequest:this.scrollResponderHandleTerminationRequest,\nonResponderTerminate:this.scrollResponderHandleTerminate,\nonResponderRelease:this.scrollResponderHandleResponderRelease,\nonResponderReject:this.scrollResponderHandleResponderReject});\n\n\nvar onRefreshStart=this.props.onRefreshStart;\n\n\nprops.onRefreshStart=onRefreshStart?\n(function(){onRefreshStart&&onRefreshStart(this.endRefreshing);}).bind(this):\nnull;\n\nvar ScrollViewClass;\nif(Platform.OS==='ios'){\nScrollViewClass=RCTScrollView;}else \nif(Platform.OS==='android'){\nif(this.props.horizontal){\nScrollViewClass=AndroidHorizontalScrollView;}else \n{\nScrollViewClass=AndroidScrollView;}}\n\n\ninvariant(\nScrollViewClass!==undefined,\n'ScrollViewClass must not be undefined');\n\n\nreturn (\nReact.createElement(ScrollViewClass,babelHelpers.extends({},props,{ref:SCROLLVIEW}),\ncontentContainer));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nbase:{\nflex:1},\n\ncontentContainerHorizontal:{\nalignSelf:'flex-start',\nflexDirection:'row'}});\n\n\n\nvar validAttributes=babelHelpers.extends({},\nReactNativeViewAttributes.UIView,{\nalwaysBounceHorizontal:true,\nalwaysBounceVertical:true,\nautomaticallyAdjustContentInsets:true,\nbounces:true,\ncenterContent:true,\ncontentInset:{diff:insetsDiffer},\ncontentOffset:{diff:pointsDiffer},\ndecelerationRate:true,\nhorizontal:true,\nkeyboardDismissMode:true,\nkeyboardShouldPersistTaps:true,\nmaximumZoomScale:true,\nminimumZoomScale:true,\npagingEnabled:true,\nremoveClippedSubviews:true,\nscrollEnabled:true,\nscrollIndicatorInsets:{diff:insetsDiffer},\nscrollsToTop:true,\nshowsHorizontalScrollIndicator:true,\nshowsVerticalScrollIndicator:true,\nsnapToInterval:true,\nsnapToAlignment:true,\nstickyHeaderIndices:{diff:deepDiffer},\nscrollEventThrottle:true,\nzoomScale:true});\n\n\nif(Platform.OS==='android'){\nvar AndroidScrollView=requireNativeComponent('RCTScrollView',ScrollView);\nvar AndroidHorizontalScrollView=requireNativeComponent(\n'AndroidHorizontalScrollView',\nScrollView);}else \n\nif(Platform.OS==='ios'){\nvar RCTScrollView=requireNativeComponent('RCTScrollView',ScrollView);}\n\n\nmodule.exports=ScrollView;\n});\n__d('PointPropType',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar PropTypes=require('ReactPropTypes');\n\nvar createStrictShapeTypeChecker=require('createStrictShapeTypeChecker');\n\nvar PointPropType=createStrictShapeTypeChecker({\nx:PropTypes.number,\ny:PropTypes.number});\n\n\nmodule.exports=PointPropType;\n});\n__d('ScrollResponder',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dimensions=require('Dimensions');\nvar NativeModules=require('NativeModules');\nvar Platform=require('Platform');\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar React=require('React');\nvar Subscribable=require('Subscribable');\nvar TextInputState=require('TextInputState');\n\nvar RCTUIManager=NativeModules.UIManager;\nvar RCTScrollViewConsts=RCTUIManager.RCTScrollView.Constants;\n\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS=16;\n\n\n\n\n\n\n\n\n\n\nvar ScrollResponderMixin={\nmixins:[Subscribable.Mixin],\nstatics:RCTScrollViewConsts,\nscrollResponderMixinGetInitialState:function(){\nreturn {\nisTouching:false,\nlastMomentumScrollBeginTime:0,\nlastMomentumScrollEndTime:0,\n\n\n\n\n\n\nobservedScrollSinceBecomingResponder:false,\nbecameResponderWhileAnimating:false};},\n\n\n\n\n\n\nscrollResponderHandleScrollShouldSetResponder:function(){\nreturn this.state.isTouching;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderHandleStartShouldSetResponder:function(){\nreturn false;},\n\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderHandleStartShouldSetResponderCapture:function(e){\n\nvar currentlyFocusedTextInput=TextInputState.currentlyFocusedField();\nif(!this.props.keyboardShouldPersistTaps&&\ncurrentlyFocusedTextInput!=null&&\ne.target!==currentlyFocusedTextInput){\nreturn true;}\n\nreturn this.scrollResponderIsAnimating();},\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderHandleResponderReject:function(){\nwarning(false,\"ScrollView doesn't take rejection well - scrolls anyway\");},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderHandleTerminationRequest:function(){\nreturn !this.state.observedScrollSinceBecomingResponder;},\n\n\n\n\n\n\n\nscrollResponderHandleTouchEnd:function(e){\nvar nativeEvent=e.nativeEvent;\nthis.state.isTouching=nativeEvent.touches.length!==0;\nthis.props.onTouchEnd&&this.props.onTouchEnd(e);},\n\n\n\n\n\nscrollResponderHandleResponderRelease:function(e){\nthis.props.onResponderRelease&&this.props.onResponderRelease(e);\n\n\n\nvar currentlyFocusedTextInput=TextInputState.currentlyFocusedField();\nif(!this.props.keyboardShouldPersistTaps&&\ncurrentlyFocusedTextInput!=null&&\ne.target!==currentlyFocusedTextInput&&\n!this.state.observedScrollSinceBecomingResponder&&\n!this.state.becameResponderWhileAnimating){\nthis.props.onScrollResponderKeyboardDismissed&&\nthis.props.onScrollResponderKeyboardDismissed(e);\nTextInputState.blurTextInput(currentlyFocusedTextInput);}},\n\n\n\nscrollResponderHandleScroll:function(e){\nthis.state.observedScrollSinceBecomingResponder=true;\nthis.props.onScroll&&this.props.onScroll(e);},\n\n\n\n\n\nscrollResponderHandleResponderGrant:function(e){\nthis.state.observedScrollSinceBecomingResponder=false;\nthis.props.onResponderGrant&&this.props.onResponderGrant(e);\nthis.state.becameResponderWhileAnimating=this.scrollResponderIsAnimating();},\n\n\n\n\n\n\n\n\n\nscrollResponderHandleScrollBeginDrag:function(e){\nthis.props.onScrollBeginDrag&&this.props.onScrollBeginDrag(e);},\n\n\n\n\n\nscrollResponderHandleScrollEndDrag:function(e){\nthis.props.onScrollEndDrag&&this.props.onScrollEndDrag(e);},\n\n\n\n\n\nscrollResponderHandleMomentumScrollBegin:function(e){\nthis.state.lastMomentumScrollBeginTime=Date.now();\nthis.props.onMomentumScrollBegin&&this.props.onMomentumScrollBegin(e);},\n\n\n\n\n\nscrollResponderHandleMomentumScrollEnd:function(e){\nthis.state.lastMomentumScrollEndTime=Date.now();\nthis.props.onMomentumScrollEnd&&this.props.onMomentumScrollEnd(e);},\n\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderHandleTouchStart:function(e){\nthis.state.isTouching=true;\nthis.props.onTouchStart&&this.props.onTouchStart(e);},\n\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderHandleTouchMove:function(e){\nthis.props.onTouchMove&&this.props.onTouchMove(e);},\n\n\n\n\n\n\n\nscrollResponderIsAnimating:function(){\nvar now=Date.now();\nvar timeSinceLastMomentumScrollEnd=now-this.state.lastMomentumScrollEndTime;\nvar isAnimating=timeSinceLastMomentumScrollEnd<IS_ANIMATING_TOUCH_START_THRESHOLD_MS||\nthis.state.lastMomentumScrollEndTime<this.state.lastMomentumScrollBeginTime;\nreturn isAnimating;},\n\n\n\n\n\n\n\nscrollResponderScrollTo:function(offsetX,offsetY){\nif(Platform.OS==='android'){\nRCTUIManager.dispatchViewManagerCommand(\nReact.findNodeHandle(this),\nRCTUIManager.RCTScrollView.Commands.scrollTo,\n[Math.round(offsetX),Math.round(offsetY)]);}else \n\n{\nRCTUIManager.scrollTo(\nReact.findNodeHandle(this),\noffsetX,\noffsetY);}},\n\n\n\n\n\n\n\n\nscrollResponderScrollWithouthAnimationTo:function(offsetX,offsetY){\nif(Platform.OS==='android'){\nRCTUIManager.dispatchViewManagerCommand(\nReact.findNodeHandle(this),\nRCTUIManager.RCTScrollView.Commands.scrollWithoutAnimationTo,\n[offsetX,offsetY]);}else \n\n{\nRCTUIManager.scrollWithoutAnimationTo(\nReact.findNodeHandle(this),\noffsetX,\noffsetY);}},\n\n\n\n\n\n\n\n\nscrollResponderZoomTo:function(rect){\nRCTUIManager.zoomToRect(React.findNodeHandle(this),rect);},\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderScrollNativeHandleToKeyboard:function(nodeHandle,additionalOffset,preventNegativeScrollOffset){\nthis.additionalScrollOffset=additionalOffset||0;\nthis.preventNegativeScrollOffset=!!preventNegativeScrollOffset;\nRCTUIManager.measureLayout(\nnodeHandle,\nReact.findNodeHandle(this.getInnerViewNode()),\nthis.scrollResponderTextInputFocusError,\nthis.scrollResponderInputMeasureAndScrollToKeyboard);},\n\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderInputMeasureAndScrollToKeyboard:function(left,top,width,height){\nvar keyboardScreenY=Dimensions.get('window').height;\nif(this.keyboardWillOpenTo){\nkeyboardScreenY=this.keyboardWillOpenTo.endCoordinates.screenY;}\n\nvar scrollOffsetY=top-keyboardScreenY+height+this.additionalScrollOffset;\n\n\n\n\n\nif(this.preventNegativeScrollOffset){\nscrollOffsetY=Math.max(0,scrollOffsetY);}\n\nthis.scrollResponderScrollTo(0,scrollOffsetY);\n\nthis.additionalOffset=0;\nthis.preventNegativeScrollOffset=false;},\n\n\nscrollResponderTextInputFocusError:function(e){\nconsole.error('Error measuring text field: ',e);},\n\n\n\n\n\n\n\n\ncomponentWillMount:function(){\nthis.keyboardWillOpenTo=null;\nthis.additionalScrollOffset=0;\nthis.addListenerOn(RCTDeviceEventEmitter,'keyboardWillShow',this.scrollResponderKeyboardWillShow);\nthis.addListenerOn(RCTDeviceEventEmitter,'keyboardWillHide',this.scrollResponderKeyboardWillHide);\nthis.addListenerOn(RCTDeviceEventEmitter,'keyboardDidShow',this.scrollResponderKeyboardDidShow);\nthis.addListenerOn(RCTDeviceEventEmitter,'keyboardDidHide',this.scrollResponderKeyboardDidHide);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nscrollResponderKeyboardWillShow:function(e){\nthis.keyboardWillOpenTo=e;\nthis.props.onKeyboardWillShow&&this.props.onKeyboardWillShow(e);},\n\n\nscrollResponderKeyboardWillHide:function(e){\nthis.keyboardWillOpenTo=null;\nthis.props.onKeyboardWillHide&&this.props.onKeyboardWillHide(e);},\n\n\nscrollResponderKeyboardDidShow:function(e){\n\n\nif(e){\nthis.keyboardWillOpenTo=e;}\n\nthis.props.onKeyboardDidShow&&this.props.onKeyboardDidShow(e);},\n\n\nscrollResponderKeyboardDidHide:function(e){\nthis.keyboardWillOpenTo=null;\nthis.props.onKeyboardDidHide&&this.props.onKeyboardDidHide(e);}};\n\n\n\n\nvar ScrollResponder={\nMixin:ScrollResponderMixin};\n\n\nmodule.exports=ScrollResponder;\n});\n__d('Subscribable',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Subscribable={};\n\nSubscribable.Mixin={\n\ncomponentWillMount:function(){\nthis._subscribableSubscriptions=[];},\n\n\ncomponentWillUnmount:function(){\nthis._subscribableSubscriptions.forEach(\nfunction(subscription){return subscription.remove();});\n\nthis._subscribableSubscriptions=null;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\naddListenerOn:function(\neventEmitter,\neventType,\nlistener,\ncontext)\n{\nthis._subscribableSubscriptions.push(\neventEmitter.addListener(eventType,listener,context));}};\n\n\n\n\nmodule.exports=Subscribable;\n});\n__d('dismissKeyboard',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\nvar TextInputState=require('TextInputState');\n\nfunction dismissKeyboard(){\nTextInputState.blurTextInput(TextInputState.currentlyFocusedField());}\n\n\nmodule.exports=dismissKeyboard;\n});\n__d('StaticRenderer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\n\nvar StaticRenderer=React.createClass({displayName:'StaticRenderer',\npropTypes:{\nshouldUpdate:React.PropTypes.bool.isRequired,\nrender:React.PropTypes.func.isRequired},\n\n\nshouldComponentUpdate:function(nextProps){\nreturn nextProps.shouldUpdate;},\n\n\nrender:function(){\nreturn this.props.render();}});\n\n\n\nmodule.exports=StaticRenderer;\n});\n__d('react-timer-mixin/TimerMixin.js',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\nvar GLOBAL=typeof window==='undefined'?global:window;\n\nvar setter=function(_setter,_clearer,array){\nreturn function(callback,delta){\nvar id=_setter((function(){\n_clearer.call(this,id);\ncallback.apply(this,arguments);}).\nbind(this),delta);\n\nif(!this[array]){\nthis[array]=[id];}else \n{\nthis[array].push(id);}\n\nreturn id;};};\n\n\n\nvar clearer=function(_clearer,array){\nreturn function(id){\nif(this[array]){\nvar index=this[array].indexOf(id);\nif(index!==-1){\nthis[array].splice(index,1);}}\n\n\n_clearer(id);};};\n\n\n\nvar _timeouts='TimerMixin_timeouts';\nvar _clearTimeout=clearer(GLOBAL.clearTimeout,_timeouts);\nvar _setTimeout=setter(GLOBAL.setTimeout,_clearTimeout,_timeouts);\n\nvar _intervals='TimerMixin_intervals';\nvar _clearInterval=clearer(GLOBAL.clearInterval,_intervals);\nvar _setInterval=setter(GLOBAL.setInterval,function(){},_intervals);\n\nvar _immediates='TimerMixin_immediates';\nvar _clearImmediate=clearer(GLOBAL.clearImmediate,_immediates);\nvar _setImmediate=setter(GLOBAL.setImmediate,_clearImmediate,_immediates);\n\nvar _rafs='TimerMixin_rafs';\nvar _cancelAnimationFrame=clearer(GLOBAL.cancelAnimationFrame,_rafs);\nvar _requestAnimationFrame=setter(GLOBAL.requestAnimationFrame,_cancelAnimationFrame,_rafs);\n\nvar TimerMixin={\ncomponentWillUnmount:function(){\nthis[_timeouts]&&this[_timeouts].forEach(function(id){\nGLOBAL.clearTimeout(id);});\n\nthis[_timeouts]=null;\nthis[_intervals]&&this[_intervals].forEach(function(id){\nGLOBAL.clearInterval(id);});\n\nthis[_intervals]=null;\nthis[_immediates]&&this[_immediates].forEach(function(id){\nGLOBAL.clearImmediate(id);});\n\nthis[_immediates]=null;\nthis[_rafs]&&this[_rafs].forEach(function(id){\nGLOBAL.cancelAnimationFrame(id);});\n\nthis[_rafs]=null;},\n\n\nsetTimeout:_setTimeout,\nclearTimeout:_clearTimeout,\n\nsetInterval:_setInterval,\nclearInterval:_clearInterval,\n\nsetImmediate:_setImmediate,\nclearImmediate:_clearImmediate,\n\nrequestAnimationFrame:_requestAnimationFrame,\ncancelAnimationFrame:_cancelAnimationFrame};\n\n\nmodule.exports=TimerMixin;\n});\n__d('MapView',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EdgeInsetsPropType=require('EdgeInsetsPropType');\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar Platform=require('Platform');\nvar React=require('React');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\nvar View=require('View');\n\nvar deepDiffer=require('deepDiffer');\nvar insetsDiffer=require('insetsDiffer');\nvar merge=require('merge');\nvar requireNativeComponent=require('requireNativeComponent');\n\n\n\n\n\n\n\n\n\nvar MapView=React.createClass({displayName:'MapView',\nmixins:[NativeMethodsMixin],\n\ncheckAnnotationIds:function(annotations){\n\nvar newAnnotations=annotations.map(function(annotation){\nif(!annotation.id){\n\nannotation.id=encodeURIComponent(JSON.stringify(annotation));}\n\n\nreturn annotation;});\n\n\nthis.setState({\nannotations:newAnnotations});},\n\n\n\ncomponentWillMount:function(){\nif(this.props.annotations){\nthis.checkAnnotationIds(this.props.annotations);}},\n\n\n\ncomponentWillReceiveProps:function(nextProps){\nif(nextProps.annotations){\nthis.checkAnnotationIds(nextProps.annotations);}},\n\n\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\n\nstyle:View.propTypes.style,\n\n\n\n\n\n\n\n\n\nshowsUserLocation:React.PropTypes.bool,\n\n\n\n\n\n\nshowsPointsOfInterest:React.PropTypes.bool,\n\n\n\n\n\n\nshowsCompass:React.PropTypes.bool,\n\n\n\n\n\nzoomEnabled:React.PropTypes.bool,\n\n\n\n\n\n\n\n\nrotateEnabled:React.PropTypes.bool,\n\n\n\n\n\n\n\n\npitchEnabled:React.PropTypes.bool,\n\n\n\n\n\nscrollEnabled:React.PropTypes.bool,\n\n\n\n\n\n\n\n\nmapType:React.PropTypes.oneOf([\n'standard',\n'satellite',\n'hybrid']),\n\n\n\n\n\n\n\n\nregion:React.PropTypes.shape({\n\n\n\nlatitude:React.PropTypes.number.isRequired,\nlongitude:React.PropTypes.number.isRequired,\n\n\n\n\n\nlatitudeDelta:React.PropTypes.number.isRequired,\nlongitudeDelta:React.PropTypes.number.isRequired}),\n\n\n\n\n\nannotations:React.PropTypes.arrayOf(React.PropTypes.shape({\n\n\n\nlatitude:React.PropTypes.number.isRequired,\nlongitude:React.PropTypes.number.isRequired,\n\n\n\n\nanimateDrop:React.PropTypes.bool,\n\n\n\n\ntitle:React.PropTypes.string,\nsubtitle:React.PropTypes.string,\n\n\n\n\nhasLeftCallout:React.PropTypes.bool,\nhasRightCallout:React.PropTypes.bool,\n\n\n\n\nonLeftCalloutPress:React.PropTypes.func,\nonRightCalloutPress:React.PropTypes.func,\n\n\n\n\nid:React.PropTypes.string})),\n\n\n\n\n\n\nmaxDelta:React.PropTypes.number,\n\n\n\n\nminDelta:React.PropTypes.number,\n\n\n\n\n\nlegalLabelInsets:EdgeInsetsPropType,\n\n\n\n\nonRegionChange:React.PropTypes.func,\n\n\n\n\nonRegionChangeComplete:React.PropTypes.func,\n\n\n\n\nonAnnotationPress:React.PropTypes.func,\n\n\n\n\nactive:React.PropTypes.bool}),\n\n\n_onChange:function(event){\nif(event.nativeEvent.continuous){\nthis.props.onRegionChange&&\nthis.props.onRegionChange(event.nativeEvent.region);}else \n{\nthis.props.onRegionChangeComplete&&\nthis.props.onRegionChangeComplete(event.nativeEvent.region);}},\n\n\n\n_onPress:function(event){\nif(event.nativeEvent.action==='annotation-click'){\nthis.props.onAnnotationPress&&this.props.onAnnotationPress(event.nativeEvent.annotation);}\n\n\nif(event.nativeEvent.action==='callout-click'){\nif(!this.props.annotations){\nreturn;}\n\n\n\nfor(var i=0;i<this.props.annotations.length;i++){\nvar annotation=this.props.annotations[i];\nif(annotation.id===event.nativeEvent.annotationId){\n\nif(event.nativeEvent.side==='left'){\nannotation.onLeftCalloutPress&&annotation.onLeftCalloutPress(event.nativeEvent);}else \nif(event.nativeEvent.side==='right'){\nannotation.onRightCalloutPress&&annotation.onRightCalloutPress(event.nativeEvent);}}}}},\n\n\n\n\n\n\n\nrender:function(){\nreturn React.createElement(RCTMap,babelHelpers.extends({},this.props,{onPress:this._onPress,onChange:this._onChange}));}});\n\n\n\nvar RCTMap=requireNativeComponent('RCTMap',MapView,{\nnativeOnly:{onChange:true,onPress:true}});\n\n\nmodule.exports=MapView;\n});\n__d('Modal',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\nvar RCTModalHostView=requireNativeComponent('RCTModalHostView',null);var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\nModal=(function(_React$Component){babelHelpers.inherits(Modal,_React$Component);function Modal(){babelHelpers.classCallCheck(this,Modal);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Modal).apply(this,arguments));}babelHelpers.createClass(Modal,[{key:'render',value:function render()\n{\nif(this.props.visible===false){\nreturn null;}\n\n\nif(this.props.transparent){\nvar containerBackgroundColor={backgroundColor:'transparent'};}\n\n\nreturn (\nReact.createElement(RCTModalHostView,{\nanimated:this.props.animated,\ntransparent:this.props.transparent,\nonDismiss:this.props.onDismiss,\nstyle:styles.modal},\nReact.createElement(View,{style:[styles.container,containerBackgroundColor]},\nthis.props.children)));}}]);return Modal;})(React.Component);\n\n\n\n\n\n\nModal.propTypes={\nanimated:PropTypes.bool,\ntransparent:PropTypes.bool,\nvisible:PropTypes.bool,\nonDismiss:PropTypes.func};\n\n\nModal.defaultProps={\nvisible:true};\n\n\nvar styles=StyleSheet.create({\nmodal:{\nposition:'absolute'},\n\ncontainer:{\nleft:0,\nposition:'absolute',\ntop:0}});\n\n\n\nmodule.exports=Modal;\n});\n__d('Navigator',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AnimationsDebugModule=require('NativeModules').AnimationsDebugModule;\nvar Dimensions=require('Dimensions');\nvar InteractionMixin=require('InteractionMixin');\nvar Map=require('Map');\nvar NavigationContext=require('NavigationContext');\nvar NavigatorBreadcrumbNavigationBar=require('NavigatorBreadcrumbNavigationBar');\nvar NavigatorNavigationBar=require('NavigatorNavigationBar');\nvar NavigatorSceneConfigs=require('NavigatorSceneConfigs');\nvar PanResponder=require('PanResponder');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Subscribable=require('Subscribable');\nvar TimerMixin=require('react-timer-mixin/TimerMixin.js');\nvar View=require('View');\n\nvar clamp=require('clamp');\nvar flattenStyle=require('flattenStyle');\nvar invariant=require('invariant');\nvar rebound=require('rebound/rebound.js');\n\nvar PropTypes=React.PropTypes;\n\n\n\n\nvar SCREEN_WIDTH=Dimensions.get('window').width;\nvar SCREEN_HEIGHT=Dimensions.get('window').height;\nvar SCENE_DISABLED_NATIVE_PROPS={\npointerEvents:'none',\nstyle:{\ntop:SCREEN_HEIGHT,\nbottom:-SCREEN_HEIGHT,\nopacity:0}};\n\n\n\nvar __uid=0;\nfunction getuid(){\nreturn __uid++;}\n\n\nfunction getRouteID(route){\nif(route===null||typeof route!=='object'){\nreturn String(route);}\n\n\nvar key='__navigatorRouteID';\n\nif(!route.hasOwnProperty(key)){\nObject.defineProperty(route,key,{\nenumerable:false,\nconfigurable:false,\nwritable:false,\nvalue:getuid()});}\n\n\nreturn route[key];}\n\n\n\nvar styles=StyleSheet.create({\ncontainer:{\nflex:1,\noverflow:'hidden'},\n\ndefaultSceneStyle:{\nposition:'absolute',\nleft:0,\nright:0,\nbottom:0,\ntop:0},\n\nbaseScene:{\nposition:'absolute',\noverflow:'hidden',\nleft:0,\nright:0,\nbottom:0,\ntop:0},\n\ndisabledScene:{\ntop:SCREEN_HEIGHT,\nbottom:-SCREEN_HEIGHT},\n\ntransitioner:{\nflex:1,\nbackgroundColor:'transparent',\noverflow:'hidden'}});\n\n\n\nvar GESTURE_ACTIONS=[\n'pop',\n'jumpBack',\n'jumpForward'];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Navigator=React.createClass({displayName:'Navigator',\n\npropTypes:{\n\n\n\n\n\n\n\n\n\nconfigureScene:PropTypes.func,\n\n\n\n\n\n\n\n\n\n\nrenderScene:PropTypes.func.isRequired,\n\n\n\n\n\n\n\ninitialRoute:PropTypes.object,\n\n\n\n\n\n\ninitialRouteStack:PropTypes.arrayOf(PropTypes.object),\n\n\n\n\n\n\n\nonWillFocus:PropTypes.func,\n\n\n\n\n\n\n\n\nonDidFocus:PropTypes.func,\n\n\n\n\n\nnavigationBar:PropTypes.node,\n\n\n\n\nnavigator:PropTypes.object,\n\n\n\n\nsceneStyle:View.propTypes.style},\n\n\nstatics:{\nBreadcrumbNavigationBar:NavigatorBreadcrumbNavigationBar,\nNavigationBar:NavigatorNavigationBar,\nSceneConfigs:NavigatorSceneConfigs},\n\n\nmixins:[TimerMixin,InteractionMixin,Subscribable.Mixin],\n\ngetDefaultProps:function(){\nreturn {\nconfigureScene:function(){return NavigatorSceneConfigs.PushFromRight;},\nsceneStyle:styles.defaultSceneStyle};},\n\n\n\ngetInitialState:function(){var _this=this;\nthis._navigationBarNavigator=this.props.navigationBarNavigator||this;\n\nthis._renderedSceneMap=new Map();\n\nvar routeStack=this.props.initialRouteStack||[this.props.initialRoute];\ninvariant(\nrouteStack.length>=1,\n'Navigator requires props.initialRoute or props.initialRouteStack.');\n\nvar initialRouteIndex=routeStack.length-1;\nif(this.props.initialRoute){\ninitialRouteIndex=routeStack.indexOf(this.props.initialRoute);\ninvariant(\ninitialRouteIndex!==-1,\n'initialRoute is not in initialRouteStack.');}\n\n\nreturn {\nsceneConfigStack:routeStack.map(\nfunction(route){return _this.props.configureScene(route);}),\n\nrouteStack:routeStack,\npresentedIndex:initialRouteIndex,\ntransitionFromIndex:null,\nactiveGesture:null,\npendingGestureProgress:null,\ntransitionQueue:[]};},\n\n\n\ncomponentWillMount:function(){var _this2=this;\n\nthis.__defineGetter__('navigationContext',this._getNavigationContext);\n\nthis._subRouteFocus=[];\nthis.parentNavigator=this.props.navigator;\nthis._handlers={};\nthis.springSystem=new rebound.SpringSystem();\nthis.spring=this.springSystem.createSpring();\nthis.spring.setRestSpeedThreshold(0.05);\nthis.spring.setCurrentValue(0).setAtRest();\nthis.spring.addListener({\nonSpringEndStateChange:function(){\nif(!_this2._interactionHandle){\n_this2._interactionHandle=_this2.createInteractionHandle();}},\n\n\nonSpringUpdate:function(){\n_this2._handleSpringUpdate();},\n\nonSpringAtRest:function(){\n_this2._completeTransition();}});\n\n\nthis.panGesture=PanResponder.create({\nonMoveShouldSetPanResponder:this._handleMoveShouldSetPanResponder,\nonPanResponderRelease:this._handlePanResponderRelease,\nonPanResponderMove:this._handlePanResponderMove,\nonPanResponderTerminate:this._handlePanResponderTerminate});\n\nthis._interactionHandle=null;\nthis._emitWillFocus(this.state.routeStack[this.state.presentedIndex]);},\n\n\ncomponentDidMount:function(){\nthis._handleSpringUpdate();\nthis._emitDidFocus(this.state.routeStack[this.state.presentedIndex]);},\n\n\ncomponentWillUnmount:function(){\nif(this._navigationContext){\nthis._navigationContext.dispose();\nthis._navigationContext=null;}\n\n\nthis.spring.destroy();\n\nif(this._interactionHandle){\nthis.clearInteractionHandle(this._interactionHandle);}},\n\n\n\n\n\n\n\n\n\n\nimmediatelyResetRouteStack:function(nextRouteStack){var _this3=this;\nvar destIndex=nextRouteStack.length-1;\nthis.setState({\nrouteStack:nextRouteStack,\nsceneConfigStack:nextRouteStack.map(\nthis.props.configureScene),\n\npresentedIndex:destIndex,\nactiveGesture:null,\ntransitionFromIndex:null,\ntransitionQueue:[]},\nfunction(){\n_this3._handleSpringUpdate();});},\n\n\n\n_transitionTo:function(destIndex,velocity,jumpSpringTo,cb){\nif(destIndex===this.state.presentedIndex){\nreturn;}\n\nif(this.state.transitionFromIndex!==null){\nthis.state.transitionQueue.push({\ndestIndex:destIndex,\nvelocity:velocity,\ncb:cb});\n\nreturn;}\n\nthis.state.transitionFromIndex=this.state.presentedIndex;\nthis.state.presentedIndex=destIndex;\nthis.state.transitionCb=cb;\nthis._onAnimationStart();\nif(AnimationsDebugModule){\nAnimationsDebugModule.startRecordingFps();}\n\nvar sceneConfig=this.state.sceneConfigStack[this.state.transitionFromIndex]||\nthis.state.sceneConfigStack[this.state.presentedIndex];\ninvariant(\nsceneConfig,\n'Cannot configure scene at index '+this.state.transitionFromIndex);\n\nif(jumpSpringTo!=null){\nthis.spring.setCurrentValue(jumpSpringTo);}\n\nthis.spring.setOvershootClampingEnabled(true);\nthis.spring.getSpringConfig().friction=sceneConfig.springFriction;\nthis.spring.getSpringConfig().tension=sceneConfig.springTension;\nthis.spring.setVelocity(velocity||sceneConfig.defaultTransitionVelocity);\nthis.spring.setEndValue(1);},\n\n\n\n\n\n\n_handleSpringUpdate:function(){\nif(!this.isMounted()){\nreturn;}\n\n\nif(this.state.transitionFromIndex!=null){\nthis._transitionBetween(\nthis.state.transitionFromIndex,\nthis.state.presentedIndex,\nthis.spring.getCurrentValue());}else \n\nif(this.state.activeGesture!=null){\nvar presentedToIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);\nthis._transitionBetween(\nthis.state.presentedIndex,\npresentedToIndex,\nthis.spring.getCurrentValue());}},\n\n\n\n\n\n\n\n_completeTransition:function(){\nif(!this.isMounted()){\nreturn;}\n\n\nif(this.spring.getCurrentValue()!==1&&this.spring.getCurrentValue()!==0){\n\n\nif(this.state.pendingGestureProgress){\nthis.state.pendingGestureProgress=null;}\n\nreturn;}\n\nthis._onAnimationEnd();\nvar presentedIndex=this.state.presentedIndex;\nvar didFocusRoute=this._subRouteFocus[presentedIndex]||this.state.routeStack[presentedIndex];\nthis._emitDidFocus(didFocusRoute);\nif(AnimationsDebugModule){\nAnimationsDebugModule.stopRecordingFps(Date.now());}\n\nthis.state.transitionFromIndex=null;\nthis.spring.setCurrentValue(0).setAtRest();\nthis._hideScenes();\nif(this.state.transitionCb){\nthis.state.transitionCb();\nthis.state.transitionCb=null;}\n\nif(this._interactionHandle){\nthis.clearInteractionHandle(this._interactionHandle);\nthis._interactionHandle=null;}\n\nif(this.state.pendingGestureProgress){\n\n\nvar gestureToIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);\nthis._enableScene(gestureToIndex);\nthis.spring.setEndValue(this.state.pendingGestureProgress);\nreturn;}\n\nif(this.state.transitionQueue.length){\nvar queuedTransition=this.state.transitionQueue.shift();\nthis._enableScene(queuedTransition.destIndex);\nthis._emitWillFocus(this.state.routeStack[queuedTransition.destIndex]);\nthis._transitionTo(\nqueuedTransition.destIndex,\nqueuedTransition.velocity,\nnull,\nqueuedTransition.cb);}},\n\n\n\n\n_emitDidFocus:function(route){\nthis.navigationContext.emit('didfocus',{route:route});\n\nif(this.props.onDidFocus){\nthis.props.onDidFocus(route);}},\n\n\n\n_emitWillFocus:function(route){\nthis.navigationContext.emit('willfocus',{route:route});\n\nvar navBar=this._navBar;\nif(navBar&&navBar.handleWillFocus){\nnavBar.handleWillFocus(route);}\n\nif(this.props.onWillFocus){\nthis.props.onWillFocus(route);}},\n\n\n\n\n\n\n_hideScenes:function(){\nvar gesturingToIndex=null;\nif(this.state.activeGesture){\ngesturingToIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);}\n\nfor(var i=0;i<this.state.routeStack.length;i++){\nif(i===this.state.presentedIndex||\ni===this.state.transitionFromIndex||\ni===gesturingToIndex){\ncontinue;}\n\nthis._disableScene(i);}},\n\n\n\n\n\n\n_disableScene:function(sceneIndex){\nthis.refs['scene_'+sceneIndex]&&\nthis.refs['scene_'+sceneIndex].setNativeProps(SCENE_DISABLED_NATIVE_PROPS);},\n\n\n\n\n\n_enableScene:function(sceneIndex){\n\nvar sceneStyle=flattenStyle([styles.baseScene,this.props.sceneStyle]);\n\nvar enabledSceneNativeProps={\npointerEvents:'auto',\nstyle:{\ntop:sceneStyle.top,\nbottom:sceneStyle.bottom}};\n\n\nif(sceneIndex!==this.state.transitionFromIndex&&\nsceneIndex!==this.state.presentedIndex){\n\n\nenabledSceneNativeProps.style.opacity=0;}\n\nthis.refs['scene_'+sceneIndex]&&\nthis.refs['scene_'+sceneIndex].setNativeProps(enabledSceneNativeProps);},\n\n\n_onAnimationStart:function(){\nvar fromIndex=this.state.presentedIndex;\nvar toIndex=this.state.presentedIndex;\nif(this.state.transitionFromIndex!=null){\nfromIndex=this.state.transitionFromIndex;}else \nif(this.state.activeGesture){\ntoIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);}\n\nthis._setRenderSceneToHardwareTextureAndroid(fromIndex,true);\nthis._setRenderSceneToHardwareTextureAndroid(toIndex,true);\nvar navBar=this._navBar;\nif(navBar&&navBar.onAnimationStart){\nnavBar.onAnimationStart(fromIndex,toIndex);}},\n\n\n\n_onAnimationEnd:function(){\nvar max=this.state.routeStack.length-1;\nfor(var index=0;index<=max;index++){\nthis._setRenderSceneToHardwareTextureAndroid(index,false);}\n\n\nvar navBar=this._navBar;\nif(navBar&&navBar.onAnimationEnd){\nnavBar.onAnimationEnd();}},\n\n\n\n_setRenderSceneToHardwareTextureAndroid:function(sceneIndex,shouldRenderToHardwareTexture){\nvar viewAtIndex=this.refs['scene_'+sceneIndex];\nif(viewAtIndex===null||viewAtIndex===undefined){\nreturn;}\n\nviewAtIndex.setNativeProps({renderToHardwareTextureAndroid:shouldRenderToHardwareTexture});},\n\n\n_handleTouchStart:function(){\nthis._eligibleGestures=GESTURE_ACTIONS;},\n\n\n_handleMoveShouldSetPanResponder:function(e,gestureState){\nvar sceneConfig=this.state.sceneConfigStack[this.state.presentedIndex];\nif(!sceneConfig){\nreturn false;}\n\nthis._expectingGestureGrant=\nthis._matchGestureAction(this._eligibleGestures,sceneConfig.gestures,gestureState);\nreturn !!this._expectingGestureGrant;},\n\n\n_doesGestureOverswipe:function(gestureName){\nvar wouldOverswipeBack=this.state.presentedIndex<=0&&(\ngestureName==='pop'||gestureName==='jumpBack');\nvar wouldOverswipeForward=this.state.presentedIndex>=this.state.routeStack.length-1&&\ngestureName==='jumpForward';\nreturn wouldOverswipeForward||wouldOverswipeBack;},\n\n\n_deltaForGestureAction:function(gestureAction){\nswitch(gestureAction){\ncase 'pop':\ncase 'jumpBack':\nreturn -1;\ncase 'jumpForward':\nreturn 1;\ndefault:\ninvariant(false,'Unsupported gesture action '+gestureAction);\nreturn;}},\n\n\n\n_handlePanResponderRelease:function(e,gestureState){var _this4=this;\nvar sceneConfig=this.state.sceneConfigStack[this.state.presentedIndex];\nvar releaseGestureAction=this.state.activeGesture;\nif(!releaseGestureAction){\n\nreturn;}\n\nvar releaseGesture=sceneConfig.gestures[releaseGestureAction];\nvar destIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);\nif(this.spring.getCurrentValue()===0){\n\nthis.spring.setCurrentValue(0).setAtRest();\nthis._completeTransition();\nreturn;}\n\nvar isTravelVertical=releaseGesture.direction==='top-to-bottom'||releaseGesture.direction==='bottom-to-top';\nvar isTravelInverted=releaseGesture.direction==='right-to-left'||releaseGesture.direction==='bottom-to-top';\nvar velocity,gestureDistance;\nif(isTravelVertical){\nvelocity=isTravelInverted?-gestureState.vy:gestureState.vy;\ngestureDistance=isTravelInverted?-gestureState.dy:gestureState.dy;}else \n{\nvelocity=isTravelInverted?-gestureState.vx:gestureState.vx;\ngestureDistance=isTravelInverted?-gestureState.dx:gestureState.dx;}\n\nvar transitionVelocity=clamp(-10,velocity,10);\nif(Math.abs(velocity)<releaseGesture.notMoving){\n\nvar hasGesturedEnoughToComplete=gestureDistance>releaseGesture.fullDistance*releaseGesture.stillCompletionRatio;\ntransitionVelocity=hasGesturedEnoughToComplete?releaseGesture.snapVelocity:-releaseGesture.snapVelocity;}\n\nif(transitionVelocity<0||this._doesGestureOverswipe(releaseGestureAction)){\n\n\nif(this.state.transitionFromIndex==null){\n\nvar transitionBackToPresentedIndex=this.state.presentedIndex;\n\nthis.state.presentedIndex=destIndex;\nthis._transitionTo(\ntransitionBackToPresentedIndex,\n-transitionVelocity,\n1-this.spring.getCurrentValue());}}else \n\n\n{\n\nthis._emitWillFocus(this.state.routeStack[destIndex]);\nthis._transitionTo(\ndestIndex,\ntransitionVelocity,\nnull,\nfunction(){\nif(releaseGestureAction==='pop'){\n_this4._cleanScenesPastIndex(destIndex);}});}\n\n\n\n\nthis._detachGesture();},\n\n\n_handlePanResponderTerminate:function(e,gestureState){\nif(this.state.activeGesture==null){\nreturn;}\n\nvar destIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);\nthis._detachGesture();\nvar transitionBackToPresentedIndex=this.state.presentedIndex;\n\nthis.state.presentedIndex=destIndex;\nthis._transitionTo(\ntransitionBackToPresentedIndex,\nnull,\n1-this.spring.getCurrentValue());},\n\n\n\n_attachGesture:function(gestureId){\nthis.state.activeGesture=gestureId;\nvar gesturingToIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);\nthis._enableScene(gesturingToIndex);},\n\n\n_detachGesture:function(){\nthis.state.activeGesture=null;\nthis.state.pendingGestureProgress=null;\nthis._hideScenes();},\n\n\n_handlePanResponderMove:function(e,gestureState){\nif(this._isMoveGestureAttached!==undefined){\ninvariant(\nthis._expectingGestureGrant,\n'Responder granted unexpectedly.');\n\nthis._attachGesture(this._expectingGestureGrant);\nthis._onAnimationStart();\nthis._expectingGestureGrant=undefined;}\n\n\nvar sceneConfig=this.state.sceneConfigStack[this.state.presentedIndex];\nif(this.state.activeGesture){\nvar gesture=sceneConfig.gestures[this.state.activeGesture];\nreturn this._moveAttachedGesture(gesture,gestureState);}\n\nvar matchedGesture=this._matchGestureAction(GESTURE_ACTIONS,sceneConfig.gestures,gestureState);\nif(matchedGesture){\nthis._attachGesture(matchedGesture);}},\n\n\n\n_moveAttachedGesture:function(gesture,gestureState){\nvar isTravelVertical=gesture.direction==='top-to-bottom'||gesture.direction==='bottom-to-top';\nvar isTravelInverted=gesture.direction==='right-to-left'||gesture.direction==='bottom-to-top';\nvar distance=isTravelVertical?gestureState.dy:gestureState.dx;\ndistance=isTravelInverted?-distance:distance;\nvar gestureDetectMovement=gesture.gestureDetectMovement;\nvar nextProgress=(distance-gestureDetectMovement)/(\ngesture.fullDistance-gestureDetectMovement);\nif(nextProgress<0&&gesture.isDetachable){\nvar gesturingToIndex=this.state.presentedIndex+this._deltaForGestureAction(this.state.activeGesture);\nthis._transitionBetween(this.state.presentedIndex,gesturingToIndex,0);\nthis._detachGesture();\nif(this.state.pendingGestureProgress!=null){\nthis.spring.setCurrentValue(0);}\n\nreturn;}\n\nif(this._doesGestureOverswipe(this.state.activeGesture)){\nvar frictionConstant=gesture.overswipe.frictionConstant;\nvar frictionByDistance=gesture.overswipe.frictionByDistance;\nvar frictionRatio=1/(frictionConstant+Math.abs(nextProgress)*frictionByDistance);\nnextProgress*=frictionRatio;}\n\nnextProgress=clamp(0,nextProgress,1);\nif(this.state.transitionFromIndex!=null){\nthis.state.pendingGestureProgress=nextProgress;}else \nif(this.state.pendingGestureProgress){\nthis.spring.setEndValue(nextProgress);}else \n{\nthis.spring.setCurrentValue(nextProgress);}},\n\n\n\n_matchGestureAction:function(eligibleGestures,gestures,gestureState){var _this5=this;\nif(!gestures){\nreturn null;}\n\nvar matchedGesture=null;\neligibleGestures.some(function(gestureName,gestureIndex){\nvar gesture=gestures[gestureName];\nif(!gesture){\nreturn;}\n\nif(gesture.overswipe==null&&_this5._doesGestureOverswipe(gestureName)){\n\nreturn false;}\n\nvar isTravelVertical=gesture.direction==='top-to-bottom'||gesture.direction==='bottom-to-top';\nvar isTravelInverted=gesture.direction==='right-to-left'||gesture.direction==='bottom-to-top';\nvar currentLoc=isTravelVertical?gestureState.moveY:gestureState.moveX;\nvar travelDist=isTravelVertical?gestureState.dy:gestureState.dx;\nvar oppositeAxisTravelDist=\nisTravelVertical?gestureState.dx:gestureState.dy;\nvar edgeHitWidth=gesture.edgeHitWidth;\nif(isTravelInverted){\ncurrentLoc=-currentLoc;\ntravelDist=-travelDist;\noppositeAxisTravelDist=-oppositeAxisTravelDist;\nedgeHitWidth=isTravelVertical?\n-(SCREEN_HEIGHT-edgeHitWidth):\n-(SCREEN_WIDTH-edgeHitWidth);}\n\nvar moveStartedInRegion=gesture.edgeHitWidth==null||\ncurrentLoc<edgeHitWidth;\nif(!moveStartedInRegion){\nreturn false;}\n\nvar moveTravelledFarEnough=travelDist>=gesture.gestureDetectMovement;\nif(!moveTravelledFarEnough){\nreturn false;}\n\nvar directionIsCorrect=Math.abs(travelDist)>Math.abs(oppositeAxisTravelDist)*gesture.directionRatio;\nif(directionIsCorrect){\nmatchedGesture=gestureName;\nreturn true;}else \n{\n_this5._eligibleGestures=_this5._eligibleGestures.slice().splice(gestureIndex,1);}});\n\n\nreturn matchedGesture||null;},\n\n\n_transitionSceneStyle:function(fromIndex,toIndex,progress,index){\nvar viewAtIndex=this.refs['scene_'+index];\nif(viewAtIndex===null||viewAtIndex===undefined){\nreturn;}\n\n\nvar sceneConfigIndex=fromIndex<toIndex?toIndex:fromIndex;\nvar sceneConfig=this.state.sceneConfigStack[sceneConfigIndex];\n\nif(!sceneConfig){\nsceneConfig=this.state.sceneConfigStack[sceneConfigIndex-1];}\n\nvar styleToUse={};\nvar useFn=index<fromIndex||index<toIndex?\nsceneConfig.animationInterpolators.out:\nsceneConfig.animationInterpolators.into;\nvar directionAdjustedProgress=fromIndex<toIndex?progress:1-progress;\nvar didChange=useFn(styleToUse,directionAdjustedProgress);\nif(didChange){\nviewAtIndex.setNativeProps({style:styleToUse});}},\n\n\n\n_transitionBetween:function(fromIndex,toIndex,progress){\nthis._transitionSceneStyle(fromIndex,toIndex,progress,fromIndex);\nthis._transitionSceneStyle(fromIndex,toIndex,progress,toIndex);\nvar navBar=this._navBar;\nif(navBar&&navBar.updateProgress&&toIndex>=0&&fromIndex>=0){\nnavBar.updateProgress(progress,fromIndex,toIndex);}},\n\n\n\n_handleResponderTerminationRequest:function(){\nreturn false;},\n\n\n_getDestIndexWithinBounds:function(n){\nvar currentIndex=this.state.presentedIndex;\nvar destIndex=currentIndex+n;\ninvariant(\ndestIndex>=0,\n'Cannot jump before the first route.');\n\nvar maxIndex=this.state.routeStack.length-1;\ninvariant(\nmaxIndex>=destIndex,\n'Cannot jump past the last route.');\n\nreturn destIndex;},\n\n\n_jumpN:function(n){\nvar destIndex=this._getDestIndexWithinBounds(n);\nthis._enableScene(destIndex);\nthis._emitWillFocus(this.state.routeStack[destIndex]);\nthis._transitionTo(destIndex);},\n\n\njumpTo:function(route){\nvar destIndex=this.state.routeStack.indexOf(route);\ninvariant(\ndestIndex!==-1,\n'Cannot jump to route that is not in the route stack');\n\nthis._jumpN(destIndex-this.state.presentedIndex);},\n\n\njumpForward:function(){\nthis._jumpN(1);},\n\n\njumpBack:function(){\nthis._jumpN(-1);},\n\n\npush:function(route){var _this6=this;\ninvariant(!!route,'Must supply route to push');\nvar activeLength=this.state.presentedIndex+1;\nvar activeStack=this.state.routeStack.slice(0,activeLength);\nvar activeAnimationConfigStack=this.state.sceneConfigStack.slice(0,activeLength);\nvar nextStack=activeStack.concat([route]);\nvar destIndex=nextStack.length-1;\nvar nextAnimationConfigStack=activeAnimationConfigStack.concat([\nthis.props.configureScene(route)]);\n\nthis._emitWillFocus(nextStack[destIndex]);\nthis.setState({\nrouteStack:nextStack,\nsceneConfigStack:nextAnimationConfigStack},\nfunction(){\n_this6._enableScene(destIndex);\n_this6._transitionTo(destIndex);});},\n\n\n\n_popN:function(n){var _this7=this;\nif(n===0){\nreturn;}\n\ninvariant(\nthis.state.presentedIndex-n>=0,\n'Cannot pop below zero');\n\nvar popIndex=this.state.presentedIndex-n;\nthis._enableScene(popIndex);\nthis._emitWillFocus(this.state.routeStack[popIndex]);\nthis._transitionTo(\npopIndex,\nnull,\nnull,\nfunction(){\n_this7._cleanScenesPastIndex(popIndex);});},\n\n\n\n\npop:function(){\nif(this.state.transitionQueue.length){\n\n\n\n\n\n\nreturn;}\n\n\nif(this.state.presentedIndex>0){\nthis._popN(1);}},\n\n\n\n\n\n\n\n\n\nreplaceAtIndex:function(route,index,cb){var _this8=this;\ninvariant(!!route,'Must supply route to replace');\nif(index<0){\nindex+=this.state.routeStack.length;}\n\n\nif(this.state.routeStack.length<=index){\nreturn;}\n\n\nvar nextRouteStack=this.state.routeStack.slice();\nvar nextAnimationModeStack=this.state.sceneConfigStack.slice();\nnextRouteStack[index]=route;\nnextAnimationModeStack[index]=this.props.configureScene(route);\n\nif(index===this.state.presentedIndex){\nthis._emitWillFocus(route);}\n\nthis.setState({\nrouteStack:nextRouteStack,\nsceneConfigStack:nextAnimationModeStack},\nfunction(){\nif(index===_this8.state.presentedIndex){\n_this8._emitDidFocus(route);}\n\ncb&&cb();});},\n\n\n\n\n\n\nreplace:function(route){\nthis.replaceAtIndex(route,this.state.presentedIndex);},\n\n\n\n\n\nreplacePrevious:function(route){\nthis.replaceAtIndex(route,this.state.presentedIndex-1);},\n\n\npopToTop:function(){\nthis.popToRoute(this.state.routeStack[0]);},\n\n\npopToRoute:function(route){\nvar indexOfRoute=this.state.routeStack.indexOf(route);\ninvariant(\nindexOfRoute!==-1,\n'Calling popToRoute for a route that doesn\\'t exist!');\n\nvar numToPop=this.state.presentedIndex-indexOfRoute;\nthis._popN(numToPop);},\n\n\nreplacePreviousAndPop:function(route){\nif(this.state.routeStack.length<2){\nreturn;}\n\nthis.replacePrevious(route);\nthis.pop();},\n\n\nresetTo:function(route){var _this9=this;\ninvariant(!!route,'Must supply route to push');\nthis.replaceAtIndex(route,0,function(){\n\n\nif(_this9.state.presentedIndex>0){\n_this9._popN(_this9.state.presentedIndex);}});},\n\n\n\n\ngetCurrentRoutes:function(){\n\nreturn this.state.routeStack.slice();},\n\n\n_cleanScenesPastIndex:function(index){\nvar newStackLength=index+1;\n\nif(newStackLength<this.state.routeStack.length){\nthis.setState({\nsceneConfigStack:this.state.sceneConfigStack.slice(0,newStackLength),\nrouteStack:this.state.routeStack.slice(0,newStackLength)});}},\n\n\n\n\n_renderScene:function(route,i){var _this10=this;\nvar disabledSceneStyle=null;\nvar disabledScenePointerEvents='auto';\nif(i!==this.state.presentedIndex){\ndisabledSceneStyle=styles.disabledScene;\ndisabledScenePointerEvents='none';}\n\nreturn (\nReact.createElement(View,{\nkey:'scene_'+getRouteID(route),\nref:'scene_'+i,\nonStartShouldSetResponderCapture:function(){\nreturn _this10.state.transitionFromIndex!=null||_this10.state.transitionFromIndex!=null;},\n\npointerEvents:disabledScenePointerEvents,\nstyle:[styles.baseScene,this.props.sceneStyle,disabledSceneStyle]},\nthis.props.renderScene(\nroute,\nthis)));},\n\n\n\n\n\n_renderNavigationBar:function(){var _this11=this;\nif(!this.props.navigationBar){\nreturn null;}\n\nreturn React.cloneElement(this.props.navigationBar,{\nref:function(navBar){_this11._navBar=navBar;},\nnavigator:this._navigationBarNavigator,\nnavState:this.state});},\n\n\n\nrender:function(){var _this12=this;\nvar newRenderedSceneMap=new Map();\nvar scenes=this.state.routeStack.map(function(route,index){\nvar renderedScene;\nif(_this12._renderedSceneMap.has(route)&&\nindex!==_this12.state.presentedIndex){\nrenderedScene=_this12._renderedSceneMap.get(route);}else \n{\nrenderedScene=_this12._renderScene(route,index);}\n\nnewRenderedSceneMap.set(route,renderedScene);\nreturn renderedScene;});\n\nthis._renderedSceneMap=newRenderedSceneMap;\nreturn (\nReact.createElement(View,{style:[styles.container,this.props.style]},\nReact.createElement(View,babelHelpers.extends({\nstyle:styles.transitioner},\nthis.panGesture.panHandlers,{\nonTouchStart:this._handleTouchStart,\nonResponderTerminationRequest:\nthis._handleResponderTerminationRequest}),\n\nscenes),\n\nthis._renderNavigationBar()));},\n\n\n\n\n_getNavigationContext:function(){\nif(!this._navigationContext){\nthis._navigationContext=new NavigationContext();}\n\nreturn this._navigationContext;}});\n\n\n\nmodule.exports=Navigator;\n});\n__d('InteractionMixin',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\nvar InteractionManager=require('InteractionManager');\n\n\n\n\n\n\nvar InteractionMixin={\ncomponentWillUnmount:function(){\nwhile(this._interactionMixinHandles.length){\nInteractionManager.clearInteractionHandle(\nthis._interactionMixinHandles.pop());}},\n\n\n\n\n_interactionMixinHandles:[],\n\ncreateInteractionHandle:function(){\nvar handle=InteractionManager.createInteractionHandle();\nthis._interactionMixinHandles.push(handle);\nreturn handle;},\n\n\nclearInteractionHandle:function(clearHandle){\nInteractionManager.clearInteractionHandle(clearHandle);\nthis._interactionMixinHandles=this._interactionMixinHandles.filter(\nfunction(handle){return handle!==clearHandle;});},\n\n\n\n\n\n\n\n\nrunAfterInteractions:function(callback){\nInteractionManager.runAfterInteractions(callback);}};\n\n\n\nmodule.exports=InteractionMixin;\n});\n__d('NavigationContext',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NavigationEvent=require('NavigationEvent');\nvar NavigationEventEmitter=require('NavigationEventEmitter');\nvar NavigationTreeNode=require('NavigationTreeNode');\n\nvar Set=require('Set');\n\nvar emptyFunction=require('emptyFunction');\nvar invariant=require('invariant');var \n\n\n\n\nAT_TARGET=\n\n\nNavigationEvent.AT_TARGET;var BUBBLING_PHASE=NavigationEvent.BUBBLING_PHASE;var CAPTURING_PHASE=NavigationEvent.CAPTURING_PHASE;\n\n\n\nvar LegacyEventTypes=new Set([\n'willfocus',\n'didfocus']);var \n\n\n\n\n\nNavigationContext=(function(){\n\n\n\n\n\n\n\nfunction NavigationContext(){babelHelpers.classCallCheck(this,NavigationContext);\nthis._bubbleEventEmitter=new NavigationEventEmitter(this);\nthis._captureEventEmitter=new NavigationEventEmitter(this);\nthis._currentRoute=null;\n\n\nthis.__node=new NavigationTreeNode(this);\n\nthis._emitCounter=0;\nthis._emitQueue=[];\n\nthis.addListener('willfocus',this._onFocus);\nthis.addListener('didfocus',this._onFocus);}babelHelpers.createClass(NavigationContext,[{key:'appendChild',value:function appendChild(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nchildContext){\nthis.__node.appendChild(childContext.__node);}},{key:'addListener',value:function addListener(\n\n\n\neventType,\nlistener,\nuseCapture)\n{\nif(LegacyEventTypes.has(eventType)){\nuseCapture=false;}\n\n\nvar emitter=useCapture?\nthis._captureEventEmitter:\nthis._bubbleEventEmitter;\n\nif(emitter){\nreturn emitter.addListener(eventType,listener,this);}else \n{\nreturn {remove:emptyFunction};}}},{key:'emit',value:function emit(\n\n\n\neventType,data,didEmitCallback){var _this=this;\nif(this._emitCounter>0){\n\n\nvar args=Array.prototype.slice.call(arguments);\nthis._emitQueue.push(args);\nreturn;}\n\n\nthis._emitCounter++;\n\nif(LegacyEventTypes.has(eventType)){\n\nthis.__emit(\neventType,\ndata,\nnull,\n{\ndefaultPrevented:false,\neventPhase:AT_TARGET,\npropagationStopped:true,\ntarget:this});}else \n\n\n{\nvar targets=[this];\nvar parentTarget=this.parent;\nwhile(parentTarget){\ntargets.unshift(parentTarget);\nparentTarget=parentTarget.parent;}\n\n\nvar propagationStopped=false;\nvar defaultPrevented=false;\nvar callback=function(event){\npropagationStopped=propagationStopped||event.isPropagationStopped();\ndefaultPrevented=defaultPrevented||event.defaultPrevented;};\n\n\n\ntargets.some(function(currentTarget){\nif(propagationStopped){\nreturn true;}\n\n\nvar extraInfo={\ndefaultPrevented:defaultPrevented,\neventPhase:CAPTURING_PHASE,\npropagationStopped:propagationStopped,\ntarget:_this};\n\n\ncurrentTarget.__emit(eventType,data,callback,extraInfo);},\nthis);\n\n\ntargets.reverse().some(function(currentTarget){\nif(propagationStopped){\nreturn true;}\n\nvar extraInfo={\ndefaultPrevented:defaultPrevented,\neventPhase:BUBBLING_PHASE,\npropagationStopped:propagationStopped,\ntarget:_this};\n\ncurrentTarget.__emit(eventType,data,callback,extraInfo);},\nthis);}\n\n\nif(didEmitCallback){\nvar event=NavigationEvent.pool(eventType,this,data);\npropagationStopped&&event.stopPropagation();\ndefaultPrevented&&event.preventDefault();\ndidEmitCallback.call(this,event);\nevent.dispose();}\n\n\nthis._emitCounter--;\nwhile(this._emitQueue.length){\nvar args=this._emitQueue.shift();\nthis.emit.apply(this,args);}}},{key:'dispose',value:function dispose()\n\n\n\n{\n\nthis._bubbleEventEmitter&&this._bubbleEventEmitter.removeAllListeners();\nthis._captureEventEmitter&&this._captureEventEmitter.removeAllListeners();\nthis._bubbleEventEmitter=null;\nthis._captureEventEmitter=null;\nthis._currentRoute=null;}},{key:'__emit',value:function __emit(\n\n\n\n\neventType,\ndata,\ndidEmitCallback,\nextraInfo)\n{\nvar emitter;\nswitch(extraInfo.eventPhase){\ncase CAPTURING_PHASE:\nemitter=this._captureEventEmitter;\nbreak;\n\ncase AT_TARGET:\nemitter=this._bubbleEventEmitter;\nbreak;\n\ncase BUBBLING_PHASE:\nemitter=this._bubbleEventEmitter;\nbreak;\n\ndefault:\ninvariant(false,'invalid event phase %s',extraInfo.eventPhase);}\n\n\nif(extraInfo.target===this){\n\nextraInfo.eventPhase=AT_TARGET;}\n\n\nif(emitter){\nemitter.emit(\neventType,\ndata,\ndidEmitCallback,\nextraInfo);}}},{key:'_onFocus',value:function _onFocus(\n\n\n\n\nevent){\ninvariant(\nevent.data&&event.data.hasOwnProperty('route'),\n'event type \"%s\" should provide route',\nevent.type);\n\n\nthis._currentRoute=event.data.route;}},{key:'parent',get:function(){var parent=this.__node.getParent();return parent?parent.getValue():null;}},{key:'top',get:function(){var result=null;var parentNode=this.__node.getParent();while(parentNode){result=parentNode.getValue();parentNode=parentNode.getParent();}return result;}},{key:'currentRoute',get:function(){return this._currentRoute;}}]);return NavigationContext;})();\n\n\n\nmodule.exports=NavigationContext;\n});\n__d('NavigationEvent',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');var \n\nNavigationEventPool=(function(){\n\n\nfunction NavigationEventPool(){babelHelpers.classCallCheck(this,NavigationEventPool);\nthis._list=[];}babelHelpers.createClass(NavigationEventPool,[{key:'get',value:function get(\n\n\ntype,currentTarget,data){\nvar event;\nif(this._list.length>0){\nevent=this._list.pop();\nevent.constructor.call(event,type,currentTarget,data);}else \n{\nevent=new NavigationEvent(type,currentTarget,data);}\n\nreturn event;}},{key:'put',value:function put(\n\n\nevent){\nthis._list.push(event);}}]);return NavigationEventPool;})();\n\n\n\nvar _navigationEventPool=new NavigationEventPool();var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nNavigationEvent=(function(){babelHelpers.createClass(NavigationEvent,null,[{key:'pool',value:function pool(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntype,currentTarget,data){\nreturn _navigationEventPool.get(type,currentTarget,data);}}]);\n\n\nfunction NavigationEvent(type,currentTarget,data){babelHelpers.classCallCheck(this,NavigationEvent);\nthis.target=currentTarget;\nthis.eventPhase=NavigationEvent.NONE;\n\nthis._type=type;\nthis._currentTarget=currentTarget;\nthis._data=data;\nthis._defaultPrevented=false;\nthis._disposed=false;\nthis._propagationStopped=false;}babelHelpers.createClass(NavigationEvent,[{key:'preventDefault',value:function preventDefault()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{\nthis._defaultPrevented=true;}},{key:'stopPropagation',value:function stopPropagation()\n\n\n{\nthis._propagationStopped=true;}},{key:'stop',value:function stop()\n\n\n{\nthis.preventDefault();\nthis.stopPropagation();}},{key:'isPropagationStopped',value:function isPropagationStopped()\n\n\n{\nreturn this._propagationStopped;}},{key:'dispose',value:function dispose()\n\n\n\n\n\n\n\n{\ninvariant(!this._disposed,'NavigationEvent is already disposed');\nthis._disposed=true;\n\n\nthis.target=null;\nthis.eventPhase=NavigationEvent.NONE;\nthis._type=null;\nthis._currentTarget=null;\nthis._data=null;\nthis._defaultPrevented=false;\n\n\n_navigationEventPool.put(this);}},{key:'type',get:function(){return this._type;}},{key:'currentTarget',get:function(){return this._currentTarget;}},{key:'data',get:function(){return this._data;}},{key:'defaultPrevented',get:function(){return this._defaultPrevented;}}]);return NavigationEvent;})();\n\n\n\n\n\n\n\n\n\n\nNavigationEvent.NONE=0;\n\n\nNavigationEvent.CAPTURING_PHASE=1;\n\n\n\nNavigationEvent.AT_TARGET=2;\n\n\n\n\n\nNavigationEvent.BUBBLING_PHASE=3;\n\nmodule.exports=NavigationEvent;\n});\n__d('NavigationEventEmitter',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventEmitter=require('EventEmitter');\nvar NavigationEvent=require('NavigationEvent');var \n\n\n\n\n\n\n\n\nNavigationEventEmitter=(function(_EventEmitter){babelHelpers.inherits(NavigationEventEmitter,_EventEmitter);\n\n\n\n\nfunction NavigationEventEmitter(target){babelHelpers.classCallCheck(this,NavigationEventEmitter);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(NavigationEventEmitter).call(this));\n\n_this._emitting=false;\n_this._emitQueue=[];\n_this._target=target;return _this;}babelHelpers.createClass(NavigationEventEmitter,[{key:'emit',value:function emit(\n\n\n\neventType,\ndata,\ndidEmitCallback,\nextraInfo)\n{\nif(this._emitting){\n\n\nvar args=Array.prototype.slice.call(arguments);\nthis._emitQueue.unshift(args);\nreturn;}\n\n\nthis._emitting=true;\n\nvar event=NavigationEvent.pool(eventType,this._target,data);\n\nif(extraInfo){\nif(extraInfo.target){\nevent.target=extraInfo.target;}\n\n\nif(extraInfo.eventPhase){\nevent.eventPhase=extraInfo.eventPhase;}\n\n\nif(extraInfo.defaultPrevented){\nevent.preventDefault();}\n\n\nif(extraInfo.propagationStopped){\nevent.stopPropagation();}}\n\n\n\n\n\nbabelHelpers.get(Object.getPrototypeOf(NavigationEventEmitter.prototype),'emit',this).call(this,String(eventType),event);\n\nif(typeof didEmitCallback==='function'){\ndidEmitCallback.call(this._target,event);}\n\nevent.dispose();\n\nthis._emitting=false;\n\nwhile(this._emitQueue.length){\nvar args=this._emitQueue.shift();\nthis.emit.apply(this,args);}}}]);return NavigationEventEmitter;})(EventEmitter);\n\n\n\n\nmodule.exports=NavigationEventEmitter;\n});\n__d('NavigationTreeNode',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\nvar immutable=require('immutable/dist/immutable.js');var \n\nList=immutable.List;var \n\n\n\n\n\n\nNavigationTreeNode=(function(){\n\n\n\n\n\n\nfunction NavigationTreeNode(value){babelHelpers.classCallCheck(this,NavigationTreeNode);\nthis.__parent=null;\nthis._children=new List();\nthis._value=value;}babelHelpers.createClass(NavigationTreeNode,[{key:'getValue',value:function getValue()\n\n\n{\nreturn this._value;}},{key:'getParent',value:function getParent()\n\n\n{\nreturn this.__parent;}},{key:'getChildrenCount',value:function getChildrenCount()\n\n\n{\nreturn this._children.size;}},{key:'getChildAt',value:function getChildAt(\n\n\nindex){\nreturn index>-1&&index<this._children.size?\nthis._children.get(index):\nnull;}},{key:'appendChild',value:function appendChild(\n\n\nchild){\nif(child.__parent){\nchild.__parent.removeChild(child);}\n\nchild.__parent=this;\nthis._children=this._children.push(child);}},{key:'removeChild',value:function removeChild(\n\n\nchild){\nvar index=this._children.indexOf(child);\n\ninvariant(\nindex>-1,\n'The node to be removed is not a child of this node.');\n\n\nchild.__parent=null;\n\nthis._children=this._children.splice(index,1);}},{key:'indexOf',value:function indexOf(\n\n\nchild){\nreturn this._children.indexOf(child);}},{key:'forEach',value:function forEach(\n\n\ncallback,context){\nthis._children.forEach(callback,context);}},{key:'map',value:function map(\n\n\ncallback,context){\nreturn this._children.map(callback,context).toJS();}},{key:'some',value:function some(\n\n\ncallback,context){\nreturn this._children.some(callback,context);}}]);return NavigationTreeNode;})();\n\n\n\n\nmodule.exports=NavigationTreeNode;\n});\n__d('immutable/dist/immutable.js',function(global, require, module, exports) {  (\n\n\n\n\n\n\n\n\nfunction(global,factory){\ntypeof exports==='object'&&typeof module!=='undefined'?module.exports=factory():\ntypeof define==='function'&&define.amd?define(factory):\nglobal.Immutable=factory();})(\nthis,function(){'use strict';var SLICE$0=Array.prototype.slice;\n\nfunction createClass(ctor,superClass){\nif(superClass){\nctor.prototype=Object.create(superClass.prototype);}\n\nctor.prototype.constructor=ctor;}\n\n\nfunction Iterable(value){\nreturn isIterable(value)?value:Seq(value);}\n\n\n\ncreateClass(KeyedIterable,Iterable);\nfunction KeyedIterable(value){\nreturn isKeyed(value)?value:KeyedSeq(value);}\n\n\n\ncreateClass(IndexedIterable,Iterable);\nfunction IndexedIterable(value){\nreturn isIndexed(value)?value:IndexedSeq(value);}\n\n\n\ncreateClass(SetIterable,Iterable);\nfunction SetIterable(value){\nreturn isIterable(value)&&!isAssociative(value)?value:SetSeq(value);}\n\n\n\n\nfunction isIterable(maybeIterable){\nreturn !!(maybeIterable&&maybeIterable[IS_ITERABLE_SENTINEL]);}\n\n\nfunction isKeyed(maybeKeyed){\nreturn !!(maybeKeyed&&maybeKeyed[IS_KEYED_SENTINEL]);}\n\n\nfunction isIndexed(maybeIndexed){\nreturn !!(maybeIndexed&&maybeIndexed[IS_INDEXED_SENTINEL]);}\n\n\nfunction isAssociative(maybeAssociative){\nreturn isKeyed(maybeAssociative)||isIndexed(maybeAssociative);}\n\n\nfunction isOrdered(maybeOrdered){\nreturn !!(maybeOrdered&&maybeOrdered[IS_ORDERED_SENTINEL]);}\n\n\nIterable.isIterable=isIterable;\nIterable.isKeyed=isKeyed;\nIterable.isIndexed=isIndexed;\nIterable.isAssociative=isAssociative;\nIterable.isOrdered=isOrdered;\n\nIterable.Keyed=KeyedIterable;\nIterable.Indexed=IndexedIterable;\nIterable.Set=SetIterable;\n\n\nvar IS_ITERABLE_SENTINEL='@@__IMMUTABLE_ITERABLE__@@';\nvar IS_KEYED_SENTINEL='@@__IMMUTABLE_KEYED__@@';\nvar IS_INDEXED_SENTINEL='@@__IMMUTABLE_INDEXED__@@';\nvar IS_ORDERED_SENTINEL='@@__IMMUTABLE_ORDERED__@@';\n\n\nvar DELETE='delete';\n\n\nvar SHIFT=5;\nvar SIZE=1<<SHIFT;\nvar MASK=SIZE-1;\n\n\n\nvar NOT_SET={};\n\n\nvar CHANGE_LENGTH={value:false};\nvar DID_ALTER={value:false};\n\nfunction MakeRef(ref){\nref.value=false;\nreturn ref;}\n\n\nfunction SetRef(ref){\nref&&(ref.value=true);}\n\n\n\n\n\nfunction OwnerID(){}\n\n\nfunction arrCopy(arr,offset){\noffset=offset||0;\nvar len=Math.max(0,arr.length-offset);\nvar newArr=new Array(len);\nfor(var ii=0;ii<len;ii++){\nnewArr[ii]=arr[ii+offset];}\n\nreturn newArr;}\n\n\nfunction ensureSize(iter){\nif(iter.size===undefined){\niter.size=iter.__iterate(returnTrue);}\n\nreturn iter.size;}\n\n\nfunction wrapIndex(iter,index){\n\n\n\n\n\n\n\nif(typeof index!=='number'){\nvar uint32Index=index>>>0;\nif(''+uint32Index!==index||uint32Index===4294967295){\nreturn NaN;}\n\nindex=uint32Index;}\n\nreturn index<0?ensureSize(iter)+index:index;}\n\n\nfunction returnTrue(){\nreturn true;}\n\n\nfunction wholeSlice(begin,end,size){\nreturn (begin===0||size!==undefined&&begin<=-size)&&(\nend===undefined||size!==undefined&&end>=size);}\n\n\nfunction resolveBegin(begin,size){\nreturn resolveIndex(begin,size,0);}\n\n\nfunction resolveEnd(end,size){\nreturn resolveIndex(end,size,size);}\n\n\nfunction resolveIndex(index,size,defaultIndex){\nreturn index===undefined?\ndefaultIndex:\nindex<0?\nMath.max(0,size+index):\nsize===undefined?\nindex:\nMath.min(size,index);}\n\n\n\n\nvar ITERATE_KEYS=0;\nvar ITERATE_VALUES=1;\nvar ITERATE_ENTRIES=2;\n\nvar REAL_ITERATOR_SYMBOL=typeof Symbol==='function'&&Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL='@@iterator';\n\nvar ITERATOR_SYMBOL=REAL_ITERATOR_SYMBOL||FAUX_ITERATOR_SYMBOL;\n\n\nfunction Iterator(next){\nthis.next=next;}\n\n\nIterator.prototype.toString=function(){\nreturn '[Iterator]';};\n\n\n\nIterator.KEYS=ITERATE_KEYS;\nIterator.VALUES=ITERATE_VALUES;\nIterator.ENTRIES=ITERATE_ENTRIES;\n\nIterator.prototype.inspect=\nIterator.prototype.toSource=function(){return this.toString();};\nIterator.prototype[ITERATOR_SYMBOL]=function(){\nreturn this;};\n\n\n\nfunction iteratorValue(type,k,v,iteratorResult){\nvar value=type===0?k:type===1?v:[k,v];\niteratorResult?iteratorResult.value=value:iteratorResult={\nvalue:value,done:false};\n\nreturn iteratorResult;}\n\n\nfunction iteratorDone(){\nreturn {value:undefined,done:true};}\n\n\nfunction hasIterator(maybeIterable){\nreturn !!getIteratorFn(maybeIterable);}\n\n\nfunction isIterator(maybeIterator){\nreturn maybeIterator&&typeof maybeIterator.next==='function';}\n\n\nfunction getIterator(iterable){\nvar iteratorFn=getIteratorFn(iterable);\nreturn iteratorFn&&iteratorFn.call(iterable);}\n\n\nfunction getIteratorFn(iterable){\nvar iteratorFn=iterable&&(\nREAL_ITERATOR_SYMBOL&&iterable[REAL_ITERATOR_SYMBOL]||\niterable[FAUX_ITERATOR_SYMBOL]);\n\nif(typeof iteratorFn==='function'){\nreturn iteratorFn;}}\n\n\n\nfunction isArrayLike(value){\nreturn value&&typeof value.length==='number';}\n\n\ncreateClass(Seq,Iterable);\nfunction Seq(value){\nreturn value===null||value===undefined?emptySequence():\nisIterable(value)?value.toSeq():seqFromValue(value);}\n\n\nSeq.of=function(){\nreturn Seq(arguments);};\n\n\nSeq.prototype.toSeq=function(){\nreturn this;};\n\n\nSeq.prototype.toString=function(){\nreturn this.__toString('Seq {','}');};\n\n\nSeq.prototype.cacheResult=function(){\nif(!this._cache&&this.__iterateUncached){\nthis._cache=this.entrySeq().toArray();\nthis.size=this._cache.length;}\n\nreturn this;};\n\n\n\n\nSeq.prototype.__iterate=function(fn,reverse){\nreturn seqIterate(this,fn,reverse,true);};\n\n\n\n\nSeq.prototype.__iterator=function(type,reverse){\nreturn seqIterator(this,type,reverse,true);};\n\n\n\n\ncreateClass(KeyedSeq,Seq);\nfunction KeyedSeq(value){\nreturn value===null||value===undefined?\nemptySequence().toKeyedSeq():\nisIterable(value)?\nisKeyed(value)?value.toSeq():value.fromEntrySeq():\nkeyedSeqFromValue(value);}\n\n\nKeyedSeq.prototype.toKeyedSeq=function(){\nreturn this;};\n\n\n\n\ncreateClass(IndexedSeq,Seq);\nfunction IndexedSeq(value){\nreturn value===null||value===undefined?emptySequence():\n!isIterable(value)?indexedSeqFromValue(value):\nisKeyed(value)?value.entrySeq():value.toIndexedSeq();}\n\n\nIndexedSeq.of=function(){\nreturn IndexedSeq(arguments);};\n\n\nIndexedSeq.prototype.toIndexedSeq=function(){\nreturn this;};\n\n\nIndexedSeq.prototype.toString=function(){\nreturn this.__toString('Seq [',']');};\n\n\nIndexedSeq.prototype.__iterate=function(fn,reverse){\nreturn seqIterate(this,fn,reverse,false);};\n\n\nIndexedSeq.prototype.__iterator=function(type,reverse){\nreturn seqIterator(this,type,reverse,false);};\n\n\n\n\ncreateClass(SetSeq,Seq);\nfunction SetSeq(value){\nreturn (\nvalue===null||value===undefined?emptySequence():\n!isIterable(value)?indexedSeqFromValue(value):\nisKeyed(value)?value.entrySeq():value).\ntoSetSeq();}\n\n\nSetSeq.of=function(){\nreturn SetSeq(arguments);};\n\n\nSetSeq.prototype.toSetSeq=function(){\nreturn this;};\n\n\n\n\nSeq.isSeq=isSeq;\nSeq.Keyed=KeyedSeq;\nSeq.Set=SetSeq;\nSeq.Indexed=IndexedSeq;\n\nvar IS_SEQ_SENTINEL='@@__IMMUTABLE_SEQ__@@';\n\nSeq.prototype[IS_SEQ_SENTINEL]=true;\n\n\n\ncreateClass(ArraySeq,IndexedSeq);\nfunction ArraySeq(array){\nthis._array=array;\nthis.size=array.length;}\n\n\nArraySeq.prototype.get=function(index,notSetValue){\nreturn this.has(index)?this._array[wrapIndex(this,index)]:notSetValue;};\n\n\nArraySeq.prototype.__iterate=function(fn,reverse){\nvar array=this._array;\nvar maxIndex=array.length-1;\nfor(var ii=0;ii<=maxIndex;ii++){\nif(fn(array[reverse?maxIndex-ii:ii],ii,this)===false){\nreturn ii+1;}}\n\n\nreturn ii;};\n\n\nArraySeq.prototype.__iterator=function(type,reverse){\nvar array=this._array;\nvar maxIndex=array.length-1;\nvar ii=0;\nreturn new Iterator(function()\n{return ii>maxIndex?\niteratorDone():\niteratorValue(type,ii,array[reverse?maxIndex-ii++:ii++]);});};\n\n\n\n\n\ncreateClass(ObjectSeq,KeyedSeq);\nfunction ObjectSeq(object){\nvar keys=Object.keys(object);\nthis._object=object;\nthis._keys=keys;\nthis.size=keys.length;}\n\n\nObjectSeq.prototype.get=function(key,notSetValue){\nif(notSetValue!==undefined&&!this.has(key)){\nreturn notSetValue;}\n\nreturn this._object[key];};\n\n\nObjectSeq.prototype.has=function(key){\nreturn this._object.hasOwnProperty(key);};\n\n\nObjectSeq.prototype.__iterate=function(fn,reverse){\nvar object=this._object;\nvar keys=this._keys;\nvar maxIndex=keys.length-1;\nfor(var ii=0;ii<=maxIndex;ii++){\nvar key=keys[reverse?maxIndex-ii:ii];\nif(fn(object[key],key,this)===false){\nreturn ii+1;}}\n\n\nreturn ii;};\n\n\nObjectSeq.prototype.__iterator=function(type,reverse){\nvar object=this._object;\nvar keys=this._keys;\nvar maxIndex=keys.length-1;\nvar ii=0;\nreturn new Iterator(function(){\nvar key=keys[reverse?maxIndex-ii:ii];\nreturn ii++>maxIndex?\niteratorDone():\niteratorValue(type,key,object[key]);});};\n\n\n\nObjectSeq.prototype[IS_ORDERED_SENTINEL]=true;\n\n\ncreateClass(IterableSeq,IndexedSeq);\nfunction IterableSeq(iterable){\nthis._iterable=iterable;\nthis.size=iterable.length||iterable.size;}\n\n\nIterableSeq.prototype.__iterateUncached=function(fn,reverse){\nif(reverse){\nreturn this.cacheResult().__iterate(fn,reverse);}\n\nvar iterable=this._iterable;\nvar iterator=getIterator(iterable);\nvar iterations=0;\nif(isIterator(iterator)){\nvar step;\nwhile(!(step=iterator.next()).done){\nif(fn(step.value,iterations++,this)===false){\nbreak;}}}\n\n\n\nreturn iterations;};\n\n\nIterableSeq.prototype.__iteratorUncached=function(type,reverse){\nif(reverse){\nreturn this.cacheResult().__iterator(type,reverse);}\n\nvar iterable=this._iterable;\nvar iterator=getIterator(iterable);\nif(!isIterator(iterator)){\nreturn new Iterator(iteratorDone);}\n\nvar iterations=0;\nreturn new Iterator(function(){\nvar step=iterator.next();\nreturn step.done?step:iteratorValue(type,iterations++,step.value);});};\n\n\n\n\n\ncreateClass(IteratorSeq,IndexedSeq);\nfunction IteratorSeq(iterator){\nthis._iterator=iterator;\nthis._iteratorCache=[];}\n\n\nIteratorSeq.prototype.__iterateUncached=function(fn,reverse){\nif(reverse){\nreturn this.cacheResult().__iterate(fn,reverse);}\n\nvar iterator=this._iterator;\nvar cache=this._iteratorCache;\nvar iterations=0;\nwhile(iterations<cache.length){\nif(fn(cache[iterations],iterations++,this)===false){\nreturn iterations;}}\n\n\nvar step;\nwhile(!(step=iterator.next()).done){\nvar val=step.value;\ncache[iterations]=val;\nif(fn(val,iterations++,this)===false){\nbreak;}}\n\n\nreturn iterations;};\n\n\nIteratorSeq.prototype.__iteratorUncached=function(type,reverse){\nif(reverse){\nreturn this.cacheResult().__iterator(type,reverse);}\n\nvar iterator=this._iterator;\nvar cache=this._iteratorCache;\nvar iterations=0;\nreturn new Iterator(function(){\nif(iterations>=cache.length){\nvar step=iterator.next();\nif(step.done){\nreturn step;}\n\ncache[iterations]=step.value;}\n\nreturn iteratorValue(type,iterations,cache[iterations++]);});};\n\n\n\n\n\n\n\n\nfunction isSeq(maybeSeq){\nreturn !!(maybeSeq&&maybeSeq[IS_SEQ_SENTINEL]);}\n\n\nvar EMPTY_SEQ;\n\nfunction emptySequence(){\nreturn EMPTY_SEQ||(EMPTY_SEQ=new ArraySeq([]));}\n\n\nfunction keyedSeqFromValue(value){\nvar seq=\nArray.isArray(value)?new ArraySeq(value).fromEntrySeq():\nisIterator(value)?new IteratorSeq(value).fromEntrySeq():\nhasIterator(value)?new IterableSeq(value).fromEntrySeq():\ntypeof value==='object'?new ObjectSeq(value):\nundefined;\nif(!seq){\nthrow new TypeError(\n'Expected Array or iterable object of [k, v] entries, '+\n'or keyed object: '+value);}\n\n\nreturn seq;}\n\n\nfunction indexedSeqFromValue(value){\nvar seq=maybeIndexedSeqFromValue(value);\nif(!seq){\nthrow new TypeError(\n'Expected Array or iterable object of values: '+value);}\n\n\nreturn seq;}\n\n\nfunction seqFromValue(value){\nvar seq=maybeIndexedSeqFromValue(value)||\ntypeof value==='object'&&new ObjectSeq(value);\nif(!seq){\nthrow new TypeError(\n'Expected Array or iterable object of values, or keyed object: '+value);}\n\n\nreturn seq;}\n\n\nfunction maybeIndexedSeqFromValue(value){\nreturn (\nisArrayLike(value)?new ArraySeq(value):\nisIterator(value)?new IteratorSeq(value):\nhasIterator(value)?new IterableSeq(value):\nundefined);}\n\n\n\nfunction seqIterate(seq,fn,reverse,useKeys){\nvar cache=seq._cache;\nif(cache){\nvar maxIndex=cache.length-1;\nfor(var ii=0;ii<=maxIndex;ii++){\nvar entry=cache[reverse?maxIndex-ii:ii];\nif(fn(entry[1],useKeys?entry[0]:ii,seq)===false){\nreturn ii+1;}}\n\n\nreturn ii;}\n\nreturn seq.__iterateUncached(fn,reverse);}\n\n\nfunction seqIterator(seq,type,reverse,useKeys){\nvar cache=seq._cache;\nif(cache){\nvar maxIndex=cache.length-1;\nvar ii=0;\nreturn new Iterator(function(){\nvar entry=cache[reverse?maxIndex-ii:ii];\nreturn ii++>maxIndex?\niteratorDone():\niteratorValue(type,useKeys?entry[0]:ii-1,entry[1]);});}\n\n\nreturn seq.__iteratorUncached(type,reverse);}\n\n\nfunction fromJS(json,converter){\nreturn converter?\nfromJSWith(converter,json,'',{'':json}):\nfromJSDefault(json);}\n\n\nfunction fromJSWith(converter,json,key,parentJSON){\nif(Array.isArray(json)){\nreturn converter.call(parentJSON,key,IndexedSeq(json).map(function(v,k){return fromJSWith(converter,v,k,json);}));}\n\nif(isPlainObj(json)){\nreturn converter.call(parentJSON,key,KeyedSeq(json).map(function(v,k){return fromJSWith(converter,v,k,json);}));}\n\nreturn json;}\n\n\nfunction fromJSDefault(json){\nif(Array.isArray(json)){\nreturn IndexedSeq(json).map(fromJSDefault).toList();}\n\nif(isPlainObj(json)){\nreturn KeyedSeq(json).map(fromJSDefault).toMap();}\n\nreturn json;}\n\n\nfunction isPlainObj(value){\nreturn value&&(value.constructor===Object||value.constructor===undefined);}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction is(valueA,valueB){\nif(valueA===valueB||valueA!==valueA&&valueB!==valueB){\nreturn true;}\n\nif(!valueA||!valueB){\nreturn false;}\n\nif(typeof valueA.valueOf==='function'&&\ntypeof valueB.valueOf==='function'){\nvalueA=valueA.valueOf();\nvalueB=valueB.valueOf();\nif(valueA===valueB||valueA!==valueA&&valueB!==valueB){\nreturn true;}\n\nif(!valueA||!valueB){\nreturn false;}}\n\n\nif(typeof valueA.equals==='function'&&\ntypeof valueB.equals==='function'&&\nvalueA.equals(valueB)){\nreturn true;}\n\nreturn false;}\n\n\nfunction deepEqual(a,b){\nif(a===b){\nreturn true;}\n\n\nif(\n!isIterable(b)||\na.size!==undefined&&b.size!==undefined&&a.size!==b.size||\na.__hash!==undefined&&b.__hash!==undefined&&a.__hash!==b.__hash||\nisKeyed(a)!==isKeyed(b)||\nisIndexed(a)!==isIndexed(b)||\nisOrdered(a)!==isOrdered(b))\n{\nreturn false;}\n\n\nif(a.size===0&&b.size===0){\nreturn true;}\n\n\nvar notAssociative=!isAssociative(a);\n\nif(isOrdered(a)){\nvar entries=a.entries();\nreturn b.every(function(v,k){\nvar entry=entries.next().value;\nreturn entry&&is(entry[1],v)&&(notAssociative||is(entry[0],k));})&&\nentries.next().done;}\n\n\nvar flipped=false;\n\nif(a.size===undefined){\nif(b.size===undefined){\nif(typeof a.cacheResult==='function'){\na.cacheResult();}}else \n\n{\nflipped=true;\nvar _=a;\na=b;\nb=_;}}\n\n\n\nvar allEqual=true;\nvar bSize=b.__iterate(function(v,k){\nif(notAssociative?!a.has(v):\nflipped?!is(v,a.get(k,NOT_SET)):!is(a.get(k,NOT_SET),v)){\nallEqual=false;\nreturn false;}});\n\n\n\nreturn allEqual&&a.size===bSize;}\n\n\ncreateClass(Repeat,IndexedSeq);\n\nfunction Repeat(value,times){\nif(!(this instanceof Repeat)){\nreturn new Repeat(value,times);}\n\nthis._value=value;\nthis.size=times===undefined?Infinity:Math.max(0,times);\nif(this.size===0){\nif(EMPTY_REPEAT){\nreturn EMPTY_REPEAT;}\n\nEMPTY_REPEAT=this;}}\n\n\n\nRepeat.prototype.toString=function(){\nif(this.size===0){\nreturn 'Repeat []';}\n\nreturn 'Repeat [ '+this._value+' '+this.size+' times ]';};\n\n\nRepeat.prototype.get=function(index,notSetValue){\nreturn this.has(index)?this._value:notSetValue;};\n\n\nRepeat.prototype.includes=function(searchValue){\nreturn is(this._value,searchValue);};\n\n\nRepeat.prototype.slice=function(begin,end){\nvar size=this.size;\nreturn wholeSlice(begin,end,size)?this:\nnew Repeat(this._value,resolveEnd(end,size)-resolveBegin(begin,size));};\n\n\nRepeat.prototype.reverse=function(){\nreturn this;};\n\n\nRepeat.prototype.indexOf=function(searchValue){\nif(is(this._value,searchValue)){\nreturn 0;}\n\nreturn -1;};\n\n\nRepeat.prototype.lastIndexOf=function(searchValue){\nif(is(this._value,searchValue)){\nreturn this.size;}\n\nreturn -1;};\n\n\nRepeat.prototype.__iterate=function(fn,reverse){\nfor(var ii=0;ii<this.size;ii++){\nif(fn(this._value,ii,this)===false){\nreturn ii+1;}}\n\n\nreturn ii;};\n\n\nRepeat.prototype.__iterator=function(type,reverse){var this$0=this;\nvar ii=0;\nreturn new Iterator(function()\n{return ii<this$0.size?iteratorValue(type,ii++,this$0._value):iteratorDone();});};\n\n\n\nRepeat.prototype.equals=function(other){\nreturn other instanceof Repeat?\nis(this._value,other._value):\ndeepEqual(other);};\n\n\n\nvar EMPTY_REPEAT;\n\nfunction invariant(condition,error){\nif(!condition)throw new Error(error);}\n\n\ncreateClass(Range,IndexedSeq);\n\nfunction Range(start,end,step){\nif(!(this instanceof Range)){\nreturn new Range(start,end,step);}\n\ninvariant(step!==0,'Cannot step a Range by 0');\nstart=start||0;\nif(end===undefined){\nend=Infinity;}\n\nstep=step===undefined?1:Math.abs(step);\nif(end<start){\nstep=-step;}\n\nthis._start=start;\nthis._end=end;\nthis._step=step;\nthis.size=Math.max(0,Math.ceil((end-start)/step-1)+1);\nif(this.size===0){\nif(EMPTY_RANGE){\nreturn EMPTY_RANGE;}\n\nEMPTY_RANGE=this;}}\n\n\n\nRange.prototype.toString=function(){\nif(this.size===0){\nreturn 'Range []';}\n\nreturn 'Range [ '+\nthis._start+'...'+this._end+(\nthis._step>1?' by '+this._step:'')+\n' ]';};\n\n\nRange.prototype.get=function(index,notSetValue){\nreturn this.has(index)?\nthis._start+wrapIndex(this,index)*this._step:\nnotSetValue;};\n\n\nRange.prototype.includes=function(searchValue){\nvar possibleIndex=(searchValue-this._start)/this._step;\nreturn possibleIndex>=0&&\npossibleIndex<this.size&&\npossibleIndex===Math.floor(possibleIndex);};\n\n\nRange.prototype.slice=function(begin,end){\nif(wholeSlice(begin,end,this.size)){\nreturn this;}\n\nbegin=resolveBegin(begin,this.size);\nend=resolveEnd(end,this.size);\nif(end<=begin){\nreturn new Range(0,0);}\n\nreturn new Range(this.get(begin,this._end),this.get(end,this._end),this._step);};\n\n\nRange.prototype.indexOf=function(searchValue){\nvar offsetValue=searchValue-this._start;\nif(offsetValue%this._step===0){\nvar index=offsetValue/this._step;\nif(index>=0&&index<this.size){\nreturn index;}}\n\n\nreturn -1;};\n\n\nRange.prototype.lastIndexOf=function(searchValue){\nreturn this.indexOf(searchValue);};\n\n\nRange.prototype.__iterate=function(fn,reverse){\nvar maxIndex=this.size-1;\nvar step=this._step;\nvar value=reverse?this._start+maxIndex*step:this._start;\nfor(var ii=0;ii<=maxIndex;ii++){\nif(fn(value,ii,this)===false){\nreturn ii+1;}\n\nvalue+=reverse?-step:step;}\n\nreturn ii;};\n\n\nRange.prototype.__iterator=function(type,reverse){\nvar maxIndex=this.size-1;\nvar step=this._step;\nvar value=reverse?this._start+maxIndex*step:this._start;\nvar ii=0;\nreturn new Iterator(function(){\nvar v=value;\nvalue+=reverse?-step:step;\nreturn ii>maxIndex?iteratorDone():iteratorValue(type,ii++,v);});};\n\n\n\nRange.prototype.equals=function(other){\nreturn other instanceof Range?\nthis._start===other._start&&\nthis._end===other._end&&\nthis._step===other._step:\ndeepEqual(this,other);};\n\n\n\nvar EMPTY_RANGE;\n\ncreateClass(Collection,Iterable);\nfunction Collection(){\nthrow TypeError('Abstract');}\n\n\n\ncreateClass(KeyedCollection,Collection);function KeyedCollection(){}\n\ncreateClass(IndexedCollection,Collection);function IndexedCollection(){}\n\ncreateClass(SetCollection,Collection);function SetCollection(){}\n\n\nCollection.Keyed=KeyedCollection;\nCollection.Indexed=IndexedCollection;\nCollection.Set=SetCollection;\n\nvar imul=\ntypeof Math.imul==='function'&&Math.imul(0xffffffff,2)===-2?\nMath.imul:\nfunction imul(a,b){\na=a|0;\nb=b|0;\nvar c=a&0xffff;\nvar d=b&0xffff;\n\nreturn c*d+((a>>>16)*d+c*(b>>>16)<<16>>>0)|0;};\n\n\n\n\n\n\nfunction smi(i32){\nreturn i32>>>1&0x40000000|i32&0xBFFFFFFF;}\n\n\nfunction hash(o){\nif(o===false||o===null||o===undefined){\nreturn 0;}\n\nif(typeof o.valueOf==='function'){\no=o.valueOf();\nif(o===false||o===null||o===undefined){\nreturn 0;}}\n\n\nif(o===true){\nreturn 1;}\n\nvar type=typeof o;\nif(type==='number'){\nvar h=o|0;\nif(h!==o){\nh^=o*0xFFFFFFFF;}\n\nwhile(o>0xFFFFFFFF){\no/=0xFFFFFFFF;\nh^=o;}\n\nreturn smi(h);}\n\nif(type==='string'){\nreturn o.length>STRING_HASH_CACHE_MIN_STRLEN?cachedHashString(o):hashString(o);}\n\nif(typeof o.hashCode==='function'){\nreturn o.hashCode();}\n\nif(type==='object'){\nreturn hashJSObj(o);}\n\nif(typeof o.toString==='function'){\nreturn hashString(o.toString());}\n\nthrow new Error('Value type '+type+' cannot be hashed.');}\n\n\nfunction cachedHashString(string){\nvar hash=stringHashCache[string];\nif(hash===undefined){\nhash=hashString(string);\nif(STRING_HASH_CACHE_SIZE===STRING_HASH_CACHE_MAX_SIZE){\nSTRING_HASH_CACHE_SIZE=0;\nstringHashCache={};}\n\nSTRING_HASH_CACHE_SIZE++;\nstringHashCache[string]=hash;}\n\nreturn hash;}\n\n\n\nfunction hashString(string){\n\n\n\n\n\n\nvar hash=0;\nfor(var ii=0;ii<string.length;ii++){\nhash=31*hash+string.charCodeAt(ii)|0;}\n\nreturn smi(hash);}\n\n\nfunction hashJSObj(obj){\nvar hash;\nif(usingWeakMap){\nhash=weakMap.get(obj);\nif(hash!==undefined){\nreturn hash;}}\n\n\n\nhash=obj[UID_HASH_KEY];\nif(hash!==undefined){\nreturn hash;}\n\n\nif(!canDefineProperty){\nhash=obj.propertyIsEnumerable&&obj.propertyIsEnumerable[UID_HASH_KEY];\nif(hash!==undefined){\nreturn hash;}\n\n\nhash=getIENodeHash(obj);\nif(hash!==undefined){\nreturn hash;}}\n\n\n\nhash=++objHashUID;\nif(objHashUID&0x40000000){\nobjHashUID=0;}\n\n\nif(usingWeakMap){\nweakMap.set(obj,hash);}else \nif(isExtensible!==undefined&&isExtensible(obj)===false){\nthrow new Error('Non-extensible objects are not allowed as keys.');}else \nif(canDefineProperty){\nObject.defineProperty(obj,UID_HASH_KEY,{\n'enumerable':false,\n'configurable':false,\n'writable':false,\n'value':hash});}else \n\nif(obj.propertyIsEnumerable!==undefined&&\nobj.propertyIsEnumerable===obj.constructor.prototype.propertyIsEnumerable){\n\n\n\n\nobj.propertyIsEnumerable=function(){\nreturn this.constructor.prototype.propertyIsEnumerable.apply(this,arguments);};\n\nobj.propertyIsEnumerable[UID_HASH_KEY]=hash;}else \nif(obj.nodeType!==undefined){\n\n\n\n\nobj[UID_HASH_KEY]=hash;}else \n{\nthrow new Error('Unable to set a non-enumerable property on object.');}\n\n\nreturn hash;}\n\n\n\nvar isExtensible=Object.isExtensible;\n\n\nvar canDefineProperty=(function(){\ntry{\nObject.defineProperty({},'@',{});\nreturn true;}\ncatch(e) {\nreturn false;}})();\n\n\n\n\n\nfunction getIENodeHash(node){\nif(node&&node.nodeType>0){\nswitch(node.nodeType){\ncase 1:\nreturn node.uniqueID;\ncase 9:\nreturn node.documentElement&&node.documentElement.uniqueID;}}}\n\n\n\n\n\nvar usingWeakMap=typeof WeakMap==='function';\nvar weakMap;\nif(usingWeakMap){\nweakMap=new WeakMap();}\n\n\nvar objHashUID=0;\n\nvar UID_HASH_KEY='__immutablehash__';\nif(typeof Symbol==='function'){\nUID_HASH_KEY=Symbol(UID_HASH_KEY);}\n\n\nvar STRING_HASH_CACHE_MIN_STRLEN=16;\nvar STRING_HASH_CACHE_MAX_SIZE=255;\nvar STRING_HASH_CACHE_SIZE=0;\nvar stringHashCache={};\n\nfunction assertNotInfinite(size){\ninvariant(\nsize!==Infinity,\n'Cannot perform this action with an infinite size.');}\n\n\n\ncreateClass(Map,KeyedCollection);\n\n\n\nfunction Map(value){\nreturn value===null||value===undefined?emptyMap():\nisMap(value)&&!isOrdered(value)?value:\nemptyMap().withMutations(function(map){\nvar iter=KeyedIterable(value);\nassertNotInfinite(iter.size);\niter.forEach(function(v,k){return map.set(k,v);});});}\n\n\n\nMap.prototype.toString=function(){\nreturn this.__toString('Map {','}');};\n\n\n\n\nMap.prototype.get=function(k,notSetValue){\nreturn this._root?\nthis._root.get(0,undefined,k,notSetValue):\nnotSetValue;};\n\n\n\n\nMap.prototype.set=function(k,v){\nreturn updateMap(this,k,v);};\n\n\nMap.prototype.setIn=function(keyPath,v){\nreturn this.updateIn(keyPath,NOT_SET,function(){return v;});};\n\n\nMap.prototype.remove=function(k){\nreturn updateMap(this,k,NOT_SET);};\n\n\nMap.prototype.deleteIn=function(keyPath){\nreturn this.updateIn(keyPath,function(){return NOT_SET;});};\n\n\nMap.prototype.update=function(k,notSetValue,updater){\nreturn arguments.length===1?\nk(this):\nthis.updateIn([k],notSetValue,updater);};\n\n\nMap.prototype.updateIn=function(keyPath,notSetValue,updater){\nif(!updater){\nupdater=notSetValue;\nnotSetValue=undefined;}\n\nvar updatedValue=updateInDeepMap(\nthis,\nforceIterator(keyPath),\nnotSetValue,\nupdater);\n\nreturn updatedValue===NOT_SET?undefined:updatedValue;};\n\n\nMap.prototype.clear=function(){\nif(this.size===0){\nreturn this;}\n\nif(this.__ownerID){\nthis.size=0;\nthis._root=null;\nthis.__hash=undefined;\nthis.__altered=true;\nreturn this;}\n\nreturn emptyMap();};\n\n\n\n\nMap.prototype.merge=function(){\nreturn mergeIntoMapWith(this,undefined,arguments);};\n\n\nMap.prototype.mergeWith=function(merger){var iters=SLICE$0.call(arguments,1);\nreturn mergeIntoMapWith(this,merger,iters);};\n\n\nMap.prototype.mergeIn=function(keyPath){var iters=SLICE$0.call(arguments,1);\nreturn this.updateIn(\nkeyPath,\nemptyMap(),\nfunction(m){return typeof m.merge==='function'?\nm.merge.apply(m,iters):\niters[iters.length-1];});};\n\n\n\nMap.prototype.mergeDeep=function(){\nreturn mergeIntoMapWith(this,deepMerger,arguments);};\n\n\nMap.prototype.mergeDeepWith=function(merger){var iters=SLICE$0.call(arguments,1);\nreturn mergeIntoMapWith(this,deepMergerWith(merger),iters);};\n\n\nMap.prototype.mergeDeepIn=function(keyPath){var iters=SLICE$0.call(arguments,1);\nreturn this.updateIn(\nkeyPath,\nemptyMap(),\nfunction(m){return typeof m.mergeDeep==='function'?\nm.mergeDeep.apply(m,iters):\niters[iters.length-1];});};\n\n\n\nMap.prototype.sort=function(comparator){\n\nreturn OrderedMap(sortFactory(this,comparator));};\n\n\nMap.prototype.sortBy=function(mapper,comparator){\n\nreturn OrderedMap(sortFactory(this,comparator,mapper));};\n\n\n\n\nMap.prototype.withMutations=function(fn){\nvar mutable=this.asMutable();\nfn(mutable);\nreturn mutable.wasAltered()?mutable.__ensureOwner(this.__ownerID):this;};\n\n\nMap.prototype.asMutable=function(){\nreturn this.__ownerID?this:this.__ensureOwner(new OwnerID());};\n\n\nMap.prototype.asImmutable=function(){\nreturn this.__ensureOwner();};\n\n\nMap.prototype.wasAltered=function(){\nreturn this.__altered;};\n\n\nMap.prototype.__iterator=function(type,reverse){\nreturn new MapIterator(this,type,reverse);};\n\n\nMap.prototype.__iterate=function(fn,reverse){var this$0=this;\nvar iterations=0;\nthis._root&&this._root.iterate(function(entry){\niterations++;\nreturn fn(entry[1],entry[0],this$0);},\nreverse);\nreturn iterations;};\n\n\nMap.prototype.__ensureOwner=function(ownerID){\nif(ownerID===this.__ownerID){\nreturn this;}\n\nif(!ownerID){\nthis.__ownerID=ownerID;\nthis.__altered=false;\nreturn this;}\n\nreturn makeMap(this.size,this._root,ownerID,this.__hash);};\n\n\n\nfunction isMap(maybeMap){\nreturn !!(maybeMap&&maybeMap[IS_MAP_SENTINEL]);}\n\n\nMap.isMap=isMap;\n\nvar IS_MAP_SENTINEL='@@__IMMUTABLE_MAP__@@';\n\nvar MapPrototype=Map.prototype;\nMapPrototype[IS_MAP_SENTINEL]=true;\nMapPrototype[DELETE]=MapPrototype.remove;\nMapPrototype.removeIn=MapPrototype.deleteIn;\n\n\n\n\n\n\nfunction ArrayMapNode(ownerID,entries){\nthis.ownerID=ownerID;\nthis.entries=entries;}\n\n\nArrayMapNode.prototype.get=function(shift,keyHash,key,notSetValue){\nvar entries=this.entries;\nfor(var ii=0,len=entries.length;ii<len;ii++){\nif(is(key,entries[ii][0])){\nreturn entries[ii][1];}}\n\n\nreturn notSetValue;};\n\n\nArrayMapNode.prototype.update=function(ownerID,shift,keyHash,key,value,didChangeSize,didAlter){\nvar removed=value===NOT_SET;\n\nvar entries=this.entries;\nvar idx=0;\nfor(var len=entries.length;idx<len;idx++){\nif(is(key,entries[idx][0])){\nbreak;}}\n\n\nvar exists=idx<len;\n\nif(exists?entries[idx][1]===value:removed){\nreturn this;}\n\n\nSetRef(didAlter);\n(removed||!exists)&&SetRef(didChangeSize);\n\nif(removed&&entries.length===1){\nreturn;}\n\n\nif(!exists&&!removed&&entries.length>=MAX_ARRAY_MAP_SIZE){\nreturn createNodes(ownerID,entries,key,value);}\n\n\nvar isEditable=ownerID&&ownerID===this.ownerID;\nvar newEntries=isEditable?entries:arrCopy(entries);\n\nif(exists){\nif(removed){\nidx===len-1?newEntries.pop():newEntries[idx]=newEntries.pop();}else \n{\nnewEntries[idx]=[key,value];}}else \n\n{\nnewEntries.push([key,value]);}\n\n\nif(isEditable){\nthis.entries=newEntries;\nreturn this;}\n\n\nreturn new ArrayMapNode(ownerID,newEntries);};\n\n\n\n\n\nfunction BitmapIndexedNode(ownerID,bitmap,nodes){\nthis.ownerID=ownerID;\nthis.bitmap=bitmap;\nthis.nodes=nodes;}\n\n\nBitmapIndexedNode.prototype.get=function(shift,keyHash,key,notSetValue){\nif(keyHash===undefined){\nkeyHash=hash(key);}\n\nvar bit=1<<((shift===0?keyHash:keyHash>>>shift)&MASK);\nvar bitmap=this.bitmap;\nreturn (bitmap&bit)===0?notSetValue:\nthis.nodes[popCount(bitmap&bit-1)].get(shift+SHIFT,keyHash,key,notSetValue);};\n\n\nBitmapIndexedNode.prototype.update=function(ownerID,shift,keyHash,key,value,didChangeSize,didAlter){\nif(keyHash===undefined){\nkeyHash=hash(key);}\n\nvar keyHashFrag=(shift===0?keyHash:keyHash>>>shift)&MASK;\nvar bit=1<<keyHashFrag;\nvar bitmap=this.bitmap;\nvar exists=(bitmap&bit)!==0;\n\nif(!exists&&value===NOT_SET){\nreturn this;}\n\n\nvar idx=popCount(bitmap&bit-1);\nvar nodes=this.nodes;\nvar node=exists?nodes[idx]:undefined;\nvar newNode=updateNode(node,ownerID,shift+SHIFT,keyHash,key,value,didChangeSize,didAlter);\n\nif(newNode===node){\nreturn this;}\n\n\nif(!exists&&newNode&&nodes.length>=MAX_BITMAP_INDEXED_SIZE){\nreturn expandNodes(ownerID,nodes,bitmap,keyHashFrag,newNode);}\n\n\nif(exists&&!newNode&&nodes.length===2&&isLeafNode(nodes[idx^1])){\nreturn nodes[idx^1];}\n\n\nif(exists&&newNode&&nodes.length===1&&isLeafNode(newNode)){\nreturn newNode;}\n\n\nvar isEditable=ownerID&&ownerID===this.ownerID;\nvar newBitmap=exists?newNode?bitmap:bitmap^bit:bitmap|bit;\nvar newNodes=exists?newNode?\nsetIn(nodes,idx,newNode,isEditable):\nspliceOut(nodes,idx,isEditable):\nspliceIn(nodes,idx,newNode,isEditable);\n\nif(isEditable){\nthis.bitmap=newBitmap;\nthis.nodes=newNodes;\nreturn this;}\n\n\nreturn new BitmapIndexedNode(ownerID,newBitmap,newNodes);};\n\n\n\n\n\nfunction HashArrayMapNode(ownerID,count,nodes){\nthis.ownerID=ownerID;\nthis.count=count;\nthis.nodes=nodes;}\n\n\nHashArrayMapNode.prototype.get=function(shift,keyHash,key,notSetValue){\nif(keyHash===undefined){\nkeyHash=hash(key);}\n\nvar idx=(shift===0?keyHash:keyHash>>>shift)&MASK;\nvar node=this.nodes[idx];\nreturn node?node.get(shift+SHIFT,keyHash,key,notSetValue):notSetValue;};\n\n\nHashArrayMapNode.prototype.update=function(ownerID,shift,keyHash,key,value,didChangeSize,didAlter){\nif(keyHash===undefined){\nkeyHash=hash(key);}\n\nvar idx=(shift===0?keyHash:keyHash>>>shift)&MASK;\nvar removed=value===NOT_SET;\nvar nodes=this.nodes;\nvar node=nodes[idx];\n\nif(removed&&!node){\nreturn this;}\n\n\nvar newNode=updateNode(node,ownerID,shift+SHIFT,keyHash,key,value,didChangeSize,didAlter);\nif(newNode===node){\nreturn this;}\n\n\nvar newCount=this.count;\nif(!node){\nnewCount++;}else \nif(!newNode){\nnewCount--;\nif(newCount<MIN_HASH_ARRAY_MAP_SIZE){\nreturn packNodes(ownerID,nodes,newCount,idx);}}\n\n\n\nvar isEditable=ownerID&&ownerID===this.ownerID;\nvar newNodes=setIn(nodes,idx,newNode,isEditable);\n\nif(isEditable){\nthis.count=newCount;\nthis.nodes=newNodes;\nreturn this;}\n\n\nreturn new HashArrayMapNode(ownerID,newCount,newNodes);};\n\n\n\n\n\nfunction HashCollisionNode(ownerID,keyHash,entries){\nthis.ownerID=ownerID;\nthis.keyHash=keyHash;\nthis.entries=entries;}\n\n\nHashCollisionNode.prototype.get=function(shift,keyHash,key,notSetValue){\nvar entries=this.entries;\nfor(var ii=0,len=entries.length;ii<len;ii++){\nif(is(key,entries[ii][0])){\nreturn entries[ii][1];}}\n\n\nreturn notSetValue;};\n\n\nHashCollisionNode.prototype.update=function(ownerID,shift,keyHash,key,value,didChangeSize,didAlter){\nif(keyHash===undefined){\nkeyHash=hash(key);}\n\n\nvar removed=value===NOT_SET;\n\nif(keyHash!==this.keyHash){\nif(removed){\nreturn this;}\n\nSetRef(didAlter);\nSetRef(didChangeSize);\nreturn mergeIntoNode(this,ownerID,shift,keyHash,[key,value]);}\n\n\nvar entries=this.entries;\nvar idx=0;\nfor(var len=entries.length;idx<len;idx++){\nif(is(key,entries[idx][0])){\nbreak;}}\n\n\nvar exists=idx<len;\n\nif(exists?entries[idx][1]===value:removed){\nreturn this;}\n\n\nSetRef(didAlter);\n(removed||!exists)&&SetRef(didChangeSize);\n\nif(removed&&len===2){\nreturn new ValueNode(ownerID,this.keyHash,entries[idx^1]);}\n\n\nvar isEditable=ownerID&&ownerID===this.ownerID;\nvar newEntries=isEditable?entries:arrCopy(entries);\n\nif(exists){\nif(removed){\nidx===len-1?newEntries.pop():newEntries[idx]=newEntries.pop();}else \n{\nnewEntries[idx]=[key,value];}}else \n\n{\nnewEntries.push([key,value]);}\n\n\nif(isEditable){\nthis.entries=newEntries;\nreturn this;}\n\n\nreturn new HashCollisionNode(ownerID,this.keyHash,newEntries);};\n\n\n\n\n\nfunction ValueNode(ownerID,keyHash,entry){\nthis.ownerID=ownerID;\nthis.keyHash=keyHash;\nthis.entry=entry;}\n\n\nValueNode.prototype.get=function(shift,keyHash,key,notSetValue){\nreturn is(key,this.entry[0])?this.entry[1]:notSetValue;};\n\n\nValueNode.prototype.update=function(ownerID,shift,keyHash,key,value,didChangeSize,didAlter){\nvar removed=value===NOT_SET;\nvar keyMatch=is(key,this.entry[0]);\nif(keyMatch?value===this.entry[1]:removed){\nreturn this;}\n\n\nSetRef(didAlter);\n\nif(removed){\nSetRef(didChangeSize);\nreturn;}\n\n\nif(keyMatch){\nif(ownerID&&ownerID===this.ownerID){\nthis.entry[1]=value;\nreturn this;}\n\nreturn new ValueNode(ownerID,this.keyHash,[key,value]);}\n\n\nSetRef(didChangeSize);\nreturn mergeIntoNode(this,ownerID,shift,hash(key),[key,value]);};\n\n\n\n\n\n\nArrayMapNode.prototype.iterate=\nHashCollisionNode.prototype.iterate=function(fn,reverse){\nvar entries=this.entries;\nfor(var ii=0,maxIndex=entries.length-1;ii<=maxIndex;ii++){\nif(fn(entries[reverse?maxIndex-ii:ii])===false){\nreturn false;}}};\n\n\n\n\nBitmapIndexedNode.prototype.iterate=\nHashArrayMapNode.prototype.iterate=function(fn,reverse){\nvar nodes=this.nodes;\nfor(var ii=0,maxIndex=nodes.length-1;ii<=maxIndex;ii++){\nvar node=nodes[reverse?maxIndex-ii:ii];\nif(node&&node.iterate(fn,reverse)===false){\nreturn false;}}};\n\n\n\n\nValueNode.prototype.iterate=function(fn,reverse){\nreturn fn(this.entry);};\n\n\ncreateClass(MapIterator,Iterator);\n\nfunction MapIterator(map,type,reverse){\nthis._type=type;\nthis._reverse=reverse;\nthis._stack=map._root&&mapIteratorFrame(map._root);}\n\n\nMapIterator.prototype.next=function(){\nvar type=this._type;\nvar stack=this._stack;\nwhile(stack){\nvar node=stack.node;\nvar index=stack.index++;\nvar maxIndex;\nif(node.entry){\nif(index===0){\nreturn mapIteratorValue(type,node.entry);}}else \n\nif(node.entries){\nmaxIndex=node.entries.length-1;\nif(index<=maxIndex){\nreturn mapIteratorValue(type,node.entries[this._reverse?maxIndex-index:index]);}}else \n\n{\nmaxIndex=node.nodes.length-1;\nif(index<=maxIndex){\nvar subNode=node.nodes[this._reverse?maxIndex-index:index];\nif(subNode){\nif(subNode.entry){\nreturn mapIteratorValue(type,subNode.entry);}\n\nstack=this._stack=mapIteratorFrame(subNode,stack);}\n\ncontinue;}}\n\n\nstack=this._stack=this._stack.__prev;}\n\nreturn iteratorDone();};\n\n\n\nfunction mapIteratorValue(type,entry){\nreturn iteratorValue(type,entry[0],entry[1]);}\n\n\nfunction mapIteratorFrame(node,prev){\nreturn {\nnode:node,\nindex:0,\n__prev:prev};}\n\n\n\nfunction makeMap(size,root,ownerID,hash){\nvar map=Object.create(MapPrototype);\nmap.size=size;\nmap._root=root;\nmap.__ownerID=ownerID;\nmap.__hash=hash;\nmap.__altered=false;\nreturn map;}\n\n\nvar EMPTY_MAP;\nfunction emptyMap(){\nreturn EMPTY_MAP||(EMPTY_MAP=makeMap(0));}\n\n\nfunction updateMap(map,k,v){\nvar newRoot;\nvar newSize;\nif(!map._root){\nif(v===NOT_SET){\nreturn map;}\n\nnewSize=1;\nnewRoot=new ArrayMapNode(map.__ownerID,[[k,v]]);}else \n{\nvar didChangeSize=MakeRef(CHANGE_LENGTH);\nvar didAlter=MakeRef(DID_ALTER);\nnewRoot=updateNode(map._root,map.__ownerID,0,undefined,k,v,didChangeSize,didAlter);\nif(!didAlter.value){\nreturn map;}\n\nnewSize=map.size+(didChangeSize.value?v===NOT_SET?-1:1:0);}\n\nif(map.__ownerID){\nmap.size=newSize;\nmap._root=newRoot;\nmap.__hash=undefined;\nmap.__altered=true;\nreturn map;}\n\nreturn newRoot?makeMap(newSize,newRoot):emptyMap();}\n\n\nfunction updateNode(node,ownerID,shift,keyHash,key,value,didChangeSize,didAlter){\nif(!node){\nif(value===NOT_SET){\nreturn node;}\n\nSetRef(didAlter);\nSetRef(didChangeSize);\nreturn new ValueNode(ownerID,keyHash,[key,value]);}\n\nreturn node.update(ownerID,shift,keyHash,key,value,didChangeSize,didAlter);}\n\n\nfunction isLeafNode(node){\nreturn node.constructor===ValueNode||node.constructor===HashCollisionNode;}\n\n\nfunction mergeIntoNode(node,ownerID,shift,keyHash,entry){\nif(node.keyHash===keyHash){\nreturn new HashCollisionNode(ownerID,keyHash,[node.entry,entry]);}\n\n\nvar idx1=(shift===0?node.keyHash:node.keyHash>>>shift)&MASK;\nvar idx2=(shift===0?keyHash:keyHash>>>shift)&MASK;\n\nvar newNode;\nvar nodes=idx1===idx2?\n[mergeIntoNode(node,ownerID,shift+SHIFT,keyHash,entry)]:(\nnewNode=new ValueNode(ownerID,keyHash,entry),idx1<idx2?[node,newNode]:[newNode,node]);\n\nreturn new BitmapIndexedNode(ownerID,1<<idx1|1<<idx2,nodes);}\n\n\nfunction createNodes(ownerID,entries,key,value){\nif(!ownerID){\nownerID=new OwnerID();}\n\nvar node=new ValueNode(ownerID,hash(key),[key,value]);\nfor(var ii=0;ii<entries.length;ii++){\nvar entry=entries[ii];\nnode=node.update(ownerID,0,undefined,entry[0],entry[1]);}\n\nreturn node;}\n\n\nfunction packNodes(ownerID,nodes,count,excluding){\nvar bitmap=0;\nvar packedII=0;\nvar packedNodes=new Array(count);\nfor(var ii=0,bit=1,len=nodes.length;ii<len;ii++,bit<<=1){\nvar node=nodes[ii];\nif(node!==undefined&&ii!==excluding){\nbitmap|=bit;\npackedNodes[packedII++]=node;}}\n\n\nreturn new BitmapIndexedNode(ownerID,bitmap,packedNodes);}\n\n\nfunction expandNodes(ownerID,nodes,bitmap,including,node){\nvar count=0;\nvar expandedNodes=new Array(SIZE);\nfor(var ii=0;bitmap!==0;ii++,bitmap>>>=1){\nexpandedNodes[ii]=bitmap&1?nodes[count++]:undefined;}\n\nexpandedNodes[including]=node;\nreturn new HashArrayMapNode(ownerID,count+1,expandedNodes);}\n\n\nfunction mergeIntoMapWith(map,merger,iterables){\nvar iters=[];\nfor(var ii=0;ii<iterables.length;ii++){\nvar value=iterables[ii];\nvar iter=KeyedIterable(value);\nif(!isIterable(value)){\niter=iter.map(function(v){return fromJS(v);});}\n\niters.push(iter);}\n\nreturn mergeIntoCollectionWith(map,merger,iters);}\n\n\nfunction deepMerger(existing,value,key){\nreturn existing&&existing.mergeDeep&&isIterable(value)?\nexisting.mergeDeep(value):\nis(existing,value)?existing:value;}\n\n\nfunction deepMergerWith(merger){\nreturn function(existing,value,key){\nif(existing&&existing.mergeDeepWith&&isIterable(value)){\nreturn existing.mergeDeepWith(merger,value);}\n\nvar nextValue=merger(existing,value,key);\nreturn is(existing,nextValue)?existing:nextValue;};}\n\n\n\nfunction mergeIntoCollectionWith(collection,merger,iters){\niters=iters.filter(function(x){return x.size!==0;});\nif(iters.length===0){\nreturn collection;}\n\nif(collection.size===0&&!collection.__ownerID&&iters.length===1){\nreturn collection.constructor(iters[0]);}\n\nreturn collection.withMutations(function(collection){\nvar mergeIntoMap=merger?\nfunction(value,key){\ncollection.update(key,NOT_SET,function(existing)\n{return existing===NOT_SET?value:merger(existing,value,key);});}:\n\n\nfunction(value,key){\ncollection.set(key,value);};\n\nfor(var ii=0;ii<iters.length;ii++){\niters[ii].forEach(mergeIntoMap);}});}\n\n\n\n\nfunction updateInDeepMap(existing,keyPathIter,notSetValue,updater){\nvar isNotSet=existing===NOT_SET;\nvar step=keyPathIter.next();\nif(step.done){\nvar existingValue=isNotSet?notSetValue:existing;\nvar newValue=updater(existingValue);\nreturn newValue===existingValue?existing:newValue;}\n\ninvariant(\nisNotSet||existing&&existing.set,\n'invalid keyPath');\n\nvar key=step.value;\nvar nextExisting=isNotSet?NOT_SET:existing.get(key,NOT_SET);\nvar nextUpdated=updateInDeepMap(\nnextExisting,\nkeyPathIter,\nnotSetValue,\nupdater);\n\nreturn nextUpdated===nextExisting?existing:\nnextUpdated===NOT_SET?existing.remove(key):\n(isNotSet?emptyMap():existing).set(key,nextUpdated);}\n\n\nfunction popCount(x){\nx=x-(x>>1&0x55555555);\nx=(x&0x33333333)+(x>>2&0x33333333);\nx=x+(x>>4)&0x0f0f0f0f;\nx=x+(x>>8);\nx=x+(x>>16);\nreturn x&0x7f;}\n\n\nfunction setIn(array,idx,val,canEdit){\nvar newArray=canEdit?array:arrCopy(array);\nnewArray[idx]=val;\nreturn newArray;}\n\n\nfunction spliceIn(array,idx,val,canEdit){\nvar newLen=array.length+1;\nif(canEdit&&idx+1===newLen){\narray[idx]=val;\nreturn array;}\n\nvar newArray=new Array(newLen);\nvar after=0;\nfor(var ii=0;ii<newLen;ii++){\nif(ii===idx){\nnewArray[ii]=val;\nafter=-1;}else \n{\nnewArray[ii]=array[ii+after];}}\n\n\nreturn newArray;}\n\n\nfunction spliceOut(array,idx,canEdit){\nvar newLen=array.length-1;\nif(canEdit&&idx===newLen){\narray.pop();\nreturn array;}\n\nvar newArray=new Array(newLen);\nvar after=0;\nfor(var ii=0;ii<newLen;ii++){\nif(ii===idx){\nafter=1;}\n\nnewArray[ii]=array[ii+after];}\n\nreturn newArray;}\n\n\nvar MAX_ARRAY_MAP_SIZE=SIZE/4;\nvar MAX_BITMAP_INDEXED_SIZE=SIZE/2;\nvar MIN_HASH_ARRAY_MAP_SIZE=SIZE/4;\n\ncreateClass(List,IndexedCollection);\n\n\n\nfunction List(value){\nvar empty=emptyList();\nif(value===null||value===undefined){\nreturn empty;}\n\nif(isList(value)){\nreturn value;}\n\nvar iter=IndexedIterable(value);\nvar size=iter.size;\nif(size===0){\nreturn empty;}\n\nassertNotInfinite(size);\nif(size>0&&size<SIZE){\nreturn makeList(0,size,SHIFT,null,new VNode(iter.toArray()));}\n\nreturn empty.withMutations(function(list){\nlist.setSize(size);\niter.forEach(function(v,i){return list.set(i,v);});});}\n\n\n\nList.of=function(){\nreturn this(arguments);};\n\n\nList.prototype.toString=function(){\nreturn this.__toString('List [',']');};\n\n\n\n\nList.prototype.get=function(index,notSetValue){\nindex=wrapIndex(this,index);\nif(index>=0&&index<this.size){\nindex+=this._origin;\nvar node=listNodeFor(this,index);\nreturn node&&node.array[index&MASK];}\n\nreturn notSetValue;};\n\n\n\n\nList.prototype.set=function(index,value){\nreturn updateList(this,index,value);};\n\n\nList.prototype.remove=function(index){\nreturn !this.has(index)?this:\nindex===0?this.shift():\nindex===this.size-1?this.pop():\nthis.splice(index,1);};\n\n\nList.prototype.insert=function(index,value){\nreturn this.splice(index,0,value);};\n\n\nList.prototype.clear=function(){\nif(this.size===0){\nreturn this;}\n\nif(this.__ownerID){\nthis.size=this._origin=this._capacity=0;\nthis._level=SHIFT;\nthis._root=this._tail=null;\nthis.__hash=undefined;\nthis.__altered=true;\nreturn this;}\n\nreturn emptyList();};\n\n\nList.prototype.push=function(){\nvar values=arguments;\nvar oldSize=this.size;\nreturn this.withMutations(function(list){\nsetListBounds(list,0,oldSize+values.length);\nfor(var ii=0;ii<values.length;ii++){\nlist.set(oldSize+ii,values[ii]);}});};\n\n\n\n\nList.prototype.pop=function(){\nreturn setListBounds(this,0,-1);};\n\n\nList.prototype.unshift=function(){\nvar values=arguments;\nreturn this.withMutations(function(list){\nsetListBounds(list,-values.length);\nfor(var ii=0;ii<values.length;ii++){\nlist.set(ii,values[ii]);}});};\n\n\n\n\nList.prototype.shift=function(){\nreturn setListBounds(this,1);};\n\n\n\n\nList.prototype.merge=function(){\nreturn mergeIntoListWith(this,undefined,arguments);};\n\n\nList.prototype.mergeWith=function(merger){var iters=SLICE$0.call(arguments,1);\nreturn mergeIntoListWith(this,merger,iters);};\n\n\nList.prototype.mergeDeep=function(){\nreturn mergeIntoListWith(this,deepMerger,arguments);};\n\n\nList.prototype.mergeDeepWith=function(merger){var iters=SLICE$0.call(arguments,1);\nreturn mergeIntoListWith(this,deepMergerWith(merger),iters);};\n\n\nList.prototype.setSize=function(size){\nreturn setListBounds(this,0,size);};\n\n\n\n\nList.prototype.slice=function(begin,end){\nvar size=this.size;\nif(wholeSlice(begin,end,size)){\nreturn this;}\n\nreturn setListBounds(\nthis,\nresolveBegin(begin,size),\nresolveEnd(end,size));};\n\n\n\nList.prototype.__iterator=function(type,reverse){\nvar index=0;\nvar values=iterateList(this,reverse);\nreturn new Iterator(function(){\nvar value=values();\nreturn value===DONE?\niteratorDone():\niteratorValue(type,index++,value);});};\n\n\n\nList.prototype.__iterate=function(fn,reverse){\nvar index=0;\nvar values=iterateList(this,reverse);\nvar value;\nwhile((value=values())!==DONE){\nif(fn(value,index++,this)===false){\nbreak;}}\n\n\nreturn index;};\n\n\nList.prototype.__ensureOwner=function(ownerID){\nif(ownerID===this.__ownerID){\nreturn this;}\n\nif(!ownerID){\nthis.__ownerID=ownerID;\nreturn this;}\n\nreturn makeList(this._origin,this._capacity,this._level,this._root,this._tail,ownerID,this.__hash);};\n\n\n\nfunction isList(maybeList){\nreturn !!(maybeList&&maybeList[IS_LIST_SENTINEL]);}\n\n\nList.isList=isList;\n\nvar IS_LIST_SENTINEL='@@__IMMUTABLE_LIST__@@';\n\nvar ListPrototype=List.prototype;\nListPrototype[IS_LIST_SENTINEL]=true;\nListPrototype[DELETE]=ListPrototype.remove;\nListPrototype.setIn=MapPrototype.setIn;\nListPrototype.deleteIn=\nListPrototype.removeIn=MapPrototype.removeIn;\nListPrototype.update=MapPrototype.update;\nListPrototype.updateIn=MapPrototype.updateIn;\nListPrototype.mergeIn=MapPrototype.mergeIn;\nListPrototype.mergeDeepIn=MapPrototype.mergeDeepIn;\nListPrototype.withMutations=MapPrototype.withMutations;\nListPrototype.asMutable=MapPrototype.asMutable;\nListPrototype.asImmutable=MapPrototype.asImmutable;\nListPrototype.wasAltered=MapPrototype.wasAltered;\n\n\n\nfunction VNode(array,ownerID){\nthis.array=array;\nthis.ownerID=ownerID;}\n\n\n\n\nVNode.prototype.removeBefore=function(ownerID,level,index){\nif(index===level?1<<level:0||this.array.length===0){\nreturn this;}\n\nvar originIndex=index>>>level&MASK;\nif(originIndex>=this.array.length){\nreturn new VNode([],ownerID);}\n\nvar removingFirst=originIndex===0;\nvar newChild;\nif(level>0){\nvar oldChild=this.array[originIndex];\nnewChild=oldChild&&oldChild.removeBefore(ownerID,level-SHIFT,index);\nif(newChild===oldChild&&removingFirst){\nreturn this;}}\n\n\nif(removingFirst&&!newChild){\nreturn this;}\n\nvar editable=editableVNode(this,ownerID);\nif(!removingFirst){\nfor(var ii=0;ii<originIndex;ii++){\neditable.array[ii]=undefined;}}\n\n\nif(newChild){\neditable.array[originIndex]=newChild;}\n\nreturn editable;};\n\n\nVNode.prototype.removeAfter=function(ownerID,level,index){\nif(index===(level?1<<level:0)||this.array.length===0){\nreturn this;}\n\nvar sizeIndex=index-1>>>level&MASK;\nif(sizeIndex>=this.array.length){\nreturn this;}\n\n\nvar newChild;\nif(level>0){\nvar oldChild=this.array[sizeIndex];\nnewChild=oldChild&&oldChild.removeAfter(ownerID,level-SHIFT,index);\nif(newChild===oldChild&&sizeIndex===this.array.length-1){\nreturn this;}}\n\n\n\nvar editable=editableVNode(this,ownerID);\neditable.array.splice(sizeIndex+1);\nif(newChild){\neditable.array[sizeIndex]=newChild;}\n\nreturn editable;};\n\n\n\n\nvar DONE={};\n\nfunction iterateList(list,reverse){\nvar left=list._origin;\nvar right=list._capacity;\nvar tailPos=getTailOffset(right);\nvar tail=list._tail;\n\nreturn iterateNodeOrLeaf(list._root,list._level,0);\n\nfunction iterateNodeOrLeaf(node,level,offset){\nreturn level===0?\niterateLeaf(node,offset):\niterateNode(node,level,offset);}\n\n\nfunction iterateLeaf(node,offset){\nvar array=offset===tailPos?tail&&tail.array:node&&node.array;\nvar from=offset>left?0:left-offset;\nvar to=right-offset;\nif(to>SIZE){\nto=SIZE;}\n\nreturn function(){\nif(from===to){\nreturn DONE;}\n\nvar idx=reverse?--to:from++;\nreturn array&&array[idx];};}\n\n\n\nfunction iterateNode(node,level,offset){\nvar values;\nvar array=node&&node.array;\nvar from=offset>left?0:left-offset>>level;\nvar to=(right-offset>>level)+1;\nif(to>SIZE){\nto=SIZE;}\n\nreturn function(){\ndo {\nif(values){\nvar value=values();\nif(value!==DONE){\nreturn value;}\n\nvalues=null;}\n\nif(from===to){\nreturn DONE;}\n\nvar idx=reverse?--to:from++;\nvalues=iterateNodeOrLeaf(\narray&&array[idx],level-SHIFT,offset+(idx<<level));}while(\n\ntrue);};}}\n\n\n\n\nfunction makeList(origin,capacity,level,root,tail,ownerID,hash){\nvar list=Object.create(ListPrototype);\nlist.size=capacity-origin;\nlist._origin=origin;\nlist._capacity=capacity;\nlist._level=level;\nlist._root=root;\nlist._tail=tail;\nlist.__ownerID=ownerID;\nlist.__hash=hash;\nlist.__altered=false;\nreturn list;}\n\n\nvar EMPTY_LIST;\nfunction emptyList(){\nreturn EMPTY_LIST||(EMPTY_LIST=makeList(0,0,SHIFT));}\n\n\nfunction updateList(list,index,value){\nindex=wrapIndex(list,index);\n\nif(index!==index){\nreturn list;}\n\n\nif(index>=list.size||index<0){\nreturn list.withMutations(function(list){\nindex<0?\nsetListBounds(list,index).set(0,value):\nsetListBounds(list,0,index+1).set(index,value);});}\n\n\n\nindex+=list._origin;\n\nvar newTail=list._tail;\nvar newRoot=list._root;\nvar didAlter=MakeRef(DID_ALTER);\nif(index>=getTailOffset(list._capacity)){\nnewTail=updateVNode(newTail,list.__ownerID,0,index,value,didAlter);}else \n{\nnewRoot=updateVNode(newRoot,list.__ownerID,list._level,index,value,didAlter);}\n\n\nif(!didAlter.value){\nreturn list;}\n\n\nif(list.__ownerID){\nlist._root=newRoot;\nlist._tail=newTail;\nlist.__hash=undefined;\nlist.__altered=true;\nreturn list;}\n\nreturn makeList(list._origin,list._capacity,list._level,newRoot,newTail);}\n\n\nfunction updateVNode(node,ownerID,level,index,value,didAlter){\nvar idx=index>>>level&MASK;\nvar nodeHas=node&&idx<node.array.length;\nif(!nodeHas&&value===undefined){\nreturn node;}\n\n\nvar newNode;\n\nif(level>0){\nvar lowerNode=node&&node.array[idx];\nvar newLowerNode=updateVNode(lowerNode,ownerID,level-SHIFT,index,value,didAlter);\nif(newLowerNode===lowerNode){\nreturn node;}\n\nnewNode=editableVNode(node,ownerID);\nnewNode.array[idx]=newLowerNode;\nreturn newNode;}\n\n\nif(nodeHas&&node.array[idx]===value){\nreturn node;}\n\n\nSetRef(didAlter);\n\nnewNode=editableVNode(node,ownerID);\nif(value===undefined&&idx===newNode.array.length-1){\nnewNode.array.pop();}else \n{\nnewNode.array[idx]=value;}\n\nreturn newNode;}\n\n\nfunction editableVNode(node,ownerID){\nif(ownerID&&node&&ownerID===node.ownerID){\nreturn node;}\n\nreturn new VNode(node?node.array.slice():[],ownerID);}\n\n\nfunction listNodeFor(list,rawIndex){\nif(rawIndex>=getTailOffset(list._capacity)){\nreturn list._tail;}\n\nif(rawIndex<1<<list._level+SHIFT){\nvar node=list._root;\nvar level=list._level;\nwhile(node&&level>0){\nnode=node.array[rawIndex>>>level&MASK];\nlevel-=SHIFT;}\n\nreturn node;}}\n\n\n\nfunction setListBounds(list,begin,end){\n\n\nif(begin!==undefined){\nbegin=begin|0;}\n\nif(end!==undefined){\nend=end|0;}\n\nvar owner=list.__ownerID||new OwnerID();\nvar oldOrigin=list._origin;\nvar oldCapacity=list._capacity;\nvar newOrigin=oldOrigin+begin;\nvar newCapacity=end===undefined?oldCapacity:end<0?oldCapacity+end:oldOrigin+end;\nif(newOrigin===oldOrigin&&newCapacity===oldCapacity){\nreturn list;}\n\n\n\nif(newOrigin>=newCapacity){\nreturn list.clear();}\n\n\nvar newLevel=list._level;\nvar newRoot=list._root;\n\n\nvar offsetShift=0;\nwhile(newOrigin+offsetShift<0){\nnewRoot=new VNode(newRoot&&newRoot.array.length?[undefined,newRoot]:[],owner);\nnewLevel+=SHIFT;\noffsetShift+=1<<newLevel;}\n\nif(offsetShift){\nnewOrigin+=offsetShift;\noldOrigin+=offsetShift;\nnewCapacity+=offsetShift;\noldCapacity+=offsetShift;}\n\n\nvar oldTailOffset=getTailOffset(oldCapacity);\nvar newTailOffset=getTailOffset(newCapacity);\n\n\nwhile(newTailOffset>=1<<newLevel+SHIFT){\nnewRoot=new VNode(newRoot&&newRoot.array.length?[newRoot]:[],owner);\nnewLevel+=SHIFT;}\n\n\n\nvar oldTail=list._tail;\nvar newTail=newTailOffset<oldTailOffset?\nlistNodeFor(list,newCapacity-1):\nnewTailOffset>oldTailOffset?new VNode([],owner):oldTail;\n\n\nif(oldTail&&newTailOffset>oldTailOffset&&newOrigin<oldCapacity&&oldTail.array.length){\nnewRoot=editableVNode(newRoot,owner);\nvar node=newRoot;\nfor(var level=newLevel;level>SHIFT;level-=SHIFT){\nvar idx=oldTailOffset>>>level&MASK;\nnode=node.array[idx]=editableVNode(node.array[idx],owner);}\n\nnode.array[oldTailOffset>>>SHIFT&MASK]=oldTail;}\n\n\n\nif(newCapacity<oldCapacity){\nnewTail=newTail&&newTail.removeAfter(owner,0,newCapacity);}\n\n\n\nif(newOrigin>=newTailOffset){\nnewOrigin-=newTailOffset;\nnewCapacity-=newTailOffset;\nnewLevel=SHIFT;\nnewRoot=null;\nnewTail=newTail&&newTail.removeBefore(owner,0,newOrigin);}else \n\n\nif(newOrigin>oldOrigin||newTailOffset<oldTailOffset){\noffsetShift=0;\n\n\nwhile(newRoot){\nvar beginIndex=newOrigin>>>newLevel&MASK;\nif(beginIndex!==newTailOffset>>>newLevel&MASK){\nbreak;}\n\nif(beginIndex){\noffsetShift+=(1<<newLevel)*beginIndex;}\n\nnewLevel-=SHIFT;\nnewRoot=newRoot.array[beginIndex];}\n\n\n\nif(newRoot&&newOrigin>oldOrigin){\nnewRoot=newRoot.removeBefore(owner,newLevel,newOrigin-offsetShift);}\n\nif(newRoot&&newTailOffset<oldTailOffset){\nnewRoot=newRoot.removeAfter(owner,newLevel,newTailOffset-offsetShift);}\n\nif(offsetShift){\nnewOrigin-=offsetShift;\nnewCapacity-=offsetShift;}}\n\n\n\nif(list.__ownerID){\nlist.size=newCapacity-newOrigin;\nlist._origin=newOrigin;\nlist._capacity=newCapacity;\nlist._level=newLevel;\nlist._root=newRoot;\nlist._tail=newTail;\nlist.__hash=undefined;\nlist.__altered=true;\nreturn list;}\n\nreturn makeList(newOrigin,newCapacity,newLevel,newRoot,newTail);}\n\n\nfunction mergeIntoListWith(list,merger,iterables){\nvar iters=[];\nvar maxSize=0;\nfor(var ii=0;ii<iterables.length;ii++){\nvar value=iterables[ii];\nvar iter=IndexedIterable(value);\nif(iter.size>maxSize){\nmaxSize=iter.size;}\n\nif(!isIterable(value)){\niter=iter.map(function(v){return fromJS(v);});}\n\niters.push(iter);}\n\nif(maxSize>list.size){\nlist=list.setSize(maxSize);}\n\nreturn mergeIntoCollectionWith(list,merger,iters);}\n\n\nfunction getTailOffset(size){\nreturn size<SIZE?0:size-1>>>SHIFT<<SHIFT;}\n\n\ncreateClass(OrderedMap,Map);\n\n\n\nfunction OrderedMap(value){\nreturn value===null||value===undefined?emptyOrderedMap():\nisOrderedMap(value)?value:\nemptyOrderedMap().withMutations(function(map){\nvar iter=KeyedIterable(value);\nassertNotInfinite(iter.size);\niter.forEach(function(v,k){return map.set(k,v);});});}\n\n\n\nOrderedMap.of=function(){\nreturn this(arguments);};\n\n\nOrderedMap.prototype.toString=function(){\nreturn this.__toString('OrderedMap {','}');};\n\n\n\n\nOrderedMap.prototype.get=function(k,notSetValue){\nvar index=this._map.get(k);\nreturn index!==undefined?this._list.get(index)[1]:notSetValue;};\n\n\n\n\nOrderedMap.prototype.clear=function(){\nif(this.size===0){\nreturn this;}\n\nif(this.__ownerID){\nthis.size=0;\nthis._map.clear();\nthis._list.clear();\nreturn this;}\n\nreturn emptyOrderedMap();};\n\n\nOrderedMap.prototype.set=function(k,v){\nreturn updateOrderedMap(this,k,v);};\n\n\nOrderedMap.prototype.remove=function(k){\nreturn updateOrderedMap(this,k,NOT_SET);};\n\n\nOrderedMap.prototype.wasAltered=function(){\nreturn this._map.wasAltered()||this._list.wasAltered();};\n\n\nOrderedMap.prototype.__iterate=function(fn,reverse){var this$0=this;\nreturn this._list.__iterate(\nfunction(entry){return entry&&fn(entry[1],entry[0],this$0);},\nreverse);};\n\n\n\nOrderedMap.prototype.__iterator=function(type,reverse){\nreturn this._list.fromEntrySeq().__iterator(type,reverse);};\n\n\nOrderedMap.prototype.__ensureOwner=function(ownerID){\nif(ownerID===this.__ownerID){\nreturn this;}\n\nvar newMap=this._map.__ensureOwner(ownerID);\nvar newList=this._list.__ensureOwner(ownerID);\nif(!ownerID){\nthis.__ownerID=ownerID;\nthis._map=newMap;\nthis._list=newList;\nreturn this;}\n\nreturn makeOrderedMap(newMap,newList,ownerID,this.__hash);};\n\n\n\nfunction isOrderedMap(maybeOrderedMap){\nreturn isMap(maybeOrderedMap)&&isOrdered(maybeOrderedMap);}\n\n\nOrderedMap.isOrderedMap=isOrderedMap;\n\nOrderedMap.prototype[IS_ORDERED_SENTINEL]=true;\nOrderedMap.prototype[DELETE]=OrderedMap.prototype.remove;\n\n\n\nfunction makeOrderedMap(map,list,ownerID,hash){\nvar omap=Object.create(OrderedMap.prototype);\nomap.size=map?map.size:0;\nomap._map=map;\nomap._list=list;\nomap.__ownerID=ownerID;\nomap.__hash=hash;\nreturn omap;}\n\n\nvar EMPTY_ORDERED_MAP;\nfunction emptyOrderedMap(){\nreturn EMPTY_ORDERED_MAP||(EMPTY_ORDERED_MAP=makeOrderedMap(emptyMap(),emptyList()));}\n\n\nfunction updateOrderedMap(omap,k,v){\nvar map=omap._map;\nvar list=omap._list;\nvar i=map.get(k);\nvar has=i!==undefined;\nvar newMap;\nvar newList;\nif(v===NOT_SET){\nif(!has){\nreturn omap;}\n\nif(list.size>=SIZE&&list.size>=map.size*2){\nnewList=list.filter(function(entry,idx){return entry!==undefined&&i!==idx;});\nnewMap=newList.toKeyedSeq().map(function(entry){return entry[0];}).flip().toMap();\nif(omap.__ownerID){\nnewMap.__ownerID=newList.__ownerID=omap.__ownerID;}}else \n\n{\nnewMap=map.remove(k);\nnewList=i===list.size-1?list.pop():list.set(i,undefined);}}else \n\n{\nif(has){\nif(v===list.get(i)[1]){\nreturn omap;}\n\nnewMap=map;\nnewList=list.set(i,[k,v]);}else \n{\nnewMap=map.set(k,list.size);\nnewList=list.set(list.size,[k,v]);}}\n\n\nif(omap.__ownerID){\nomap.size=newMap.size;\nomap._map=newMap;\nomap._list=newList;\nomap.__hash=undefined;\nreturn omap;}\n\nreturn makeOrderedMap(newMap,newList);}\n\n\ncreateClass(ToKeyedSequence,KeyedSeq);\nfunction ToKeyedSequence(indexed,useKeys){\nthis._iter=indexed;\nthis._useKeys=useKeys;\nthis.size=indexed.size;}\n\n\nToKeyedSequence.prototype.get=function(key,notSetValue){\nreturn this._iter.get(key,notSetValue);};\n\n\nToKeyedSequence.prototype.has=function(key){\nreturn this._iter.has(key);};\n\n\nToKeyedSequence.prototype.valueSeq=function(){\nreturn this._iter.valueSeq();};\n\n\nToKeyedSequence.prototype.reverse=function(){var this$0=this;\nvar reversedSequence=reverseFactory(this,true);\nif(!this._useKeys){\nreversedSequence.valueSeq=function(){return this$0._iter.toSeq().reverse();};}\n\nreturn reversedSequence;};\n\n\nToKeyedSequence.prototype.map=function(mapper,context){var this$0=this;\nvar mappedSequence=mapFactory(this,mapper,context);\nif(!this._useKeys){\nmappedSequence.valueSeq=function(){return this$0._iter.toSeq().map(mapper,context);};}\n\nreturn mappedSequence;};\n\n\nToKeyedSequence.prototype.__iterate=function(fn,reverse){var this$0=this;\nvar ii;\nreturn this._iter.__iterate(\nthis._useKeys?\nfunction(v,k){return fn(v,k,this$0);}:(\nii=reverse?resolveSize(this):0,\nfunction(v){return fn(v,reverse?--ii:ii++,this$0);}),\nreverse);};\n\n\n\nToKeyedSequence.prototype.__iterator=function(type,reverse){\nif(this._useKeys){\nreturn this._iter.__iterator(type,reverse);}\n\nvar iterator=this._iter.__iterator(ITERATE_VALUES,reverse);\nvar ii=reverse?resolveSize(this):0;\nreturn new Iterator(function(){\nvar step=iterator.next();\nreturn step.done?step:\niteratorValue(type,reverse?--ii:ii++,step.value,step);});};\n\n\n\nToKeyedSequence.prototype[IS_ORDERED_SENTINEL]=true;\n\n\ncreateClass(ToIndexedSequence,IndexedSeq);\nfunction ToIndexedSequence(iter){\nthis._iter=iter;\nthis.size=iter.size;}\n\n\nToIndexedSequence.prototype.includes=function(value){\nreturn this._iter.includes(value);};\n\n\nToIndexedSequence.prototype.__iterate=function(fn,reverse){var this$0=this;\nvar iterations=0;\nreturn this._iter.__iterate(function(v){return fn(v,iterations++,this$0);},reverse);};\n\n\nToIndexedSequence.prototype.__iterator=function(type,reverse){\nvar iterator=this._iter.__iterator(ITERATE_VALUES,reverse);\nvar iterations=0;\nreturn new Iterator(function(){\nvar step=iterator.next();\nreturn step.done?step:\niteratorValue(type,iterations++,step.value,step);});};\n\n\n\n\n\ncreateClass(ToSetSequence,SetSeq);\nfunction ToSetSequence(iter){\nthis._iter=iter;\nthis.size=iter.size;}\n\n\nToSetSequence.prototype.has=function(key){\nreturn this._iter.includes(key);};\n\n\nToSetSequence.prototype.__iterate=function(fn,reverse){var this$0=this;\nreturn this._iter.__iterate(function(v){return fn(v,v,this$0);},reverse);};\n\n\nToSetSequence.prototype.__iterator=function(type,reverse){\nvar iterator=this._iter.__iterator(ITERATE_VALUES,reverse);\nreturn new Iterator(function(){\nvar step=iterator.next();\nreturn step.done?step:\niteratorValue(type,step.value,step.value,step);});};\n\n\n\n\n\ncreateClass(FromEntriesSequence,KeyedSeq);\nfunction FromEntriesSequence(entries){\nthis._iter=entries;\nthis.size=entries.size;}\n\n\nFromEntriesSequence.prototype.entrySeq=function(){\nreturn this._iter.toSeq();};\n\n\nFromEntriesSequence.prototype.__iterate=function(fn,reverse){var this$0=this;\nreturn this._iter.__iterate(function(entry){\n\n\nif(entry){\nvalidateEntry(entry);\nvar indexedIterable=isIterable(entry);\nreturn fn(\nindexedIterable?entry.get(1):entry[1],\nindexedIterable?entry.get(0):entry[0],\nthis$0);}},\n\n\nreverse);};\n\n\nFromEntriesSequence.prototype.__iterator=function(type,reverse){\nvar iterator=this._iter.__iterator(ITERATE_VALUES,reverse);\nreturn new Iterator(function(){\nwhile(true){\nvar step=iterator.next();\nif(step.done){\nreturn step;}\n\nvar entry=step.value;\n\n\nif(entry){\nvalidateEntry(entry);\nvar indexedIterable=isIterable(entry);\nreturn iteratorValue(\ntype,\nindexedIterable?entry.get(0):entry[0],\nindexedIterable?entry.get(1):entry[1],\nstep);}}});};\n\n\n\n\n\n\n\nToIndexedSequence.prototype.cacheResult=\nToKeyedSequence.prototype.cacheResult=\nToSetSequence.prototype.cacheResult=\nFromEntriesSequence.prototype.cacheResult=\ncacheResultThrough;\n\n\nfunction flipFactory(iterable){\nvar flipSequence=makeSequence(iterable);\nflipSequence._iter=iterable;\nflipSequence.size=iterable.size;\nflipSequence.flip=function(){return iterable;};\nflipSequence.reverse=function(){\nvar reversedSequence=iterable.reverse.apply(this);\nreversedSequence.flip=function(){return iterable.reverse();};\nreturn reversedSequence;};\n\nflipSequence.has=function(key){return iterable.includes(key);};\nflipSequence.includes=function(key){return iterable.has(key);};\nflipSequence.cacheResult=cacheResultThrough;\nflipSequence.__iterateUncached=function(fn,reverse){var this$0=this;\nreturn iterable.__iterate(function(v,k){return fn(k,v,this$0)!==false;},reverse);};\n\nflipSequence.__iteratorUncached=function(type,reverse){\nif(type===ITERATE_ENTRIES){\nvar iterator=iterable.__iterator(type,reverse);\nreturn new Iterator(function(){\nvar step=iterator.next();\nif(!step.done){\nvar k=step.value[0];\nstep.value[0]=step.value[1];\nstep.value[1]=k;}\n\nreturn step;});}\n\n\nreturn iterable.__iterator(\ntype===ITERATE_VALUES?ITERATE_KEYS:ITERATE_VALUES,\nreverse);};\n\n\nreturn flipSequence;}\n\n\n\nfunction mapFactory(iterable,mapper,context){\nvar mappedSequence=makeSequence(iterable);\nmappedSequence.size=iterable.size;\nmappedSequence.has=function(key){return iterable.has(key);};\nmappedSequence.get=function(key,notSetValue){\nvar v=iterable.get(key,NOT_SET);\nreturn v===NOT_SET?\nnotSetValue:\nmapper.call(context,v,key,iterable);};\n\nmappedSequence.__iterateUncached=function(fn,reverse){var this$0=this;\nreturn iterable.__iterate(\nfunction(v,k,c){return fn(mapper.call(context,v,k,c),k,this$0)!==false;},\nreverse);};\n\n\nmappedSequence.__iteratorUncached=function(type,reverse){\nvar iterator=iterable.__iterator(ITERATE_ENTRIES,reverse);\nreturn new Iterator(function(){\nvar step=iterator.next();\nif(step.done){\nreturn step;}\n\nvar entry=step.value;\nvar key=entry[0];\nreturn iteratorValue(\ntype,\nkey,\nmapper.call(context,entry[1],key,iterable),\nstep);});};\n\n\n\nreturn mappedSequence;}\n\n\n\nfunction reverseFactory(iterable,useKeys){\nvar reversedSequence=makeSequence(iterable);\nreversedSequence._iter=iterable;\nreversedSequence.size=iterable.size;\nreversedSequence.reverse=function(){return iterable;};\nif(iterable.flip){\nreversedSequence.flip=function(){\nvar flipSequence=flipFactory(iterable);\nflipSequence.reverse=function(){return iterable.flip();};\nreturn flipSequence;};}\n\n\nreversedSequence.get=function(key,notSetValue)\n{return iterable.get(useKeys?key:-1-key,notSetValue);};\nreversedSequence.has=function(key)\n{return iterable.has(useKeys?key:-1-key);};\nreversedSequence.includes=function(value){return iterable.includes(value);};\nreversedSequence.cacheResult=cacheResultThrough;\nreversedSequence.__iterate=function(fn,reverse){var this$0=this;\nreturn iterable.__iterate(function(v,k){return fn(v,k,this$0);},!reverse);};\n\nreversedSequence.__iterator=\nfunction(type,reverse){return iterable.__iterator(type,!reverse);};\nreturn reversedSequence;}\n\n\n\nfunction filterFactory(iterable,predicate,context,useKeys){\nvar filterSequence=makeSequence(iterable);\nif(useKeys){\nfilterSequence.has=function(key){\nvar v=iterable.get(key,NOT_SET);\nreturn v!==NOT_SET&&!!predicate.call(context,v,key,iterable);};\n\nfilterSequence.get=function(key,notSetValue){\nvar v=iterable.get(key,NOT_SET);\nreturn v!==NOT_SET&&predicate.call(context,v,key,iterable)?\nv:notSetValue;};}\n\n\nfilterSequence.__iterateUncached=function(fn,reverse){var this$0=this;\nvar iterations=0;\niterable.__iterate(function(v,k,c){\nif(predicate.call(context,v,k,c)){\niterations++;\nreturn fn(v,useKeys?k:iterations-1,this$0);}},\n\nreverse);\nreturn iterations;};\n\nfilterSequence.__iteratorUncached=function(type,reverse){\nvar iterator=iterable.__iterator(ITERATE_ENTRIES,reverse);\nvar iterations=0;\nreturn new Iterator(function(){\nwhile(true){\nvar step=iterator.next();\nif(step.done){\nreturn step;}\n\nvar entry=step.value;\nvar key=entry[0];\nvar value=entry[1];\nif(predicate.call(context,value,key,iterable)){\nreturn iteratorValue(type,useKeys?key:iterations++,value,step);}}});};\n\n\n\n\nreturn filterSequence;}\n\n\n\nfunction countByFactory(iterable,grouper,context){\nvar groups=Map().asMutable();\niterable.__iterate(function(v,k){\ngroups.update(\ngrouper.call(context,v,k,iterable),\n0,\nfunction(a){return a+1;});});\n\n\nreturn groups.asImmutable();}\n\n\n\nfunction groupByFactory(iterable,grouper,context){\nvar isKeyedIter=isKeyed(iterable);\nvar groups=(isOrdered(iterable)?OrderedMap():Map()).asMutable();\niterable.__iterate(function(v,k){\ngroups.update(\ngrouper.call(context,v,k,iterable),\nfunction(a){return a=a||[],a.push(isKeyedIter?[k,v]:v),a;});});\n\n\nvar coerce=iterableClass(iterable);\nreturn groups.map(function(arr){return reify(iterable,coerce(arr));});}\n\n\n\nfunction sliceFactory(iterable,begin,end,useKeys){\nvar originalSize=iterable.size;\n\n\n\nif(begin!==undefined){\nbegin=begin|0;}\n\nif(end!==undefined){\nend=end|0;}\n\n\nif(wholeSlice(begin,end,originalSize)){\nreturn iterable;}\n\n\nvar resolvedBegin=resolveBegin(begin,originalSize);\nvar resolvedEnd=resolveEnd(end,originalSize);\n\n\n\n\nif(resolvedBegin!==resolvedBegin||resolvedEnd!==resolvedEnd){\nreturn sliceFactory(iterable.toSeq().cacheResult(),begin,end,useKeys);}\n\n\n\n\n\n\nvar resolvedSize=resolvedEnd-resolvedBegin;\nvar sliceSize;\nif(resolvedSize===resolvedSize){\nsliceSize=resolvedSize<0?0:resolvedSize;}\n\n\nvar sliceSeq=makeSequence(iterable);\n\n\n\nsliceSeq.size=sliceSize===0?sliceSize:iterable.size&&sliceSize||undefined;\n\nif(!useKeys&&isSeq(iterable)&&sliceSize>=0){\nsliceSeq.get=function(index,notSetValue){\nindex=wrapIndex(this,index);\nreturn index>=0&&index<sliceSize?\niterable.get(index+resolvedBegin,notSetValue):\nnotSetValue;};}\n\n\n\nsliceSeq.__iterateUncached=function(fn,reverse){var this$0=this;\nif(sliceSize===0){\nreturn 0;}\n\nif(reverse){\nreturn this.cacheResult().__iterate(fn,reverse);}\n\nvar skipped=0;\nvar isSkipping=true;\nvar iterations=0;\niterable.__iterate(function(v,k){\nif(!(isSkipping&&(isSkipping=skipped++<resolvedBegin))){\niterations++;\nreturn fn(v,useKeys?k:iterations-1,this$0)!==false&&\niterations!==sliceSize;}});\n\n\nreturn iterations;};\n\n\nsliceSeq.__iteratorUncached=function(type,reverse){\nif(sliceSize!==0&&reverse){\nreturn this.cacheResult().__iterator(type,reverse);}\n\n\nvar iterator=sliceSize!==0&&iterable.__iterator(type,reverse);\nvar skipped=0;\nvar iterations=0;\nreturn new Iterator(function(){\nwhile(skipped++<resolvedBegin){\niterator.next();}\n\nif(++iterations>sliceSize){\nreturn iteratorDone();}\n\nvar step=iterator.next();\nif(useKeys||type===ITERATE_VALUES){\nreturn step;}else \nif(type===ITERATE_KEYS){\nreturn iteratorValue(type,iterations-1,undefined,step);}else \n{\nreturn iteratorValue(type,iterations-1,step.value[1],step);}});};\n\n\n\n\nreturn sliceSeq;}\n\n\n\nfunction takeWhileFactory(iterable,predicate,context){\nvar takeSequence=makeSequence(iterable);\ntakeSequence.__iterateUncached=function(fn,reverse){var this$0=this;\nif(reverse){\nreturn this.cacheResult().__iterate(fn,reverse);}\n\nvar iterations=0;\niterable.__iterate(function(v,k,c)\n{return predicate.call(context,v,k,c)&&++iterations&&fn(v,k,this$0);});\n\nreturn iterations;};\n\ntakeSequence.__iteratorUncached=function(type,reverse){var this$0=this;\nif(reverse){\nreturn this.cacheResult().__iterator(type,reverse);}\n\nvar iterator=iterable.__iterator(ITERATE_ENTRIES,reverse);\nvar iterating=true;\nreturn new Iterator(function(){\nif(!iterating){\nreturn iteratorDone();}\n\nvar step=iterator.next();\nif(step.done){\nreturn step;}\n\nvar entry=step.value;\nvar k=entry[0];\nvar v=entry[1];\nif(!predicate.call(context,v,k,this$0)){\niterating=false;\nreturn iteratorDone();}\n\nreturn type===ITERATE_ENTRIES?step:\niteratorValue(type,k,v,step);});};\n\n\nreturn takeSequence;}\n\n\n\nfunction skipWhileFactory(iterable,predicate,context,useKeys){\nvar skipSequence=makeSequence(iterable);\nskipSequence.__iterateUncached=function(fn,reverse){var this$0=this;\nif(reverse){\nreturn this.cacheResult().__iterate(fn,reverse);}\n\nvar isSkipping=true;\nvar iterations=0;\niterable.__iterate(function(v,k,c){\nif(!(isSkipping&&(isSkipping=predicate.call(context,v,k,c)))){\niterations++;\nreturn fn(v,useKeys?k:iterations-1,this$0);}});\n\n\nreturn iterations;};\n\nskipSequence.__iteratorUncached=function(type,reverse){var this$0=this;\nif(reverse){\nreturn this.cacheResult().__iterator(type,reverse);}\n\nvar iterator=iterable.__iterator(ITERATE_ENTRIES,reverse);\nvar skipping=true;\nvar iterations=0;\nreturn new Iterator(function(){\nvar step,k,v;\ndo {\nstep=iterator.next();\nif(step.done){\nif(useKeys||type===ITERATE_VALUES){\nreturn step;}else \nif(type===ITERATE_KEYS){\nreturn iteratorValue(type,iterations++,undefined,step);}else \n{\nreturn iteratorValue(type,iterations++,step.value[1],step);}}\n\n\nvar entry=step.value;\nk=entry[0];\nv=entry[1];\nskipping&&(skipping=predicate.call(context,v,k,this$0));}while(\nskipping);\nreturn type===ITERATE_ENTRIES?step:\niteratorValue(type,k,v,step);});};\n\n\nreturn skipSequence;}\n\n\n\nfunction concatFactory(iterable,values){\nvar isKeyedIterable=isKeyed(iterable);\nvar iters=[iterable].concat(values).map(function(v){\nif(!isIterable(v)){\nv=isKeyedIterable?\nkeyedSeqFromValue(v):\nindexedSeqFromValue(Array.isArray(v)?v:[v]);}else \nif(isKeyedIterable){\nv=KeyedIterable(v);}\n\nreturn v;}).\nfilter(function(v){return v.size!==0;});\n\nif(iters.length===0){\nreturn iterable;}\n\n\nif(iters.length===1){\nvar singleton=iters[0];\nif(singleton===iterable||\nisKeyedIterable&&isKeyed(singleton)||\nisIndexed(iterable)&&isIndexed(singleton)){\nreturn singleton;}}\n\n\n\nvar concatSeq=new ArraySeq(iters);\nif(isKeyedIterable){\nconcatSeq=concatSeq.toKeyedSeq();}else \nif(!isIndexed(iterable)){\nconcatSeq=concatSeq.toSetSeq();}\n\nconcatSeq=concatSeq.flatten(true);\nconcatSeq.size=iters.reduce(\nfunction(sum,seq){\nif(sum!==undefined){\nvar size=seq.size;\nif(size!==undefined){\nreturn sum+size;}}},\n\n\n\n0);\n\nreturn concatSeq;}\n\n\n\nfunction flattenFactory(iterable,depth,useKeys){\nvar flatSequence=makeSequence(iterable);\nflatSequence.__iterateUncached=function(fn,reverse){\nvar iterations=0;\nvar stopped=false;\nfunction flatDeep(iter,currentDepth){var this$0=this;\niter.__iterate(function(v,k){\nif((!depth||currentDepth<depth)&&isIterable(v)){\nflatDeep(v,currentDepth+1);}else \nif(fn(v,useKeys?k:iterations++,this$0)===false){\nstopped=true;}\n\nreturn !stopped;},\nreverse);}\n\nflatDeep(iterable,0);\nreturn iterations;};\n\nflatSequence.__iteratorUncached=function(type,reverse){\nvar iterator=iterable.__iterator(type,reverse);\nvar stack=[];\nvar iterations=0;\nreturn new Iterator(function(){\nwhile(iterator){\nvar step=iterator.next();\nif(step.done!==false){\niterator=stack.pop();\ncontinue;}\n\nvar v=step.value;\nif(type===ITERATE_ENTRIES){\nv=v[1];}\n\nif((!depth||stack.length<depth)&&isIterable(v)){\nstack.push(iterator);\niterator=v.__iterator(type,reverse);}else \n{\nreturn useKeys?step:iteratorValue(type,iterations++,v,step);}}\n\n\nreturn iteratorDone();});};\n\n\nreturn flatSequence;}\n\n\n\nfunction flatMapFactory(iterable,mapper,context){\nvar coerce=iterableClass(iterable);\nreturn iterable.toSeq().map(\nfunction(v,k){return coerce(mapper.call(context,v,k,iterable));}).\nflatten(true);}\n\n\n\nfunction interposeFactory(iterable,separator){\nvar interposedSequence=makeSequence(iterable);\ninterposedSequence.size=iterable.size&&iterable.size*2-1;\ninterposedSequence.__iterateUncached=function(fn,reverse){var this$0=this;\nvar iterations=0;\niterable.__iterate(function(v,k)\n{return (!iterations||fn(separator,iterations++,this$0)!==false)&&\nfn(v,iterations++,this$0)!==false;},\nreverse);\n\nreturn iterations;};\n\ninterposedSequence.__iteratorUncached=function(type,reverse){\nvar iterator=iterable.__iterator(ITERATE_VALUES,reverse);\nvar iterations=0;\nvar step;\nreturn new Iterator(function(){\nif(!step||iterations%2){\nstep=iterator.next();\nif(step.done){\nreturn step;}}\n\n\nreturn iterations%2?\niteratorValue(type,iterations++,separator):\niteratorValue(type,iterations++,step.value,step);});};\n\n\nreturn interposedSequence;}\n\n\n\nfunction sortFactory(iterable,comparator,mapper){\nif(!comparator){\ncomparator=defaultComparator;}\n\nvar isKeyedIterable=isKeyed(iterable);\nvar index=0;\nvar entries=iterable.toSeq().map(\nfunction(v,k){return [k,v,index++,mapper?mapper(v,k,iterable):v];}).\ntoArray();\nentries.sort(function(a,b){return comparator(a[3],b[3])||a[2]-b[2];}).forEach(\nisKeyedIterable?\nfunction(v,i){entries[i].length=2;}:\nfunction(v,i){entries[i]=v[1];});\n\nreturn isKeyedIterable?KeyedSeq(entries):\nisIndexed(iterable)?IndexedSeq(entries):\nSetSeq(entries);}\n\n\n\nfunction maxFactory(iterable,comparator,mapper){\nif(!comparator){\ncomparator=defaultComparator;}\n\nif(mapper){\nvar entry=iterable.toSeq().\nmap(function(v,k){return [v,mapper(v,k,iterable)];}).\nreduce(function(a,b){return maxCompare(comparator,a[1],b[1])?b:a;});\nreturn entry&&entry[0];}else \n{\nreturn iterable.reduce(function(a,b){return maxCompare(comparator,a,b)?b:a;});}}\n\n\n\nfunction maxCompare(comparator,a,b){\nvar comp=comparator(b,a);\n\n\nreturn comp===0&&b!==a&&(b===undefined||b===null||b!==b)||comp>0;}\n\n\n\nfunction zipWithFactory(keyIter,zipper,iters){\nvar zipSequence=makeSequence(keyIter);\nzipSequence.size=new ArraySeq(iters).map(function(i){return i.size;}).min();\n\n\nzipSequence.__iterate=function(fn,reverse){\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar iterator=this.__iterator(ITERATE_VALUES,reverse);\nvar step;\nvar iterations=0;\nwhile(!(step=iterator.next()).done){\nif(fn(step.value,iterations++,this)===false){\nbreak;}}\n\n\nreturn iterations;};\n\nzipSequence.__iteratorUncached=function(type,reverse){\nvar iterators=iters.map(function(i)\n{return i=Iterable(i),getIterator(reverse?i.reverse():i);});\n\nvar iterations=0;\nvar isDone=false;\nreturn new Iterator(function(){\nvar steps;\nif(!isDone){\nsteps=iterators.map(function(i){return i.next();});\nisDone=steps.some(function(s){return s.done;});}\n\nif(isDone){\nreturn iteratorDone();}\n\nreturn iteratorValue(\ntype,\niterations++,\nzipper.apply(null,steps.map(function(s){return s.value;})));});};\n\n\n\nreturn zipSequence;}\n\n\n\n\n\nfunction reify(iter,seq){\nreturn isSeq(iter)?seq:iter.constructor(seq);}\n\n\nfunction validateEntry(entry){\nif(entry!==Object(entry)){\nthrow new TypeError('Expected [K, V] tuple: '+entry);}}\n\n\n\nfunction resolveSize(iter){\nassertNotInfinite(iter.size);\nreturn ensureSize(iter);}\n\n\nfunction iterableClass(iterable){\nreturn isKeyed(iterable)?KeyedIterable:\nisIndexed(iterable)?IndexedIterable:\nSetIterable;}\n\n\nfunction makeSequence(iterable){\nreturn Object.create(\n(\nisKeyed(iterable)?KeyedSeq:\nisIndexed(iterable)?IndexedSeq:\nSetSeq).\nprototype);}\n\n\n\nfunction cacheResultThrough(){\nif(this._iter.cacheResult){\nthis._iter.cacheResult();\nthis.size=this._iter.size;\nreturn this;}else \n{\nreturn Seq.prototype.cacheResult.call(this);}}\n\n\n\nfunction defaultComparator(a,b){\nreturn a>b?1:a<b?-1:0;}\n\n\nfunction forceIterator(keyPath){\nvar iter=getIterator(keyPath);\nif(!iter){\n\n\nif(!isArrayLike(keyPath)){\nthrow new TypeError('Expected iterable or array-like: '+keyPath);}\n\niter=getIterator(Iterable(keyPath));}\n\nreturn iter;}\n\n\ncreateClass(Record,KeyedCollection);\n\nfunction Record(defaultValues,name){\nvar hasInitialized;\n\nvar RecordType=function Record(values){\nif(values instanceof RecordType){\nreturn values;}\n\nif(!(this instanceof RecordType)){\nreturn new RecordType(values);}\n\nif(!hasInitialized){\nhasInitialized=true;\nvar keys=Object.keys(defaultValues);\nsetProps(RecordTypePrototype,keys);\nRecordTypePrototype.size=keys.length;\nRecordTypePrototype._name=name;\nRecordTypePrototype._keys=keys;\nRecordTypePrototype._defaultValues=defaultValues;}\n\nthis._map=Map(values);};\n\n\nvar RecordTypePrototype=RecordType.prototype=Object.create(RecordPrototype);\nRecordTypePrototype.constructor=RecordType;\n\nreturn RecordType;}\n\n\nRecord.prototype.toString=function(){\nreturn this.__toString(recordName(this)+' {','}');};\n\n\n\n\nRecord.prototype.has=function(k){\nreturn this._defaultValues.hasOwnProperty(k);};\n\n\nRecord.prototype.get=function(k,notSetValue){\nif(!this.has(k)){\nreturn notSetValue;}\n\nvar defaultVal=this._defaultValues[k];\nreturn this._map?this._map.get(k,defaultVal):defaultVal;};\n\n\n\n\nRecord.prototype.clear=function(){\nif(this.__ownerID){\nthis._map&&this._map.clear();\nreturn this;}\n\nvar RecordType=this.constructor;\nreturn RecordType._empty||(RecordType._empty=makeRecord(this,emptyMap()));};\n\n\nRecord.prototype.set=function(k,v){\nif(!this.has(k)){\nthrow new Error('Cannot set unknown key \"'+k+'\" on '+recordName(this));}\n\nvar newMap=this._map&&this._map.set(k,v);\nif(this.__ownerID||newMap===this._map){\nreturn this;}\n\nreturn makeRecord(this,newMap);};\n\n\nRecord.prototype.remove=function(k){\nif(!this.has(k)){\nreturn this;}\n\nvar newMap=this._map&&this._map.remove(k);\nif(this.__ownerID||newMap===this._map){\nreturn this;}\n\nreturn makeRecord(this,newMap);};\n\n\nRecord.prototype.wasAltered=function(){\nreturn this._map.wasAltered();};\n\n\nRecord.prototype.__iterator=function(type,reverse){var this$0=this;\nreturn KeyedIterable(this._defaultValues).map(function(_,k){return this$0.get(k);}).__iterator(type,reverse);};\n\n\nRecord.prototype.__iterate=function(fn,reverse){var this$0=this;\nreturn KeyedIterable(this._defaultValues).map(function(_,k){return this$0.get(k);}).__iterate(fn,reverse);};\n\n\nRecord.prototype.__ensureOwner=function(ownerID){\nif(ownerID===this.__ownerID){\nreturn this;}\n\nvar newMap=this._map&&this._map.__ensureOwner(ownerID);\nif(!ownerID){\nthis.__ownerID=ownerID;\nthis._map=newMap;\nreturn this;}\n\nreturn makeRecord(this,newMap,ownerID);};\n\n\n\nvar RecordPrototype=Record.prototype;\nRecordPrototype[DELETE]=RecordPrototype.remove;\nRecordPrototype.deleteIn=\nRecordPrototype.removeIn=MapPrototype.removeIn;\nRecordPrototype.merge=MapPrototype.merge;\nRecordPrototype.mergeWith=MapPrototype.mergeWith;\nRecordPrototype.mergeIn=MapPrototype.mergeIn;\nRecordPrototype.mergeDeep=MapPrototype.mergeDeep;\nRecordPrototype.mergeDeepWith=MapPrototype.mergeDeepWith;\nRecordPrototype.mergeDeepIn=MapPrototype.mergeDeepIn;\nRecordPrototype.setIn=MapPrototype.setIn;\nRecordPrototype.update=MapPrototype.update;\nRecordPrototype.updateIn=MapPrototype.updateIn;\nRecordPrototype.withMutations=MapPrototype.withMutations;\nRecordPrototype.asMutable=MapPrototype.asMutable;\nRecordPrototype.asImmutable=MapPrototype.asImmutable;\n\n\nfunction makeRecord(likeRecord,map,ownerID){\nvar record=Object.create(Object.getPrototypeOf(likeRecord));\nrecord._map=map;\nrecord.__ownerID=ownerID;\nreturn record;}\n\n\nfunction recordName(record){\nreturn record._name||record.constructor.name||'Record';}\n\n\nfunction setProps(prototype,names){\ntry{\nnames.forEach(setProp.bind(undefined,prototype));}\ncatch(error) {}}\n\n\n\n\nfunction setProp(prototype,name){\nObject.defineProperty(prototype,name,{\nget:function(){\nreturn this.get(name);},\n\nset:function(value){\ninvariant(this.__ownerID,'Cannot set on an immutable record.');\nthis.set(name,value);}});}\n\n\n\n\ncreateClass(Set,SetCollection);\n\n\n\nfunction Set(value){\nreturn value===null||value===undefined?emptySet():\nisSet(value)&&!isOrdered(value)?value:\nemptySet().withMutations(function(set){\nvar iter=SetIterable(value);\nassertNotInfinite(iter.size);\niter.forEach(function(v){return set.add(v);});});}\n\n\n\nSet.of=function(){\nreturn this(arguments);};\n\n\nSet.fromKeys=function(value){\nreturn this(KeyedIterable(value).keySeq());};\n\n\nSet.prototype.toString=function(){\nreturn this.__toString('Set {','}');};\n\n\n\n\nSet.prototype.has=function(value){\nreturn this._map.has(value);};\n\n\n\n\nSet.prototype.add=function(value){\nreturn updateSet(this,this._map.set(value,true));};\n\n\nSet.prototype.remove=function(value){\nreturn updateSet(this,this._map.remove(value));};\n\n\nSet.prototype.clear=function(){\nreturn updateSet(this,this._map.clear());};\n\n\n\n\nSet.prototype.union=function(){var iters=SLICE$0.call(arguments,0);\niters=iters.filter(function(x){return x.size!==0;});\nif(iters.length===0){\nreturn this;}\n\nif(this.size===0&&!this.__ownerID&&iters.length===1){\nreturn this.constructor(iters[0]);}\n\nreturn this.withMutations(function(set){\nfor(var ii=0;ii<iters.length;ii++){\nSetIterable(iters[ii]).forEach(function(value){return set.add(value);});}});};\n\n\n\n\nSet.prototype.intersect=function(){var iters=SLICE$0.call(arguments,0);\nif(iters.length===0){\nreturn this;}\n\niters=iters.map(function(iter){return SetIterable(iter);});\nvar originalSet=this;\nreturn this.withMutations(function(set){\noriginalSet.forEach(function(value){\nif(!iters.every(function(iter){return iter.includes(value);})){\nset.remove(value);}});});};\n\n\n\n\n\nSet.prototype.subtract=function(){var iters=SLICE$0.call(arguments,0);\nif(iters.length===0){\nreturn this;}\n\niters=iters.map(function(iter){return SetIterable(iter);});\nvar originalSet=this;\nreturn this.withMutations(function(set){\noriginalSet.forEach(function(value){\nif(iters.some(function(iter){return iter.includes(value);})){\nset.remove(value);}});});};\n\n\n\n\n\nSet.prototype.merge=function(){\nreturn this.union.apply(this,arguments);};\n\n\nSet.prototype.mergeWith=function(merger){var iters=SLICE$0.call(arguments,1);\nreturn this.union.apply(this,iters);};\n\n\nSet.prototype.sort=function(comparator){\n\nreturn OrderedSet(sortFactory(this,comparator));};\n\n\nSet.prototype.sortBy=function(mapper,comparator){\n\nreturn OrderedSet(sortFactory(this,comparator,mapper));};\n\n\nSet.prototype.wasAltered=function(){\nreturn this._map.wasAltered();};\n\n\nSet.prototype.__iterate=function(fn,reverse){var this$0=this;\nreturn this._map.__iterate(function(_,k){return fn(k,k,this$0);},reverse);};\n\n\nSet.prototype.__iterator=function(type,reverse){\nreturn this._map.map(function(_,k){return k;}).__iterator(type,reverse);};\n\n\nSet.prototype.__ensureOwner=function(ownerID){\nif(ownerID===this.__ownerID){\nreturn this;}\n\nvar newMap=this._map.__ensureOwner(ownerID);\nif(!ownerID){\nthis.__ownerID=ownerID;\nthis._map=newMap;\nreturn this;}\n\nreturn this.__make(newMap,ownerID);};\n\n\n\nfunction isSet(maybeSet){\nreturn !!(maybeSet&&maybeSet[IS_SET_SENTINEL]);}\n\n\nSet.isSet=isSet;\n\nvar IS_SET_SENTINEL='@@__IMMUTABLE_SET__@@';\n\nvar SetPrototype=Set.prototype;\nSetPrototype[IS_SET_SENTINEL]=true;\nSetPrototype[DELETE]=SetPrototype.remove;\nSetPrototype.mergeDeep=SetPrototype.merge;\nSetPrototype.mergeDeepWith=SetPrototype.mergeWith;\nSetPrototype.withMutations=MapPrototype.withMutations;\nSetPrototype.asMutable=MapPrototype.asMutable;\nSetPrototype.asImmutable=MapPrototype.asImmutable;\n\nSetPrototype.__empty=emptySet;\nSetPrototype.__make=makeSet;\n\nfunction updateSet(set,newMap){\nif(set.__ownerID){\nset.size=newMap.size;\nset._map=newMap;\nreturn set;}\n\nreturn newMap===set._map?set:\nnewMap.size===0?set.__empty():\nset.__make(newMap);}\n\n\nfunction makeSet(map,ownerID){\nvar set=Object.create(SetPrototype);\nset.size=map?map.size:0;\nset._map=map;\nset.__ownerID=ownerID;\nreturn set;}\n\n\nvar EMPTY_SET;\nfunction emptySet(){\nreturn EMPTY_SET||(EMPTY_SET=makeSet(emptyMap()));}\n\n\ncreateClass(OrderedSet,Set);\n\n\n\nfunction OrderedSet(value){\nreturn value===null||value===undefined?emptyOrderedSet():\nisOrderedSet(value)?value:\nemptyOrderedSet().withMutations(function(set){\nvar iter=SetIterable(value);\nassertNotInfinite(iter.size);\niter.forEach(function(v){return set.add(v);});});}\n\n\n\nOrderedSet.of=function(){\nreturn this(arguments);};\n\n\nOrderedSet.fromKeys=function(value){\nreturn this(KeyedIterable(value).keySeq());};\n\n\nOrderedSet.prototype.toString=function(){\nreturn this.__toString('OrderedSet {','}');};\n\n\n\nfunction isOrderedSet(maybeOrderedSet){\nreturn isSet(maybeOrderedSet)&&isOrdered(maybeOrderedSet);}\n\n\nOrderedSet.isOrderedSet=isOrderedSet;\n\nvar OrderedSetPrototype=OrderedSet.prototype;\nOrderedSetPrototype[IS_ORDERED_SENTINEL]=true;\n\nOrderedSetPrototype.__empty=emptyOrderedSet;\nOrderedSetPrototype.__make=makeOrderedSet;\n\nfunction makeOrderedSet(map,ownerID){\nvar set=Object.create(OrderedSetPrototype);\nset.size=map?map.size:0;\nset._map=map;\nset.__ownerID=ownerID;\nreturn set;}\n\n\nvar EMPTY_ORDERED_SET;\nfunction emptyOrderedSet(){\nreturn EMPTY_ORDERED_SET||(EMPTY_ORDERED_SET=makeOrderedSet(emptyOrderedMap()));}\n\n\ncreateClass(Stack,IndexedCollection);\n\n\n\nfunction Stack(value){\nreturn value===null||value===undefined?emptyStack():\nisStack(value)?value:\nemptyStack().unshiftAll(value);}\n\n\nStack.of=function(){\nreturn this(arguments);};\n\n\nStack.prototype.toString=function(){\nreturn this.__toString('Stack [',']');};\n\n\n\n\nStack.prototype.get=function(index,notSetValue){\nvar head=this._head;\nindex=wrapIndex(this,index);\nwhile(head&&index--){\nhead=head.next;}\n\nreturn head?head.value:notSetValue;};\n\n\nStack.prototype.peek=function(){\nreturn this._head&&this._head.value;};\n\n\n\n\nStack.prototype.push=function(){\nif(arguments.length===0){\nreturn this;}\n\nvar newSize=this.size+arguments.length;\nvar head=this._head;\nfor(var ii=arguments.length-1;ii>=0;ii--){\nhead={\nvalue:arguments[ii],\nnext:head};}\n\n\nif(this.__ownerID){\nthis.size=newSize;\nthis._head=head;\nthis.__hash=undefined;\nthis.__altered=true;\nreturn this;}\n\nreturn makeStack(newSize,head);};\n\n\nStack.prototype.pushAll=function(iter){\niter=IndexedIterable(iter);\nif(iter.size===0){\nreturn this;}\n\nassertNotInfinite(iter.size);\nvar newSize=this.size;\nvar head=this._head;\niter.reverse().forEach(function(value){\nnewSize++;\nhead={\nvalue:value,\nnext:head};});\n\n\nif(this.__ownerID){\nthis.size=newSize;\nthis._head=head;\nthis.__hash=undefined;\nthis.__altered=true;\nreturn this;}\n\nreturn makeStack(newSize,head);};\n\n\nStack.prototype.pop=function(){\nreturn this.slice(1);};\n\n\nStack.prototype.unshift=function(){\nreturn this.push.apply(this,arguments);};\n\n\nStack.prototype.unshiftAll=function(iter){\nreturn this.pushAll(iter);};\n\n\nStack.prototype.shift=function(){\nreturn this.pop.apply(this,arguments);};\n\n\nStack.prototype.clear=function(){\nif(this.size===0){\nreturn this;}\n\nif(this.__ownerID){\nthis.size=0;\nthis._head=undefined;\nthis.__hash=undefined;\nthis.__altered=true;\nreturn this;}\n\nreturn emptyStack();};\n\n\nStack.prototype.slice=function(begin,end){\nif(wholeSlice(begin,end,this.size)){\nreturn this;}\n\nvar resolvedBegin=resolveBegin(begin,this.size);\nvar resolvedEnd=resolveEnd(end,this.size);\nif(resolvedEnd!==this.size){\n\nreturn IndexedCollection.prototype.slice.call(this,begin,end);}\n\nvar newSize=this.size-resolvedBegin;\nvar head=this._head;\nwhile(resolvedBegin--){\nhead=head.next;}\n\nif(this.__ownerID){\nthis.size=newSize;\nthis._head=head;\nthis.__hash=undefined;\nthis.__altered=true;\nreturn this;}\n\nreturn makeStack(newSize,head);};\n\n\n\n\nStack.prototype.__ensureOwner=function(ownerID){\nif(ownerID===this.__ownerID){\nreturn this;}\n\nif(!ownerID){\nthis.__ownerID=ownerID;\nthis.__altered=false;\nreturn this;}\n\nreturn makeStack(this.size,this._head,ownerID,this.__hash);};\n\n\n\n\nStack.prototype.__iterate=function(fn,reverse){\nif(reverse){\nreturn this.reverse().__iterate(fn);}\n\nvar iterations=0;\nvar node=this._head;\nwhile(node){\nif(fn(node.value,iterations++,this)===false){\nbreak;}\n\nnode=node.next;}\n\nreturn iterations;};\n\n\nStack.prototype.__iterator=function(type,reverse){\nif(reverse){\nreturn this.reverse().__iterator(type);}\n\nvar iterations=0;\nvar node=this._head;\nreturn new Iterator(function(){\nif(node){\nvar value=node.value;\nnode=node.next;\nreturn iteratorValue(type,iterations++,value);}\n\nreturn iteratorDone();});};\n\n\n\n\nfunction isStack(maybeStack){\nreturn !!(maybeStack&&maybeStack[IS_STACK_SENTINEL]);}\n\n\nStack.isStack=isStack;\n\nvar IS_STACK_SENTINEL='@@__IMMUTABLE_STACK__@@';\n\nvar StackPrototype=Stack.prototype;\nStackPrototype[IS_STACK_SENTINEL]=true;\nStackPrototype.withMutations=MapPrototype.withMutations;\nStackPrototype.asMutable=MapPrototype.asMutable;\nStackPrototype.asImmutable=MapPrototype.asImmutable;\nStackPrototype.wasAltered=MapPrototype.wasAltered;\n\n\nfunction makeStack(size,head,ownerID,hash){\nvar map=Object.create(StackPrototype);\nmap.size=size;\nmap._head=head;\nmap.__ownerID=ownerID;\nmap.__hash=hash;\nmap.__altered=false;\nreturn map;}\n\n\nvar EMPTY_STACK;\nfunction emptyStack(){\nreturn EMPTY_STACK||(EMPTY_STACK=makeStack(0));}\n\n\n\n\n\nfunction mixin(ctor,methods){\nvar keyCopier=function(key){ctor.prototype[key]=methods[key];};\nObject.keys(methods).forEach(keyCopier);\nObject.getOwnPropertySymbols&&\nObject.getOwnPropertySymbols(methods).forEach(keyCopier);\nreturn ctor;}\n\n\nIterable.Iterator=Iterator;\n\nmixin(Iterable,{\n\n\n\ntoArray:function(){\nassertNotInfinite(this.size);\nvar array=new Array(this.size||0);\nthis.valueSeq().__iterate(function(v,i){array[i]=v;});\nreturn array;},\n\n\ntoIndexedSeq:function(){\nreturn new ToIndexedSequence(this);},\n\n\ntoJS:function(){\nreturn this.toSeq().map(\nfunction(value){return value&&typeof value.toJS==='function'?value.toJS():value;}).\n__toJS();},\n\n\ntoJSON:function(){\nreturn this.toSeq().map(\nfunction(value){return value&&typeof value.toJSON==='function'?value.toJSON():value;}).\n__toJS();},\n\n\ntoKeyedSeq:function(){\nreturn new ToKeyedSequence(this,true);},\n\n\ntoMap:function(){\n\nreturn Map(this.toKeyedSeq());},\n\n\ntoObject:function(){\nassertNotInfinite(this.size);\nvar object={};\nthis.__iterate(function(v,k){object[k]=v;});\nreturn object;},\n\n\ntoOrderedMap:function(){\n\nreturn OrderedMap(this.toKeyedSeq());},\n\n\ntoOrderedSet:function(){\n\nreturn OrderedSet(isKeyed(this)?this.valueSeq():this);},\n\n\ntoSet:function(){\n\nreturn Set(isKeyed(this)?this.valueSeq():this);},\n\n\ntoSetSeq:function(){\nreturn new ToSetSequence(this);},\n\n\ntoSeq:function(){\nreturn isIndexed(this)?this.toIndexedSeq():\nisKeyed(this)?this.toKeyedSeq():\nthis.toSetSeq();},\n\n\ntoStack:function(){\n\nreturn Stack(isKeyed(this)?this.valueSeq():this);},\n\n\ntoList:function(){\n\nreturn List(isKeyed(this)?this.valueSeq():this);},\n\n\n\n\n\ntoString:function(){\nreturn '[Iterable]';},\n\n\n__toString:function(head,tail){\nif(this.size===0){\nreturn head+tail;}\n\nreturn head+' '+this.toSeq().map(this.__toStringMapper).join(', ')+' '+tail;},\n\n\n\n\n\nconcat:function(){var values=SLICE$0.call(arguments,0);\nreturn reify(this,concatFactory(this,values));},\n\n\nincludes:function(searchValue){\nreturn this.some(function(value){return is(value,searchValue);});},\n\n\nentries:function(){\nreturn this.__iterator(ITERATE_ENTRIES);},\n\n\nevery:function(predicate,context){\nassertNotInfinite(this.size);\nvar returnValue=true;\nthis.__iterate(function(v,k,c){\nif(!predicate.call(context,v,k,c)){\nreturnValue=false;\nreturn false;}});\n\n\nreturn returnValue;},\n\n\nfilter:function(predicate,context){\nreturn reify(this,filterFactory(this,predicate,context,true));},\n\n\nfind:function(predicate,context,notSetValue){\nvar entry=this.findEntry(predicate,context);\nreturn entry?entry[1]:notSetValue;},\n\n\nfindEntry:function(predicate,context){\nvar found;\nthis.__iterate(function(v,k,c){\nif(predicate.call(context,v,k,c)){\nfound=[k,v];\nreturn false;}});\n\n\nreturn found;},\n\n\nfindLastEntry:function(predicate,context){\nreturn this.toSeq().reverse().findEntry(predicate,context);},\n\n\nforEach:function(sideEffect,context){\nassertNotInfinite(this.size);\nreturn this.__iterate(context?sideEffect.bind(context):sideEffect);},\n\n\njoin:function(separator){\nassertNotInfinite(this.size);\nseparator=separator!==undefined?''+separator:',';\nvar joined='';\nvar isFirst=true;\nthis.__iterate(function(v){\nisFirst?isFirst=false:joined+=separator;\njoined+=v!==null&&v!==undefined?v.toString():'';});\n\nreturn joined;},\n\n\nkeys:function(){\nreturn this.__iterator(ITERATE_KEYS);},\n\n\nmap:function(mapper,context){\nreturn reify(this,mapFactory(this,mapper,context));},\n\n\nreduce:function(reducer,initialReduction,context){\nassertNotInfinite(this.size);\nvar reduction;\nvar useFirst;\nif(arguments.length<2){\nuseFirst=true;}else \n{\nreduction=initialReduction;}\n\nthis.__iterate(function(v,k,c){\nif(useFirst){\nuseFirst=false;\nreduction=v;}else \n{\nreduction=reducer.call(context,reduction,v,k,c);}});\n\n\nreturn reduction;},\n\n\nreduceRight:function(reducer,initialReduction,context){\nvar reversed=this.toKeyedSeq().reverse();\nreturn reversed.reduce.apply(reversed,arguments);},\n\n\nreverse:function(){\nreturn reify(this,reverseFactory(this,true));},\n\n\nslice:function(begin,end){\nreturn reify(this,sliceFactory(this,begin,end,true));},\n\n\nsome:function(predicate,context){\nreturn !this.every(not(predicate),context);},\n\n\nsort:function(comparator){\nreturn reify(this,sortFactory(this,comparator));},\n\n\nvalues:function(){\nreturn this.__iterator(ITERATE_VALUES);},\n\n\n\n\n\nbutLast:function(){\nreturn this.slice(0,-1);},\n\n\nisEmpty:function(){\nreturn this.size!==undefined?this.size===0:!this.some(function(){return true;});},\n\n\ncount:function(predicate,context){\nreturn ensureSize(\npredicate?this.toSeq().filter(predicate,context):this);},\n\n\n\ncountBy:function(grouper,context){\nreturn countByFactory(this,grouper,context);},\n\n\nequals:function(other){\nreturn deepEqual(this,other);},\n\n\nentrySeq:function(){\nvar iterable=this;\nif(iterable._cache){\n\nreturn new ArraySeq(iterable._cache);}\n\nvar entriesSequence=iterable.toSeq().map(entryMapper).toIndexedSeq();\nentriesSequence.fromEntrySeq=function(){return iterable.toSeq();};\nreturn entriesSequence;},\n\n\nfilterNot:function(predicate,context){\nreturn this.filter(not(predicate),context);},\n\n\nfindLast:function(predicate,context,notSetValue){\nreturn this.toKeyedSeq().reverse().find(predicate,context,notSetValue);},\n\n\nfirst:function(){\nreturn this.find(returnTrue);},\n\n\nflatMap:function(mapper,context){\nreturn reify(this,flatMapFactory(this,mapper,context));},\n\n\nflatten:function(depth){\nreturn reify(this,flattenFactory(this,depth,true));},\n\n\nfromEntrySeq:function(){\nreturn new FromEntriesSequence(this);},\n\n\nget:function(searchKey,notSetValue){\nreturn this.find(function(_,key){return is(key,searchKey);},undefined,notSetValue);},\n\n\ngetIn:function(searchKeyPath,notSetValue){\nvar nested=this;\n\n\nvar iter=forceIterator(searchKeyPath);\nvar step;\nwhile(!(step=iter.next()).done){\nvar key=step.value;\nnested=nested&&nested.get?nested.get(key,NOT_SET):NOT_SET;\nif(nested===NOT_SET){\nreturn notSetValue;}}\n\n\nreturn nested;},\n\n\ngroupBy:function(grouper,context){\nreturn groupByFactory(this,grouper,context);},\n\n\nhas:function(searchKey){\nreturn this.get(searchKey,NOT_SET)!==NOT_SET;},\n\n\nhasIn:function(searchKeyPath){\nreturn this.getIn(searchKeyPath,NOT_SET)!==NOT_SET;},\n\n\nisSubset:function(iter){\niter=typeof iter.includes==='function'?iter:Iterable(iter);\nreturn this.every(function(value){return iter.includes(value);});},\n\n\nisSuperset:function(iter){\niter=typeof iter.isSubset==='function'?iter:Iterable(iter);\nreturn iter.isSubset(this);},\n\n\nkeySeq:function(){\nreturn this.toSeq().map(keyMapper).toIndexedSeq();},\n\n\nlast:function(){\nreturn this.toSeq().reverse().first();},\n\n\nmax:function(comparator){\nreturn maxFactory(this,comparator);},\n\n\nmaxBy:function(mapper,comparator){\nreturn maxFactory(this,comparator,mapper);},\n\n\nmin:function(comparator){\nreturn maxFactory(this,comparator?neg(comparator):defaultNegComparator);},\n\n\nminBy:function(mapper,comparator){\nreturn maxFactory(this,comparator?neg(comparator):defaultNegComparator,mapper);},\n\n\nrest:function(){\nreturn this.slice(1);},\n\n\nskip:function(amount){\nreturn this.slice(Math.max(0,amount));},\n\n\nskipLast:function(amount){\nreturn reify(this,this.toSeq().reverse().skip(amount).reverse());},\n\n\nskipWhile:function(predicate,context){\nreturn reify(this,skipWhileFactory(this,predicate,context,true));},\n\n\nskipUntil:function(predicate,context){\nreturn this.skipWhile(not(predicate),context);},\n\n\nsortBy:function(mapper,comparator){\nreturn reify(this,sortFactory(this,comparator,mapper));},\n\n\ntake:function(amount){\nreturn this.slice(0,Math.max(0,amount));},\n\n\ntakeLast:function(amount){\nreturn reify(this,this.toSeq().reverse().take(amount).reverse());},\n\n\ntakeWhile:function(predicate,context){\nreturn reify(this,takeWhileFactory(this,predicate,context));},\n\n\ntakeUntil:function(predicate,context){\nreturn this.takeWhile(not(predicate),context);},\n\n\nvalueSeq:function(){\nreturn this.toIndexedSeq();},\n\n\n\n\n\nhashCode:function(){\nreturn this.__hash||(this.__hash=hashIterable(this));}});\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar IterablePrototype=Iterable.prototype;\nIterablePrototype[IS_ITERABLE_SENTINEL]=true;\nIterablePrototype[ITERATOR_SYMBOL]=IterablePrototype.values;\nIterablePrototype.__toJS=IterablePrototype.toArray;\nIterablePrototype.__toStringMapper=quoteString;\nIterablePrototype.inspect=\nIterablePrototype.toSource=function(){return this.toString();};\nIterablePrototype.chain=IterablePrototype.flatMap;\nIterablePrototype.contains=IterablePrototype.includes;\n\n\n(function(){\ntry{\nObject.defineProperty(IterablePrototype,'length',{\nget:function(){\nif(!Iterable.noLengthWarning){\nvar stack;\ntry{\nthrow new Error();}\ncatch(error) {\nstack=error.stack;}\n\nif(stack.indexOf('_wrapObject')===-1){\nconsole&&console.warn&&console.warn(\n'iterable.length has been deprecated, '+\n'use iterable.size or iterable.count(). '+\n'This warning will become a silent error in a future version. '+\nstack);\n\nreturn this.size;}}}});}\n\n\n\n\ncatch(e) {}})();\n\n\n\n\nmixin(KeyedIterable,{\n\n\n\nflip:function(){\nreturn reify(this,flipFactory(this));},\n\n\nfindKey:function(predicate,context){\nvar entry=this.findEntry(predicate,context);\nreturn entry&&entry[0];},\n\n\nfindLastKey:function(predicate,context){\nreturn this.toSeq().reverse().findKey(predicate,context);},\n\n\nkeyOf:function(searchValue){\nreturn this.findKey(function(value){return is(value,searchValue);});},\n\n\nlastKeyOf:function(searchValue){\nreturn this.findLastKey(function(value){return is(value,searchValue);});},\n\n\nmapEntries:function(mapper,context){var this$0=this;\nvar iterations=0;\nreturn reify(this,\nthis.toSeq().map(\nfunction(v,k){return mapper.call(context,[k,v],iterations++,this$0);}).\nfromEntrySeq());},\n\n\n\nmapKeys:function(mapper,context){var this$0=this;\nreturn reify(this,\nthis.toSeq().flip().map(\nfunction(k,v){return mapper.call(context,k,v,this$0);}).\nflip());}});\n\n\n\n\n\nvar KeyedIterablePrototype=KeyedIterable.prototype;\nKeyedIterablePrototype[IS_KEYED_SENTINEL]=true;\nKeyedIterablePrototype[ITERATOR_SYMBOL]=IterablePrototype.entries;\nKeyedIterablePrototype.__toJS=IterablePrototype.toObject;\nKeyedIterablePrototype.__toStringMapper=function(v,k){return JSON.stringify(k)+': '+quoteString(v);};\n\n\n\nmixin(IndexedIterable,{\n\n\n\ntoKeyedSeq:function(){\nreturn new ToKeyedSequence(this,false);},\n\n\n\n\n\nfilter:function(predicate,context){\nreturn reify(this,filterFactory(this,predicate,context,false));},\n\n\nfindIndex:function(predicate,context){\nvar entry=this.findEntry(predicate,context);\nreturn entry?entry[0]:-1;},\n\n\nindexOf:function(searchValue){\nvar key=this.toKeyedSeq().keyOf(searchValue);\nreturn key===undefined?-1:key;},\n\n\nlastIndexOf:function(searchValue){\nvar key=this.toKeyedSeq().reverse().keyOf(searchValue);\nreturn key===undefined?-1:key;},\n\n\n\n\n\nreverse:function(){\nreturn reify(this,reverseFactory(this,false));},\n\n\nslice:function(begin,end){\nreturn reify(this,sliceFactory(this,begin,end,false));},\n\n\nsplice:function(index,removeNum){\nvar numArgs=arguments.length;\nremoveNum=Math.max(removeNum|0,0);\nif(numArgs===0||numArgs===2&&!removeNum){\nreturn this;}\n\n\n\n\nindex=resolveBegin(index,index<0?this.count():this.size);\nvar spliced=this.slice(0,index);\nreturn reify(\nthis,\nnumArgs===1?\nspliced:\nspliced.concat(arrCopy(arguments,2),this.slice(index+removeNum)));},\n\n\n\n\n\n\nfindLastIndex:function(predicate,context){\nvar key=this.toKeyedSeq().findLastKey(predicate,context);\nreturn key===undefined?-1:key;},\n\n\nfirst:function(){\nreturn this.get(0);},\n\n\nflatten:function(depth){\nreturn reify(this,flattenFactory(this,depth,false));},\n\n\nget:function(index,notSetValue){\nindex=wrapIndex(this,index);\nreturn index<0||this.size===Infinity||\nthis.size!==undefined&&index>this.size?\nnotSetValue:\nthis.find(function(_,key){return key===index;},undefined,notSetValue);},\n\n\nhas:function(index){\nindex=wrapIndex(this,index);\nreturn index>=0&&(this.size!==undefined?\nthis.size===Infinity||index<this.size:\nthis.indexOf(index)!==-1);},\n\n\n\ninterpose:function(separator){\nreturn reify(this,interposeFactory(this,separator));},\n\n\ninterleave:function(){\nvar iterables=[this].concat(arrCopy(arguments));\nvar zipped=zipWithFactory(this.toSeq(),IndexedSeq.of,iterables);\nvar interleaved=zipped.flatten(true);\nif(zipped.size){\ninterleaved.size=zipped.size*iterables.length;}\n\nreturn reify(this,interleaved);},\n\n\nlast:function(){\nreturn this.get(-1);},\n\n\nskipWhile:function(predicate,context){\nreturn reify(this,skipWhileFactory(this,predicate,context,false));},\n\n\nzip:function(){\nvar iterables=[this].concat(arrCopy(arguments));\nreturn reify(this,zipWithFactory(this,defaultZipper,iterables));},\n\n\nzipWith:function(zipper){\nvar iterables=arrCopy(arguments);\niterables[0]=this;\nreturn reify(this,zipWithFactory(this,zipper,iterables));}});\n\n\n\n\nIndexedIterable.prototype[IS_INDEXED_SENTINEL]=true;\nIndexedIterable.prototype[IS_ORDERED_SENTINEL]=true;\n\n\n\nmixin(SetIterable,{\n\n\n\nget:function(value,notSetValue){\nreturn this.has(value)?value:notSetValue;},\n\n\nincludes:function(value){\nreturn this.has(value);},\n\n\n\n\n\nkeySeq:function(){\nreturn this.valueSeq();}});\n\n\n\n\nSetIterable.prototype.has=IterablePrototype.includes;\n\n\n\n\nmixin(KeyedSeq,KeyedIterable.prototype);\nmixin(IndexedSeq,IndexedIterable.prototype);\nmixin(SetSeq,SetIterable.prototype);\n\nmixin(KeyedCollection,KeyedIterable.prototype);\nmixin(IndexedCollection,IndexedIterable.prototype);\nmixin(SetCollection,SetIterable.prototype);\n\n\n\n\nfunction keyMapper(v,k){\nreturn k;}\n\n\nfunction entryMapper(v,k){\nreturn [k,v];}\n\n\nfunction not(predicate){\nreturn function(){\nreturn !predicate.apply(this,arguments);};}\n\n\n\nfunction neg(predicate){\nreturn function(){\nreturn -predicate.apply(this,arguments);};}\n\n\n\nfunction quoteString(value){\nreturn typeof value==='string'?JSON.stringify(value):value;}\n\n\nfunction defaultZipper(){\nreturn arrCopy(arguments);}\n\n\nfunction defaultNegComparator(a,b){\nreturn a<b?1:a>b?-1:0;}\n\n\nfunction hashIterable(iterable){\nif(iterable.size===Infinity){\nreturn 0;}\n\nvar ordered=isOrdered(iterable);\nvar keyed=isKeyed(iterable);\nvar h=ordered?1:0;\nvar size=iterable.__iterate(\nkeyed?\nordered?\nfunction(v,k){h=31*h+hashMerge(hash(v),hash(k))|0;}:\nfunction(v,k){h=h+hashMerge(hash(v),hash(k))|0;}:\nordered?\nfunction(v){h=31*h+hash(v)|0;}:\nfunction(v){h=h+hash(v)|0;});\n\nreturn murmurHashOfSize(size,h);}\n\n\nfunction murmurHashOfSize(size,h){\nh=imul(h,0xCC9E2D51);\nh=imul(h<<15|h>>>-15,0x1B873593);\nh=imul(h<<13|h>>>-13,5);\nh=(h+0xE6546B64|0)^size;\nh=imul(h^h>>>16,0x85EBCA6B);\nh=imul(h^h>>>13,0xC2B2AE35);\nh=smi(h^h>>>16);\nreturn h;}\n\n\nfunction hashMerge(a,b){\nreturn a^b+0x9E3779B9+(a<<6)+(a>>2)|0;}\n\n\nvar Immutable={\n\nIterable:Iterable,\n\nSeq:Seq,\nCollection:Collection,\nMap:Map,\nOrderedMap:OrderedMap,\nList:List,\nStack:Stack,\nSet:Set,\nOrderedSet:OrderedSet,\n\nRecord:Record,\nRange:Range,\nRepeat:Repeat,\n\nis:is,\nfromJS:fromJS};\n\n\n\nreturn Immutable;});\n});\n__d('NavigatorBreadcrumbNavigationBar',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NavigatorBreadcrumbNavigationBarStyles=require('NavigatorBreadcrumbNavigationBarStyles');\nvar NavigatorNavigationBarStylesAndroid=require('NavigatorNavigationBarStylesAndroid');\nvar NavigatorNavigationBarStylesIOS=require('NavigatorNavigationBarStylesIOS');\nvar Platform=require('Platform');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');var _require=\n\nrequire('immutable/dist/immutable.js');var Map=_require.Map;\n\nvar invariant=require('invariant');\n\nvar Interpolators=NavigatorBreadcrumbNavigationBarStyles.Interpolators;\nvar NavigatorNavigationBarStyles=Platform.OS==='android'?\nNavigatorNavigationBarStylesAndroid:NavigatorNavigationBarStylesIOS;\nvar PropTypes=React.PropTypes;\n\n\n\n\nvar CRUMB_PROPS=Interpolators.map(function(){return {style:{}};});\nvar ICON_PROPS=Interpolators.map(function(){return {style:{}};});\nvar SEPARATOR_PROPS=Interpolators.map(function(){return {style:{}};});\nvar TITLE_PROPS=Interpolators.map(function(){return {style:{}};});\nvar RIGHT_BUTTON_PROPS=Interpolators.map(function(){return {style:{}};});\n\n\nvar navStatePresentedIndex=function(navState){\nif(navState.presentedIndex!==undefined){\nreturn navState.presentedIndex;}\n\n\nreturn navState.observedTopOfStack;};\n\n\n\n\n\n\n\n\n\n\nvar initStyle=function(index,presentedIndex){\nreturn index===presentedIndex?NavigatorBreadcrumbNavigationBarStyles.Center[index]:\nindex<presentedIndex?NavigatorBreadcrumbNavigationBarStyles.Left[index]:\nNavigatorBreadcrumbNavigationBarStyles.Right[index];};\n\n\nvar NavigatorBreadcrumbNavigationBar=React.createClass({displayName:'NavigatorBreadcrumbNavigationBar',\npropTypes:{\nnavigator:PropTypes.shape({\npush:PropTypes.func,\npop:PropTypes.func,\nreplace:PropTypes.func,\npopToRoute:PropTypes.func,\npopToTop:PropTypes.func}),\n\nrouteMapper:PropTypes.shape({\nrightContentForRoute:PropTypes.func,\ntitleContentForRoute:PropTypes.func,\niconForRoute:PropTypes.func}),\n\nnavState:React.PropTypes.shape({\nrouteStack:React.PropTypes.arrayOf(React.PropTypes.object),\npresentedIndex:React.PropTypes.number}),\n\nstyle:View.propTypes.style},\n\n\nstatics:{\nStyles:NavigatorBreadcrumbNavigationBarStyles},\n\n\n_updateIndexProgress:function(progress,index,fromIndex,toIndex){\nvar amount=toIndex>fromIndex?progress:1-progress;\nvar oldDistToCenter=index-fromIndex;\nvar newDistToCenter=index-toIndex;\nvar interpolate;\ninvariant(\nInterpolators[index],\n'Cannot find breadcrumb interpolators for '+index);\n\nif(oldDistToCenter>0&&newDistToCenter===0||\nnewDistToCenter>0&&oldDistToCenter===0){\ninterpolate=Interpolators[index].RightToCenter;}else \nif(oldDistToCenter<0&&newDistToCenter===0||\nnewDistToCenter<0&&oldDistToCenter===0){\ninterpolate=Interpolators[index].CenterToLeft;}else \nif(oldDistToCenter===newDistToCenter){\ninterpolate=Interpolators[index].RightToCenter;}else \n{\ninterpolate=Interpolators[index].RightToLeft;}\n\n\nif(interpolate.Crumb(CRUMB_PROPS[index].style,amount)){\nthis._setPropsIfExists('crumb_'+index,CRUMB_PROPS[index]);}\n\nif(interpolate.Icon(ICON_PROPS[index].style,amount)){\nthis._setPropsIfExists('icon_'+index,ICON_PROPS[index]);}\n\nif(interpolate.Separator(SEPARATOR_PROPS[index].style,amount)){\nthis._setPropsIfExists('separator_'+index,SEPARATOR_PROPS[index]);}\n\nif(interpolate.Title(TITLE_PROPS[index].style,amount)){\nthis._setPropsIfExists('title_'+index,TITLE_PROPS[index]);}\n\nvar right=this.refs['right_'+index];\nif(right&&\ninterpolate.RightItem(RIGHT_BUTTON_PROPS[index].style,amount)){\nright.setNativeProps(RIGHT_BUTTON_PROPS[index]);}},\n\n\n\nupdateProgress:function(progress,fromIndex,toIndex){\nvar max=Math.max(fromIndex,toIndex);\nvar min=Math.min(fromIndex,toIndex);\nfor(var index=min;index<=max;index++){\nthis._updateIndexProgress(progress,index,fromIndex,toIndex);}},\n\n\n\nonAnimationStart:function(fromIndex,toIndex){\nvar max=Math.max(fromIndex,toIndex);\nvar min=Math.min(fromIndex,toIndex);\nfor(var index=min;index<=max;index++){\nthis._setRenderViewsToHardwareTextureAndroid(index,true);}},\n\n\n\nonAnimationEnd:function(){\nvar max=this.props.navState.routeStack.length-1;\nfor(var index=0;index<=max;index++){\nthis._setRenderViewsToHardwareTextureAndroid(index,false);}},\n\n\n\n_setRenderViewsToHardwareTextureAndroid:function(index,renderToHardwareTexture){\nvar props={\nrenderToHardwareTextureAndroid:renderToHardwareTexture};\n\n\nthis._setPropsIfExists('icon_'+index,props);\nthis._setPropsIfExists('separator_'+index,props);\nthis._setPropsIfExists('title_'+index,props);\nthis._setPropsIfExists('right_'+index,props);},\n\n\ncomponentWillMount:function(){\nthis._descriptors={\ncrumb:new Map(),\ntitle:new Map(),\nright:new Map()};},\n\n\n\nrender:function(){\nvar navState=this.props.navState;\nvar icons=navState&&navState.routeStack.map(this._getBreadcrumb);\nvar titles=navState.routeStack.map(this._getTitle);\nvar buttons=navState.routeStack.map(this._getRightButton);\nreturn (\nReact.createElement(View,{style:[styles.breadCrumbContainer,this.props.style]},\ntitles,\nicons,\nbuttons));},\n\n\n\n\n_getBreadcrumb:function(route,index){\nif(this._descriptors.crumb.has(route)){\nreturn this._descriptors.crumb.get(route);}\n\n\nvar navBarRouteMapper=this.props.routeMapper;\nvar firstStyles=initStyle(index,navStatePresentedIndex(this.props.navState));\n\nvar breadcrumbDescriptor=\nReact.createElement(View,{ref:'crumb_'+index,style:firstStyles.Crumb},\nReact.createElement(View,{ref:'icon_'+index,style:firstStyles.Icon},\nnavBarRouteMapper.iconForRoute(route,this.props.navigator)),\n\nReact.createElement(View,{ref:'separator_'+index,style:firstStyles.Separator},\nnavBarRouteMapper.separatorForRoute(route,this.props.navigator)));\n\n\n\n\nthis._descriptors.crumb=this._descriptors.crumb.set(route,breadcrumbDescriptor);\nreturn breadcrumbDescriptor;},\n\n\n_getTitle:function(route,index){\nif(this._descriptors.title.has(route)){\nreturn this._descriptors.title.get(route);}\n\n\nvar titleContent=this.props.routeMapper.titleContentForRoute(\nthis.props.navState.routeStack[index],\nthis.props.navigator);\n\nvar firstStyles=initStyle(index,navStatePresentedIndex(this.props.navState));\n\nvar titleDescriptor=\nReact.createElement(View,{ref:'title_'+index,style:firstStyles.Title},\ntitleContent);\n\n\nthis._descriptors.title=this._descriptors.title.set(route,titleDescriptor);\nreturn titleDescriptor;},\n\n\n_getRightButton:function(route,index){\nif(this._descriptors.right.has(route)){\nreturn this._descriptors.right.get(route);}\n\nvar rightContent=this.props.routeMapper.rightContentForRoute(\nthis.props.navState.routeStack[index],\nthis.props.navigator);\n\nif(!rightContent){\nthis._descriptors.right=this._descriptors.right.set(route,null);\nreturn null;}\n\nvar firstStyles=initStyle(index,navStatePresentedIndex(this.props.navState));\nvar rightButtonDescriptor=\nReact.createElement(View,{ref:'right_'+index,style:firstStyles.RightItem},\nrightContent);\n\n\nthis._descriptors.right=this._descriptors.right.set(route,rightButtonDescriptor);\nreturn rightButtonDescriptor;},\n\n\n_setPropsIfExists:function(ref,props){\nvar ref=this.refs[ref];\nref&&ref.setNativeProps(props);}});\n\n\n\nvar styles=StyleSheet.create({\nbreadCrumbContainer:{\noverflow:'hidden',\nposition:'absolute',\nheight:NavigatorNavigationBarStyles.General.TotalNavHeight,\ntop:0,\nleft:0,\nright:0}});\n\n\n\nmodule.exports=NavigatorBreadcrumbNavigationBar;\n});\n__d('NavigatorBreadcrumbNavigationBarStyles',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dimensions=require('Dimensions');\nvar NavigatorNavigationBarStylesIOS=require('NavigatorNavigationBarStylesIOS');\n\nvar buildStyleInterpolator=require('buildStyleInterpolator');\nvar merge=require('merge');\n\nvar SCREEN_WIDTH=Dimensions.get('window').width;\nvar STATUS_BAR_HEIGHT=NavigatorNavigationBarStylesIOS.General.StatusBarHeight;\nvar NAV_BAR_HEIGHT=NavigatorNavigationBarStylesIOS.General.NavBarHeight;\n\nvar SPACING=4;\nvar ICON_WIDTH=40;\nvar SEPARATOR_WIDTH=9;\nvar CRUMB_WIDTH=ICON_WIDTH+SEPARATOR_WIDTH;\n\nvar OPACITY_RATIO=100;\nvar ICON_INACTIVE_OPACITY=0.6;\nvar MAX_BREADCRUMBS=10;\n\nvar CRUMB_BASE={\nposition:'absolute',\nflexDirection:'row',\ntop:STATUS_BAR_HEIGHT,\nwidth:CRUMB_WIDTH,\nheight:NAV_BAR_HEIGHT,\nbackgroundColor:'transparent'};\n\n\nvar ICON_BASE={\nwidth:ICON_WIDTH,\nheight:NAV_BAR_HEIGHT};\n\n\nvar SEPARATOR_BASE={\nwidth:SEPARATOR_WIDTH,\nheight:NAV_BAR_HEIGHT};\n\n\nvar TITLE_BASE={\nposition:'absolute',\ntop:STATUS_BAR_HEIGHT,\nheight:NAV_BAR_HEIGHT,\nbackgroundColor:'transparent'};\n\n\n\nvar FIRST_TITLE_BASE=merge(TITLE_BASE,{\nleft:0,\nright:0,\nalignItems:'center',\nheight:NAV_BAR_HEIGHT});\n\n\nvar RIGHT_BUTTON_BASE={\nposition:'absolute',\ntop:STATUS_BAR_HEIGHT,\nright:SPACING,\noverflow:'hidden',\nopacity:1,\nheight:NAV_BAR_HEIGHT,\nbackgroundColor:'transparent'};\n\n\n\n\n\n\nvar LEFT=[];\nvar CENTER=[];\nvar RIGHT=[];\nfor(var i=0;i<MAX_BREADCRUMBS;i++){\nvar crumbLeft=CRUMB_WIDTH*i+SPACING;\nLEFT[i]={\nCrumb:merge(CRUMB_BASE,{left:crumbLeft}),\nIcon:merge(ICON_BASE,{opacity:ICON_INACTIVE_OPACITY}),\nSeparator:merge(SEPARATOR_BASE,{opacity:1}),\nTitle:merge(TITLE_BASE,{left:crumbLeft,opacity:0}),\nRightItem:merge(RIGHT_BUTTON_BASE,{opacity:0})};\n\nCENTER[i]={\nCrumb:merge(CRUMB_BASE,{left:crumbLeft}),\nIcon:merge(ICON_BASE,{opacity:1}),\nSeparator:merge(SEPARATOR_BASE,{opacity:0}),\nTitle:merge(TITLE_BASE,{\nleft:crumbLeft+ICON_WIDTH,\nopacity:1}),\n\nRightItem:merge(RIGHT_BUTTON_BASE,{opacity:1})};\n\nvar crumbRight=SCREEN_WIDTH-100;\nRIGHT[i]={\nCrumb:merge(CRUMB_BASE,{left:crumbRight}),\nIcon:merge(ICON_BASE,{opacity:0}),\nSeparator:merge(SEPARATOR_BASE,{opacity:0}),\nTitle:merge(TITLE_BASE,{\nleft:crumbRight+ICON_WIDTH,\nopacity:0}),\n\nRightItem:merge(RIGHT_BUTTON_BASE,{opacity:0})};}\n\n\n\n\nCENTER[0]={\nCrumb:merge(CRUMB_BASE,{left:SCREEN_WIDTH/4}),\nIcon:merge(ICON_BASE,{opacity:0}),\nSeparator:merge(SEPARATOR_BASE,{opacity:0}),\nTitle:merge(FIRST_TITLE_BASE,{opacity:1}),\nRightItem:CENTER[0].RightItem};\n\nLEFT[0].Title=merge(FIRST_TITLE_BASE,{left:-SCREEN_WIDTH/4,opacity:0});\nRIGHT[0].Title=merge(FIRST_TITLE_BASE,{opacity:0});\n\n\nvar buildIndexSceneInterpolator=function(startStyles,endStyles){\nreturn {\nCrumb:buildStyleInterpolator({\nleft:{\ntype:'linear',\nfrom:startStyles.Crumb.left,\nto:endStyles.Crumb.left,\nmin:0,\nmax:1,\nextrapolate:true}}),\n\n\nIcon:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.Icon.opacity,\nto:endStyles.Icon.opacity,\nmin:0,\nmax:1}}),\n\n\nSeparator:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.Separator.opacity,\nto:endStyles.Separator.opacity,\nmin:0,\nmax:1}}),\n\n\nTitle:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.Title.opacity,\nto:endStyles.Title.opacity,\nmin:0,\nmax:1},\n\nleft:{\ntype:'linear',\nfrom:startStyles.Title.left,\nto:endStyles.Title.left,\nmin:0,\nmax:1,\nextrapolate:true}}),\n\n\nRightItem:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.RightItem.opacity,\nto:endStyles.RightItem.opacity,\nmin:0,\nmax:1,\nround:OPACITY_RATIO}})};};\n\n\n\n\n\nvar Interpolators=CENTER.map(function(_,ii){\nreturn {\n\nRightToCenter:buildIndexSceneInterpolator(RIGHT[ii],CENTER[ii]),\n\nCenterToLeft:buildIndexSceneInterpolator(CENTER[ii],LEFT[ii]),\n\nRightToLeft:buildIndexSceneInterpolator(RIGHT[ii],LEFT[ii])};});\n\n\n\n\n\n\n\nmodule.exports={\nInterpolators:Interpolators,\nLeft:LEFT,\nCenter:CENTER,\nRight:RIGHT,\nIconWidth:ICON_WIDTH,\nIconHeight:NAV_BAR_HEIGHT,\nSeparatorWidth:SEPARATOR_WIDTH,\nSeparatorHeight:NAV_BAR_HEIGHT};\n});\n__d('NavigatorNavigationBarStylesIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dimensions=require('Dimensions');\n\nvar buildStyleInterpolator=require('buildStyleInterpolator');\nvar merge=require('merge');\n\nvar SCREEN_WIDTH=Dimensions.get('window').width;\nvar NAV_BAR_HEIGHT=44;\nvar STATUS_BAR_HEIGHT=20;\nvar NAV_HEIGHT=NAV_BAR_HEIGHT+STATUS_BAR_HEIGHT;\n\nvar BASE_STYLES={\nTitle:{\nposition:'absolute',\ntop:STATUS_BAR_HEIGHT,\nleft:0,\nright:0,\nalignItems:'center',\nheight:NAV_BAR_HEIGHT,\nbackgroundColor:'transparent'},\n\nLeftButton:{\nposition:'absolute',\ntop:STATUS_BAR_HEIGHT,\nleft:0,\noverflow:'hidden',\nopacity:1,\nheight:NAV_BAR_HEIGHT,\nbackgroundColor:'transparent'},\n\nRightButton:{\nposition:'absolute',\ntop:STATUS_BAR_HEIGHT,\nright:0,\noverflow:'hidden',\nopacity:1,\nalignItems:'flex-end',\nheight:NAV_BAR_HEIGHT,\nbackgroundColor:'transparent'}};\n\n\n\n\n\n\n\n\n\n\nvar Stages={\nLeft:{\nTitle:merge(BASE_STYLES.Title,{left:-SCREEN_WIDTH/2,opacity:0}),\nLeftButton:merge(BASE_STYLES.LeftButton,{left:-SCREEN_WIDTH/3,opacity:0}),\nRightButton:merge(BASE_STYLES.RightButton,{left:SCREEN_WIDTH/3,opacity:0})},\n\nCenter:{\nTitle:merge(BASE_STYLES.Title,{left:0,opacity:1}),\nLeftButton:merge(BASE_STYLES.LeftButton,{left:0,opacity:1}),\nRightButton:merge(BASE_STYLES.RightButton,{left:2*SCREEN_WIDTH/3-0,opacity:1})},\n\nRight:{\nTitle:merge(BASE_STYLES.Title,{left:SCREEN_WIDTH/2,opacity:0}),\nLeftButton:merge(BASE_STYLES.LeftButton,{left:0,opacity:0}),\nRightButton:merge(BASE_STYLES.RightButton,{left:SCREEN_WIDTH,opacity:0})}};\n\n\n\n\nvar opacityRatio=100;\n\nfunction buildSceneInterpolators(startStyles,endStyles){\nreturn {\nTitle:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.Title.opacity,\nto:endStyles.Title.opacity,\nmin:0,\nmax:1},\n\nleft:{\ntype:'linear',\nfrom:startStyles.Title.left,\nto:endStyles.Title.left,\nmin:0,\nmax:1,\nextrapolate:true}}),\n\n\nLeftButton:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.LeftButton.opacity,\nto:endStyles.LeftButton.opacity,\nmin:0,\nmax:1,\nround:opacityRatio},\n\nleft:{\ntype:'linear',\nfrom:startStyles.LeftButton.left,\nto:endStyles.LeftButton.left,\nmin:0,\nmax:1}}),\n\n\nRightButton:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.RightButton.opacity,\nto:endStyles.RightButton.opacity,\nmin:0,\nmax:1,\nround:opacityRatio},\n\nleft:{\ntype:'linear',\nfrom:startStyles.RightButton.left,\nto:endStyles.RightButton.left,\nmin:0,\nmax:1,\nextrapolate:true}})};}\n\n\n\n\n\nvar Interpolators={\n\nRightToCenter:buildSceneInterpolators(Stages.Right,Stages.Center),\n\nCenterToLeft:buildSceneInterpolators(Stages.Center,Stages.Left),\n\nRightToLeft:buildSceneInterpolators(Stages.Right,Stages.Left)};\n\n\n\nmodule.exports={\nGeneral:{\nNavBarHeight:NAV_BAR_HEIGHT,\nStatusBarHeight:STATUS_BAR_HEIGHT,\nTotalNavHeight:NAV_HEIGHT},\n\nInterpolators:Interpolators,\nStages:Stages};\n});\n__d('buildStyleInterpolator',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\nkeyOf=require('keyOf');\n\nvar X_DIM=keyOf({x:null});\nvar Y_DIM=keyOf({y:null});\nvar Z_DIM=keyOf({z:null});\nvar W_DIM=keyOf({w:null});\n\nvar TRANSFORM_ROTATE_NAME=keyOf({transformRotateRadians:null});\n\nvar ShouldAllocateReusableOperationVars={\ntransformRotateRadians:true,\ntransformScale:true,\ntransformTranslate:true};\n\n\nvar InitialOperationField={\ntransformRotateRadians:[0,0,0,1],\ntransformTranslate:[0,0,0],\ntransformScale:[1,1,1]};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ARGUMENT_NAMES_RE=/([^\\s,]+)/g;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar inline=function(func,replaceWithArgs){\nvar fnStr=func.toString();\nvar parameterNames=fnStr.slice(fnStr.indexOf('(')+1,fnStr.indexOf(')')).\nmatch(ARGUMENT_NAMES_RE)||\n[];\nvar replaceRegexStr=parameterNames.map(function(paramName){\nreturn '\\\\b'+paramName+'\\\\b';}).\njoin('|');\nvar replaceRegex=new RegExp(replaceRegexStr,'g');\nvar fnBody=fnStr.substring(fnStr.indexOf('{')+1,fnStr.lastIndexOf('}'));\nvar newFnBody=fnBody.replace(replaceRegex,function(parameterName){\nvar indexInParameterNames=parameterNames.indexOf(parameterName);\nvar replacementName=replaceWithArgs[indexInParameterNames];\nreturn replacementName;});\n\nreturn newFnBody.split('\\n');};\n\n\n\n\n\n\nvar MatrixOps={\nunroll:function(matVar,m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15){\nm0=matVar[0];\nm1=matVar[1];\nm2=matVar[2];\nm3=matVar[3];\nm4=matVar[4];\nm5=matVar[5];\nm6=matVar[6];\nm7=matVar[7];\nm8=matVar[8];\nm9=matVar[9];\nm10=matVar[10];\nm11=matVar[11];\nm12=matVar[12];\nm13=matVar[13];\nm14=matVar[14];\nm15=matVar[15];},\n\n\nmatrixDiffers:function(retVar,matVar,m0,m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12,m13,m14,m15){\nretVar=retVar||\nm0!==matVar[0]||\nm1!==matVar[1]||\nm2!==matVar[2]||\nm3!==matVar[3]||\nm4!==matVar[4]||\nm5!==matVar[5]||\nm6!==matVar[6]||\nm7!==matVar[7]||\nm8!==matVar[8]||\nm9!==matVar[9]||\nm10!==matVar[10]||\nm11!==matVar[11]||\nm12!==matVar[12]||\nm13!==matVar[13]||\nm14!==matVar[14]||\nm15!==matVar[15];},\n\n\ntransformScale:function(matVar,opVar){\n\nvar x=opVar[0];\nvar y=opVar[1];\nvar z=opVar[2];\nmatVar[0]=matVar[0]*x;\nmatVar[1]=matVar[1]*x;\nmatVar[2]=matVar[2]*x;\nmatVar[3]=matVar[3]*x;\nmatVar[4]=matVar[4]*y;\nmatVar[5]=matVar[5]*y;\nmatVar[6]=matVar[6]*y;\nmatVar[7]=matVar[7]*y;\nmatVar[8]=matVar[8]*z;\nmatVar[9]=matVar[9]*z;\nmatVar[10]=matVar[10]*z;\nmatVar[11]=matVar[11]*z;\nmatVar[12]=matVar[12];\nmatVar[13]=matVar[13];\nmatVar[14]=matVar[14];\nmatVar[15]=matVar[15];},\n\n\n\n\n\n\ntransformTranslate:function(matVar,opVar){\n\nvar x=opVar[0];\nvar y=opVar[1];\nvar z=opVar[2];\nmatVar[12]=matVar[0]*x+matVar[4]*y+matVar[8]*z+matVar[12];\nmatVar[13]=matVar[1]*x+matVar[5]*y+matVar[9]*z+matVar[13];\nmatVar[14]=matVar[2]*x+matVar[6]*y+matVar[10]*z+matVar[14];\nmatVar[15]=matVar[3]*x+matVar[7]*y+matVar[11]*z+matVar[15];},\n\n\n\n\n\n\ntransformRotateRadians:function(matVar,q){\n\nvar xQuat=q[0],yQuat=q[1],zQuat=q[2],wQuat=q[3];\nvar x2Quat=xQuat+xQuat;\nvar y2Quat=yQuat+yQuat;\nvar z2Quat=zQuat+zQuat;\nvar xxQuat=xQuat*x2Quat;\nvar xyQuat=xQuat*y2Quat;\nvar xzQuat=xQuat*z2Quat;\nvar yyQuat=yQuat*y2Quat;\nvar yzQuat=yQuat*z2Quat;\nvar zzQuat=zQuat*z2Quat;\nvar wxQuat=wQuat*x2Quat;\nvar wyQuat=wQuat*y2Quat;\nvar wzQuat=wQuat*z2Quat;\n\nvar quatMat0=1-(yyQuat+zzQuat);\nvar quatMat1=xyQuat+wzQuat;\nvar quatMat2=xzQuat-wyQuat;\nvar quatMat4=xyQuat-wzQuat;\nvar quatMat5=1-(xxQuat+zzQuat);\nvar quatMat6=yzQuat+wxQuat;\nvar quatMat8=xzQuat+wyQuat;\nvar quatMat9=yzQuat-wxQuat;\nvar quatMat10=1-(xxQuat+yyQuat);\n\n\n\nvar a00=matVar[0];\nvar a01=matVar[1];\nvar a02=matVar[2];\nvar a03=matVar[3];\nvar a10=matVar[4];\nvar a11=matVar[5];\nvar a12=matVar[6];\nvar a13=matVar[7];\nvar a20=matVar[8];\nvar a21=matVar[9];\nvar a22=matVar[10];\nvar a23=matVar[11];\n\nvar b0=quatMat0,b1=quatMat1,b2=quatMat2;\nmatVar[0]=b0*a00+b1*a10+b2*a20;\nmatVar[1]=b0*a01+b1*a11+b2*a21;\nmatVar[2]=b0*a02+b1*a12+b2*a22;\nmatVar[3]=b0*a03+b1*a13+b2*a23;\nb0=quatMat4;b1=quatMat5;b2=quatMat6;\nmatVar[4]=b0*a00+b1*a10+b2*a20;\nmatVar[5]=b0*a01+b1*a11+b2*a21;\nmatVar[6]=b0*a02+b1*a12+b2*a22;\nmatVar[7]=b0*a03+b1*a13+b2*a23;\nb0=quatMat8;b1=quatMat9;b2=quatMat10;\nmatVar[8]=b0*a00+b1*a10+b2*a20;\nmatVar[9]=b0*a01+b1*a11+b2*a21;\nmatVar[10]=b0*a02+b1*a12+b2*a22;\nmatVar[11]=b0*a03+b1*a13+b2*a23;}};\n\n\n\n\n\nvar MatrixOpsInitial={\ntransformScale:function(matVar,opVar){\n\nmatVar[0]=opVar[0];\nmatVar[1]=0;\nmatVar[2]=0;\nmatVar[3]=0;\nmatVar[4]=0;\nmatVar[5]=opVar[1];\nmatVar[6]=0;\nmatVar[7]=0;\nmatVar[8]=0;\nmatVar[9]=0;\nmatVar[10]=opVar[2];\nmatVar[11]=0;\nmatVar[12]=0;\nmatVar[13]=0;\nmatVar[14]=0;\nmatVar[15]=1;},\n\n\ntransformTranslate:function(matVar,opVar){\n\nmatVar[0]=1;\nmatVar[1]=0;\nmatVar[2]=0;\nmatVar[3]=0;\nmatVar[4]=0;\nmatVar[5]=1;\nmatVar[6]=0;\nmatVar[7]=0;\nmatVar[8]=0;\nmatVar[9]=0;\nmatVar[10]=1;\nmatVar[11]=0;\nmatVar[12]=opVar[0];\nmatVar[13]=opVar[1];\nmatVar[14]=opVar[2];\nmatVar[15]=1;},\n\n\n\n\n\n\n\ntransformRotateRadians:function(matVar,q){\n\n\nvar xQuat=q[0],yQuat=q[1],zQuat=q[2],wQuat=q[3];\nvar x2Quat=xQuat+xQuat;\nvar y2Quat=yQuat+yQuat;\nvar z2Quat=zQuat+zQuat;\nvar xxQuat=xQuat*x2Quat;\nvar xyQuat=xQuat*y2Quat;\nvar xzQuat=xQuat*z2Quat;\nvar yyQuat=yQuat*y2Quat;\nvar yzQuat=yQuat*z2Quat;\nvar zzQuat=zQuat*z2Quat;\nvar wxQuat=wQuat*x2Quat;\nvar wyQuat=wQuat*y2Quat;\nvar wzQuat=wQuat*z2Quat;\n\nvar quatMat0=1-(yyQuat+zzQuat);\nvar quatMat1=xyQuat+wzQuat;\nvar quatMat2=xzQuat-wyQuat;\nvar quatMat4=xyQuat-wzQuat;\nvar quatMat5=1-(xxQuat+zzQuat);\nvar quatMat6=yzQuat+wxQuat;\nvar quatMat8=xzQuat+wyQuat;\nvar quatMat9=yzQuat-wxQuat;\nvar quatMat10=1-(xxQuat+yyQuat);\n\n\n\nvar b0=quatMat0,b1=quatMat1,b2=quatMat2;\nmatVar[0]=b0;\nmatVar[1]=b1;\nmatVar[2]=b2;\nmatVar[3]=0;\nb0=quatMat4;b1=quatMat5;b2=quatMat6;\nmatVar[4]=b0;\nmatVar[5]=b1;\nmatVar[6]=b2;\nmatVar[7]=0;\nb0=quatMat8;b1=quatMat9;b2=quatMat10;\nmatVar[8]=b0;\nmatVar[9]=b1;\nmatVar[10]=b2;\nmatVar[11]=0;\nmatVar[12]=0;\nmatVar[13]=0;\nmatVar[14]=0;\nmatVar[15]=1;}};\n\n\n\n\nvar setNextValAndDetectChange=function(name,tmpVarName){\nreturn (\n'  if (!didChange) {\\n'+\n'    var prevVal = result.'+name+';\\n'+\n'    result.'+name+' = '+tmpVarName+';\\n'+\n'    didChange = didChange  || ('+tmpVarName+' !== prevVal);\\n'+\n'  } else {\\n'+\n'    result.'+name+' = '+tmpVarName+';\\n'+\n'  }\\n');};\n\n\n\nvar computeNextValLinear=function(anim,from,to,tmpVarName){\nvar hasRoundRatio='round' in anim;\nvar roundRatio=anim.round;\nvar fn='  ratio = (value - '+anim.min+') / '+(anim.max-anim.min)+';\\n';\nif(!anim.extrapolate){\nfn+='  ratio = ratio > 1 ? 1 : (ratio < 0 ? 0 : ratio);\\n';}\n\n\nvar roundOpen=hasRoundRatio?'Math.round('+roundRatio+' * ':'';\nvar roundClose=hasRoundRatio?') / '+roundRatio:'';\nfn+=\n'  '+tmpVarName+' = '+\nroundOpen+\n'('+from+' * (1 - ratio) + '+to+' * ratio)'+\nroundClose+';\\n';\nreturn fn;};\n\n\nvar computeNextValLinearScalar=function(anim){\nreturn computeNextValLinear(anim,anim.from,anim.to,'nextScalarVal');};\n\n\nvar computeNextValConstant=function(anim){\nvar constantExpression=JSON.stringify(anim.value);\nreturn '  nextScalarVal = '+constantExpression+';\\n';};\n\n\nvar computeNextValStep=function(anim){\nreturn (\n'  nextScalarVal = value >= '+(\nanim.threshold+' ? '+anim.to+' : '+anim.from)+';\\n');};\n\n\n\nvar computeNextValIdentity=function(anim){\nreturn '  nextScalarVal = value;\\n';};\n\n\nvar operationVar=function(name){\nreturn name+'ReuseOp';};\n\n\nvar createReusableOperationVars=function(anims){\nvar ret='';\nfor(var name in anims){\nif(ShouldAllocateReusableOperationVars[name]){\nret+='var '+operationVar(name)+' = [];\\n';}}\n\n\nreturn ret;};\n\n\nvar newlines=function(statements){\nreturn '\\n'+statements.join('\\n')+'\\n';};\n\n\n\n\n\n\n\n\nvar computeNextMatrixOperationField=function(anim,name,dimension,index){\nvar fieldAccess=operationVar(name)+'['+index+']';\nif(anim.from[dimension]!==undefined&&anim.to[dimension]!==undefined){\nreturn '  '+anim.from[dimension]!==anim.to[dimension]?\ncomputeNextValLinear(anim,anim.from[dimension],anim.to[dimension],fieldAccess):\nfieldAccess+' = '+anim.from[dimension]+';';}else \n{\nreturn '  '+fieldAccess+' = '+InitialOperationField[name][index]+';';}};\n\n\n\nvar unrolledVars=[];\nfor(var varIndex=0;varIndex<16;varIndex++){\nunrolledVars.push('m'+varIndex);}\n\nvar setNextMatrixAndDetectChange=function(orderedMatrixOperations){\nvar fn=[\n'  var transformMatrix = result.transformMatrix !== undefined ? '+\n'result.transformMatrix : (result.transformMatrix = []);'];\n\nfn.push.apply(\nfn,\ninline(MatrixOps.unroll,['transformMatrix'].concat(unrolledVars)));\n\nfor(var i=0;i<orderedMatrixOperations.length;i++){\nvar opName=orderedMatrixOperations[i];\nif(i===0){\nfn.push.apply(\nfn,\ninline(MatrixOpsInitial[opName],['transformMatrix',operationVar(opName)]));}else \n\n{\nfn.push.apply(\nfn,\ninline(MatrixOps[opName],['transformMatrix',operationVar(opName)]));}}\n\n\n\nfn.push.apply(\nfn,\ninline(MatrixOps.matrixDiffers,['didChange','transformMatrix'].concat(unrolledVars)));\n\nreturn fn;};\n\n\nvar InterpolateMatrix={\ntransformTranslate:true,\ntransformRotateRadians:true,\ntransformScale:true};\n\n\nvar createFunctionString=function(anims){\n\n\nvar orderedMatrixOperations=[];\n\n\n\nvar fn='return (function() {\\n';\nfn+=createReusableOperationVars(anims);\nfn+='return function(result, value) {\\n';\nfn+='  var didChange = false;\\n';\nfn+='  var nextScalarVal;\\n';\nfn+='  var ratio;\\n';\n\nfor(var name in anims){\nvar anim=anims[name];\nif(anim.type==='linear'){\nif(InterpolateMatrix[name]){\norderedMatrixOperations.push(name);\nvar setOperations=[\ncomputeNextMatrixOperationField(anim,name,X_DIM,0),\ncomputeNextMatrixOperationField(anim,name,Y_DIM,1),\ncomputeNextMatrixOperationField(anim,name,Z_DIM,2)];\n\nif(name===TRANSFORM_ROTATE_NAME){\nsetOperations.push(computeNextMatrixOperationField(anim,name,W_DIM,3));}\n\nfn+=newlines(setOperations);}else \n{\nfn+=computeNextValLinearScalar(anim,'nextScalarVal');\nfn+=setNextValAndDetectChange(name,'nextScalarVal');}}else \n\nif(anim.type==='constant'){\nfn+=computeNextValConstant(anim);\nfn+=setNextValAndDetectChange(name,'nextScalarVal');}else \nif(anim.type==='step'){\nfn+=computeNextValStep(anim);\nfn+=setNextValAndDetectChange(name,'nextScalarVal');}else \nif(anim.type==='identity'){\nfn+=computeNextValIdentity(anim);\nfn+=setNextValAndDetectChange(name,'nextScalarVal');}}\n\n\nif(orderedMatrixOperations.length){\nfn+=newlines(setNextMatrixAndDetectChange(orderedMatrixOperations));}\n\nfn+='  return didChange;\\n';\nfn+='};\\n';\nfn+='})()';\nreturn fn;};\n\n\n\n\n\n\n\nvar buildStyleInterpolator=function(anims){\nreturn Function(createFunctionString(anims))();};\n\n\n\nmodule.exports=buildStyleInterpolator;\n});\n__d('NavigatorNavigationBarStylesAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar buildStyleInterpolator=require('buildStyleInterpolator');\nvar merge=require('merge');\n\n\nvar NAV_BAR_HEIGHT=56;\nvar TITLE_LEFT=72;\nvar BUTTON_SIZE=24;\nvar TOUCH_TARGT_SIZE=48;\nvar BUTTON_HORIZONTAL_MARGIN=16;\n\nvar BUTTON_EFFECTIVE_MARGIN=BUTTON_HORIZONTAL_MARGIN-(TOUCH_TARGT_SIZE-BUTTON_SIZE)/2;\nvar NAV_ELEMENT_HEIGHT=NAV_BAR_HEIGHT;\n\nvar BASE_STYLES={\nTitle:{\nposition:'absolute',\nbottom:0,\nleft:0,\nright:0,\nalignItems:'flex-start',\nheight:NAV_ELEMENT_HEIGHT,\nbackgroundColor:'transparent',\nmarginLeft:TITLE_LEFT},\n\nLeftButton:{\nposition:'absolute',\ntop:0,\nleft:BUTTON_EFFECTIVE_MARGIN,\noverflow:'hidden',\nheight:NAV_ELEMENT_HEIGHT,\nbackgroundColor:'transparent'},\n\nRightButton:{\nposition:'absolute',\ntop:0,\nright:BUTTON_EFFECTIVE_MARGIN,\noverflow:'hidden',\nalignItems:'flex-end',\nheight:NAV_ELEMENT_HEIGHT,\nbackgroundColor:'transparent'}};\n\n\n\n\n\n\n\n\n\n\nvar Stages={\nLeft:{\nTitle:merge(BASE_STYLES.Title,{opacity:0}),\nLeftButton:merge(BASE_STYLES.LeftButton,{opacity:0}),\nRightButton:merge(BASE_STYLES.RightButton,{opacity:0})},\n\nCenter:{\nTitle:merge(BASE_STYLES.Title,{opacity:1}),\nLeftButton:merge(BASE_STYLES.LeftButton,{opacity:1}),\nRightButton:merge(BASE_STYLES.RightButton,{opacity:1})},\n\nRight:{\nTitle:merge(BASE_STYLES.Title,{opacity:0}),\nLeftButton:merge(BASE_STYLES.LeftButton,{opacity:0}),\nRightButton:merge(BASE_STYLES.RightButton,{opacity:0})}};\n\n\n\n\nvar opacityRatio=100;\n\nfunction buildSceneInterpolators(startStyles,endStyles){\nreturn {\nTitle:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.Title.opacity,\nto:endStyles.Title.opacity,\nmin:0,\nmax:1},\n\nleft:{\ntype:'linear',\nfrom:startStyles.Title.left,\nto:endStyles.Title.left,\nmin:0,\nmax:1,\nextrapolate:true}}),\n\n\nLeftButton:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.LeftButton.opacity,\nto:endStyles.LeftButton.opacity,\nmin:0,\nmax:1,\nround:opacityRatio},\n\nleft:{\ntype:'linear',\nfrom:startStyles.LeftButton.left,\nto:endStyles.LeftButton.left,\nmin:0,\nmax:1}}),\n\n\nRightButton:buildStyleInterpolator({\nopacity:{\ntype:'linear',\nfrom:startStyles.RightButton.opacity,\nto:endStyles.RightButton.opacity,\nmin:0,\nmax:1,\nround:opacityRatio},\n\nleft:{\ntype:'linear',\nfrom:startStyles.RightButton.left,\nto:endStyles.RightButton.left,\nmin:0,\nmax:1,\nextrapolate:true}})};}\n\n\n\n\n\nvar Interpolators={\n\nRightToCenter:buildSceneInterpolators(Stages.Right,Stages.Center),\n\nCenterToLeft:buildSceneInterpolators(Stages.Center,Stages.Left),\n\nRightToLeft:buildSceneInterpolators(Stages.Right,Stages.Left)};\n\n\n\nmodule.exports={\nGeneral:{\nNavBarHeight:NAV_BAR_HEIGHT,\nStatusBarHeight:0,\nTotalNavHeight:NAV_BAR_HEIGHT},\n\nInterpolators:Interpolators,\nStages:Stages};\n});\n__d('NavigatorNavigationBar',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar NavigatorNavigationBarStylesAndroid=require('NavigatorNavigationBarStylesAndroid');\nvar NavigatorNavigationBarStylesIOS=require('NavigatorNavigationBarStylesIOS');\nvar Platform=require('Platform');\nvar StaticContainer=require('StaticContainer.react');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');var _require=\n\nrequire('immutable/dist/immutable.js');var Map=_require.Map;\n\nvar COMPONENT_NAMES=['Title','LeftButton','RightButton'];\n\nvar NavigatorNavigationBarStyles=Platform.OS==='android'?\nNavigatorNavigationBarStylesAndroid:NavigatorNavigationBarStylesIOS;\n\nvar navStatePresentedIndex=function(navState){\nif(navState.presentedIndex!==undefined){\nreturn navState.presentedIndex;}\n\n\nreturn navState.observedTopOfStack;};\n\n\nvar NavigatorNavigationBar=React.createClass({displayName:'NavigatorNavigationBar',\n\npropTypes:{\nnavigator:React.PropTypes.object,\nrouteMapper:React.PropTypes.shape({\nTitle:React.PropTypes.func.isRequired,\nLeftButton:React.PropTypes.func.isRequired,\nRightButton:React.PropTypes.func.isRequired}).\nisRequired,\nnavState:React.PropTypes.shape({\nrouteStack:React.PropTypes.arrayOf(React.PropTypes.object),\npresentedIndex:React.PropTypes.number}),\n\nnavigationStyles:React.PropTypes.object,\nstyle:View.propTypes.style},\n\n\nstatics:{\nStyles:NavigatorNavigationBarStyles,\nStylesAndroid:NavigatorNavigationBarStylesAndroid,\nStylesIOS:NavigatorNavigationBarStylesIOS},\n\n\ngetDefaultProps:function(){\nreturn {\nnavigationStyles:NavigatorNavigationBarStyles};},\n\n\n\ncomponentWillMount:function(){var _this=this;\nthis._components={};\nthis._descriptors={};\n\nCOMPONENT_NAMES.forEach(function(componentName){\n_this._components[componentName]=new Map();\n_this._descriptors[componentName]=new Map();});},\n\n\n\n_getReusableProps:function(\ncomponentName,\nindex)\n{\nif(!this._reusableProps){\nthis._reusableProps={};}\n\nvar propStack=this._reusableProps[componentName];\nif(!propStack){\npropStack=this._reusableProps[componentName]=[];}\n\nvar props=propStack[index];\nif(!props){\nprops=propStack[index]={style:{}};}\n\nreturn props;},\n\n\n_updateIndexProgress:function(\nprogress,\nindex,\nfromIndex,\ntoIndex)\n{\nvar amount=toIndex>fromIndex?progress:1-progress;\nvar oldDistToCenter=index-fromIndex;\nvar newDistToCenter=index-toIndex;\nvar interpolate;\nif(oldDistToCenter>0&&newDistToCenter===0||\nnewDistToCenter>0&&oldDistToCenter===0){\ninterpolate=this.props.navigationStyles.Interpolators.RightToCenter;}else \nif(oldDistToCenter<0&&newDistToCenter===0||\nnewDistToCenter<0&&oldDistToCenter===0){\ninterpolate=this.props.navigationStyles.Interpolators.CenterToLeft;}else \nif(oldDistToCenter===newDistToCenter){\ninterpolate=this.props.navigationStyles.Interpolators.RightToCenter;}else \n{\ninterpolate=this.props.navigationStyles.Interpolators.RightToLeft;}\n\n\nCOMPONENT_NAMES.forEach(function(componentName){\nvar component=this._components[componentName].get(this.props.navState.routeStack[index]);\nvar props=this._getReusableProps(componentName,index);\nif(component&&interpolate[componentName](props.style,amount)){\ncomponent.setNativeProps(props);}},\n\nthis);},\n\n\nupdateProgress:function(\nprogress,\nfromIndex,\ntoIndex)\n{\nvar max=Math.max(fromIndex,toIndex);\nvar min=Math.min(fromIndex,toIndex);\nfor(var index=min;index<=max;index++){\nthis._updateIndexProgress(progress,index,fromIndex,toIndex);}},\n\n\n\nrender:function(){\nvar navBarStyle={\nheight:this.props.navigationStyles.General.TotalNavHeight};\n\nvar navState=this.props.navState;\nvar components=COMPONENT_NAMES.map(function(componentName){\nreturn navState.routeStack.map(\nthis._getComponent.bind(this,componentName));},\n\nthis);\n\nreturn (\nReact.createElement(View,{style:[styles.navBarContainer,navBarStyle,this.props.style]},\ncomponents));},\n\n\n\n\n_getComponent:function(\ncomponentName,\nroute,\nindex)\n{var _this2=this;\nif(this._descriptors[componentName].includes(route)){\nreturn this._descriptors[componentName].get(route);}\n\n\nvar rendered=null;\n\nvar content=this.props.routeMapper[componentName](\nthis.props.navState.routeStack[index],\nthis.props.navigator,\nindex,\nthis.props.navState);\n\nif(!content){\nreturn null;}\n\n\nvar initialStage=index===navStatePresentedIndex(this.props.navState)?\nthis.props.navigationStyles.Stages.Center:\nthis.props.navigationStyles.Stages.Left;\nrendered=\nReact.createElement(View,{\nref:function(ref){\n_this2._components[componentName]=_this2._components[componentName].set(route,ref);},\n\nstyle:initialStage[componentName]},\ncontent);\n\n\n\nthis._descriptors[componentName]=this._descriptors[componentName].set(route,rendered);\nreturn rendered;}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nnavBarContainer:{\nposition:'absolute',\ntop:0,\nleft:0,\nright:0,\nbackgroundColor:'transparent'}});\n\n\n\nmodule.exports=NavigatorNavigationBar;\n});\n__d('StaticContainer.react',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nReact=require('React');\n\nvar onlyChild=require('onlyChild');var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nStaticContainer=(function(_React$Component){babelHelpers.inherits(StaticContainer,_React$Component);function StaticContainer(){babelHelpers.classCallCheck(this,StaticContainer);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(StaticContainer).apply(this,arguments));}babelHelpers.createClass(StaticContainer,[{key:'shouldComponentUpdate',value:function shouldComponentUpdate(\n\nnextProps){\nreturn !!nextProps.shouldUpdate;}},{key:'render',value:function render()\n\n\n{\nvar child=this.props.children;\nreturn child===null||child===false?null:onlyChild(child);}}]);return StaticContainer;})(React.Component);\n\n\n\n\nmodule.exports=StaticContainer;\n});\n__d('NavigatorSceneConfigs',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dimensions=require('Dimensions');\nvar PixelRatio=require('PixelRatio');\n\nvar buildStyleInterpolator=require('buildStyleInterpolator');\n\nvar SCREEN_WIDTH=Dimensions.get('window').width;\nvar SCREEN_HEIGHT=Dimensions.get('window').height;\n\nvar FadeToTheLeft={\n\n\ntransformTranslate:{\nfrom:{x:0,y:0,z:0},\nto:{x:-Math.round(Dimensions.get('window').width*0.3),y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\n\n\n\n\n\n\n\n\n\n\n\ntransformScale:{\nfrom:{x:1,y:1,z:1},\nto:{x:0.95,y:0.95,z:1},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true},\n\nopacity:{\nfrom:1,\nto:0.3,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:false,\nround:100},\n\ntranslateX:{\nfrom:0,\nto:-Math.round(Dimensions.get('window').width*0.3),\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\nscaleX:{\nfrom:1,\nto:0.95,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true},\n\nscaleY:{\nfrom:1,\nto:0.95,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true}};\n\n\n\nvar FadeToTheRight=babelHelpers.extends({},\nFadeToTheLeft,{\ntransformTranslate:{\nfrom:{x:0,y:0,z:0},\nto:{x:Math.round(SCREEN_WIDTH*0.3),y:0,z:0}},\n\ntranslateX:{\nfrom:0,\nto:Math.round(SCREEN_WIDTH*0.3)}});\n\n\n\nvar FadeIn={\nopacity:{\nfrom:0,\nto:1,\nmin:0.5,\nmax:1,\ntype:'linear',\nextrapolate:false,\nround:100}};\n\n\n\nvar FadeOut={\nopacity:{\nfrom:1,\nto:0,\nmin:0,\nmax:0.5,\ntype:'linear',\nextrapolate:false,\nround:100}};\n\n\n\nvar ToTheLeft={\ntransformTranslate:{\nfrom:{x:0,y:0,z:0},\nto:{x:-Dimensions.get('window').width,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\nopacity:{\nvalue:1.0,\ntype:'constant'},\n\n\ntranslateX:{\nfrom:0,\nto:-Dimensions.get('window').width,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()}};\n\n\n\nvar ToTheUp={\ntransformTranslate:{\nfrom:{x:0,y:0,z:0},\nto:{x:0,y:-Dimensions.get('window').height,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\nopacity:{\nvalue:1.0,\ntype:'constant'},\n\ntranslateY:{\nfrom:0,\nto:-Dimensions.get('window').height,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()}};\n\n\n\nvar ToTheDown={\ntransformTranslate:{\nfrom:{x:0,y:0,z:0},\nto:{x:0,y:Dimensions.get('window').height,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\nopacity:{\nvalue:1.0,\ntype:'constant'},\n\ntranslateY:{\nfrom:0,\nto:Dimensions.get('window').height,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()}};\n\n\n\nvar FromTheRight={\nopacity:{\nvalue:1.0,\ntype:'constant'},\n\n\ntransformTranslate:{\nfrom:{x:Dimensions.get('window').width,y:0,z:0},\nto:{x:0,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\n\ntranslateX:{\nfrom:Dimensions.get('window').width,\nto:0,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\n\nscaleX:{\nvalue:1,\ntype:'constant'},\n\nscaleY:{\nvalue:1,\ntype:'constant'}};\n\n\n\nvar FromTheLeft=babelHelpers.extends({},\nFromTheRight,{\ntransformTranslate:{\nfrom:{x:-SCREEN_WIDTH,y:0,z:0},\nto:{x:0,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\ntranslateX:{\nfrom:-SCREEN_WIDTH,\nto:0,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()}});\n\n\n\nvar FromTheDown=babelHelpers.extends({},\nFromTheRight,{\ntransformTranslate:{\nfrom:{y:SCREEN_HEIGHT,x:0,z:0},\nto:{x:0,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\ntranslateY:{\nfrom:SCREEN_HEIGHT,\nto:0,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()}});\n\n\n\nvar FromTheTop=babelHelpers.extends({},\nFromTheRight,{\ntransformTranslate:{\nfrom:{y:-SCREEN_HEIGHT,x:0,z:0},\nto:{x:0,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\ntranslateY:{\nfrom:-SCREEN_HEIGHT,\nto:0,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()}});\n\n\n\nvar ToTheBack={\n\n\ntransformTranslate:{\nfrom:{x:0,y:0,z:0},\nto:{x:0,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\ntransformScale:{\nfrom:{x:1,y:1,z:1},\nto:{x:0.95,y:0.95,z:1},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true},\n\nopacity:{\nfrom:1,\nto:0.3,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:false,\nround:100},\n\nscaleX:{\nfrom:1,\nto:0.95,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true},\n\nscaleY:{\nfrom:1,\nto:0.95,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true}};\n\n\n\nvar FromTheFront={\nopacity:{\nvalue:1.0,\ntype:'constant'},\n\n\ntransformTranslate:{\nfrom:{x:0,y:Dimensions.get('window').height,z:0},\nto:{x:0,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\ntranslateY:{\nfrom:Dimensions.get('window').height,\nto:0,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\nscaleX:{\nvalue:1,\ntype:'constant'},\n\nscaleY:{\nvalue:1,\ntype:'constant'}};\n\n\n\nvar ToTheBackAndroid={\nopacity:{\nvalue:1,\ntype:'constant'}};\n\n\n\nvar FromTheFrontAndroid={\nopacity:{\nfrom:0,\nto:1,\nmin:0.5,\nmax:1,\ntype:'linear',\nextrapolate:false,\nround:100},\n\ntransformTranslate:{\nfrom:{x:0,y:100,z:0},\nto:{x:0,y:0,z:0},\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()},\n\ntranslateY:{\nfrom:100,\nto:0,\nmin:0,\nmax:1,\ntype:'linear',\nextrapolate:true,\nround:PixelRatio.get()}};\n\n\n\nvar BaseOverswipeConfig={\nfrictionConstant:1,\nfrictionByDistance:1.5};\n\n\nvar BaseLeftToRightGesture={\n\n\nisDetachable:false,\n\n\ngestureDetectMovement:2,\n\n\nnotMoving:0.3,\n\n\ndirectionRatio:0.66,\n\n\nsnapVelocity:2,\n\n\nedgeHitWidth:30,\n\n\nstillCompletionRatio:3/5,\n\nfullDistance:SCREEN_WIDTH,\n\ndirection:'left-to-right'};\n\n\n\nvar BaseRightToLeftGesture=babelHelpers.extends({},\nBaseLeftToRightGesture,{\ndirection:'right-to-left'});\n\n\nvar BaseDownUpGesture=babelHelpers.extends({},\nBaseLeftToRightGesture,{\nfullDistance:SCREEN_HEIGHT,\ndirection:'down-to-up'});\n\n\nvar BaseUpDownGesture=babelHelpers.extends({},\nBaseLeftToRightGesture,{\nfullDistance:SCREEN_HEIGHT,\ndirection:'up-to-down'});\n\n\nvar BaseConfig={\n\ngestures:{\npop:BaseLeftToRightGesture},\n\n\n\nspringFriction:26,\nspringTension:200,\n\n\ndefaultTransitionVelocity:1.5,\n\n\nanimationInterpolators:{\ninto:buildStyleInterpolator(FromTheRight),\nout:buildStyleInterpolator(FadeToTheLeft)}};\n\n\n\nvar NavigatorSceneConfigs={\nPushFromRight:babelHelpers.extends({},\nBaseConfig),\n\n\nFloatFromRight:babelHelpers.extends({},\nBaseConfig),\n\n\nFloatFromLeft:babelHelpers.extends({},\nBaseConfig,{\nanimationInterpolators:{\ninto:buildStyleInterpolator(FromTheLeft),\nout:buildStyleInterpolator(FadeToTheRight)}}),\n\n\nFloatFromBottom:babelHelpers.extends({},\nBaseConfig,{\ngestures:{\npop:babelHelpers.extends({},\nBaseLeftToRightGesture,{\nedgeHitWidth:150,\ndirection:'top-to-bottom',\nfullDistance:SCREEN_HEIGHT})},\n\n\nanimationInterpolators:{\ninto:buildStyleInterpolator(FromTheFront),\nout:buildStyleInterpolator(ToTheBack)}}),\n\n\nFloatFromBottomAndroid:babelHelpers.extends({},\nBaseConfig,{\ngestures:null,\ndefaultTransitionVelocity:3,\nspringFriction:20,\nanimationInterpolators:{\ninto:buildStyleInterpolator(FromTheFrontAndroid),\nout:buildStyleInterpolator(ToTheBackAndroid)}}),\n\n\nFadeAndroid:babelHelpers.extends({},\nBaseConfig,{\ngestures:null,\nanimationInterpolators:{\ninto:buildStyleInterpolator(FadeIn),\nout:buildStyleInterpolator(FadeOut)}}),\n\n\nHorizontalSwipeJump:babelHelpers.extends({},\nBaseConfig,{\ngestures:{\njumpBack:babelHelpers.extends({},\nBaseLeftToRightGesture,{\noverswipe:BaseOverswipeConfig,\nedgeHitWidth:null,\nisDetachable:true}),\n\njumpForward:babelHelpers.extends({},\nBaseRightToLeftGesture,{\noverswipe:BaseOverswipeConfig,\nedgeHitWidth:null,\nisDetachable:true})},\n\n\nanimationInterpolators:{\ninto:buildStyleInterpolator(FromTheRight),\nout:buildStyleInterpolator(ToTheLeft)}}),\n\n\nVerticalUpSwipeJump:babelHelpers.extends({},\nBaseConfig,{\ngestures:{\njumpBack:babelHelpers.extends({},\nBaseDownUpGesture,{\noverswipe:BaseOverswipeConfig,\nedgeHitWidth:null,\nisDetachable:true}),\n\njumpForward:babelHelpers.extends({},\nBaseDownUpGesture,{\noverswipe:BaseOverswipeConfig,\nedgeHitWidth:null,\nisDetachable:true})},\n\n\nanimationInterpolators:{\ninto:buildStyleInterpolator(FromTheDown),\nout:buildStyleInterpolator(ToTheUp)}}),\n\n\nVerticalDownSwipeJump:babelHelpers.extends({},\nBaseConfig,{\ngestures:{\njumpBack:babelHelpers.extends({},\nBaseUpDownGesture,{\noverswipe:BaseOverswipeConfig,\nedgeHitWidth:null,\nisDetachable:true}),\n\njumpForward:babelHelpers.extends({},\nBaseUpDownGesture,{\noverswipe:BaseOverswipeConfig,\nedgeHitWidth:null,\nisDetachable:true})},\n\n\nanimationInterpolators:{\ninto:buildStyleInterpolator(FromTheTop),\nout:buildStyleInterpolator(ToTheDown)}})};\n\n\n\n\nmodule.exports=NavigatorSceneConfigs;\n});\n__d('PanResponder',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\nvar TouchHistoryMath=require('TouchHistoryMath');\n\nvar currentCentroidXOfTouchesChangedAfter=\nTouchHistoryMath.currentCentroidXOfTouchesChangedAfter;\nvar currentCentroidYOfTouchesChangedAfter=\nTouchHistoryMath.currentCentroidYOfTouchesChangedAfter;\nvar previousCentroidXOfTouchesChangedAfter=\nTouchHistoryMath.previousCentroidXOfTouchesChangedAfter;\nvar previousCentroidYOfTouchesChangedAfter=\nTouchHistoryMath.previousCentroidYOfTouchesChangedAfter;\nvar currentCentroidX=TouchHistoryMath.currentCentroidX;\nvar currentCentroidY=TouchHistoryMath.currentCentroidY;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar PanResponder={\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_initializeGestureState:function(gestureState){\ngestureState.moveX=0;\ngestureState.moveY=0;\ngestureState.x0=0;\ngestureState.y0=0;\ngestureState.dx=0;\ngestureState.dy=0;\ngestureState.vx=0;\ngestureState.vy=0;\ngestureState.numberActiveTouches=0;\n\ngestureState._accountsForMovesUpTo=0;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_updateGestureStateOnMove:function(gestureState,touchHistory){\ngestureState.numberActiveTouches=touchHistory.numberActiveTouches;\ngestureState.moveX=currentCentroidXOfTouchesChangedAfter(\ntouchHistory,\ngestureState._accountsForMovesUpTo);\n\ngestureState.moveY=currentCentroidYOfTouchesChangedAfter(\ntouchHistory,\ngestureState._accountsForMovesUpTo);\n\nvar movedAfter=gestureState._accountsForMovesUpTo;\nvar prevX=previousCentroidXOfTouchesChangedAfter(touchHistory,movedAfter);\nvar x=currentCentroidXOfTouchesChangedAfter(touchHistory,movedAfter);\nvar prevY=previousCentroidYOfTouchesChangedAfter(touchHistory,movedAfter);\nvar y=currentCentroidYOfTouchesChangedAfter(touchHistory,movedAfter);\nvar nextDX=gestureState.dx+(x-prevX);\nvar nextDY=gestureState.dy+(y-prevY);\n\n\nvar dt=\ntouchHistory.mostRecentTimeStamp-gestureState._accountsForMovesUpTo;\ngestureState.vx=(nextDX-gestureState.dx)/dt;\ngestureState.vy=(nextDY-gestureState.dy)/dt;\n\ngestureState.dx=nextDX;\ngestureState.dy=nextDY;\ngestureState._accountsForMovesUpTo=touchHistory.mostRecentTimeStamp;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncreate:function(config){\nvar gestureState={\n\nstateID:Math.random()};\n\nPanResponder._initializeGestureState(gestureState);\nvar panHandlers={\nonStartShouldSetResponder:function(e){\nreturn config.onStartShouldSetPanResponder===undefined?false:\nconfig.onStartShouldSetPanResponder(e,gestureState);},\n\nonMoveShouldSetResponder:function(e){\nreturn config.onMoveShouldSetPanResponder===undefined?false:\nconfig.onMoveShouldSetPanResponder(e,gestureState);},\n\nonStartShouldSetResponderCapture:function(e){\n\n\nif(e.nativeEvent.touches.length===1){\nPanResponder._initializeGestureState(gestureState);}\n\ngestureState.numberActiveTouches=e.touchHistory.numberActiveTouches;\nreturn config.onStartShouldSetPanResponderCapture!==undefined?\nconfig.onStartShouldSetPanResponderCapture(e,gestureState):false;},\n\n\nonMoveShouldSetResponderCapture:function(e){\nvar touchHistory=e.touchHistory;\n\n\n\nif(gestureState._accountsForMovesUpTo===touchHistory.mostRecentTimeStamp){\nreturn false;}\n\nPanResponder._updateGestureStateOnMove(gestureState,touchHistory);\nreturn config.onMoveShouldSetPanResponderCapture?\nconfig.onMoveShouldSetPanResponderCapture(e,gestureState):false;},\n\n\nonResponderGrant:function(e){\ngestureState.x0=currentCentroidX(e.touchHistory);\ngestureState.y0=currentCentroidY(e.touchHistory);\ngestureState.dx=0;\ngestureState.dy=0;\nconfig.onPanResponderGrant&&config.onPanResponderGrant(e,gestureState);\n\nreturn config.onShouldBlockNativeResponder===undefined?true:\nconfig.onShouldBlockNativeResponder();},\n\n\nonResponderReject:function(e){\nconfig.onPanResponderReject&&config.onPanResponderReject(e,gestureState);},\n\n\nonResponderRelease:function(e){\nconfig.onPanResponderRelease&&config.onPanResponderRelease(e,gestureState);\nPanResponder._initializeGestureState(gestureState);},\n\n\nonResponderStart:function(e){\nvar touchHistory=e.touchHistory;\ngestureState.numberActiveTouches=touchHistory.numberActiveTouches;\nconfig.onPanResponderStart&&config.onPanResponderStart(e,gestureState);},\n\n\nonResponderMove:function(e){\nvar touchHistory=e.touchHistory;\n\n\nif(gestureState._accountsForMovesUpTo===touchHistory.mostRecentTimeStamp){\nreturn;}\n\n\n\nPanResponder._updateGestureStateOnMove(gestureState,touchHistory);\nconfig.onPanResponderMove&&config.onPanResponderMove(e,gestureState);},\n\n\nonResponderEnd:function(e){\nvar touchHistory=e.touchHistory;\ngestureState.numberActiveTouches=touchHistory.numberActiveTouches;\nconfig.onPanResponderEnd&&config.onPanResponderEnd(e,gestureState);},\n\n\nonResponderTerminate:function(e){\nconfig.onPanResponderTerminate&&\nconfig.onPanResponderTerminate(e,gestureState);\nPanResponder._initializeGestureState(gestureState);},\n\n\nonResponderTerminationRequest:function(e){\nreturn config.onPanResponderTerminationRequest===undefined?true:\nconfig.onPanResponderTerminationRequest(e,gestureState);}};\n\n\nreturn {panHandlers:panHandlers};}};\n\n\n\nmodule.exports=PanResponder;\n});\n__d('TouchHistoryMath',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\nvar TouchHistoryMath={\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncentroidDimension:function(touchHistory,touchesChangedAfter,isXAxis,ofCurrent){\nvar touchBank=touchHistory.touchBank;\nvar total=0;\nvar count=0;\n\nvar oneTouchData=touchHistory.numberActiveTouches===1?\ntouchHistory.touchBank[touchHistory.indexOfSingleActiveTouch]:null;\n\nif(oneTouchData!==null){\nif(oneTouchData.touchActive&&oneTouchData.currentTimeStamp>touchesChangedAfter){\ntotal+=ofCurrent&&isXAxis?oneTouchData.currentPageX:\nofCurrent&&!isXAxis?oneTouchData.currentPageY:\n!ofCurrent&&isXAxis?oneTouchData.previousPageX:\noneTouchData.previousPageY;\ncount=1;}}else \n\n{\nfor(var i=0;i<touchBank.length;i++){\nvar touchTrack=touchBank[i];\nif(touchTrack!==null&&\ntouchTrack!==undefined&&\ntouchTrack.touchActive&&\ntouchTrack.currentTimeStamp>=touchesChangedAfter){\nvar toAdd;\nif(ofCurrent&&isXAxis){\ntoAdd=touchTrack.currentPageX;}else \nif(ofCurrent&&!isXAxis){\ntoAdd=touchTrack.currentPageY;}else \nif(!ofCurrent&&isXAxis){\ntoAdd=touchTrack.previousPageX;}else \n{\ntoAdd=touchTrack.previousPageY;}\n\ntotal+=toAdd;\ncount++;}}}\n\n\n\nreturn count>0?total/count:TouchHistoryMath.noCentroid;},\n\n\ncurrentCentroidXOfTouchesChangedAfter:function(touchHistory,touchesChangedAfter){\nreturn TouchHistoryMath.centroidDimension(\ntouchHistory,\ntouchesChangedAfter,\ntrue,\ntrue);},\n\n\n\ncurrentCentroidYOfTouchesChangedAfter:function(touchHistory,touchesChangedAfter){\nreturn TouchHistoryMath.centroidDimension(\ntouchHistory,\ntouchesChangedAfter,\nfalse,\ntrue);},\n\n\n\npreviousCentroidXOfTouchesChangedAfter:function(touchHistory,touchesChangedAfter){\nreturn TouchHistoryMath.centroidDimension(\ntouchHistory,\ntouchesChangedAfter,\ntrue,\nfalse);},\n\n\n\npreviousCentroidYOfTouchesChangedAfter:function(touchHistory,touchesChangedAfter){\nreturn TouchHistoryMath.centroidDimension(\ntouchHistory,\ntouchesChangedAfter,\nfalse,\nfalse);},\n\n\n\ncurrentCentroidX:function(touchHistory){\nreturn TouchHistoryMath.centroidDimension(\ntouchHistory,\n0,\ntrue,\ntrue);},\n\n\n\ncurrentCentroidY:function(touchHistory){\nreturn TouchHistoryMath.centroidDimension(\ntouchHistory,\n0,\nfalse,\ntrue);},\n\n\n\nnoCentroid:-1};\n\n\nmodule.exports=TouchHistoryMath;\n});\n__d('clamp',function(global, require, module, exports) {  function \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclamp(min,value,max){\nif(value<min){\nreturn min;}\n\nif(value>max){\nreturn max;}\n\nreturn value;}\n\n\nmodule.exports=clamp;\n});\n__d('rebound/rebound.js',function(global, require, module, exports) {  (\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction(){\nvar rebound={};\nvar util=rebound.util={};\nvar concat=Array.prototype.concat;\nvar slice=Array.prototype.slice;\n\n\nutil.bind=function bind(func,context){\nvar args=slice.call(arguments,2);\nreturn function(){\nfunc.apply(context,concat.call(args,slice.call(arguments)));};};\n\n\n\n\nutil.extend=function extend(target,source){\nfor(var key in source){\nif(source.hasOwnProperty(key)){\ntarget[key]=source[key];}}};\n\n\n\n\n\n\n\n\n\nvar SpringSystem=rebound.SpringSystem=function SpringSystem(looper){\nthis._springRegistry={};\nthis._activeSprings=[];\nthis.listeners=[];\nthis._idleSpringIndices=[];\nthis.looper=looper||new AnimationLooper();\nthis.looper.springSystem=this;};\n\n\nutil.extend(SpringSystem.prototype,{\n\n_springRegistry:null,\n\n_isIdle:true,\n\n_lastTimeMillis:-1,\n\n_activeSprings:null,\n\nlisteners:null,\n\n_idleSpringIndices:null,\n\n\n\n\n\n\nsetLooper:function(looper){\nthis.looper=looper;\nlooper.springSystem=this;},\n\n\n\n\n\n\ncreateSpring:function(tension,friction){\nvar springConfig;\nif(tension===undefined||friction===undefined){\nspringConfig=SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG;}else \n{\nspringConfig=\nSpringConfig.fromOrigamiTensionAndFriction(tension,friction);}\n\nreturn this.createSpringWithConfig(springConfig);},\n\n\n\n\n\ncreateSpringWithBouncinessAndSpeed:function(bounciness,speed){\nvar springConfig;\nif(bounciness===undefined||speed===undefined){\nspringConfig=SpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG;}else \n{\nspringConfig=\nSpringConfig.fromBouncinessAndSpeed(bounciness,speed);}\n\nreturn this.createSpringWithConfig(springConfig);},\n\n\n\ncreateSpringWithConfig:function(springConfig){\nvar spring=new Spring(this);\nthis.registerSpring(spring);\nspring.setSpringConfig(springConfig);\nreturn spring;},\n\n\n\n\n\n\ngetIsIdle:function(){\nreturn this._isIdle;},\n\n\n\n\n\ngetSpringById:function(id){\nreturn this._springRegistry[id];},\n\n\n\n\ngetAllSprings:function(){\nvar vals=[];\nfor(var id in this._springRegistry){\nif(this._springRegistry.hasOwnProperty(id)){\nvals.push(this._springRegistry[id]);}}\n\n\nreturn vals;},\n\n\n\n\n\n\nregisterSpring:function(spring){\nthis._springRegistry[spring.getId()]=spring;},\n\n\n\n\n\n\nderegisterSpring:function(spring){\nremoveFirst(this._activeSprings,spring);\ndelete this._springRegistry[spring.getId()];},\n\n\nadvance:function(time,deltaTime){\nwhile(this._idleSpringIndices.length>0){this._idleSpringIndices.pop();}\nfor(var i=0,len=this._activeSprings.length;i<len;i++){\nvar spring=this._activeSprings[i];\nif(spring.systemShouldAdvance()){\nspring.advance(time/1000.0,deltaTime/1000.0);}else \n{\nthis._idleSpringIndices.push(this._activeSprings.indexOf(spring));}}\n\n\nwhile(this._idleSpringIndices.length>0){\nvar idx=this._idleSpringIndices.pop();\nidx>=0&&this._activeSprings.splice(idx,1);}},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nloop:function(currentTimeMillis){\nvar listener;\nif(this._lastTimeMillis===-1){\nthis._lastTimeMillis=currentTimeMillis-1;}\n\nvar ellapsedMillis=currentTimeMillis-this._lastTimeMillis;\nthis._lastTimeMillis=currentTimeMillis;\n\nvar i=0,len=this.listeners.length;\nfor(i=0;i<len;i++){\nlistener=this.listeners[i];\nlistener.onBeforeIntegrate&&listener.onBeforeIntegrate(this);}\n\n\nthis.advance(currentTimeMillis,ellapsedMillis);\nif(this._activeSprings.length===0){\nthis._isIdle=true;\nthis._lastTimeMillis=-1;}\n\n\nfor(i=0;i<len;i++){\nlistener=this.listeners[i];\nlistener.onAfterIntegrate&&listener.onAfterIntegrate(this);}\n\n\nif(!this._isIdle){\nthis.looper.run();}},\n\n\n\n\n\n\nactivateSpring:function(springId){\nvar spring=this._springRegistry[springId];\nif(this._activeSprings.indexOf(spring)==-1){\nthis._activeSprings.push(spring);}\n\nif(this.getIsIdle()){\nthis._isIdle=false;\nthis.looper.run();}},\n\n\n\n\n\n\naddListener:function(listener){\nthis.listeners.push(listener);},\n\n\n\nremoveListener:function(listener){\nremoveFirst(this.listeners,listener);},\n\n\n\nremoveAllListeners:function(){\nthis.listeners=[];}});\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Spring=rebound.Spring=function Spring(springSystem){\nthis._id='s'+Spring._ID++;\nthis._springSystem=springSystem;\nthis.listeners=[];\nthis._currentState=new PhysicsState();\nthis._previousState=new PhysicsState();\nthis._tempState=new PhysicsState();};\n\n\nutil.extend(Spring,{\n_ID:0,\n\nMAX_DELTA_TIME_SEC:0.064,\n\nSOLVER_TIMESTEP_SEC:0.001});\n\n\n\nutil.extend(Spring.prototype,{\n\n_id:0,\n\n_springConfig:null,\n\n_overshootClampingEnabled:false,\n\n_currentState:null,\n\n_previousState:null,\n\n_tempState:null,\n\n_startValue:0,\n\n_endValue:0,\n\n_wasAtRest:true,\n\n_restSpeedThreshold:0.001,\n\n_displacementFromRestThreshold:0.001,\n\nlisteners:null,\n\n_timeAccumulator:0,\n\n_springSystem:null,\n\n\ndestroy:function(){\nthis.listeners=[];\nthis.frames=[];\nthis._springSystem.deregisterSpring(this);},\n\n\n\n\ngetId:function(){\nreturn this._id;},\n\n\n\n\n\nsetSpringConfig:function(springConfig){\nthis._springConfig=springConfig;\nreturn this;},\n\n\n\ngetSpringConfig:function(){\nreturn this._springConfig;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsetCurrentValue:function(currentValue,skipSetAtRest){\nthis._startValue=currentValue;\nthis._currentState.position=currentValue;\nif(!skipSetAtRest){\nthis.setAtRest();}\n\nthis.notifyPositionUpdated(false,false);\nreturn this;},\n\n\n\n\n\ngetStartValue:function(){\nreturn this._startValue;},\n\n\n\ngetCurrentValue:function(){\nreturn this._currentState.position;},\n\n\n\n\ngetCurrentDisplacementDistance:function(){\nreturn this.getDisplacementDistanceForState(this._currentState);},\n\n\ngetDisplacementDistanceForState:function(state){\nreturn Math.abs(this._endValue-state.position);},\n\n\n\n\n\n\n\n\nsetEndValue:function(endValue){\nif(this._endValue==endValue&&this.isAtRest()){\nreturn this;}\n\nthis._startValue=this.getCurrentValue();\nthis._endValue=endValue;\nthis._springSystem.activateSpring(this.getId());\nfor(var i=0,len=this.listeners.length;i<len;i++){\nvar listener=this.listeners[i];\nvar onChange=listener.onSpringEndStateChange;\nonChange&&onChange(this);}\n\nreturn this;},\n\n\n\ngetEndValue:function(){\nreturn this._endValue;},\n\n\n\n\n\n\n\n\n\nsetVelocity:function(velocity){\nif(velocity===this._currentState.velocity){\nreturn this;}\n\nthis._currentState.velocity=velocity;\nthis._springSystem.activateSpring(this.getId());\nreturn this;},\n\n\n\ngetVelocity:function(){\nreturn this._currentState.velocity;},\n\n\n\n\nsetRestSpeedThreshold:function(restSpeedThreshold){\nthis._restSpeedThreshold=restSpeedThreshold;\nreturn this;},\n\n\n\ngetRestSpeedThreshold:function(){\nreturn this._restSpeedThreshold;},\n\n\n\n\n\nsetRestDisplacementThreshold:function(displacementFromRestThreshold){\nthis._displacementFromRestThreshold=displacementFromRestThreshold;},\n\n\n\ngetRestDisplacementThreshold:function(){\nreturn this._displacementFromRestThreshold;},\n\n\n\n\n\n\n\nsetOvershootClampingEnabled:function(enabled){\nthis._overshootClampingEnabled=enabled;\nreturn this;},\n\n\n\nisOvershootClampingEnabled:function(){\nreturn this._overshootClampingEnabled;},\n\n\n\n\n\nisOvershooting:function(){\nvar start=this._startValue;\nvar end=this._endValue;\nreturn this._springConfig.tension>0&&(\nstart<end&&this.getCurrentValue()>end||\nstart>end&&this.getCurrentValue()<end);},\n\n\n\n\n\n\n\nadvance:function(time,realDeltaTime){\nvar isAtRest=this.isAtRest();\n\nif(isAtRest&&this._wasAtRest){\nreturn;}\n\n\nvar adjustedDeltaTime=realDeltaTime;\nif(realDeltaTime>Spring.MAX_DELTA_TIME_SEC){\nadjustedDeltaTime=Spring.MAX_DELTA_TIME_SEC;}\n\n\nthis._timeAccumulator+=adjustedDeltaTime;\n\nvar tension=this._springConfig.tension,\nfriction=this._springConfig.friction,\n\nposition=this._currentState.position,\nvelocity=this._currentState.velocity,\ntempPosition=this._tempState.position,\ntempVelocity=this._tempState.velocity,\n\naVelocity,aAcceleration,\nbVelocity,bAcceleration,\ncVelocity,cAcceleration,\ndVelocity,dAcceleration,\n\ndxdt,dvdt;\n\nwhile(this._timeAccumulator>=Spring.SOLVER_TIMESTEP_SEC){\n\nthis._timeAccumulator-=Spring.SOLVER_TIMESTEP_SEC;\n\nif(this._timeAccumulator<Spring.SOLVER_TIMESTEP_SEC){\nthis._previousState.position=position;\nthis._previousState.velocity=velocity;}\n\n\naVelocity=velocity;\naAcceleration=\ntension*(this._endValue-tempPosition)-friction*velocity;\n\ntempPosition=position+aVelocity*Spring.SOLVER_TIMESTEP_SEC*0.5;\ntempVelocity=\nvelocity+aAcceleration*Spring.SOLVER_TIMESTEP_SEC*0.5;\nbVelocity=tempVelocity;\nbAcceleration=\ntension*(this._endValue-tempPosition)-friction*tempVelocity;\n\ntempPosition=position+bVelocity*Spring.SOLVER_TIMESTEP_SEC*0.5;\ntempVelocity=\nvelocity+bAcceleration*Spring.SOLVER_TIMESTEP_SEC*0.5;\ncVelocity=tempVelocity;\ncAcceleration=\ntension*(this._endValue-tempPosition)-friction*tempVelocity;\n\ntempPosition=position+cVelocity*Spring.SOLVER_TIMESTEP_SEC*0.5;\ntempVelocity=\nvelocity+cAcceleration*Spring.SOLVER_TIMESTEP_SEC*0.5;\ndVelocity=tempVelocity;\ndAcceleration=\ntension*(this._endValue-tempPosition)-friction*tempVelocity;\n\ndxdt=\n1.0/6.0*(aVelocity+2.0*(bVelocity+cVelocity)+dVelocity);\ndvdt=1.0/6.0*(\naAcceleration+2.0*(bAcceleration+cAcceleration)+dAcceleration);\n\n\nposition+=dxdt*Spring.SOLVER_TIMESTEP_SEC;\nvelocity+=dvdt*Spring.SOLVER_TIMESTEP_SEC;}\n\n\nthis._tempState.position=tempPosition;\nthis._tempState.velocity=tempVelocity;\n\nthis._currentState.position=position;\nthis._currentState.velocity=velocity;\n\nif(this._timeAccumulator>0){\nthis._interpolate(this._timeAccumulator/Spring.SOLVER_TIMESTEP_SEC);}\n\n\nif(this.isAtRest()||\nthis._overshootClampingEnabled&&this.isOvershooting()){\n\nif(this._springConfig.tension>0){\nthis._startValue=this._endValue;\nthis._currentState.position=this._endValue;}else \n{\nthis._endValue=this._currentState.position;\nthis._startValue=this._endValue;}\n\nthis.setVelocity(0);\nisAtRest=true;}\n\n\nvar notifyActivate=false;\nif(this._wasAtRest){\nthis._wasAtRest=false;\nnotifyActivate=true;}\n\n\nvar notifyAtRest=false;\nif(isAtRest){\nthis._wasAtRest=true;\nnotifyAtRest=true;}\n\n\nthis.notifyPositionUpdated(notifyActivate,notifyAtRest);},\n\n\nnotifyPositionUpdated:function(notifyActivate,notifyAtRest){\nfor(var i=0,len=this.listeners.length;i<len;i++){\nvar listener=this.listeners[i];\nif(notifyActivate&&listener.onSpringActivate){\nlistener.onSpringActivate(this);}\n\n\nif(listener.onSpringUpdate){\nlistener.onSpringUpdate(this);}\n\n\nif(notifyAtRest&&listener.onSpringAtRest){\nlistener.onSpringAtRest(this);}}},\n\n\n\n\n\n\n\n\n\nsystemShouldAdvance:function(){\nreturn !this.isAtRest()||!this.wasAtRest();},\n\n\nwasAtRest:function(){\nreturn this._wasAtRest;},\n\n\n\n\n\n\n\n\nisAtRest:function(){\nreturn Math.abs(this._currentState.velocity)<this._restSpeedThreshold&&(\nthis.getDisplacementDistanceForState(this._currentState)<=\nthis._displacementFromRestThreshold||\nthis._springConfig.tension===0);},\n\n\n\n\n\n\nsetAtRest:function(){\nthis._endValue=this._currentState.position;\nthis._tempState.position=this._currentState.position;\nthis._currentState.velocity=0;\nreturn this;},\n\n\n_interpolate:function(alpha){\nthis._currentState.position=this._currentState.position*\nalpha+this._previousState.position*(1-alpha);\nthis._currentState.velocity=this._currentState.velocity*\nalpha+this._previousState.velocity*(1-alpha);},\n\n\ngetListeners:function(){\nreturn this.listeners;},\n\n\naddListener:function(newListener){\nthis.listeners.push(newListener);\nreturn this;},\n\n\nremoveListener:function(listenerToRemove){\nremoveFirst(this.listeners,listenerToRemove);\nreturn this;},\n\n\nremoveAllListeners:function(){\nthis.listeners=[];\nreturn this;},\n\n\ncurrentValueIsApproximately:function(value){\nreturn Math.abs(this.getCurrentValue()-value)<=\nthis.getRestDisplacementThreshold();}});\n\n\n\n\n\n\n\n\n\nvar PhysicsState=function PhysicsState(){};\n\nutil.extend(PhysicsState.prototype,{\nposition:0,\nvelocity:0});\n\n\n\n\n\n\n\n\nvar SpringConfig=rebound.SpringConfig=\nfunction SpringConfig(tension,friction){\nthis.tension=tension;\nthis.friction=friction;};\n\n\n\n\n\n\n\nvar AnimationLooper=rebound.AnimationLooper=function AnimationLooper(){\nthis.springSystem=null;\nvar _this=this;\nvar _run=function(){\n_this.springSystem.loop(Date.now());};\n\n\nthis.run=function(){\nutil.onFrame(_run);};};\n\n\n\n\n\n\n\n\n\nrebound.SimulationLooper=function SimulationLooper(timestep){\nthis.springSystem=null;\nvar time=0;\nvar running=false;\ntimestep=timestep||16.667;\n\nthis.run=function(){\nif(running){\nreturn;}\n\nrunning=true;\nwhile(!this.springSystem.getIsIdle()){\nthis.springSystem.loop(time+=timestep);}\n\nrunning=false;};};\n\n\n\n\n\n\n\n\nrebound.SteppingSimulationLooper=function(timestep){\nthis.springSystem=null;\nvar time=0;\n\n\n\nthis.run=function(){};\n\n\nthis.step=function(timestep){\nthis.springSystem.loop(time+=timestep);};};\n\n\n\n\n\n\n\n\nvar OrigamiValueConverter=rebound.OrigamiValueConverter={\ntensionFromOrigamiValue:function(oValue){\nreturn (oValue-30.0)*3.62+194.0;},\n\n\norigamiValueFromTension:function(tension){\nreturn (tension-194.0)/3.62+30.0;},\n\n\nfrictionFromOrigamiValue:function(oValue){\nreturn (oValue-8.0)*3.0+25.0;},\n\n\norigamiFromFriction:function(friction){\nreturn (friction-25.0)/3.0+8.0;}};\n\n\n\n\n\n\n\n\n\n\nvar BouncyConversion=rebound.BouncyConversion=function(bounciness,speed){\nthis.bounciness=bounciness;\nthis.speed=speed;\nvar b=this.normalize(bounciness/1.7,0,20.0);\nb=this.projectNormal(b,0.0,0.8);\nvar s=this.normalize(speed/1.7,0,20.0);\nthis.bouncyTension=this.projectNormal(s,0.5,200);\nthis.bouncyFriction=this.quadraticOutInterpolation(\nb,\nthis.b3Nobounce(this.bouncyTension),\n0.01);};\n\n\nutil.extend(BouncyConversion.prototype,{\n\nnormalize:function(value,startValue,endValue){\nreturn (value-startValue)/(endValue-startValue);},\n\n\nprojectNormal:function(n,start,end){\nreturn start+n*(end-start);},\n\n\nlinearInterpolation:function(t,start,end){\nreturn t*end+(1.0-t)*start;},\n\n\nquadraticOutInterpolation:function(t,start,end){\nreturn this.linearInterpolation(2*t-t*t,start,end);},\n\n\nb3Friction1:function(x){\nreturn 0.0007*Math.pow(x,3)-\n0.031*Math.pow(x,2)+0.64*x+1.28;},\n\n\nb3Friction2:function(x){\nreturn 0.000044*Math.pow(x,3)-\n0.006*Math.pow(x,2)+0.36*x+2.;},\n\n\nb3Friction3:function(x){\nreturn 0.00000045*Math.pow(x,3)-\n0.000332*Math.pow(x,2)+0.1078*x+5.84;},\n\n\nb3Nobounce:function(tension){\nvar friction=0;\nif(tension<=18){\nfriction=this.b3Friction1(tension);}else \nif(tension>18&&tension<=44){\nfriction=this.b3Friction2(tension);}else \n{\nfriction=this.b3Friction3(tension);}\n\nreturn friction;}});\n\n\n\nutil.extend(SpringConfig,{\n\n\n\n\nfromOrigamiTensionAndFriction:function(tension,friction){\nreturn new SpringConfig(\nOrigamiValueConverter.tensionFromOrigamiValue(tension),\nOrigamiValueConverter.frictionFromOrigamiValue(friction));},\n\n\n\n\n\nfromBouncinessAndSpeed:function(bounciness,speed){\nvar bouncyConversion=new rebound.BouncyConversion(bounciness,speed);\nreturn this.fromOrigamiTensionAndFriction(\nbouncyConversion.bouncyTension,\nbouncyConversion.bouncyFriction);},\n\n\n\n\ncoastingConfigWithOrigamiFriction:function(friction){\nreturn new SpringConfig(\n0,\nOrigamiValueConverter.frictionFromOrigamiValue(friction));}});\n\n\n\n\nSpringConfig.DEFAULT_ORIGAMI_SPRING_CONFIG=\nSpringConfig.fromOrigamiTensionAndFriction(40,7);\n\nutil.extend(SpringConfig.prototype,{friction:0,tension:0});\n\n\n\n\nvar colorCache={};\nutil.hexToRGB=function(color){\nif(colorCache[color]){\nreturn colorCache[color];}\n\ncolor=color.replace('#','');\nif(color.length===3){\ncolor=color[0]+color[0]+color[1]+color[1]+color[2]+color[2];}\n\nvar parts=color.match(/.{2}/g);\n\nvar ret={\nr:parseInt(parts[0],16),\ng:parseInt(parts[1],16),\nb:parseInt(parts[2],16)};\n\n\ncolorCache[color]=ret;\nreturn ret;};\n\n\nutil.rgbToHex=function(r,g,b){\nr=r.toString(16);\ng=g.toString(16);\nb=b.toString(16);\nr=r.length<2?'0'+r:r;\ng=g.length<2?'0'+g:g;\nb=b.length<2?'0'+b:b;\nreturn '#'+r+g+b;};\n\n\nvar MathUtil=rebound.MathUtil={\n\n\n\n\n\n\n\n\nmapValueInRange:function(value,fromLow,fromHigh,toLow,toHigh){\nvar fromRangeSize=fromHigh-fromLow;\nvar toRangeSize=toHigh-toLow;\nvar valueScale=(value-fromLow)/fromRangeSize;\nreturn toLow+valueScale*toRangeSize;},\n\n\n\n\n\ninterpolateColor:\nfunction(val,startColor,endColor,fromLow,fromHigh,asRGB){\nfromLow=fromLow===undefined?0:fromLow;\nfromHigh=fromHigh===undefined?1:fromHigh;\nstartColor=util.hexToRGB(startColor);\nendColor=util.hexToRGB(endColor);\nvar r=Math.floor(\nutil.mapValueInRange(val,fromLow,fromHigh,startColor.r,endColor.r));\n\nvar g=Math.floor(\nutil.mapValueInRange(val,fromLow,fromHigh,startColor.g,endColor.g));\n\nvar b=Math.floor(\nutil.mapValueInRange(val,fromLow,fromHigh,startColor.b,endColor.b));\n\nif(asRGB){\nreturn 'rgb('+r+','+g+','+b+')';}else \n{\nreturn util.rgbToHex(r,g,b);}},\n\n\n\ndegreesToRadians:function(deg){\nreturn deg*Math.PI/180;},\n\n\nradiansToDegrees:function(rad){\nreturn rad*180/Math.PI;}};\n\n\n\n\nutil.extend(util,MathUtil);\n\n\n\n\n\n\n\nfunction removeFirst(array,item){\nvar idx=array.indexOf(item);\nidx!=-1&&array.splice(idx,1);}\n\n\nvar _onFrame;\nif(typeof window!=='undefined'){\n_onFrame=window.requestAnimationFrame||\nwindow.webkitRequestAnimationFrame||\nwindow.mozRequestAnimationFrame||\nwindow.msRequestAnimationFrame||\nwindow.oRequestAnimationFrame||\nfunction(callback){\nwindow.setTimeout(callback,1000/60);};}\n\n\nif(!_onFrame&&typeof process!=='undefined'&&process.title==='node'){\n_onFrame=setImmediate;}\n\n\n\nutil.onFrame=function onFrame(func){\nreturn _onFrame(func);};\n\n\n\n\nif(typeof exports!='undefined'){\nutil.extend(exports,rebound);}else \nif(typeof window!='undefined'){\nwindow.rebound=rebound;}})();\n});\n__d('NavigatorIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventEmitter=require('EventEmitter');\nvar Image=require('Image');\nvar NavigationContext=require('NavigationContext');\nvar RCTNavigatorManager=require('NativeModules').NavigatorManager;\nvar React=require('React');\nvar StaticContainer=require('StaticContainer.react');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar invariant=require('invariant');\nvar logError=require('logError');\nvar requireNativeComponent=require('requireNativeComponent');\nvar resolveAssetSource=require('resolveAssetSource');\n\nvar TRANSITIONER_REF='transitionerRef';\n\nvar PropTypes=React.PropTypes;\n\nvar __uid=0;\nfunction getuid(){\nreturn __uid++;}\n\n\nvar NavigatorTransitionerIOS=React.createClass({displayName:'NavigatorTransitionerIOS',\nrequestSchedulingNavigation:function(cb){\nRCTNavigatorManager.requestSchedulingJavaScriptNavigation(\nReact.findNodeHandle(this),\nlogError,\ncb);},\n\n\n\nrender:function(){\nreturn (\nReact.createElement(RCTNavigator,this.props));}});\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NavigatorIOS=React.createClass({displayName:'NavigatorIOS',\n\npropTypes:{\n\n\n\n\n\n\ninitialRoute:PropTypes.shape({\n\n\n\ncomponent:PropTypes.func.isRequired,\n\n\n\n\ntitle:PropTypes.string.isRequired,\n\n\n\n\n\npassProps:PropTypes.object,\n\n\n\n\n\n\nbackButtonIcon:Image.propTypes.source,\n\n\n\n\n\n\nbackButtonTitle:PropTypes.string,\n\n\n\n\nleftButtonIcon:Image.propTypes.source,\n\n\n\n\nleftButtonTitle:PropTypes.string,\n\n\n\n\nonLeftButtonPress:PropTypes.func,\n\n\n\n\nrightButtonIcon:Image.propTypes.source,\n\n\n\n\nrightButtonTitle:PropTypes.string,\n\n\n\n\nonRightButtonPress:PropTypes.func,\n\n\n\n\nwrapperStyle:View.propTypes.style}).\n\nisRequired,\n\n\n\n\nnavigationBarHidden:PropTypes.bool,\n\n\n\n\nshadowHidden:PropTypes.bool,\n\n\n\n\n\nitemWrapperStyle:View.propTypes.style,\n\n\n\n\ntintColor:PropTypes.string,\n\n\n\n\nbarTintColor:PropTypes.string,\n\n\n\n\ntitleTextColor:PropTypes.string,\n\n\n\n\ntranslucent:PropTypes.bool},\n\n\n\nnavigator:undefined,\nnavigationContext:new NavigationContext(),\n\ncomponentWillMount:function(){\n\n\nthis.navigator={\npush:this.push,\npop:this.pop,\npopN:this.popN,\nreplace:this.replace,\nreplacePrevious:this.replacePrevious,\nreplacePreviousAndPop:this.replacePreviousAndPop,\nresetTo:this.resetTo,\npopToRoute:this.popToRoute,\npopToTop:this.popToTop,\nnavigationContext:this.navigationContext};\n\nthis._emitWillFocus(this.state.routeStack[this.state.observedTopOfStack]);},\n\n\ncomponentDidMount:function(){\nthis._emitDidFocus(this.state.routeStack[this.state.observedTopOfStack]);},\n\n\ncomponentWillUnmount:function(){\nthis.navigationContext.dispose();\nthis.navigationContext=new NavigationContext();},\n\n\ngetInitialState:function(){\nreturn {\nidStack:[getuid()],\nrouteStack:[this.props.initialRoute],\n\nrequestedTopOfStack:0,\n\n\n\n\n\n\nobservedTopOfStack:0,\nprogress:1,\nfromIndex:0,\ntoIndex:0,\n\n\nmakingNavigatorRequest:false,\n\n\n\nupdatingAllIndicesAtOrBeyond:0};},\n\n\n\n_toFocusOnNavigationComplete:undefined,\n\n_handleFocusRequest:function(item){\nif(this.state.makingNavigatorRequest){\nthis._toFocusOnNavigationComplete=item;}else \n{\nthis._getFocusEmitter().emit('focus',item);}},\n\n\n\n_focusEmitter:undefined,\n\n_getFocusEmitter:function(){\n\nvar focusEmitter=this._focusEmitter;\nif(!focusEmitter){\nfocusEmitter=new EventEmitter();\nthis._focusEmitter=focusEmitter;}\n\nreturn focusEmitter;},\n\n\ngetChildContext:function()\n\n\n{\nreturn {\nonFocusRequested:this._handleFocusRequest,\nfocusEmitter:this._getFocusEmitter()};},\n\n\n\nchildContextTypes:{\nonFocusRequested:React.PropTypes.func,\nfocusEmitter:React.PropTypes.instanceOf(EventEmitter)},\n\n\n_tryLockNavigator:function(cb){\nthis.refs[TRANSITIONER_REF].requestSchedulingNavigation(\nfunction(acquiredLock){return acquiredLock&&cb();});},\n\n\n\n_handleNavigatorStackChanged:function(e){\nvar newObservedTopOfStack=e.nativeEvent.stackLength-1;\nthis._emitDidFocus(this.state.routeStack[newObservedTopOfStack]);\n\ninvariant(\nnewObservedTopOfStack<=this.state.requestedTopOfStack,\n'No navigator item should be pushed without JS knowing about it %s %s',newObservedTopOfStack,this.state.requestedTopOfStack);\n\nvar wasWaitingForConfirmation=\nthis.state.requestedTopOfStack!==this.state.observedTopOfStack;\nif(wasWaitingForConfirmation){\ninvariant(\nnewObservedTopOfStack===this.state.requestedTopOfStack,\n'If waiting for observedTopOfStack to reach requestedTopOfStack, '+\n'the only valid observedTopOfStack should be requestedTopOfStack.');}\n\n\n\n\n\n\n\n\n\n\n\nvar nextState={\nobservedTopOfStack:newObservedTopOfStack,\nmakingNavigatorRequest:false,\nupdatingAllIndicesAtOrBeyond:null,\nprogress:1,\ntoIndex:newObservedTopOfStack,\nfromIndex:newObservedTopOfStack};\n\nthis.setState(nextState,this._eliminateUnneededChildren);},\n\n\n_eliminateUnneededChildren:function(){\n\n\n\nvar updatingAllIndicesAtOrBeyond=\nthis.state.routeStack.length>this.state.observedTopOfStack+1?\nthis.state.observedTopOfStack+1:\nnull;\nthis.setState({\nidStack:this.state.idStack.slice(0,this.state.observedTopOfStack+1),\nrouteStack:this.state.routeStack.slice(0,this.state.observedTopOfStack+1),\n\nrequestedTopOfStack:this.state.observedTopOfStack,\nmakingNavigatorRequest:true,\nupdatingAllIndicesAtOrBeyond:updatingAllIndicesAtOrBeyond});},\n\n\n\n_emitDidFocus:function(route){\nthis.navigationContext.emit('didfocus',{route:route});},\n\n\n_emitWillFocus:function(route){\nthis.navigationContext.emit('willfocus',{route:route});},\n\n\npush:function(route){var _this=this;\ninvariant(!!route,'Must supply route to push');\n\nif(this.state.requestedTopOfStack===this.state.observedTopOfStack){\nthis._tryLockNavigator(function(){\n_this._emitWillFocus(route);\n\nvar nextStack=_this.state.routeStack.concat([route]);\nvar nextIDStack=_this.state.idStack.concat([getuid()]);\n_this.setState({\n\n\nidStack:nextIDStack,\nrouteStack:nextStack,\nrequestedTopOfStack:nextStack.length-1,\nmakingNavigatorRequest:true,\nupdatingAllIndicesAtOrBeyond:nextStack.length-1});});}},\n\n\n\n\n\npopN:function(n){var _this2=this;\nif(n===0){\nreturn;}\n\n\nif(this.state.requestedTopOfStack===this.state.observedTopOfStack){\nif(this.state.requestedTopOfStack>0){\nthis._tryLockNavigator(function(){\nvar newRequestedTopOfStack=_this2.state.requestedTopOfStack-n;\ninvariant(newRequestedTopOfStack>=0,'Cannot pop below 0');\n_this2._emitWillFocus(_this2.state.routeStack[newRequestedTopOfStack]);\n_this2.setState({\nrequestedTopOfStack:newRequestedTopOfStack,\nmakingNavigatorRequest:true,\n\n\nupdatingAllIndicesAtOrBeyond:null});});}}},\n\n\n\n\n\n\npop:function(){\nthis.popN(1);},\n\n\n\n\n\n\n\n\nreplaceAtIndex:function(route,index){\ninvariant(!!route,'Must supply route to replace');\nif(index<0){\nindex+=this.state.routeStack.length;}\n\n\nif(this.state.routeStack.length<=index){\nreturn;}\n\n\n\n\nvar nextIDStack=this.state.idStack.slice();\nvar nextRouteStack=this.state.routeStack.slice();\nnextIDStack[index]=getuid();\nnextRouteStack[index]=route;\n\nthis.setState({\nidStack:nextIDStack,\nrouteStack:nextRouteStack,\nmakingNavigatorRequest:false,\nupdatingAllIndicesAtOrBeyond:index});\n\n\nthis._emitWillFocus(route);\nthis._emitDidFocus(route);},\n\n\n\n\n\nreplace:function(route){\nthis.replaceAtIndex(route,-1);},\n\n\n\n\n\nreplacePrevious:function(route){\nthis.replaceAtIndex(route,-2);},\n\n\npopToTop:function(){\nthis.popToRoute(this.state.routeStack[0]);},\n\n\npopToRoute:function(route){\nvar indexOfRoute=this.state.routeStack.indexOf(route);\ninvariant(\nindexOfRoute!==-1,\n'Calling pop to route for a route that doesn\\'t exist!');\n\nvar numToPop=this.state.routeStack.length-indexOfRoute-1;\nthis.popN(numToPop);},\n\n\nreplacePreviousAndPop:function(route){var _this3=this;\n\nif(this.state.requestedTopOfStack!==this.state.observedTopOfStack){\nreturn;}\n\nif(this.state.routeStack.length<2){\nreturn;}\n\nthis._tryLockNavigator(function(){\n_this3.replacePrevious(route);\n_this3.setState({\nrequestedTopOfStack:_this3.state.requestedTopOfStack-1,\nmakingNavigatorRequest:true});});},\n\n\n\n\nresetTo:function(route){\ninvariant(!!route,'Must supply route to push');\n\nif(this.state.requestedTopOfStack!==this.state.observedTopOfStack){\nreturn;}\n\nthis.replaceAtIndex(route,0);\nthis.popToRoute(route);},\n\n\nhandleNavigationComplete:function(e){\nif(this._toFocusOnNavigationComplete){\nthis._getFocusEmitter().emit('focus',this._toFocusOnNavigationComplete);\nthis._toFocusOnNavigationComplete=null;}\n\nthis._handleNavigatorStackChanged(e);},\n\n\n_routeToStackItem:function(route,i){\nvar Component=route.component;\nvar shouldUpdateChild=this.state.updatingAllIndicesAtOrBeyond!==null&&\nthis.state.updatingAllIndicesAtOrBeyond>=i;\n\nreturn (\nReact.createElement(StaticContainer,{key:'nav'+i,shouldUpdate:shouldUpdateChild},\nReact.createElement(RCTNavigatorItem,{\ntitle:route.title,\nstyle:[\nstyles.stackItem,\nthis.props.itemWrapperStyle,\nroute.wrapperStyle],\n\nbackButtonIcon:resolveAssetSource(route.backButtonIcon),\nbackButtonTitle:route.backButtonTitle,\nleftButtonIcon:resolveAssetSource(route.leftButtonIcon),\nleftButtonTitle:route.leftButtonTitle,\nonNavLeftButtonTap:route.onLeftButtonPress,\nrightButtonIcon:resolveAssetSource(route.rightButtonIcon),\nrightButtonTitle:route.rightButtonTitle,\nonNavRightButtonTap:route.onRightButtonPress,\nnavigationBarHidden:this.props.navigationBarHidden,\nshadowHidden:this.props.shadowHidden,\ntintColor:this.props.tintColor,\nbarTintColor:this.props.barTintColor,\ntranslucent:this.props.translucent!==false,\ntitleTextColor:this.props.titleTextColor},\nReact.createElement(Component,babelHelpers.extends({\nnavigator:this.navigator,\nroute:route},\nroute.passProps)))));},\n\n\n\n\n\n\nrenderNavigationStackItems:function(){\nvar shouldRecurseToNavigator=\nthis.state.makingNavigatorRequest||\nthis.state.updatingAllIndicesAtOrBeyond!==null;\n\n\nvar items=shouldRecurseToNavigator?\nthis.state.routeStack.map(this._routeToStackItem):null;\nreturn (\nReact.createElement(StaticContainer,{shouldUpdate:shouldRecurseToNavigator},\nReact.createElement(NavigatorTransitionerIOS,{\nref:TRANSITIONER_REF,\nstyle:styles.transitioner,\nvertical:this.props.vertical,\nrequestedTopOfStack:this.state.requestedTopOfStack,\nonNavigationComplete:this.handleNavigationComplete},\nitems)));},\n\n\n\n\n\nrender:function(){\nreturn (\nReact.createElement(View,{style:this.props.style},\nthis.renderNavigationStackItems()));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nstackItem:{\nbackgroundColor:'white',\noverflow:'hidden',\nposition:'absolute',\ntop:0,\nleft:0,\nright:0,\nbottom:0},\n\ntransitioner:{\nflex:1}});\n\n\n\nvar RCTNavigator=requireNativeComponent('RCTNavigator');\nvar RCTNavigatorItem=requireNativeComponent('RCTNavItem');\n\nmodule.exports=NavigatorIOS;\n});\n__d('PickerIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar React=require('React');\nvar ReactChildren=require('ReactChildren');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\nvar RCTPickerIOSConsts=require('NativeModules').UIManager.RCTPicker.Constants;\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\nvar merge=require('merge');\n\nvar PICKER='picker';\n\nvar PickerIOS=React.createClass({displayName:'PickerIOS',\nmixins:[NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\nonValueChange:React.PropTypes.func,\nselectedValue:React.PropTypes.any}),\n\n\ngetInitialState:function(){\nreturn this._stateFromProps(this.props);},\n\n\ncomponentWillReceiveProps:function(nextProps){\nthis.setState(this._stateFromProps(nextProps));},\n\n\n\n_stateFromProps:function(props){\nvar selectedIndex=0;\nvar items=[];\nReactChildren.forEach(props.children,function(child,index){\nif(child.props.value===props.selectedValue){\nselectedIndex=index;}\n\nitems.push({value:child.props.value,label:child.props.label});});\n\nreturn {selectedIndex:selectedIndex,items:items};},\n\n\nrender:function(){\nreturn (\nReact.createElement(View,{style:this.props.style},\nReact.createElement(RCTPickerIOS,{\nref:PICKER,\nstyle:styles.pickerIOS,\nitems:this.state.items,\nselectedIndex:this.state.selectedIndex,\nonChange:this._onChange})));},\n\n\n\n\n\n_onChange:function(event){\nif(this.props.onChange){\nthis.props.onChange(event);}\n\nif(this.props.onValueChange){\nthis.props.onValueChange(event.nativeEvent.newValue);}\n\n\n\n\n\n\n\n\nif(this.state.selectedIndex!==event.nativeEvent.newIndex){\nthis.refs[PICKER].setNativeProps({\nselectedIndex:this.state.selectedIndex});}}});\n\n\n\n\n\nPickerIOS.Item=React.createClass({displayName:'Item',\npropTypes:{\nvalue:React.PropTypes.any,\nlabel:React.PropTypes.string},\n\n\nrender:function(){\n\nreturn null;}});\n\n\n\nvar styles=StyleSheet.create({\npickerIOS:{\n\n\n\nheight:RCTPickerIOSConsts.ComponentHeight}});\n\n\n\nvar RCTPickerIOS=requireNativeComponent('RCTPicker',PickerIOS,{\nnativeOnly:{\nitems:true,\nonChange:true,\nselectedIndex:true}});\n\n\n\nmodule.exports=PickerIOS;\n});\n__d('ProgressBarAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=require('UnimplementedView');\n});\n__d('ProgressViewIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Image=require('Image');\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar NativeModules=require('NativeModules');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\n\n\n\nvar ProgressViewIOS=React.createClass({displayName:'ProgressViewIOS',\nmixins:[NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\nprogressViewStyle:PropTypes.oneOf(['default','bar']),\n\n\n\n\nprogress:PropTypes.number,\n\n\n\n\nprogressTintColor:PropTypes.string,\n\n\n\n\ntrackTintColor:PropTypes.string,\n\n\n\n\nprogressImage:Image.propTypes.source,\n\n\n\n\ntrackImage:Image.propTypes.source}),\n\n\nrender:function(){\nreturn (\nReact.createElement(RCTProgressView,babelHelpers.extends({},\nthis.props,{\nstyle:[styles.progressView,this.props.style]})));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nprogressView:{\nheight:NativeModules.ProgressViewManager.ComponentHeight}});\n\n\n\nvar RCTProgressView=requireNativeComponent(\n'RCTProgressView',\nProgressViewIOS);\n\n\nmodule.exports=ProgressViewIOS;\n});\n__d('SegmentedControlIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar NativeModules=require('NativeModules');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\n\n\n\n\n\nvar SEGMENTED_CONTROL_REFERENCE='segmentedcontrol';\n\n\n\n\n\n\nvar SegmentedControlIOS=React.createClass({displayName:'SegmentedControlIOS',\nmixins:[NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\nvalues:PropTypes.arrayOf(PropTypes.string),\n\n\n\n\nselectedIndex:PropTypes.number,\n\n\n\n\n\nonValueChange:PropTypes.func,\n\n\n\n\n\nonChange:PropTypes.func,\n\n\n\n\n\nenabled:PropTypes.bool,\n\n\n\n\ntintColor:PropTypes.string,\n\n\n\n\n\nmomentary:PropTypes.bool}),\n\n\ngetDefaultProps:function(){\nreturn {\nvalues:[],\nenabled:true};},\n\n\n\n_onChange:function(event){\nthis.props.onChange&&this.props.onChange(event);\nthis.props.onValueChange&&this.props.onValueChange(event.nativeEvent.value);},\n\n\nrender:function(){\nreturn (\nReact.createElement(RCTSegmentedControl,babelHelpers.extends({},\nthis.props,{\nref:SEGMENTED_CONTROL_REFERENCE,\nstyle:[styles.segmentedControl,this.props.style],\nonChange:this._onChange})));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nsegmentedControl:{\nheight:NativeModules.SegmentedControlManager.ComponentHeight}});\n\n\n\nvar RCTSegmentedControl=requireNativeComponent(\n'RCTSegmentedControl',\nSegmentedControlIOS);\n\n\nmodule.exports=SegmentedControlIOS;\n});\n__d('SliderIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Image=require('Image');\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\n\n\nvar SliderIOS=React.createClass({displayName:'SliderIOS',\nmixins:[NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\n\nstyle:View.propTypes.style,\n\n\n\n\n\n\n\n\n\nvalue:PropTypes.number,\n\n\n\n\n\n\nstep:PropTypes.number,\n\n\n\n\nminimumValue:PropTypes.number,\n\n\n\n\nmaximumValue:PropTypes.number,\n\n\n\n\n\nminimumTrackTintColor:PropTypes.string,\n\n\n\n\n\nmaximumTrackTintColor:PropTypes.string,\n\n\n\n\n\ndisabled:PropTypes.bool,\n\n\n\n\ntrackImage:Image.propTypes.source,\n\n\n\n\nonValueChange:PropTypes.func,\n\n\n\n\n\nonSlidingComplete:PropTypes.func}),\n\n\ngetDefaultProps:function(){\nreturn {\ndisabled:false};},\n\n\n\nrender:function(){var _this=this;\n\nvar onValueChange=this.props.onValueChange&&function(event){\n_this.props.onValueChange&&\n_this.props.onValueChange(event.nativeEvent.value);};\n\n\nvar onSlidingComplete=this.props.onSlidingComplete&&function(event){\n_this.props.onSlidingComplete&&\n_this.props.onSlidingComplete(event.nativeEvent.value);};var _props=\n\n\nthis.props;var style=_props.style;var props=babelHelpers.objectWithoutProperties(_props,['style']);\nstyle=[styles.slider,this.props.style];\n\nreturn (\nReact.createElement(RCTSlider,babelHelpers.extends({},\nprops,{\nstyle:style,\nonValueChange:onValueChange,\nonSlidingComplete:onSlidingComplete})));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nslider:{\nheight:40}});\n\n\n\nvar RCTSlider=requireNativeComponent('RCTSlider',SliderIOS);\n\nmodule.exports=SliderIOS;\n});\n__d('SnapshotViewIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Platform=require('Platform');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');var _require=\nrequire('NativeModules');var TestModule=_require.TestModule;var UIManager=_require.UIManager;\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar SnapshotViewIOS=React.createClass({displayName:'SnapshotViewIOS',\nonDefaultAction:function(event){\nTestModule.verifySnapshot(TestModule.markTestPassed);},\n\n\nrender:function(){\nvar testIdentifier=this.props.testIdentifier||'test';\nvar onSnapshotReady=this.props.onSnapshotReady||this.onDefaultAction;\nreturn (\nReact.createElement(RCTSnapshot,babelHelpers.extends({\nstyle:style.snapshot},\nthis.props,{\nonSnapshotReady:onSnapshotReady,\ntestIdentifier:testIdentifier})));},\n\n\n\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\nonSnapshotReady:React.PropTypes.func,\n\ntestIdentifier:React.PropTypes.string})});\n\n\n\nvar style=StyleSheet.create({\nsnapshot:{\nflex:1}});\n\n\n\n\n\n\nvar RCTSnapshot=UIManager.RCTSnapshot?\nrequireNativeComponent('RCTSnapshot',SnapshotViewIOS):\nView;\n\nmodule.exports=SnapshotViewIOS;\n});\n__d('Switch',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar Platform=require('Platform');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\n\n\n\n\n\n\n\n\nvar Switch=React.createClass({displayName:'Switch',\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\n\nvalue:React.PropTypes.bool,\n\n\n\n\ndisabled:React.PropTypes.bool,\n\n\n\nonValueChange:React.PropTypes.func,\n\n\n\ntestID:React.PropTypes.string,\n\n\n\n\n\ntintColor:React.PropTypes.string,\n\n\n\n\nonTintColor:React.PropTypes.string,\n\n\n\n\nthumbTintColor:React.PropTypes.string}),\n\n\ngetDefaultProps:function(){\nreturn {\nvalue:false,\ndisabled:false};},\n\n\n\nmixins:[NativeMethodsMixin],\n\n_rctSwitch:{},\n_onChange:function(event){\nthis.props.onChange&&this.props.onChange(event);\nthis.props.onValueChange&&this.props.onValueChange(event.nativeEvent.value);\n\n\n\nif(Platform.OS==='android'){\nthis._rctSwitch.setNativeProps({on:this.props.value});}else \n{\nthis._rctSwitch.setNativeProps({value:this.props.value});}},\n\n\n\nrender:function(){var _this=this;\nvar props=babelHelpers.extends({},this.props);\nprops.onStartShouldSetResponder=function(){return true;};\nprops.onResponderTerminationRequest=function(){return false;};\nif(Platform.OS==='android'){\nprops.enabled=!this.props.disabled;\nprops.on=this.props.value;\nprops.style=[styles.rctSwitchAndroid,this.props.style];}else \nif(Platform.OS==='ios'){\nprops.style=[styles.rctSwitchIOS,this.props.style];}\n\nreturn (\nReact.createElement(RCTSwitch,babelHelpers.extends({},\nprops,{\nref:function(ref){_this._rctSwitch=ref;},\nonChange:this._onChange})));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nrctSwitchIOS:{\nheight:31,\nwidth:51},\n\nrctSwitchAndroid:{\nheight:27,\nwidth:40}});\n\n\n\nif(Platform.OS==='android'){\nvar RCTSwitch=requireNativeComponent('AndroidSwitch',Switch,{\nnativeOnly:{onChange:true,on:true,enabled:true}});}else \n\n{\nvar RCTSwitch=requireNativeComponent('RCTSwitch',Switch,{\nnativeOnly:{onChange:true}});}\n\n\n\nmodule.exports=Switch;\n});\n__d('PullToRefreshViewAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=require('UnimplementedView');\n});\n__d('SwitchAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=require('UnimplementedView');\n});\n__d('SwitchIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar SWITCH='switch';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar SwitchIOS=React.createClass({displayName:'SwitchIOS',\nmixins:[NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\n\nvalue:PropTypes.bool,\n\n\n\n\n\ndisabled:PropTypes.bool,\n\n\n\n\nonValueChange:PropTypes.func,\n\n\n\n\nonTintColor:PropTypes.string,\n\n\n\n\nthumbTintColor:PropTypes.string,\n\n\n\n\ntintColor:PropTypes.string}),\n\n\ngetDefaultProps:function(){\nreturn {\nvalue:false,\ndisabled:false};},\n\n\n\n_onChange:function(event){\n\n\nthis.refs[SWITCH].setNativeProps({value:this.props.value});\n\nif(this.props.value===event.nativeEvent.value||this.props.disabled){\nreturn;}\n\n\nthis.props.onChange&&this.props.onChange(event);\nthis.props.onValueChange&&this.props.onValueChange(event.nativeEvent.value);},\n\n\nrender:function(){\nreturn (\nReact.createElement(RCTSwitch,babelHelpers.extends({},\nthis.props,{\nref:SWITCH,\nonChange:this._onChange,\nstyle:[styles.rkSwitch,this.props.style]})));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\nrkSwitch:{\nheight:31,\nwidth:51}});\n\n\n\nvar RCTSwitch=requireNativeComponent('RCTSwitch',SwitchIOS,{\nnativeOnly:{onChange:true}});\n\n\nmodule.exports=SwitchIOS;\n});\n__d('TabBarIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar TabBarItemIOS=require('TabBarItemIOS');\nvar View=require('View');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar TabBarIOS=React.createClass({displayName:'TabBarIOS',\nstatics:{\nItem:TabBarItemIOS},\n\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\nstyle:View.propTypes.style,\n\n\n\ntintColor:React.PropTypes.string,\n\n\n\nbarTintColor:React.PropTypes.string,\n\n\n\ntranslucent:React.PropTypes.bool}),\n\n\nrender:function(){\nreturn (\nReact.createElement(RCTTabBar,{\nstyle:[styles.tabGroup,this.props.style],\ntintColor:this.props.tintColor,\nbarTintColor:this.props.barTintColor,\ntranslucent:this.props.translucent!==false},\nthis.props.children));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\ntabGroup:{\nflex:1}});\n\n\n\nvar RCTTabBar=requireNativeComponent('RCTTabBar',TabBarIOS);\n\nmodule.exports=TabBarIOS;\n});\n__d('TabBarItemIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar Image=require('Image');\nvar React=require('React');\nvar StaticContainer=require('StaticContainer.react');\nvar StyleSheet=require('StyleSheet');\nvar View=require('View');\nvar resolveAssetSource=require('resolveAssetSource');\n\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar TabBarItemIOS=React.createClass({displayName:'TabBarItemIOS',\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\nbadge:React.PropTypes.oneOfType([\nReact.PropTypes.string,\nReact.PropTypes.number]),\n\n\n\n\n\n\nsystemIcon:React.PropTypes.oneOf([\n'bookmarks',\n'contacts',\n'downloads',\n'favorites',\n'featured',\n'history',\n'more',\n'most-recent',\n'most-viewed',\n'recents',\n'search',\n'top-rated']),\n\n\n\n\nicon:Image.propTypes.source,\n\n\n\n\nselectedIcon:Image.propTypes.source,\n\n\n\n\nonPress:React.PropTypes.func,\n\n\n\n\nselected:React.PropTypes.bool,\n\n\n\nstyle:View.propTypes.style,\n\n\n\n\ntitle:React.PropTypes.string}),\n\n\ngetInitialState:function(){\nreturn {\nhasBeenSelected:false};},\n\n\n\ncomponentWillMount:function(){\nif(this.props.selected){\nthis.setState({hasBeenSelected:true});}},\n\n\n\ncomponentWillReceiveProps:function(nextProps){\nif(this.state.hasBeenSelected||nextProps.selected){\nthis.setState({hasBeenSelected:true});}},\n\n\n\nrender:function(){\nvar tabContents=null;\n\n\nif(this.state.hasBeenSelected){\ntabContents=\nReact.createElement(StaticContainer,{shouldUpdate:this.props.selected},\nthis.props.children);}else \n\n{\ntabContents=React.createElement(View,null);}\n\n\nvar badge=typeof this.props.badge==='number'?\n''+this.props.badge:\nthis.props.badge;\n\nreturn (\nReact.createElement(RCTTabBarItem,babelHelpers.extends({},\nthis.props,{\nicon:this.props.systemIcon||resolveAssetSource(this.props.icon),\nselectedIcon:resolveAssetSource(this.props.selectedIcon),\nbadge:badge,\nstyle:[styles.tab,this.props.style]}),\ntabContents));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\ntab:{\nposition:'absolute',\ntop:0,\nright:0,\nbottom:0,\nleft:0}});\n\n\n\nvar RCTTabBarItem=requireNativeComponent('RCTTabBarItem',TabBarItemIOS);\n\nmodule.exports=TabBarItemIOS;\n});\n__d('Text',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar Platform=require('Platform');\nvar React=require('React');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\nvar StyleSheetPropType=require('StyleSheetPropType');\nvar TextStylePropTypes=require('TextStylePropTypes');\nvar Touchable=require('Touchable');\n\nvar createReactNativeComponentClass=\nrequire('createReactNativeComponentClass');\nvar merge=require('merge');\n\nvar stylePropType=StyleSheetPropType(TextStylePropTypes);\n\nvar viewConfig={\nvalidAttributes:merge(ReactNativeViewAttributes.UIView,{\nisHighlighted:true,\nnumberOfLines:true,\nallowFontScaling:true}),\n\nuiViewClassName:'RCTText'};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Text=React.createClass({displayName:'Text',\n\nmixins:[Touchable.Mixin,NativeMethodsMixin],\n\npropTypes:{\n\n\n\n\n\nnumberOfLines:React.PropTypes.number,\n\n\n\n\n\nonLayout:React.PropTypes.func,\n\n\n\nonPress:React.PropTypes.func,\n\n\n\n\n\nsuppressHighlighting:React.PropTypes.bool,\nstyle:stylePropType,\n\n\n\ntestID:React.PropTypes.string,\n\n\n\nallowFontScaling:React.PropTypes.bool},\n\n\nviewConfig:viewConfig,\n\ngetInitialState:function(){\nreturn merge(this.touchableGetInitialState(),{\nisHighlighted:false});},\n\n\ngetDefaultProps:function(){\nreturn {\nallowFontScaling:true};},\n\n\n\nonStartShouldSetResponder:function(){\nvar shouldSetFromProps=this.props.onStartShouldSetResponder&&\nthis.props.onStartShouldSetResponder();\nreturn shouldSetFromProps||!!this.props.onPress;},\n\n\n\n\n\nhandleResponderTerminationRequest:function(){\n\n\nvar allowTermination=this.touchableHandleResponderTerminationRequest();\nif(allowTermination&&this.props.onResponderTerminationRequest){\nallowTermination=this.props.onResponderTerminationRequest();}\n\nreturn allowTermination;},\n\n\nhandleResponderGrant:function(e,dispatchID){\nthis.touchableHandleResponderGrant(e,dispatchID);\nthis.props.onResponderGrant&&\nthis.props.onResponderGrant.apply(this,arguments);},\n\n\nhandleResponderMove:function(e){\nthis.touchableHandleResponderMove(e);\nthis.props.onResponderMove&&\nthis.props.onResponderMove.apply(this,arguments);},\n\n\nhandleResponderRelease:function(e){\nthis.touchableHandleResponderRelease(e);\nthis.props.onResponderRelease&&\nthis.props.onResponderRelease.apply(this,arguments);},\n\n\nhandleResponderTerminate:function(e){\nthis.touchableHandleResponderTerminate(e);\nthis.props.onResponderTerminate&&\nthis.props.onResponderTerminate.apply(this,arguments);},\n\n\ntouchableHandleActivePressIn:function(){\nif(this.props.suppressHighlighting||!this.props.onPress){\nreturn;}\n\nthis.setState({\nisHighlighted:true});},\n\n\n\ntouchableHandleActivePressOut:function(){\nif(this.props.suppressHighlighting||!this.props.onPress){\nreturn;}\n\nthis.setState({\nisHighlighted:false});},\n\n\n\ntouchableHandlePress:function(){\nthis.props.onPress&&this.props.onPress();},\n\n\ntouchableGetPressRectOffset:function(){\nreturn PRESS_RECT_OFFSET;},\n\n\ngetChildContext:function(){\nreturn {isInAParentText:true};},\n\n\nchildContextTypes:{\nisInAParentText:React.PropTypes.bool},\n\n\nrender:function(){\nvar props={};\nfor(var key in this.props){\nprops[key]=this.props[key];}\n\n\nif(props.accessible!==false){\nprops.accessible=true;}\n\nprops.isHighlighted=this.state.isHighlighted;\nprops.onStartShouldSetResponder=this.onStartShouldSetResponder;\nprops.onResponderTerminationRequest=\nthis.handleResponderTerminationRequest;\nprops.onResponderGrant=this.handleResponderGrant;\nprops.onResponderMove=this.handleResponderMove;\nprops.onResponderRelease=this.handleResponderRelease;\nprops.onResponderTerminate=this.handleResponderTerminate;\n\n\nvar context=ReactInstanceMap.get(this)._context;\nif(context.isInAParentText){\nreturn React.createElement(RCTVirtualText,props);}else \n{\nreturn React.createElement(RCTText,props);}}});\n\n\n\n\n\n\n\n\n\n\n\nvar PRESS_RECT_OFFSET={top:20,left:20,right:20,bottom:30};\n\nvar RCTText=createReactNativeComponentClass(viewConfig);\nvar RCTVirtualText=RCTText;\n\nif(Platform.OS==='android'){\nRCTVirtualText=createReactNativeComponentClass({\nvalidAttributes:merge(ReactNativeViewAttributes.UIView,{\nisHighlighted:true}),\n\nuiViewClassName:'RCTVirtualText'});}\n\n\n\nmodule.exports=Text;\n});\n__d('Touchable',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\nvar BoundingDimensions=require('BoundingDimensions');\nvar Position=require('Position');\nvar TouchEventUtils=require('TouchEventUtils');\n\nvar keyMirror=require('keyMirror');\nvar queryLayoutByID=require('queryLayoutByID');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar States=keyMirror({\nNOT_RESPONDER:null,\nRESPONDER_INACTIVE_PRESS_IN:null,\nRESPONDER_INACTIVE_PRESS_OUT:null,\nRESPONDER_ACTIVE_PRESS_IN:null,\nRESPONDER_ACTIVE_PRESS_OUT:null,\nRESPONDER_ACTIVE_LONG_PRESS_IN:null,\nRESPONDER_ACTIVE_LONG_PRESS_OUT:null,\nERROR:null});\n\n\n\n\n\nvar IsActive={\nRESPONDER_ACTIVE_PRESS_OUT:true,\nRESPONDER_ACTIVE_PRESS_IN:true};\n\n\n\n\n\n\nvar IsPressingIn={\nRESPONDER_INACTIVE_PRESS_IN:true,\nRESPONDER_ACTIVE_PRESS_IN:true,\nRESPONDER_ACTIVE_LONG_PRESS_IN:true};\n\n\nvar IsLongPressingIn={\nRESPONDER_ACTIVE_LONG_PRESS_IN:true};\n\n\n\n\n\nvar Signals=keyMirror({\nDELAY:null,\nRESPONDER_GRANT:null,\nRESPONDER_RELEASE:null,\nRESPONDER_TERMINATED:null,\nENTER_PRESS_RECT:null,\nLEAVE_PRESS_RECT:null,\nLONG_PRESS_DETECTED:null});\n\n\n\n\n\nvar Transitions={\nNOT_RESPONDER:{\nDELAY:States.ERROR,\nRESPONDER_GRANT:States.RESPONDER_INACTIVE_PRESS_IN,\nRESPONDER_RELEASE:States.ERROR,\nRESPONDER_TERMINATED:States.ERROR,\nENTER_PRESS_RECT:States.ERROR,\nLEAVE_PRESS_RECT:States.ERROR,\nLONG_PRESS_DETECTED:States.ERROR},\n\nRESPONDER_INACTIVE_PRESS_IN:{\nDELAY:States.RESPONDER_ACTIVE_PRESS_IN,\nRESPONDER_GRANT:States.ERROR,\nRESPONDER_RELEASE:States.NOT_RESPONDER,\nRESPONDER_TERMINATED:States.NOT_RESPONDER,\nENTER_PRESS_RECT:States.RESPONDER_INACTIVE_PRESS_IN,\nLEAVE_PRESS_RECT:States.RESPONDER_INACTIVE_PRESS_OUT,\nLONG_PRESS_DETECTED:States.ERROR},\n\nRESPONDER_INACTIVE_PRESS_OUT:{\nDELAY:States.RESPONDER_ACTIVE_PRESS_OUT,\nRESPONDER_GRANT:States.ERROR,\nRESPONDER_RELEASE:States.NOT_RESPONDER,\nRESPONDER_TERMINATED:States.NOT_RESPONDER,\nENTER_PRESS_RECT:States.RESPONDER_INACTIVE_PRESS_IN,\nLEAVE_PRESS_RECT:States.RESPONDER_INACTIVE_PRESS_OUT,\nLONG_PRESS_DETECTED:States.ERROR},\n\nRESPONDER_ACTIVE_PRESS_IN:{\nDELAY:States.ERROR,\nRESPONDER_GRANT:States.ERROR,\nRESPONDER_RELEASE:States.NOT_RESPONDER,\nRESPONDER_TERMINATED:States.NOT_RESPONDER,\nENTER_PRESS_RECT:States.RESPONDER_ACTIVE_PRESS_IN,\nLEAVE_PRESS_RECT:States.RESPONDER_ACTIVE_PRESS_OUT,\nLONG_PRESS_DETECTED:States.RESPONDER_ACTIVE_LONG_PRESS_IN},\n\nRESPONDER_ACTIVE_PRESS_OUT:{\nDELAY:States.ERROR,\nRESPONDER_GRANT:States.ERROR,\nRESPONDER_RELEASE:States.NOT_RESPONDER,\nRESPONDER_TERMINATED:States.NOT_RESPONDER,\nENTER_PRESS_RECT:States.RESPONDER_ACTIVE_PRESS_IN,\nLEAVE_PRESS_RECT:States.RESPONDER_ACTIVE_PRESS_OUT,\nLONG_PRESS_DETECTED:States.ERROR},\n\nRESPONDER_ACTIVE_LONG_PRESS_IN:{\nDELAY:States.ERROR,\nRESPONDER_GRANT:States.ERROR,\nRESPONDER_RELEASE:States.NOT_RESPONDER,\nRESPONDER_TERMINATED:States.NOT_RESPONDER,\nENTER_PRESS_RECT:States.RESPONDER_ACTIVE_LONG_PRESS_IN,\nLEAVE_PRESS_RECT:States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\nLONG_PRESS_DETECTED:States.RESPONDER_ACTIVE_LONG_PRESS_IN},\n\nRESPONDER_ACTIVE_LONG_PRESS_OUT:{\nDELAY:States.ERROR,\nRESPONDER_GRANT:States.ERROR,\nRESPONDER_RELEASE:States.NOT_RESPONDER,\nRESPONDER_TERMINATED:States.NOT_RESPONDER,\nENTER_PRESS_RECT:States.RESPONDER_ACTIVE_LONG_PRESS_IN,\nLEAVE_PRESS_RECT:States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\nLONG_PRESS_DETECTED:States.ERROR},\n\nerror:{\nDELAY:States.NOT_RESPONDER,\nRESPONDER_GRANT:States.RESPONDER_INACTIVE_PRESS_IN,\nRESPONDER_RELEASE:States.NOT_RESPONDER,\nRESPONDER_TERMINATED:States.NOT_RESPONDER,\nENTER_PRESS_RECT:States.NOT_RESPONDER,\nLEAVE_PRESS_RECT:States.NOT_RESPONDER,\nLONG_PRESS_DETECTED:States.NOT_RESPONDER}};\n\n\n\n\n\n\nvar HIGHLIGHT_DELAY_MS=130;\n\nvar PRESS_EXPAND_PX=20;\n\nvar LONG_PRESS_THRESHOLD=500;\n\nvar LONG_PRESS_DELAY_MS=LONG_PRESS_THRESHOLD-HIGHLIGHT_DELAY_MS;\n\nvar LONG_PRESS_ALLOWED_MOVEMENT=10;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar TouchableMixin={\n\n\n\ncomponentWillUnmount:function(){\nthis.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout);\nthis.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout);\nthis.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout);},\n\n\n\n\n\n\n\n\n\ntouchableGetInitialState:function(){\nreturn {\ntouchable:{touchState:undefined,responderID:null}};},\n\n\n\n\n\n\n\ntouchableHandleResponderTerminationRequest:function(){\nreturn !this.props.rejectResponderTermination;},\n\n\n\n\n\ntouchableHandleStartShouldSetResponder:function(){\nreturn true;},\n\n\n\n\n\ntouchableLongPressCancelsPress:function(){\nreturn true;},\n\n\n\n\n\n\n\n\ntouchableHandleResponderGrant:function(e,dispatchID){\n\n\n\ne.persist();\n\nthis.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout);\nthis.pressOutDelayTimeout=null;\n\nthis.state.touchable.touchState=States.NOT_RESPONDER;\nthis.state.touchable.responderID=dispatchID;\nthis._receiveSignal(Signals.RESPONDER_GRANT,e);\nvar delayMS=\nthis.touchableGetHighlightDelayMS!==undefined?\nMath.max(this.touchableGetHighlightDelayMS(),0):HIGHLIGHT_DELAY_MS;\ndelayMS=isNaN(delayMS)?HIGHLIGHT_DELAY_MS:delayMS;\nif(delayMS!==0){\nthis.touchableDelayTimeout=setTimeout(\nthis._handleDelay.bind(this,e),\ndelayMS);}else \n\n{\nthis._handleDelay(e);}\n\n\nvar longDelayMS=\nthis.touchableGetLongPressDelayMS!==undefined?\nMath.max(this.touchableGetLongPressDelayMS(),10):LONG_PRESS_DELAY_MS;\nlongDelayMS=isNaN(longDelayMS)?LONG_PRESS_DELAY_MS:longDelayMS;\nthis.longPressDelayTimeout=setTimeout(\nthis._handleLongDelay.bind(this,e),\nlongDelayMS+delayMS);},\n\n\n\n\n\n\ntouchableHandleResponderRelease:function(e){\nthis._receiveSignal(Signals.RESPONDER_RELEASE,e);},\n\n\n\n\n\ntouchableHandleResponderTerminate:function(e){\nthis._receiveSignal(Signals.RESPONDER_TERMINATED,e);},\n\n\n\n\n\ntouchableHandleResponderMove:function(e){\n\n\nif(this.state.touchable.touchState===States.RESPONDER_INACTIVE_PRESS_IN){\nreturn;}\n\n\n\nif(!this.state.touchable.positionOnActivate){\nreturn;}\n\n\nvar positionOnActivate=this.state.touchable.positionOnActivate;\nvar dimensionsOnActivate=this.state.touchable.dimensionsOnActivate;\nvar pressRectOffset=this.touchableGetPressRectOffset?\nthis.touchableGetPressRectOffset():{\nleft:PRESS_EXPAND_PX,\nright:PRESS_EXPAND_PX,\ntop:PRESS_EXPAND_PX,\nbottom:PRESS_EXPAND_PX};\n\n\nvar pressExpandLeft=pressRectOffset.left;\nvar pressExpandTop=pressRectOffset.top;\nvar pressExpandRight=pressRectOffset.right;\nvar pressExpandBottom=pressRectOffset.bottom;\n\nvar touch=TouchEventUtils.extractSingleTouch(e.nativeEvent);\nvar pageX=touch&&touch.pageX;\nvar pageY=touch&&touch.pageY;\n\nif(this.pressInLocation){\nvar movedDistance=this._getDistanceBetweenPoints(pageX,pageY,this.pressInLocation.pageX,this.pressInLocation.pageY);\nif(movedDistance>LONG_PRESS_ALLOWED_MOVEMENT){\nthis._cancelLongPressDelayTimeout();}}\n\n\n\nvar isTouchWithinActive=\npageX>positionOnActivate.left-pressExpandLeft&&\npageY>positionOnActivate.top-pressExpandTop&&\npageX<\npositionOnActivate.left+\ndimensionsOnActivate.width+\npressExpandRight&&\npageY<\npositionOnActivate.top+\ndimensionsOnActivate.height+\npressExpandBottom;\nif(isTouchWithinActive){\nthis._receiveSignal(Signals.ENTER_PRESS_RECT,e);}else \n{\nthis._cancelLongPressDelayTimeout();\nthis._receiveSignal(Signals.LEAVE_PRESS_RECT,e);}},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_remeasureMetricsOnActivation:function(){\nqueryLayoutByID(\nthis.state.touchable.responderID,\nnull,\nthis._handleQueryLayout);},\n\n\n\n_handleQueryLayout:function(l,t,w,h,globalX,globalY){\nthis.state.touchable.positionOnActivate&&\nPosition.release(this.state.touchable.positionOnActivate);\nthis.state.touchable.dimensionsOnActivate&&\nBoundingDimensions.release(this.state.touchable.dimensionsOnActivate);\nthis.state.touchable.positionOnActivate=Position.getPooled(globalX,globalY);\nthis.state.touchable.dimensionsOnActivate=BoundingDimensions.getPooled(w,h);},\n\n\n_handleDelay:function(e){\nthis.touchableDelayTimeout=null;\nthis._receiveSignal(Signals.DELAY,e);},\n\n\n_handleLongDelay:function(e){\nthis.longPressDelayTimeout=null;\nthis._receiveSignal(Signals.LONG_PRESS_DETECTED,e);},\n\n\n\n\n\n\n\n\n\n\n_receiveSignal:function(signal,e){\nvar curState=this.state.touchable.touchState;\nif(!(Transitions[curState]&&Transitions[curState][signal])){\nthrow new Error(\n'Unrecognized signal `'+signal+'` or state `'+curState+\n'` for Touchable responder `'+this.state.touchable.responderID+'`');}\n\n\nvar nextState=Transitions[curState][signal];\nif(nextState===States.ERROR){\nthrow new Error(\n'Touchable cannot transition from `'+curState+'` to `'+signal+\n'` for responder `'+this.state.touchable.responderID+'`');}\n\n\nif(curState!==nextState){\nthis._performSideEffectsForTransition(curState,nextState,signal,e);\nthis.state.touchable.touchState=nextState;}},\n\n\n\n_cancelLongPressDelayTimeout:function(){\nthis.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout);\nthis.longPressDelayTimeout=null;},\n\n\n_isHighlight:function(state){\nreturn state===States.RESPONDER_ACTIVE_PRESS_IN||\nstate===States.RESPONDER_ACTIVE_LONG_PRESS_IN;},\n\n\n_savePressInLocation:function(e){\nvar touch=TouchEventUtils.extractSingleTouch(e.nativeEvent);\nvar pageX=touch&&touch.pageX;\nvar pageY=touch&&touch.pageY;\nthis.pressInLocation={pageX:pageX,pageY:pageY};},\n\n\n_getDistanceBetweenPoints:function(aX,aY,bX,bY){\nvar deltaX=aX-bX;\nvar deltaY=aY-bY;\nreturn Math.sqrt(deltaX*deltaX+deltaY*deltaY);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n_performSideEffectsForTransition:function(curState,nextState,signal,e){\nvar curIsHighlight=this._isHighlight(curState);\nvar newIsHighlight=this._isHighlight(nextState);\n\nvar isFinalSignal=\nsignal===Signals.RESPONDER_TERMINATED||\nsignal===Signals.RESPONDER_RELEASE;\n\nif(isFinalSignal){\nthis._cancelLongPressDelayTimeout();}\n\n\nif(!IsActive[curState]&&IsActive[nextState]){\nthis._remeasureMetricsOnActivation();}\n\n\nif(IsPressingIn[curState]&&signal===Signals.LONG_PRESS_DETECTED){\nthis.touchableHandleLongPress&&this.touchableHandleLongPress(e);}\n\n\nif(newIsHighlight&&!curIsHighlight){\nthis._savePressInLocation(e);\nthis.touchableHandleActivePressIn&&this.touchableHandleActivePressIn(e);}else \nif(!newIsHighlight&&curIsHighlight&&this.touchableHandleActivePressOut){\nif(this.touchableGetPressOutDelayMS&&this.touchableGetPressOutDelayMS()){\nthis.pressOutDelayTimeout=this.setTimeout(function(){\nthis.touchableHandleActivePressOut(e);},\nthis.touchableGetPressOutDelayMS());}else \n{\nthis.touchableHandleActivePressOut(e);}}\n\n\n\nif(IsPressingIn[curState]&&signal===Signals.RESPONDER_RELEASE){\nvar hasLongPressHandler=!!this.props.onLongPress;\nvar pressIsLongButStillCallOnPress=\nIsLongPressingIn[curState]&&(\n!hasLongPressHandler||\n!this.touchableLongPressCancelsPress());\n\n\nvar shouldInvokePress=!IsLongPressingIn[curState]||pressIsLongButStillCallOnPress;\nif(shouldInvokePress&&this.touchableHandlePress){\nthis.touchableHandlePress(e);}}\n\n\n\nthis.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout);\nthis.touchableDelayTimeout=null;}};\n\n\n\n\nvar Touchable={\nMixin:TouchableMixin};\n\n\nmodule.exports=Touchable;\n});\n__d('BoundingDimensions',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\nvar PooledClass=require('PooledClass');\n\nvar twoArgumentPooler=PooledClass.twoArgumentPooler;\n\n\n\n\n\n\n\n\nfunction BoundingDimensions(width,height){\nthis.width=width;\nthis.height=height;}\n\n\nBoundingDimensions.prototype.destructor=function(){\nthis.width=null;\nthis.height=null;};\n\n\n\n\n\n\nBoundingDimensions.getPooledFromElement=function(element){\nreturn BoundingDimensions.getPooled(\nelement.offsetWidth,\nelement.offsetHeight);};\n\n\n\nPooledClass.addPoolingTo(BoundingDimensions,twoArgumentPooler);\n\nmodule.exports=BoundingDimensions;\n});\n__d('Position',function(global, require, module, exports) {  \"use strict\";\n\n\n\n\n\nvar PooledClass=require('PooledClass');\n\nvar twoArgumentPooler=PooledClass.twoArgumentPooler;\n\n\n\n\n\n\n\n\n\nfunction Position(left,top){\nthis.left=left;\nthis.top=top;}\n\n\nPosition.prototype.destructor=function(){\nthis.left=null;\nthis.top=null;};\n\n\nPooledClass.addPoolingTo(Position,twoArgumentPooler);\n\nmodule.exports=Position;\n});\n__d('TouchEventUtils',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\nTouchEventUtils={\n\n\n\n\n\n\n\n\n\n\nextractSingleTouch:function(nativeEvent){\nvar touches=nativeEvent.touches;\nvar changedTouches=nativeEvent.changedTouches;\nvar hasTouches=touches&&touches.length>0;\nvar hasChangedTouches=changedTouches&&changedTouches.length>0;\n\nreturn !hasTouches&&hasChangedTouches?changedTouches[0]:\nhasTouches?touches[0]:\nnativeEvent;}};\n\n\n\nmodule.exports=TouchEventUtils;\n});\n__d('queryLayoutByID',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactNativeTagHandles=require('ReactNativeTagHandles');\nvar RCTUIManager=require('NativeModules').UIManager;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar queryLayoutByID=function(\nrootNodeID,\nonError,\nonSuccess)\n{\n\nRCTUIManager.measure(\nReactNativeTagHandles.rootNodeIDToTag[rootNodeID],\nonSuccess);};\n\n\n\nmodule.exports=queryLayoutByID;\n});\n__d('TextInput',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar DocumentSelectionState=require('DocumentSelectionState');\nvar EventEmitter=require('EventEmitter');\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar Platform=require('Platform');\nvar PropTypes=require('ReactPropTypes');\nvar RCTUIManager=require('NativeModules').UIManager;\nvar React=require('React');\nvar ReactChildren=require('ReactChildren');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar TextInputState=require('TextInputState');\nvar TimerMixin=require('react-timer-mixin/TimerMixin.js');\nvar TouchableWithoutFeedback=require('TouchableWithoutFeedback');\nvar View=require('View');\n\nvar createReactNativeComponentClass=require('createReactNativeComponentClass');\nvar emptyFunction=require('emptyFunction');\nvar invariant=require('invariant');\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar onlyMultiline={\nonTextInput:true,\nchildren:true};\n\n\nvar notMultiline={\nonSubmitEditing:true};\n\n\nif(Platform.OS==='android'){\nvar AndroidTextInput=requireNativeComponent('AndroidTextInput',null);}else \nif(Platform.OS==='ios'){\nvar RCTTextView=requireNativeComponent('RCTTextView',null);\nvar RCTTextField=requireNativeComponent('RCTTextField',null);}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar TextInput=React.createClass({displayName:'TextInput',\nstatics:{\n\nState:TextInputState},\n\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\n\n\n\n\n\n\n\n\nautoCapitalize:PropTypes.oneOf([\n'none',\n'sentences',\n'words',\n'characters']),\n\n\n\n\nautoCorrect:PropTypes.bool,\n\n\n\n\nautoFocus:PropTypes.bool,\n\n\n\n\ntextAlign:PropTypes.oneOf([\n'start',\n'center',\n'end']),\n\n\n\n\n\ntextAlignVertical:PropTypes.oneOf([\n'top',\n'center',\n'bottom']),\n\n\n\n\neditable:PropTypes.bool,\n\n\n\n\n\n\n\n\nkeyboardType:PropTypes.oneOf([\n\n'default',\n'numeric',\n'email-address',\n\n'ascii-capable',\n'numbers-and-punctuation',\n'url',\n'number-pad',\n'phone-pad',\n'name-phone-pad',\n'decimal-pad',\n'twitter',\n'web-search']),\n\n\n\n\n\nkeyboardAppearance:PropTypes.oneOf([\n'default',\n'light',\n'dark']),\n\n\n\n\n\nreturnKeyType:PropTypes.oneOf([\n'default',\n'go',\n'google',\n'join',\n'next',\n'route',\n'search',\n'send',\n'yahoo',\n'done',\n'emergency-call']),\n\n\n\n\n\nmaxLength:PropTypes.number,\n\n\n\n\n\nnumberOfLines:PropTypes.number,\n\n\n\n\n\nenablesReturnKeyAutomatically:PropTypes.bool,\n\n\n\n\nmultiline:PropTypes.bool,\n\n\n\nonBlur:PropTypes.func,\n\n\n\nonFocus:PropTypes.func,\n\n\n\nonChange:PropTypes.func,\n\n\n\n\nonChangeText:PropTypes.func,\n\n\n\nonEndEditing:PropTypes.func,\n\n\n\n\nonSubmitEditing:PropTypes.func,\n\n\n\n\n\n\nonKeyPress:PropTypes.func,\n\n\n\nonLayout:PropTypes.func,\n\n\n\nplaceholder:PropTypes.string,\n\n\n\nplaceholderTextColor:PropTypes.string,\n\n\n\n\nsecureTextEntry:PropTypes.bool,\n\n\n\n\n\nselectionState:PropTypes.instanceOf(DocumentSelectionState),\n\n\n\n\n\n\n\n\n\nvalue:PropTypes.string,\n\n\n\n\n\ndefaultValue:PropTypes.string,\n\n\n\n\nclearButtonMode:PropTypes.oneOf([\n'never',\n'while-editing',\n'unless-editing',\n'always']),\n\n\n\n\n\nclearTextOnFocus:PropTypes.bool,\n\n\n\n\nselectTextOnFocus:PropTypes.bool,\n\n\n\n\n\nblurOnSubmit:PropTypes.bool,\n\n\n\nstyle:Text.propTypes.style,\n\n\n\ntestID:PropTypes.string,\n\n\n\n\nunderlineColorAndroid:PropTypes.string}),\n\n\ngetDefaultProps:function(){\nreturn {\nblurOnSubmit:true};},\n\n\n\n\n\n\n\nmixins:[NativeMethodsMixin,TimerMixin],\n\nviewConfig:Platform.OS==='ios'?RCTTextField.viewConfig:\nPlatform.OS==='android'?AndroidTextInput.viewConfig:{},\n\nisFocused:function(){\nreturn TextInputState.currentlyFocusedField()===\nReact.findNodeHandle(this.refs.input);},\n\n\ngetInitialState:function(){\nreturn {\nmostRecentEventCount:0};},\n\n\n\ncontextTypes:{\nonFocusRequested:React.PropTypes.func,\nfocusEmitter:React.PropTypes.instanceOf(EventEmitter)},\n\n\n_focusSubscription:undefined,\n\ncomponentDidMount:function(){var _this=this;\nif(!this.context.focusEmitter){\nif(this.props.autoFocus){\nthis.requestAnimationFrame(this.focus);}\n\nreturn;}\n\nthis._focusSubscription=this.context.focusEmitter.addListener(\n'focus',\nfunction(el){\nif(_this===el){\n_this.requestAnimationFrame(_this.focus);}else \nif(_this.isFocused()){\n_this.blur();}});\n\n\n\nif(this.props.autoFocus){\nthis.context.onFocusRequested(this);}},\n\n\n\ncomponentWillUnmount:function(){\nthis._focusSubscription&&this._focusSubscription.remove();\nif(this.isFocused()){\nthis.blur();}},\n\n\n\ngetChildContext:function(){\nreturn {isInAParentText:true};},\n\n\nchildContextTypes:{\nisInAParentText:React.PropTypes.bool},\n\n\nclear:function(){\nthis.setNativeProps({text:''});},\n\n\nrender:function(){\nif(Platform.OS==='ios'){\nreturn this._renderIOS();}else \nif(Platform.OS==='android'){\nreturn this._renderAndroid();}},\n\n\n\n_getText:function(){\nreturn typeof this.props.value==='string'?\nthis.props.value:\nthis.props.defaultValue;},\n\n\n_renderIOS:function(){var _this2=this;\nvar textContainer;\n\nvar onSelectionChange;\nif(this.props.selectionState||this.props.onSelectionChange){\nonSelectionChange=function(event){\nif(_this2.props.selectionState){\nvar selection=event.nativeEvent.selection;\n_this2.props.selectionState.update(selection.start,selection.end);}\n\n_this2.props.onSelectionChange&&_this2.props.onSelectionChange(event);};}\n\n\n\nvar props=babelHelpers.extends({},this.props);\nprops.style=[styles.input,this.props.style];\nif(!props.multiline){\nfor(var propKey in onlyMultiline){\nif(props[propKey]){\nthrow new Error(\n'TextInput prop `'+propKey+'` is only supported with multiline.');}}\n\n\n\ntextContainer=\nReact.createElement(RCTTextField,babelHelpers.extends({\nref:'input'},\nprops,{\nonFocus:this._onFocus,\nonBlur:this._onBlur,\nonChange:this._onChange,\nonSelectionChange:onSelectionChange,\nonSelectionChangeShouldSetResponder:emptyFunction.thatReturnsTrue,\ntext:this._getText(),\nmostRecentEventCount:this.state.mostRecentEventCount}));}else \n\n{\nfor(var propKey in notMultiline){\nif(props[propKey]){\nthrow new Error(\n'TextInput prop `'+propKey+'` cannot be used with multiline.');}}\n\n\n\n\nvar children=props.children;\nvar childCount=0;\nReactChildren.forEach(children,function(){return ++childCount;});\ninvariant(\n!(props.value&&childCount),\n'Cannot specify both value and children.');\n\nif(childCount>1){\nchildren=React.createElement(Text,null,children);}\n\nif(props.inputView){\nchildren=[children,props.inputView];}\n\ntextContainer=\nReact.createElement(RCTTextView,babelHelpers.extends({\nref:'input'},\nprops,{\nchildren:children,\nmostRecentEventCount:this.state.mostRecentEventCount,\nonFocus:this._onFocus,\nonBlur:this._onBlur,\nonChange:this._onChange,\nonSelectionChange:onSelectionChange,\nonTextInput:this._onTextInput,\nonSelectionChangeShouldSetResponder:emptyFunction.thatReturnsTrue,\ntext:this._getText()}));}\n\n\n\nreturn (\nReact.createElement(TouchableWithoutFeedback,{\nonPress:this._onPress,\nrejectResponderTermination:true,\ntestID:props.testID},\ntextContainer));},\n\n\n\n\n_renderAndroid:function(){\nvar autoCapitalize=RCTUIManager.UIText.AutocapitalizationType[this.props.autoCapitalize];\nvar textAlign=\nRCTUIManager.AndroidTextInput.Constants.TextAlign[this.props.textAlign];\nvar textAlignVertical=\nRCTUIManager.AndroidTextInput.Constants.TextAlignVertical[this.props.textAlignVertical];\nvar children=this.props.children;\nvar childCount=0;\nReactChildren.forEach(children,function(){return ++childCount;});\ninvariant(\n!(this.props.value&&childCount),\n'Cannot specify both value and children.');\n\nif(childCount>1){\nchildren=React.createElement(Text,null,children);}\n\nvar textContainer=\nReact.createElement(AndroidTextInput,{\nref:'input',\nstyle:[this.props.style],\nautoCapitalize:autoCapitalize,\nautoCorrect:this.props.autoCorrect,\ntextAlign:textAlign,\ntextAlignVertical:textAlignVertical,\nkeyboardType:this.props.keyboardType,\nmostRecentEventCount:this.state.mostRecentEventCount,\nmultiline:this.props.multiline,\nnumberOfLines:this.props.numberOfLines,\nmaxLength:this.props.maxLength,\nonFocus:this._onFocus,\nonBlur:this._onBlur,\nonChange:this._onChange,\nonTextInput:this._onTextInput,\nonEndEditing:this.props.onEndEditing,\nonSubmitEditing:this.props.onSubmitEditing,\nonLayout:this.props.onLayout,\npassword:this.props.password||this.props.secureTextEntry,\nplaceholder:this.props.placeholder,\nplaceholderTextColor:this.props.placeholderTextColor,\ntext:this._getText(),\nunderlineColorAndroid:this.props.underlineColorAndroid,\nchildren:children,\neditable:this.props.editable});\n\n\nreturn (\nReact.createElement(TouchableWithoutFeedback,{\nonPress:this._onPress,\ntestID:this.props.testID},\ntextContainer));},\n\n\n\n\n_onFocus:function(event){\nif(this.props.onFocus){\nthis.props.onFocus(event);}},\n\n\n\n_onPress:function(event){\nif(this.props.editable||this.props.editable===undefined){\nthis.focus();}},\n\n\n\n_onChange:function(event){var _this3=this;\nif(Platform.OS==='android'){\n\nthis.refs.input.setNativeProps({\nmostRecentEventCount:event.nativeEvent.eventCount});}\n\n\nvar text=event.nativeEvent.text;\nvar eventCount=event.nativeEvent.eventCount;\nthis.props.onChange&&this.props.onChange(event);\nthis.props.onChangeText&&this.props.onChangeText(text);\nthis.setState({mostRecentEventCount:eventCount},function(){\n\nif(Platform.OS==='android'){\n\n\n\nif(text!==_this3.props.value&&typeof _this3.props.value==='string'){\n_this3.refs.input.setNativeProps({\ntext:_this3.props.value});}}});},\n\n\n\n\n\n\n_onBlur:function(event){\nthis.blur();\nif(this.props.onBlur){\nthis.props.onBlur(event);}},\n\n\n\n_onTextInput:function(event){\nthis.props.onTextInput&&this.props.onTextInput(event);}});\n\n\n\nvar styles=StyleSheet.create({\ninput:{\nalignSelf:'stretch'}});\n\n\n\nmodule.exports=TextInput;\n});\n__d('DocumentSelectionState',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmixInEventEmitter=require('mixInEventEmitter');var \n\n\n\n\n\n\n\n\n\n\nDocumentSelectionState=(function(){\n\n\n\n\nfunction DocumentSelectionState(anchor,focus){babelHelpers.classCallCheck(this,DocumentSelectionState);\nthis._anchorOffset=anchor;\nthis._focusOffset=focus;\nthis._hasFocus=false;}babelHelpers.createClass(DocumentSelectionState,[{key:'update',value:function update(\n\n\n\n\n\n\n\n\n\nanchor,focus){\nif(this._anchorOffset!==anchor||this._focusOffset!==focus){\nthis._anchorOffset=anchor;\nthis._focusOffset=focus;\nthis.emit('update');}}},{key:'constrainLength',value:function constrainLength(\n\n\n\n\n\n\n\n\n\nmaxLength){\nthis.update(\nMath.min(this._anchorOffset,maxLength),\nMath.min(this._focusOffset,maxLength));}},{key:'focus',value:function focus()\n\n\n\n{\nif(!this._hasFocus){\nthis._hasFocus=true;\nthis.emit('focus');}}},{key:'blur',value:function blur()\n\n\n\n{\nif(this._hasFocus){\nthis._hasFocus=false;\nthis.emit('blur');}}},{key:'hasFocus',value:function hasFocus()\n\n\n\n\n\n\n{\nreturn this._hasFocus;}},{key:'isCollapsed',value:function isCollapsed()\n\n\n\n\n\n{\nreturn this._anchorOffset===this._focusOffset;}},{key:'isBackward',value:function isBackward()\n\n\n\n\n\n{\nreturn this._anchorOffset>this._focusOffset;}},{key:'getAnchorOffset',value:function getAnchorOffset()\n\n\n\n\n\n{\nreturn this._hasFocus?this._anchorOffset:null;}},{key:'getFocusOffset',value:function getFocusOffset()\n\n\n\n\n\n{\nreturn this._hasFocus?this._focusOffset:null;}},{key:'getStartOffset',value:function getStartOffset()\n\n\n\n\n\n{\nreturn (\nthis._hasFocus?Math.min(this._anchorOffset,this._focusOffset):null);}},{key:'getEndOffset',value:function getEndOffset()\n\n\n\n\n\n\n{\nreturn (\nthis._hasFocus?Math.max(this._anchorOffset,this._focusOffset):null);}},{key:'overlaps',value:function overlaps(\n\n\n\n\n\n\n\n\nstart,end){\nreturn (\nthis.hasFocus()&&\nthis.getStartOffset()<=end&&start<=this.getEndOffset());}}]);return DocumentSelectionState;})();\n\n\n\n\nmixInEventEmitter(DocumentSelectionState,{\n'blur':true,\n'focus':true,\n'update':true});\n\n\nmodule.exports=DocumentSelectionState;\n});\n__d('mixInEventEmitter',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEventEmitter=require('EventEmitter');\nvar EventEmitterWithHolding=require('EventEmitterWithHolding');\nvar EventHolder=require('EventHolder');\nvar EventValidator=require('EventValidator');\n\nvar copyProperties=require('copyProperties');\nvar invariant=require('invariant');\nvar keyOf=require('keyOf');\n\nvar TYPES_KEY=keyOf({__types:true});\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction mixInEventEmitter(klass,types){\ninvariant(types,'Must supply set of valid event types');\ninvariant(!this.__eventEmitter,'An active emitter is already mixed in');\n\n\n\nvar target=klass.prototype||klass;\n\nvar ctor=klass.constructor;\nif(ctor){\ninvariant(\nctor===Object||ctor===Function,\n'Mix EventEmitter into a class, not an instance');}\n\n\n\n\n\nif(target.hasOwnProperty(TYPES_KEY)){\ncopyProperties(target.__types,types);}else \nif(target.__types){\ntarget.__types=copyProperties({},target.__types,types);}else \n{\ntarget.__types=types;}\n\ncopyProperties(target,EventEmitterMixin);}\n\n\nvar EventEmitterMixin={\nemit:function(eventType,a,b,c,d,e,_){\nreturn this.__getEventEmitter().emit(eventType,a,b,c,d,e,_);},\n\n\nemitAndHold:function(eventType,a,b,c,d,e,_){\nreturn this.__getEventEmitter().emitAndHold(eventType,a,b,c,d,e,_);},\n\n\naddListener:function(eventType,listener,context){\nreturn this.__getEventEmitter().addListener(eventType,listener,context);},\n\n\nonce:function(eventType,listener,context){\nreturn this.__getEventEmitter().once(eventType,listener,context);},\n\n\naddRetroactiveListener:function(eventType,listener,context){\nreturn this.__getEventEmitter().addRetroactiveListener(\neventType,\nlistener,\ncontext);},\n\n\n\naddListenerMap:function(listenerMap,context){\nreturn this.__getEventEmitter().addListenerMap(listenerMap,context);},\n\n\naddRetroactiveListenerMap:function(listenerMap,context){\nreturn this.__getEventEmitter().addListenerMap(listenerMap,context);},\n\n\nremoveAllListeners:function(){\nthis.__getEventEmitter().removeAllListeners();},\n\n\nremoveCurrentListener:function(){\nthis.__getEventEmitter().removeCurrentListener();},\n\n\nreleaseHeldEventType:function(eventType){\nthis.__getEventEmitter().releaseHeldEventType(eventType);},\n\n\n__getEventEmitter:function(){\nif(!this.__eventEmitter){\nvar emitter=new EventEmitter();\nemitter=EventValidator.addValidation(emitter,this.__types);\n\nvar holder=new EventHolder();\nthis.__eventEmitter=new EventEmitterWithHolding(emitter,holder);}\n\nreturn this.__eventEmitter;}};\n\n\n\nmodule.exports=mixInEventEmitter;\n});\n__d('EventEmitterWithHolding',function(global, require, module, exports) {  'use strict';var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEventEmitterWithHolding=(function(){\n\n\n\n\n\n\n\nfunction EventEmitterWithHolding(emitter,holder){babelHelpers.classCallCheck(this,EventEmitterWithHolding);\nthis._emitter=emitter;\nthis._eventHolder=holder;\nthis._currentEventToken=null;\nthis._emittingHeldEvents=false;}babelHelpers.createClass(EventEmitterWithHolding,[{key:'addListener',value:function addListener(\n\n\n\n\n\neventType,listener,context){\nreturn this._emitter.addListener(eventType,listener,context);}},{key:'once',value:function once(\n\n\n\n\n\neventType,listener,context){\nreturn this._emitter.once(eventType,listener,context);}},{key:'addRetroactiveListener',value:function addRetroactiveListener(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\neventType,listener,context){\nvar subscription=this._emitter.addListener(eventType,listener,context);\n\nthis._emittingHeldEvents=true;\nthis._eventHolder.emitToListener(eventType,listener,context);\nthis._emittingHeldEvents=false;\n\nreturn subscription;}},{key:'removeAllListeners',value:function removeAllListeners(\n\n\n\n\n\neventType){\nthis._emitter.removeAllListeners(eventType);}},{key:'removeCurrentListener',value:function removeCurrentListener()\n\n\n\n\n\n{\nthis._emitter.removeCurrentListener();}},{key:'listeners',value:function listeners(\n\n\n\n\n\neventType){\nreturn this._emitter.listeners(eventType);}},{key:'emit',value:function emit(\n\n\n\n\n\neventType,a,b,c,d,e,_){\nthis._emitter.emit(eventType,a,b,c,d,e,_);}},{key:'emitAndHold',value:function emitAndHold(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\neventType,a,b,c,d,e,_){\nthis._currentEventToken=this._eventHolder.holdEvent(\neventType,\na,b,c,d,e,_);\n\nthis._emitter.emit(eventType,a,b,c,d,e,_);\nthis._currentEventToken=null;}},{key:'releaseCurrentEvent',value:function releaseCurrentEvent()\n\n\n\n\n\n{\nif(this._currentEventToken!==null){\nthis._eventHolder.releaseEvent(this._currentEventToken);}else \nif(this._emittingHeldEvents){\nthis._eventHolder.releaseCurrentEvent();}}},{key:'releaseHeldEventType',value:function releaseHeldEventType(\n\n\n\n\n\n\n\neventType){\nthis._eventHolder.releaseEventType(eventType);}}]);return EventEmitterWithHolding;})();\n\n\n\nmodule.exports=EventEmitterWithHolding;\n});\n__d('EventHolder',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');var \n\nEventHolder=(function(){\nfunction EventHolder(){babelHelpers.classCallCheck(this,EventHolder);\nthis._heldEvents={};\nthis._currentEventKey=null;}babelHelpers.createClass(EventHolder,[{key:'holdEvent',value:function holdEvent(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\neventType,a,b,c,d,e,_){\nthis._heldEvents[eventType]=this._heldEvents[eventType]||[];\nvar eventsOfType=this._heldEvents[eventType];\nvar key={\neventType:eventType,\nindex:eventsOfType.length};\n\neventsOfType.push([a,b,c,d,e,_]);\nreturn key;}},{key:'emitToListener',value:function emitToListener(\n\n\n\n\n\n\n\n\n\n\neventType,listener,context){var _this=this;\nvar eventsOfType=this._heldEvents[eventType];\nif(!eventsOfType){\nreturn;}\n\nvar origEventKey=this._currentEventKey;\neventsOfType.forEach(function(eventHeld,index){\nif(!eventHeld){\nreturn;}\n\n_this._currentEventKey={\neventType:eventType,\nindex:index};\n\nlistener.apply(context,eventHeld);});\n\nthis._currentEventKey=origEventKey;}},{key:'releaseCurrentEvent',value:function releaseCurrentEvent()\n\n\n\n\n\n\n\n\n\n\n{\ninvariant(\nthis._currentEventKey!==null,\n'Not in an emitting cycle; there is no current event');\n\nthis.releaseEvent(this._currentEventKey);}},{key:'releaseEvent',value:function releaseEvent(\n\n\n\n\n\n\n\n\ntoken){\ndelete this._heldEvents[token.eventType][token.index];}},{key:'releaseEventType',value:function releaseEventType(\n\n\n\n\n\n\n\ntype){\nthis._heldEvents[type]=[];}}]);return EventHolder;})();\n\n\n\nmodule.exports=EventHolder;\n});\n__d('EventValidator',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar copyProperties=require('copyProperties');\n\n\n\n\n\n\n\n\n\n\nvar EventValidator={\n\n\n\n\n\n\n\n\n\n\naddValidation:function(emitter,types){\nvar eventTypes=Object.keys(types);\nvar emitterWithValidation=Object.create(emitter);\n\ncopyProperties(emitterWithValidation,{\nemit:function emit(type,a,b,c,d,e,_){\nassertAllowsEventType(type,eventTypes);\nreturn emitter.emit.call(this,type,a,b,c,d,e,_);}});\n\n\n\nreturn emitterWithValidation;}};\n\n\n\nfunction assertAllowsEventType(type,allowedTypes){\nif(allowedTypes.indexOf(type)===-1){\nthrow new TypeError(errorMessageFor(type,allowedTypes));}}\n\n\n\nfunction errorMessageFor(type,allowedTypes){\nvar message='Unknown event type \"'+type+'\". ';\nif(__DEV__){\nmessage+=recommendationFor(type,allowedTypes);}\n\nmessage+='Known event types: '+allowedTypes.join(', ')+'.';\nreturn message;}\n\n\n\nif(__DEV__){\nvar recommendationFor=function(type,allowedTypes){\nvar closestTypeRecommendation=closestTypeFor(type,allowedTypes);\nif(isCloseEnough(closestTypeRecommendation,type)){\nreturn 'Did you mean \"'+closestTypeRecommendation.type+'\"? ';}else \n{\nreturn '';}};\n\n\n\nvar closestTypeFor=function(type,allowedTypes){\nvar typeRecommendations=allowedTypes.map(\ntypeRecommendationFor.bind(this,type));\n\nreturn typeRecommendations.sort(recommendationSort)[0];};\n\n\nvar typeRecommendationFor=function(type,recomendedType){\nreturn {\ntype:recomendedType,\ndistance:damerauLevenshteinDistance(type,recomendedType)};};\n\n\n\nvar recommendationSort=function(recommendationA,recommendationB){\nif(recommendationA.distance<recommendationB.distance){\nreturn -1;}else \nif(recommendationA.distance>recommendationB.distance){\nreturn 1;}else \n{\nreturn 0;}};\n\n\n\nvar isCloseEnough=function(closestType,actualType){\nreturn closestType.distance/actualType.length<0.334;};\n\n\nvar damerauLevenshteinDistance=function(a,b){\nvar i,j;\nvar d=[];\n\nfor(i=0;i<=a.length;i++){\nd[i]=[i];}\n\n\nfor(j=1;j<=b.length;j++){\nd[0][j]=j;}\n\n\nfor(i=1;i<=a.length;i++){\nfor(j=1;j<=b.length;j++){\nvar cost=a.charAt(i-1)===b.charAt(j-1)?0:1;\n\nd[i][j]=Math.min(\nd[i-1][j]+1,\nd[i][j-1]+1,\nd[i-1][j-1]+cost);\n\n\nif(i>1&&j>1&&\na.charAt(i-1)==b.charAt(j-2)&&\na.charAt(i-2)==b.charAt(j-1)){\nd[i][j]=Math.min(d[i][j],d[i-2][j-2]+cost);}}}\n\n\n\n\nreturn d[a.length][b.length];};}\n\n\n\nmodule.exports=EventValidator;\n});\n__d('copyProperties',function(global, require, module, exports) {  function \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncopyProperties(obj,a,b,c,d,e,f){\nobj=obj||{};\n\nif(__DEV__){\nif(f){\nthrow new Error('Too many arguments passed to copyProperties');}}\n\n\n\nvar args=[a,b,c,d,e];\nvar ii=0,v;\nwhile(args[ii]){\nv=args[ii++];\nfor(var k in v){\nobj[k]=v[k];}\n\n\n\n\nif(v.hasOwnProperty&&v.hasOwnProperty('toString')&&\ntypeof v.toString!='undefined'&&obj.toString!==v.toString){\nobj.toString=v.toString;}}\n\n\n\nreturn obj;}\n\n\nmodule.exports=copyProperties;\n});\n__d('TouchableWithoutFeedback',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EdgeInsetsPropType=require('EdgeInsetsPropType');\nvar React=require('React');\nvar TimerMixin=require('react-timer-mixin/TimerMixin.js');\nvar Touchable=require('Touchable');\nvar View=require('View');\nvar ensurePositiveDelayProps=require('ensurePositiveDelayProps');\nvar invariant=require('invariant');\nvar onlyChild=require('onlyChild');\n\n\n\nvar PRESS_RETENTION_OFFSET={top:20,left:20,right:20,bottom:30};\n\n\n\n\n\n\nvar TouchableWithoutFeedback=React.createClass({displayName:'TouchableWithoutFeedback',\nmixins:[TimerMixin,Touchable.Mixin],\n\npropTypes:{\naccessible:React.PropTypes.bool,\naccessibilityComponentType:React.PropTypes.oneOf(View.AccessibilityComponentType),\naccessibilityTraits:React.PropTypes.oneOfType([\nReact.PropTypes.oneOf(View.AccessibilityTraits),\nReact.PropTypes.arrayOf(React.PropTypes.oneOf(View.AccessibilityTraits))]),\n\n\n\n\n\nonPress:React.PropTypes.func,\nonPressIn:React.PropTypes.func,\nonPressOut:React.PropTypes.func,\n\n\n\n\n\nonLayout:React.PropTypes.func,\n\nonLongPress:React.PropTypes.func,\n\n\n\n\ndelayPressIn:React.PropTypes.number,\n\n\n\ndelayPressOut:React.PropTypes.number,\n\n\n\ndelayLongPress:React.PropTypes.number,\n\n\n\n\n\n\n\npressRetentionOffset:EdgeInsetsPropType},\n\n\ngetInitialState:function(){\nreturn this.touchableGetInitialState();},\n\n\ncomponentDidMount:function(){\nensurePositiveDelayProps(this.props);},\n\n\ncomponentWillReceiveProps:function(nextProps){\nensurePositiveDelayProps(nextProps);},\n\n\n\n\n\n\ntouchableHandlePress:function(e){\nthis.props.onPress&&this.props.onPress(e);},\n\n\ntouchableHandleActivePressIn:function(e){\nthis.props.onPressIn&&this.props.onPressIn(e);},\n\n\ntouchableHandleActivePressOut:function(e){\nthis.props.onPressOut&&this.props.onPressOut(e);},\n\n\ntouchableHandleLongPress:function(e){\nthis.props.onLongPress&&this.props.onLongPress(e);},\n\n\ntouchableGetPressRectOffset:function(){\nreturn this.props.pressRetentionOffset||PRESS_RETENTION_OFFSET;},\n\n\ntouchableGetHighlightDelayMS:function(){\nreturn this.props.delayPressIn||0;},\n\n\ntouchableGetLongPressDelayMS:function(){\nreturn this.props.delayLongPress===0?0:\nthis.props.delayLongPress||500;},\n\n\ntouchableGetPressOutDelayMS:function(){\nreturn this.props.delayPressOut||0;},\n\n\nrender:function(){\n\nreturn React.cloneElement(onlyChild(this.props.children),{\naccessible:this.props.accessible!==false,\naccessibilityComponentType:this.props.accessibilityComponentType,\naccessibilityTraits:this.props.accessibilityTraits,\ntestID:this.props.testID,\nonLayout:this.props.onLayout,\nonStartShouldSetResponder:this.touchableHandleStartShouldSetResponder,\nonResponderTerminationRequest:this.touchableHandleResponderTerminationRequest,\nonResponderGrant:this.touchableHandleResponderGrant,\nonResponderMove:this.touchableHandleResponderMove,\nonResponderRelease:this.touchableHandleResponderRelease,\nonResponderTerminate:this.touchableHandleResponderTerminate});}});\n\n\n\n\nmodule.exports=TouchableWithoutFeedback;\n});\n__d('ensurePositiveDelayProps',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\nvar ensurePositiveDelayProps=function(props){\ninvariant(\n!(props.delayPressIn<0||props.delayPressOut<0||\nprops.delayLongPress<0),\n'Touchable components cannot have negative delay properties');};\n\n\n\nmodule.exports=ensurePositiveDelayProps;\n});\n__d('ToastAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nvar warning=require('warning');\n\nvar ToastAndroid={\n\nshow:function(\nmessage,\nduration)\n{\nwarning(false,'Cannot use ToastAndroid on iOS.');}};\n\n\n\n\nmodule.exports=ToastAndroid;\n});\n__d('ToolbarAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=require('UnimplementedView');\n});\n__d('TouchableHighlight',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar React=require('React');\nvar ReactNativeViewAttributes=require('ReactNativeViewAttributes');\nvar StyleSheet=require('StyleSheet');\nvar TimerMixin=require('react-timer-mixin/TimerMixin.js');\nvar Touchable=require('Touchable');\nvar TouchableWithoutFeedback=require('TouchableWithoutFeedback');\nvar View=require('View');\n\nvar ensureComponentIsNative=require('ensureComponentIsNative');\nvar ensurePositiveDelayProps=require('ensurePositiveDelayProps');\nvar keyOf=require('keyOf');\nvar merge=require('merge');\nvar onlyChild=require('onlyChild');\n\n\n\nvar DEFAULT_PROPS={\nactiveOpacity:0.8,\nunderlayColor:'black'};\n\n\nvar PRESS_RETENTION_OFFSET={top:20,left:20,right:20,bottom:30};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar TouchableHighlight=React.createClass({displayName:'TouchableHighlight',\npropTypes:babelHelpers.extends({},\nTouchableWithoutFeedback.propTypes,{\n\n\n\n\nactiveOpacity:React.PropTypes.number,\n\n\n\n\nunderlayColor:React.PropTypes.string,\nstyle:View.propTypes.style,\n\n\n\nonShowUnderlay:React.PropTypes.func,\n\n\n\nonHideUnderlay:React.PropTypes.func}),\n\n\nmixins:[NativeMethodsMixin,TimerMixin,Touchable.Mixin],\n\ngetDefaultProps:function(){return DEFAULT_PROPS;},\n\n\ncomputeSyntheticState:function(props){\nreturn {\nactiveProps:{\nstyle:{\nopacity:props.activeOpacity}},\n\n\nactiveUnderlayProps:{\nstyle:{\nbackgroundColor:props.underlayColor}},\n\n\nunderlayStyle:[\nINACTIVE_UNDERLAY_PROPS.style,\nprops.style]};},\n\n\n\n\ngetInitialState:function(){\nreturn merge(\nthis.touchableGetInitialState(),this.computeSyntheticState(this.props));},\n\n\n\ncomponentDidMount:function(){\nensurePositiveDelayProps(this.props);\nensureComponentIsNative(this.refs[CHILD_REF]);},\n\n\ncomponentDidUpdate:function(){\nensureComponentIsNative(this.refs[CHILD_REF]);},\n\n\ncomponentWillReceiveProps:function(nextProps){\nensurePositiveDelayProps(nextProps);\nif(nextProps.activeOpacity!==this.props.activeOpacity||\nnextProps.underlayColor!==this.props.underlayColor||\nnextProps.style!==this.props.style){\nthis.setState(this.computeSyntheticState(nextProps));}},\n\n\n\nviewConfig:{\nuiViewClassName:'RCTView',\nvalidAttributes:ReactNativeViewAttributes.RCTView},\n\n\n\n\n\n\ntouchableHandleActivePressIn:function(e){\nthis.clearTimeout(this._hideTimeout);\nthis._hideTimeout=null;\nthis._showUnderlay();\nthis.props.onPressIn&&this.props.onPressIn(e);},\n\n\ntouchableHandleActivePressOut:function(e){\nif(!this._hideTimeout){\nthis._hideUnderlay();}\n\nthis.props.onPressOut&&this.props.onPressOut(e);},\n\n\ntouchableHandlePress:function(e){\nthis.clearTimeout(this._hideTimeout);\nthis._showUnderlay();\nthis._hideTimeout=this.setTimeout(this._hideUnderlay,\nthis.props.delayPressOut||100);\nthis.props.onPress&&this.props.onPress(e);},\n\n\ntouchableHandleLongPress:function(e){\nthis.props.onLongPress&&this.props.onLongPress(e);},\n\n\ntouchableGetPressRectOffset:function(){\nreturn this.props.pressRetentionOffset||PRESS_RETENTION_OFFSET;},\n\n\ntouchableGetHighlightDelayMS:function(){\nreturn this.props.delayPressIn;},\n\n\ntouchableGetLongPressDelayMS:function(){\nreturn this.props.delayLongPress;},\n\n\ntouchableGetPressOutDelayMS:function(){\nreturn this.props.delayPressOut;},\n\n\n_showUnderlay:function(){\nif(!this.isMounted()){\nreturn;}\n\n\nthis.refs[UNDERLAY_REF].setNativeProps(this.state.activeUnderlayProps);\nthis.refs[CHILD_REF].setNativeProps(this.state.activeProps);\nthis.props.onShowUnderlay&&this.props.onShowUnderlay();},\n\n\n_hideUnderlay:function(){\nthis.clearTimeout(this._hideTimeout);\nthis._hideTimeout=null;\nif(this.refs[UNDERLAY_REF]){\nthis.refs[CHILD_REF].setNativeProps(INACTIVE_CHILD_PROPS);\nthis.refs[UNDERLAY_REF].setNativeProps(babelHelpers.extends({},\nINACTIVE_UNDERLAY_PROPS,{\nstyle:this.state.underlayStyle}));\n\nthis.props.onHideUnderlay&&this.props.onHideUnderlay();}},\n\n\n\nrender:function(){\nreturn (\nReact.createElement(View,{\naccessible:true,\naccessibilityComponentType:this.props.accessibilityComponentType,\naccessibilityTraits:this.props.accessibilityTraits,\nref:UNDERLAY_REF,\nstyle:this.state.underlayStyle,\nonLayout:this.props.onLayout,\nonStartShouldSetResponder:this.touchableHandleStartShouldSetResponder,\nonResponderTerminationRequest:this.touchableHandleResponderTerminationRequest,\nonResponderGrant:this.touchableHandleResponderGrant,\nonResponderMove:this.touchableHandleResponderMove,\nonResponderRelease:this.touchableHandleResponderRelease,\nonResponderTerminate:this.touchableHandleResponderTerminate,\ntestID:this.props.testID},\nReact.cloneElement(\nonlyChild(this.props.children),\n{\nref:CHILD_REF})));}});\n\n\n\n\n\n\n\nvar CHILD_REF=keyOf({childRef:null});\nvar UNDERLAY_REF=keyOf({underlayRef:null});\nvar INACTIVE_CHILD_PROPS={\nstyle:StyleSheet.create({x:{opacity:1.0}}).x};\n\nvar INACTIVE_UNDERLAY_PROPS={\nstyle:StyleSheet.create({x:{backgroundColor:'transparent'}}).x};\n\n\nmodule.exports=TouchableHighlight;\n});\n__d('ensureComponentIsNative',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\nvar ensureComponentIsNative=function(component){\ninvariant(\ncomponent&&typeof component.setNativeProps==='function',\n'Touchable child must either be native or forward setNativeProps to a '+\n'native component');};\n\n\n\nmodule.exports=ensureComponentIsNative;\n});\n__d('TouchableNativeFeedback',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar View=require('View');\n\nvar DummyTouchableNativeFeedback=React.createClass({displayName:'DummyTouchableNativeFeedback',\nrender:function(){\nreturn (\nReact.createElement(View,{style:[styles.container,this.props.style]},\nReact.createElement(Text,{style:styles.info},'TouchableNativeFeedback is not supported on this platform!')));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\ncontainer:{\nheight:100,\nwidth:300,\nbackgroundColor:'#ffbcbc',\nborderWidth:1,\nborderColor:'red',\nalignItems:'center',\njustifyContent:'center',\nmargin:10},\n\ninfo:{\ncolor:'#333333',\nmargin:20}});\n\n\n\nmodule.exports=DummyTouchableNativeFeedback;\n});\n__d('TouchableOpacity',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Animated=require('Animated');\nvar NativeMethodsMixin=require('NativeMethodsMixin');\nvar React=require('React');\nvar TimerMixin=require('react-timer-mixin/TimerMixin.js');\nvar Touchable=require('Touchable');\nvar TouchableWithoutFeedback=require('TouchableWithoutFeedback');\n\nvar ensurePositiveDelayProps=require('ensurePositiveDelayProps');\nvar flattenStyle=require('flattenStyle');\n\n\n\nvar PRESS_RETENTION_OFFSET={top:20,left:20,right:20,bottom:30};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar TouchableOpacity=React.createClass({displayName:'TouchableOpacity',\nmixins:[TimerMixin,Touchable.Mixin,NativeMethodsMixin],\n\npropTypes:babelHelpers.extends({},\nTouchableWithoutFeedback.propTypes,{\n\n\n\n\nactiveOpacity:React.PropTypes.number}),\n\n\ngetDefaultProps:function(){\nreturn {\nactiveOpacity:0.2};},\n\n\n\ngetInitialState:function(){\nreturn babelHelpers.extends({},\nthis.touchableGetInitialState(),{\nanim:new Animated.Value(1)});},\n\n\n\ncomponentDidMount:function(){\nensurePositiveDelayProps(this.props);},\n\n\ncomponentWillReceiveProps:function(nextProps){\nensurePositiveDelayProps(nextProps);},\n\n\nsetOpacityTo:function(value){\nAnimated.timing(\nthis.state.anim,\n{toValue:value,duration:150}).\nstart();},\n\n\n\n\n\n\ntouchableHandleActivePressIn:function(e){\nthis.clearTimeout(this._hideTimeout);\nthis._hideTimeout=null;\nthis._opacityActive();\nthis.props.onPressIn&&this.props.onPressIn(e);},\n\n\ntouchableHandleActivePressOut:function(e){\nif(!this._hideTimeout){\nthis._opacityInactive();}\n\nthis.props.onPressOut&&this.props.onPressOut(e);},\n\n\ntouchableHandlePress:function(e){\nthis.clearTimeout(this._hideTimeout);\nthis._opacityActive();\nthis._hideTimeout=this.setTimeout(\nthis._opacityInactive,\nthis.props.delayPressOut||100);\n\nthis.props.onPress&&this.props.onPress(e);},\n\n\ntouchableHandleLongPress:function(e){\nthis.props.onLongPress&&this.props.onLongPress(e);},\n\n\ntouchableGetPressRectOffset:function(){\nreturn this.props.pressRetentionOffset||PRESS_RETENTION_OFFSET;},\n\n\ntouchableGetHighlightDelayMS:function(){\nreturn this.props.delayPressIn||0;},\n\n\ntouchableGetLongPressDelayMS:function(){\nreturn this.props.delayLongPress===0?0:\nthis.props.delayLongPress||500;},\n\n\ntouchableGetPressOutDelayMS:function(){\nreturn this.props.delayPressOut;},\n\n\n_opacityActive:function(){\nthis.setOpacityTo(this.props.activeOpacity);},\n\n\n_opacityInactive:function(){\nthis.clearTimeout(this._hideTimeout);\nthis._hideTimeout=null;\nvar childStyle=flattenStyle(this.props.style)||{};\nthis.setOpacityTo(\nchildStyle.opacity===undefined?1:childStyle.opacity);},\n\n\n\nrender:function(){\nreturn (\nReact.createElement(Animated.View,{\naccessible:true,\naccessibilityComponentType:this.props.accessibilityComponentType,\naccessibilityTraits:this.props.accessibilityTraits,\nstyle:[this.props.style,{opacity:this.state.anim}],\ntestID:this.props.testID,\nonLayout:this.props.onLayout,\nonStartShouldSetResponder:this.touchableHandleStartShouldSetResponder,\nonResponderTerminationRequest:this.touchableHandleResponderTerminationRequest,\nonResponderGrant:this.touchableHandleResponderGrant,\nonResponderMove:this.touchableHandleResponderMove,\nonResponderRelease:this.touchableHandleResponderRelease,\nonResponderTerminate:this.touchableHandleResponderTerminate},\nthis.props.children));}});\n\n\n\n\n\nmodule.exports=TouchableOpacity;\n});\n__d('Animated',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar AnimatedImplementation=require('AnimatedImplementation');\nvar Image=require('Image');\nvar Text=require('Text');\nvar View=require('View');\n\nmodule.exports=babelHelpers.extends({},\nAnimatedImplementation,{\nView:AnimatedImplementation.createAnimatedComponent(View),\nText:AnimatedImplementation.createAnimatedComponent(Text),\nImage:AnimatedImplementation.createAnimatedComponent(Image)});\n});\n__d('AnimatedImplementation',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Easing=require('Easing');\nvar InteractionManager=require('InteractionManager');\nvar Interpolation=require('Interpolation');\nvar React=require('React');\nvar Set=require('Set');\nvar SpringConfig=require('SpringConfig');\nvar ViewStylePropTypes=require('ViewStylePropTypes');\n\nvar flattenStyle=require('flattenStyle');\nvar invariant=require('invariant');\nvar requestAnimationFrame=require('requestAnimationFrame');var \n\n\n\n\n\n\n\n\nAnimated=(function(){function Animated(){babelHelpers.classCallCheck(this,Animated);}babelHelpers.createClass(Animated,[{key:'__attach',value:function __attach()\n{}},{key:'__detach',value:function __detach()\n{}},{key:'__getValue',value:function __getValue()\n{}},{key:'__getAnimatedValue',value:function __getAnimatedValue()\n{return this.__getValue();}},{key:'__addChild',value:function __addChild(\nchild){}},{key:'__removeChild',value:function __removeChild(\nchild){}},{key:'__getChildren',value:function __getChildren()\n{return [];}}]);return Animated;})();var \n\n\n\n\n\n\n\n\n\nAnimation=(function(){function Animation(){babelHelpers.classCallCheck(this,Animation);}babelHelpers.createClass(Animation,[{key:'start',value:function start(\n\n\n\n\nfromValue,\nonUpdate,\nonEnd,\npreviousAnimation)\n{}},{key:'stop',value:function stop()\n{}},{key:'__debouncedOnEnd',value:function __debouncedOnEnd(\n\nresult){\nvar onEnd=this.__onEnd;\nthis.__onEnd=null;\nonEnd&&onEnd(result);}}]);return Animation;})();var \n\n\n\nAnimatedWithChildren=(function(_Animated){babelHelpers.inherits(AnimatedWithChildren,_Animated);\n\n\nfunction AnimatedWithChildren(){babelHelpers.classCallCheck(this,AnimatedWithChildren);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedWithChildren).call(this));\n\n_this._children=[];return _this;}babelHelpers.createClass(AnimatedWithChildren,[{key:'__addChild',value:function __addChild(\n\n\nchild){\nif(this._children.length===0){\nthis.__attach();}\n\nthis._children.push(child);}},{key:'__removeChild',value:function __removeChild(\n\n\nchild){\nvar index=this._children.indexOf(child);\nif(index===-1){\nconsole.warn('Trying to remove a child that doesn\\'t exist');\nreturn;}\n\nthis._children.splice(index,1);\nif(this._children.length===0){\nthis.__detach();}}},{key:'__getChildren',value:function __getChildren()\n\n\n\n{\nreturn this._children;}}]);return AnimatedWithChildren;})(Animated);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction _flush(rootNode){\nvar animatedStyles=new Set();\nfunction findAnimatedStyles(node){\nif(typeof node.update==='function'){\nanimatedStyles.add(node);}else \n{\nnode.__getChildren().forEach(findAnimatedStyles);}}\n\n\nfindAnimatedStyles(rootNode);\nanimatedStyles.forEach(function(animatedStyle){return animatedStyle.update();});}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar easeInOut=Easing.inOut(Easing.ease);var \n\nTimingAnimation=(function(_Animation){babelHelpers.inherits(TimingAnimation,_Animation);\n\n\n\n\n\n\n\n\n\n\nfunction TimingAnimation(\nconfig)\n{babelHelpers.classCallCheck(this,TimingAnimation);var _this2=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(TimingAnimation).call(this));\n\n_this2._toValue=config.toValue;\n_this2._easing=config.easing||easeInOut;\n_this2._duration=config.duration!==undefined?config.duration:500;\n_this2._delay=config.delay||0;\n_this2.__isInteraction=config.isInteraction!==undefined?config.isInteraction:true;return _this2;}babelHelpers.createClass(TimingAnimation,[{key:'start',value:function start(\n\n\n\nfromValue,\nonUpdate,\nonEnd)\n{var _this3=this;\nthis.__active=true;\nthis._fromValue=fromValue;\nthis._onUpdate=onUpdate;\nthis.__onEnd=onEnd;\n\nvar start=function(){\nif(_this3._duration===0){\n_this3._onUpdate(_this3._toValue);\n_this3.__debouncedOnEnd({finished:true});}else \n{\n_this3._startTime=Date.now();\n_this3._animationFrame=requestAnimationFrame(_this3.onUpdate.bind(_this3));}};\n\n\nif(this._delay){\nthis._timeout=setTimeout(start,this._delay);}else \n{\nstart();}}},{key:'onUpdate',value:function onUpdate()\n\n\n\n{\nvar now=Date.now();\nif(now>=this._startTime+this._duration){\nif(this._duration===0){\nthis._onUpdate(this._toValue);}else \n{\nthis._onUpdate(\nthis._fromValue+this._easing(1)*(this._toValue-this._fromValue));}\n\n\nthis.__debouncedOnEnd({finished:true});\nreturn;}\n\n\nthis._onUpdate(\nthis._fromValue+\nthis._easing((now-this._startTime)/this._duration)*(\nthis._toValue-this._fromValue));\n\nif(this.__active){\nthis._animationFrame=requestAnimationFrame(this.onUpdate.bind(this));}}},{key:'stop',value:function stop()\n\n\n\n{\nthis.__active=false;\nclearTimeout(this._timeout);\nwindow.cancelAnimationFrame(this._animationFrame);\nthis.__debouncedOnEnd({finished:false});}}]);return TimingAnimation;})(Animation);var \n\n\n\n\n\n\n\n\n\n\n\n\n\nDecayAnimation=(function(_Animation2){babelHelpers.inherits(DecayAnimation,_Animation2);\n\n\n\n\n\n\n\n\nfunction DecayAnimation(\nconfig)\n{babelHelpers.classCallCheck(this,DecayAnimation);var _this4=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(DecayAnimation).call(this));\n\n_this4._deceleration=config.deceleration||0.998;\n_this4._velocity=config.velocity;\n_this4.__isInteraction=config.isInteraction!==undefined?config.isInteraction:true;return _this4;}babelHelpers.createClass(DecayAnimation,[{key:'start',value:function start(\n\n\n\nfromValue,\nonUpdate,\nonEnd)\n{\nthis.__active=true;\nthis._lastValue=fromValue;\nthis._fromValue=fromValue;\nthis._onUpdate=onUpdate;\nthis.__onEnd=onEnd;\nthis._startTime=Date.now();\nthis._animationFrame=requestAnimationFrame(this.onUpdate.bind(this));}},{key:'onUpdate',value:function onUpdate()\n\n\n{\nvar now=Date.now();\n\nvar value=this._fromValue+\nthis._velocity/(1-this._deceleration)*(\n1-Math.exp(-(1-this._deceleration)*(now-this._startTime)));\n\nthis._onUpdate(value);\n\nif(Math.abs(this._lastValue-value)<0.1){\nthis.__debouncedOnEnd({finished:true});\nreturn;}\n\n\nthis._lastValue=value;\nif(this.__active){\nthis._animationFrame=requestAnimationFrame(this.onUpdate.bind(this));}}},{key:'stop',value:function stop()\n\n\n\n{\nthis.__active=false;\nwindow.cancelAnimationFrame(this._animationFrame);\nthis.__debouncedOnEnd({finished:false});}}]);return DecayAnimation;})(Animation);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction withDefault(value,defaultValue){\nif(value===undefined||value===null){\nreturn defaultValue;}\n\nreturn value;}var \n\n\nSpringAnimation=(function(_Animation3){babelHelpers.inherits(SpringAnimation,_Animation3);\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction SpringAnimation(\nconfig)\n{babelHelpers.classCallCheck(this,SpringAnimation);var _this5=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(SpringAnimation).call(this));\n\n\n_this5._overshootClamping=withDefault(config.overshootClamping,false);\n_this5._restDisplacementThreshold=withDefault(config.restDisplacementThreshold,0.001);\n_this5._restSpeedThreshold=withDefault(config.restSpeedThreshold,0.001);\n_this5._initialVelocity=config.velocity;\n_this5._lastVelocity=withDefault(config.velocity,0);\n_this5._toValue=config.toValue;\n_this5.__isInteraction=config.isInteraction!==undefined?config.isInteraction:true;\n\nvar springConfig;\nif(config.bounciness!==undefined||config.speed!==undefined){\ninvariant(\nconfig.tension===undefined&&config.friction===undefined,\n'You can only define bounciness/speed or tension/friction but not both');\n\nspringConfig=SpringConfig.fromBouncinessAndSpeed(\nwithDefault(config.bounciness,8),\nwithDefault(config.speed,12));}else \n\n{\nspringConfig=SpringConfig.fromOrigamiTensionAndFriction(\nwithDefault(config.tension,40),\nwithDefault(config.friction,7));}\n\n\n_this5._tension=springConfig.tension;\n_this5._friction=springConfig.friction;return _this5;}babelHelpers.createClass(SpringAnimation,[{key:'start',value:function start(\n\n\n\nfromValue,\nonUpdate,\nonEnd,\npreviousAnimation)\n{\nthis.__active=true;\nthis._startPosition=fromValue;\nthis._lastPosition=this._startPosition;\n\nthis._onUpdate=onUpdate;\nthis.__onEnd=onEnd;\nthis._lastTime=Date.now();\n\nif(previousAnimation instanceof SpringAnimation){\nvar internalState=previousAnimation.getInternalState();\nthis._lastPosition=internalState.lastPosition;\nthis._lastVelocity=internalState.lastVelocity;\nthis._lastTime=internalState.lastTime;}\n\nif(this._initialVelocity!==undefined&&\nthis._initialVelocity!==null){\nthis._lastVelocity=this._initialVelocity;}\n\nthis.onUpdate();}},{key:'getInternalState',value:function getInternalState()\n\n\n{\nreturn {\nlastPosition:this._lastPosition,\nlastVelocity:this._lastVelocity,\nlastTime:this._lastTime};}},{key:'onUpdate',value:function onUpdate()\n\n\n\n{\nvar position=this._lastPosition;\nvar velocity=this._lastVelocity;\n\nvar tempPosition=this._lastPosition;\nvar tempVelocity=this._lastVelocity;\n\n\n\n\n\nvar MAX_STEPS=64;\nvar now=Date.now();\nif(now>this._lastTime+MAX_STEPS){\nnow=this._lastTime+MAX_STEPS;}\n\n\n\n\n\nvar TIMESTEP_MSEC=1;\nvar numSteps=Math.floor((now-this._lastTime)/TIMESTEP_MSEC);\n\nfor(var i=0;i<numSteps;++i){\n\nvar step=TIMESTEP_MSEC/1000;\n\n\n\nvar aVelocity=velocity;\nvar aAcceleration=this._tension*(this._toValue-tempPosition)-this._friction*tempVelocity;\nvar tempPosition=position+aVelocity*step/2;\nvar tempVelocity=velocity+aAcceleration*step/2;\n\nvar bVelocity=tempVelocity;\nvar bAcceleration=this._tension*(this._toValue-tempPosition)-this._friction*tempVelocity;\ntempPosition=position+bVelocity*step/2;\ntempVelocity=velocity+bAcceleration*step/2;\n\nvar cVelocity=tempVelocity;\nvar cAcceleration=this._tension*(this._toValue-tempPosition)-this._friction*tempVelocity;\ntempPosition=position+cVelocity*step/2;\ntempVelocity=velocity+cAcceleration*step/2;\n\nvar dVelocity=tempVelocity;\nvar dAcceleration=this._tension*(this._toValue-tempPosition)-this._friction*tempVelocity;\ntempPosition=position+cVelocity*step/2;\ntempVelocity=velocity+cAcceleration*step/2;\n\nvar dxdt=(aVelocity+2*(bVelocity+cVelocity)+dVelocity)/6;\nvar dvdt=(aAcceleration+2*(bAcceleration+cAcceleration)+dAcceleration)/6;\n\nposition+=dxdt*step;\nvelocity+=dvdt*step;}\n\n\nthis._lastTime=now;\nthis._lastPosition=position;\nthis._lastVelocity=velocity;\n\nthis._onUpdate(position);\nif(!this.__active){\nreturn;}\n\n\n\nvar isOvershooting=false;\nif(this._overshootClamping&&this._tension!==0){\nif(this._startPosition<this._toValue){\nisOvershooting=position>this._toValue;}else \n{\nisOvershooting=position<this._toValue;}}\n\n\nvar isVelocity=Math.abs(velocity)<=this._restSpeedThreshold;\nvar isDisplacement=true;\nif(this._tension!==0){\nisDisplacement=Math.abs(this._toValue-position)<=this._restDisplacementThreshold;}\n\n\nif(isOvershooting||isVelocity&&isDisplacement){\nif(this._tension!==0){\n\nthis._onUpdate(this._toValue);}\n\n\nthis.__debouncedOnEnd({finished:true});\nreturn;}\n\nthis._animationFrame=requestAnimationFrame(this.onUpdate.bind(this));}},{key:'stop',value:function stop()\n\n\n{\nthis.__active=false;\nwindow.cancelAnimationFrame(this._animationFrame);\nthis.__debouncedOnEnd({finished:false});}}]);return SpringAnimation;})(Animation);\n\n\n\n\n\nvar _uniqueId=1;var \n\n\n\n\n\n\n\nAnimatedValue=(function(_AnimatedWithChildren){babelHelpers.inherits(AnimatedValue,_AnimatedWithChildren);\n\n\n\n\n\n\nfunction AnimatedValue(value){babelHelpers.classCallCheck(this,AnimatedValue);var _this6=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedValue).call(this));\n\n_this6._value=value;\n_this6._offset=0;\n_this6._animation=null;\n_this6._listeners={};return _this6;}babelHelpers.createClass(AnimatedValue,[{key:'__detach',value:function __detach()\n\n\n{\nthis.stopAnimation();}},{key:'__getValue',value:function __getValue()\n\n\n{\nreturn this._value+this._offset;}},{key:'setValue',value:function setValue(\n\n\n\n\n\n\nvalue){\nif(this._animation){\nthis._animation.stop();\nthis._animation=null;}\n\nthis._updateValue(value);}},{key:'setOffset',value:function setOffset(\n\n\n\n\n\n\n\noffset){\nthis._offset=offset;}},{key:'flattenOffset',value:function flattenOffset()\n\n\n\n\n\n\n{\nthis._value+=this._offset;\nthis._offset=0;}},{key:'addListener',value:function addListener(\n\n\n\n\n\n\n\ncallback){\nvar id=String(_uniqueId++);\nthis._listeners[id]=callback;\nreturn id;}},{key:'removeListener',value:function removeListener(\n\n\nid){\ndelete this._listeners[id];}},{key:'removeAllListeners',value:function removeAllListeners()\n\n\n{\nthis._listeners={};}},{key:'stopAnimation',value:function stopAnimation(\n\n\n\n\n\n\n\ncallback){\nthis.stopTracking();\nthis._animation&&this._animation.stop();\nthis._animation=null;\ncallback&&callback(this.__getValue());}},{key:'interpolate',value:function interpolate(\n\n\n\n\n\n\nconfig){\nreturn new AnimatedInterpolation(this,Interpolation.create(config));}},{key:'animate',value:function animate(\n\n\n\n\n\n\nanimation,callback){var _this7=this;\nvar handle=null;\nif(animation.__isInteraction){\nhandle=InteractionManager.createInteractionHandle();}\n\nvar previousAnimation=this._animation;\nthis._animation&&this._animation.stop();\nthis._animation=animation;\nanimation.start(\nthis._value,\nfunction(value){\n_this7._updateValue(value);},\n\nfunction(result){\n_this7._animation=null;\nif(handle!==null){\nInteractionManager.clearInteractionHandle(handle);}\n\ncallback&&callback(result);},\n\npreviousAnimation);}},{key:'stopTracking',value:function stopTracking()\n\n\n\n\n\n\n{\nthis._tracking&&this._tracking.__detach();\nthis._tracking=null;}},{key:'track',value:function track(\n\n\n\n\n\ntracking){\nthis.stopTracking();\nthis._tracking=tracking;}},{key:'_updateValue',value:function _updateValue(\n\n\nvalue){\nthis._value=value;\n_flush(this);\nfor(var key in this._listeners){\nthis._listeners[key]({value:this.__getValue()});}}}]);return AnimatedValue;})(AnimatedWithChildren);var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAnimatedValueXY=(function(_AnimatedWithChildren2){babelHelpers.inherits(AnimatedValueXY,_AnimatedWithChildren2);\n\n\n\n\nfunction AnimatedValueXY(valueIn){babelHelpers.classCallCheck(this,AnimatedValueXY);var _this8=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedValueXY).call(this));\n\nvar value=valueIn||{x:0,y:0};\nif(typeof value.x==='number'&&typeof value.y==='number'){\n_this8.x=new AnimatedValue(value.x);\n_this8.y=new AnimatedValue(value.y);}else \n{\ninvariant(\nvalue.x instanceof AnimatedValue&&\nvalue.y instanceof AnimatedValue,\n'AnimatedValueXY must be initalized with an object of numbers or '+\n'AnimatedValues.');\n\n_this8.x=value.x;\n_this8.y=value.y;}\n\n_this8._listeners={};return _this8;}babelHelpers.createClass(AnimatedValueXY,[{key:'setValue',value:function setValue(\n\n\nvalue){\nthis.x.setValue(value.x);\nthis.y.setValue(value.y);}},{key:'setOffset',value:function setOffset(\n\n\noffset){\nthis.x.setOffset(offset.x);\nthis.y.setOffset(offset.y);}},{key:'flattenOffset',value:function flattenOffset()\n\n\n{\nthis.x.flattenOffset();\nthis.y.flattenOffset();}},{key:'__getValue',value:function __getValue()\n\n\n{\nreturn {\nx:this.x.__getValue(),\ny:this.y.__getValue()};}},{key:'stopAnimation',value:function stopAnimation(\n\n\n\ncallback){\nthis.x.stopAnimation();\nthis.y.stopAnimation();\ncallback&&callback(this.__getValue());}},{key:'addListener',value:function addListener(\n\n\ncallback){var _this9=this;\nvar id=String(_uniqueId++);\nvar jointCallback=function(_ref){var number=_ref.value;\ncallback(_this9.__getValue());};\n\nthis._listeners[id]={\nx:this.x.addListener(jointCallback),\ny:this.y.addListener(jointCallback)};\n\nreturn id;}},{key:'removeListener',value:function removeListener(\n\n\nid){\nthis.x.removeListener(this._listeners[id].x);\nthis.y.removeListener(this._listeners[id].y);\ndelete this._listeners[id];}},{key:'getLayout',value:function getLayout()\n\n\n\n\n\n\n\n\n\n{\nreturn {\nleft:this.x,\ntop:this.y};}},{key:'getTranslateTransform',value:function getTranslateTransform()\n\n\n\n\n\n\n\n\n\n\n\n\n{\nreturn [\n{translateX:this.x},\n{translateY:this.y}];}}]);return AnimatedValueXY;})(AnimatedWithChildren);var \n\n\n\n\nAnimatedInterpolation=(function(_AnimatedWithChildren3){babelHelpers.inherits(AnimatedInterpolation,_AnimatedWithChildren3);\n\n\n\nfunction AnimatedInterpolation(parent,interpolation){babelHelpers.classCallCheck(this,AnimatedInterpolation);var _this10=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedInterpolation).call(this));\n\n_this10._parent=parent;\n_this10._interpolation=interpolation;return _this10;}babelHelpers.createClass(AnimatedInterpolation,[{key:'__getValue',value:function __getValue()\n\n\n{\nvar parentValue=this._parent.__getValue();\ninvariant(\ntypeof parentValue==='number',\n'Cannot interpolate an input which is not a number.');\n\nreturn this._interpolation(parentValue);}},{key:'interpolate',value:function interpolate(\n\n\nconfig){\nreturn new AnimatedInterpolation(this,Interpolation.create(config));}},{key:'__attach',value:function __attach()\n\n\n{\nthis._parent.__addChild(this);}},{key:'__detach',value:function __detach()\n\n\n{\nthis._parent.__removeChild(this);}}]);return AnimatedInterpolation;})(AnimatedWithChildren);var \n\n\n\nAnimatedTransform=(function(_AnimatedWithChildren4){babelHelpers.inherits(AnimatedTransform,_AnimatedWithChildren4);\n\n\nfunction AnimatedTransform(transforms){babelHelpers.classCallCheck(this,AnimatedTransform);var _this11=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedTransform).call(this));\n\n_this11._transforms=transforms;return _this11;}babelHelpers.createClass(AnimatedTransform,[{key:'__getValue',value:function __getValue()\n\n\n{\nreturn this._transforms.map(function(transform){\nvar result={};\nfor(var key in transform){\nvar value=transform[key];\nif(value instanceof Animated){\nresult[key]=value.__getValue();}else \n{\nresult[key]=value;}}\n\n\nreturn result;});}},{key:'__getAnimatedValue',value:function __getAnimatedValue()\n\n\n\n{\nreturn this._transforms.map(function(transform){\nvar result={};\nfor(var key in transform){\nvar value=transform[key];\nif(value instanceof Animated){\nresult[key]=value.__getAnimatedValue();}else \n{\n\nresult[key]=value;}}\n\n\nreturn result;});}},{key:'__attach',value:function __attach()\n\n\n\n{var _this12=this;\nthis._transforms.forEach(function(transform){\nfor(var key in transform){\nvar value=transform[key];\nif(value instanceof Animated){\nvalue.__addChild(_this12);}}});}},{key:'__detach',value:function __detach()\n\n\n\n\n\n{var _this13=this;\nthis._transforms.forEach(function(transform){\nfor(var key in transform){\nvar value=transform[key];\nif(value instanceof Animated){\nvalue.__removeChild(_this13);}}});}}]);return AnimatedTransform;})(AnimatedWithChildren);var \n\n\n\n\n\n\nAnimatedStyle=(function(_AnimatedWithChildren5){babelHelpers.inherits(AnimatedStyle,_AnimatedWithChildren5);\n\n\nfunction AnimatedStyle(style){babelHelpers.classCallCheck(this,AnimatedStyle);var _this14=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedStyle).call(this));\n\nstyle=flattenStyle(style)||{};\nif(style.transform){\nstyle=babelHelpers.extends({},\nstyle,{\ntransform:new AnimatedTransform(style.transform)});}\n\n\n_this14._style=style;return _this14;}babelHelpers.createClass(AnimatedStyle,[{key:'__getValue',value:function __getValue()\n\n\n{\nvar style={};\nfor(var key in this._style){\nvar value=this._style[key];\nif(value instanceof Animated){\nstyle[key]=value.__getValue();}else \n{\nstyle[key]=value;}}\n\n\nreturn style;}},{key:'__getAnimatedValue',value:function __getAnimatedValue()\n\n\n{\nvar style={};\nfor(var key in this._style){\nvar value=this._style[key];\nif(value instanceof Animated){\nstyle[key]=value.__getAnimatedValue();}}\n\n\nreturn style;}},{key:'__attach',value:function __attach()\n\n\n{\nfor(var key in this._style){\nvar value=this._style[key];\nif(value instanceof Animated){\nvalue.__addChild(this);}}}},{key:'__detach',value:function __detach()\n\n\n\n\n{\nfor(var key in this._style){\nvar value=this._style[key];\nif(value instanceof Animated){\nvalue.__removeChild(this);}}}}]);return AnimatedStyle;})(AnimatedWithChildren);var \n\n\n\n\n\nAnimatedProps=(function(_Animated2){babelHelpers.inherits(AnimatedProps,_Animated2);\n\n\n\nfunction AnimatedProps(\nprops,\ncallback)\n{babelHelpers.classCallCheck(this,AnimatedProps);var _this15=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedProps).call(this));\n\nif(props.style){\nprops=babelHelpers.extends({},\nprops,{\nstyle:new AnimatedStyle(props.style)});}\n\n\n_this15._props=props;\n_this15._callback=callback;\n_this15.__attach();return _this15;}babelHelpers.createClass(AnimatedProps,[{key:'__getValue',value:function __getValue()\n\n\n{\nvar props={};\nfor(var key in this._props){\nvar value=this._props[key];\nif(value instanceof Animated){\nprops[key]=value.__getValue();}else \n{\nprops[key]=value;}}\n\n\nreturn props;}},{key:'__getAnimatedValue',value:function __getAnimatedValue()\n\n\n{\nvar props={};\nfor(var key in this._props){\nvar value=this._props[key];\nif(value instanceof Animated){\nprops[key]=value.__getAnimatedValue();}}\n\n\nreturn props;}},{key:'__attach',value:function __attach()\n\n\n{\nfor(var key in this._props){\nvar value=this._props[key];\nif(value instanceof Animated){\nvalue.__addChild(this);}}}},{key:'__detach',value:function __detach()\n\n\n\n\n{\nfor(var key in this._props){\nvar value=this._props[key];\nif(value instanceof Animated){\nvalue.__removeChild(this);}}}},{key:'update',value:function update()\n\n\n\n\n{\nthis._callback();}}]);return AnimatedProps;})(Animated);\n\n\n\nfunction createAnimatedComponent(Component){\nvar refName='node';var \n\nAnimatedComponent=(function(_React$Component){babelHelpers.inherits(AnimatedComponent,_React$Component);function AnimatedComponent(){babelHelpers.classCallCheck(this,AnimatedComponent);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedComponent).apply(this,arguments));}babelHelpers.createClass(AnimatedComponent,[{key:'componentWillUnmount',value:function componentWillUnmount()\n\n\n{\nthis._propsAnimated&&this._propsAnimated.__detach();}},{key:'setNativeProps',value:function setNativeProps(\n\n\nprops){\nthis.refs[refName].setNativeProps(props);}},{key:'componentWillMount',value:function componentWillMount()\n\n\n{\nthis.attachProps(this.props);}},{key:'attachProps',value:function attachProps(\n\n\nnextProps){var _this17=this;\nvar oldPropsAnimated=this._propsAnimated;\n\n\n\n\n\n\n\nvar callback=function(){\nif(_this17.refs[refName].setNativeProps){\nvar value=_this17._propsAnimated.__getAnimatedValue();\n_this17.refs[refName].setNativeProps(value);}else \n{\n_this17.forceUpdate();}};\n\n\n\nthis._propsAnimated=new AnimatedProps(\nnextProps,\ncallback);\n\n\n\n\n\n\n\n\n\n\noldPropsAnimated&&oldPropsAnimated.__detach();}},{key:'componentWillReceiveProps',value:function componentWillReceiveProps(\n\n\nnextProps){\nthis.attachProps(nextProps);}},{key:'render',value:function render()\n\n\n{\nreturn (\nReact.createElement(Component,babelHelpers.extends({},\nthis._propsAnimated.__getValue(),{\nref:refName})));}}]);return AnimatedComponent;})(React.Component);\n\n\n\n\nAnimatedComponent.propTypes={\nstyle:function(props,propName,componentName){\nfor(var key in ViewStylePropTypes){\nif(!Component.propTypes[key]&&props[key]!==undefined){\nconsole.error(\n'You are setting the style `{ '+key+': ... }` as a prop. You '+\n'should nest it in a style object. '+\n'E.g. `{ style: { '+key+': ... } }`');}}}};\n\n\n\n\n\n\nreturn AnimatedComponent;}var \n\n\nAnimatedTracking=(function(_Animated3){babelHelpers.inherits(AnimatedTracking,_Animated3);\n\n\n\n\n\n\nfunction AnimatedTracking(\nvalue,\nparent,\nanimationClass,\nanimationConfig,\ncallback)\n{babelHelpers.classCallCheck(this,AnimatedTracking);var _this18=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(AnimatedTracking).call(this));\n\n_this18._value=value;\n_this18._parent=parent;\n_this18._animationClass=animationClass;\n_this18._animationConfig=animationConfig;\n_this18._callback=callback;\n_this18.__attach();return _this18;}babelHelpers.createClass(AnimatedTracking,[{key:'__getValue',value:function __getValue()\n\n\n{\nreturn this._parent.__getValue();}},{key:'__attach',value:function __attach()\n\n\n{\nthis._parent.__addChild(this);}},{key:'__detach',value:function __detach()\n\n\n{\nthis._parent.__removeChild(this);}},{key:'update',value:function update()\n\n\n{\nthis._value.animate(new this._animationClass(babelHelpers.extends({},\nthis._animationConfig,{\ntoValue:this._animationConfig.toValue.__getValue()})),\nthis._callback);}}]);return AnimatedTracking;})(Animated);\n\n\n\n\n\n\n\n\nvar maybeVectorAnim=function(\nvalue,\nconfig,\nanim)\n{\nif(value instanceof AnimatedValueXY){\nvar configX=babelHelpers.extends({},config);\nvar configY=babelHelpers.extends({},config);\nfor(var key in config){var _config$key=\nconfig[key];var x=_config$key.x;var y=_config$key.y;\nif(x!==undefined&&y!==undefined){\nconfigX[key]=x;\nconfigY[key]=y;}}\n\n\nvar aX=anim(value.x,configX);\nvar aY=anim(value.y,configY);\n\n\nreturn parallel([aX,aY],{stopTogether:false});}\n\nreturn null;};\n\n\nvar spring=function(\nvalue,\nconfig)\n{\nreturn maybeVectorAnim(value,config,spring)||{\nstart:function(callback){\nvar singleValue=value;\nvar singleConfig=config;\nsingleValue.stopTracking();\nif(config.toValue instanceof Animated){\nsingleValue.track(new AnimatedTracking(\nsingleValue,\nconfig.toValue,\nSpringAnimation,\nsingleConfig,\ncallback));}else \n\n{\nsingleValue.animate(new SpringAnimation(singleConfig),callback);}},\n\n\n\nstop:function(){\nvalue.stopAnimation();}};};\n\n\n\n\nvar timing=function(\nvalue,\nconfig)\n{\nreturn maybeVectorAnim(value,config,timing)||{\nstart:function(callback){\nvar singleValue=value;\nvar singleConfig=config;\nsingleValue.stopTracking();\nif(config.toValue instanceof Animated){\nsingleValue.track(new AnimatedTracking(\nsingleValue,\nconfig.toValue,\nTimingAnimation,\nsingleConfig,\ncallback));}else \n\n{\nsingleValue.animate(new TimingAnimation(singleConfig),callback);}},\n\n\n\nstop:function(){\nvalue.stopAnimation();}};};\n\n\n\n\nvar decay=function(\nvalue,\nconfig)\n{\nreturn maybeVectorAnim(value,config,decay)||{\nstart:function(callback){\nvar singleValue=value;\nvar singleConfig=config;\nsingleValue.stopTracking();\nsingleValue.animate(new DecayAnimation(singleConfig),callback);},\n\n\nstop:function(){\nvalue.stopAnimation();}};};\n\n\n\n\nvar sequence=function(\nanimations)\n{\nvar current=0;\nreturn {\nstart:function(callback){\nvar onComplete=function(result){\nif(!result.finished){\ncallback&&callback(result);\nreturn;}\n\n\ncurrent++;\n\nif(current===animations.length){\ncallback&&callback(result);\nreturn;}\n\n\nanimations[current].start(onComplete);};\n\n\nif(animations.length===0){\ncallback&&callback({finished:true});}else \n{\nanimations[current].start(onComplete);}},\n\n\n\nstop:function(){\nif(current<animations.length){\nanimations[current].stop();}}};};\n\n\n\n\n\n\n\n\nvar parallel=function(\nanimations,\nconfig)\n{\nvar doneCount=0;\n\nvar hasEnded={};\nvar stopTogether=!(config&&config.stopTogether===false);\n\nvar result={\nstart:function(callback){\nif(doneCount===animations.length){\ncallback&&callback({finished:true});\nreturn;}\n\n\nanimations.forEach(function(animation,idx){\nvar cb=function(endResult){\nhasEnded[idx]=true;\ndoneCount++;\nif(doneCount===animations.length){\ndoneCount=0;\ncallback&&callback(endResult);\nreturn;}\n\n\nif(!endResult.finished&&stopTogether){\nresult.stop();}};\n\n\n\nif(!animation){\ncb({finished:true});}else \n{\nanimation.start(cb);}});},\n\n\n\n\nstop:function(){\nanimations.forEach(function(animation,idx){\n!hasEnded[idx]&&animation.stop();\nhasEnded[idx]=true;});}};\n\n\n\n\nreturn result;};\n\n\nvar delay=function(time){\n\nreturn timing(new AnimatedValue(0),{toValue:0,delay:time,duration:0});};\n\n\nvar stagger=function(\ntime,\nanimations)\n{\nreturn parallel(animations.map(function(animation,i){\nreturn sequence([\ndelay(time*i),\nanimation]);}));};\n\n\n\n\n\n\n\nvar event=function(\nargMapping,\nconfig)\n{\nreturn function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}\nvar traverse=function(recMapping,recEvt,key){\nif(typeof recEvt==='number'){\ninvariant(\nrecMapping instanceof AnimatedValue,\n'Bad mapping of type '+typeof recMapping+' for key '+key+\n', event value must map to AnimatedValue');\n\nrecMapping.setValue(recEvt);\nreturn;}\n\ninvariant(\ntypeof recMapping==='object',\n'Bad mapping of type '+typeof recMapping+' for key '+key);\n\ninvariant(\ntypeof recEvt==='object',\n'Bad event of type '+typeof recEvt+' for key '+key);\n\nfor(var key in recMapping){\ntraverse(recMapping[key],recEvt[key],key);}};\n\n\nargMapping.forEach(function(mapping,idx){\ntraverse(mapping,args[idx],'arg'+idx);});\n\nif(config&&config.listener){\nconfig.listener.apply(null,args);}};};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports={\n\n\n\n\nValue:AnimatedValue,\n\n\n\nValueXY:AnimatedValueXY,\n\n\n\n\n\ndecay:decay,\n\n\n\n\ntiming:timing,\n\n\n\n\nspring:spring,\n\n\n\n\ndelay:delay,\n\n\n\n\n\nsequence:sequence,\n\n\n\n\n\nparallel:parallel,\n\n\n\n\nstagger:stagger,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nevent:event,\n\n\n\n\ncreateAnimatedComponent:createAnimatedComponent,\n\n__PropsOnlyForTests:AnimatedProps};\n});\n__d('Interpolation',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar tinycolor=require('tinycolor');\n\n\nvar invariant=function(condition,message){\nif(!condition){\nvar error=new Error(message);\nerror.framesToPop=1;\nthrow error;}};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar linear=function(t){return t;};var \n\n\n\n\n\nInterpolation=(function(){function Interpolation(){babelHelpers.classCallCheck(this,Interpolation);}babelHelpers.createClass(Interpolation,null,[{key:'create',value:function create(\nconfig){\n\nif(config.outputRange&&typeof config.outputRange[0]==='string'){\nreturn createInterpolationFromStringOutputRange(config);}\n\n\nvar outputRange=config.outputRange;\ncheckInfiniteRange('outputRange',outputRange);\n\nvar inputRange=config.inputRange;\ncheckInfiniteRange('inputRange',inputRange);\ncheckValidInputRange(inputRange);\n\ninvariant(\ninputRange.length===outputRange.length,\n'inputRange ('+inputRange.length+') and outputRange ('+\noutputRange.length+') must have the same length');\n\n\nvar easing=config.easing||linear;\n\nvar extrapolateLeft='extend';\nif(config.extrapolateLeft!==undefined){\nextrapolateLeft=config.extrapolateLeft;}else \nif(config.extrapolate!==undefined){\nextrapolateLeft=config.extrapolate;}\n\n\nvar extrapolateRight='extend';\nif(config.extrapolateRight!==undefined){\nextrapolateRight=config.extrapolateRight;}else \nif(config.extrapolate!==undefined){\nextrapolateRight=config.extrapolate;}\n\n\nreturn function(input){\ninvariant(\ntypeof input==='number',\n'Cannot interpolation an input which is not a number');\n\n\nvar range=findRange(input,inputRange);\nreturn interpolate(\ninput,\ninputRange[range],\ninputRange[range+1],\noutputRange[range],\noutputRange[range+1],\neasing,\nextrapolateLeft,\nextrapolateRight);};}}]);return Interpolation;})();\n\n\n\n\n\nfunction interpolate(\ninput,\ninputMin,\ninputMax,\noutputMin,\noutputMax,\neasing,\nextrapolateLeft,\nextrapolateRight)\n{\nvar result=input;\n\n\nif(result<inputMin){\nif(extrapolateLeft==='identity'){\nreturn result;}else \nif(extrapolateLeft==='clamp'){\nresult=inputMin;}else \nif(extrapolateLeft==='extend'){}}\n\n\n\n\nif(result>inputMax){\nif(extrapolateRight==='identity'){\nreturn result;}else \nif(extrapolateRight==='clamp'){\nresult=inputMax;}else \nif(extrapolateRight==='extend'){}}\n\n\n\n\nif(outputMin===outputMax){\nreturn outputMin;}\n\n\nif(inputMin===inputMax){\nif(input<=inputMin){\nreturn outputMin;}\n\nreturn outputMax;}\n\n\n\nif(inputMin===-Infinity){\nresult=-result;}else \nif(inputMax===Infinity){\nresult=result-inputMin;}else \n{\nresult=(result-inputMin)/(inputMax-inputMin);}\n\n\n\nresult=easing(result);\n\n\nif(outputMin===-Infinity){\nresult=-result;}else \nif(outputMax===Infinity){\nresult=result+outputMin;}else \n{\nresult=result*(outputMax-outputMin)+outputMin;}\n\n\nreturn result;}\n\n\nfunction colorToRgba(\ninput)\n{\nvar color=tinycolor(input);\nif(color.isValid()){var _color$toRgb=\ncolor.toRgb();var r=_color$toRgb.r;var g=_color$toRgb.g;var b=_color$toRgb.b;var a=_color$toRgb.a;\nreturn 'rgba('+r+', '+g+', '+b+', '+(a===undefined?1:a)+')';}else \n{\nreturn input;}}\n\n\n\nvar stringShapeRegex=/[0-9\\.-]+/g;\n\n\n\n\n\n\n\n\n\nfunction createInterpolationFromStringOutputRange(\nconfig)\n{\nvar outputRange=config.outputRange;\ninvariant(outputRange.length>=2,'Bad output range');\noutputRange=outputRange.map(colorToRgba);\ncheckPattern(outputRange);\n\n\n\n\n\n\n\n\n\n\n\n\nvar outputRanges=outputRange[0].match(stringShapeRegex).map(function(){return [];});\noutputRange.forEach(function(value){\n\n\n\nvalue.match(stringShapeRegex).forEach(function(number,i){\noutputRanges[i].push(+number);});});\n\n\n\n\n\n\nvar interpolations=outputRange[0].match(stringShapeRegex).map(function(value,i){\nreturn Interpolation.create(babelHelpers.extends({},\nconfig,{\noutputRange:outputRanges[i]}));});\n\n\n\nreturn function(input){\nvar i=0;\n\n\n\nreturn outputRange[0].replace(stringShapeRegex,function(){\nreturn String(interpolations[i++](input));});};}\n\n\n\n\nfunction checkPattern(arr){\nvar pattern=arr[0].replace(stringShapeRegex,'');\nfor(var i=1;i<arr.length;++i){\ninvariant(\npattern===arr[i].replace(stringShapeRegex,''),\n'invalid pattern '+arr[0]+' and '+arr[i]);}}\n\n\n\n\nfunction findRange(input,inputRange){\nfor(var i=1;i<inputRange.length-1;++i){\nif(inputRange[i]>=input){\nbreak;}}\n\n\nreturn i-1;}\n\n\nfunction checkValidInputRange(arr){\ninvariant(arr.length>=2,'inputRange must have at least 2 elements');\nfor(var i=1;i<arr.length;++i){\ninvariant(\narr[i]>=arr[i-1],\n\n\n\n\n\n\n'inputRange must be monotonically increasing '+arr);}}\n\n\n\n\nfunction checkInfiniteRange(name,arr){\ninvariant(arr.length>=2,name+' must have at least 2 elements');\ninvariant(\narr.length!==2||arr[0]!==-Infinity||arr[1]!==Infinity,\n\n\n\n\n\n\nname+'cannot be ]-infinity;+infinity[ '+arr);}\n\n\n\nmodule.exports=Interpolation;\n});\n__d('Easing',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar _bezier=require('bezier');var \n\n\n\n\n\n\nEasing=(function(){function Easing(){babelHelpers.classCallCheck(this,Easing);}babelHelpers.createClass(Easing,null,[{key:'step0',value:function step0(\nn){\nreturn n>0?1:0;}},{key:'step1',value:function step1(\n\n\nn){\nreturn n>=1?1:0;}},{key:'linear',value:function linear(\n\n\nt){\nreturn t;}},{key:'ease',value:function ease(\n\n\nt){\nreturn _ease(t);}},{key:'quad',value:function quad(\n\n\nt){\nreturn t*t;}},{key:'cubic',value:function cubic(\n\n\nt){\nreturn t*t*t;}},{key:'poly',value:function poly(\n\n\nn){\nreturn function(t){return Math.pow(t,n);};}},{key:'sin',value:function sin(\n\n\nt){\nreturn 1-Math.cos(t*Math.PI/2);}},{key:'circle',value:function circle(\n\n\nt){\nreturn 1-Math.sqrt(1-t*t);}},{key:'exp',value:function exp(\n\n\nt){\nreturn Math.pow(2,10*(t-1));}},{key:'elastic',value:function elastic()\n\n\n\n\n\n\n\n\n\n\n\n\n{var bounciness=arguments.length<=0||arguments[0]===undefined?1:arguments[0];\nvar p=bounciness*Math.PI;\nreturn function(t){return 1-Math.pow(Math.cos(t*Math.PI/2),3)*Math.cos(t*p);};}},{key:'back',value:function back(\n\n\ns){\nif(s===undefined){\ns=1.70158;}\n\nreturn function(t){return t*t*((s+1)*t-s);};}},{key:'bounce',value:function bounce(\n\n\nt){\nif(t<1/2.75){\nreturn 7.5625*t*t;}\n\n\nif(t<2/2.75){\nt-=1.5/2.75;\nreturn 7.5625*t*t+0.75;}\n\n\nif(t<2.5/2.75){\nt-=2.25/2.75;\nreturn 7.5625*t*t+0.9375;}\n\n\nt-=2.625/2.75;\nreturn 7.5625*t*t+0.984375;}},{key:'bezier',value:function bezier(\n\n\n\nx1,\ny1,\nx2,\ny2,\nepsilon)\n{\nif(epsilon===undefined){\n\n\nvar duration=500;\nepsilon=1000/60/duration/4;}\n\n\nreturn _bezier(x1,y1,x2,y2,epsilon);}},{key:'in',value:function _in(\n\n\n\neasing)\n{\nreturn easing;}},{key:'out',value:function out(\n\n\n\n\n\n\neasing)\n{\nreturn function(t){return 1-easing(1-t);};}},{key:'inOut',value:function inOut(\n\n\n\n\n\n\neasing)\n{\nreturn function(t){\nif(t<0.5){\nreturn easing(t*2)/2;}\n\nreturn 1-easing((1-t)*2)/2;};}}]);return Easing;})();\n\n\n\n\nvar _ease=Easing.bezier(0.42,0,1,1);\n\n\n\nmodule.exports=Easing;\n});\n__d('bezier',function(global, require, module, exports) {  module.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nexports=function(x1,y1,x2,y2,epsilon){\n\nvar curveX=function(t){\nvar v=1-t;\nreturn 3*v*v*t*x1+3*v*t*t*x2+t*t*t;};\n\n\nvar curveY=function(t){\nvar v=1-t;\nreturn 3*v*v*t*y1+3*v*t*t*y2+t*t*t;};\n\n\nvar derivativeCurveX=function(t){\nvar v=1-t;\nreturn 3*(2*(t-1)*t+v*v)*x1+3*(-t*t*t+2*v*t)*x2;};\n\n\nreturn function(t){\n\nvar x=t,t0,t1,t2,x2,d2,i;\n\n\nfor(t2=x,i=0;i<8;i++){\nx2=curveX(t2)-x;\nif(Math.abs(x2)<epsilon)return curveY(t2);\nd2=derivativeCurveX(t2);\nif(Math.abs(d2)<1e-6)break;\nt2=t2-x2/d2;}\n\n\nt0=0,t1=1,t2=x;\n\nif(t2<t0)return curveY(t0);\nif(t2>t1)return curveY(t1);\n\n\nwhile(t0<t1){\nx2=curveX(t2);\nif(Math.abs(x2-x)<epsilon)return curveY(t2);\nif(x>x2)t0=t2;else \nt1=t2;\nt2=(t1-t0)*.5+t0;}\n\n\n\nreturn curveY(t2);};};\n});\n__d('SpringConfig',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction tensionFromOrigamiValue(oValue){\nreturn (oValue-30)*3.62+194;}\n\n\nfunction frictionFromOrigamiValue(oValue){\nreturn (oValue-8)*3+25;}\n\n\nfunction fromOrigamiTensionAndFriction(\ntension,\nfriction)\n{\nreturn {\ntension:tensionFromOrigamiValue(tension),\nfriction:frictionFromOrigamiValue(friction)};}\n\n\n\nfunction fromBouncinessAndSpeed(\nbounciness,\nspeed)\n{\nfunction normalize(value,startValue,endValue){\nreturn (value-startValue)/(endValue-startValue);}\n\n\nfunction projectNormal(n,start,end){\nreturn start+n*(end-start);}\n\n\nfunction linearInterpolation(t,start,end){\nreturn t*end+(1-t)*start;}\n\n\nfunction quadraticOutInterpolation(t,start,end){\nreturn linearInterpolation(2*t-t*t,start,end);}\n\n\nfunction b3Friction1(x){\nreturn 0.0007*Math.pow(x,3)-\n0.031*Math.pow(x,2)+0.64*x+1.28;}\n\n\nfunction b3Friction2(x){\nreturn 0.000044*Math.pow(x,3)-\n0.006*Math.pow(x,2)+0.36*x+2;}\n\n\nfunction b3Friction3(x){\nreturn 0.00000045*Math.pow(x,3)-\n0.000332*Math.pow(x,2)+0.1078*x+5.84;}\n\n\nfunction b3Nobounce(tension){\nif(tension<=18){\nreturn b3Friction1(tension);}else \nif(tension>18&&tension<=44){\nreturn b3Friction2(tension);}else \n{\nreturn b3Friction3(tension);}}\n\n\n\nvar b=normalize(bounciness/1.7,0,20);\nb=projectNormal(b,0,0.8);\nvar s=normalize(speed/1.7,0,20);\nvar bouncyTension=projectNormal(s,0.5,200);\nvar bouncyFriction=quadraticOutInterpolation(\nb,\nb3Nobounce(bouncyTension),\n0.01);\n\n\nreturn {\ntension:tensionFromOrigamiValue(bouncyTension),\nfriction:frictionFromOrigamiValue(bouncyFriction)};}\n\n\n\nmodule.exports={\nfromOrigamiTensionAndFriction:fromOrigamiTensionAndFriction,\nfromBouncinessAndSpeed:fromBouncinessAndSpeed};\n});\n__d('requestAnimationFrame',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\nemptyFunction=require('emptyFunction');\nvar nativeRequestAnimationFrame=require('nativeRequestAnimationFrame');\n\nvar lastTime=0;\n\nvar requestAnimationFrame=\nnativeRequestAnimationFrame||\nfunction(callback){\nvar currTime=Date.now();\nvar timeDelay=Math.max(0,16-(currTime-lastTime));\nlastTime=currTime+timeDelay;\nreturn global.setTimeout(function(){\ncallback(Date.now());},\ntimeDelay);};\n\n\n\nrequestAnimationFrame(emptyFunction);\n\nmodule.exports=requestAnimationFrame;\n});\n__d('nativeRequestAnimationFrame',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\nnativeRequestAnimationFrame=\nglobal.requestAnimationFrame||\nglobal.webkitRequestAnimationFrame||\nglobal.mozRequestAnimationFrame||\nglobal.oRequestAnimationFrame||\nglobal.msRequestAnimationFrame;\n\nmodule.exports=nativeRequestAnimationFrame;\n});\n__d('ViewPagerAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports=require('UnimplementedView');\n});\n__d('WebView',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ActivityIndicatorIOS=require('ActivityIndicatorIOS');\nvar EdgeInsetsPropType=require('EdgeInsetsPropType');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar View=require('View');\n\nvar invariant=require('invariant');\nvar keyMirror=require('keyMirror');\nvar requireNativeComponent=require('requireNativeComponent');\n\nvar PropTypes=React.PropTypes;\nvar RCTWebViewManager=require('NativeModules').WebViewManager;\n\nvar BGWASH='rgba(255,255,255,0.8)';\nvar RCT_WEBVIEW_REF='webview';\n\nvar WebViewState=keyMirror({\nIDLE:null,\nLOADING:null,\nERROR:null});\n\n\nvar NavigationType={\nclick:RCTWebViewManager.NavigationType.LinkClicked,\nformsubmit:RCTWebViewManager.NavigationType.FormSubmitted,\nbackforward:RCTWebViewManager.NavigationType.BackForward,\nreload:RCTWebViewManager.NavigationType.Reload,\nformresubmit:RCTWebViewManager.NavigationType.FormResubmitted,\nother:RCTWebViewManager.NavigationType.Other};\n\n\nvar JSNavigationScheme=RCTWebViewManager.JSNavigationScheme;\n\n\n\n\n\n\n\n\n\nvar defaultRenderLoading=function(){return (\nReact.createElement(View,{style:styles.loadingView},\nReact.createElement(ActivityIndicatorIOS,null)));};\n\n\nvar defaultRenderError=function(errorDomain,errorCode,errorDesc){return (\nReact.createElement(View,{style:styles.errorContainer},\nReact.createElement(Text,{style:styles.errorTextTitle},'Error loading page'),\n\n\nReact.createElement(Text,{style:styles.errorText},\n'Domain: '+errorDomain),\n\nReact.createElement(Text,{style:styles.errorText},\n'Error Code: '+errorCode),\n\nReact.createElement(Text,{style:styles.errorText},\n'Description: '+errorDesc)));};\n\n\n\n\n\n\n\n\n\n\nvar WebView=React.createClass({displayName:'WebView',\nstatics:{\nJSNavigationScheme:JSNavigationScheme,\nNavigationType:NavigationType},\n\n\npropTypes:babelHelpers.extends({},\nView.propTypes,{\nurl:PropTypes.string,\nhtml:PropTypes.string,\nrenderError:PropTypes.func,\nrenderLoading:PropTypes.func,\nbounces:PropTypes.bool,\nscrollEnabled:PropTypes.bool,\nautomaticallyAdjustContentInsets:PropTypes.bool,\ncontentInset:EdgeInsetsPropType,\nonNavigationStateChange:PropTypes.func,\nstartInLoadingState:PropTypes.bool,\nstyle:View.propTypes.style,\n\n\n\n\n\njavaScriptEnabledAndroid:PropTypes.bool,\n\n\n\n\ninjectedJavaScript:PropTypes.string,\n\n\n\n\n\nscalesPageToFit:PropTypes.bool,\n\n\n\n\n\n\nonShouldStartLoadWithRequest:PropTypes.func,\n\n\n\n\n\n\n\n\n\n\nallowsInlineMediaPlayback:PropTypes.bool}),\n\n\ngetInitialState:function(){\nreturn {\nviewState:WebViewState.IDLE,\nlastErrorEvent:null,\nstartInLoadingState:true};},\n\n\n\ncomponentWillMount:function(){\nif(this.props.startInLoadingState){\nthis.setState({viewState:WebViewState.LOADING});}},\n\n\n\nrender:function(){var _this=this;\nvar otherView=null;\n\nif(this.state.viewState===WebViewState.LOADING){\notherView=(this.props.renderLoading||defaultRenderLoading)();}else \nif(this.state.viewState===WebViewState.ERROR){\nvar errorEvent=this.state.lastErrorEvent;\ninvariant(\nerrorEvent!=null,\n'lastErrorEvent expected to be non-null');\n\notherView=(this.props.renderError||defaultRenderError)(\nerrorEvent.domain,\nerrorEvent.code,\nerrorEvent.description);}else \n\nif(this.state.viewState!==WebViewState.IDLE){\nconsole.error(\n'RCTWebView invalid state encountered: '+this.state.loading);}\n\n\n\nvar webViewStyles=[styles.container,styles.webView,this.props.style];\nif(this.state.viewState===WebViewState.LOADING||\nthis.state.viewState===WebViewState.ERROR){\n\nwebViewStyles.push(styles.hidden);}\n\n\nvar onShouldStartLoadWithRequest=this.props.onShouldStartLoadWithRequest&&function(event){\nvar shouldStart=_this.props.onShouldStartLoadWithRequest&&\n_this.props.onShouldStartLoadWithRequest(event.nativeEvent);\nRCTWebViewManager.startLoadWithResult(!!shouldStart,event.nativeEvent.lockIdentifier);};\n\n\nvar webView=\nReact.createElement(RCTWebView,{\nref:RCT_WEBVIEW_REF,\nkey:'webViewKey',\nstyle:webViewStyles,\nurl:this.props.url,\nhtml:this.props.html,\ninjectedJavaScript:this.props.injectedJavaScript,\nbounces:this.props.bounces,\nscrollEnabled:this.props.scrollEnabled,\ncontentInset:this.props.contentInset,\nautomaticallyAdjustContentInsets:this.props.automaticallyAdjustContentInsets,\nonLoadingStart:this.onLoadingStart,\nonLoadingFinish:this.onLoadingFinish,\nonLoadingError:this.onLoadingError,\nonShouldStartLoadWithRequest:onShouldStartLoadWithRequest,\nscalesPageToFit:this.props.scalesPageToFit,\nallowsInlineMediaPlayback:this.props.allowsInlineMediaPlayback});\n\n\nreturn (\nReact.createElement(View,{style:styles.container},\nwebView,\notherView));},\n\n\n\n\ngoForward:function(){\nRCTWebViewManager.goForward(this.getWebViewHandle());},\n\n\ngoBack:function(){\nRCTWebViewManager.goBack(this.getWebViewHandle());},\n\n\nreload:function(){\nRCTWebViewManager.reload(this.getWebViewHandle());},\n\n\n\n\n\n\nupdateNavigationState:function(event){\nif(this.props.onNavigationStateChange){\nthis.props.onNavigationStateChange(event.nativeEvent);}},\n\n\n\ngetWebViewHandle:function(){\nreturn React.findNodeHandle(this.refs[RCT_WEBVIEW_REF]);},\n\n\nonLoadingStart:function(event){\nthis.updateNavigationState(event);},\n\n\nonLoadingError:function(event){\nevent.persist();\nconsole.warn('Encountered an error loading page',event.nativeEvent);\n\nthis.setState({\nlastErrorEvent:event.nativeEvent,\nviewState:WebViewState.ERROR});},\n\n\n\nonLoadingFinish:function(event){\nthis.setState({\nviewState:WebViewState.IDLE});\n\nthis.updateNavigationState(event);}});\n\n\n\nvar RCTWebView=requireNativeComponent('RCTWebView',WebView,{\nnativeOnly:{\nonLoadingStart:true,\nonLoadingError:true,\nonLoadingFinish:true}});\n\n\n\nvar styles=StyleSheet.create({\ncontainer:{\nflex:1},\n\nerrorContainer:{\nflex:1,\njustifyContent:'center',\nalignItems:'center',\nbackgroundColor:BGWASH},\n\nerrorText:{\nfontSize:14,\ntextAlign:'center',\nmarginBottom:2},\n\nerrorTextTitle:{\nfontSize:15,\nfontWeight:'500',\nmarginBottom:10},\n\nhidden:{\nheight:0,\nflex:0},\n\nloadingView:{\nbackgroundColor:BGWASH,\nflex:1,\njustifyContent:'center',\nalignItems:'center'},\n\nwebView:{\nbackgroundColor:'#ffffff'}});\n\n\n\nmodule.exports=WebView;\n});\n__d('ActionSheetIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTActionSheetManager=require('NativeModules').ActionSheetManager;\n\nvar invariant=require('invariant');\n\nvar ActionSheetIOS={\nshowActionSheetWithOptions:function(options,callback){\ninvariant(\ntypeof options==='object'&&options!==null,\n'Options must a valid object');\n\ninvariant(\ntypeof callback==='function',\n'Must provide a valid callback');\n\nRCTActionSheetManager.showActionSheetWithOptions(\noptions,\ncallback);},\n\n\n\nshowShareActionSheetWithOptions:function(\noptions,\nfailureCallback,\nsuccessCallback)\n{\ninvariant(\ntypeof options==='object'&&options!==null,\n'Options must a valid object');\n\ninvariant(\ntypeof failureCallback==='function',\n'Must provide a valid failureCallback');\n\ninvariant(\ntypeof successCallback==='function',\n'Must provide a valid successCallback');\n\nRCTActionSheetManager.showShareActionSheetWithOptions(\noptions,\nfailureCallback,\nsuccessCallback);}};\n\n\n\n\nmodule.exports=ActionSheetIOS;\n});\n__d('AdSupportIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar AdSupport=require('NativeModules').AdSupport;\n\nmodule.exports={\ngetAdvertisingId:function(onSuccess,onFailure){\nAdSupport.getAdvertisingId(onSuccess,onFailure);},\n\n\ngetAdvertisingTrackingEnabled:function(onSuccess,onFailure){\nAdSupport.getAdvertisingTrackingEnabled(onSuccess,onFailure);}};\n});\n__d('AlertIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTAlertManager=require('NativeModules').AlertManager;\nvar invariant=require('invariant');\n\nvar DEFAULT_BUTTON_TEXT='OK';\nvar DEFAULT_BUTTON={\ntext:DEFAULT_BUTTON_TEXT,\nonPress:null};var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nAlertIOS=(function(){function AlertIOS(){babelHelpers.classCallCheck(this,AlertIOS);}babelHelpers.createClass(AlertIOS,null,[{key:'alert',value:function alert(\n\ntitle,\nmessage,\nbuttons,\n\n\n\ntype)\n{\nvar callbacks=[];\nvar buttonsSpec=[];\ntitle=title||'';\nmessage=message||'';\nbuttons=buttons||[DEFAULT_BUTTON];\ntype=type||'';\n\nbuttons.forEach(function(btn,index){\ncallbacks[index]=btn.onPress;\nvar btnDef={};\nbtnDef[index]=btn.text||DEFAULT_BUTTON_TEXT;\nbuttonsSpec.push(btnDef);});\n\nRCTAlertManager.alertWithArgs({\ntitle:title,\nmessage:message,\nbuttons:buttonsSpec,\ntype:type},\nfunction(id,value){\nvar cb=callbacks[id];\ncb&&cb(value);});}},{key:'prompt',value:function prompt(\n\n\n\n\ntitle,\nvalue,\nbuttons,\n\n\n\ncallback)\n{\nif(arguments.length===2){\nif(typeof value==='object'){\nbuttons=value;\nvalue=undefined;}else \nif(typeof value==='function'){\ncallback=value;\nvalue=undefined;}}else \n\nif(arguments.length===3&&typeof buttons==='function'){\ncallback=buttons;\nbuttons=undefined;}\n\n\ninvariant(\n!(callback&&buttons)&&(callback||buttons),\n'Must provide either a button list or a callback, but not both');\n\n\nif(!buttons){\nbuttons=[{\ntext:'Cancel'},\n{\ntext:'OK',\nonPress:callback}];}\n\n\nthis.alert(title,value,buttons,'plain-text');}}]);return AlertIOS;})();\n\n\n\nmodule.exports=AlertIOS;\n});\n__d('AppRegistry',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\nvar renderApplication=require('renderApplication');\n\nif(__DEV__){\n\n\nrequire('RCTRenderingPerf');}\n\n\nvar runnables={};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AppRegistry={\nregisterConfig:function(config){\nfor(var i=0;i<config.length;++i){\nvar appConfig=config[i];\nif(appConfig.run){\nAppRegistry.registerRunnable(appConfig.appKey,appConfig.run);}else \n{\ninvariant(appConfig.component,'No component provider passed in');\nAppRegistry.registerComponent(appConfig.appKey,appConfig.component);}}},\n\n\n\n\nregisterComponent:function(appKey,getComponentFunc){\nrunnables[appKey]={\nrun:function(appParameters){return (\nrenderApplication(getComponentFunc(),appParameters.initialProps,appParameters.rootTag));}};\n\nreturn appKey;},\n\n\nregisterRunnable:function(appKey,func){\nrunnables[appKey]={run:func};\nreturn appKey;},\n\n\ngetAppKeys:function(){\nreturn Object.keys(runnables);},\n\n\nrunApplication:function(appKey,appParameters){\nconsole.log(\n'Running application \"'+appKey+'\" with appParams: '+\nJSON.stringify(appParameters)+'. '+\n'__DEV__ === '+String(__DEV__)+\n', development-level warning are '+(__DEV__?'ON':'OFF')+\n', performance optimizations are '+(__DEV__?'OFF':'ON'));\n\ninvariant(\nrunnables[appKey]&&runnables[appKey].run,\n'Application '+appKey+' has not been registered. This '+\n'is either due to a require() error during initialization '+\n'or failure to call AppRegistry.registerComponent.');\n\nrunnables[appKey].run(appParameters);}};\n\n\n\nmodule.exports=AppRegistry;\n});\n__d('renderApplication',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Subscribable=require('Subscribable');\nvar View=require('View');\n\nvar invariant=require('invariant');\n\nvar Inspector=__DEV__?require('Inspector'):null;\nvar YellowBox=__DEV__?require('YellowBox'):null;\n\nvar AppContainer=React.createClass({displayName:'AppContainer',\nmixins:[Subscribable.Mixin],\n\ngetInitialState:function(){\nreturn {inspector:null};},\n\n\ntoggleElementInspector:function(){\nvar inspector=!__DEV__||this.state.inspector?\nnull:\nReact.createElement(Inspector,{\nrootTag:this.props.rootTag,\ninspectedViewTag:React.findNodeHandle(this.refs.main)});\n\nthis.setState({inspector:inspector});},\n\n\ncomponentDidMount:function(){\nthis.addListenerOn(\nRCTDeviceEventEmitter,\n'toggleElementInspector',\nthis.toggleElementInspector);},\n\n\n\nrender:function(){\nvar yellowBox=null;\nif(__DEV__){\nyellowBox=React.createElement(YellowBox,null);}\n\nreturn (\nReact.createElement(View,{style:styles.appContainer},\nReact.createElement(View,{collapsible:false,style:styles.appContainer,ref:'main'},\nthis.props.children),\n\nyellowBox,\nthis.state.inspector));}});\n\n\n\n\n\nfunction renderApplication(\nRootComponent,\ninitialProps,\nrootTag)\n{\ninvariant(\nrootTag,\n'Expect to have a valid rootTag, instead got ',rootTag);\n\n\nReact.render(\nReact.createElement(AppContainer,{rootTag:rootTag},\nReact.createElement(RootComponent,babelHelpers.extends({},\ninitialProps,{\nrootTag:rootTag}))),\n\n\nrootTag);}\n\n\n\n\nvar styles=StyleSheet.create({\nappContainer:{\nflex:1}});\n\n\n\nmodule.exports=renderApplication;\n});\n__d('Inspector',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dimensions=require('Dimensions');\nvar InspectorOverlay=require('InspectorOverlay');\nvar InspectorPanel=require('InspectorPanel');\nvar InspectorUtils=require('InspectorUtils');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar UIManager=require('NativeModules').UIManager;\nvar View=require('View');\n\nif(window.__REACT_DEVTOOLS_GLOBAL_HOOK__){\n\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.resolveRNStyle=require('flattenStyle');}var \n\n\nInspector=(function(_React$Component){babelHelpers.inherits(Inspector,_React$Component);\n\n\nfunction Inspector(props){babelHelpers.classCallCheck(this,Inspector);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Inspector).call(this,\nprops));\n\n_this.state={\ndevtoolsAgent:null,\npanelPos:'bottom',\ninspecting:true,\nperfing:false,\ninspected:null};return _this;}babelHelpers.createClass(Inspector,[{key:'componentDidMount',value:function componentDidMount()\n\n\n\n{\nif(window.__REACT_DEVTOOLS_GLOBAL_HOOK__){\nthis.attachToDevtools=this.attachToDevtools.bind(this);\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.on('react-devtools',this.attachToDevtools);\n\nif(window.__REACT_DEVTOOLS_GLOBAL_HOOK__.reactDevtoolsAgent){\nthis.attachToDevtools(window.__REACT_DEVTOOLS_GLOBAL_HOOK__.reactDevtoolsAgent);}}}},{key:'componentWillUnmount',value:function componentWillUnmount()\n\n\n\n\n{\nif(this._subs){\nthis._subs.map(function(fn){return fn();});}\n\nif(window.__REACT_DEVTOOLS_GLOBAL_HOOK__){\nwindow.__REACT_DEVTOOLS_GLOBAL_HOOK__.off('react-devtools',this.attachToDevtools);}}},{key:'attachToDevtools',value:function attachToDevtools(\n\n\n\nagent){var _this2=this;\nvar _hideWait=null;\nvar hlSub=agent.sub('highlight',function(_ref){var node=_ref.node;var name=_ref.name;var props=_ref.props;\nclearTimeout(_hideWait);\nUIManager.measure(node,function(x,y,width,height,left,top){\n_this2.setState({\nhierarchy:[],\ninspected:{\nframe:{left:left,top:top,width:width,height:height},\nstyle:props?props.style:{}}});});});\n\n\n\n\nvar hideSub=agent.sub('hideHighlight',function(){\nif(_this2.state.inspected===null){\nreturn;}\n\n\n_hideWait=setTimeout(function(){\n_this2.setState({\ninspected:null});},\n\n100);});\n\nthis._subs=[hlSub,hideSub];\n\nagent.on('shutdown',function(){\n_this2.setState({devtoolsAgent:null});\n_this2._subs=null;});\n\nthis.setState({\ndevtoolsAgent:agent});}},{key:'setSelection',value:function setSelection(\n\n\n\ni){var _this3=this;\nvar instance=this.state.hierarchy[i];\nvar publicInstance=instance.getPublicInstance();\nUIManager.measure(React.findNodeHandle(instance),function(x,y,width,height,left,top){\n_this3.setState({\ninspected:{\nframe:{left:left,top:top,width:width,height:height},\nstyle:publicInstance.props?publicInstance.props.style:{}},\n\nselection:i});});}},{key:'onTouchInstance',value:function onTouchInstance(\n\n\n\n\ninstance,frame,pointerY){\nif(this.state.devtoolsAgent){\nthis.state.devtoolsAgent.selectFromReactInstance(instance,true);}\n\nvar hierarchy=InspectorUtils.getOwnerHierarchy(instance);\nvar publicInstance=instance.getPublicInstance();\nvar props=publicInstance.props||{};\nthis.setState({\npanelPos:pointerY>Dimensions.get('window').height/2?'top':'bottom',\nselection:hierarchy.length-1,\nhierarchy:hierarchy,\ninspected:{\nstyle:props.style||{},\nframe:frame}});}},{key:'setPerfing',value:function setPerfing(\n\n\n\n\nval){\nthis.setState({\nperfing:val,\ninspecting:false,\ninspected:null});}},{key:'setInspecting',value:function setInspecting(\n\n\n\nval){\nthis.setState({\ninspecting:val,\ninspected:null});}},{key:'render',value:function render()\n\n\n\n{\nvar panelContainerStyle=this.state.panelPos==='bottom'?{bottom:0}:{top:0};\nreturn (\nReact.createElement(View,{style:styles.container,pointerEvents:'box-none'},\nthis.state.inspecting&&\nReact.createElement(InspectorOverlay,{\nrootTag:this.props.rootTag,\ninspected:this.state.inspected,\ninspectedViewTag:this.props.inspectedViewTag,\nonTouchInstance:this.onTouchInstance.bind(this)}),\n\nReact.createElement(View,{style:[styles.panelContainer,panelContainerStyle]},\nReact.createElement(InspectorPanel,{\ndevtoolsIsOpen:!!this.state.devtoolsAgent,\ninspecting:this.state.inspecting,\nperfing:this.state.perfing,\nsetPerfing:this.setPerfing.bind(this),\nsetInspecting:this.setInspecting.bind(this),\ninspected:this.state.inspected,\nhierarchy:this.state.hierarchy,\nselection:this.state.selection,\nsetSelection:this.setSelection.bind(this)}))));}}]);return Inspector;})(React.Component);\n\n\n\n\n\n\n\nvar styles=StyleSheet.create({\ncontainer:{\nposition:'absolute',\nbackgroundColor:'transparent',\ntop:0,\nleft:0,\nright:0,\nbottom:0},\n\npanelContainer:{\nposition:'absolute',\nleft:0,\nright:0}});\n\n\n\nmodule.exports=Inspector;\n});\n__d('InspectorOverlay',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Dimensions=require('Dimensions');\nvar InspectorUtils=require('InspectorUtils');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar UIManager=require('NativeModules').UIManager;\nvar View=require('View');\nvar ElementBox=require('ElementBox');\n\nvar PropTypes=React.PropTypes;\n\n\n\n\n\nvar InspectorOverlay=React.createClass({displayName:'InspectorOverlay',\npropTypes:{\ninspected:PropTypes.shape({\nframe:PropTypes.object,\nstyle:PropTypes.any}),\n\ninspectedViewTag:PropTypes.number,\nonTouchInstance:PropTypes.func.isRequired},\n\n\nfindViewForTouchEvent:function(e){var _this=this;var _e$nativeEvent$touche=\ne.nativeEvent.touches[0];var locationX=_e$nativeEvent$touche.locationX;var locationY=_e$nativeEvent$touche.locationY;\nUIManager.findSubviewIn(\nthis.props.inspectedViewTag,\n[locationX,locationY],\nfunction(nativeViewTag,left,top,width,height){\nvar instance=InspectorUtils.findInstanceByNativeTag(_this.props.rootTag,nativeViewTag);\nif(!instance){\nreturn;}\n\n_this.props.onTouchInstance(instance,{left:left,top:top,width:width,height:height},locationY);});},\n\n\n\n\nshouldSetResponser:function(e){\nthis.findViewForTouchEvent(e);\nreturn true;},\n\n\nrender:function(){\nvar content=null;\nif(this.props.inspected){\ncontent=React.createElement(ElementBox,{frame:this.props.inspected.frame,style:this.props.inspected.style});}\n\n\nreturn (\nReact.createElement(View,{\nonStartShouldSetResponder:this.shouldSetResponser,\nonResponderMove:this.findViewForTouchEvent,\nstyle:[styles.inspector,{height:Dimensions.get('window').height}]},\ncontent));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\ninspector:{\nbackgroundColor:'transparent',\nposition:'absolute',\nleft:0,\ntop:0,\nright:0}});\n\n\n\nmodule.exports=InspectorOverlay;\n});\n__d('ElementBox',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar View=require('View');\nvar StyleSheet=require('StyleSheet');\nvar BorderBox=require('BorderBox');\nvar resolveBoxStyle=require('resolveBoxStyle');\n\nvar flattenStyle=require('flattenStyle');var \n\nElementBox=(function(_React$Component){babelHelpers.inherits(ElementBox,_React$Component);function ElementBox(){babelHelpers.classCallCheck(this,ElementBox);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(ElementBox).apply(this,arguments));}babelHelpers.createClass(ElementBox,[{key:'render',value:function render()\n{\nvar style=flattenStyle(this.props.style)||{};\nvar margin=resolveBoxStyle('margin',style);\nvar padding=resolveBoxStyle('padding',style);\nvar frameStyle=this.props.frame;\nif(margin){\nframeStyle={\ntop:frameStyle.top-margin.top,\nleft:frameStyle.left-margin.left,\nheight:frameStyle.height+margin.top+margin.bottom,\nwidth:frameStyle.width+margin.left+margin.right};}\n\n\nvar contentStyle={\nwidth:this.props.frame.width,\nheight:this.props.frame.height};\n\nif(padding){\ncontentStyle={\nwidth:contentStyle.width-padding.left-padding.right,\nheight:contentStyle.height-padding.top-padding.bottom};}\n\n\nreturn (\nReact.createElement(View,{style:[styles.frame,frameStyle],pointerEvents:'none'},\nReact.createElement(BorderBox,{box:margin,style:styles.margin},\nReact.createElement(BorderBox,{box:padding,style:styles.padding},\nReact.createElement(View,{style:[styles.content,contentStyle]})))));}}]);return ElementBox;})(React.Component);\n\n\n\n\n\n\n\nvar styles=StyleSheet.create({\nframe:{\nposition:'absolute'},\n\ncontent:{\nbackgroundColor:'rgba(200, 230, 255, 0.8)'},\n\npadding:{\nborderColor:'rgba(77, 255, 0, 0.3)'},\n\nmargin:{\nborderColor:'rgba(255, 132, 0, 0.3)'}});\n\n\n\nmodule.exports=ElementBox;\n});\n__d('BorderBox',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar View=require('View');var \n\nBorderBox=(function(_React$Component){babelHelpers.inherits(BorderBox,_React$Component);function BorderBox(){babelHelpers.classCallCheck(this,BorderBox);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(BorderBox).apply(this,arguments));}babelHelpers.createClass(BorderBox,[{key:'render',value:function render()\n{\nvar box=this.props.box;\nif(!box){\nreturn this.props.children;}\n\nvar style={\nborderTopWidth:box.top,\nborderBottomWidth:box.bottom,\nborderLeftWidth:box.left,\nborderRightWidth:box.right};\n\nreturn (\nReact.createElement(View,{style:[style,this.props.style]},\nthis.props.children));}}]);return BorderBox;})(React.Component);\n\n\n\n\n\nmodule.exports=BorderBox;\n});\n__d('resolveBoxStyle',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction resolveBoxStyle(prefix,style){\nvar res={};\nvar subs=['top','left','bottom','right'];\nvar set=false;\nsubs.forEach(function(sub){\nres[sub]=style[prefix]||0;});\n\nif(style[prefix]){\nset=true;}\n\nif(style[prefix+'Vertical']){\nres.top=res.bottom=style[prefix+'Vertical'];\nset=true;}\n\nif(style[prefix+'Horizontal']){\nres.left=res.right=style[prefix+'Horizontal'];\nset=true;}\n\nsubs.forEach(function(sub){\nvar val=style[prefix+capFirst(sub)];\nif(val){\nres[sub]=val;\nset=true;}});\n\n\nif(!set){\nreturn;}\n\nreturn res;}\n\n\nfunction capFirst(text){\nreturn text[0].toUpperCase()+text.slice(1);}\n\n\nmodule.exports=resolveBoxStyle;\n});\n__d('InspectorPanel',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar View=require('View');\nvar ElementProperties=require('ElementProperties');\nvar PerformanceOverlay=require('PerformanceOverlay');\nvar TouchableHighlight=require('TouchableHighlight');\n\nvar PropTypes=React.PropTypes;var \n\nInspectorPanel=(function(_React$Component){babelHelpers.inherits(InspectorPanel,_React$Component);function InspectorPanel(){babelHelpers.classCallCheck(this,InspectorPanel);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(InspectorPanel).apply(this,arguments));}babelHelpers.createClass(InspectorPanel,[{key:'renderWaiting',value:function renderWaiting()\n{\nif(this.props.inspecting){\nreturn (\nReact.createElement(Text,{style:styles.waitingText},'Tap something to inspect it'));}\n\n\n\n\nreturn React.createElement(Text,{style:styles.waitingText},'Nothing is inspected');}},{key:'render',value:function render()\n\n\n{\nvar contents;\nif(this.props.inspected){\ncontents=\nReact.createElement(ElementProperties,{\nstyle:this.props.inspected.style,\nframe:this.props.inspected.frame,\nhierarchy:this.props.hierarchy,\nselection:this.props.selection,\nsetSelection:this.props.setSelection});}else \n\n\nif(this.props.perfing){\ncontents=\nReact.createElement(PerformanceOverlay,null);}else \n\n{\ncontents=\nReact.createElement(View,{style:styles.waiting},\nthis.renderWaiting());}\n\n\n\nreturn (\nReact.createElement(View,{style:styles.container},\n!this.props.devtoolsIsOpen&&contents,\nReact.createElement(View,{style:styles.buttonRow},\nReact.createElement(Button,{\ntitle:'Inspect',\npressed:this.props.inspecting,\nonClick:this.props.setInspecting}),\n\nReact.createElement(Button,{title:'Perf',\npressed:this.props.perfing,\nonClick:this.props.setPerfing}))));}}]);return InspectorPanel;})(React.Component);\n\n\n\n\n\n\n\nInspectorPanel.propTypes={\ndevtoolsIsOpen:PropTypes.bool,\ninspecting:PropTypes.bool,\nsetInspecting:PropTypes.func,\ninspected:PropTypes.object,\nperfing:PropTypes.bool,\nsetPerfing:PropTypes.func};var \n\n\nButton=(function(_React$Component2){babelHelpers.inherits(Button,_React$Component2);function Button(){babelHelpers.classCallCheck(this,Button);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Button).apply(this,arguments));}babelHelpers.createClass(Button,[{key:'render',value:function render()\n{var _this3=this;\nreturn (\nReact.createElement(TouchableHighlight,{onPress:function(){return _this3.props.onClick(!_this3.props.pressed);},style:[\nstyles.button,\nthis.props.pressed&&styles.buttonPressed]},\n\nReact.createElement(Text,{style:styles.buttonText},this.props.title)));}}]);return Button;})(React.Component);\n\n\n\n\n\nvar styles=StyleSheet.create({\nbuttonRow:{\nflexDirection:'row'},\n\nbutton:{\nbackgroundColor:'rgba(0, 0, 0, 0.3)',\nmargin:2,\nheight:30,\njustifyContent:'center',\nalignItems:'center'},\n\nbuttonPressed:{\nbackgroundColor:'rgba(255, 255, 255, 0.3)'},\n\nbuttonText:{\ntextAlign:'center',\ncolor:'white',\nmargin:5},\n\ncontainer:{\nbackgroundColor:'rgba(0, 0, 0, 0.7)'},\n\nwaiting:{\nheight:100},\n\nwaitingText:{\nfontSize:20,\ntextAlign:'center',\nmarginVertical:20}});\n\n\n\nmodule.exports=InspectorPanel;\n});\n__d('ElementProperties',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar BoxInspector=require('BoxInspector');\nvar PropTypes=require('ReactPropTypes');\nvar React=require('React');\nvar StyleInspector=require('StyleInspector');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar TouchableHighlight=require('TouchableHighlight');\nvar TouchableWithoutFeedback=require('TouchableWithoutFeedback');\nvar View=require('View');\n\nvar flattenStyle=require('flattenStyle');\nvar mapWithSeparator=require('mapWithSeparator');\n\nvar ElementProperties=React.createClass({displayName:'ElementProperties',\npropTypes:{\nhierarchy:PropTypes.array.isRequired,\nstyle:PropTypes.oneOfType([\nPropTypes.object,\nPropTypes.array,\nPropTypes.number])},\n\n\n\nrender:function(){var _this=this;\nvar style=flattenStyle(this.props.style);\nvar selection=this.props.selection;\n\n\nreturn (\nReact.createElement(TouchableWithoutFeedback,null,\nReact.createElement(View,{style:styles.info},\nReact.createElement(View,{style:styles.breadcrumb},\nmapWithSeparator(\nthis.props.hierarchy,\nfunction(item,i){return (\nReact.createElement(TouchableHighlight,{\nstyle:[styles.breadItem,i===selection&&styles.selected],\nonPress:function(){return _this.props.setSelection(i);}},\nReact.createElement(Text,{style:styles.breadItemText},\nitem.getName?item.getName():'Unknown')));},\n\n\n\nfunction(){return React.createElement(Text,{style:styles.breadSep},'▸');})),\n\n\nReact.createElement(View,{style:styles.row},\nReact.createElement(StyleInspector,{style:style}),\nReact.createElement(BoxInspector,{style:style,frame:this.props.frame})))));}});\n\n\n\n\n\n\n\nvar styles=StyleSheet.create({\nbreadSep:{\nfontSize:8,\ncolor:'white'},\n\nbreadcrumb:{\nflexDirection:'row',\nflexWrap:'wrap',\nmarginBottom:5},\n\nselected:{\nborderColor:'white',\nborderRadius:5},\n\nbreadItem:{\nborderWidth:1,\nborderColor:'transparent',\nmarginHorizontal:2},\n\nbreadItemText:{\nfontSize:10,\ncolor:'white',\nmarginHorizontal:5},\n\nrow:{\nflexDirection:'row',\nalignItems:'center',\njustifyContent:'space-between'},\n\ninfo:{\npadding:10},\n\npath:{\ncolor:'white',\nfontSize:9}});\n\n\n\nmodule.exports=ElementProperties;\n});\n__d('BoxInspector',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar View=require('View');\nvar resolveBoxStyle=require('resolveBoxStyle');\n\nvar blank={\ntop:0,\nleft:0,\nright:0,\nbottom:0};var \n\n\nBoxInspector=(function(_React$Component){babelHelpers.inherits(BoxInspector,_React$Component);function BoxInspector(){babelHelpers.classCallCheck(this,BoxInspector);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(BoxInspector).apply(this,arguments));}babelHelpers.createClass(BoxInspector,[{key:'render',value:function render()\n{\nvar frame=this.props.frame;\nvar style=this.props.style;\nvar margin=style&&resolveBoxStyle('margin',style)||blank;\nvar padding=style&&resolveBoxStyle('padding',style)||blank;\nreturn (\nReact.createElement(BoxContainer,{title:'margin',titleStyle:styles.marginLabel,box:margin},\nReact.createElement(BoxContainer,{title:'padding',box:padding},\nReact.createElement(View,null,\nReact.createElement(Text,{style:styles.innerText},'(',\nframe.left,', ',frame.top,')'),\n\nReact.createElement(Text,{style:styles.innerText},\nframe.width,' × ',frame.height)))));}}]);return BoxInspector;})(React.Component);var \n\n\n\n\n\n\n\n\nBoxContainer=(function(_React$Component2){babelHelpers.inherits(BoxContainer,_React$Component2);function BoxContainer(){babelHelpers.classCallCheck(this,BoxContainer);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(BoxContainer).apply(this,arguments));}babelHelpers.createClass(BoxContainer,[{key:'render',value:function render()\n{\nvar box=this.props.box;\nreturn (\nReact.createElement(View,{style:styles.box},\nReact.createElement(View,{style:styles.row},\nReact.createElement(Text,{style:[this.props.titleStyle,styles.label]},this.props.title),\nReact.createElement(Text,{style:styles.boxText},box.top)),\n\nReact.createElement(View,{style:styles.row},\nReact.createElement(Text,{style:styles.boxText},box.left),\nthis.props.children,\nReact.createElement(Text,{style:styles.boxText},box.right)),\n\nReact.createElement(Text,{style:styles.boxText},box.bottom)));}}]);return BoxContainer;})(React.Component);\n\n\n\n\n\nvar styles=StyleSheet.create({\nrow:{\nflexDirection:'row',\nalignItems:'center',\njustifyContent:'space-around'},\n\nmarginLabel:{\nwidth:60},\n\nlabel:{\nfontSize:10,\ncolor:'rgb(255,100,0)',\nmarginLeft:5,\nflex:1,\ntextAlign:'left',\ntop:-3},\n\nbuffer:{\nfontSize:10,\ncolor:'yellow',\nflex:1,\ntextAlign:'center'},\n\ninnerText:{\ncolor:'yellow',\nfontSize:12,\ntextAlign:'center',\nwidth:70},\n\nbox:{\nborderWidth:1,\nborderColor:'grey'},\n\nboxText:{\ncolor:'white',\nfontSize:12,\nmarginHorizontal:3,\nmarginVertical:2,\ntextAlign:'center'}});\n\n\n\nmodule.exports=BoxInspector;\n});\n__d('StyleInspector',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar View=require('View');var \n\nStyleInspector=(function(_React$Component){babelHelpers.inherits(StyleInspector,_React$Component);function StyleInspector(){babelHelpers.classCallCheck(this,StyleInspector);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(StyleInspector).apply(this,arguments));}babelHelpers.createClass(StyleInspector,[{key:'render',value:function render()\n{var _this2=this;\nif(!this.props.style){\nreturn React.createElement(Text,{style:styles.noStyle},'No style');}\n\nvar names=Object.keys(this.props.style);\nreturn (\nReact.createElement(View,{style:styles.container},\nReact.createElement(View,null,\nnames.map(function(name){return React.createElement(Text,{style:styles.attr},name,':');})),\n\nReact.createElement(View,null,\nnames.map(function(name){return React.createElement(Text,{style:styles.value},_this2.props.style[name]);}))));}}]);return StyleInspector;})(React.Component);\n\n\n\n\n\n\nvar styles=StyleSheet.create({\ncontainer:{\nflexDirection:'row'},\n\nrow:{\nflexDirection:'row',\nalignItems:'center',\njustifyContent:'space-around'},\n\nattr:{\nfontSize:10,\ncolor:'#ccc'},\n\nvalue:{\nfontSize:10,\ncolor:'white',\nmarginLeft:10},\n\nnoStyle:{\ncolor:'white',\nfontSize:10}});\n\n\n\nmodule.exports=StyleInspector;\n});\n__d('mapWithSeparator',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\nfunction mapWithSeparator(array,valueFunction,separatorFunction){\nvar results=[];\nfor(var i=0;i<array.length;i++){\nresults.push(valueFunction(array[i],i,array));\nif(i!==array.length-1){\nresults.push(separatorFunction(i));}}\n\n\nreturn results;}\n\n\nmodule.exports=mapWithSeparator;\n});\n__d('PerformanceOverlay',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar PerformanceLogger=require('PerformanceLogger');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\nvar Text=require('Text');\nvar View=require('View');\n\nvar PerformanceOverlay=React.createClass({displayName:'PerformanceOverlay',\nrender:function(){\nvar perfLogs=PerformanceLogger.getTimespans();\nvar items=[];\n\nfor(var key in perfLogs){\nif(perfLogs[key].totalTime){\nitems.push(\nReact.createElement(View,{style:styles.row},\nReact.createElement(Text,{style:[styles.text,styles.label]},key),\nReact.createElement(Text,{style:[styles.text,styles.totalTime]},\nperfLogs[key].totalTime+'ms')));}}\n\n\n\n\n\n\nreturn (\nReact.createElement(View,{style:styles.container},\nitems));}});\n\n\n\n\n\nvar styles=StyleSheet.create({\ncontainer:{\nheight:100,\npaddingTop:10},\n\nlabel:{\nflex:1},\n\nrow:{\nflexDirection:'row',\npaddingHorizontal:10},\n\ntext:{\ncolor:'white',\nfontSize:12},\n\ntotalTime:{\npaddingRight:100}});\n\n\n\nmodule.exports=PerformanceOverlay;\n});\n__d('YellowBox',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventEmitter=require('EventEmitter');\n\nvar Map=require('Map');\nvar Platform=require('Platform');\nvar React=require('React');\nvar StyleSheet=require('StyleSheet');\n\nvar _warningEmitter=new EventEmitter();\nvar _warningMap=new Map();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nif(__DEV__){(function(){var _console=\nconsole;var error=_console.error;var warn=_console.warn;\nconsole.error=function(){\nerror.apply(console,arguments);\n\nif(typeof arguments[0]==='string'&&\narguments[0].startsWith('Warning: ')){\nupdateWarningMap.apply(null,arguments);}};\n\n\nconsole.warn=function(){\nwarn.apply(console,arguments);\nupdateWarningMap.apply(null,arguments);};})();}\n\n\n\n\n\n\n\n\n\n\n\n\nfunction sprintf(format){for(var _len=arguments.length,args=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){args[_key-1]=arguments[_key];}\nvar index=0;\nreturn format.replace(/%s/g,function(match){return args[index++];});}\n\n\nfunction updateWarningMap(format){\nvar stringifySafe=require('stringifySafe');\n\nformat=String(format);\nvar argCount=(format.match(/%s/g)||[]).length;for(var _len2=arguments.length,args=Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){args[_key2-1]=arguments[_key2];}\nvar warning=[\nsprintf.apply(undefined,[format].concat(babelHelpers.toConsumableArray(args.slice(0,argCount))))].concat(babelHelpers.toConsumableArray(\nargs.slice(argCount).map(stringifySafe))).\njoin(' ');\n\nvar count=_warningMap.has(warning)?_warningMap.get(warning):0;\n_warningMap.set(warning,count+2);\n_warningEmitter.emit('warning',_warningMap);}\n\n\nfunction isWarningIgnored(warning){\nreturn (\nArray.isArray(console.ignoredYellowBox)&&\nconsole.ignoredYellowBox.some(\nfunction(ignorePrefix){return warning.startsWith(ignorePrefix);}));}\n\n\n\n\nvar WarningRow=function(_ref){var count=_ref.count;var warning=_ref.warning;var onPress=_ref.onPress;\nvar Text=require('Text');\nvar TouchableHighlight=require('TouchableHighlight');\nvar View=require('View');\n\nvar countText=count>1?\nReact.createElement(Text,{style:styles.listRowCount},'('+count+') '):\nnull;\n\nreturn (\nReact.createElement(View,{style:styles.listRow},\nReact.createElement(TouchableHighlight,{\nactiveOpacity:0.5,\nonPress:onPress,\nstyle:styles.listRowContent,\nunderlayColor:'transparent'},\nReact.createElement(Text,{style:styles.listRowText,numberOfLines:2},\ncountText,\nwarning))));};\n\n\n\n\n\n\nvar WarningInspector=function(_ref2){var count=_ref2.count;var warning=_ref2.warning;var onClose=_ref2.onClose;var onDismiss=_ref2.onDismiss;\nvar ScrollView=require('ScrollView');\nvar Text=require('Text');\nvar TouchableHighlight=require('TouchableHighlight');\nvar View=require('View');\n\nvar countSentence=\n'Warning encountered '+count+' time'+(count-1?'s':'')+'.';\n\nreturn (\nReact.createElement(TouchableHighlight,{\nactiveOpacity:0.95,\nunderlayColor:backgroundColor(0.8),\nonPress:onClose,\nstyle:styles.inspector},\nReact.createElement(View,{style:styles.inspectorContent},\nReact.createElement(View,{style:styles.inspectorCount},\nReact.createElement(Text,{style:styles.inspectorCountText},countSentence)),\n\nReact.createElement(ScrollView,{style:styles.inspectorWarning},\nReact.createElement(Text,{style:styles.inspectorWarningText},warning)),\n\nReact.createElement(View,{style:styles.inspectorButtons},\nReact.createElement(TouchableHighlight,{\nactiveOpacity:0.5,\nonPress:onDismiss,\nstyle:styles.inspectorButton,\nunderlayColor:'transparent'},\nReact.createElement(Text,{style:styles.inspectorButtonText},'Dismiss Warning'))))));};var \n\n\n\n\n\n\n\n\n\nYellowBox=(function(_React$Component){babelHelpers.inherits(YellowBox,_React$Component);\n\n\n\n\n\n\nfunction YellowBox(props,context){babelHelpers.classCallCheck(this,YellowBox);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(YellowBox).call(this,\nprops,context));\n_this.state={\ninspecting:null,\nwarningMap:_warningMap};\n\n_this.dismissWarning=function(warning){var _this$state=\n_this.state;var inspecting=_this$state.inspecting;var warningMap=_this$state.warningMap;\nwarningMap.delete(warning);\n_this.setState({\ninspecting:inspecting===warning?null:inspecting,\nwarningMap:warningMap});};return _this;}babelHelpers.createClass(YellowBox,[{key:'componentDidMount',value:function componentDidMount()\n\n\n\n\n{var _this2=this;\nvar scheduled=null;\nthis._listener=_warningEmitter.addListener('warning',function(warningMap){\n\n\nscheduled=scheduled||setImmediate(function(){\nscheduled=null;\n_this2.setState({\nwarningMap:warningMap});});});}},{key:'componentWillUnmount',value:function componentWillUnmount()\n\n\n\n\n\n{\nif(this._listener){\nthis._listener.remove();}}},{key:'render',value:function render()\n\n\n\n{var _this3=this;\nif(console.disableYellowBox||this.state.warningMap.size===0){\nreturn null;}\n\nvar ScrollView=require('ScrollView');\nvar View=require('View');\n\nvar inspecting=this.state.inspecting;\nvar inspector=inspecting!==null?\nReact.createElement(WarningInspector,{\ncount:this.state.warningMap.get(inspecting),\nwarning:inspecting,\nonClose:function(){return _this3.setState({inspecting:null});},\nonDismiss:function(){return _this3.dismissWarning(inspecting);}}):\n\nnull;\n\nvar rows=[];\nthis.state.warningMap.forEach(function(count,warning){\nif(!isWarningIgnored(warning)){\nrows.push(\nReact.createElement(WarningRow,{\nkey:warning,\ncount:count,\nwarning:warning,\nonPress:function(){return _this3.setState({inspecting:warning});},\nonDismiss:function(){return _this3.dismissWarning(warning);}}));}});\n\n\n\n\n\nvar listStyle=[\nstyles.list,\n\n{height:Math.min(rows.length,4.4)*(rowGutter+rowHeight)}];\n\nreturn (\nReact.createElement(View,{style:inspector?styles.fullScreen:listStyle},\nReact.createElement(ScrollView,{style:listStyle},\nrows),\n\ninspector));}}]);return YellowBox;})(React.Component);\n\n\n\n\n\nvar backgroundColor=function(opacity){return 'rgba(250, 186, 48, '+opacity+')';};\nvar textColor='white';\nvar rowGutter=1;\nvar rowHeight=46;\n\nvar styles=StyleSheet.create({\nfullScreen:{\nbackgroundColor:'transparent',\nposition:'absolute',\nleft:0,\nright:0,\ntop:0,\nbottom:0},\n\ninspector:{\nbackgroundColor:backgroundColor(0.95),\nflex:1},\n\ninspectorContainer:{\nflex:1},\n\ninspectorButtons:{\nflexDirection:'row',\nposition:'absolute',\nleft:0,\nright:0,\nbottom:0},\n\ninspectorButton:{\npadding:22,\nposition:'absolute',\nleft:0,\nright:0,\nbottom:0},\n\ninspectorButtonText:{\ncolor:textColor,\nfontSize:14,\nopacity:0.8,\ntextAlign:'center'},\n\ninspectorContent:{\nflex:1,\npaddingTop:5},\n\ninspectorCount:{\npadding:15,\npaddingBottom:0},\n\ninspectorCountText:{\ncolor:textColor,\nfontSize:14},\n\ninspectorWarning:{\npadding:15,\nposition:'absolute',\ntop:39,\nbottom:60},\n\ninspectorWarningText:{\ncolor:textColor,\nfontSize:16,\nfontWeight:'600'},\n\nlist:{\nbackgroundColor:'transparent',\nposition:'absolute',\nleft:0,\nright:0,\nbottom:0},\n\nlistRow:{\nposition:'relative',\nbackgroundColor:backgroundColor(0.95),\nflex:1,\nheight:rowHeight,\nmarginTop:rowGutter},\n\nlistRowContent:{\nflex:1},\n\nlistRowCount:{\ncolor:'rgba(255, 255, 255, 0.5)'},\n\nlistRowText:{\ncolor:textColor,\nposition:'absolute',\nleft:0,\ntop:Platform.OS==='android'?5:7,\nmarginLeft:15,\nmarginRight:15}});\n\n\n\nmodule.exports=YellowBox;\n});\n__d('RCTRenderingPerf',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactDefaultPerf=require('ReactDefaultPerf');\n\nvar invariant=require('invariant');\n\n\n\n\n\n\nvar perfModules=[];\nvar enabled=false;\n\nvar RCTRenderingPerf={\n\ntoggle:function(){\nconsole.log('Render perfomance measurements enabled');\nenabled=true;},\n\n\nstart:function(){\nif(!enabled){\nreturn;}\n\n\nReactDefaultPerf.start();\nperfModules.forEach(function(module){return module.start();});},\n\n\nstop:function(){\nif(!enabled){\nreturn;}\n\n\nReactDefaultPerf.stop();\nReactDefaultPerf.printInclusive();\nReactDefaultPerf.printWasted();\n\nvar totalRender=0;\nvar totalTime=0;\nvar measurements=ReactDefaultPerf.getLastMeasurements();\nfor(var ii=0;ii<measurements.length;ii++){\nvar render=measurements[ii].render;\nfor(var nodeName in render){\ntotalRender+=render[nodeName];}\n\ntotalTime+=measurements[ii].totalTime;}\n\nconsole.log('Total time spent in render(): '+totalRender+'ms');\n\nperfModules.forEach(function(module){return module.stop();});},\n\n\nregister:function(module){\ninvariant(\ntypeof module.start==='function',\n'Perf module should have start() function');\n\ninvariant(\ntypeof module.stop==='function',\n'Perf module should have stop() function');\n\nperfModules.push(module);}};\n\n\n\nmodule.exports=RCTRenderingPerf;\n});\n__d('ReactDefaultPerf',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DOMProperty=require('DOMProperty');\nvar ReactDefaultPerfAnalysis=require('ReactDefaultPerfAnalysis');\nvar ReactMount=require('ReactMount');\nvar ReactPerf=require('ReactPerf');\n\nvar performanceNow=require('performanceNow');\n\nfunction roundFloat(val){\nreturn Math.floor(val*100)/100;}\n\n\nfunction addValue(obj,key,val){\nobj[key]=(obj[key]||0)+val;}\n\n\nvar ReactDefaultPerf={\n_allMeasurements:[],\n_mountStack:[0],\n_injected:false,\n\nstart:function(){\nif(!ReactDefaultPerf._injected){\nReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);}\n\n\nReactDefaultPerf._allMeasurements.length=0;\nReactPerf.enableMeasure=true;},\n\n\nstop:function(){\nReactPerf.enableMeasure=false;},\n\n\ngetLastMeasurements:function(){\nreturn ReactDefaultPerf._allMeasurements;},\n\n\nprintExclusive:function(measurements){\nmeasurements=measurements||ReactDefaultPerf._allMeasurements;\nvar summary=ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\nconsole.table(summary.map(function(item){\nreturn {\n'Component class name':item.componentName,\n'Total inclusive time (ms)':roundFloat(item.inclusive),\n'Exclusive mount time (ms)':roundFloat(item.exclusive),\n'Exclusive render time (ms)':roundFloat(item.render),\n'Mount time per instance (ms)':roundFloat(item.exclusive/item.count),\n'Render time per instance (ms)':roundFloat(item.render/item.count),\n'Instances':item.count};}));},\n\n\n\n\n\n\nprintInclusive:function(measurements){\nmeasurements=measurements||ReactDefaultPerf._allMeasurements;\nvar summary=ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\nconsole.table(summary.map(function(item){\nreturn {\n'Owner > component':item.componentName,\n'Inclusive time (ms)':roundFloat(item.time),\n'Instances':item.count};}));\n\n\nconsole.log(\n'Total time:',\nReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2)+' ms');},\n\n\n\ngetMeasurementsSummaryMap:function(measurements){\nvar summary=ReactDefaultPerfAnalysis.getInclusiveSummary(\nmeasurements,\ntrue);\n\nreturn summary.map(function(item){\nreturn {\n'Owner > component':item.componentName,\n'Wasted time (ms)':item.time,\n'Instances':item.count};});},\n\n\n\n\nprintWasted:function(measurements){\nmeasurements=measurements||ReactDefaultPerf._allMeasurements;\nconsole.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));\nconsole.log(\n'Total time:',\nReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2)+' ms');},\n\n\n\nprintDOM:function(measurements){\nmeasurements=measurements||ReactDefaultPerf._allMeasurements;\nvar summary=ReactDefaultPerfAnalysis.getDOMSummary(measurements);\nconsole.table(summary.map(function(item){\nvar result={};\nresult[DOMProperty.ID_ATTRIBUTE_NAME]=item.id;\nresult.type=item.type;\nresult.args=JSON.stringify(item.args);\nreturn result;}));\n\nconsole.log(\n'Total time:',\nReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2)+' ms');},\n\n\n\n_recordWrite:function(id,fnName,totalTime,args){\n\nvar writes=\nReactDefaultPerf.\n_allMeasurements[ReactDefaultPerf._allMeasurements.length-1].\nwrites;\nwrites[id]=writes[id]||[];\nwrites[id].push({\ntype:fnName,\ntime:totalTime,\nargs:args});},\n\n\n\nmeasure:function(moduleName,fnName,func){\nreturn function(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}\nvar totalTime;\nvar rv;\nvar start;\n\nif(fnName==='_renderNewRootComponent'||\nfnName==='flushBatchedUpdates'){\n\n\n\n\nReactDefaultPerf._allMeasurements.push({\nexclusive:{},\ninclusive:{},\nrender:{},\ncounts:{},\nwrites:{},\ndisplayNames:{},\ntotalTime:0,\ncreated:{}});\n\nstart=performanceNow();\nrv=func.apply(this,args);\nReactDefaultPerf._allMeasurements[\nReactDefaultPerf._allMeasurements.length-1].\ntotalTime=performanceNow()-start;\nreturn rv;}else \nif(fnName==='_mountImageIntoNode'||\nmoduleName==='ReactBrowserEventEmitter'||\nmoduleName==='ReactDOMIDOperations'||\nmoduleName==='CSSPropertyOperations'||\nmoduleName==='DOMChildrenOperations'||\nmoduleName==='DOMPropertyOperations'){\nstart=performanceNow();\nrv=func.apply(this,args);\ntotalTime=performanceNow()-start;\n\nif(fnName==='_mountImageIntoNode'){\nvar mountID=ReactMount.getID(args[1]);\nReactDefaultPerf._recordWrite(mountID,fnName,totalTime,args[0]);}else \nif(fnName==='dangerouslyProcessChildrenUpdates'){\n\nargs[0].forEach(function(update){\nvar writeArgs={};\nif(update.fromIndex!==null){\nwriteArgs.fromIndex=update.fromIndex;}\n\nif(update.toIndex!==null){\nwriteArgs.toIndex=update.toIndex;}\n\nif(update.textContent!==null){\nwriteArgs.textContent=update.textContent;}\n\nif(update.markupIndex!==null){\nwriteArgs.markup=args[1][update.markupIndex];}\n\nReactDefaultPerf._recordWrite(\nupdate.parentID,\nupdate.type,\ntotalTime,\nwriteArgs);});}else \n\n\n{\n\nvar id=args[0];\nif(typeof id==='object'){\nid=ReactMount.getID(args[0]);}\n\nReactDefaultPerf._recordWrite(\nid,\nfnName,\ntotalTime,\nArray.prototype.slice.call(args,1));}\n\n\nreturn rv;}else \nif(moduleName==='ReactCompositeComponent'&&(\nfnName==='mountComponent'||\nfnName==='updateComponent'||\nfnName==='_renderValidatedComponent')){\n\nif(this._currentElement.type===ReactMount.TopLevelWrapper){\nreturn func.apply(this,args);}\n\n\nvar rootNodeID=fnName==='mountComponent'?\nargs[0]:\nthis._rootNodeID;\nvar isRender=fnName==='_renderValidatedComponent';\nvar isMount=fnName==='mountComponent';\n\nvar mountStack=ReactDefaultPerf._mountStack;\nvar entry=ReactDefaultPerf._allMeasurements[\nReactDefaultPerf._allMeasurements.length-1];\n\n\nif(isRender){\naddValue(entry.counts,rootNodeID,1);}else \nif(isMount){\nentry.created[rootNodeID]=true;\nmountStack.push(0);}\n\n\nstart=performanceNow();\nrv=func.apply(this,args);\ntotalTime=performanceNow()-start;\n\nif(isRender){\naddValue(entry.render,rootNodeID,totalTime);}else \nif(isMount){\nvar subMountTime=mountStack.pop();\nmountStack[mountStack.length-1]+=totalTime;\naddValue(entry.exclusive,rootNodeID,totalTime-subMountTime);\naddValue(entry.inclusive,rootNodeID,totalTime);}else \n{\naddValue(entry.inclusive,rootNodeID,totalTime);}\n\n\nentry.displayNames[rootNodeID]={\ncurrent:this.getName(),\nowner:this._currentElement._owner?\nthis._currentElement._owner.getName():\n'<root>'};\n\n\nreturn rv;}else \n{\nreturn func.apply(this,args);}};}};\n\n\n\n\n\nmodule.exports=ReactDefaultPerf;\n});\n__d('DOMProperty',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar invariant=require('invariant');\n\nfunction checkMask(value,bitmask){\nreturn (value&bitmask)===bitmask;}\n\n\nvar DOMPropertyInjection={\n\n\n\n\nMUST_USE_ATTRIBUTE:0x1,\nMUST_USE_PROPERTY:0x2,\nHAS_SIDE_EFFECTS:0x4,\nHAS_BOOLEAN_VALUE:0x8,\nHAS_NUMERIC_VALUE:0x10,\nHAS_POSITIVE_NUMERIC_VALUE:0x20|0x10,\nHAS_OVERLOADED_BOOLEAN_VALUE:0x40,\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ninjectDOMPropertyConfig:function(domPropertyConfig){\nvar Injection=DOMPropertyInjection;\nvar Properties=domPropertyConfig.Properties||{};\nvar DOMAttributeNamespaces=domPropertyConfig.DOMAttributeNamespaces||{};\nvar DOMAttributeNames=domPropertyConfig.DOMAttributeNames||{};\nvar DOMPropertyNames=domPropertyConfig.DOMPropertyNames||{};\nvar DOMMutationMethods=domPropertyConfig.DOMMutationMethods||{};\n\nif(domPropertyConfig.isCustomAttribute){\nDOMProperty._isCustomAttributeFunctions.push(\ndomPropertyConfig.isCustomAttribute);}\n\n\n\nfor(var propName in Properties){\ninvariant(\n!DOMProperty.properties.hasOwnProperty(propName),\n'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property '+\n'\\'%s\\' which has already been injected. You may be accidentally '+\n'injecting the same DOM property config twice, or you may be '+\n'injecting two configs that have conflicting property names.',\npropName);\n\n\nvar lowerCased=propName.toLowerCase();\nvar propConfig=Properties[propName];\n\nvar propertyInfo={\nattributeName:lowerCased,\nattributeNamespace:null,\npropertyName:propName,\nmutationMethod:null,\n\nmustUseAttribute:checkMask(propConfig,Injection.MUST_USE_ATTRIBUTE),\nmustUseProperty:checkMask(propConfig,Injection.MUST_USE_PROPERTY),\nhasSideEffects:checkMask(propConfig,Injection.HAS_SIDE_EFFECTS),\nhasBooleanValue:checkMask(propConfig,Injection.HAS_BOOLEAN_VALUE),\nhasNumericValue:checkMask(propConfig,Injection.HAS_NUMERIC_VALUE),\nhasPositiveNumericValue:\ncheckMask(propConfig,Injection.HAS_POSITIVE_NUMERIC_VALUE),\nhasOverloadedBooleanValue:\ncheckMask(propConfig,Injection.HAS_OVERLOADED_BOOLEAN_VALUE)};\n\n\ninvariant(\n!propertyInfo.mustUseAttribute||!propertyInfo.mustUseProperty,\n'DOMProperty: Cannot require using both attribute and property: %s',\npropName);\n\ninvariant(\npropertyInfo.mustUseProperty||!propertyInfo.hasSideEffects,\n'DOMProperty: Properties that have side effects must use property: %s',\npropName);\n\ninvariant(\npropertyInfo.hasBooleanValue+propertyInfo.hasNumericValue+\npropertyInfo.hasOverloadedBooleanValue<=1,\n'DOMProperty: Value can be one of boolean, overloaded boolean, or '+\n'numeric value, but not a combination: %s',\npropName);\n\n\nif(__DEV__){\nDOMProperty.getPossibleStandardName[lowerCased]=propName;}\n\n\nif(DOMAttributeNames.hasOwnProperty(propName)){\nvar attributeName=DOMAttributeNames[propName];\npropertyInfo.attributeName=attributeName;\nif(__DEV__){\nDOMProperty.getPossibleStandardName[attributeName]=propName;}}\n\n\n\nif(DOMAttributeNamespaces.hasOwnProperty(propName)){\npropertyInfo.attributeNamespace=DOMAttributeNamespaces[propName];}\n\n\nif(DOMPropertyNames.hasOwnProperty(propName)){\npropertyInfo.propertyName=DOMPropertyNames[propName];}\n\n\nif(DOMMutationMethods.hasOwnProperty(propName)){\npropertyInfo.mutationMethod=DOMMutationMethods[propName];}\n\n\nDOMProperty.properties[propName]=propertyInfo;}}};\n\n\n\nvar defaultValueCache={};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar DOMProperty={\n\nID_ATTRIBUTE_NAME:'data-reactid',\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nproperties:{},\n\n\n\n\n\n\ngetPossibleStandardName:__DEV__?{}:null,\n\n\n\n\n_isCustomAttributeFunctions:[],\n\n\n\n\n\nisCustomAttribute:function(attributeName){\nfor(var i=0;i<DOMProperty._isCustomAttributeFunctions.length;i++){\nvar isCustomAttributeFn=DOMProperty._isCustomAttributeFunctions[i];\nif(isCustomAttributeFn(attributeName)){\nreturn true;}}\n\n\nreturn false;},\n\n\n\n\n\n\n\n\n\n\ngetDefaultValueForProperty:function(nodeName,prop){\nvar nodeDefaults=defaultValueCache[nodeName];\nvar testElement;\nif(!nodeDefaults){\ndefaultValueCache[nodeName]=nodeDefaults={};}\n\nif(!(prop in nodeDefaults)){\ntestElement=document.createElement(nodeName);\nnodeDefaults[prop]=testElement[prop];}\n\nreturn nodeDefaults[prop];},\n\n\ninjection:DOMPropertyInjection};\n\n\nmodule.exports=DOMProperty;\n});\n__d('ReactDefaultPerfAnalysis',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar assign=require('Object.assign');\n\n\nvar DONT_CARE_THRESHOLD=1.2;\nvar DOM_OPERATION_TYPES={\n'_mountImageIntoNode':'set innerHTML',\nINSERT_MARKUP:'set innerHTML',\nMOVE_EXISTING:'move',\nREMOVE_NODE:'remove',\nSET_MARKUP:'set innerHTML',\nTEXT_CONTENT:'set textContent',\n'setValueForProperty':'update attribute',\n'setValueForAttribute':'update attribute',\n'deleteValueForProperty':'remove attribute',\n'dangerouslyReplaceNodeWithMarkupByID':'replace'};\n\n\nfunction getTotalTime(measurements){\n\n\n\n\nvar totalTime=0;\nfor(var i=0;i<measurements.length;i++){\nvar measurement=measurements[i];\ntotalTime+=measurement.totalTime;}\n\nreturn totalTime;}\n\n\nfunction getDOMSummary(measurements){\nvar items=[];\nmeasurements.forEach(function(measurement){\nObject.keys(measurement.writes).forEach(function(id){\nmeasurement.writes[id].forEach(function(write){\nitems.push({\nid:id,\ntype:DOM_OPERATION_TYPES[write.type]||write.type,\nargs:write.args});});});});\n\n\n\n\nreturn items;}\n\n\nfunction getExclusiveSummary(measurements){\nvar candidates={};\nvar displayName;\n\nfor(var i=0;i<measurements.length;i++){\nvar measurement=measurements[i];\nvar allIDs=assign(\n{},\nmeasurement.exclusive,\nmeasurement.inclusive);\n\n\nfor(var id in allIDs){\ndisplayName=measurement.displayNames[id].current;\n\ncandidates[displayName]=candidates[displayName]||{\ncomponentName:displayName,\ninclusive:0,\nexclusive:0,\nrender:0,\ncount:0};\n\nif(measurement.render[id]){\ncandidates[displayName].render+=measurement.render[id];}\n\nif(measurement.exclusive[id]){\ncandidates[displayName].exclusive+=measurement.exclusive[id];}\n\nif(measurement.inclusive[id]){\ncandidates[displayName].inclusive+=measurement.inclusive[id];}\n\nif(measurement.counts[id]){\ncandidates[displayName].count+=measurement.counts[id];}}}\n\n\n\n\n\nvar arr=[];\nfor(displayName in candidates){\nif(candidates[displayName].exclusive>=DONT_CARE_THRESHOLD){\narr.push(candidates[displayName]);}}\n\n\n\narr.sort(function(a,b){\nreturn b.exclusive-a.exclusive;});\n\n\nreturn arr;}\n\n\nfunction getInclusiveSummary(measurements,onlyClean){\nvar candidates={};\nvar inclusiveKey;\n\nfor(var i=0;i<measurements.length;i++){\nvar measurement=measurements[i];\nvar allIDs=assign(\n{},\nmeasurement.exclusive,\nmeasurement.inclusive);\n\nvar cleanComponents;\n\nif(onlyClean){\ncleanComponents=getUnchangedComponents(measurement);}\n\n\nfor(var id in allIDs){\nif(onlyClean&&!cleanComponents[id]){\ncontinue;}\n\n\nvar displayName=measurement.displayNames[id];\n\n\n\n\ninclusiveKey=displayName.owner+' > '+displayName.current;\n\ncandidates[inclusiveKey]=candidates[inclusiveKey]||{\ncomponentName:inclusiveKey,\ntime:0,\ncount:0};\n\n\nif(measurement.inclusive[id]){\ncandidates[inclusiveKey].time+=measurement.inclusive[id];}\n\nif(measurement.counts[id]){\ncandidates[inclusiveKey].count+=measurement.counts[id];}}}\n\n\n\n\n\nvar arr=[];\nfor(inclusiveKey in candidates){\nif(candidates[inclusiveKey].time>=DONT_CARE_THRESHOLD){\narr.push(candidates[inclusiveKey]);}}\n\n\n\narr.sort(function(a,b){\nreturn b.time-a.time;});\n\n\nreturn arr;}\n\n\nfunction getUnchangedComponents(measurement){\n\n\n\nvar cleanComponents={};\nvar dirtyLeafIDs=Object.keys(measurement.writes);\nvar allIDs=assign({},measurement.exclusive,measurement.inclusive);\n\nfor(var id in allIDs){\nvar isDirty=false;\n\n\nfor(var i=0;i<dirtyLeafIDs.length;i++){\nif(dirtyLeafIDs[i].indexOf(id)===0){\nisDirty=true;\nbreak;}}\n\n\n\nif(measurement.created[id]){\nisDirty=true;}\n\nif(!isDirty&&measurement.counts[id]>0){\ncleanComponents[id]=true;}}\n\n\nreturn cleanComponents;}\n\n\nvar ReactDefaultPerfAnalysis={\ngetExclusiveSummary:getExclusiveSummary,\ngetInclusiveSummary:getInclusiveSummary,\ngetDOMSummary:getDOMSummary,\ngetTotalTime:getTotalTime};\n\n\nmodule.exports=ReactDefaultPerfAnalysis;\n});\n__d('ReactMount',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar DOMProperty=require('DOMProperty');\nvar ReactBrowserEventEmitter=require('ReactBrowserEventEmitter');\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactDOMFeatureFlags=require('ReactDOMFeatureFlags');\nvar ReactElement=require('ReactElement');\nvar ReactEmptyComponentRegistry=require('ReactEmptyComponentRegistry');\nvar ReactInstanceHandles=require('ReactInstanceHandles');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactMarkupChecksum=require('ReactMarkupChecksum');\nvar ReactPerf=require('ReactPerf');\nvar ReactReconciler=require('ReactReconciler');\nvar ReactUpdateQueue=require('ReactUpdateQueue');\nvar ReactUpdates=require('ReactUpdates');\n\nvar assign=require('Object.assign');\nvar emptyObject=require('emptyObject');\nvar containsNode=require('containsNode');\nvar instantiateReactComponent=require('instantiateReactComponent');\nvar invariant=require('invariant');\nvar setInnerHTML=require('setInnerHTML');\nvar shouldUpdateReactComponent=require('shouldUpdateReactComponent');\nvar validateDOMNesting=require('validateDOMNesting');\nvar warning=require('warning');\n\nvar ATTR_NAME=DOMProperty.ID_ATTRIBUTE_NAME;\nvar nodeCache={};\n\nvar ELEMENT_NODE_TYPE=1;\nvar DOC_NODE_TYPE=9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE=11;\n\nvar ownerDocumentContextKey=\n'__ReactMount_ownerDocument$'+Math.random().toString(36).slice(2);\n\n\n\nvar instancesByReactRootID={};\n\n\nvar containersByReactRootID={};\n\nif(__DEV__){\n\nvar rootElementsByReactRootID={};}\n\n\n\nvar findComponentRootReusableArray=[];\n\n\n\n\n\n\n\nfunction firstDifferenceIndex(string1,string2){\nvar minLen=Math.min(string1.length,string2.length);\nfor(var i=0;i<minLen;i++){\nif(string1.charAt(i)!==string2.charAt(i)){\nreturn i;}}\n\n\nreturn string1.length===string2.length?-1:minLen;}\n\n\n\n\n\n\n\nfunction getReactRootElementInContainer(container){\nif(!container){\nreturn null;}\n\n\nif(container.nodeType===DOC_NODE_TYPE){\nreturn container.documentElement;}else \n{\nreturn container.firstChild;}}\n\n\n\n\n\n\n\nfunction getReactRootID(container){\nvar rootElement=getReactRootElementInContainer(container);\nreturn rootElement&&ReactMount.getID(rootElement);}\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getID(node){\nvar id=internalGetID(node);\nif(id){\nif(nodeCache.hasOwnProperty(id)){\nvar cached=nodeCache[id];\nif(cached!==node){\ninvariant(\n!isValid(cached,id),\n'ReactMount: Two valid but unequal nodes with the same `%s`: %s',\nATTR_NAME,id);\n\n\nnodeCache[id]=node;}}else \n\n{\nnodeCache[id]=node;}}\n\n\n\nreturn id;}\n\n\nfunction internalGetID(node){\n\n\n\nreturn node&&node.getAttribute&&node.getAttribute(ATTR_NAME)||'';}\n\n\n\n\n\n\n\n\nfunction setID(node,id){\nvar oldID=internalGetID(node);\nif(oldID!==id){\ndelete nodeCache[oldID];}\n\nnode.setAttribute(ATTR_NAME,id);\nnodeCache[id]=node;}\n\n\n\n\n\n\n\n\n\nfunction getNode(id){\nif(!nodeCache.hasOwnProperty(id)||!isValid(nodeCache[id],id)){\nnodeCache[id]=ReactMount.findReactNodeByID(id);}\n\nreturn nodeCache[id];}\n\n\n\n\n\n\n\n\n\nfunction getNodeFromInstance(instance){\nvar id=ReactInstanceMap.get(instance)._rootNodeID;\nif(ReactEmptyComponentRegistry.isNullComponentID(id)){\nreturn null;}\n\nif(!nodeCache.hasOwnProperty(id)||!isValid(nodeCache[id],id)){\nnodeCache[id]=ReactMount.findReactNodeByID(id);}\n\nreturn nodeCache[id];}\n\n\n\n\n\n\n\n\n\n\n\n\nfunction isValid(node,id){\nif(node){\ninvariant(\ninternalGetID(node)===id,\n'ReactMount: Unexpected modification of `%s`',\nATTR_NAME);\n\n\nvar container=ReactMount.findReactContainerForID(id);\nif(container&&containsNode(container,node)){\nreturn true;}}\n\n\n\nreturn false;}\n\n\n\n\n\n\n\nfunction purgeID(id){\ndelete nodeCache[id];}\n\n\nvar deepestNodeSoFar=null;\nfunction findDeepestCachedAncestorImpl(ancestorID){\nvar ancestor=nodeCache[ancestorID];\nif(ancestor&&isValid(ancestor,ancestorID)){\ndeepestNodeSoFar=ancestor;}else \n{\n\n\nreturn false;}}\n\n\n\n\n\n\nfunction findDeepestCachedAncestor(targetID){\ndeepestNodeSoFar=null;\nReactInstanceHandles.traverseAncestors(\ntargetID,\nfindDeepestCachedAncestorImpl);\n\n\nvar foundNode=deepestNodeSoFar;\ndeepestNodeSoFar=null;\nreturn foundNode;}\n\n\n\n\n\n\n\n\n\n\n\nfunction mountComponentIntoNode(\ncomponentInstance,\nrootID,\ncontainer,\ntransaction,\nshouldReuseMarkup,\ncontext)\n{\nif(ReactDOMFeatureFlags.useCreateElement){\ncontext=assign({},context);\nif(container.nodeType===DOC_NODE_TYPE){\ncontext[ownerDocumentContextKey]=container;}else \n{\ncontext[ownerDocumentContextKey]=container.ownerDocument;}}\n\n\nif(__DEV__){\nif(context===emptyObject){\ncontext={};}\n\nvar tag=container.nodeName.toLowerCase();\ncontext[validateDOMNesting.ancestorInfoContextKey]=\nvalidateDOMNesting.updatedAncestorInfo(null,tag,null);}\n\nvar markup=ReactReconciler.mountComponent(\ncomponentInstance,rootID,transaction,context);\n\ncomponentInstance._renderedComponent._topLevelWrapper=componentInstance;\nReactMount._mountImageIntoNode(\nmarkup,\ncontainer,\nshouldReuseMarkup,\ntransaction);}\n\n\n\n\n\n\n\n\n\n\n\nfunction batchedMountComponentIntoNode(\ncomponentInstance,\nrootID,\ncontainer,\nshouldReuseMarkup,\ncontext)\n{\nvar transaction=ReactUpdates.ReactReconcileTransaction.getPooled(\nshouldReuseMarkup);\n\ntransaction.perform(\nmountComponentIntoNode,\nnull,\ncomponentInstance,\nrootID,\ncontainer,\ntransaction,\nshouldReuseMarkup,\ncontext);\n\nReactUpdates.ReactReconcileTransaction.release(transaction);}\n\n\n\n\n\n\n\n\n\n\n\nfunction unmountComponentFromNode(instance,container){\nReactReconciler.unmountComponent(instance);\n\nif(container.nodeType===DOC_NODE_TYPE){\ncontainer=container.documentElement;}\n\n\n\nwhile(container.lastChild){\ncontainer.removeChild(container.lastChild);}}\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction hasNonRootReactChild(node){\nvar reactRootID=getReactRootID(node);\nreturn reactRootID?reactRootID!==\nReactInstanceHandles.getReactRootIDFromNodeID(reactRootID):false;}\n\n\n\n\n\n\nfunction findFirstReactDOMImpl(node){\n\n\nfor(;node&&node.parentNode!==node;node=node.parentNode){\nif(node.nodeType!==1){\n\ncontinue;}\n\nvar nodeID=internalGetID(node);\nif(!nodeID){\ncontinue;}\n\nvar reactRootID=ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n\n\n\n\n\nvar current=node;\nvar lastID;\ndo {\nlastID=internalGetID(current);\ncurrent=current.parentNode;\nif(current==null){\n\n\nreturn null;}}while(\n\nlastID!==reactRootID);\n\nif(current===containersByReactRootID[reactRootID]){\nreturn node;}}\n\n\nreturn null;}\n\n\n\n\n\n\n\nvar TopLevelWrapper=function(){};\nTopLevelWrapper.prototype.isReactComponent={};\nif(__DEV__){\nTopLevelWrapper.displayName='TopLevelWrapper';}\n\nTopLevelWrapper.prototype.render=function(){\n\nreturn this.props;};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactMount={\n\nTopLevelWrapper:TopLevelWrapper,\n\n\n_instancesByReactRootID:instancesByReactRootID,\n\n\n\n\n\n\n\n\n\nscrollMonitor:function(container,renderCallback){\nrenderCallback();},\n\n\n\n\n\n\n\n\n\n_updateRootComponent:function(\nprevComponent,\nnextElement,\ncontainer,\ncallback){\nReactMount.scrollMonitor(container,function(){\nReactUpdateQueue.enqueueElementInternal(prevComponent,nextElement);\nif(callback){\nReactUpdateQueue.enqueueCallbackInternal(prevComponent,callback);}});\n\n\n\nif(__DEV__){\n\nrootElementsByReactRootID[getReactRootID(container)]=\ngetReactRootElementInContainer(container);}\n\n\nreturn prevComponent;},\n\n\n\n\n\n\n\n\n\n_registerComponent:function(nextComponent,container){\ninvariant(\ncontainer&&(\ncontainer.nodeType===ELEMENT_NODE_TYPE||\ncontainer.nodeType===DOC_NODE_TYPE||\ncontainer.nodeType===DOCUMENT_FRAGMENT_NODE_TYPE),\n\n'_registerComponent(...): Target container is not a DOM element.');\n\n\nReactBrowserEventEmitter.ensureScrollValueMonitoring();\n\nvar reactRootID=ReactMount.registerContainer(container);\ninstancesByReactRootID[reactRootID]=nextComponent;\nreturn reactRootID;},\n\n\n\n\n\n\n\n\n\n_renderNewRootComponent:function(\nnextElement,\ncontainer,\nshouldReuseMarkup,\ncontext)\n{\n\n\n\nwarning(\nReactCurrentOwner.current==null,\n'_renderNewRootComponent(): Render methods should be a pure function '+\n'of props and state; triggering nested component updates from '+\n'render is not allowed. If necessary, trigger nested updates in '+\n'componentDidUpdate. Check the render method of %s.',\nReactCurrentOwner.current&&ReactCurrentOwner.current.getName()||\n'ReactCompositeComponent');\n\n\nvar componentInstance=instantiateReactComponent(nextElement,null);\nvar reactRootID=ReactMount._registerComponent(\ncomponentInstance,\ncontainer);\n\n\n\n\n\n\nReactUpdates.batchedUpdates(\nbatchedMountComponentIntoNode,\ncomponentInstance,\nreactRootID,\ncontainer,\nshouldReuseMarkup,\ncontext);\n\n\nif(__DEV__){\n\nrootElementsByReactRootID[reactRootID]=\ngetReactRootElementInContainer(container);}\n\n\nreturn componentInstance;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nrenderSubtreeIntoContainer:function(parentComponent,nextElement,container,callback){\ninvariant(\nparentComponent!=null&&parentComponent._reactInternalInstance!=null,\n'parentComponent must be a valid React Component');\n\nreturn ReactMount._renderSubtreeIntoContainer(\nparentComponent,\nnextElement,\ncontainer,\ncallback);},\n\n\n\n_renderSubtreeIntoContainer:function(parentComponent,nextElement,container,callback){\ninvariant(\nReactElement.isValidElement(nextElement),\n'ReactDOM.render(): Invalid component element.%s',\n\ntypeof nextElement==='string'?\n' Instead of passing an element string, make sure to instantiate '+\n'it by passing it to React.createElement.':\ntypeof nextElement==='function'?\n' Instead of passing a component class, make sure to instantiate '+\n'it by passing it to React.createElement.':\n\nnextElement!=null&&nextElement.props!==undefined?\n' This may be caused by unintentionally loading two independent '+\n'copies of React.':\n'');\n\n\n\nwarning(\n!container||!container.tagName||\ncontainer.tagName.toUpperCase()!=='BODY',\n'render(): Rendering components directly into document.body is '+\n'discouraged, since its children are often manipulated by third-party '+\n'scripts and browser extensions. This may lead to subtle '+\n'reconciliation issues. Try rendering into a container element created '+\n'for your app.');\n\n\nvar nextWrappedElement=new ReactElement(\nTopLevelWrapper,\nnull,\nnull,\nnull,\nnull,\nnull,\nnextElement);\n\n\nvar prevComponent=instancesByReactRootID[getReactRootID(container)];\n\nif(prevComponent){\nvar prevWrappedElement=prevComponent._currentElement;\nvar prevElement=prevWrappedElement.props;\nif(shouldUpdateReactComponent(prevElement,nextElement)){\nvar publicInst=prevComponent._renderedComponent.getPublicInstance();\nvar updatedCallback=callback&&function(){\ncallback.call(publicInst);};\n\nReactMount._updateRootComponent(\nprevComponent,\nnextWrappedElement,\ncontainer,\nupdatedCallback);\n\nreturn publicInst;}else \n{\nReactMount.unmountComponentAtNode(container);}}\n\n\n\nvar reactRootElement=getReactRootElementInContainer(container);\nvar containerHasReactMarkup=\nreactRootElement&&!!internalGetID(reactRootElement);\nvar containerHasNonRootReactChild=hasNonRootReactChild(container);\n\nif(__DEV__){\nwarning(\n!containerHasNonRootReactChild,\n'render(...): Replacing React-rendered children with a new root '+\n'component. If you intended to update the children of this node, '+\n'you should instead have the existing children update their state '+\n'and render the new components instead of calling ReactDOM.render.');\n\n\nif(!containerHasReactMarkup||reactRootElement.nextSibling){\nvar rootElementSibling=reactRootElement;\nwhile(rootElementSibling){\nif(internalGetID(rootElementSibling)){\nwarning(\nfalse,\n'render(): Target node has markup rendered by React, but there '+\n'are unrelated nodes as well. This is most commonly caused by '+\n'white-space inserted around server-rendered markup.');\n\nbreak;}\n\nrootElementSibling=rootElementSibling.nextSibling;}}}\n\n\n\n\nvar shouldReuseMarkup=\ncontainerHasReactMarkup&&\n!prevComponent&&\n!containerHasNonRootReactChild;\nvar component=ReactMount._renderNewRootComponent(\nnextWrappedElement,\ncontainer,\nshouldReuseMarkup,\nparentComponent!=null?\nparentComponent._reactInternalInstance._processChildContext(\nparentComponent._reactInternalInstance._context):\n\nemptyObject).\n_renderedComponent.getPublicInstance();\nif(callback){\ncallback.call(component);}\n\nreturn component;},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nrender:function(nextElement,container,callback){\nreturn ReactMount._renderSubtreeIntoContainer(null,nextElement,container,callback);},\n\n\n\n\n\n\n\n\n\n\nregisterContainer:function(container){\nvar reactRootID=getReactRootID(container);\nif(reactRootID){\n\nreactRootID=ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);}\n\nif(!reactRootID){\n\nreactRootID=ReactInstanceHandles.createReactRootID();}\n\ncontainersByReactRootID[reactRootID]=container;\nreturn reactRootID;},\n\n\n\n\n\n\n\n\n\nunmountComponentAtNode:function(container){\n\n\n\n\nwarning(\nReactCurrentOwner.current==null,\n'unmountComponentAtNode(): Render methods should be a pure function '+\n'of props and state; triggering nested component updates from render '+\n'is not allowed. If necessary, trigger nested updates in '+\n'componentDidUpdate. Check the render method of %s.',\nReactCurrentOwner.current&&ReactCurrentOwner.current.getName()||\n'ReactCompositeComponent');\n\n\ninvariant(\ncontainer&&(\ncontainer.nodeType===ELEMENT_NODE_TYPE||\ncontainer.nodeType===DOC_NODE_TYPE||\ncontainer.nodeType===DOCUMENT_FRAGMENT_NODE_TYPE),\n\n'unmountComponentAtNode(...): Target container is not a DOM element.');\n\n\nvar reactRootID=getReactRootID(container);\nvar component=instancesByReactRootID[reactRootID];\nif(!component){\n\n\nvar containerHasNonRootReactChild=hasNonRootReactChild(container);\n\n\nvar containerID=internalGetID(container);\nvar isContainerReactRoot=\ncontainerID&&\ncontainerID===\nReactInstanceHandles.getReactRootIDFromNodeID(containerID);\n\nif(__DEV__){\nwarning(\n!containerHasNonRootReactChild,\n'unmountComponentAtNode(): The node you\\'re attempting to unmount '+\n'was rendered by React and is not a top-level container. %s',\n\nisContainerReactRoot?\n'You may have accidentally passed in a React root node instead '+\n'of its container.':\n'Instead, have the parent component update its state and '+\n'rerender in order to remove this component.');}\n\n\n\n\nreturn false;}\n\nReactUpdates.batchedUpdates(\nunmountComponentFromNode,\ncomponent,\ncontainer);\n\ndelete instancesByReactRootID[reactRootID];\ndelete containersByReactRootID[reactRootID];\nif(__DEV__){\ndelete rootElementsByReactRootID[reactRootID];}\n\nreturn true;},\n\n\n\n\n\n\n\n\n\nfindReactContainerForID:function(id){\nvar reactRootID=ReactInstanceHandles.getReactRootIDFromNodeID(id);\nvar container=containersByReactRootID[reactRootID];\n\nif(__DEV__){\nvar rootElement=rootElementsByReactRootID[reactRootID];\nif(rootElement&&rootElement.parentNode!==container){\nwarning(\n\n\ninternalGetID(rootElement)===reactRootID,\n'ReactMount: Root element ID differed from reactRootID.');\n\nvar containerChild=container.firstChild;\nif(containerChild&&\nreactRootID===internalGetID(containerChild)){\n\n\n\n\nrootElementsByReactRootID[reactRootID]=containerChild;}else \n{\nwarning(\nfalse,\n'ReactMount: Root element has been removed from its original '+\n'container. New container: %s',\nrootElement.parentNode);}}}\n\n\n\n\n\nreturn container;},\n\n\n\n\n\n\n\n\nfindReactNodeByID:function(id){\nvar reactRoot=ReactMount.findReactContainerForID(id);\nreturn ReactMount.findComponentRoot(reactRoot,id);},\n\n\n\n\n\n\n\n\n\n\ngetFirstReactDOM:function(node){\nreturn findFirstReactDOMImpl(node);},\n\n\n\n\n\n\n\n\n\n\n\n\nfindComponentRoot:function(ancestorNode,targetID){\nvar firstChildren=findComponentRootReusableArray;\nvar childIndex=0;\n\nvar deepestAncestor=findDeepestCachedAncestor(targetID)||ancestorNode;\n\nif(__DEV__){\n\nwarning(\ndeepestAncestor!=null,\n'React can\\'t find the root component node for data-reactid value '+\n'`%s`. If you\\'re seeing this message, it probably means that '+\n'you\\'ve loaded two copies of React on the page. At this time, only '+\n'a single copy of React can be loaded at a time.',\ntargetID);}\n\n\n\nfirstChildren[0]=deepestAncestor.firstChild;\nfirstChildren.length=1;\n\nwhile(childIndex<firstChildren.length){\nvar child=firstChildren[childIndex++];\nvar targetChild;\n\nwhile(child){\nvar childID=ReactMount.getID(child);\nif(childID){\n\n\n\n\n\nif(targetID===childID){\ntargetChild=child;}else \nif(ReactInstanceHandles.isAncestorIDOf(childID,targetID)){\n\n\n\n\nfirstChildren.length=childIndex=0;\nfirstChildren.push(child.firstChild);}}else \n\n\n{\n\n\n\n\n\nfirstChildren.push(child.firstChild);}\n\n\nchild=child.nextSibling;}\n\n\nif(targetChild){\n\n\n\nfirstChildren.length=0;\n\nreturn targetChild;}}\n\n\n\nfirstChildren.length=0;\n\ninvariant(\nfalse,\n'findComponentRoot(..., %s): Unable to find element. This probably '+\n'means the DOM was unexpectedly mutated (e.g., by the browser), '+\n'usually due to forgetting a <tbody> when using tables, nesting tags '+\n'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> '+\n'parent. '+\n'Try inspecting the child nodes of the element with React ID `%s`.',\ntargetID,\nReactMount.getID(ancestorNode));},\n\n\n\n_mountImageIntoNode:function(\nmarkup,\ncontainer,\nshouldReuseMarkup,\ntransaction)\n{\ninvariant(\ncontainer&&(\ncontainer.nodeType===ELEMENT_NODE_TYPE||\ncontainer.nodeType===DOC_NODE_TYPE||\ncontainer.nodeType===DOCUMENT_FRAGMENT_NODE_TYPE),\n\n'mountComponentIntoNode(...): Target container is not valid.');\n\n\nif(shouldReuseMarkup){\nvar rootElement=getReactRootElementInContainer(container);\nif(ReactMarkupChecksum.canReuseMarkup(markup,rootElement)){\nreturn;}else \n{\nvar checksum=rootElement.getAttribute(\nReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\nrootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\nvar rootMarkup=rootElement.outerHTML;\nrootElement.setAttribute(\nReactMarkupChecksum.CHECKSUM_ATTR_NAME,\nchecksum);\n\n\nvar normalizedMarkup=markup;\nif(__DEV__){\n\n\n\n\nvar normalizer;\nif(container.nodeType===ELEMENT_NODE_TYPE){\nnormalizer=document.createElement('div');\nnormalizer.innerHTML=markup;\nnormalizedMarkup=normalizer.innerHTML;}else \n{\nnormalizer=document.createElement('iframe');\ndocument.body.appendChild(normalizer);\nnormalizer.contentDocument.write(markup);\nnormalizedMarkup=normalizer.contentDocument.documentElement.outerHTML;\ndocument.body.removeChild(normalizer);}}\n\n\n\nvar diffIndex=firstDifferenceIndex(normalizedMarkup,rootMarkup);\nvar difference=' (client) '+\nnormalizedMarkup.substring(diffIndex-20,diffIndex+20)+\n'\\n (server) '+rootMarkup.substring(diffIndex-20,diffIndex+20);\n\ninvariant(\ncontainer.nodeType!==DOC_NODE_TYPE,\n'You\\'re trying to render a component to the document using '+\n'server rendering but the checksum was invalid. This usually '+\n'means you rendered a different component type or props on '+\n'the client from the one on the server, or your render() '+\n'methods are impure. React cannot handle this case due to '+\n'cross-browser quirks by rendering at the document root. You '+\n'should look for environment dependent code in your components '+\n'and ensure the props are the same client and server side:\\n%s',\ndifference);\n\n\nif(__DEV__){\nwarning(\nfalse,\n'React attempted to reuse markup in a container but the '+\n'checksum was invalid. This generally means that you are '+\n'using server rendering and the markup generated on the '+\n'server was not what the client was expecting. React injected '+\n'new markup to compensate which works but you have lost many '+\n'of the benefits of server rendering. Instead, figure out '+\n'why the markup being generated is different on the client '+\n'or server:\\n%s',\ndifference);}}}\n\n\n\n\n\ninvariant(\ncontainer.nodeType!==DOC_NODE_TYPE,\n'You\\'re trying to render a component to the document but '+\n'you didn\\'t use server rendering. We can\\'t do this '+\n'without using server rendering due to cross-browser quirks. '+\n'See ReactDOMServer.renderToString() for server rendering.');\n\n\nif(transaction.useCreateElement){\nwhile(container.lastChild){\ncontainer.removeChild(container.lastChild);}\n\ncontainer.appendChild(markup);}else \n{\nsetInnerHTML(container,markup);}},\n\n\n\nownerDocumentContextKey:ownerDocumentContextKey,\n\n\n\n\n\ngetReactRootID:getReactRootID,\n\ngetID:getID,\n\nsetID:setID,\n\ngetNode:getNode,\n\ngetNodeFromInstance:getNodeFromInstance,\n\nisValid:isValid,\n\npurgeID:purgeID};\n\n\nReactPerf.measureMethods(ReactMount,'ReactMount',{\n_renderNewRootComponent:'_renderNewRootComponent',\n_mountImageIntoNode:'_mountImageIntoNode'});\n\n\nmodule.exports=ReactMount;\n});\n__d('ReactBrowserEventEmitter',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventConstants=require('EventConstants');\nvar EventPluginHub=require('EventPluginHub');\nvar EventPluginRegistry=require('EventPluginRegistry');\nvar ReactEventEmitterMixin=require('ReactEventEmitterMixin');\nvar ReactPerf=require('ReactPerf');\nvar ViewportMetrics=require('ViewportMetrics');\n\nvar assign=require('Object.assign');\nvar isEventSupported=require('isEventSupported');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar alreadyListeningTo={};\nvar isMonitoringScrollValue=false;\nvar reactTopListenersCounter=0;\n\n\n\n\nvar topEventMapping={\ntopAbort:'abort',\ntopBlur:'blur',\ntopCanPlay:'canplay',\ntopCanPlayThrough:'canplaythrough',\ntopChange:'change',\ntopClick:'click',\ntopCompositionEnd:'compositionend',\ntopCompositionStart:'compositionstart',\ntopCompositionUpdate:'compositionupdate',\ntopContextMenu:'contextmenu',\ntopCopy:'copy',\ntopCut:'cut',\ntopDoubleClick:'dblclick',\ntopDrag:'drag',\ntopDragEnd:'dragend',\ntopDragEnter:'dragenter',\ntopDragExit:'dragexit',\ntopDragLeave:'dragleave',\ntopDragOver:'dragover',\ntopDragStart:'dragstart',\ntopDrop:'drop',\ntopDurationChange:'durationchange',\ntopEmptied:'emptied',\ntopEncrypted:'encrypted',\ntopEnded:'ended',\ntopError:'error',\ntopFocus:'focus',\ntopInput:'input',\ntopKeyDown:'keydown',\ntopKeyPress:'keypress',\ntopKeyUp:'keyup',\ntopLoadedData:'loadeddata',\ntopLoadedMetadata:'loadedmetadata',\ntopLoadStart:'loadstart',\ntopMouseDown:'mousedown',\ntopMouseMove:'mousemove',\ntopMouseOut:'mouseout',\ntopMouseOver:'mouseover',\ntopMouseUp:'mouseup',\ntopPaste:'paste',\ntopPause:'pause',\ntopPlay:'play',\ntopPlaying:'playing',\ntopProgress:'progress',\ntopRateChange:'ratechange',\ntopScroll:'scroll',\ntopSeeked:'seeked',\ntopSeeking:'seeking',\ntopSelectionChange:'selectionchange',\ntopStalled:'stalled',\ntopSuspend:'suspend',\ntopTextInput:'textInput',\ntopTimeUpdate:'timeupdate',\ntopTouchCancel:'touchcancel',\ntopTouchEnd:'touchend',\ntopTouchMove:'touchmove',\ntopTouchStart:'touchstart',\ntopVolumeChange:'volumechange',\ntopWaiting:'waiting',\ntopWheel:'wheel'};\n\n\n\n\n\nvar topListenersIDKey='_reactListenersID'+String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt){\n\n\nif(!Object.prototype.hasOwnProperty.call(mountAt,topListenersIDKey)){\nmountAt[topListenersIDKey]=reactTopListenersCounter++;\nalreadyListeningTo[mountAt[topListenersIDKey]]={};}\n\nreturn alreadyListeningTo[mountAt[topListenersIDKey]];}\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactBrowserEventEmitter=assign({},ReactEventEmitterMixin,{\n\n\n\n\nReactEventListener:null,\n\ninjection:{\n\n\n\ninjectReactEventListener:function(ReactEventListener){\nReactEventListener.setHandleTopLevel(\nReactBrowserEventEmitter.handleTopLevel);\n\nReactBrowserEventEmitter.ReactEventListener=ReactEventListener;}},\n\n\n\n\n\n\n\n\nsetEnabled:function(enabled){\nif(ReactBrowserEventEmitter.ReactEventListener){\nReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);}},\n\n\n\n\n\n\nisEnabled:function(){\nreturn !!(\nReactBrowserEventEmitter.ReactEventListener&&\nReactBrowserEventEmitter.ReactEventListener.isEnabled());},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nlistenTo:function(registrationName,contentDocumentHandle){\nvar mountAt=contentDocumentHandle;\nvar isListening=getListeningForDocument(mountAt);\nvar dependencies=\nEventPluginRegistry.registrationNameDependencies[registrationName];\n\nvar topLevelTypes=EventConstants.topLevelTypes;\nfor(var i=0;i<dependencies.length;i++){\nvar dependency=dependencies[i];\nif(!(\nisListening.hasOwnProperty(dependency)&&\nisListening[dependency]))\n{\nif(dependency===topLevelTypes.topWheel){\nif(isEventSupported('wheel')){\nReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ntopLevelTypes.topWheel,\n'wheel',\nmountAt);}else \n\nif(isEventSupported('mousewheel')){\nReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ntopLevelTypes.topWheel,\n'mousewheel',\nmountAt);}else \n\n{\n\n\nReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ntopLevelTypes.topWheel,\n'DOMMouseScroll',\nmountAt);}}else \n\n\nif(dependency===topLevelTypes.topScroll){\n\nif(isEventSupported('scroll',true)){\nReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\ntopLevelTypes.topScroll,\n'scroll',\nmountAt);}else \n\n{\nReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ntopLevelTypes.topScroll,\n'scroll',\nReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);}}else \n\n\nif(dependency===topLevelTypes.topFocus||\ndependency===topLevelTypes.topBlur){\n\nif(isEventSupported('focus',true)){\nReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\ntopLevelTypes.topFocus,\n'focus',\nmountAt);\n\nReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\ntopLevelTypes.topBlur,\n'blur',\nmountAt);}else \n\nif(isEventSupported('focusin')){\n\n\nReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ntopLevelTypes.topFocus,\n'focusin',\nmountAt);\n\nReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ntopLevelTypes.topBlur,\n'focusout',\nmountAt);}\n\n\n\n\nisListening[topLevelTypes.topBlur]=true;\nisListening[topLevelTypes.topFocus]=true;}else \nif(topEventMapping.hasOwnProperty(dependency)){\nReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ndependency,\ntopEventMapping[dependency],\nmountAt);}\n\n\n\nisListening[dependency]=true;}}},\n\n\n\n\ntrapBubbledEvent:function(topLevelType,handlerBaseName,handle){\nreturn ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(\ntopLevelType,\nhandlerBaseName,\nhandle);},\n\n\n\ntrapCapturedEvent:function(topLevelType,handlerBaseName,handle){\nreturn ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(\ntopLevelType,\nhandlerBaseName,\nhandle);},\n\n\n\n\n\n\n\n\n\n\n\nensureScrollValueMonitoring:function(){\nif(!isMonitoringScrollValue){\nvar refresh=ViewportMetrics.refreshScrollValues;\nReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\nisMonitoringScrollValue=true;}},\n\n\n\neventNameDispatchConfigs:EventPluginHub.eventNameDispatchConfigs,\n\nregistrationNameModules:EventPluginHub.registrationNameModules,\n\nputListener:EventPluginHub.putListener,\n\ngetListener:EventPluginHub.getListener,\n\ndeleteListener:EventPluginHub.deleteListener,\n\ndeleteAllListeners:EventPluginHub.deleteAllListeners});\n\n\n\nReactPerf.measureMethods(ReactBrowserEventEmitter,'ReactBrowserEventEmitter',{\nputListener:'putListener',\ndeleteListener:'deleteListener'});\n\n\nmodule.exports=ReactBrowserEventEmitter;\n});\n__d('ViewportMetrics',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ViewportMetrics={\n\ncurrentScrollLeft:0,\n\ncurrentScrollTop:0,\n\nrefreshScrollValues:function(scrollPosition){\nViewportMetrics.currentScrollLeft=scrollPosition.x;\nViewportMetrics.currentScrollTop=scrollPosition.y;}};\n\n\n\n\nmodule.exports=ViewportMetrics;\n});\n__d('isEventSupported',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ExecutionEnvironment=require('ExecutionEnvironment');\n\nvar useHasFeature;\nif(ExecutionEnvironment.canUseDOM){\nuseHasFeature=\ndocument.implementation&&\ndocument.implementation.hasFeature&&\n\n\ndocument.implementation.hasFeature('','')!==true;}\n\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix,capture){\nif(!ExecutionEnvironment.canUseDOM||\ncapture&&!('addEventListener' in document)){\nreturn false;}\n\n\nvar eventName='on'+eventNameSuffix;\nvar isSupported=eventName in document;\n\nif(!isSupported){\nvar element=document.createElement('div');\nelement.setAttribute(eventName,'return;');\nisSupported=typeof element[eventName]==='function';}\n\n\nif(!isSupported&&useHasFeature&&eventNameSuffix==='wheel'){\n\nisSupported=document.implementation.hasFeature('Events.wheel','3.0');}\n\n\nreturn isSupported;}\n\n\nmodule.exports=isEventSupported;\n});\n__d('ReactDOMFeatureFlags',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactDOMFeatureFlags={\nuseCreateElement:false};\n\n\nmodule.exports=ReactDOMFeatureFlags;\n});\n__d('ReactMarkupChecksum',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar adler32=require('adler32');\n\nvar TAG_END=/\\/?>/;\n\nvar ReactMarkupChecksum={\nCHECKSUM_ATTR_NAME:'data-react-checksum',\n\n\n\n\n\naddChecksumToMarkup:function(markup){\nvar checksum=adler32(markup);\n\n\nreturn markup.replace(\nTAG_END,\n' '+ReactMarkupChecksum.CHECKSUM_ATTR_NAME+'=\"'+checksum+'\"$&');},\n\n\n\n\n\n\n\n\ncanReuseMarkup:function(markup,element){\nvar existingChecksum=element.getAttribute(\nReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\nexistingChecksum=existingChecksum&&parseInt(existingChecksum,10);\nvar markupChecksum=adler32(markup);\nreturn markupChecksum===existingChecksum;}};\n\n\n\nmodule.exports=ReactMarkupChecksum;\n});\n__d('adler32',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar MOD=65521;\n\n\n\n\n\n\nfunction adler32(data){\nvar a=1;\nvar b=0;\nvar i=0;\nvar l=data.length;\nvar m=l&~0x3;\nwhile(i<m){\nfor(;i<Math.min(i+4096,m);i+=4){\nb+=\n(a+=data.charCodeAt(i))+(\na+=data.charCodeAt(i+1))+(\na+=data.charCodeAt(i+2))+(\na+=data.charCodeAt(i+3));}\n\n\na%=MOD;\nb%=MOD;}\n\nfor(;i<l;i++){\nb+=a+=data.charCodeAt(i);}\n\na%=MOD;\nb%=MOD;\nreturn a|b<<16;}\n\n\nmodule.exports=adler32;\n});\n__d('containsNode',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\nisTextNode=require('isTextNode');\n\n\n\n\n\n\n\n\n\n\nfunction containsNode(outerNode,innerNode){\nif(!outerNode||!innerNode){\nreturn false;}else \nif(outerNode===innerNode){\nreturn true;}else \nif(isTextNode(outerNode)){\nreturn false;}else \nif(isTextNode(innerNode)){\nreturn containsNode(outerNode,innerNode.parentNode);}else \nif(outerNode.contains){\nreturn outerNode.contains(innerNode);}else \nif(outerNode.compareDocumentPosition){\nreturn !!(outerNode.compareDocumentPosition(innerNode)&16);}else \n{\nreturn false;}}\n\n\n\nmodule.exports=containsNode;\n});\n__d('isTextNode',function(global, require, module, exports) {  var \n\n\n\n\n\n\n\n\n\n\n\nisNode=require('isNode');\n\n\n\n\n\nfunction isTextNode(object){\nreturn isNode(object)&&object.nodeType==3;}\n\n\nmodule.exports=isTextNode;\n});\n__d('setInnerHTML',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ExecutionEnvironment=require('ExecutionEnvironment');\n\nvar WHITESPACE_TEST=/^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST=/<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\n\n\n\n\n\n\n\n\nvar setInnerHTML=function(node,html){\nnode.innerHTML=html;};\n\n\n\nif(typeof MSApp!=='undefined'&&MSApp.execUnsafeLocalFunction){\nsetInnerHTML=function(node,html){\nMSApp.execUnsafeLocalFunction(function(){\nnode.innerHTML=html;});};}\n\n\n\n\nif(ExecutionEnvironment.canUseDOM){\n\n\n\n\n\n\nvar testElement=document.createElement('div');\ntestElement.innerHTML=' ';\nif(testElement.innerHTML===''){\nsetInnerHTML=function(node,html){\n\n\n\n\n\nif(node.parentNode){\nnode.parentNode.replaceChild(node,node);}\n\n\n\n\n\n\nif(WHITESPACE_TEST.test(html)||\nhtml[0]==='<'&&NONVISIBLE_TEST.test(html)){\n\n\n\n\n\n\nnode.innerHTML=String.fromCharCode(0xFEFF)+html;\n\n\n\nvar textNode=node.firstChild;\nif(textNode.data.length===1){\nnode.removeChild(textNode);}else \n{\ntextNode.deleteData(0,1);}}else \n\n{\nnode.innerHTML=html;}};}}\n\n\n\n\n\nmodule.exports=setInnerHTML;\n});\n__d('validateDOMNesting',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar assign=require('Object.assign');\nvar emptyFunction=require('emptyFunction');\nvar warning=require('warning');\n\nvar validateDOMNesting=emptyFunction;\n\nif(__DEV__){\n\n\n\n\n\n\n\n\n\n\n\n\nvar specialTags=[\n'address','applet','area','article','aside','base','basefont',\n'bgsound','blockquote','body','br','button','caption','center','col',\n'colgroup','dd','details','dir','div','dl','dt','embed','fieldset',\n'figcaption','figure','footer','form','frame','frameset','h1','h2',\n'h3','h4','h5','h6','head','header','hgroup','hr','html','iframe',\n'img','input','isindex','li','link','listing','main','marquee',\n'menu','menuitem','meta','nav','noembed','noframes','noscript',\n'object','ol','p','param','plaintext','pre','script','section',\n'select','source','style','summary','table','tbody','td','template',\n'textarea','tfoot','th','thead','title','tr','track','ul','wbr',\n'xmp'];\n\n\n\nvar inScopeTags=[\n'applet','caption','html','table','td','th','marquee','object',\n'template',\n\n\n\n\n'foreignObject','desc','title'];\n\n\n\nvar buttonScopeTags=inScopeTags.concat(['button']);\n\n\nvar impliedEndTags=\n['dd','dt','li','option','optgroup','p','rp','rt'];\n\nvar emptyAncestorInfo={\nparentTag:null,\n\nformTag:null,\naTagInScope:null,\nbuttonTagInScope:null,\nnobrTagInScope:null,\npTagInButtonScope:null,\n\nlistItemTagAutoclosing:null,\ndlItemTagAutoclosing:null};\n\n\nvar updatedAncestorInfo=function(oldInfo,tag,instance){\nvar ancestorInfo=assign({},oldInfo||emptyAncestorInfo);\nvar info={tag:tag,instance:instance};\n\nif(inScopeTags.indexOf(tag)!==-1){\nancestorInfo.aTagInScope=null;\nancestorInfo.buttonTagInScope=null;\nancestorInfo.nobrTagInScope=null;}\n\nif(buttonScopeTags.indexOf(tag)!==-1){\nancestorInfo.pTagInButtonScope=null;}\n\n\n\n\nif(\nspecialTags.indexOf(tag)!==-1&&\ntag!=='address'&&tag!=='div'&&tag!=='p')\n{\nancestorInfo.listItemTagAutoclosing=null;\nancestorInfo.dlItemTagAutoclosing=null;}\n\n\nancestorInfo.parentTag=info;\n\nif(tag==='form'){\nancestorInfo.formTag=info;}\n\nif(tag==='a'){\nancestorInfo.aTagInScope=info;}\n\nif(tag==='button'){\nancestorInfo.buttonTagInScope=info;}\n\nif(tag==='nobr'){\nancestorInfo.nobrTagInScope=info;}\n\nif(tag==='p'){\nancestorInfo.pTagInButtonScope=info;}\n\nif(tag==='li'){\nancestorInfo.listItemTagAutoclosing=info;}\n\nif(tag==='dd'||tag==='dt'){\nancestorInfo.dlItemTagAutoclosing=info;}\n\n\nreturn ancestorInfo;};\n\n\n\n\n\nvar isTagValidWithParent=function(tag,parentTag){\n\nswitch(parentTag){\n\ncase 'select':\nreturn tag==='option'||tag==='optgroup'||tag==='#text';\ncase 'optgroup':\nreturn tag==='option'||tag==='#text';\n\n\ncase 'option':\nreturn tag==='#text';\n\n\n\n\n\n\n\ncase 'tr':\nreturn (\ntag==='th'||tag==='td'||tag==='style'||tag==='script'||\ntag==='template');\n\n\n\ncase 'tbody':\ncase 'thead':\ncase 'tfoot':\nreturn (\ntag==='tr'||tag==='style'||tag==='script'||\ntag==='template');\n\n\n\ncase 'colgroup':\nreturn tag==='col'||tag==='template';\n\n\ncase 'table':\nreturn (\ntag==='caption'||tag==='colgroup'||tag==='tbody'||\ntag==='tfoot'||tag==='thead'||tag==='style'||\ntag==='script'||tag==='template');\n\n\n\ncase 'head':\nreturn (\ntag==='base'||tag==='basefont'||tag==='bgsound'||\ntag==='link'||tag==='meta'||tag==='title'||\ntag==='noscript'||tag==='noframes'||tag==='style'||\ntag==='script'||tag==='template');\n\n\n\ncase 'html':\nreturn tag==='head'||tag==='body';}\n\n\n\n\n\nswitch(tag){\ncase 'h1':\ncase 'h2':\ncase 'h3':\ncase 'h4':\ncase 'h5':\ncase 'h6':\nreturn (\nparentTag!=='h1'&&parentTag!=='h2'&&parentTag!=='h3'&&\nparentTag!=='h4'&&parentTag!=='h5'&&parentTag!=='h6');\n\n\ncase 'rp':\ncase 'rt':\nreturn impliedEndTags.indexOf(parentTag)===-1;\n\ncase 'caption':\ncase 'col':\ncase 'colgroup':\ncase 'frame':\ncase 'head':\ncase 'tbody':\ncase 'td':\ncase 'tfoot':\ncase 'th':\ncase 'thead':\ncase 'tr':\n\n\n\n\nreturn parentTag==null;}\n\n\nreturn true;};\n\n\n\n\n\nvar findInvalidAncestorForTag=function(tag,ancestorInfo){\nswitch(tag){\ncase 'address':\ncase 'article':\ncase 'aside':\ncase 'blockquote':\ncase 'center':\ncase 'details':\ncase 'dialog':\ncase 'dir':\ncase 'div':\ncase 'dl':\ncase 'fieldset':\ncase 'figcaption':\ncase 'figure':\ncase 'footer':\ncase 'header':\ncase 'hgroup':\ncase 'main':\ncase 'menu':\ncase 'nav':\ncase 'ol':\ncase 'p':\ncase 'section':\ncase 'summary':\ncase 'ul':\n\ncase 'pre':\ncase 'listing':\n\ncase 'table':\n\ncase 'hr':\n\ncase 'xmp':\n\ncase 'h1':\ncase 'h2':\ncase 'h3':\ncase 'h4':\ncase 'h5':\ncase 'h6':\nreturn ancestorInfo.pTagInButtonScope;\n\ncase 'form':\nreturn ancestorInfo.formTag||ancestorInfo.pTagInButtonScope;\n\ncase 'li':\nreturn ancestorInfo.listItemTagAutoclosing;\n\ncase 'dd':\ncase 'dt':\nreturn ancestorInfo.dlItemTagAutoclosing;\n\ncase 'button':\nreturn ancestorInfo.buttonTagInScope;\n\ncase 'a':\n\n\nreturn ancestorInfo.aTagInScope;\n\ncase 'nobr':\nreturn ancestorInfo.nobrTagInScope;}\n\n\nreturn null;};\n\n\n\n\n\n\nvar findOwnerStack=function(instance){\nif(!instance){\nreturn [];}\n\n\nvar stack=[];\n\ndo {\n\nstack.push(instance);}while(\ninstance=instance._currentElement._owner);\nstack.reverse();\nreturn stack;};\n\n\nvar didWarn={};\n\nvalidateDOMNesting=function(childTag,childInstance,ancestorInfo){\nancestorInfo=ancestorInfo||emptyAncestorInfo;\nvar parentInfo=ancestorInfo.parentTag;\nvar parentTag=parentInfo&&parentInfo.tag;\n\nvar invalidParent=\nisTagValidWithParent(childTag,parentTag)?null:parentInfo;\nvar invalidAncestor=\ninvalidParent?null:findInvalidAncestorForTag(childTag,ancestorInfo);\nvar problematic=invalidParent||invalidAncestor;\n\nif(problematic){\nvar ancestorTag=problematic.tag;\nvar ancestorInstance=problematic.instance;\n\nvar childOwner=childInstance&&childInstance._currentElement._owner;\nvar ancestorOwner=\nancestorInstance&&ancestorInstance._currentElement._owner;\n\nvar childOwners=findOwnerStack(childOwner);\nvar ancestorOwners=findOwnerStack(ancestorOwner);\n\nvar minStackLen=Math.min(childOwners.length,ancestorOwners.length);\nvar i;\n\nvar deepestCommon=-1;\nfor(i=0;i<minStackLen;i++){\nif(childOwners[i]===ancestorOwners[i]){\ndeepestCommon=i;}else \n{\nbreak;}}\n\n\n\nvar UNKNOWN='(unknown)';\nvar childOwnerNames=childOwners.slice(deepestCommon+1).map(\nfunction(inst){return inst.getName()||UNKNOWN;});\n\nvar ancestorOwnerNames=ancestorOwners.slice(deepestCommon+1).map(\nfunction(inst){return inst.getName()||UNKNOWN;});\n\nvar ownerInfo=[].concat(\n\n\ndeepestCommon!==-1?\nchildOwners[deepestCommon].getName()||UNKNOWN:\n[],\nancestorOwnerNames,\nancestorTag,\n\ninvalidAncestor?['...']:[],\nchildOwnerNames,\nchildTag).\njoin(' > ');\n\nvar warnKey=\n!!invalidParent+'|'+childTag+'|'+ancestorTag+'|'+ownerInfo;\nif(didWarn[warnKey]){\nreturn;}\n\ndidWarn[warnKey]=true;\n\nif(invalidParent){\nvar info='';\nif(ancestorTag==='table'&&childTag==='tr'){\ninfo+=\n' Add a <tbody> to your code to match the DOM tree generated by '+\n'the browser.';}\n\nwarning(\nfalse,\n'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. '+\n'See %s.%s',\nchildTag,\nancestorTag,\nownerInfo,\ninfo);}else \n\n{\nwarning(\nfalse,\n'validateDOMNesting(...): <%s> cannot appear as a descendant of '+\n'<%s>. See %s.',\nchildTag,\nancestorTag,\nownerInfo);}}};\n\n\n\n\n\nvalidateDOMNesting.ancestorInfoContextKey=\n'__validateDOMNesting_ancestorInfo$'+Math.random().toString(36).slice(2);\n\nvalidateDOMNesting.updatedAncestorInfo=updatedAncestorInfo;\n\n\nvalidateDOMNesting.isTagValidInContext=function(tag,ancestorInfo){\nancestorInfo=ancestorInfo||emptyAncestorInfo;\nvar parentInfo=ancestorInfo.parentTag;\nvar parentTag=parentInfo&&parentInfo.tag;\nreturn (\nisTagValidWithParent(tag,parentTag)&&\n!findInvalidAncestorForTag(tag,ancestorInfo));};}\n\n\n\n\nmodule.exports=validateDOMNesting;\n});\n__d('AppStateIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Map=require('Map');\nvar NativeModules=require('NativeModules');\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar RCTAppState=NativeModules.AppState;\n\nvar logError=require('logError');\nvar invariant=require('invariant');\n\nvar _eventHandlers={\nchange:new Map(),\nmemoryWarning:new Map()};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AppStateIOS={\n\n\n\n\n\naddEventListener:function(\ntype,\nhandler)\n{\ninvariant(\n['change','memoryWarning'].indexOf(type)!==-1,\n'Trying to subscribe to unknown event: \"%s\"',type);\n\nif(type==='change'){\n_eventHandlers[type].set(handler,RCTDeviceEventEmitter.addListener(\n'appStateDidChange',\nfunction(appStateData){\nhandler(appStateData.app_state);}));}else \n\n\nif(type==='memoryWarning'){\n_eventHandlers[type].set(handler,RCTDeviceEventEmitter.addListener(\n'memoryWarning',\nhandler));}},\n\n\n\n\n\n\n\nremoveEventListener:function(\ntype,\nhandler)\n{\ninvariant(\n['change','memoryWarning'].indexOf(type)!==-1,\n'Trying to remove listener for unknown event: \"%s\"',type);\n\nif(!_eventHandlers[type].has(handler)){\nreturn;}\n\n_eventHandlers[type].get(handler).remove();\n_eventHandlers[type].delete(handler);},\n\n\n\n\n\n\ncurrentState:'active'};\n\n\n\nRCTDeviceEventEmitter.addListener(\n'appStateDidChange',\nfunction(appStateData){\nAppStateIOS.currentState=appStateData.app_state;});\n\n\n\nRCTAppState.getCurrentAppState(\nfunction(appStateData){\nAppStateIOS.currentState=appStateData.app_state;},\n\nlogError);\n\n\nmodule.exports=AppStateIOS;\n});\n__d('AsyncStorage',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar NativeModules=require('NativeModules');\nvar RCTAsyncSQLiteStorage=NativeModules.AsyncSQLiteDBStorage;\nvar RCTAsyncRocksDBStorage=NativeModules.AsyncRocksDBStorage;\nvar RCTAsyncFileStorage=NativeModules.AsyncLocalStorage;\n\n\nvar RCTAsyncStorage=RCTAsyncRocksDBStorage||RCTAsyncSQLiteStorage||RCTAsyncFileStorage;\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AsyncStorage={\n\n\n\n\ngetItem:function(\nkey,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiGet([key],function(errors,result){\n\nvar value=result&&result[0]&&result[0][1]?result[0][1]:null;\nvar errs=convertErrors(errors);\ncallback&&callback(errs&&errs[0],value);\nif(errs){\nreject(errs[0]);}else \n{\nresolve(value);}});});},\n\n\n\n\n\n\n\n\n\nsetItem:function(\nkey,\nvalue,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiSet([[key,value]],function(errors){\nvar errs=convertErrors(errors);\ncallback&&callback(errs&&errs[0]);\nif(errs){\nreject(errs[0]);}else \n{\nresolve(null);}});});},\n\n\n\n\n\n\n\n\nremoveItem:function(\nkey,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiRemove([key],function(errors){\nvar errs=convertErrors(errors);\ncallback&&callback(errs&&errs[0]);\nif(errs){\nreject(errs[0]);}else \n{\nresolve(null);}});});},\n\n\n\n\n\n\n\n\n\nmergeItem:function(\nkey,\nvalue,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiMerge([[key,value]],function(errors){\nvar errs=convertErrors(errors);\ncallback&&callback(errs&&errs[0]);\nif(errs){\nreject(errs[0]);}else \n{\nresolve(null);}});});},\n\n\n\n\n\n\n\n\n\n\nclear:function(callback){\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.clear(function(error){\ncallback&&callback(convertError(error));\nif(error&&convertError(error)){\nreject(convertError(error));}else \n{\nresolve(null);}});});},\n\n\n\n\n\n\n\n\ngetAllKeys:function(callback){\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.getAllKeys(function(error,keys){\ncallback&&callback(convertError(error),keys);\nif(error){\nreject(convertError(error));}else \n{\nresolve(keys);}});});},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmultiGet:function(\nkeys,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiGet(keys,function(errors,result){\nvar error=convertErrors(errors);\ncallback&&callback(error,result);\nif(error){\nreject(error);}else \n{\nresolve(result);}});});},\n\n\n\n\n\n\n\n\n\n\n\nmultiSet:function(\nkeyValuePairs,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiSet(keyValuePairs,function(errors){\nvar error=convertErrors(errors);\ncallback&&callback(error);\nif(error){\nreject(error);}else \n{\nresolve(null);}});});},\n\n\n\n\n\n\n\n\nmultiRemove:function(\nkeys,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiRemove(keys,function(errors){\nvar error=convertErrors(errors);\ncallback&&callback(error);\nif(error){\nreject(error);}else \n{\nresolve(null);}});});},\n\n\n\n\n\n\n\n\n\n\n\nmultiMerge:function(\nkeyValuePairs,\ncallback)\n{\nreturn new Promise(function(resolve,reject){\nRCTAsyncStorage.multiMerge(keyValuePairs,function(errors){\nvar error=convertErrors(errors);\ncallback&&callback(error);\nif(error){\nreject(error);}else \n{\nresolve(null);}});});}};\n\n\n\n\n\n\n\nif(!RCTAsyncStorage.multiMerge){\ndelete AsyncStorage.mergeItem;\ndelete AsyncStorage.multiMerge;}\n\n\nfunction convertErrors(errs){\nif(!errs){\nreturn null;}\n\nreturn (Array.isArray(errs)?errs:[errs]).map(function(e){return convertError(e);});}\n\n\nfunction convertError(error){\nif(!error){\nreturn null;}\n\nvar out=new Error(error.message);\nout.key=error.key;\nreturn out;}\n\n\nmodule.exports=AsyncStorage;\n});\n__d('BackAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction emptyFunction(){}\n\nvar BackAndroid={\nexitApp:emptyFunction,\naddEventListener:emptyFunction,\nremoveEventListener:emptyFunction};\n\n\nmodule.exports=BackAndroid;\n});\n__d('CameraRoll',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactPropTypes=require('ReactPropTypes');\nvar RCTCameraRollManager=require('NativeModules').CameraRollManager;\n\nvar createStrictShapeTypeChecker=require('createStrictShapeTypeChecker');\nvar deepFreezeAndThrowOnMutationInDev=\nrequire('deepFreezeAndThrowOnMutationInDev');\nvar invariant=require('invariant');\n\nvar GROUP_TYPES_OPTIONS=[\n'Album',\n'All',\n'Event',\n'Faces',\n'Library',\n'PhotoStream',\n'SavedPhotos'];\n\n\nvar ASSET_TYPE_OPTIONS=[\n'All',\n'Videos',\n'Photos'];\n\n\n\n\ndeepFreezeAndThrowOnMutationInDev(GROUP_TYPES_OPTIONS);\ndeepFreezeAndThrowOnMutationInDev(ASSET_TYPE_OPTIONS);\n\n\n\n\nvar getPhotosParamChecker=createStrictShapeTypeChecker({\n\n\n\n\nfirst:ReactPropTypes.number.isRequired,\n\n\n\n\n\nafter:ReactPropTypes.string,\n\n\n\n\ngroupTypes:ReactPropTypes.oneOf(GROUP_TYPES_OPTIONS),\n\n\n\n\n\ngroupName:ReactPropTypes.string,\n\n\n\n\nassetType:ReactPropTypes.oneOf(ASSET_TYPE_OPTIONS),\n\n\n\n\nmimeTypes:ReactPropTypes.arrayOf(ReactPropTypes.string)});\n\n\n\n\n\nvar getPhotosReturnChecker=createStrictShapeTypeChecker({\nedges:ReactPropTypes.arrayOf(createStrictShapeTypeChecker({\nnode:createStrictShapeTypeChecker({\ntype:ReactPropTypes.string.isRequired,\ngroup_name:ReactPropTypes.string.isRequired,\nimage:createStrictShapeTypeChecker({\nuri:ReactPropTypes.string.isRequired,\nheight:ReactPropTypes.number.isRequired,\nwidth:ReactPropTypes.number.isRequired,\nisStored:ReactPropTypes.bool}).\nisRequired,\ntimestamp:ReactPropTypes.number.isRequired,\nlocation:createStrictShapeTypeChecker({\nlatitude:ReactPropTypes.number,\nlongitude:ReactPropTypes.number,\naltitude:ReactPropTypes.number,\nheading:ReactPropTypes.number,\nspeed:ReactPropTypes.number})}).\n\nisRequired})).\nisRequired,\npage_info:createStrictShapeTypeChecker({\nhas_next_page:ReactPropTypes.bool.isRequired,\nstart_cursor:ReactPropTypes.string,\nend_cursor:ReactPropTypes.string}).\nisRequired});var \n\n\n\n\n\nCameraRoll=(function(){function CameraRoll(){babelHelpers.classCallCheck(this,CameraRoll);}babelHelpers.createClass(CameraRoll,null,[{key:'saveImageWithTag',value:function saveImageWithTag(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntag,successCallback,errorCallback){\ninvariant(\ntypeof tag==='string',\n'CameraRoll.saveImageWithTag tag must be a valid string.');\n\nRCTCameraRollManager.saveImageWithTag(\ntag,\nfunction(imageTag){\nsuccessCallback&&successCallback(imageTag);},\n\nfunction(errorMessage){\nerrorCallback&&errorCallback(errorMessage);});}},{key:'getPhotos',value:function getPhotos(\n\n\n\n\n\n\n\n\n\n\n\n\nparams,callback,errorCallback){\nvar metaCallback=callback;\nif(__DEV__){\ngetPhotosParamChecker({params:params},'params','CameraRoll.getPhotos');\ninvariant(\ntypeof callback==='function',\n'CameraRoll.getPhotos callback must be a valid function.');\n\ninvariant(\ntypeof errorCallback==='function',\n'CameraRoll.getPhotos errorCallback must be a valid function.');}\n\n\nif(__DEV__){\nmetaCallback=function(response){\ngetPhotosReturnChecker(\n{response:response},\n'response',\n'CameraRoll.getPhotos callback');\n\ncallback(response);};}\n\n\nRCTCameraRollManager.getPhotos(params,metaCallback,errorCallback);}}]);return CameraRoll;})();\n\n\n\nCameraRoll.GroupTypesOptions=GROUP_TYPES_OPTIONS;\nCameraRoll.AssetTypeOptions=ASSET_TYPE_OPTIONS;\n\nmodule.exports=CameraRoll;\n});\n__d('ImagePickerIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTImagePicker=require('NativeModules').ImagePickerIOS;\n\nvar ImagePickerIOS={\ncanRecordVideos:function(callback){\nreturn RCTImagePicker.canRecordVideos(callback);},\n\ncanUseCamera:function(callback){\nreturn RCTImagePicker.canUseCamera(callback);},\n\nopenCameraDialog:function(config,successCallback,cancelCallback){\nconfig=babelHelpers.extends({\nvideoMode:false},\nconfig);\n\nreturn RCTImagePicker.openCameraDialog(config,successCallback,cancelCallback);},\n\nopenSelectDialog:function(config,successCallback,cancelCallback){\nconfig=babelHelpers.extends({\nshowImages:true,\nshowVideos:false},\nconfig);\n\nreturn RCTImagePicker.openSelectDialog(config,successCallback,cancelCallback);}};\n\n\n\nmodule.exports=ImagePickerIOS;\n});\n__d('IntentAndroid',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\nmodule.exports={\nopenURI:function(url){\nconsole.error('IntentAndroid is not supported on iOS');}};\n});\n__d('LayoutAnimation',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar PropTypes=require('ReactPropTypes');\nvar RCTUIManager=require('NativeModules').UIManager;\n\nvar createStrictShapeTypeChecker=require('createStrictShapeTypeChecker');\nvar keyMirror=require('keyMirror');\n\nvar TypesEnum={\nspring:true,\nlinear:true,\neaseInEaseOut:true,\neaseIn:true,\neaseOut:true,\nkeyboard:true};\n\nvar Types=keyMirror(TypesEnum);\n\nvar PropertiesEnum={\nopacity:true,\nscaleXY:true};\n\nvar Properties=keyMirror(PropertiesEnum);\n\nvar animChecker=createStrictShapeTypeChecker({\nduration:PropTypes.number,\ndelay:PropTypes.number,\nspringDamping:PropTypes.number,\ninitialVelocity:PropTypes.number,\ntype:PropTypes.oneOf(\nObject.keys(Types)),\n\nproperty:PropTypes.oneOf(\nObject.keys(Properties))});\n\n\n\n\n\n\n\n\n\n\n\n\nvar configChecker=createStrictShapeTypeChecker({\nduration:PropTypes.number.isRequired,\ncreate:animChecker,\nupdate:animChecker,\ndelete:animChecker});\n\n\n\n\n\n\n\n\n\nfunction configureNext(config,onAnimationDidEnd){\nconfigChecker({config:config},'config','LayoutAnimation.configureNext');\nRCTUIManager.configureNextLayoutAnimation(\nconfig,onAnimationDidEnd||function(){},function(){});}\n\n\n\nfunction create(duration,type,creationProp){\nreturn {\nduration:duration,\ncreate:{\ntype:type,\nproperty:creationProp},\n\nupdate:{\ntype:type}};}\n\n\n\n\nvar Presets={\neaseInEaseOut:create(\n300,Types.easeInEaseOut,Properties.opacity),\n\nlinear:create(\n500,Types.linear,Properties.opacity),\n\nspring:{\nduration:700,\ncreate:{\ntype:Types.linear,\nproperty:Properties.opacity},\n\nupdate:{\ntype:Types.spring,\nspringDamping:0.4}}};\n\n\n\n\n\n\n\n\n\n\n\nvar LayoutAnimation={\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconfigureNext:configureNext,\n\n\n\ncreate:create,\nTypes:Types,\nProperties:Properties,\nconfigChecker:configChecker,\nPresets:Presets,\neaseInEaseOut:configureNext.bind(\nnull,Presets.easeInEaseOut),\n\nlinear:configureNext.bind(\nnull,Presets.linear),\n\nspring:configureNext.bind(\nnull,Presets.spring)};\n\n\n\nmodule.exports=LayoutAnimation;\n});\n__d('LinkingIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar RCTLinkingManager=require('NativeModules').LinkingManager;\nvar Map=require('Map');\nvar invariant=require('invariant');\n\nvar _notifHandlers=new Map();\nvar _initialURL=RCTLinkingManager&&\nRCTLinkingManager.initialURL;\n\nvar DEVICE_NOTIF_EVENT='openURL';var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nLinkingIOS=(function(){function LinkingIOS(){babelHelpers.classCallCheck(this,LinkingIOS);}babelHelpers.createClass(LinkingIOS,null,[{key:'addEventListener',value:function addEventListener(\n\n\n\n\ntype,handler){\ninvariant(\ntype==='url',\n'LinkingIOS only supports `url` events');\n\nvar listener=RCTDeviceEventEmitter.addListener(\nDEVICE_NOTIF_EVENT,\nhandler);\n\n_notifHandlers.set(handler,listener);}},{key:'removeEventListener',value:function removeEventListener(\n\n\n\n\n\ntype,handler){\ninvariant(\ntype==='url',\n'LinkingIOS only supports `url` events');\n\nvar listener=_notifHandlers.get(handler);\nif(!listener){\nreturn;}\n\nlistener.remove();\n_notifHandlers.delete(handler);}},{key:'openURL',value:function openURL(\n\n\n\n\n\nurl){\ninvariant(\ntypeof url==='string',\n'Invalid url: should be a string');\n\nRCTLinkingManager.openURL(url);}},{key:'canOpenURL',value:function canOpenURL(\n\n\n\n\n\n\n\n\n\nurl,callback){\ninvariant(\ntypeof url==='string',\n'Invalid url: should be a string');\n\ninvariant(\ntypeof callback==='function',\n'A valid callback function is required');\n\nRCTLinkingManager.canOpenURL(url,callback);}},{key:'popInitialURL',value:function popInitialURL()\n\n\n\n\n\n\n{\nvar initialURL=_initialURL;\n_initialURL=null;\nreturn initialURL;}}]);return LinkingIOS;})();\n\n\n\nmodule.exports=LinkingIOS;\n});\n__d('NetInfo',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Map=require('Map');\nvar NativeModules=require('NativeModules');\nvar Platform=require('Platform');\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar RCTNetInfo=NativeModules.NetInfo;\n\nvar DEVICE_REACHABILITY_EVENT='networkDidChange';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _subscriptions=new Map();\n\nif(Platform.OS==='ios'){\nvar _isConnected=function(\nreachability)\n{\nreturn reachability!=='none'&&\nreachability!=='unknown';};}else \n\nif(Platform.OS==='android'){\nvar _isConnected=function(\nconnectionType)\n{\nreturn connectionType!=='NONE'&&connectionType!=='UNKNOWN';};}\n\n\n\nvar _isConnectedSubscriptions=new Map();\n\nvar NetInfo={\naddEventListener:function(\neventName,\nhandler)\n{\nvar listener=RCTDeviceEventEmitter.addListener(\nDEVICE_REACHABILITY_EVENT,\nfunction(appStateData){\nhandler(appStateData.network_info);});\n\n\n_subscriptions.set(handler,listener);},\n\n\nremoveEventListener:function(\neventName,\nhandler)\n{\nvar listener=_subscriptions.get(handler);\nif(!listener){\nreturn;}\n\nlistener.remove();\n_subscriptions.delete(handler);},\n\n\nfetch:function(){\nreturn new Promise(function(resolve,reject){\nRCTNetInfo.getCurrentReachability(\nfunction(resp){\nresolve(resp.network_info);},\n\nreject);});},\n\n\n\n\nisConnected:{\naddEventListener:function(\neventName,\nhandler)\n{\nvar listener=function(connection){\nhandler(_isConnected(connection));};\n\n_isConnectedSubscriptions.set(handler,listener);\nNetInfo.addEventListener(\neventName,\nlistener);},\n\n\n\nremoveEventListener:function(\neventName,\nhandler)\n{\nvar listener=_isConnectedSubscriptions.get(handler);\nNetInfo.removeEventListener(\neventName,\nlistener);\n\n_isConnectedSubscriptions.delete(handler);},\n\n\nfetch:function(){\nreturn NetInfo.fetch().then(\nfunction(connection){return _isConnected(connection);});}},\n\n\n\n\nisConnectionMetered:{}};\n\n\nif(Platform.OS==='android'){\nNetInfo.isConnectionMetered=function(callback){\nRCTNetInfo.isConnectionMetered(function(_isMetered){\ncallback(_isMetered);});};}\n\n\n\n\nmodule.exports=NetInfo;\n});\n__d('PushNotificationIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar Map=require('Map');\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar RCTPushNotificationManager=require('NativeModules').PushNotificationManager;\nvar invariant=require('invariant');\n\nvar _notifHandlers=new Map();\nvar _initialNotification=RCTPushNotificationManager&&\nRCTPushNotificationManager.initialNotification;\n\nvar DEVICE_NOTIF_EVENT='remoteNotificationReceived';\nvar NOTIF_REGISTER_EVENT='remoteNotificationsRegistered';var \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nPushNotificationIOS=(function(){babelHelpers.createClass(PushNotificationIOS,null,[{key:'presentLocalNotification',value:function presentLocalNotification(\n\n\n\n\n\n\n\n\n\n\n\n\n\ndetails){\nRCTPushNotificationManager.presentLocalNotification(details);}},{key:'scheduleLocalNotification',value:function scheduleLocalNotification(\n\n\n\n\n\n\n\n\n\n\n\ndetails){\nRCTPushNotificationManager.scheduleLocalNotification(details);}},{key:'cancelAllLocalNotifications',value:function cancelAllLocalNotifications()\n\n\n\n\n\n{\nRCTPushNotificationManager.cancelAllLocalNotifications();}},{key:'setApplicationIconBadgeNumber',value:function setApplicationIconBadgeNumber(\n\n\n\n\n\nnumber){\nRCTPushNotificationManager.setApplicationIconBadgeNumber(number);}},{key:'getApplicationIconBadgeNumber',value:function getApplicationIconBadgeNumber(\n\n\n\n\n\ncallback){\nRCTPushNotificationManager.getApplicationIconBadgeNumber(callback);}},{key:'addEventListener',value:function addEventListener(\n\n\n\n\n\n\n\n\n\n\n\n\n\ntype,handler){\ninvariant(\ntype==='notification'||type==='register',\n'PushNotificationIOS only supports `notification` and `register` events');\n\nvar listener;\nif(type==='notification'){\nlistener=RCTDeviceEventEmitter.addListener(\nDEVICE_NOTIF_EVENT,\nfunction(notifData){\nhandler(new PushNotificationIOS(notifData));});}else \n\n\nif(type==='register'){\nlistener=RCTDeviceEventEmitter.addListener(\nNOTIF_REGISTER_EVENT,\nfunction(registrationInfo){\nhandler(registrationInfo.deviceToken);});}\n\n\n\n_notifHandlers.set(handler,listener);}},{key:'requestPermissions',value:function requestPermissions(\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\npermissions)\n\n\n\n{\nvar requestedPermissions={};\nif(permissions){\nrequestedPermissions={\nalert:!!permissions.alert,\nbadge:!!permissions.badge,\nsound:!!permissions.sound};}else \n\n{\nrequestedPermissions={\nalert:true,\nbadge:true,\nsound:true};}\n\n\nRCTPushNotificationManager.requestPermissions(requestedPermissions);}},{key:'abandonPermissions',value:function abandonPermissions()\n\n\n\n\n\n\n\n\n\n\n{\nRCTPushNotificationManager.abandonPermissions();}},{key:'checkPermissions',value:function checkPermissions(\n\n\n\n\n\n\n\n\n\n\ncallback){\ninvariant(\ntypeof callback==='function',\n'Must provide a valid callback');\n\nRCTPushNotificationManager.checkPermissions(callback);}},{key:'removeEventListener',value:function removeEventListener(\n\n\n\n\n\n\ntype,handler){\ninvariant(\ntype==='notification'||type==='register',\n'PushNotificationIOS only supports `notification` and `register` events');\n\nvar listener=_notifHandlers.get(handler);\nif(!listener){\nreturn;}\n\nlistener.remove();\n_notifHandlers.delete(handler);}},{key:'popInitialNotification',value:function popInitialNotification()\n\n\n\n\n\n\n\n\n\n\n{\nvar initialNotification=_initialNotification&&\nnew PushNotificationIOS(_initialNotification);\n_initialNotification=null;\nreturn initialNotification;}}]);\n\n\n\n\n\n\n\nfunction PushNotificationIOS(nativeNotif){var _this=this;babelHelpers.classCallCheck(this,PushNotificationIOS);\nthis._data={};\n\n\n\n\n\nObject.keys(nativeNotif).forEach(function(notifKey){\nvar notifVal=nativeNotif[notifKey];\nif(notifKey==='aps'){\n_this._alert=notifVal.alert;\n_this._sound=notifVal.sound;\n_this._badgeCount=notifVal.badge;}else \n{\n_this._data[notifKey]=notifVal;}});}babelHelpers.createClass(PushNotificationIOS,[{key:'getMessage',value:function getMessage()\n\n\n\n\n\n\n\n{\n\nreturn this._alert;}},{key:'getSound',value:function getSound()\n\n\n\n\n\n{\nreturn this._sound;}},{key:'getAlert',value:function getAlert()\n\n\n\n\n\n{\nreturn this._alert;}},{key:'getBadgeCount',value:function getBadgeCount()\n\n\n\n\n\n{\nreturn this._badgeCount;}},{key:'getData',value:function getData()\n\n\n\n\n\n{\nreturn this._data;}}]);return PushNotificationIOS;})();\n\n\n\nmodule.exports=PushNotificationIOS;\n});\n__d('Settings',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTDeviceEventEmitter=require('RCTDeviceEventEmitter');\nvar RCTSettingsManager=require('NativeModules').SettingsManager;\n\nvar invariant=require('invariant');\n\nvar subscriptions=[];\n\nvar Settings={\n_settings:RCTSettingsManager&&RCTSettingsManager.settings,\n\nget:function(key){\nreturn this._settings[key];},\n\n\nset:function(settings){\nthis._settings=babelHelpers.extends(this._settings,settings);\nRCTSettingsManager.setValues(settings);},\n\n\nwatchKeys:function(keys,callback){\nif(typeof keys==='string'){\nkeys=[keys];}\n\n\ninvariant(\nArray.isArray(keys),\n'keys should be a string or array of strings');\n\n\nvar sid=subscriptions.length;\nsubscriptions.push({keys:keys,callback:callback});\nreturn sid;},\n\n\nclearWatch:function(watchId){\nif(watchId<subscriptions.length){\nsubscriptions[watchId]={keys:[],callback:null};}},\n\n\n\n_sendObservations:function(body){var _this=this;\nObject.keys(body).forEach(function(key){\nvar newValue=body[key];\nvar didChange=_this._settings[key]!==newValue;\n_this._settings[key]=newValue;\n\nif(didChange){\nsubscriptions.forEach(function(sub){\nif(sub.keys.indexOf(key)!==-1&&sub.callback){\nsub.callback();}});}});}};\n\n\n\n\n\n\n\nRCTDeviceEventEmitter.addListener(\n'settingsUpdated',\nSettings._sendObservations.bind(Settings));\n\n\nmodule.exports=Settings;\n});\n__d('StatusBarIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTStatusBarManager=require('NativeModules').StatusBarManager;\n\n\n\n\n\n\n\n\n\n\n\n\nvar StatusBarIOS={\n\nsetStyle:function(style,animated){\nanimated=animated||false;\nRCTStatusBarManager.setStyle(style,animated);},\n\n\nsetHidden:function(hidden,animation){\nanimation=animation||'none';\nRCTStatusBarManager.setHidden(hidden,animation);},\n\n\nsetNetworkActivityIndicatorVisible:function(visible){\nRCTStatusBarManager.setNetworkActivityIndicatorVisible(visible);}};\n\n\n\nmodule.exports=StatusBarIOS;\n});\n__d('VibrationIOS',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar RCTVibration=require('NativeModules').Vibration;\n\nvar invariant=require('invariant');\n\n\n\n\n\n\n\n\n\n\n\n\nvar VibrationIOS={\nvibrate:function(){\ninvariant(\narguments[0]===undefined,\n'Vibration patterns not supported.');\n\nRCTVibration.vibrate();}};\n\n\n\nmodule.exports=VibrationIOS;\n});\n__d('RCTNativeAppEventEmitter',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventEmitter=require('EventEmitter');\n\nvar RCTNativeAppEventEmitter=new EventEmitter();\n\nmodule.exports=RCTNativeAppEventEmitter;\n});\n__d('LinkedStateMixin',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactLink=require('ReactLink');\nvar ReactStateSetters=require('ReactStateSetters');\n\n\n\n\nvar LinkedStateMixin={\n\n\n\n\n\n\n\n\n\nlinkState:function(key){\nreturn new ReactLink(\nthis.state[key],\nReactStateSetters.createStateKeySetter(this,key));}};\n\n\n\n\nmodule.exports=LinkedStateMixin;\n});\n__d('ReactLink',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar React=require('React');\n\n\n\n\n\nfunction ReactLink(value,requestChange){\nthis.value=value;\nthis.requestChange=requestChange;}\n\n\n\n\n\n\n\n\n\n\nfunction createLinkTypeChecker(linkType){\nvar shapes={\nvalue:typeof linkType==='undefined'?\nReact.PropTypes.any.isRequired:\nlinkType.isRequired,\nrequestChange:React.PropTypes.func.isRequired};\n\nreturn React.PropTypes.shape(shapes);}\n\n\nReactLink.PropTypes={\nlink:createLinkTypeChecker};\n\n\nmodule.exports=ReactLink;\n});\n__d('ReactStateSetters',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactStateSetters={\n\n\n\n\n\n\n\n\n\n\ncreateStateSetter:function(component,funcReturningState){\nreturn function(a,b,c,d,e,f){\nvar partialState=funcReturningState.call(component,a,b,c,d,e,f);\nif(partialState){\ncomponent.setState(partialState);}};},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncreateStateKeySetter:function(component,key){\n\nvar cache=component.__keySetters||(component.__keySetters={});\nreturn cache[key]||(cache[key]=createStateKeySetter(component,key));}};\n\n\n\nfunction createStateKeySetter(component,key){\n\n\n\nvar partialState={};\nreturn function stateKeySetter(value){\npartialState[key]=value;\ncomponent.setState(partialState);};}\n\n\n\nReactStateSetters.Mixin={\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncreateStateSetter:function(funcReturningState){\nreturn ReactStateSetters.createStateSetter(this,funcReturningState);},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncreateStateKeySetter:function(key){\nreturn ReactStateSetters.createStateKeySetter(this,key);}};\n\n\n\nmodule.exports=ReactStateSetters;\n});\n__d('ReactComponentWithPureRenderMixin',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar shallowCompare=require('shallowCompare');\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactComponentWithPureRenderMixin={\nshouldComponentUpdate:function(nextProps,nextState){\nreturn shallowCompare(this,nextProps,nextState);}};\n\n\n\nmodule.exports=ReactComponentWithPureRenderMixin;\n});\n__d('shallowCompare',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar shallowEqual=require('shallowEqual');\n\n\n\n\n\nfunction shallowCompare(instance,nextProps,nextState){\nreturn (\n!shallowEqual(instance.props,nextProps)||\n!shallowEqual(instance.state,nextState));}\n\n\n\nmodule.exports=shallowCompare;\n});\n__d('shallowEqual',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar hasOwnProperty=Object.prototype.hasOwnProperty;\n\n\n\n\n\n\nfunction shallowEqual(objA,objB){\nif(objA===objB){\nreturn true;}\n\n\nif(typeof objA!=='object'||objA===null||\ntypeof objB!=='object'||objB===null){\nreturn false;}\n\n\nvar keysA=Object.keys(objA);\nvar keysB=Object.keys(objB);\n\nif(keysA.length!==keysB.length){\nreturn false;}\n\n\n\nvar bHasOwnProperty=hasOwnProperty.bind(objB);\nfor(var i=0;i<keysA.length;i++){\nif(!bHasOwnProperty(keysA[i])||objA[keysA[i]]!==objB[keysA[i]]){\nreturn false;}}\n\n\n\nreturn true;}\n\n\nmodule.exports=shallowEqual;\n});\n__d('cloneWithProps',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactElement=require('ReactElement');\nvar ReactPropTransferer=require('ReactPropTransferer');\n\nvar keyOf=require('keyOf');\nvar warning=require('warning');\n\nvar CHILDREN_PROP=keyOf({children:null});\n\nvar didDeprecatedWarn=false;\n\n\n\n\n\n\n\n\n\n\n\nfunction cloneWithProps(child,props){\nif(__DEV__){\nwarning(\ndidDeprecatedWarn,\n'cloneWithProps(...) is deprecated. '+\n'Please use React.cloneElement instead.');\n\ndidDeprecatedWarn=true;\nwarning(\n!child.ref,\n'You are calling cloneWithProps() on a child with a ref. This is '+\n'dangerous because you\\'re creating a new child which will not be '+\n'added as a ref to its parent.');}\n\n\n\nvar newProps=ReactPropTransferer.mergeProps(props,child.props);\n\n\nif(!newProps.hasOwnProperty(CHILDREN_PROP)&&\nchild.props.hasOwnProperty(CHILDREN_PROP)){\nnewProps.children=child.props.children;}\n\n\n\n\nreturn ReactElement.createElement(child.type,newProps);}\n\n\nmodule.exports=cloneWithProps;\n});\n__d('ReactPropTransferer',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar assign=require('Object.assign');\nvar emptyFunction=require('emptyFunction');\nvar joinClasses=require('joinClasses');\n\n\n\n\n\n\n\n\nfunction createTransferStrategy(mergeStrategy){\nreturn function(props,key,value){\nif(!props.hasOwnProperty(key)){\nprops[key]=value;}else \n{\nprops[key]=mergeStrategy(props[key],value);}};}\n\n\n\n\nvar transferStrategyMerge=createTransferStrategy(function(a,b){\n\n\n\nreturn assign({},b,a);});\n\n\n\n\n\n\n\nvar TransferStrategies={\n\n\n\nchildren:emptyFunction,\n\n\n\nclassName:createTransferStrategy(joinClasses),\n\n\n\nstyle:transferStrategyMerge};\n\n\n\n\n\n\n\n\n\n\nfunction transferInto(props,newProps){\nfor(var thisKey in newProps){\nif(!newProps.hasOwnProperty(thisKey)){\ncontinue;}\n\n\nvar transferStrategy=TransferStrategies[thisKey];\n\nif(transferStrategy&&TransferStrategies.hasOwnProperty(thisKey)){\ntransferStrategy(props,thisKey,newProps[thisKey]);}else \nif(!props.hasOwnProperty(thisKey)){\nprops[thisKey]=newProps[thisKey];}}\n\n\nreturn props;}\n\n\n\n\n\n\n\n\nvar ReactPropTransferer={\n\n\n\n\n\n\n\n\nmergeProps:function(oldProps,newProps){\nreturn transferInto(assign({},oldProps),newProps);}};\n\n\n\n\nmodule.exports=ReactPropTransferer;\n});\n__d('joinClasses',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction joinClasses(className){\nif(!className){\nclassName='';}\n\nvar nextClass;\nvar argLength=arguments.length;\nif(argLength>1){\nfor(var ii=1;ii<argLength;ii++){\nnextClass=arguments[ii];\nif(nextClass){\nclassName=(className?className+' ':'')+nextClass;}}}\n\n\n\nreturn className;}\n\n\nmodule.exports=joinClasses;\n});\n__d('ReactFragment',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactChildren=require('ReactChildren');\nvar ReactElement=require('ReactElement');\n\nvar emptyFunction=require('emptyFunction');\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\n\n\n\n\n\n\n\nvar numericPropertyRegex=/^\\d+$/;\n\nvar warnedAboutNumeric=false;\n\nvar ReactFragment={\n\n\ncreate:function(object){\nif(typeof object!=='object'||!object||Array.isArray(object)){\nwarning(\nfalse,\n'React.addons.createFragment only accepts a single object. Got: %s',\nobject);\n\nreturn object;}\n\nif(ReactElement.isValidElement(object)){\nwarning(\nfalse,\n'React.addons.createFragment does not accept a ReactElement '+\n'without a wrapper object.');\n\nreturn object;}\n\n\ninvariant(\nobject.nodeType!==1,\n'React.addons.createFragment(...): Encountered an invalid child; DOM '+\n'elements are not valid children of React components.');\n\n\nvar result=[];\n\nfor(var key in object){\nif(__DEV__){\nif(!warnedAboutNumeric&&numericPropertyRegex.test(key)){\nwarning(\nfalse,\n'React.addons.createFragment(...): Child objects should have '+\n'non-numeric keys so ordering is preserved.');\n\nwarnedAboutNumeric=true;}}\n\n\nReactChildren.mapIntoWithKeyPrefixInternal(\nobject[key],\nresult,\nkey,\nemptyFunction.thatReturnsArgument);}\n\n\n\nreturn result;}};\n\n\n\nmodule.exports=ReactFragment;\n});\n__d('update',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar assign=require('Object.assign');\nvar keyOf=require('keyOf');\nvar invariant=require('invariant');\nvar hasOwnProperty=({}).hasOwnProperty;\n\nfunction shallowCopy(x){\nif(Array.isArray(x)){\nreturn x.concat();}else \nif(x&&typeof x==='object'){\nreturn assign(new x.constructor(),x);}else \n{\nreturn x;}}\n\n\n\nvar COMMAND_PUSH=keyOf({$push:null});\nvar COMMAND_UNSHIFT=keyOf({$unshift:null});\nvar COMMAND_SPLICE=keyOf({$splice:null});\nvar COMMAND_SET=keyOf({$set:null});\nvar COMMAND_MERGE=keyOf({$merge:null});\nvar COMMAND_APPLY=keyOf({$apply:null});\n\nvar ALL_COMMANDS_LIST=[\nCOMMAND_PUSH,\nCOMMAND_UNSHIFT,\nCOMMAND_SPLICE,\nCOMMAND_SET,\nCOMMAND_MERGE,\nCOMMAND_APPLY];\n\n\nvar ALL_COMMANDS_SET={};\n\nALL_COMMANDS_LIST.forEach(function(command){\nALL_COMMANDS_SET[command]=true;});\n\n\nfunction invariantArrayCase(value,spec,command){\ninvariant(\nArray.isArray(value),\n'update(): expected target of %s to be an array; got %s.',\ncommand,\nvalue);\n\nvar specValue=spec[command];\ninvariant(\nArray.isArray(specValue),\n'update(): expected spec of %s to be an array; got %s. '+\n'Did you forget to wrap your parameter in an array?',\ncommand,\nspecValue);}\n\n\n\nfunction update(value,spec){\ninvariant(\ntypeof spec==='object',\n'update(): You provided a key path to update() that did not contain one '+\n'of %s. Did you forget to include {%s: ...}?',\nALL_COMMANDS_LIST.join(', '),\nCOMMAND_SET);\n\n\nif(hasOwnProperty.call(spec,COMMAND_SET)){\ninvariant(\nObject.keys(spec).length===1,\n'Cannot have more than one key in an object with %s',\nCOMMAND_SET);\n\n\nreturn spec[COMMAND_SET];}\n\n\nvar nextValue=shallowCopy(value);\n\nif(hasOwnProperty.call(spec,COMMAND_MERGE)){\nvar mergeObj=spec[COMMAND_MERGE];\ninvariant(\nmergeObj&&typeof mergeObj==='object',\n'update(): %s expects a spec of type \\'object\\'; got %s',\nCOMMAND_MERGE,\nmergeObj);\n\ninvariant(\nnextValue&&typeof nextValue==='object',\n'update(): %s expects a target of type \\'object\\'; got %s',\nCOMMAND_MERGE,\nnextValue);\n\nassign(nextValue,spec[COMMAND_MERGE]);}\n\n\nif(hasOwnProperty.call(spec,COMMAND_PUSH)){\ninvariantArrayCase(value,spec,COMMAND_PUSH);\nspec[COMMAND_PUSH].forEach(function(item){\nnextValue.push(item);});}\n\n\n\nif(hasOwnProperty.call(spec,COMMAND_UNSHIFT)){\ninvariantArrayCase(value,spec,COMMAND_UNSHIFT);\nspec[COMMAND_UNSHIFT].forEach(function(item){\nnextValue.unshift(item);});}\n\n\n\nif(hasOwnProperty.call(spec,COMMAND_SPLICE)){\ninvariant(\nArray.isArray(value),\n'Expected %s target to be an array; got %s',\nCOMMAND_SPLICE,\nvalue);\n\ninvariant(\nArray.isArray(spec[COMMAND_SPLICE]),\n'update(): expected spec of %s to be an array of arrays; got %s. '+\n'Did you forget to wrap your parameters in an array?',\nCOMMAND_SPLICE,\nspec[COMMAND_SPLICE]);\n\nspec[COMMAND_SPLICE].forEach(function(args){\ninvariant(\nArray.isArray(args),\n'update(): expected spec of %s to be an array of arrays; got %s. '+\n'Did you forget to wrap your parameters in an array?',\nCOMMAND_SPLICE,\nspec[COMMAND_SPLICE]);\n\nnextValue.splice.apply(nextValue,args);});}\n\n\n\nif(hasOwnProperty.call(spec,COMMAND_APPLY)){\ninvariant(\ntypeof spec[COMMAND_APPLY]==='function',\n'update(): expected spec of %s to be a function; got %s.',\nCOMMAND_APPLY,\nspec[COMMAND_APPLY]);\n\nnextValue=spec[COMMAND_APPLY](nextValue);}\n\n\nfor(var k in spec){\nif(!(ALL_COMMANDS_SET.hasOwnProperty(k)&&ALL_COMMANDS_SET[k])){\nnextValue[k]=update(value[k],spec[k]);}}\n\n\n\nreturn nextValue;}\n\n\nmodule.exports=update;\n});\n__d('ReactTestUtils',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\nvar EventConstants=require('EventConstants');\nvar EventPluginHub=require('EventPluginHub');\nvar EventPropagators=require('EventPropagators');\nvar React=require('React');\nvar ReactDOM=require('ReactDOM');\nvar ReactElement=require('ReactElement');\nvar ReactBrowserEventEmitter=require('ReactBrowserEventEmitter');\nvar ReactCompositeComponent=require('ReactCompositeComponent');\nvar ReactInstanceHandles=require('ReactInstanceHandles');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactMount=require('ReactMount');\nvar ReactUpdates=require('ReactUpdates');\nvar SyntheticEvent=require('SyntheticEvent');\n\nvar assign=require('Object.assign');\nvar emptyObject=require('emptyObject');\nvar findDOMNode=require('findDOMNode');\nvar invariant=require('invariant');\n\nvar topLevelTypes=EventConstants.topLevelTypes;\n\nfunction Event(suffix){}\n\n\n\n\n\nfunction findAllInRenderedTreeInternal(inst,test){\nif(!inst||!inst.getPublicInstance){\nreturn [];}\n\nvar publicInst=inst.getPublicInstance();\nvar ret=test(publicInst)?[publicInst]:[];\nvar currentElement=inst._currentElement;\nif(ReactTestUtils.isDOMComponent(publicInst)){\nvar renderedChildren=inst._renderedChildren;\nvar key;\nfor(key in renderedChildren){\nif(!renderedChildren.hasOwnProperty(key)){\ncontinue;}\n\nret=ret.concat(\nfindAllInRenderedTreeInternal(\nrenderedChildren[key],\ntest));}}else \n\n\n\nif(\nReactElement.isValidElement(currentElement)&&\ntypeof currentElement.type==='function')\n{\nret=ret.concat(\nfindAllInRenderedTreeInternal(inst._renderedComponent,test));}\n\n\nreturn ret;}\n\n\n\n\n\n\n\nvar ReactTestUtils={\nrenderIntoDocument:function(instance){\nvar div=document.createElement('div');\n\n\n\n\n\nreturn ReactDOM.render(instance,div);},\n\n\nisElement:function(element){\nreturn ReactElement.isValidElement(element);},\n\n\nisElementOfType:function(inst,convenienceConstructor){\nreturn (\nReactElement.isValidElement(inst)&&\ninst.type===convenienceConstructor);},\n\n\n\nisDOMComponent:function(inst){\nreturn !!(inst&&inst.nodeType===1&&inst.tagName);},\n\n\nisDOMComponentElement:function(inst){\nreturn !!(inst&&\nReactElement.isValidElement(inst)&&\n!!inst.tagName);},\n\n\nisCompositeComponent:function(inst){\nif(ReactTestUtils.isDOMComponent(inst)){\n\n\nreturn false;}\n\nreturn inst!=null&&\ntypeof inst.render==='function'&&\ntypeof inst.setState==='function';},\n\n\nisCompositeComponentWithType:function(inst,type){\nif(!ReactTestUtils.isCompositeComponent(inst)){\nreturn false;}\n\nvar internalInstance=ReactInstanceMap.get(inst);\nvar constructor=internalInstance.\n_currentElement.\ntype;\n\nreturn constructor===type;},\n\n\nisCompositeComponentElement:function(inst){\nif(!ReactElement.isValidElement(inst)){\nreturn false;}\n\n\n\nvar prototype=inst.type.prototype;\nreturn (\ntypeof prototype.render==='function'&&\ntypeof prototype.setState==='function');},\n\n\n\nisCompositeComponentElementWithType:function(inst,type){\nvar internalInstance=ReactInstanceMap.get(inst);\nvar constructor=internalInstance.\n_currentElement.\ntype;\n\nreturn !!(ReactTestUtils.isCompositeComponentElement(inst)&&\nconstructor===type);},\n\n\ngetRenderedChildOfCompositeComponent:function(inst){\nif(!ReactTestUtils.isCompositeComponent(inst)){\nreturn null;}\n\nvar internalInstance=ReactInstanceMap.get(inst);\nreturn internalInstance._renderedComponent.getPublicInstance();},\n\n\nfindAllInRenderedTree:function(inst,test){\nif(!inst){\nreturn [];}\n\ninvariant(\nReactTestUtils.isCompositeComponent(inst),\n'findAllInRenderedTree(...): instance must be a composite component');\n\nreturn findAllInRenderedTreeInternal(ReactInstanceMap.get(inst),test);},\n\n\n\n\n\n\n\nscryRenderedDOMComponentsWithClass:function(root,classNames){\nif(!Array.isArray(classNames)){\nclassNames=classNames.split(/\\s+/);}\n\nreturn ReactTestUtils.findAllInRenderedTree(root,function(inst){\nif(ReactTestUtils.isDOMComponent(inst)){\nvar className=inst.className;\nif(typeof className!=='string'){\n\nclassName=inst.getAttribute('class')||'';}\n\nvar classList=className.split(/\\s+/);\nreturn classNames.every(function(name){\nreturn classList.indexOf(name)!==-1;});}\n\n\nreturn false;});},\n\n\n\n\n\n\n\n\n\nfindRenderedDOMComponentWithClass:function(root,className){\nvar all=\nReactTestUtils.scryRenderedDOMComponentsWithClass(root,className);\nif(all.length!==1){\nthrow new Error('Did not find exactly one match '+\n'(found: '+all.length+') for class:'+className);}\n\n\nreturn all[0];},\n\n\n\n\n\n\n\n\nscryRenderedDOMComponentsWithTag:function(root,tagName){\nreturn ReactTestUtils.findAllInRenderedTree(root,function(inst){\nreturn ReactTestUtils.isDOMComponent(inst)&&\ninst.tagName.toUpperCase()===tagName.toUpperCase();});},\n\n\n\n\n\n\n\n\n\nfindRenderedDOMComponentWithTag:function(root,tagName){\nvar all=ReactTestUtils.scryRenderedDOMComponentsWithTag(root,tagName);\nif(all.length!==1){\nthrow new Error('Did not find exactly one match for tag:'+tagName);}\n\nreturn all[0];},\n\n\n\n\n\n\n\nscryRenderedComponentsWithType:function(root,componentType){\nreturn ReactTestUtils.findAllInRenderedTree(root,function(inst){\nreturn ReactTestUtils.isCompositeComponentWithType(\ninst,\ncomponentType);});},\n\n\n\n\n\n\n\n\n\n\nfindRenderedComponentWithType:function(root,componentType){\nvar all=ReactTestUtils.scryRenderedComponentsWithType(\nroot,\ncomponentType);\n\nif(all.length!==1){\nthrow new Error(\n'Did not find exactly one match for componentType:'+componentType+\n' (found '+all.length+')');}\n\n\nreturn all[0];},\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmockComponent:function(module,mockTagName){\nmockTagName=mockTagName||module.mockTagName||'div';\n\nmodule.prototype.render.mockImplementation(function(){\nreturn React.createElement(\nmockTagName,\nnull,\nthis.props.children);});\n\n\n\nreturn this;},\n\n\n\n\n\n\n\n\n\nsimulateNativeEventOnNode:function(topLevelType,node,fakeNativeEvent){\nfakeNativeEvent.target=node;\nReactBrowserEventEmitter.ReactEventListener.dispatchEvent(\ntopLevelType,\nfakeNativeEvent);},\n\n\n\n\n\n\n\n\n\n\nsimulateNativeEventOnDOMComponent:function(\ntopLevelType,\ncomp,\nfakeNativeEvent){\nReactTestUtils.simulateNativeEventOnNode(\ntopLevelType,\nfindDOMNode(comp),\nfakeNativeEvent);},\n\n\n\nnativeTouchData:function(x,y){\nreturn {\ntouches:[\n{pageX:x,pageY:y}]};},\n\n\n\n\ncreateRenderer:function(){\nreturn new ReactShallowRenderer();},\n\n\nSimulate:null,\nSimulateNative:{}};\n\n\n\n\n\nvar ReactShallowRenderer=function(){\nthis._instance=null;};\n\n\nReactShallowRenderer.prototype.getRenderOutput=function(){\nreturn (\nthis._instance&&this._instance._renderedComponent&&\nthis._instance._renderedComponent._renderedOutput||\nnull);};\n\n\n\nvar NoopInternalComponent=function(element){\nthis._renderedOutput=element;\nthis._currentElement=element;};\n\n\nNoopInternalComponent.prototype={\n\nmountComponent:function(){},\n\n\nreceiveComponent:function(element){\nthis._renderedOutput=element;\nthis._currentElement=element;},\n\n\nunmountComponent:function(){}};\n\n\n\n\nvar ShallowComponentWrapper=function(){};\nassign(\nShallowComponentWrapper.prototype,\nReactCompositeComponent.Mixin,{\n_instantiateReactComponent:function(element){\nreturn new NoopInternalComponent(element);},\n\n_replaceNodeWithMarkupByID:function(){},\n_renderValidatedComponent:\nReactCompositeComponent.Mixin.\n_renderValidatedComponentWithoutOwnerOrContext});\n\n\n\nReactShallowRenderer.prototype.render=function(element,context){\ninvariant(\nReactElement.isValidElement(element),\n'ReactShallowRenderer render(): Invalid component element.%s',\ntypeof element==='function'?\n' Instead of passing a component class, make sure to instantiate '+\n'it by passing it to React.createElement.':\n'');\n\ninvariant(\ntypeof element.type!=='string',\n'ReactShallowRenderer render(): Shallow rendering works only with custom '+\n'components, not primitives (%s). Instead of calling `.render(el)` and '+\n'inspecting the rendered output, look at `el.props` directly instead.',\nelement.type);\n\n\nif(!context){\ncontext=emptyObject;}\n\nvar transaction=ReactUpdates.ReactReconcileTransaction.getPooled(false);\nthis._render(element,transaction,context);\nReactUpdates.ReactReconcileTransaction.release(transaction);};\n\n\nReactShallowRenderer.prototype.unmount=function(){\nif(this._instance){\nthis._instance.unmountComponent();}};\n\n\n\nReactShallowRenderer.prototype._render=function(element,transaction,context){\nif(this._instance){\nthis._instance.receiveComponent(element,transaction,context);}else \n{\nvar rootID=ReactInstanceHandles.createReactRootID();\nvar instance=new ShallowComponentWrapper(element.type);\ninstance.construct(element);\n\ninstance.mountComponent(rootID,transaction,context);\n\nthis._instance=instance;}};\n\n\n\n\n\n\n\n\n\n\n\nfunction makeSimulator(eventType){\nreturn function(domComponentOrNode,eventData){\nvar node;\nif(ReactTestUtils.isDOMComponent(domComponentOrNode)){\nnode=findDOMNode(domComponentOrNode);}else \nif(domComponentOrNode.tagName){\nnode=domComponentOrNode;}\n\n\nvar dispatchConfig=\nReactBrowserEventEmitter.eventNameDispatchConfigs[eventType];\n\nvar fakeNativeEvent=new Event();\nfakeNativeEvent.target=node;\n\n\nvar event=new SyntheticEvent(\ndispatchConfig,\nReactMount.getID(node),\nfakeNativeEvent,\nnode);\n\nassign(event,eventData);\n\nif(dispatchConfig.phasedRegistrationNames){\nEventPropagators.accumulateTwoPhaseDispatches(event);}else \n{\nEventPropagators.accumulateDirectDispatches(event);}\n\n\nReactUpdates.batchedUpdates(function(){\nEventPluginHub.enqueueEvents(event);\nEventPluginHub.processEventQueue(true);});};}\n\n\n\n\nfunction buildSimulators(){\nReactTestUtils.Simulate={};\n\nvar eventType;\nfor(eventType in ReactBrowserEventEmitter.eventNameDispatchConfigs){\n\n\n\n\nReactTestUtils.Simulate[eventType]=makeSimulator(eventType);}}\n\n\n\n\nvar oldInjectEventPluginOrder=EventPluginHub.injection.injectEventPluginOrder;\nEventPluginHub.injection.injectEventPluginOrder=function(){\noldInjectEventPluginOrder.apply(this,arguments);\nbuildSimulators();};\n\nvar oldInjectEventPlugins=EventPluginHub.injection.injectEventPluginsByName;\nEventPluginHub.injection.injectEventPluginsByName=function(){\noldInjectEventPlugins.apply(this,arguments);\nbuildSimulators();};\n\n\nbuildSimulators();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction makeNativeSimulator(eventType){\nreturn function(domComponentOrNode,nativeEventData){\nvar fakeNativeEvent=new Event(eventType);\nassign(fakeNativeEvent,nativeEventData);\nif(ReactTestUtils.isDOMComponent(domComponentOrNode)){\nReactTestUtils.simulateNativeEventOnDOMComponent(\neventType,\ndomComponentOrNode,\nfakeNativeEvent);}else \n\nif(domComponentOrNode.tagName){\n\nReactTestUtils.simulateNativeEventOnNode(\neventType,\ndomComponentOrNode,\nfakeNativeEvent);}};}\n\n\n\n\n\nObject.keys(topLevelTypes).forEach(function(eventType){\n\nvar convenienceName=eventType.indexOf('top')===0?\neventType.charAt(3).toLowerCase()+eventType.substr(4):eventType;\n\n\n\n\nReactTestUtils.SimulateNative[convenienceName]=\nmakeNativeSimulator(eventType);});\n\n\nmodule.exports=ReactTestUtils;\n});\n__d('ReactDOM',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\nvar ReactUpdates=require('ReactUpdates');\n\n\nvar ReactDOM={\nunstable_batchedUpdates:ReactUpdates.batchedUpdates};\n\n\nmodule.exports=ReactDOM;\n});\n__d('findDOMNode',function(global, require, module, exports) {  'use strict';\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar ReactCurrentOwner=require('ReactCurrentOwner');\nvar ReactInstanceMap=require('ReactInstanceMap');\nvar ReactMount=require('ReactMount');\n\nvar invariant=require('invariant');\nvar warning=require('warning');\n\n\n\n\n\n\n\nfunction findDOMNode(componentOrElement){\nif(__DEV__){\nvar owner=ReactCurrentOwner.current;\nif(owner!==null){\nwarning(\nowner._warnedAboutRefsInRender,\n'%s is accessing getDOMNode or findDOMNode inside its render(). '+\n'render() should be a pure function of props and state. It should '+\n'never access something that requires stale data from the previous '+\n'render, such as refs. Move this logic to componentDidMount and '+\n'componentDidUpdate instead.',\nowner.getName()||'A component');\n\nowner._warnedAboutRefsInRender=true;}}\n\n\nif(componentOrElement==null){\nreturn null;}\n\nif(componentOrElement.nodeType===1){\nreturn componentOrElement;}\n\nif(ReactInstanceMap.has(componentOrElement)){\nreturn ReactMount.getNodeFromInstance(componentOrElement);}\n\ninvariant(\ncomponentOrElement.render==null||\ntypeof componentOrElement.render!=='function',\n'findDOMNode was called on an unmounted component.');\n\ninvariant(\nfalse,\n'Element appears to be neither ReactComponent nor DOMNode (keys: %s)',\nObject.keys(componentOrElement));}\n\n\n\nmodule.exports=findDOMNode;\n});\n__d('native/common/rn/Element.js',function(global, require, module, exports) {  String.prototype.capitalizeFirstLetter=function(){\nreturn this.charAt(0).toUpperCase()+this.slice(1);};\n\n\nvar htmlCssParser=require('native/common/rn/HtmlCssParser.js');\nvar DomEvent=require('native/common/DomEvent.js');\n\nvar UIManager=require('NativeModules').UIManager;var \n\n\nElement=(function(_React$Component){babelHelpers.inherits(Element,_React$Component);\nfunction Element(){babelHelpers.classCallCheck(this,Element);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Element).call(this));\n\n_this.events={\nonClick:React.PropTypes.func,\n\n\n\n\n\n\n\n\n\nonLoad:React.PropTypes.func,\n\n\nonUnLoad:React.PropTypes.func,\n\n\n\n\n\n\n\n\n\nonTouchStart:React.PropTypes.func,\nonTouchMove:React.PropTypes.func,\nonTouchEnd:React.PropTypes.func,\nonTouchCancel:React.PropTypes.func};\n\nfor(var eventName in _this.events){\n_this.eventHandle=_this.eventHandle||{};\n_this.eventHandle[eventName]=[];}\n\n_this.htmlProps={};\n_this.state={\nwindowHeight:windowHeight,\nwindowWidth:windowWidth};\n\n_this.setTimeout=TimerMixin.setTimeout;\n_this.clearTimeout=TimerMixin.clearTimeout;\n_this.setInterval=TimerMixin.setInterval;\n_this.clearInterval=TimerMixin.clearInterval;\n_this.setImmediate=TimerMixin.setImmediate;\n_this.clearImmediate=TimerMixin.clearImmediate;\n_this.requestAnimationFrame=TimerMixin.requestAnimationFrame;\n_this.cancelAnimationFrame=TimerMixin.cancelAnimationFrame;return _this;}babelHelpers.createClass(Element,[{key:'_walkAndBindParent',value:function _walkAndBindParent()\n\n{\nthis.childNodes=this.props.children?\n({}).toString.call(this.props.children)=='[object Array]'?\nthis.props.children:\n({}).toString.call(this.props.children)!='[object String]'?\n[this.props.children]:null:\nthis.props.children;\nvar self=this;\nthis.childNodes&&this.childNodes.forEach(function(node){\nif(node&&node._store){\ntry{\nnode._store.parentNode=self;}\ncatch(e) {\nconsole.debug(e);}}});}},{key:'parentNode',value:function parentNode()\n\n\n\n\n{\nif(this._reactInternalInstance&&this._reactInternalInstance._currentElement){\nvar o=this._reactInternalInstance._currentElement;\nif(o&&o._store&&o._store.parentNode){\nreturn o._store.parentNode;}}\n\n\nreturn null;}},{key:'tagName',value:function tagName()\n\n{\nreturn this.constructor.toString().match(/function (\\w+)\\(\\)/)[1];}},{key:'addEventListener',value:function addEventListener(\n\n\n\n\neventName,handle){\nvar eventName='on'+eventName.capitalizeFirstLetter();\nthis.eventHandle[eventName].push(handle);}},{key:'removeEventListener',value:function removeEventListener(\n\neventName,handle){\nvar eventName='on'+eventName.capitalizeFirstLetter();\nif(!handle){\nthis.eventHandle[eventName]=[];}else \n{\nfor(var i=0,a=this.eventHandle[eventName];i<a.length;i++){\nif(a[i]==handle){\na.splice(i,1);\nbreak;}}}}},{key:'handleEvent',value:function handleEvent(\n\n\n\n\nevent){\n\nvar eventName='on'+event.type.capitalizeFirstLetter();\nvar handle=this[eventName];\nhandle&&handle(event);\n\nvar self=this;\nself.eventHandle[eventName]&&self.eventHandle[eventName].forEach(function(item,index){\nitem&&item.call(self,event);});\n\n\nif(event.bubbles){\nvar o;\nif(this._reactInternalInstance&&this._reactInternalInstance._currentElement){\no=this._reactInternalInstance._currentElement;}\n\no&&o._store&&o._store.parentNode&&o._store.parentNode.handleEvent.apply(o._store.parentNode,arguments);}}},{key:'componentWillMount',value:function componentWillMount()\n\n\n{}},{key:'componentDidMount',value:function componentDidMount()\n\n\n{\nthis.handleEvent.call(this,{type:'load'});}},{key:'componentWillUnmount',value:function componentWillUnmount()\n\n{\n\nTimerMixin.componentWillUnmount.call(this);\nif(this.props.id){\ndelete DOMTREE_BYID[this.props.id];}\n\nif(this.props.id){\ndelete DOMTREE_BYID[this.props.id];}\n\nif(this.props.className){\nvar a=this.props.className.split(/\\s+/);\nvar self=this;\na.forEach(function(i){\nif(DOMTREE_BYCLASS[i].indexOf(self)>-1){\nDOMTREE_BYCLASS[i].splice(DOMTREE_BYCLASS[i].indexOf(self),1);}});}\n\n\n\nthis.handleEvent.call(this,{type:'unload'});}},{key:'render',value:function render()\n\n\n\n\n{var _this2=this;\nthis.compatHTML();\nif(({}).toString.call(this.props.children)=='[object String]'){\nreturn (\nReact.createElement(TouchableWithoutFeedback,{onPress:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'click',reactEvent:e}));}},\nReact.createElement(View,babelHelpers.extends({\nref:'i1'},\nthis.props,{\nonTouchStart:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchStart',reactEvent:e}));},\nonTouchMove:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchMove',reactEvent:e}));},\nonTouchEnd:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchEnd',reactEvent:e}));},\nstyle:htmlCssParser.removeTextStyleFromViewStyle(this.htmlProps.style)}),\nReact.createElement(Text,{style:TemplateFill({\ncolor:null,\nfontFamily:null,\nfontSize:null,\nfontStyle:null,\nfontWeight:null,\nletterSpacing:null,\ntextAlign:null,\ntextDecorationLine:null,\ntextDecorationStyle:null,\ntextDecorationColor:null,\nwritingDirection:null},\nthis.htmlProps.style)},this.props.children))));}else \n\n\n\nif(({}).toString.call(this.props.children)=='[object Array]'){\nvar htmlChildren=[];\nvar self=this;\nthis.props.children.forEach(function(item,idx){\nif(item){\nif(({}).toString.call(item)=='[object String]'){\nhtmlChildren.push(React.createElement(Text,{style:TemplateFill({\ncolor:null,\nfontFamily:null,\nfontSize:null,\nfontStyle:null,\nfontWeight:null,\nletterSpacing:null,\ntextAlign:null,\ntextDecorationLine:null,\ntextDecorationStyle:null,\ntextDecorationColor:null,\nwritingDirection:null},\nself.htmlProps.style),key:idx},item));}else \n{\nhtmlChildren.push(item);}}});\n\n\n\n\nreturn (\nReact.createElement(TouchableWithoutFeedback,{onPress:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'click',reactEvent:e}));}},\nReact.createElement(View,babelHelpers.extends({\nref:'i1'},\nthis.props,{\nonTouchStart:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchStart',reactEvent:e}));},\nonTouchMove:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchMove',reactEvent:e}));},\nonTouchEnd:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchEnd',reactEvent:e}));},\nstyle:htmlCssParser.removeTextStyleFromViewStyle(this.htmlProps.style)}),htmlChildren)));}else \n\n\n{\nreturn (\nReact.createElement(TouchableWithoutFeedback,{onPress:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'click',reactEvent:e}));}},\nReact.createElement(View,babelHelpers.extends({\nref:'i1'},\nthis.props,{\nonTouchStart:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchStart',reactEvent:e}));},\nonTouchMove:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchMove',reactEvent:e}));},\nonTouchEnd:function(e){_this2.handleEvent.call(_this2,new DomEvent({type:'touchEnd',reactEvent:e}));},\nstyle:htmlCssParser.removeTextStyleFromViewStyle(this.htmlProps.style)}),\n\nthis.props.children)));}}},{key:'compatHTML',value:function compatHTML(\n\n\n\n\n\n\n\n\n\nconf){\nvar self=this;\nif(conf&&conf.isBubble==false){}else \n\n{\nthis._walkAndBindParent();}\n\nthis.htmlProps=this.htmlProps||{};\nbabelHelpers.extends(this.htmlProps,this.props);\n\n\n\nfor(var e in this.eventHandle){\nthis.eventHandle[e]=[];}\n\nvar watchEventArray=['click','touchStart','touchMove','touchEnd'];\nwatchEventArray.forEach(function(w){\nvar fn=self.props['on'+w.capitalizeFirstLetter()];\nif(fn){\nself.addEventListener(w,fn);}});\n\n\nthis.htmlProps.style={\nfontSize:window.STYLESHEET.baseFontSize};\n\nthis.htmlProps.className=[];\n\nif(this.props.className){\nvar a=this.props.className.split(/\\s+/);\nthis.htmlProps.className=a.slice();\nvar self=this;\na.forEach(function(i){\nDOMTREE_BYCLASS[i]=DOMTREE_BYCLASS[i]||[];\nif(DOMTREE_BYCLASS[i].indexOf(self)==-1){\nDOMTREE_BYCLASS[i].push(self);}\n\n\n\n\nbabelHelpers.extends(self.htmlProps.style,STYLESHEET['.'+i]);\nif(STYLESHEET['+.'+i]){\nvar css=STYLESHEET['+.'+i].inherit.slice();\nvar find=false;\nvar par=self;\nvar maxLoop=999;\n\nwhile(css.length&&(par=par.parentNode())&&maxLoop>0){\nmaxLoop--;\nvar cur=css[css.length-1];\nif(/^\\./.test(cur)){\nif(par.htmlProps.className.indexOf(cur.substring(1))>-1){\ncss.pop();\nif(css.length==0){\nfind=true;\nbreak;}}}else \n\n\nif(/^#/.test(cur)){\n\nif(par.props.id==cur.substring(1)){\ncss.pop();\nif(css.length==0){\nfind=true;\nbreak;}}}else \n\n\nif(/^[A-Z]/.test(cur)){\nif(par.tagName()==cur){\ncss.pop();\nif(css.length==0){\nfind=true;\nbreak;}}}}\n\n\n\n\nif(find){\nbabelHelpers.extends(self.htmlProps.style,STYLESHEET['+.'+i].css);}}});}\n\n\n\n\nvar allEnumClass=allEnum(this.htmlProps.className);\nfunction allEnum(a){\nvar re=[];var _loop=function(){\n\no(i,a,re,a[i]);\nfunction o(start,array,re,prefix){\nfor(var j=start+1;j<array.length;j++){\nvar newK='.'+prefix.toString()+'.'+array[j].toString();\nre.push(newK);\no(j,array,re,newK);}}};for(var i=0;i<a.length;i++){_loop();}\n\n\n\nreturn re;}\n\n\n\n\nallEnumClass.forEach(function(item){\nif(STYLESHEET[item]){\nbabelHelpers.extends(self.htmlProps.style,STYLESHEET[item]);}});\n\n\nif(this.props.id){\nDOMTREE_BYID[this.props.id]=this;\n\n\n\nbabelHelpers.extends(self.htmlProps.style,STYLESHEET['#'+this.props.id]);}\n\n\n\n\nif(this.props.style){\nbabelHelpers.extends(this.htmlProps.style,this.props.style);}\n\nif(this.htmlProps.style){\nthis.htmlProps.style=htmlCssParser.parse(this.htmlProps.style,this.tagName());}}},{key:'measure',value:function measure(\n\n\n\n\n\ncallback){var _this3=this;\nUIManager.measure(React.findNodeHandle(this),function(x,y,width,height,left,top){\ncallback.call(_this3,{\nwidth:width,\nheight:height});});}}]);return Element;})(React.Component);\n\n\n\n\n\nmodule.exports=Element;\n});\n__d('native/common/rn/HtmlCssParser.js',function(global, require, module, exports) {  var HtmlCssParser=(function(){\nfunction HtmlCssParser(){babelHelpers.classCallCheck(this,HtmlCssParser);}babelHelpers.createClass(HtmlCssParser,[{key:'parse',value:function parse(\n\n\ncssObject,tagName){\nvar htmlCssObj={};\nfor(var k in cssObject){\nvar v=cssObject[k];\nif(/(.+)(rem)/i.test(v)){\n\nv=window.STYLESHEET.baseFontSize*parseFloat(v.match(/(.+)(rem)/)[1]);\nv=parseFloat(v);}else \nif(/(.+)(%)/.test(v)){\n\nif(/height/i.test(k)){\nv=Dimensions.get('window').height*parseFloat(v.match(/(.+)(%)/)[1])*0.01;}else \n{\nv=Dimensions.get('window').width*parseFloat(v.match(/(.+)(%)/)[1])*0.01;}}else \n\n\nif(/(\\d+(\\.\\d+)?)px/.test(v)){\n\nv=v.replace(/(\\d+(\\.\\d+)?)px/g,function(all,m1){\nvar v=parseFloat(m1)*(3/4);\nif(v<0.5)v=0.5;\nreturn v;});\n\n\n\nv=parseFloat(v);}else \nif(/(\\d+(\\.\\d+)?)pt/.test(v)){\n\nv=v.replace(/(\\d+(\\.\\d+)?)pt/g,function(all,m1){\nreturn parseFloat(m1);});\n\nv=parseFloat(v);}else \nif(/^\\d+(\\.\\d+)?$/.test(v)){\nv=parseFloat(v);}\n\n\nif(v=='auto'){}else \n\nif(k=='fontFamily'){}else \n\n{\nhtmlCssObj[k]=v;}}\n\n\n\n\n\nreturn htmlCssObj;}},{key:'removeTextStyleFromViewStyle',value:function removeTextStyleFromViewStyle(\n\nm){\nvar n={};\nvar textStyle=['color','lineHeight','textAlign','fontSize'];\nfor(var p in m){\nif(textStyle.indexOf(p)==-1){\nn[p]=m[p];}}\n\n\nreturn n;}}]);return HtmlCssParser;})();\n\n\nmodule.exports=new HtmlCssParser();\n});\n__d('native/common/DomEvent.js',function(global, require, module, exports) {  var DomEvent=(function(){\nfunction DomEvent(args){babelHelpers.classCallCheck(this,DomEvent);\nbabelHelpers.extends(this,args);\nif(!args.nativeEvent&&args.reactEvent.nativeEvent){\nthis.nativeEvent=args.reactEvent.nativeEvent;}\n\nif(/^touch/.test(this.type)){\nthis.pageX=this.nativeEvent.pageX;\nthis.pageY=this.nativeEvent.pageY;}\n\nthis.bubbles=true;\nthis.cancelable=false;\nthis.timeStamp=this.reactEvent.timeStamp;}babelHelpers.createClass(DomEvent,[{key:\"stopPropagation\",value:function stopPropagation()\n\n{\nthis.bubbles=false;}}]);return DomEvent;})();\n\n\nmodule.exports=DomEvent;\n});\n__d('native/common/rn/Input.js',function(global, require, module, exports) {  var Input=(function(_Element){babelHelpers.inherits(Input,_Element);function Input(){babelHelpers.classCallCheck(this,Input);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Input).apply(this,arguments));}babelHelpers.createClass(Input,[{key:'render',value:function render()\n{\nthis.compatHTML();\nreturn (\nReact.createElement(TextInput,this.htmlProps));}}]);return Input;})(Element);\n\n\n\nInput.defaultProps={\nstyle:{\nflex:1,\nwidth:150,\nheight:30,\nborderBottomColor:'black',\nborderWidth:1}};\n\n\nmodule.exports=Input;\n});\n__d('native/common/rn/Div.js',function(global, require, module, exports) {  var Div=(function(_Element){babelHelpers.inherits(Div,_Element);\nfunction Div(){babelHelpers.classCallCheck(this,Div);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Div).call(this));}babelHelpers.createClass(Div,[{key:\"render\",value:function render()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n{\nreturn babelHelpers.get(Object.getPrototypeOf(Div.prototype),\"render\",this).call(this);}}]);return Div;})(Element);\n\n\n\nmodule.exports=Div;\n});\n__d('native/common/rn/Body.js',function(global, require, module, exports) {  var Body=(function(_Div){babelHelpers.inherits(Body,_Div);function Body(){babelHelpers.classCallCheck(this,Body);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Body).apply(this,arguments));}return Body;})(Div);\n\n\nmodule.exports=Body;\n});\n__d('native/common/rn/Span.js',function(global, require, module, exports) {  var DomEvent=require('native/common/DomEvent.js');var \nSpan=(function(_Element){babelHelpers.inherits(Span,_Element);function Span(){babelHelpers.classCallCheck(this,Span);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Span).apply(this,arguments));}babelHelpers.createClass(Span,[{key:\"render\",value:function render()\n{\nthis.compatHTML();\nreturn (\nReact.createElement(Text,babelHelpers.extends({ref:\"i1\"},this.props,{style:this.htmlProps.style})));}}]);return Span;})(Element);\n\n\n\n\n\nmodule.exports=Span;\n});\n__d('native/common/rn/Img.js',function(global, require, module, exports) {  var Img=(function(_Element){babelHelpers.inherits(Img,_Element);function Img(){babelHelpers.classCallCheck(this,Img);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Img).apply(this,arguments));}babelHelpers.createClass(Img,[{key:'render',value:function render()\n{\nthis.compatHTML();\ndelete this.htmlProps.style.fontSize;\nreturn React.createElement(Image,{style:this.htmlProps.style,source:this.getRelativePath(this.props.src)});}},{key:'getRelativePath',value:function getRelativePath(\n\npath){\nif(({}).toString.call(path)=='[object String]'){\nreturn {uri:window.IMG_CDN_PREFIX&&path.indexOf('http:')!=0?window.IMG_CDN_PREFIX+path:path};}else \n{\nreturn path;}}}]);return Img;})(Element);\n\n\n\n\nmodule.exports=Img;\n});\n__d('native/common/rn/Button.js',function(global, require, module, exports) {  var Button=(function(_Element){babelHelpers.inherits(Button,_Element);\nfunction Button(){babelHelpers.classCallCheck(this,Button);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Button).call(this));}babelHelpers.createClass(Button,[{key:'render',value:function render()\n\n\n{var _this2=this;\nthis.compatHTML();\nreturn (\nReact.createElement(TouchableOpacity,babelHelpers.extends({},this.props,{style:this.htmlProps.style,onPress:function(e){_this2.handleEvent.call(_this2,{type:'click'});}}),\nReact.createElement(Text,{style:{color:this.htmlProps.style.color}},this.props.children)));}}]);return Button;})(Element);\n\n\n\n\nButton.defaultProps={\nstyle:{\nwidth:100,\nheight:30,\ncolor:'white',\nbackgroundColor:'gray',\nborderWidth:1,\nborderColor:'#ffffff',\nalignItems:'center',\njustifyContent:'center'}};\n\n\nmodule.exports=Button;\n});\n__d('native/common/rn/Tab.js',function(global, require, module, exports) {  var Tab=(function(_Element){babelHelpers.inherits(Tab,_Element);function Tab(){babelHelpers.classCallCheck(this,Tab);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Tab).apply(this,arguments));}babelHelpers.createClass(Tab,[{key:\"render\",value:function render()\n{\nthis.compatHTML();\nreturn (\nReact.createElement(TabBarIOS,babelHelpers.extends({tintColor:this.props.tintColor,barTintColor:this.props.barTintColor},this.props)));}}]);return Tab;})(Element);\n\n\n\nmodule.exports=Tab;\n});\n__d('native/common/rn/TabItem.js',function(global, require, module, exports) {  var TabItem=(function(_Element){babelHelpers.inherits(TabItem,_Element);function TabItem(){babelHelpers.classCallCheck(this,TabItem);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(TabItem).apply(this,arguments));}babelHelpers.createClass(TabItem,[{key:\"render\",value:function render()\n{\nthis.compatHTML();\nreturn (\nReact.createElement(TabBarIOS.Item,babelHelpers.extends({style:{flex:1,height:30}},this.props,{title:this.props.title,icon:this.props.icon,selected:this.props.selected,onPress:this.props.onPress||this.props.onClick}),this.props.children));}}]);return TabItem;})(Element);\n\n\n\n\nmodule.exports=TabItem;\n});\n__d('native/common/rn/A.js',function(global, require, module, exports) {  var A=(function(_Element){babelHelpers.inherits(A,_Element);function A(){babelHelpers.classCallCheck(this,A);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(A).apply(this,arguments));}babelHelpers.createClass(A,[{key:\"render\",value:function render()\n{\nthis.compatHTML.call(this);\n\nreturn (\nReact.createElement(TouchableOpacity,babelHelpers.extends({},this.props,{onPress:this.props.onPress||this.props.onClick}),\nReact.createElement(Text,{\nstyle:defaultCss.button},this.props.children)));}}]);return A;})(Element);\n\n\n\n\n\nmodule.exports=A;\n});\n__d('native/common/rn/Nav.js',function(global, require, module, exports) {  var Nav=(function(_Element){babelHelpers.inherits(Nav,_Element);function Nav(){babelHelpers.classCallCheck(this,Nav);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Nav).apply(this,arguments));}babelHelpers.createClass(Nav,[{key:\"render\",value:function render()\n{\nthis.compatHTML();\nreturn React.createElement(NavigatorIOS,babelHelpers.extends({style:{flex:1}},this.props));}}]);return Nav;})(Element);\n\n\nmodule.exports=Nav;\n});\n__d('native/common/rn/SimpleListView.js',function(global, require, module, exports) {  var SimpleListView=(function(_Element){babelHelpers.inherits(SimpleListView,_Element);function SimpleListView(){babelHelpers.classCallCheck(this,SimpleListView);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(SimpleListView).apply(this,arguments));}babelHelpers.createClass(SimpleListView,[{key:\"render\",value:function render()\n{\nthis.compatHTML();\nreturn React.createElement(ListView,this.props);}}]);return SimpleListView;})(Element);\n\n\nSimpleListView.initDataSource=function(){\nvar ds=new ListView.DataSource({rowHasChanged:function(r1,r2){return r1!==r2;}});\nvar defaultDS=ds.cloneWithRows([]);\nreturn defaultDS;};\n\nmodule.exports=SimpleListView;\n});\n__d('native/common/StateStore.js',function(global, require, module, exports) {  var StateStore=(function(){\nfunction StateStore(args){babelHelpers.classCallCheck(this,StateStore);\nthis.key=args.key;\nthis.value=args.defaultData;\nthis.init();\nreturn this;}babelHelpers.createClass(StateStore,[{key:'init',value:function init(){return regeneratorRuntime.async(function init$(_context){while(1)switch(_context.prev=_context.next){case 0:_context.next=2;return regeneratorRuntime.awrap(\n\n\nthis.updateStore());case 2:return _context.abrupt('return',\nthis);case 3:case 'end':return _context.stop();}},null,this);}},{key:'set',value:function set(\n\nvalue){var \n\nresult;return regeneratorRuntime.async(function set$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:this.value=value;_context2.next=3;return regeneratorRuntime.awrap(this.updateStore());case 3:result=_context2.sent;return _context2.abrupt('return',\nresult);case 5:case 'end':return _context2.stop();}},null,this);}},{key:'setAttr',value:function setAttr(\n\nattrKey,attrValue){var \n\nresult;return regeneratorRuntime.async(function setAttr$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:this.value[attrKey]=attrValue;_context3.next=3;return regeneratorRuntime.awrap(this.updateStore());case 3:result=_context3.sent;return _context3.abrupt('return',\nresult);case 5:case 'end':return _context3.stop();}},null,this);}},{key:'getAttr',value:function getAttr(\n\n\nattrKey){return regeneratorRuntime.async(function getAttr$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:_context4.next=2;return regeneratorRuntime.awrap(\nthis.get());case 2:return _context4.abrupt('return',\nthis.store.data[attrKey]);case 3:case 'end':return _context4.stop();}},null,this);}},{key:'get',value:function get(){var \n\n\nstr;return regeneratorRuntime.async(function get$(_context5){while(1)switch(_context5.prev=_context5.next){case 0:_context5.next=2;return regeneratorRuntime.awrap(localStorage.getItem(this.key));case 2:str=_context5.sent;\nconsole.debug(str);\nthis.store=JSON.parse(str);return _context5.abrupt('return',\nthis.store);case 6:case 'end':return _context5.stop();}},null,this);}},{key:'updateStore',value:function updateStore(){var \n\n\n\n\n\n\n\nresult;return regeneratorRuntime.async(function updateStore$(_context6){while(1)switch(_context6.prev=_context6.next){case 0:this.store={value:this.value,timeout:new Date().format('yyyy/MM/dd hh:mm:ss'),savedata:new Date().format('yyyy/MM/dd hh:mm:ss')};_context6.next=3;return regeneratorRuntime.awrap(localStorage.setItem(this.key,JSON.stringify(this.store)));case 3:result=_context6.sent;return _context6.abrupt('return',\nresult);case 5:case 'end':return _context6.stop();}},null,this);}}]);return StateStore;})();\n\n\nmodule.exports=StateStore;\n});\n__d('native/common/rn/Header.js',function(global, require, module, exports) {  var Header=(function(_Element){babelHelpers.inherits(Header,_Element);\nfunction Header(){babelHelpers.classCallCheck(this,Header);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Header).call(this));\n\n_this.state={\ntitle:'',\nleftButton:{\ntitle:'返回',\nhandler:function(){},\nimage:null},\n\nrightButton:{\ntitle:'',\nhandler:function(){},\nimage:null}};return _this;}babelHelpers.createClass(Header,[{key:'setTitle',value:function setTitle(\n\n\n\ntitle){\nthis.state.title=title;}},{key:'setLeftButton',value:function setLeftButton(\n\no){\nthis.state.leftButton=o;}},{key:'setRightButton',value:function setRightButton(\n\no){\nthis.state.rightButton=o;}},{key:'componentWillMount',value:function componentWillMount()\n\n{\nbabelHelpers.get(Object.getPrototypeOf(Header.prototype),'componentWillMount',this)&&babelHelpers.get(Object.getPrototypeOf(Header.prototype),'componentWillMount',this).call(this);\nif(this.props.title){\nthis.state.title=this.props.title;}\n\nif('leftButton' in this.props){\nif(this.props.leftButton){\nthis.state.leftButton=this.state.leftButton||{};\nbabelHelpers.extends(this.state.leftButton,this.props.leftButton);}else \n{\nthis.state.leftButton=null;}}\n\n\nif('rightButton' in this.props){\nif(this.props.rightButton){\nthis.state.rightButton=this.state.rightButton||{};\nbabelHelpers.extends(this.state.rightButton,this.props.rightButton);}else \n{\nthis.state.rightButton=null;}}}},{key:'render',value:function render()\n\n\n\n{\nthis.compatHTML();\nvar self=this;\nreturn (\nReact.createElement(Div,{className:'native-header'},\nReact.createElement(Div,{className:'native-header-box'},\nReact.createElement(Div,{className:'native-header-title'},self.state.title),\n\nself.state.leftButton?\nReact.createElement(Div,{className:'native-header-leftButton',onClick:self.state.leftButton.handler},\n\nself.state.leftButton.image?React.createElement(Img,{style:{backgroundColor:'transparent',width:18,height:18,position:'absolute'},src:this.state.leftButton.image}):null,\n\nself.state.leftButton.title):\n\n\nnull,\n\n\nself.state.rightButton?\nReact.createElement(Div,{className:'native-header-rightButton',onClick:self.state.rightButton.handler},\n\nself.state.rightButton.image?React.createElement(Img,{style:{backgroundColor:'transparent',width:18,height:18,position:'absolute'},src:this.state.rightButton.image}):null,\n\nself.state.rightButton.title):\n\n\nnull)));}}]);return Header;})(Element);\n\n\n\n\n\n\n\nmodule.exports=Header;\n});\n__d('native/common/rn/RightSliderMenu.js',function(global, require, module, exports) {  var RightSliderMenu=(function(_Element){babelHelpers.inherits(RightSliderMenu,_Element);\nfunction RightSliderMenu(){babelHelpers.classCallCheck(this,RightSliderMenu);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(RightSliderMenu).call(this));\n\n_this.state={\ndelay:30,\nmenuWidth:50};return _this;}babelHelpers.createClass(RightSliderMenu,[{key:'_onScrollBegin',value:function _onScrollBegin()\n\n\n{\nif(this.props.onTouchStart){\nthis.props.onTouchStart();}\n\nconsole.debug(this);\nthis.clearTimeout(this.timer);}},{key:'_onScrollEnd',value:function _onScrollEnd()\n\n{\nconsole.debug(this);\nthis.clearTimeout(this.timer);\nthis.timer=this.setTimeout(this._animate,this.state.delay);}},{key:'_animate',value:function _animate()\n\n{\nconsole.debug(this.dragEndX);\nconsole.debug(this.dragStartX);\nvar distance=this.dragEndX-this.dragStartX;\nconsole.debug(distance);\nif(distance<-(this.state.menuWidth/2)){\nconsole.debug(1);\nthis.refs['scrollView'].scrollTo(0,this.state.menuWidth);}else \n{\nconsole.debug(2);\nthis.refs['scrollView'].scrollTo(0,0);}}},{key:'_onTouchStart',value:function _onTouchStart(\n\n\ne){\nthis.dragStartX=e.nativeEvent.pageX;}},{key:'_onTouchEnd',value:function _onTouchEnd(\n\ne){\nthis.dragEndX=e.nativeEvent.pageX;\nthis.clearTimeout(this.timer);\nthis.timer=this.setTimeout(this._animate,this.state.delay);}},{key:'render',value:function render()\n\n{\nthis.compatHTML();\nreturn (\nReact.createElement(ScrollView,{\nref:'scrollView',\ncontentContainerStyle:{\nwidth:windowWidth+50},\n\nonScrollBeginDrag:this._onScrollBegin.bind(this),\nonMomentumScrollEnd:null,\nalwaysBounceHorizontal:true,\nalwaysBounceVertical:false,\ncontentInset:{top:0},\nautomaticallyAdjustContentInsets:false,\nshowsHorizontalScrollIndicator:false,\nhorizontal:true,\npagingEnabled:false,\nbounces:true,\ncontentOffset:{x:0,y:0},\nonTouchStart:this._onTouchStart.bind(this),\nonTouchEnd:this._onTouchEnd.bind(this)},\n\nthis.props.children));}}]);return RightSliderMenu;})(Element);\n\n\n\n\nmodule.exports=RightSliderMenu;\n});\n__d('native/common/rn/Carousel.js',function(global, require, module, exports) {  var PAGE_CHANGE_DELAY=4000;var \n\n\n\n\nCarousel=(function(_Element){babelHelpers.inherits(Carousel,_Element);\nfunction Carousel(){babelHelpers.classCallCheck(this,Carousel);return babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Carousel).call(this));}babelHelpers.createClass(Carousel,[{key:'componentWillMount',value:function componentWillMount()\n\n\n\n{\nbabelHelpers.get(Object.getPrototypeOf(Carousel.prototype),'componentWillMount',this)&&babelHelpers.get(Object.getPrototypeOf(Carousel.prototype),'componentWillMount',this).call(this);\nif(!!this.props.children){\nvar childrenCount=this.props.children.length;\nthis.state={\ncontentOffset:{x:0,y:0},\ncurrentPage:childrenCount>1?1:0,\nhasChildren:true,\nsize:{width:0,height:0}};}else \n\n{\nthis.state={\nhasChildren:false,\nsize:{width:0,height:0}};}}},{key:'componentDidMount',value:function componentDidMount()\n\n\n\n{\nbabelHelpers.get(Object.getPrototypeOf(Carousel.prototype),'componentDidMount',this)&&babelHelpers.get(Object.getPrototypeOf(Carousel.prototype),'componentDidMount',this).call(this);\nif(this.state.hasChildren){\nthis._setUpTimer();}}},{key:'_onScrollBegin',value:function _onScrollBegin(\n\n\nevent){\nthis.clearTimeout(this.timer);}},{key:'_onScrollEnd',value:function _onScrollEnd(\n\nevent){\nthis._setUpTimer();\n\nvar offset=babelHelpers.extends({},event.nativeEvent.contentOffset);\n\nvar childrenCount=this.props.children.length,\nsize=this.state.size;\nif(offset.x===0){\noffset.x=childrenCount*size.width;}else \nif(offset.x==(childrenCount+1)*size.width){\noffset.x=size.width;}\n\n\nthis._calculateCurrentPage(offset.x);\nthis.setState({contentOffset:offset});}},{key:'_onLayout',value:function _onLayout()\n\n{\nvar self=this;\nthis.refs.container.measure(function(x,y,w,h,px,py){\nself.setState({\ncontentOffset:{x:w},\nsize:{width:w,height:h}});});}},{key:'_setUpTimer',value:function _setUpTimer()\n\n\n\n{\n\nif(this.props.autoplay&&this.props.children.length>1){\nthis.clearTimeout(this.timer);\nthis.timer=this.setTimeout(this._animateNextPage,this.props.delay);}}},{key:'_animateNextPage',value:function _animateNextPage()\n\n\n{\nvar k=this.state.currentPage;\nvar size=this.state.size;\nk++;\n\nthis.setState({currentPage:k});\nthis.refs.scrollView.scrollTo(0,k*size.width);\nthis._setUpTimer();}},{key:'_calculateCurrentPage',value:function _calculateCurrentPage(\n\noffset){\nvar size=this.state.size;\nvar page=Math.floor((offset-size.width/2)/size.width)+1;\nthis.setState({currentPage:page});}},{key:'render',value:function render()\n\n\n{var _this2=this;\n\nvar pages=[],\ncontents,\ncontainerProps;\n\nvar size=this.state.size;\n\ncontainerProps={\nref:'container',\nonLayout:this._onLayout.bind(this),\nstyle:[this.props.style]};\n\n\nif(!this.state.hasChildren){\ncontents=\nReact.createElement(Text,{style:{backgroundColor:'white'}},'You are supposed to add children inside Carousel');}\n\n\n\n\n\nvar children=this.props.children;\n\n\n\nif(children.length>=1){\npages.push(children[children.length-1]);}\n\n\n\nfor(var i=0;i<children.length;i++){\npages.push(children[i]);}\n\n\n\nif(children.length>=1){\npages.push(children[0]);}\n\n\npages=pages.map(function(page,i){\nreturn (\nReact.createElement(View,{\nstyle:[{width:size.width,height:size.height},_this2.props.pageStyle],\nkey:\"page\"+i},page));});\n\n\n\ncontents=\nReact.createElement(ScrollView,{\nref:'scrollView',\nonScrollBeginDrag:this._onScrollBegin.bind(this),\nonMomentumScrollEnd:this._onScrollEnd.bind(this),\nalwaysBounceHorizontal:false,\nalwaysBounceVertical:false,\ncontentInset:{top:0},\nautomaticallyAdjustContentInsets:false,\nshowsHorizontalScrollIndicator:false,\nhorizontal:true,\npagingEnabled:true,\nbounces:false,\ncontentOffset:this.state.contentOffset,\ncontentContainerStyle:[\nstyles.horizontalScroll,\nthis.props.contentContainerStyle,\n{\nwidth:size.width*(this.props.children.length+(this.props.children.length>1?2:0)),\nheight:size.height}]},\n\n\n\npages);\n\n\nreturn (\nReact.createElement(View,containerProps,\ncontents));}}]);return Carousel;})(Element);\n\n\n\n\n\nvar styles=StyleSheet.create({\nhorizontalScroll:{\nposition:'absolute'}});\n\n\nCarousel.propTypes={\nchildren:React.PropTypes.node.isRequired,\ndelay:React.PropTypes.number,\nstyle:View.propTypes.style,\npageStyle:View.propTypes.style,\ncontentContainerStyle:View.propTypes.style,\nautoplay:React.PropTypes.bool};\n\nCarousel.defaultProps={\ndelay:PAGE_CHANGE_DELAY,\nautoplay:true};\n\nmodule.exports=Carousel;\n});\n;require(\"InitializeJavaScriptAppEngine\");\n;require(\"native/common/LightningStorm.js\");\n__SSTOKENSTRING = \"@generated SignedSource<<55a77aae1a2905da58791de644adf2ca>>\";\n"
  },
  {
    "path": "build/part2.js",
    "content": "__d('native/index.js',function(global, require, module, exports) {  window.\n\n\nIMG_CDN_PREFIX='http://10.32.184.134:5389/res/';\n\n\nincludeCSS(\"require('native/css/lightningStorm.js')\");\n\n\n\n\nvar homepage=React.createClass({displayName:'homepage',\nrender:function(){\nreturn (\nReact.createElement(Navigator,{\ninitialRoute:{page:require('native/vsIndex.js')},\nrenderScene:function(route,navigator){\nwindow.pageRoute=navigator;\nreturn React.createElement(route.page,babelHelpers.extends({navigator:navigator},route));}}));}});\n\n\n\n\n\n\n\n\nif(isNative){\nReact.AppRegistry.registerComponent('native',function(){return homepage;});}else \n{\nReact.render(React.createElement(homepage,null),document.body);}\n});\n__d('native/css/lightningStorm.js',function(global, require, module, exports) {  var styles={\n\".native-header\":{\n\"flexDirection\":\"row\",\n\"alignItems\":\"center\",\n\"justifyContent\":\"center\",\n\"height\":\"40pt\",\n\"color\":\"#ffffff\",\n\"backgroundColor\":\"rgb(9,159,222)\"},\n\n\".native-header-box\":{\n\"flex\":\"1\",\n\"alignItems\":\"center\",\n\"justifyContent\":\"center\"},\n\n\".native-header-title\":{\n\"color\":\"#ffffff\"},\n\n\".native-header-leftButton\":{\n\"position\":\"absolute\",\n\"top\":\"0\",\n\"left\":\"10pt\",\n\"color\":\"black\"},\n\n\".native-header-rightButton\":{\n\"position\":\"absolute\",\n\"right\":\"10pt\",\n\"top\":\"0\",\n\"backgroundColor\":\"white\"}};\n\n\nmodule.exports=styles;\n});\n__d('native/vsIndex.js',function(global, require, module, exports) {  includeCSS(\"require('native/css/vsIndex.js')\");var \n\nvsIndex=(function(_Element){babelHelpers.inherits(vsIndex,_Element);\nfunction vsIndex(){babelHelpers.classCallCheck(this,vsIndex);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(vsIndex).call(this));\n\n_this.state={\ndataSource:SimpleListView.initDataSource()};return _this;}babelHelpers.createClass(vsIndex,[{key:\"render\",value:function render()\n\n\n\n\n\n\n\n\n\n\n{\nreturn (\nReact.createElement(Div,{style:{height:windowHeight}},\nReact.createElement(Header,{title:\"维多利亚的秘密\",leftButton:null}),\nReact.createElement(Div,{id:\"J-block-test\",className:\"j-j_j i_i-i\"},\"测试水平居中垂直居中\"),\n\nReact.createElement(SimpleListView,{className:\"listPage-listView iiii\",dataSource:this.state.dataSource,\nrenderRow:this._renderRow})));}},{key:\"componentDidMount\",value:function componentDidMount()\n\n\n\n\n{\nvar self=this;\nfetch('http://statics1.jiaru.club/react-native-example/list.js',\n{method:'get',headers:{'Content-Type':'application/json;charset=utf-8'}}).\n\n\nthen(function(req){\nreq.json().then(function(res){\nvar o=self.state.dataSource.cloneWithRows(res.list);\nself.setState({\ndataSource:o});});});}},{key:\"_renderRow\",value:function _renderRow(\n\n\n\n\nrow,sid,rowid){\nreturn React.createElement(Row,{data:arguments,jumpFn:this.jumpFn});}}]);return vsIndex;})(Element);var \n\n\nRow=(function(_Element2){babelHelpers.inherits(Row,_Element2);\nfunction Row(){babelHelpers.classCallCheck(this,Row);var _this2=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(Row).call(this));\n\n_this2.state={\nnumberOfLines:3};return _this2;}babelHelpers.createClass(Row,[{key:\"render\",value:function render()\n\n\n{\nvar row=this.props.data[0];\nvar rowid=this.props.data[2];\nreturn (\nReact.createElement(Div,{className:\"index-list-row\"+(rowid%2==0?\" index-list-complexRow\":\"\")},\nReact.createElement(Div,{className:\"index-list-leftImg\",onClick:this.jumpImgList.bind(this)},\nReact.createElement(Img,{className:\"index-list-leftImg-img\",src:row.smallpic})),\n\nReact.createElement(Div,{className:\"index-list-rightBox\"},\nReact.createElement(Span,{className:\"index-list-rightBox-row\"},\nReact.createElement(Span,null,\"姓名：\"),\nReact.createElement(Span,null,row.name)),\n\nReact.createElement(Div,{onClick:this.collapse.bind(this)},\nReact.createElement(Span,{ref:\"J_r\",numberOfLines:this.state.numberOfLines,className:\"index-list-rightBox-row-desc\"},\nReact.createElement(Span,null,\"简介：\"),\nReact.createElement(Span,null,row.desc))))));}},{key:\"collapse\",value:function collapse()\n\n\n\n\n\n\n{\nif(this.state.numberOfLines==3){\nthis.setState({\nnumberOfLines:null});}else \n\n{\nthis.setState({\nnumberOfLines:3});}}},{key:\"jumpImgList\",value:function jumpImgList()\n\n\n\n{\npageRoute.push({\npage:require('native/vsImgList.js'),\na:1,\nb:2,\nc:3});}}]);return Row;})(Element);\n\n\n\n\n\nmodule.exports=vsIndex;\n});\n__d('native/css/vsIndex.js',function(global, require, module, exports) {  var styles={\n\"body\":{\n\"margin\":\"0\",\n\"padding\":\"0\"},\n\n\"#J-block-test\":{\n\"backgroundColor\":\"yellow\",\n\"height\":\"2rem\"},\n\n\".j-j_j\":{\n\"color\":\"red\",\n\"flexDirection\":\"row\",\n\"justifyContent\":\"center\",\n\"alignItems\":\"center\"},\n\n\".i_i-i\":{\n\"color\":\"black\"},\n\n\".j-j_j.i_i-i\":{\n\"color\":\"green\"},\n\n\".index-contains\":{\n\"flex\":\"1\",\n\"alignItems\":\"center\"},\n\n\".index-goDiv\":{\n\"flexDirection\":\"row\",\n\"alignItems\":\"center\",\n\"padding\":\"10\",\n\"justifyContent\":\"center\"},\n\n\".index-btn\":{\n\"flex\":\"1\",\n\"alignItems\":\"center\",\n\"justifyContent\":\"center\",\n\"flexDirection\":\"row\",\n\"padding\":\"10pt\"},\n\n\".index-list-row .index-list-leftImg\":{\n\"width\":\"3rem\",\n\"paddingTop\":\".5rem\",\n\"flexDirection\":\"row\",\n\"justifyContent\":\"center\"},\n\n\".index-list-leftImg-img\":{\n\"width\":\"2rem\",\n\"height\":\"2rem\"},\n\n\".index-list-row\":{\n\"flexDirection\":\"row\",\n\"justifyContent\":\"flex-start\"},\n\n\".index-list-row .index-list-rightBox\":{\n\"flex\":\"1\"},\n\n\".index-list-row .index-list-rightBox-row-desc\":{\n\"backgroundColor\":\"red\"},\n\n\".index-list-complexRow .index-list-rightBox .index-list-rightBox-row\":{\n\"backgroundColor\":\"green\",\n\"color\":\"red\"},\n\n\"#jjj\":{\n\"backgroundColor\":\"green\"},\n\n\"SimpleListView\":{\n\"backgroundColor\":\"yellow\"}};\n\n\nmodule.exports=styles;\n});\n__d('native/vsImgList.js',function(global, require, module, exports) {  includeCSS(\"require('native/css/vsImgList.js')\");var \n\nvsImgList=(function(_Element){babelHelpers.inherits(vsImgList,_Element);\nfunction vsImgList(passedArgs){babelHelpers.classCallCheck(this,vsImgList);var _this=babelHelpers.possibleConstructorReturn(this,Object.getPrototypeOf(vsImgList).call(this));\n\n_this.state={\nlist:null,\npageHeight:windowHeight};\n\n_this.passedArgs={\na:passedArgs.a,\nb:passedArgs.b,\nc:passedArgs.c};return _this;}babelHelpers.createClass(vsImgList,[{key:'componentWillMount',value:function componentWillMount()\n\n\n{\nvar self=this;\nfetch('http://statics1.jiaru.club/react-native-example/hesui.js',\n{\nmethod:'get',\nheaders:{'Content-Type':'application/json;charset=utf-8'}}).\n\n\nthen(function(req){\nreq.json().then(function(res){\nself.setState({\nlist:res.images});});});}},{key:'render',value:function render()\n\n\n\n\n{var _this2=this;\nreturn (\nReact.createElement(Div,{className:'imgList'},\nReact.createElement(Header,{ref:'J_header',title:'照片秀',leftButton:{handler:this.backBtn}}),\n\n(function(){\nif(_this2.state.list){\nreturn (\nReact.createElement(Carousel,{style:{height:windowHeight-40}},\n\n_this2.state.list.map(function(o,idx){\nreturn (\nReact.createElement(Div,{key:idx,style:{width:windowWidth,height:windowHeight-40,alignItems:'center',justifyContent:'center'}},\nReact.createElement(Img,{src:o.img,style:{width:o.width,height:o.height}})));})));}else \n\n\n\n\n\n\n{\nreturn (\nReact.createElement(Div,{style:{backgroundColor:'#fffff',width:windowWidth,height:windowHeight-40,alignItems:'center',justifyContent:'center'}},\nReact.createElement(Span,null,'加载中...')));}}).\n\n\n\ncall(this),\n\nReact.createElement(Div,{className:'float-bg'},'这是一个透明浮层的测试,上一页面传递过来的参数为',JSON.stringify(this.passedArgs))));}},{key:'backBtn',value:function backBtn()\n\n\n\n{\npageRoute.pop();}}]);return vsImgList;})(Element);\n\n\n\nmodule.exports=vsImgList;\n});\n__d('native/css/vsImgList.js',function(global, require, module, exports) {  var styles={\n\".imgList\":{\n\"position\":\"relative\"},\n\n\".float-bg\":{\n\"backgroundColor\":\"gray\",\n\"color\":\"#000000\",\n\"opacity\":\"0.2\",\n\"height\":\"4rem\",\n\"width\":\"100%\",\n\"position\":\"absolute\",\n\"bottom\":\"0\",\n\"left\":\"0\"}};\n\n\nmodule.exports=styles;\n});\n\n;require(\"native/index.js\");\n"
  },
  {
    "path": "css/cxylhl/index.css",
    "content": "body * {\n\tfont-family:\"Consolas\",\"Microsoft Yahei\", Arial, sans-serif;\n}\n\nbody {\n\tbackground: white;\n\tmargin: 0;\n\tpadding: 0;\n}\n.header {\n\tflex-direction: row;\n}\n.sup {\n\tfont-size: 0.4rem;\n\tbackground: yellow;\n\tcolor: red;\n}\n.container {\n\n\t\n\t\n\t\n}\n\n.container .title{\n\tcolor: #bbb;\n\tfont-weight: bold;\n\tbackground: #555;\n\tpadding: 5px 15px;\n}\n\n.adlink {\n\ttext-align: center;\n\tfont-size: 11pt;\n}\n\n.adlink a {\n\ttext-decoration: none;\n\tdisplay:block;\n\tcolor: #666;\n\tfont-weight: bold;\n\tmargin-bottom: 10px;\n\tbackground: #eee;\n\tborder: 1px solid #ddd;\n\tborder-radius: 4px;\n\tpadding: 10pt;\n\tmargin-top: 10pt;\n}\n\n.date{\n\tfont-size:17pt;\n\tfont-weight: bold;\n\tline-height: 30pt;\n\ttext-align: center;\n}\n\n.split, .clear {\n\tclear: both;\n\theight: 1px;\n\toverflow-y: hidden;\n}\n\n.good, .bad {\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.bad {\n\t/*top: -1px;*/\n}\n\n.good .title, .bad .title {\n\tflex: 0.5;\n\tfont-weight: bold;\n\tfont-size: 2rem;\n\tdisplay: flex;\n}\n.good .title .title-text, .bad .title .title-text{\n\n\t\n}\n\n.good {\n\tbackground: #ffee44;\n}\n\n.bad {\n\tbackground: #ff4444;\n}\n\n.good .title {\n\tbackground: #ffee44;\n\talign-self: center;\n\ttext-align: center;\n\t\n}\n.good .content {\n\tbackground: #ffffaa;\n}\n\n.someday .good .title {\n\tbackground: #aaaaaa;\n}\n\n.bad .title {\n\tbackground: #ff4444;\n\tcolor: #fff;\n\talign-self: center;\n\ttext-align: center;\n}\n.bad .content {\n\tbackground: #ffddd3;\n}\n\n.someday .bad .title {\n\tbackground: #666666;\n\tcolor: #fff;\n}\n\n.good .content, .bad .content {\n\tflex: 1;\n\tpadding: 10px;\n}\n\n.someday .good {\n\tbackground: #dddddd;\n}\n\n.someday .bad {\n\tbackground: #aaaaaa;\n}\n\n\n\n.content .name {\n\theight: 1.5rem;\n\tjustify-content: center;\n\tfont-size: 1rem;\n\tfont-weight: bold;\n\tcolor: #444;\n}\n\n.content .description {\n\tfont-size: 0.7rem;\n\tfont-weight: normal;\n\tcolor: #777;\n}\n\n.Divne-tip {\n\tpadding: 10px;\n\tflex-direction: row;\n\talign-items: center;\n}\n.adDivnk {\n\tfont-size: 0.5rem;\n}\n\n\n.direction_value {\n\tcolor:#4a4;\n\tfont-weight: bold;\n}\n\n.someday .direction_value {\n\tcolor:#888;\n}\n\n.goddes_value {\n\tcolor: #f87;\n}\n\n.someday .goddes_value {\n\tcolor: #777;\n}\n\n.comment {\n\tfont-size: 11pt;\n\tmargin: 10px;\n\tcolor: #999;\n}\n\n.spDivt {\n\tfont-size: 0.7rem;\n}\n"
  },
  {
    "path": "css/game/game2048.css",
    "content": ".container {\n\tpadding: 0 20pt;\n}\n\n.heading {\n\tdisplay: flex;\n\theight: 80pt;\n\tmargin-top: 40pt;\n\tflex-direction: row;\n}\n.heading .heading-title {\n\tfont-size: 48pt;\n\tcolor: #776E65;\n\tfont-weight: bold;\n}\n.heading .scores {\n\tdisplay: flex;\n\tflex: 1;\n\tflex-direction: row;\n\tjustify-content: flex-end;\n\tflex-wrap: wrap;\n\talign-items: flex-start;\n}\n.heading .container {\n\tdisplay: flex;\n\tbackground-color: #bbada0;\n\tpadding-left: 15pt;\n\tpadding-right: 15pt;\n\tpadding-top: 5pt;\n\tpadding-bottom: 5pt;\n\tborder-radius: 3pt;\n\tmargin-left: 5pt;\n\tflex-direction: column;\n\talign-items: center;\n}\n.heading .container-title {\n\tcolor: #eee4da;\n\ttext-align: center;\n\tfont-weight: bold;\n\tfont-size: 12pt;\n}\n.heading .container-value {\n\tcolor: #fff;\n\ttext-align: center;\n\tfont-size: 24pt;\n\tfont-weight: bold;\n}\n\n.abovegame {\n\tdisplay: flex;\n\tflex-direction: row;\n\tflex-wrap: nowrap;\n\tmargin-top: 5pt;\n}\n.abovegame .textContainer {\n\tdisplay: flex;\n\tflex: 1;\n\tmargin-right: 10pt;\n}\n.abovegame .text {\n\tcolor: #776E65;\n\tfont-size: 16pt;\n\tline-height: 26pt;\n}\n.abovegame .boldText {\n\tfont-weight: bold;\n}\n.abovegame .newGameContainer {\n\tbackground-color: #8f7a66;\n\tpadding: 15pt 10pt;\n\tborder-radius: 3pt;\n}\n"
  },
  {
    "path": "css/jqueryapi.css",
    "content": ".cls1 {\n\tcolor: red;\n}\n.cls2 {\n\tcolor: yellow;\n}"
  },
  {
    "path": "css/lightningStorm.css",
    "content": "/**\n** common/header\n**/\n.custom-native-header {\n\tmargin-top: 20pt;\n}\n.native-header {\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 40pt;\n\tcolor: #ffffff;\n\tbackground-color: rgb(9,159,222);\n\tmargin-top: 20pt;\n}\n.native-header-box {\n\tflex: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n}\n.native-header-title {\n\tcolor: #ffffff;\n}\n\n.native-header-leftButton {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 10pt;\n\tcolor: black;\n}\n.native-header-rightButton {\n\tposition: absolute;\n\tright: 10pt;\n\ttop: 0;\n\tbackground-color: white;\n}\n\n"
  },
  {
    "path": "css/vsImgList.css",
    "content": ".imgList {\n\tposition: relative;\n}\n.float-bg {\n\tbackground-color: gray;\n\tcolor: #000;\n\topacity: 0.2;\n\theight: 4rem;\n\twidth: 100%;\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n}"
  },
  {
    "path": "css/vsIndex.css",
    "content": "/**\n** base\n**/\nbody {\n\tmargin: 0;\n\tpadding: 0;\n}\n\n\n\n/**\n** index\n**/\n#J-block-test {\n\tbackground-color: yellow;\n\theight: 2rem;\n}\n.j-j_j {\n\tdisplay: flex;\n\tcolor: red;\n\tflex-direction: row;\n\tjustify-content: center;\n\talign-items: center;\n}\n.i_i-i {\n\tcolor: black;\n}\n.j-j_j.i_i-i {\n\tcolor: green;\n}\n\n.index-contains {\n\tflex: 1;\n\talign-items: center;\n}\n.index-goDiv {\n\tdisplay: flex;\n\tflex-direction: row;\n\talignItems: center;\n\tpadding: 10;\n\tjustify-content: center;\n}\n.index-btn {\n\tdisplay: flex;\n\tflex: 1;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-direction: row;\n\tpadding: 10pt;\n}\n.index-list-row .index-list-leftImg {\n\twidth: 3rem;\n\tdisplay: flex;\n\tpadding-top: .5rem;\n\tflex-direction: row;\n\tjustify-content: center;\n}\n.index-list-leftImg-img{\n\twidth: 2rem;\n\theight: 2rem;\n}\n.index-list-row {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: flex-start;\n}\n.index-list-row .index-list-rightBox {\n\tflex: 1;\n}\n.index-list-row .index-list-rightBox-row-desc {\n\tbackground-color: red;\n}\n.index-list-complexRow .index-list-rightBox .index-list-rightBox-row {\n\tbackground-color: green;\n\tcolor: red;\n}\n\n#jjj {\n\tbackground-color: green;\n}\n\nSimpleListView {\n\tbackground-color: yellow;\n}\n\n"
  },
  {
    "path": "dev.sh",
    "content": "#!/bin/sh \nosascript <<END \ntell application \"Terminal\"\n    do script \"cd \\\"`pwd`\\\";cd reactnative;react-native start;exit;\"\nend tell\n\ntell application \"Terminal\"\n    do script \"cd \\\"`pwd`\\\";node react.css.build.js\"\nend tell\n\ntell application \"Terminal\"\n   \tdo script \"cd \\\"`pwd`\\\";webpack -w -d\"\nend tell\n\nEND"
  },
  {
    "path": "install.sh",
    "content": "#!/bin/sh \nosascript <<END \ntell application \"Terminal\"\n    do script \"cd \\\"`pwd`\\\";cd reactnative;npm install;exit;\"\nend tell\n\ntell application \"Terminal\"\n    do script \"npm install;exit;\"\nend tell\n\nEND"
  },
  {
    "path": "native-css.js",
    "content": "'use strict';\nvar src = {};\nvar fs = require('fs');\n\nsrc.readFile = function(path) {\nreturn fs.readFileSync(path, 'utf8');\n}\n\nsrc.writeFile = function(path, body) {\nreturn fs.writeFileSync(path, body); \n}\n\nsrc.appendFile = function(path, body) {\nreturn fs.appendFileSync(path, body); \n}\n\nsrc.verify = function(args) {\nif (typeof args === 'object') {\n    if (args.indexOf(input) == -1)\n        return false;\n\n    return true;\n} else {\n    if (args != input)\n        return false;\n        \n    return true;\n}\n};\n\n\nvar cssParser = require('css');\n\nvar nativeCSS = function() {\n};\n\nnativeCSS.prototype.indentObject = function(obj, indent) {\n\tvar self = this, result = '';\n\treturn JSON.stringify(obj, null, indent || 0);\n}\n\nnativeCSS.prototype.nameGenerator = function(name) {\n\tname = name.replace(/\\s\\s+/g, ' ');\n\t//name = name.replace(/^\\./g, '');\n\t// name = name.replace(/[^a-zA-Z0-9]/g, '_');\n\t// name = name.replace(/^_+/g, '');\n\t// name = name.replace(/_+$/g, '');\n\treturn name;\n}\n\nnativeCSS.prototype.mediaNameGenerator = function(name) {\n\treturn '@media ' + name;\n}\n\nfunction transformRules(self, rules, result) {\n\trules\n\t\t\t.forEach(function(rule) {\n\t\t\t\tvar obj = {};\n\t\t\t\tif (rule.type === 'media') {\n\t\t\t\t\tvar name = self.mediaNameGenerator(rule.media);\n\t\t\t\t\tvar media = result[name] = result[name] || {\n\t\t\t\t\t\t\"__expression__\" : rule.media\n\t\t\t\t\t};\n\t\t\t\t\ttransformRules(self, rule.rules, media)\n\t\t\t\t} else if (rule.type === 'rule') {\n\t\t\t\t\trule.declarations\n\t\t\t\t\t\t\t.forEach(function(declaration) {\n\n\t\t\t\t\t\t\t\tif (declaration.type === 'declaration') {\n\t\t\t\t\t\t\t\t\tvar k = declaration.property.replace(\n\t\t\t\t\t\t\t\t\t\t\t/(-[a-z])/g, function(m1) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn m1.substring(1)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t.toUpperCase()\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tif (/^\\*/.test(k)) {\n\t\t\t\t\t\t\t\t\t\t// css hacker\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tvar viewStyle = [ 'backfaceVisibility',//\n\t\t\t\t\t\t\t\t\t\t'backgroundColor',//\n\t\t\t\t\t\t\t\t\t\t'borderColor',//\n\t\t\t\t\t\t\t\t\t\t'borderTopColor',//\n\t\t\t\t\t\t\t\t\t\t'borderRightColor',//\n\t\t\t\t\t\t\t\t\t\t'borderBottomColor',//\n\t\t\t\t\t\t\t\t\t\t'borderLeftColor',//\n\t\t\t\t\t\t\t\t\t\t'borderRadius',//\n\t\t\t\t\t\t\t\t\t\t'borderTopLeftRadius',//\n\t\t\t\t\t\t\t\t\t\t'borderTopRightRadius',//\n\t\t\t\t\t\t\t\t\t\t'borderBottomLeftRadius',//\n\t\t\t\t\t\t\t\t\t\t'borderBottomRightRadius',//\n\t\t\t\t\t\t\t\t\t\t'borderStyle',//\n\t\t\t\t\t\t\t\t\t\t'borderWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderTopWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderRightWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderBottomWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderLeftWidth',//\n\t\t\t\t\t\t\t\t\t\t'opacity',//\n\t\t\t\t\t\t\t\t\t\t'overflow',//\n\t\t\t\t\t\t\t\t\t\t'shadowColor',//\n\t\t\t\t\t\t\t\t\t\t'shadowOffset',//\n\t\t\t\t\t\t\t\t\t\t'shadowOpacity',//\n\t\t\t\t\t\t\t\t\t\t'shadowRadius',//\n\t\t\t\t\t\t\t\t\t\t'elevation',//\n\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\tvar imageStyle = [ 'resizeMode',//\n\t\t\t\t\t\t\t\t\t\t'backfaceVisibility',//\n\t\t\t\t\t\t\t\t\t\t'backgroundColor',//\n\t\t\t\t\t\t\t\t\t\t'borderColor',//\n\t\t\t\t\t\t\t\t\t\t'borderWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderRadius',//\n\t\t\t\t\t\t\t\t\t\t'overflow',//\n\t\t\t\t\t\t\t\t\t\t'tintColor',//\n\t\t\t\t\t\t\t\t\t\t'opacity',//\n\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\tvar textStyle = [ 'color',//\n\t\t\t\t\t\t\t\t\t\t'fontFamily',//\n\t\t\t\t\t\t\t\t\t\t'fontSize',//\n\t\t\t\t\t\t\t\t\t\t'fontStyle',//\n\t\t\t\t\t\t\t\t\t\t'fontWeight',//\n\t\t\t\t\t\t\t\t\t\t'letterSpacing',//\n\t\t\t\t\t\t\t\t\t\t'lineHeight',//\n\t\t\t\t\t\t\t\t\t\t'textAlign',//\n\t\t\t\t\t\t\t\t\t\t'textDecorationLine',//\n\t\t\t\t\t\t\t\t\t\t'textDecorationStyle',//\n\t\t\t\t\t\t\t\t\t\t'textDecorationColor',//\n\t\t\t\t\t\t\t\t\t\t'writingDirection',//\n\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\tvar flexboxStyle = [ 'alignItems',//\n\t\t\t\t\t\t\t\t\t\t'alignSelf',//\n\t\t\t\t\t\t\t\t\t\t'borderBottomWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderLeftWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderRightWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderTopWidth',//\n\t\t\t\t\t\t\t\t\t\t'borderWidth',//\n\t\t\t\t\t\t\t\t\t\t'bottom',//\n\t\t\t\t\t\t\t\t\t\t'flex',//\n\t\t\t\t\t\t\t\t\t\t'flexDirection',//\n\t\t\t\t\t\t\t\t\t\t'flexWrap',//\n\t\t\t\t\t\t\t\t\t\t'height',//\n\t\t\t\t\t\t\t\t\t\t'justifyContent',//\n\t\t\t\t\t\t\t\t\t\t'left',//\n\t\t\t\t\t\t\t\t\t\t'margin',//\n\t\t\t\t\t\t\t\t\t\t'marginBottom',//\n\t\t\t\t\t\t\t\t\t\t'marginHorizontal',//\n\t\t\t\t\t\t\t\t\t\t'marginLeft',//\n\t\t\t\t\t\t\t\t\t\t'marginRight',//\n\t\t\t\t\t\t\t\t\t\t'marginTop',//\n\t\t\t\t\t\t\t\t\t\t'marginVertical',//\n\t\t\t\t\t\t\t\t\t\t'maxHeight',//\n\t\t\t\t\t\t\t\t\t\t'maxWidth',//\n\t\t\t\t\t\t\t\t\t\t'minHeight',//\n\t\t\t\t\t\t\t\t\t\t'minWidth',//\n\t\t\t\t\t\t\t\t\t\t'padding',//\n\t\t\t\t\t\t\t\t\t\t'paddingBottom',//\n\t\t\t\t\t\t\t\t\t\t'paddingHorizontal',//\n\t\t\t\t\t\t\t\t\t\t'paddingLeft',//\n\t\t\t\t\t\t\t\t\t\t'paddingRight',//\n\t\t\t\t\t\t\t\t\t\t'paddingTop',//\n\t\t\t\t\t\t\t\t\t\t'paddingVertical',//\n\t\t\t\t\t\t\t\t\t\t'position',//\n\t\t\t\t\t\t\t\t\t\t'right',//\n\t\t\t\t\t\t\t\t\t\t'top',//\n\t\t\t\t\t\t\t\t\t\t'width',//\n\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t\tvar transformStyle = [ //'transform',//\n\t\t\t\t\t\t\t\t\t\t//'transformMatrix',// \n\t\t\t\t\t\t\t\t\t\t];\n//\n\t\t\t\t\t\t\t\t\t\tdeclaration.value = declaration.value.replace(/\\s*!important/g, '');\n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tif (k == \"background\") {\n\t\t\t\t\t\t\t\t\t\t\tobj['backgroundColor'] = self.reverseCssValue(declaration.value);\n\t\t\t\t\t\t\t\t\t\t} else if (self.isShortCut(k,\n\t\t\t\t\t\t\t\t\t\t\t\tdeclaration.value)) {\n\t\t\t\t\t\t\t\t\t\t\tvar re = self.reverseShortCut(k,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeclaration.value);\n\t\t\t\t\t\t\t\t\t\t\tfor ( var p in re) {\n\t\t\t\t\t\t\t\t\t\t\t\tif (viewStyle.indexOf(p) > -1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| //\n\t\t\t\t\t\t\t\t\t\t\t\t\t\timageStyle.indexOf(p) > -1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| textStyle.indexOf(p) > -1//\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| flexboxStyle\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.indexOf(p) > -1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t|| transformStyle\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t.indexOf(p) > -1) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tobj[p] = self.reverseCssValue(re[p]);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else if (viewStyle.indexOf(k) > -1\n\t\t\t\t\t\t\t\t\t\t\t\t|| //\n\t\t\t\t\t\t\t\t\t\t\t\timageStyle.indexOf(k) > -1\n\t\t\t\t\t\t\t\t\t\t\t\t|| textStyle.indexOf(k) > -1//\n\t\t\t\t\t\t\t\t\t\t\t\t|| flexboxStyle.indexOf(k) > -1\n\t\t\t\t\t\t\t\t\t\t\t\t|| transformStyle.indexOf(k) > -1) {\n\t\t\t\t\t\t\t\t\t\t\tobj[k] = self.reverseCssValue(declaration.value);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\trule.selectors.forEach(function(selector) {\n\t\t\t\t\t\tvar name = self.nameGenerator(selector.trim());\n\t\t\t\t\t\tif(name in result){\n\t\t\t\t\t\t\tObject.assign(result[name], obj);\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tresult[name] = Object.assign({}, obj);;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n}\n\nnativeCSS.prototype.isShortCut = function(k, v) {\n\tif (/^border(Top|Left|Bottom|Right|)$/.test(k)) {\n\t\tvar a = v.split(/\\s+/);\n\t\treturn true;\n\t} else if (/^(margin|padding)$/.test(k)) {\n\t\tvar a = v.split(/\\s+/);\n\t\tif (a.length > 1) {\n\t\t\treturn true;\n\t\t}\n\t} else if (/^(borderRadius)$/.test(k)) {\n\t\tvar a = v.split(/\\s+/);\n\t\tif (a.length > 1) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\nnativeCSS.prototype.reverseShortCut = function(k, v) {\n\tvar re = {};\n\n\tif (/^border(Top|Left|Bottom|Right|)$/.test(k)) {\n\t\t\n\t\tvar a = v.split(/\\s+/);\n\t\t\n\t\tif (a.length == 3) {\n\t\t\tvar k1 = k.match(/^border(Top|Left|Bottom|Right|)$/)[0];\n\t\t\tre[k1 + 'Width'] = a[0];\n\t\t\tre[k1 + 'Style'] = a[1];\n\t\t\tre[k1 + 'Color'] = a[2];\n\t\t}else if(a.length == 1){\n\t\t\tvar k1 = k.match(/^border(Top|Left|Bottom|Right|)$/)[0];\n\t\t\tre[k1 + 'Width'] = a[0] == 'none' ? 0 : a[0];\n\t\t}\n\t} else if (/^(margin|padding)$/.test(k)) {\n\t\tvar a = v.split(/\\s+/);\n\t\tvar k1 = k.match(/^(margin|padding)$/)[0];\n\t\tif (a.length == 4) {\n\t\t\tre[k1 + 'Top'] = a[0];\n\t\t\tre[k1 + 'Right'] = a[1];\n\t\t\tre[k1 + 'Bottom'] = a[2];\n\t\t\tre[k1 + 'Left'] = a[3];\n\t\t} else if (a.length == 3) {\n\t\t\tre[k1 + 'Top'] = a[0];\n\t\t\tre[k1 + 'Right'] = a[1];\n\t\t\tre[k1 + 'Left'] = a[1];\n\t\t\tre[k1 + 'Bottom'] = a[2];\n\t\t} else if (a.length == 2) {\n\t\t\tre[k1 + 'Top'] = a[0];\n\t\t\tre[k1 + 'Bottom'] = a[0];\n\t\t\tre[k1 + 'Right'] = a[1];\n\t\t\tre[k1 + 'Left'] = a[1];\n\t\t}\n\t} else if (/^(borderRadius)$/.test(k)) {\n\t\tvar a = v.split(/\\s+/);\n\t\tvar k1 = 'border', k11 = 'Radius';\n\t\tif (a.length == 4) {\n\t\t\tre[k1 + 'TopLeft' + k11] = a[0];\n\t\t\tre[k1 + 'TopRight' + k11] = a[1];\n\t\t\tre[k1 + 'BottomRight' + k11] = a[2];\n\t\t\tre[k1 + 'BottomLeft' + k11] = a[3];\n\t\t} else if (a.length == 3) {\n\t\t\tre[k1 + 'TopLeft' + k11] = a[0];\n\t\t\tre[k1 + 'TopRight' + k11] = a[1];\n\t\t\tre[k1 + 'BottomLeft' + k11] = a[1];\n\t\t\tre[k1 + 'BottomRight'] = a[2];\n\t\t} else if (a.length == 2) {\n\t\t\tre[k1 + 'TopLeft' + k11] = a[0];\n\t\t\tre[k1 + 'TopRight' + k11] = a[0];\n\t\t\tre[k1 + 'Right' + k11] = a[1];\n\t\t\tre[k1 + 'BottomLeft' + k11] = a[1];\n\t\t}\n\t}\n\treturn re;\n}\nnativeCSS.prototype.reverseCssValue = function(v){\n\t//\n\tif(/^#([0-9a-fA-F]{3})$/.test(v)){\n\t\t\n\t\tvar t = v.match(/^#([0-9a-fA-F]{3})$/)[1];\n\t\tv = '#' + t +t;\n\t}\n\treturn v;\n\t//\n}\nnativeCSS.prototype.transform = function(css) {\n\tvar result = {};\n\ttransformRules(this, css.stylesheet.rules, result);\n\treturn result;\n}\n\nnativeCSS.prototype.convert = function(cssFile) {\n\tvar path = process.cwd() + '/' + cssFile;\n\n\tif (!(require('fs').existsSync(path)))\n\t\treturn 'Ooops!\\nError: CSS file not found!';\n\n\tvar self = this, css = src.readFile(path);\n\tcss = cssParser.parse(css, {\n\t\tsilent : false,\n\t\tsource : path\n\t});\n\n\treturn self.transform(css);\n}\n\nnativeCSS.prototype.generateFile = function(obj, where, react) {\n\tif (!where || where.indexOf('--') > -1)\n\t\treturn console.log('Please, set a output path!');\n\n\tvar self = this, body;\n\n\twhere = process.cwd() + '/' + where;\n\n\tif (react) {\n\t\tsrc.writeFile(where, 'var styles = StyleSheet.create(\\n');\n\t\tbody = self.indentObject(obj, 2);\n\t\tsrc.appendFile(where, body + '\\n);');\n\t\treturn;\n\t}\n\n\tsrc.writeFile(where, 'var styles = ');\n\tbody = self.indentObject(obj, 2);\n\tsrc.appendFile(where, body + '\\nmodule.exports = styles;');\n}\n\nmodule.exports = new nativeCSS();\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"devDependencies\": {\n    \"babel-core\": \"^6.3.26\",\n    \"babel-loader\": \"^6.2.1\",\n    \"babel-plugin-syntax-async-functions\": \"^6.3.13\",\n    \"babel-plugin-transform-async-to-generator\": \"^6.3.13\",\n    \"babel-plugin-transform-object-assign\": \"^6.3.13\",\n    \"babel-plugin-transform-regenerator\": \"^6.3.26\",\n    \"babel-plugin-transform-runtime\": \"^6.3.13\",\n    \"babel-polyfill\": \"^6.3.14\",\n    \"babel-preset-es2015\": \"^6.3.13\",\n    \"babel-preset-react\": \"^6.3.13\",\n    \"babel-preset-stage-0\": \"^6.3.13\",\n    \"chokidar\": \"^1.4.2\",\n    \"css\": \"^2.2.1\",\n    \"domkit\": \"0.0.1\",\n    \"fbjs\": \"^0.6.1\",\n    \"webpack\": \"^1.12.9\"\n  },\n  \"dependencies\": {\n    \"babel-polyfill\": \"^6.3.14\",\n    \"mkdirp\": \"^0.5.1\"\n  }\n}\n"
  },
  {
    "path": "react-native.js.split.build.js",
    "content": "/**\n * 这个文件用来上线的时候实现reactnative的打包分拆，part1类似框架部分,part2是业务部分的代码\n */\n\nvar process = require('child_process');\nvar fs = require('fs');\n//直接调用命令\nvar cmd1 = 'cd reactnative;react-native bundle --platform ios --entry-file ./common/LightningStorm.js --bundle-output ../build/part1.js';\nprocess.exec(cmd1,\nfunction (error, stdout, stderr){\n\tconsole.log(cmd1);\n\tconsole.log(stdout);\n\tconsole.log(stderr);\n\tif (error !== null) {\n\t\tconsole.log('exec error: ' + error);\n\t}\n\t//step2\n\tvar cmd2 = 'cd reactnative;react-native bundle --platform ios --entry-file index.ios.js --bundle-output ../build/part2.js';\n\tprocess.exec(cmd2,\n\tfunction (error, stdout, stderr){\n\t\tconsole.log(cmd2);\n\t\tconsole.log(stdout);\n\t\tconsole.log(stderr);\n\t\tif (error !== null) {\n\t\t\tconsole.log('exec error: ' + error);\n\t\t}\n\t\tvar data = fs.readFileSync('./build/part2.js');\n\t\tfs.writeFileSync('./build/part2.js',data.toString().match(/__d\\('native\\/index.(.|\\r|\\n)+(?=__SSTOKENSTRING)/gm)[0].replace(/;\\w+\\(\"InitializeJavaScriptAppEngine\"\\);/,''));\n\t});\n});"
  },
  {
    "path": "react.css.build.js",
    "content": "var fs = require('fs');\nvar nativeCSS = require('./native-css');\nvar mkdirp = require('mkdirp');\n\n\nvar fileList = [];\nfunction walk(path) {  \n\tvar dirList = fs.readdirSync(path);  \n\tdirList.forEach(function(item) {  \n\t    if (fs.statSync(path + '/' + item).isDirectory()) {  \n\t        walk(path + '/' + item + '/');  \n\t    } else {  \n\t        fileList.push(path + item);  \n\t    }  \n\t});  \n}  \n\nwalk('./css/');\nconsole.log(fileList);\nfileList.forEach(function(f){\n\tif(/\\.css$/i.test(f)){\n\t\ttransformCSS(f);\n\t}\n});\nwatch();\n\n\nfunction watch(){\n\tvar chokidar = require('chokidar');\n\t\n\ttry{\n\tvar r = chokidar.watch('./css/').on('change',function(fileName){\n\t\tfileName = './' + fileName;\n\n\t\tconsole.log('检测到' + fileName + '有change');\n\t\ttry{\n\t\t\tif(/\\.css$/i.test(fileName)){\n\t\t\t\ttransformCSS(fileName);\n\t\t\t}\n\t\t}catch(e){\n\t\t\tconsole.log(e);\n\t\t}\t\n\t})\n\t}catch(e){}\n\tconsole.log('start watching!');\n}\n\n\nfunction transformCSS(fileName){\n\tvar cssObject = nativeCSS.convert(fileName);\n\tvar newFileName = fileName.replace('/css/','/reactnative/css/').replace(/\\.css$/,'.js');\n\tconsole.log(newFileName);\n\tvar dir = newFileName.match(/(\\..+\\/)/)[0];\n\tmkdirp.sync(dir);\n\tconsole.log('build '+newFileName);\n\tnativeCSS.generateFile(cssObject, newFileName, false);\n}\n"
  },
  {
    "path": "reactnative/2048/components/aboveGame.js",
    "content": "class AboveGame extends Element {\n    render(){\n        return (\n        \t\t<Div className=\"abovegame\">\n                    <Div className=\"textContainer\">\n                        <Span className=\"text\">Join the numbers and get to the \n                            <Span className=\"boldText\"> 2048 tile!</Span> \n                        </Span>\n                    </Div>\n                    <Div className=\"newGameContainer\" onClick={this.props.onRestart}>\n                        <Span className=\"newGame\">New Game</Span>\n                    </Div>\n                </Div>\n        );\n    }\n}\nmodule.exports = AboveGame;"
  },
  {
    "path": "reactnative/2048/components/container.js",
    "content": "includeCSS(\"require('../../css/game/game2048')\")\n\n// Views\nvar Heading = require('./heading');\nvar AboveGame = require('./aboveGame');\nvar GameContainer = require('./gameContainer');\n\n\n// Modules\n//var TouchManager = require('../utils/touchManager');\nvar StorageManager = require('../utils/localStorageManager');\nvar Grid = require('../utils/grid');\nvar Tile = require('../utils/tile');\n\n// StorageManager\nvar storageManager = new StorageManager();\n\nclass Container extends Element{\n\tcomponentWillMount(){\n\t\tthis.setup();\n        this.moving = false;\n\t}\n\t_handlePanResponderGrant(e: Object) {\n\t\tif(this.moving==false){\n\t\t\tthis.moving = true;\n\t\t\tthis.touchStartState = {\n\t\t\t\t\tpageX: e.changedTouches[0].pageX,\n\t\t\t\t\tpageY: e.changedTouches[0].pageY\n\t\t\t}\n\t\t}\n\t}\n\t_handlePanResponderEnd(e: Object) {\n\t\tconsole.debug(arguments)\n        if(this.moving && this.touchStartState != null){\n            this.moving = false;\n       \n            var dx = e.changedTouches[0].pageX - this.touchStartState.pageX;\n            var dy = e.changedTouches[0].pageY - this.touchStartState.pageY;\n            var absDx = dx>0?dx:-dx;\n            var absDy = dy>0?dy:-dy;\n            var canMove = absDx>absDy?absDx-absDy>10:absDx-absDy<-10;\n            if (canMove) {\n                  // (right : left) : (down : up)\n                  this.move(absDx > absDy ? (dx > 0 ? 1 : 3) : (dy > 0 ? 2 : 0));\n            }\n            this.touchStartState = null;\n        }\n\t}\n\trender(){\n        var tiles = this.state.tiles?this.state.tiles:[];\n        return (<Div className=\"container\" onTouchStart={this._handlePanResponderGrant.bind(this)} onTouchEnd={this._handlePanResponderEnd.bind(this)}>\n                    <Heading score={ this.state.score} best={this.state.best}></Heading> \n                    <AboveGame onRestart={this.restart.bind(this)}></AboveGame>\n                    <GameContainer size={this.props.size} tiles={this.state.tiles} won={this.state.won} over={this.state.over}\n                            onKeepGoing={this.keepGoing.bind(this)} onTryAagin={this.restart.bind(this)}>\n                    </GameContainer>\n                </Div>)\n    }\n\tgetRandomTiles() {\n\t    var ret = [];\n\t    for (var i = 0; i < this.props.startTiles; i++) {\n\t      ret.push(this.getRandomTile())\n\t    }\n\t    return ret;\n\t}\n\tgetRandomTile() {\n\t    var value = Math.random() < 0.9 ? 2 : 4;\n\t    var pos = this.grid.randomAvailableCell();\n\t    var tile = new Tile(pos, value);\n\t    this.grid.insertTile(tile);\n\t    return {\n\t      value: value,\n\t      x: pos.x,\n\t      y: pos.y,\n\t      prog: tile.prog\n\t    };\n\t}\n\tcontinueGame() {\n\t    this.won = false;\n\t    this.over = false;\n\t    this.setState({won: this.won, over: this.over});\n\t}\n\trestart() {\n\t        storageManager.clearGameState();\n\t        this.continueGame(); // Clear the game won/lost message\n\t        this.setup();\n\t}\n\t// Keep playing after winning (allows going over 2048)\n\tkeepGoing() {\n\t    this.keepPlaying = true;\n\t    this.continueGame(); // Clear the game won/lost message\n\t}\n\t   // Return true if the game is lost, or has won and the user hasn't kept playing\n\tisGameTerminated() {\n\t    return this.over || (this.won && !this.keepPlaying);\n\t}\n\t// Set up the game\n\tasync setup() {\n\t    var previousState = await storageManager.getGameState();\n\n\t    // Reload the game from a previous game if present\n\t    if (previousState) {\n\t      this.grid        = new Grid(previousState.grid.size, previousState.grid.cells); // Reload grid\n\t      this.score       = parseInt(previousState.score);\n\t      this.over        = (previousState.over== true ||　previousState.over=='true');\n\t      this.won         = (previousState.won== true ||　previousState.won=='true');\n\t      this.keepPlaying = (previousState.keepPlaying== true ||　previousState.keepPlaying=='true');\n\t    } else {\n\t      this.grid        = new Grid(this.props.size);\n\t      this.score       = 0;\n\t      this.over        = false;\n\t      this.won         = false;\n\t      this.keepPlaying = false;\n\t    }\n\t    this.setState({score: this.score, best: parseInt(await storageManager.getBestScore()), tiles: this.getRandomTiles(), over: this.over, won: this.won});\n\t}\n\t// Set up the initial tiles to start the game with\n\taddStartTiles() {\n\t    for (var i = 0; i < this.startTiles; i++) {\n\t      this.addRandomTile();\n\t    }\n\t}\n\t // Adds a tile in a random position\n\taddRandomTile() {\n\t    var cellsAvailable = this.grid.cellsAvailable();\n\t    \n\t    if (cellsAvailable) {\n\t      var value = Math.random() < 0.9 ? 2 : 4;\n\t      var tile = new Tile(this.grid.randomAvailableCell(), value);\n\n\t      this.grid.insertTile(tile);\n\t    }\n\t}\n\t// Sends the updated grid to the actuator\n\tasync actuate() {\n\t    // Clear the state when the game is over (game over only, not win)\n\t    if (this.over) {\n\t    \tawait storageManager.clearGameState();\n\t    } else {\n\t    \tawait storageManager.setGameState(this.serialize());\n\t    }\n\n\t    // this.actuator.actuate(this.grid, {\n\t    //   score:      this.score,\n\t    //   over:       this.over,\n\t    //   won:        this.won,\n\t    //   bestScore:  storageManager.getBestScore(),\n\t    //   terminated: this.isGameTerminated()\n\t    // });\n\n\t    var tiles = [];\n\t    this.grid.cells.forEach(function (column) {\n\t    \tcolumn.forEach(function (cell) {\n\t    \t\tif (cell) {\n\t    \t\t\ttiles.push({\n\t    \t\t\t\tx: cell.x,\n\t    \t\t\t\ty: cell.y,\n\t    \t\t\t\tvalue: cell.value,\n\t    \t\t\t\tprog: cell.prog\n\t    \t\t\t});\n\t    \t\t}\n\t    \t});\n\t    });\n\t      \n\t    var bestScore = parseInt(storageManager.getBestScore());\n\t    if (bestScore < this.score) {\n\t    \tawait storageManager.setBestScore(this.score);   \n\t    \tthis.setState({score: this.score, best: this.score, tiles: tiles, won: this.won, over:this.over});\n\t    }\n\t    else {\n\t    \tthis.setState({score: this.score, tiles: tiles, won: this.won, over:this.over});\n\t    }\n\t}\n\t// Represent the current game as an object\n\tserialize() {\n\t    return {\n\t      grid:        this.grid.serialize(),\n\t      score:       this.score,\n\t      over:        this.over,\n\t      won:         this.won,\n\t      keepPlaying: this.keepPlaying\n\t    };\n\t}\n\t// Save all tile positions and remove merger info\n\tprepareTiles() {\n\t    this.grid.eachCell(function (x, y, tile) {\n\t      if (tile) {\n\t        tile.mergedFrom = null;\n\t        tile.savePosition();\n\t      }\n\t    });\n\t}\n\t// Move a tile and its representation\n\tmoveTile(tile, cell) {\n\t    this.grid.cells[tile.x][tile.y] = null;\n\t    this.grid.cells[cell.x][cell.y] = tile;\n\t    tile.updatePosition(cell);\n\t}\n\t// Move tiles on the grid in the specified direction\n\tmove(direction) {\n\t    // 0: up, 1: right, 2: down, 3: left\n\t    var self = this;\n\t    if (this.isGameTerminated()) return; // Don't do anything if the game's over\n\t    var cell, tile;\n\t    var vector     = this.getVector(direction);\n\t    var traversals = this.buildTraversals(vector);\n\t    var moved      = false;\n\t    // Save the current tile positions and remove merger information\n\t    this.prepareTiles();\n\t    // Traverse the grid in the right direction and move tiles\n\t    traversals.x.forEach(function (x) {\n\t      traversals.y.forEach(function (y) {\n\t        cell = { x: x, y: y };\n\t        tile = self.grid.cellContent(cell);\n\n\t        if (tile) {\n\t          var positions = self.findFarthestPosition(cell, vector);\n\t          var next      = self.grid.cellContent(positions.next);\n\n\t          // Only one merger per row traversal?\n\t          if (next && next.value === tile.value && !next.mergedFrom) {\n\t            var merged = new Tile(positions.next, tile.value * 2);\n\t            merged.mergedFrom = [tile, next];\n\n\t            self.grid.insertTile(merged);\n\t            self.grid.removeTile(tile);\n\n\t            // Converge the two tiles' positions\n\t            tile.updatePosition(positions.next);\n\n\t            // Update the score\n\t            self.score += merged.value;\n\n\t            // The mighty 2048 tile\n\t            if (merged.value === 2048) self.won = true;\n\t          } else {\n\t            self.moveTile(tile, positions.farthest);\n\t          }\n\n\t          if (!self.positionsEqual(cell, tile)) {\n\t            moved = true; // The tile moved from its original cell!\n\t          }\n\t        }\n\t      });\n\t    });\n\t      \n\t    if (moved) {\n\t      this.addRandomTile();\n\t      if (!this.movesAvailable()) {\n\t        this.over = true; // Game over!\n\t      }\n\t      this.actuate();\n\t    }\n\t}\n\t// Get the vector representing the chosen direction\n\tgetVector(direction) {\n\t    // Vectors representing tile movement\n\t    var map = {\n\t      0: { x: 0,  y: -1 }, // Up\n\t      1: { x: 1,  y: 0 },  // Right\n\t      2: { x: 0,  y: 1 },  // Down\n\t      3: { x: -1, y: 0 }   // Left\n\t    };\n\n\t    return map[direction];\n\t}\n\t// Build a list of positions to traverse in the right order\n\tbuildTraversals(vector) {\n\t    var traversals = { x: [], y: [] };\n\n\t    for (var pos = 0; pos < this.props.size; pos++) {\n\t      traversals.x.push(pos);\n\t      traversals.y.push(pos);\n\t    }\n\n\t    // Always traverse from the farthest cell in the chosen direction\n\t    if (vector.x === 1) traversals.x = traversals.x.reverse();\n\t    if (vector.y === 1) traversals.y = traversals.y.reverse();\n\n\t    return traversals;\n\t}\n\tfindFarthestPosition(cell, vector) {\n\t    var previous;\n\n\t    // Progress towards the vector direction until an obstacle is found\n\t    do {\n\t      previous = cell;\n\t      cell     = { x: previous.x + vector.x, y: previous.y + vector.y };\n\t    } while (this.grid.withinBounds(cell) &&\n\t             this.grid.cellAvailable(cell));\n\n\t    return {\n\t      farthest: previous,\n\t      next: cell // Used to check if a merge is required\n\t    };\n\t}\n\tmovesAvailable() {\n\t    return this.grid.cellsAvailable() || this.tileMatchesAvailable();\n\t}\n\t// Check for available matches between tiles (more expensive check)\n\ttileMatchesAvailable () {\n\t    var self = this;\n\n\t    var tile;\n\n\t    for (var x = 0; x < this.props.size; x++) {\n\t      for (var y = 0; y < this.props.size; y++) {\n\t        tile = this.grid.cellContent({ x: x, y: y });\n\n\t        if (tile) {\n\t          for (var direction = 0; direction < 4; direction++) {\n\t            var vector = self.getVector(direction);\n\t            var cell   = { x: x + vector.x, y: y + vector.y };\n\n\t            var other  = self.grid.cellContent(cell);\n\n\t            if (other && other.value === tile.value) {\n\t              return true; // These two tiles can be merged\n\t            }\n\t          }\n\t        }\n\t      }\n\t    }\n\n\t    return false;\n\t}\n\tpositionsEqual(first, second) {\n\t    return first.x === second.x && first.y === second.y;\n\t}\n}\nmodule.exports = Container;\n"
  },
  {
    "path": "reactnative/2048/components/gameContainer.js",
    "content": "var GameMessage  =require('./gameMessage');\nvar GridContainer = require('./gridContainer');\nvar TileContainer = require('./tileContainer');\n\n\n\nclass GameContainer extends Element{\n    render(){\n        return(\n        \t<Div style={styles.container}>\n                <GridContainer></GridContainer>\n                <TileContainer tiles={this.props.tiles}></TileContainer>\n                <GameMessage won={this.props.won} over={this.props.over} onKeepGoing={this.props.onKeepGoing} onTryAagin={this.props.onTryAagin}> \n                </GameMessage>\n            </Div>\n        );\n    }\n}\n        \nvar styles = {\n    container:{\n    \tposition: 'relative',\n        width:windowWidth-40,\n        height:windowWidth-40,\n        backgroundColor:\"#bbada0\",\n        borderRadius:6,\n        marginTop:25\n    }\n}\n\nmodule.exports = GameContainer;"
  },
  {
    "path": "reactnative/2048/components/gameMessage.js",
    "content": "class GameMessage extends Element{\n    genMessage(){\n        if(this.props.won){\n            return (<Div style={styles.row}>\n                            <Span style={styles.won}>You win!</Span>\n                            <Div style={styles.lower}> \n                                <Div style={styles.keepGoingContainer} onClick={this.props.onKeepGoing}>\n                                    <Span style={styles.keepGoing}>Keep going</Span>\n                                </Div>\n                            </Div>\n                    </Div> )\n        }\n        if(this.props.over){\n            return (<Div style={styles.row}>\n                            <Span style={styles.over}>Game over!</Span>\n                            <Div style={styles.lower}> \n                                <Div style={styles.tryAgainContainer} onClick={this.props.onTryAagin}>\n                                    <Span style={styles.tryAgain}>Try again</Span>\n                                </Div>\n                            </Div>\n                    </Div>)\n        }         \n        return (<Div></Div>)\n    }\n    render(){\n        var message = this.genMessage();\n        var containerStyle = (this.props.won || this.props.over) ? {width:windowWidth-40,height:windowWidth-40} : {width:0,height:0};\n        return(<Div style={Object.assign({},styles.container,containerStyle)}>\n                    {message}\n                </Div>)\n    }\n}\n        \nvar styles = {\n    container:{\n        position:\"absolute\",\n        left:0,\n        top:0,\n        overflow:\"hidden\",\n        backgroundColor:\"rgba(238, 228, 218, 0.5)\",\n        flexDirection:\"column\",\n        alignItems:\"center\",\n        justifyContent:\"center\"\n    },\n    row:{\n        width:windowWidth-40,\n        height:120,\n        flexDirection:\"column\",\n        alignItems:\"center\",\n        justifyContent:\"center\"\n    },\n    won:{\n        fontSize:60,\n        color:\"#776E65\",\n        textAlign:\"center\"\n    },\n    over:{\n        fontSize:60,\n        color:\"#776E65\",\n        textAlign:\"center\",\n    },\n    lower:{\n        flex:1,\n        height:120\n    },\n    keepGoingContainer:{\n        height:40,\n        backgroundColor:\"#8f7a66\",\n        borderRadius:3,\n        paddingHorizontal:15\n    },\n    keepGoing:{\n        fontSize:24,\n        color:\"#f9f6f2\",\n        textAlign:\"center\"\n    },\n    tryAgainContainer:{\n        height:40,\n        backgroundColor:\"#8f7a66\",\n        borderRadius:3,\n        paddingHorizontal:15\n    },\n    tryAgain:{\n        fontSize:24,\n        color:\"#f9f6f2\",\n        textAlign:\"center\"\n    }\n}\n\nmodule.exports = GameMessage;"
  },
  {
    "path": "reactnative/2048/components/gridCell.js",
    "content": "class GridRow extends Element{\n    render(){\n        return(<Div style={styles.container}></Div>)\n    }\n}\n        \nvar styles = {\n    container:{\n        width:(windowWidth-40-50)/4,\n        height:(windowWidth-40-50)/4,\n        marginHorizontal:5,\n        backgroundColor:\"rgba(238, 228, 218, 0.35)\",\n        borderRadius:3\n    }\n}\n\nmodule.exports = GridRow;"
  },
  {
    "path": "reactnative/2048/components/gridContainer.js",
    "content": "var GridRow = require('./gridRow');\n\nclass GridContainer extends Element{\n    render(){\n        return(<Div >\n                    <GridRow></GridRow>\n                    <GridRow></GridRow>\n                    <GridRow></GridRow>\n                    <GridRow></GridRow>\n                </Div>)\n    }\n}\n        \nvar styles = {\n    container:{\n        width:windowWidth - 40,\n        height: windowWidth - 40,\n        position:\"absolute\",\n        left:0,\n        top:0,\n        overflow:\"hidden\",\n        paddingHorizontal:3,\n        paddingVertical:3,\n        flexDirection:\"column\"\n    }\n}\n\nmodule.exports = GridContainer;"
  },
  {
    "path": "reactnative/2048/components/gridRow.js",
    "content": "var GridCell = require('./gridCell');\n\nclass GridRow extends Element{\n    render(){\n        return(<Div style={styles.container}>\n                    <GridCell></GridCell>\n                    <GridCell></GridCell>\n                    <GridCell></GridCell>\n                    <GridCell></GridCell>\n                </Div>)\n    }\n}\n        \nvar styles = {\n    container:{\n    \tdisplay: 'flex',\n        height:(windowWidth-40-50)/4,\n        flexDirection:\"row\"\n    }\n}\n\nmodule.exports = GridRow;"
  },
  {
    "path": "reactnative/2048/components/heading.js",
    "content": "/*\n一、Flex Box\n1.flexDirection:[\"row\",\"column\"],\nrow:水平划分\ncolumn:垂直划分\n2.alignItems:['flex-start', 'flex-end', 'center', 'stretch']\n水平布局\n3.justifyContent:['flex-start', 'flex-end', 'center', 'space-between', 'space-around']\n垂直布局\n*/\n\n    \nclass Heading extends Element{\n    render(){\n        return(\n        \t\t<Div className=\"heading\">\n                    <Span className=\"heading-title\">2048</Span>\n                    <Div className=\"scores\">\n                        <Div className=\"container\">\n                            <Span className=\"container-title\">SCORE</Span>\n                            <Span className=\"container-value\">{this.props.score}</Span>\n                        </Div>\n                        <Div className=\"container\">\n                            <Span className=\"container-title\">BEST</Span>\n                            <Span className=\"container-value\">{this.props.best}</Span>\n                        </Div>\n                    </Div>\n                </Div>\n        );\n    }\n}\n\nmodule.exports = Heading;"
  },
  {
    "path": "reactnative/2048/components/tile.js",
    "content": "var MARGIN_WIDTH = 5;\nvar ITEM_WIDTH = (windowWidth- 40 - MARGIN_WIDTH * 10)/4;\n\nclass Tile extends Element {\n    render(){\n        var tileStyle = this.props.value<= 2048 ? styles['tile' + this.props.value] : styles[\"tilesuper\"];\n        var tilePositionStyle = {\n            left:this.props.x*(ITEM_WIDTH+MARGIN_WIDTH*2)+MARGIN_WIDTH*2-2,\n            top:this.props.y*(ITEM_WIDTH+MARGIN_WIDTH*2)+MARGIN_WIDTH*2-2,\n            width:ITEM_WIDTH,\n            height:ITEM_WIDTH\n        }\n        var tileTextStyle = this.props.value<= 2048 ? styles['tile' + this.props.value+\"Text\"] : styles[\"tilesuperText\"];\n        \n        var tileTextLineStyle = {\n            lineHeight:parseInt(ITEM_WIDTH)+'pt'\n        }\n        return (\n        \t<Div style={Object.assign({},styles.tile,tileStyle,tilePositionStyle)}>\n                <Span style={Object.assign({}, styles.tileText,tileTextStyle,tileTextLineStyle)}>{ this.props.value }</Span>\n            </Div>\n        );\n    }\n}\n        \nvar styles = {\n    \"tile\":{\n        position:\"absolute\",\n        borderRadius:3\n    },\n    \"tileText\":{\n        fontSize: 48,\n        color:\"#776E65\",\n        textAlign:\"center\",\n    },\n    \"tile2\":{\n        backgroundColor:\"#eee4da\",\n    },\n    \"tile4\":{\n        backgroundColor:\"#eee1c9\",\n    },\n    \"tile8\":{\n        backgroundColor:\"#f3b27a\",\n    },\n    \"tile8Text\":{\n        color:\"#f9f6f2\",\n    },\n    \"tile16\":{\n        backgroundColor:\"#f69664\",\n    },\n    \"tile16Text\":{\n        color:\"#f9f6f2\"\n    },\n    \"tile32\":{\n        backgroundColor:\"#f77c5f\",\n    },\n    \"tile32Text\":{\n        color:\"#f9f6f2\"\n    },\n    \"tile64\":{\n        backgroundColor:\"#f75f3b\",\n    },\n    \"tile64Text\":{\n        color:\"#f9f6f2\"\n    },\n    \"tile128\":{\n        backgroundColor:\"#edd073\",\n    },\n    \"tile128Text\":{\n        color:\"#f9f6f2\",\n        fontSize: 36,\n        marginTop:8\n    },\n    \"tile256\":{\n        backgroundColor:\"#edcc62\",\n    },\n    \"tile256Text\":{\n        color:\"#f9f6f2\",\n        fontSize: 36,\n        marginTop:8\n    },\n    \"tile512\":{\n        backgroundColor:\"#edc950\",\n    },\n    \"tile512Text\":{\n        color:\"#f9f6f2\",\n        fontSize: 36,\n        marginTop:8\n    },\n    \"tile1024\":{\n        backgroundColor:\"#edc53f\",\n    },\n    \"tile1024Text\":{\n        color:\"#f9f6f2\",\n        fontSize: 24,\n        marginTop:14\n    },\n    \"tile2048\":{\n        backgroundColor:\"#edc22e\",\n    },\n    \"tile2048Text\":{\n        color:\"#f9f6f2\",\n        fontSize: 24,\n        marginTop:14\n    },\n    \"tilesuper\":{\n        backgroundColor:\"#3c3a33\",\n        fontSize: 12,\n        marginTop:24\n    },\n    \"tilesuperText\":{\n        color:\"#f9f6f2\"\n    }\n}\n\nmodule.exports = Tile;\n"
  },
  {
    "path": "reactnative/2048/components/tileContainer.js",
    "content": "var Tile = require('./tile');\n\nclass TileContainer extends Element {\n    render(){\n        var children = this.props.tiles;\n        return(<Div style={styles.container}>\n                        {\n                        \tchildren && children.map(function(item){\n                                return (<Tile x={item.x} y={item.y} value={item.value} key={item.prog}/>)\n                            })\n                        }\n                </Div>)\n    }\n}\n        \nvar styles = {\n    container:{\n        width: windowWidth - 40,\n        height:windowWidth -40,\n        position:\"absolute\",\n        left:0,\n        top:0,\n        overflow:\"hidden\",\n    }\n}\n\nmodule.exports = TileContainer;"
  },
  {
    "path": "reactnative/2048/game.js",
    "content": "var Container = require('./components/container');\n\n(class Game extends App{\n\trender(){\n\t\treturn (\n\t\t\t\t<Container startTiles={2} size={4}/>\n\t\t);\n\t}\n}).run();\n"
  },
  {
    "path": "reactnative/2048/utils/grid.js",
    "content": "var Tile = require('./tile');\n\nvar Grid = function(size, previousState) {\n\tthis.size = size;\n\tthis.cells = previousState ? this.fromState(previousState) : this.empty();\n}\n\n// Build a grid of the specified size\nGrid.prototype.empty = function() {\n\tvar cells = [];\n\n\tfor (var x = 0; x < this.size; x++) {\n\t\tvar row = cells[x] = [];\n\n\t\tfor (var y = 0; y < this.size; y++) {\n\t\t\trow.push(null);\n\t\t}\n\t}\n\n\treturn cells;\n};\n\nGrid.prototype.fromState = function(state) {\n\tvar cells = [];\n\n\tfor (var x = 0; x < this.size; x++) {\n\t\tvar row = cells[x] = [];\n\n\t\tfor (var y = 0; y < this.size; y++) {\n\t\t\tvar tile = state[x][y];\n\t\t\trow.push(tile ? new Tile(tile.position, tile.value) : null);\n\t\t}\n\t}\n\n\treturn cells;\n};\n\n// Find the first available random position\nGrid.prototype.randomAvailableCell = function() {\n\tvar cells = this.availableCells();\n\n\tif (cells.length) {\n\t\treturn cells[Math.floor(Math.random() * cells.length)];\n\t}\n};\n\nGrid.prototype.availableCells = function() {\n\tvar cells = [];\n\n\tthis.eachCell(function(x, y, tile) {\n\t\tif (!tile) {\n\t\t\tcells.push({\n\t\t\t\tx : x,\n\t\t\t\ty : y\n\t\t\t});\n\t\t}\n\t});\n\n\treturn cells;\n};\n\n// Call callback for every cell\nGrid.prototype.eachCell = function(callback) {\n\tfor (var x = 0; x < this.size; x++) {\n\t\tfor (var y = 0; y < this.size; y++) {\n\t\t\tcallback(x, y, this.cells[x][y]);\n\t\t}\n\t}\n};\n\n// Check if there are any cells available\nGrid.prototype.cellsAvailable = function() {\n\treturn !!this.availableCells().length;\n};\n\n// Check if the specified cell is taken\nGrid.prototype.cellAvailable = function(cell) {\n\treturn !this.cellOccupied(cell);\n};\n\nGrid.prototype.cellOccupied = function(cell) {\n\treturn !!this.cellContent(cell);\n};\n\nGrid.prototype.cellContent = function(cell) {\n\tif (this.withinBounds(cell)) {\n\t\treturn this.cells[cell.x][cell.y];\n\t} else {\n\t\treturn null;\n\t}\n};\n\n// Inserts a tile at its position\nGrid.prototype.insertTile = function(tile) {\n\tthis.cells[tile.x][tile.y] = tile;\n\t// console.log(this.toString());\n};\n\nGrid.prototype.removeTile = function(tile) {\n\tthis.cells[tile.x][tile.y] = null;\n};\n\nGrid.prototype.withinBounds = function(position) {\n\treturn position.x >= 0 && position.x < this.size && position.y >= 0\n\t\t\t&& position.y < this.size;\n};\n\nGrid.prototype.toString = function() {\n\tvar ret = [];\n\tfor (var y = 0; y < this.size; y++) {\n\t\tfor (var x = 0; x < this.size; x++) {\n\t\t\tret.push(this.cells[x][y] ? this.cells[x][y].value : '·');\n\t\t}\n\t\tret.push('\\n');\n\t}\n\treturn ret.join('');\n};\n\nGrid.prototype.serialize = function() {\n\tvar cellState = [];\n\n\tfor (var x = 0; x < this.size; x++) {\n\t\tvar row = cellState[x] = [];\n\n\t\tfor (var y = 0; y < this.size; y++) {\n\t\t\trow.push(this.cells[x][y] ? this.cells[x][y].serialize() : null);\n\t\t}\n\t}\n\n\treturn {\n\t\tsize : this.size,\n\t\tcells : cellState\n\t};\n};\n\nmodule.exports = Grid;"
  },
  {
    "path": "reactnative/2048/utils/localStorageManager.js",
    "content": "var LocalStorageManager = function() {\n    this.bestScoreKey = \"bestScore\";\n    this.gameStateKey = \"gameState\";\n    this.storage = localStorage;\n}\n\nLocalStorageManager.prototype.getItem = async function(key){\n    try {\n    \tvar value = await AsyncStorage.getItem(key);\n    \tif (value !== null){\n    \t\treturn value;\n    \t} else {\n    \t\treturn null;\n    \t}\n    } catch (error) {\n        return null;\n    }\n}\nLocalStorageManager.prototype.setItem = async function(key,value){\n    try {\n    \tawait AsyncStorage.setItem(key, value);\n    \treturn value;\n    } catch (error) {\n    \treturn null;\n    }\n}\nLocalStorageManager.prototype.removeItem = async function(key){\n    try {\n    \tawait AsyncStorage.removeItem(key);\n    \treturn key;\n    } catch (error) {\n    \treturn null;\n    }\n}\n\n// Best score getters/setters\nLocalStorageManager.prototype.getBestScore = async function () {\n\treturn await this.getItem(this.bestScoreKey) || 0;\n};\nLocalStorageManager.prototype.setBestScore = async function (score) {\n\tawait this.setItem(this.bestScoreKey, score.toString());\n};\n\n// Game state getters/setters and clearing\nLocalStorageManager.prototype.getGameState = async function () {\n\tvar state = await this.getItem(this.gameStateKey);\n\treturn state?JSON.parse(state):null;\n};\n\nLocalStorageManager.prototype.setGameState = async function(gameState) {\n\tvar json = gameState?JSON.stringify(gameState):null;\n\tawait this.setItem(this.gameStateKey,json);\n};\nLocalStorageManager.prototype.clearGameState = async function () {\n\tawait this.removeItem(this.gameStateKey);\n};\n\nmodule.exports = LocalStorageManager;"
  },
  {
    "path": "reactnative/2048/utils/tile.js",
    "content": "var _prog = 0;\n\nfunction Tile(position, value) {\n\tthis.x = position.x;\n\tthis.y = position.y;\n\tthis.value = value || 2;\n\n\tthis.previousPosition = null;\n\tthis.mergedFrom = null; // Tracks tiles that merged together\n\tthis.prog = _prog++;\n}\n\nTile.prototype.savePosition = function() {\n\tthis.previousPosition = {\n\t\tx : this.x,\n\t\ty : this.y\n\t};\n};\n\nTile.prototype.updatePosition = function(position) {\n\tthis.x = position.x;\n\tthis.y = position.y;\n};\n\nTile.prototype.serialize = function() {\n\treturn {\n\t\tposition : {\n\t\t\tx : this.x,\n\t\t\ty : this.y\n\t\t},\n\t\tvalue : this.value\n\t};\n};\n\nmodule.exports = Tile;"
  },
  {
    "path": "reactnative/README.md",
    "content": "## react-native目录主要文件介绍\n\n这里保持和官方的reactnative代码完全一致\n- css目录是存放通过根目录的react.css.build.js脚本同步编译过来的reactjs的css文件\n- 保留了官方原有的index.ios.js做入口\n- common目录是框架文件，以及UI组件的文件\n- index.js是页面入口文件，业务逻辑\n- common/LightningStorm.js是框架文件\n- common/rn目录是reactnative的UI组件文件，适配与native组件\n- 对应的在根目录web目录也有一个叫做common/html对应的是适配与H5的UI组件文件,和common/rn目录的API保持一致，但是不同实现"
  },
  {
    "path": "reactnative/android/app/app.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\":app\" external.linked.project.path=\"$MODULE_DIR$\" external.root.project.path=\"$MODULE_DIR$/..\" external.system.id=\"GRADLE\" external.system.module.group=\"native\" external.system.module.version=\"unspecified\" type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"android-gradle\" name=\"Android-Gradle\">\n      <configuration>\n        <option name=\"GRADLE_PROJECT_PATH\" value=\":app\" />\n      </configuration>\n    </facet>\n    <facet type=\"android\" name=\"Android\">\n      <configuration>\n        <option name=\"SELECTED_BUILD_VARIANT\" value=\"debug\" />\n        <option name=\"SELECTED_TEST_ARTIFACT\" value=\"_android_test_\" />\n        <option name=\"ASSEMBLE_TASK_NAME\" value=\"assembleDebug\" />\n        <option name=\"COMPILE_JAVA_TASK_NAME\" value=\"compileDebugSources\" />\n        <option name=\"ASSEMBLE_TEST_TASK_NAME\" value=\"assembleDebugAndroidTest\" />\n        <option name=\"COMPILE_JAVA_TEST_TASK_NAME\" value=\"compileDebugAndroidTestSources\" />\n        <afterSyncTasks>\n          <task>generateDebugAndroidTestSources</task>\n          <task>generateDebugSources</task>\n        </afterSyncTasks>\n        <option name=\"ALLOW_USER_CONFIGURATION\" value=\"false\" />\n        <option name=\"MANIFEST_FILE_RELATIVE_PATH\" value=\"/src/main/AndroidManifest.xml\" />\n        <option name=\"RES_FOLDER_RELATIVE_PATH\" value=\"/src/main/res\" />\n        <option name=\"RES_FOLDERS_RELATIVE_PATH\" value=\"file://$MODULE_DIR$/src/main/res\" />\n        <option name=\"ASSETS_FOLDER_RELATIVE_PATH\" value=\"/src/main/assets\" />\n      </configuration>\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" LANGUAGE_LEVEL=\"JDK_1_7\" inherit-compiler-output=\"false\">\n    <output url=\"file://$MODULE_DIR$/build/intermediates/classes/debug\" />\n    <output-test url=\"file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug\" />\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/r/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/aidl/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/buildConfig/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/rs/debug\" isTestSource=\"false\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/rs/debug\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/resValues/debug\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/r/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug\" isTestSource=\"true\" generated=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/res\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/resources\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/assets\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/aidl\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/java\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/jni\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/debug/rs\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/res\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/resources\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/assets\" type=\"java-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/aidl\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/java\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/jni\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/main/rs\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/res\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/resources\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/assets\" type=\"java-test-resource\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/aidl\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/java\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/jni\" isTestSource=\"true\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/src/androidTest/rs\" isTestSource=\"true\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/assets\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/classes\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/debug\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/dependency-cache\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/dex\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.0.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.0.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.0.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/drawee/0.8.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/fbcore/0.8.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/fresco/0.8.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/imagepipeline-okhttp/0.8.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.fresco/imagepipeline/0.8.1/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/com.facebook.react/react-native/0.22.2/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/exploded-aar/org.webkit/android-jsc/r174650/jars\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/incremental\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/manifests\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/pre-dexed\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/res\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/rs\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/symbols\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/intermediates/tmp\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/outputs\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build/tmp\" />\n    </content>\n    <orderEntry type=\"jdk\" jdkName=\"Android API 23 Platform\" jdkType=\"Android SDK\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"fresco-0.8.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"imagepipeline-okhttp-0.8.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"imagepipeline-0.8.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"support-v4-23.0.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"stetho-1.2.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"jsr305-3.0.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"jackson-core-2.2.3\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"react-native-0.22.2\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"appcompat-v7-23.0.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"okhttp-2.5.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"okio-1.6.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"okhttp-ws-2.5.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"fbcore-0.8.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"android-jsc-r174650\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"drawee-0.8.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"stetho-okhttp-1.2.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"bolts-android-1.1.4\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"commons-cli-1.2\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"library-2.4.0\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"recyclerview-v7-23.0.1\" level=\"project\" />\n    <orderEntry type=\"library\" exported=\"\" name=\"support-annotations-23.0.1\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "reactnative/android/app/build.gradle",
    "content": "apply plugin: \"com.android.application\"\n\nimport com.android.build.OutputFile\n\n/**\n * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets\n * and bundleReleaseJsAndAssets).\n * These basically call `react-native bundle` with the correct arguments during the Android build\n * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the\n * bundle directly from the development server. Below you can see all the possible configurations\n * and their defaults. If you decide to add a configuration block, make sure to add it before the\n * `apply from: \"react.gradle\"` line.\n *\n * project.ext.react = [\n *   // the name of the generated asset file containing your JS bundle\n *   bundleAssetName: \"index.android.bundle\",\n *\n *   // the entry file for bundle generation\n *   entryFile: \"index.android.js\",\n *\n *   // whether to bundle JS and assets in debug mode\n *   bundleInDebug: false,\n *\n *   // whether to bundle JS and assets in release mode\n *   bundleInRelease: true,\n *\n *   // whether to bundle JS and assets in another build variant (if configured).\n *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants\n *   // The configuration property can be in the following formats\n *   //         'bundleIn${productFlavor}${buildType}'\n *   //         'bundleIn${buildType}'\n *   // bundleInFreeDebug: true,\n *   // bundleInPaidRelease: true,\n *   // bundleInBeta: true,\n *\n *   // the root of your project, i.e. where \"package.json\" lives\n *   root: \"../../\",\n *\n *   // where to put the JS bundle asset in debug mode\n *   jsBundleDirDebug: \"$buildDir/intermediates/assets/debug\",\n *\n *   // where to put the JS bundle asset in release mode\n *   jsBundleDirRelease: \"$buildDir/intermediates/assets/release\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in debug mode\n *   resourcesDirDebug: \"$buildDir/intermediates/res/merged/debug\",\n *\n *   // where to put drawable resources / React Native assets, e.g. the ones you use via\n *   // require('./image.png')), in release mode\n *   resourcesDirRelease: \"$buildDir/intermediates/res/merged/release\",\n *\n *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means\n *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to\n *   // date; if you have any other folders that you want to ignore for performance reasons (gradle\n *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/\n *   // for example, you might want to remove it from here.\n *   inputExcludes: [\"android/**\", \"ios/**\"]\n * ]\n */\n\napply from: \"react.gradle\"\n\n/**\n * Set this to true to create two separate APKs instead of one:\n *   - An APK that only works on ARM devices\n *   - An APK that only works on x86 devices\n * The advantage is the size of the APK is reduced by about 4MB.\n * Upload all the APKs to the Play Store and people will download\n * the correct one based on the CPU architecture of their device.\n */\ndef enableSeparateBuildPerCPUArchitecture = false\n\n/**\n * Run Proguard to shrink the Java bytecode in release builds.\n */\ndef enableProguardInReleaseBuilds = false\n\nandroid {\n    compileSdkVersion 23\n    buildToolsVersion \"23.0.1\"\n\n    defaultConfig {\n        applicationId \"com.native\"\n        minSdkVersion 16\n        targetSdkVersion 22\n        versionCode 1\n        versionName \"1.0\"\n        ndk {\n            abiFilters \"armeabi-v7a\", \"x86\"\n        }\n    }\n    splits {\n        abi {\n            reset()\n            enable enableSeparateBuildPerCPUArchitecture\n            universalApk false  // If true, also generate a universal APK\n            include \"armeabi-v7a\", \"x86\"\n        }\n    }\n    buildTypes {\n        release {\n            minifyEnabled enableProguardInReleaseBuilds\n            proguardFiles getDefaultProguardFile(\"proguard-android.txt\"), \"proguard-rules.pro\"\n        }\n    }\n    // applicationVariants are e.g. debug, release\n    applicationVariants.all { variant ->\n        variant.outputs.each { output ->\n            // For each separate APK per architecture, set a unique version code as described here:\n            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits\n            def versionCodes = [\"armeabi-v7a\":1, \"x86\":2]\n            def abi = output.getFilter(OutputFile.ABI)\n            if (abi != null) {  // null for the universal-debug, universal-release variants\n                output.versionCodeOverride =\n                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode\n            }\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: \"libs\", include: [\"*.jar\"])\n    compile \"com.android.support:appcompat-v7:23.0.1\"\n    compile \"com.facebook.react:react-native:+\"  // From node_modules\n}\n"
  },
  {
    "path": "reactnative/android/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Disabling obfuscation is useful if you collect stack traces from production crashes\n# (unless you are using a system that supports de-obfuscate the stack traces).\n-dontobfuscate\n\n# React Native\n\n# Keep our interfaces so they can be used by other ProGuard rules.\n# See http://sourceforge.net/p/proguard/bugs/466/\n-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip\n-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters\n\n# Do not strip any method/class that is annotated with @DoNotStrip\n-keep @com.facebook.proguard.annotations.DoNotStrip class *\n-keepclassmembers class * {\n    @com.facebook.proguard.annotations.DoNotStrip *;\n}\n\n-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {\n  void set*(***);\n  *** get*();\n}\n\n-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }\n-keep class * extends com.facebook.react.bridge.NativeModule { *; }\n-keepclassmembers,includedescriptorclasses class * { native <methods>; }\n-keepclassmembers class *  { @com.facebook.react.uimanager.UIProp <fields>; }\n-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }\n-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }\n\n-dontwarn com.facebook.react.**\n\n# okhttp\n\n-keepattributes Signature\n-keepattributes *Annotation*\n-keep class com.squareup.okhttp.** { *; }\n-keep interface com.squareup.okhttp.** { *; }\n-dontwarn com.squareup.okhttp.**\n\n# okio\n\n-keep class sun.misc.Unsafe { *; }\n-dontwarn java.nio.file.*\n-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement\n-dontwarn okio.**\n\n# stetho\n\n-dontwarn com.facebook.stetho.**\n"
  },
  {
    "path": "reactnative/android/app/react.gradle",
    "content": "import org.apache.tools.ant.taskdefs.condition.Os\n\ndef config = project.hasProperty(\"react\") ? project.react : [];\n\ndef bundleAssetName = config.bundleAssetName ?: \"index.android.bundle\"\ndef entryFile = config.entryFile ?: \"index.android.js\"\n\n// because elvis operator\ndef elvisFile(thing) {\n    return thing ? file(thing) : null;\n}\n\ndef reactRoot = elvisFile(config.root) ?: file(\"../../\")\ndef inputExcludes = config.inputExcludes ?: [\"android/**\", \"ios/**\"]\n\nvoid runBefore(String dependentTaskName, Task task) {\n    Task dependentTask = tasks.findByPath(dependentTaskName);\n    if (dependentTask != null) {\n        dependentTask.dependsOn task\n    }\n}\n\ngradle.projectsEvaluated {\n    // Grab all build types and product flavors\n    def buildTypes = android.buildTypes.collect { type -> type.name }\n    def productFlavors = android.productFlavors.collect { flavor -> flavor.name }\n\n    // When no product flavors defined, use empty\n    if (!productFlavors) productFlavors.add('')\n\n    productFlavors.each { productFlavorName ->\n        buildTypes.each { buildTypeName ->\n            // Create variant and target names\n            def targetName = \"${productFlavorName.capitalize()}${buildTypeName.capitalize()}\"\n            def targetPath = productFlavorName ?\n                    \"${productFlavorName}/${buildTypeName}\" :\n                    \"${buildTypeName}\"\n\n            // React js bundle directories\n            def jsBundleDirConfigName = \"jsBundleDir${targetName}\"\n            def jsBundleDir = elvisFile(config.\"$jsBundleDirConfigName\") ?:\n                    file(\"$buildDir/intermediates/assets/${targetPath}\")\n\n            def resourcesDirConfigName = \"jsBundleDir${targetName}\"\n            def resourcesDir = elvisFile(config.\"${resourcesDirConfigName}\") ?:\n                    file(\"$buildDir/intermediates/res/merged/${targetPath}\")\n            def jsBundleFile = file(\"$jsBundleDir/$bundleAssetName\")\n\n            // Bundle task name for variant\n            def bundleJsAndAssetsTaskName = \"bundle${targetName}JsAndAssets\"\n\n            def currentBundleTask = tasks.create(\n                    name: bundleJsAndAssetsTaskName,\n                    type: Exec) {\n                group = \"react\"\n                description = \"bundle JS and assets for ${targetName}.\"\n\n                // Create dirs if they are not there (e.g. the \"clean\" task just ran)\n                doFirst {\n                    jsBundleDir.mkdirs()\n                    resourcesDir.mkdirs()\n                }\n\n                // Set up inputs and outputs so gradle can cache the result\n                inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)\n                outputs.dir jsBundleDir\n                outputs.dir resourcesDir\n\n                // Set up the call to the react-native cli\n                workingDir reactRoot\n\n                // Set up dev mode\n                def devEnabled = !targetName.toLowerCase().contains(\"release\")\n                if (Os.isFamily(Os.FAMILY_WINDOWS)) {\n                    commandLine \"cmd\", \"/c\", \"react-native\", \"bundle\", \"--platform\", \"android\", \"--dev\", \"${devEnabled}\",\n                            \"--entry-file\", entryFile, \"--bundle-output\", jsBundleFile, \"--assets-dest\", resourcesDir\n                } else {\n                    commandLine \"react-native\", \"bundle\", \"--platform\", \"android\", \"--dev\", \"${devEnabled}\",\n                            \"--entry-file\", entryFile, \"--bundle-output\", jsBundleFile, \"--assets-dest\", resourcesDir\n                }\n\n                enabled config.\"bundleIn${targetName}\" ||\n                    config.\"bundleIn${buildTypeName.capitalize()}\" ?:\n                            targetName.toLowerCase().contains(\"release\")\n            }\n\n            // Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process\n            currentBundleTask.dependsOn(\"merge${targetName}Resources\")\n            currentBundleTask.dependsOn(\"merge${targetName}Assets\")\n\n            runBefore(\"processArmeabi-v7a${targetName}Resources\", currentBundleTask)\n            runBefore(\"processX86${targetName}Resources\", currentBundleTask)\n            runBefore(\"processUniversal${targetName}Resources\", currentBundleTask)\n            runBefore(\"process${targetName}Resources\", currentBundleTask)\n        }\n    }\n}\n"
  },
  {
    "path": "reactnative/android/app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.reactnative\" >\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:theme=\"@style/AppTheme\" >\n        <activity\n            android:name=\".MainActivity\"\n            android:configChanges=\"keyboard|keyboardHidden|orientation|screenSize\"\n            android:label=\"@string/app_name\" >\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity android:name=\"com.facebook.react.devsupport.DevSettingsActivity\" />\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "reactnative/android/app/src/main/java/com/reactnative/MainActivity.java",
    "content": "package com.reactnative;\n\nimport android.app.Activity;\nimport android.app.DownloadManager;\nimport android.content.BroadcastReceiver;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.content.IntentFilter;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.os.Environment;\nimport android.util.Log;\nimport android.view.KeyEvent;\nimport android.widget.Toast;\n\nimport com.facebook.react.LifecycleState;\nimport com.facebook.react.ReactInstanceManager;\nimport com.facebook.react.ReactRootView;\nimport com.facebook.react.bridge.JSBundleLoader;\nimport com.facebook.react.bridge.JSCJavaScriptExecutor;\nimport com.facebook.react.bridge.JavaScriptExecutor;\nimport com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;\nimport com.facebook.react.shell.MainReactPackage;\n\nimport java.io.File;\nimport java.lang.reflect.InvocationTargetException;\nimport java.lang.reflect.Method;\n\npublic class MainActivity extends Activity implements DefaultHardwareBackBtnHandler {\n\n    private static final String TAG = \"MainActivity\";\n\n    public static final String JS_BUNDLE_REMOTE_URL = \"http://statics1.jiaru.club/cxylhl/z4.txt\";\n    public static final String JS_BUNDLE_LOCAL_FILE = \"index.android.bundle\";\n    public static final String JS_BUNDLE_LOCAL_PATH = Environment.getExternalStorageDirectory().toString() + File.separator + JS_BUNDLE_LOCAL_FILE;\n\n    private ReactInstanceManager mReactInstanceManager;\n    private ReactRootView mReactRootView;\n    private CompleteReceiver mDownloadCompleteReceiver;\n    private long mDownloadId;\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n//        super.onCreate(savedInstanceState);\n//        mReactRootView = new ReactRootView(this);\n//\n//        mReactInstanceManager = ReactInstanceManager.builder()\n//                .setApplication(getApplication())\n//                .setBundleAssetName(\"index.android.bundle\")\n//                .setJSMainModuleName(\"index.android\")\n//                .addPackage(new MainReactPackage())\n//                .setUseDeveloperSupport(BuildConfig.DEBUG)\n//                .setInitialLifecycleState(LifecycleState.RESUMED)\n//                .build();\n//\n//        mReactRootView.startReactApplication(mReactInstanceManager, \"native\", null);\n//\n//        setContentView(mReactRootView);\n        super.onCreate(savedInstanceState);\n        Log.v(\"onCreate\", \"this is onCreate\");\n        iniReactRootView();\n        initDownloadManager();\n        updateBundle();\n    }\n\n    private void initDownloadManager() {\n        mDownloadCompleteReceiver = new CompleteReceiver();\n        registerReceiver(mDownloadCompleteReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));\n    }\n\n    private void iniReactRootView() {\n        ReactInstanceManager.Builder builder = ReactInstanceManager.builder()\n                .setApplication(getApplication())\n                .setJSMainModuleName(\"index.android\")\n                .addPackage(new MainReactPackage())\n                .setUseDeveloperSupport(BuildConfig.DEBUG)\n                .setInitialLifecycleState(LifecycleState.RESUMED);\n\n        File file = new File(JS_BUNDLE_LOCAL_PATH);\n        if(file != null && file.exists()){\n            builder.setJSBundleFile(JS_BUNDLE_LOCAL_PATH);\n            Log.i(TAG, \"load bundle from local cache\");\n        }else{\n            builder.setBundleAssetName(JS_BUNDLE_LOCAL_FILE);\n            Log.i(TAG, \"load bundle from asset\");\n        }\n\n        mReactRootView = new ReactRootView(this);\n        mReactInstanceManager = builder.build();\n        mReactRootView.startReactApplication(mReactInstanceManager, \"native\", null);\n\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        Log.v(TAG, \"this is onDestroy\");\n        unregisterReceiver(mDownloadCompleteReceiver);\n    }\n\n    private void updateBundle() {\n\n        // Should add version check here, if bundle file\n        // is the newest , we do not need to update\n        File file = new File(JS_BUNDLE_LOCAL_PATH);\n//        if(file != null && file.exists()){\n//            Log.i(TAG, \"newest bundle exists !\");\n//            return;\n//        }\n\n        //Toast.makeText(BaseReactActivity.this, \"Start downloading update\", Toast.LENGTH_SHORT).show();\n\n        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(JS_BUNDLE_REMOTE_URL));\n        request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);\n        request.setDestinationUri(Uri.parse(\"file://\" + JS_BUNDLE_LOCAL_PATH));\n        DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);\n        mDownloadId = dm.enqueue(request);\n\n        Log.i(TAG, \"start download remote bundle\");\n    }\n\n    private class CompleteReceiver extends BroadcastReceiver {\n\n        @Override\n        public void onReceive(Context context, Intent intent) {\n            long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);\n            if(completeDownloadId == mDownloadId){\n                onJSBundleLoadedFromServer();\n            }\n        }\n    };\n\n    private void onJSBundleLoadedFromServer() {\n        File file = new File(JS_BUNDLE_LOCAL_PATH);\n        if(file == null || !file.exists() ){\n            Log.i(TAG, \"download error, check URL or network state\");\n            return;\n        }\n\n        Log.i(TAG, \"download success, reload js bundle\");\n\n        Toast.makeText(MainActivity.this, \"Downloading complete\", Toast.LENGTH_SHORT).show();\n        try {\n            Class<?> RIManagerClazz = mReactInstanceManager.getClass();\n            Method method = RIManagerClazz.getDeclaredMethod(\"recreateReactContextInBackground\",\n                    JavaScriptExecutor.class, JSBundleLoader.class);\n            method.setAccessible(true);\n            method.invoke(mReactInstanceManager,\n                    new JSCJavaScriptExecutor.Factory(),\n                    JSBundleLoader.createFileLoader(getApplicationContext(), JS_BUNDLE_LOCAL_PATH));\n            setContentView(mReactRootView);\n\n        } catch (NoSuchMethodException e) {\n            e.printStackTrace();\n        } catch (IllegalAccessException e) {\n            e.printStackTrace();\n        } catch (InvocationTargetException e) {\n            e.printStackTrace();\n        } catch (IllegalArgumentException e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    public boolean onKeyUp(int keyCode, KeyEvent event) {\n        if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) {\n            mReactInstanceManager.showDevOptionsDialog();\n            return true;\n        }\n        return super.onKeyUp(keyCode, event);\n    }\n\n    @Override\n    public void onBackPressed() {\n        if (mReactInstanceManager != null) {\n            mReactInstanceManager.onBackPressed();\n        } else {\n            super.onBackPressed();\n        }\n    }\n\n    @Override\n    public void invokeDefaultOnBackPressed() {\n        super.onBackPressed();\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n\n        if (mReactInstanceManager != null) {\n            mReactInstanceManager.onHostPause();\n        }\n    }\n\n    public void onStop(){\n        Log.v(\"onstop\", \"this is onstop\");\n        super.onStop();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        Log.v(\"onResume\", \"this is onResume\");\n        if (mReactInstanceManager != null) {\n            mReactInstanceManager.onHostResume(this, new DefaultHardwareBackBtnHandler() {\n                @Override\n                public void invokeDefaultOnBackPressed() {\n                    finish();\n                }\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "reactnative/android/app/src/main/res/menu/menu_main_activity2.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    tools:context=\"com.reactnative.MainActivity2Activity\">\n    <item android:id=\"@+id/action_settings\" android:title=\"@string/action_settings\"\n        android:orderInCategory=\"100\" app:showAsAction=\"never\" />\n</menu>\n"
  },
  {
    "path": "reactnative/android/app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "reactnative/android/app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">reactnative</string>\n    <string name=\"title_activity_main_activity2\">MainActivity2Activity</string>\n\n    <string name=\"hello_world\">Hello world!</string>\n    <string name=\"action_settings\">Settings</string>\n</resources>\n"
  },
  {
    "path": "reactnative/android/app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n    </style>\n\n</resources>\n"
  },
  {
    "path": "reactnative/android/app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "reactnative/android/build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:1.3.1'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        mavenLocal()\n        jcenter()\n        maven {\n            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm\n            url \"$projectDir/../../node_modules/react-native/android\"\n        }\n    }\n}\n"
  },
  {
    "path": "reactnative/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.4-all.zip\n"
  },
  {
    "path": "reactnative/android/gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\n# Default value: -Xmx10248m -XX:MaxPermSize=256m\n# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\nandroid.useDeprecatedNdk=true\n"
  },
  {
    "path": "reactnative/android/gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched.\nif $cygwin ; then\n    [ -n \"$JAVA_HOME\" ] && JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\nfi\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >&-\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >&-\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "reactnative/android/gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif \"%ERRORLEVEL%\" == \"0\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto init\r\n\r\necho.\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\r\necho.\r\necho Please set the JAVA_HOME variable in your environment to match the\r\necho location of your Java installation.\r\n\r\ngoto fail\r\n\r\n:init\r\n@rem Get command-line arguments, handling Windowz variants\r\n\r\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\r\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\r\n\r\n:win9xME_args\r\n@rem Slurp the command line arguments.\r\nset CMD_LINE_ARGS=\r\nset _SKIP=2\r\n\r\n:win9xME_args_slurp\r\nif \"x%~1\" == \"x\" goto execute\r\n\r\nset CMD_LINE_ARGS=%*\r\ngoto execute\r\n\r\n:4NT_args\r\n@rem Get arguments from the 4NT Shell from JP Software\r\nset CMD_LINE_ARGS=%$\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\r\nexit /b 1\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "reactnative/android/reactnative.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module external.linked.project.id=\"reactnative\" external.linked.project.path=\"$MODULE_DIR$\" external.root.project.path=\"$MODULE_DIR$\" external.system.id=\"GRADLE\" external.system.module.group=\"\" external.system.module.version=\"unspecified\" type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"java-gradle\" name=\"Java-Gradle\">\n      <configuration>\n        <option name=\"BUILD_FOLDER_PATH\" value=\"$MODULE_DIR$/build\" />\n        <option name=\"BUILDABLE\" value=\"false\" />\n      </configuration>\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" LANGUAGE_LEVEL=\"JDK_1_7\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.gradle\" />\n    </content>\n    <orderEntry type=\"inheritedJdk\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n  </component>\n</module>"
  },
  {
    "path": "reactnative/android/settings.gradle",
    "content": "rootProject.name = 'native'\n\ninclude ':app'\n"
  },
  {
    "path": "reactnative/canvasgame/Canvas.js",
    "content": "import React from 'react'\nimport ReactCanvas from 'react-canvas'\nimport ReactStateAnimation from 'react-state-animation'\nimport Counter from './parts/Counter'\nimport Octopus from './parts/Octopus'\nimport Pipe from './parts/Pipe'\n\nvar Loop = ReactStateAnimation.Loop\nvar Surface = ReactCanvas.Surface\nvar Group = ReactCanvas.Group\nvar Image = ReactCanvas.Image\n\nexport default class Canvas extends Element {\n    constructor(props) {\n        super(props)\n        // setup phase INTRO, RUNNING, ENDING\n        this.state = {phase: 'INTRO', pipes: [], count: 0}\n        // create main loop\n        this._loop = new Loop(this.watchPos.bind(this))\n        // space key handling\n        document.body.addEventListener('keydown', (e)=>{\n            var key = (window.Event) ? e.which : e.keyCode\n            if(key === 32) {\n                this.onClickCanvas(e)\n            }\n        })\n    }\n\n    watchPos() {\n        if(this.state.phase === 'RUNNING'){\n            var res = this.detectCollision()\n            if(!res || this.props.setting.noHit){ return true }\n            if(res.state === 'HIT'){\n                // collision detected & game end\n                this._fail()\n            }else if(res.state === 'SUCCESS'){\n                // successfully jumped\n                this._incrementCount()\n            }\n            // keep loop\n            return true\n        }        \n    }\n\n    // detect collision\n    detectCollision() {\n        var reverse = this.props.setting.reverseGravity,\n            canvasH = this.props.canvasHeight,\n            octopusPos = this.refs.octopus.getPos(),\n            hitBuf = 10\n        if(reverse ? octopusPos.t < hitBuf : (octopusPos.t + octopusPos.h) > canvasH - hitBuf){\n            return {state: \"HIT\"}\n        }\n        // first pipe data\n        var pipeId = this.state.count + 1,\n            pipe = this.refs[pipeId]\n        if(pipe){\n            var gapPos = this.refs[pipeId].getGapPos()\n            // detect left to right range\n            if((octopusPos.l + octopusPos.w) >= gapPos.l && octopusPos.l <= (gapPos.l + gapPos.w)){\n                // detect bottom to top range\n                if(octopusPos.t < gapPos.t || (octopusPos.t + octopusPos.h) > gapPos.t + gapPos.h){\n                    return {state: \"HIT\"}\n                }\n            } else if(octopusPos.l >= (gapPos.l + gapPos.w)){\n                return {state: \"SUCCESS\"}\n            }\n        }\n    }\n\n    // listen click and space key\n    onClickCanvas(e) {\n        e.stopPropagation();\n        e.preventDefault();\n        switch(this.state.phase) {\n            case 'INTRO':\n                this.setState({phase: 'RUNNING', count: 0, pipes: []}, () => {\n                    // move to init position\n                    this.refs.octopus.clear().then(() => {\n                        this._loop.start()\n                        this._pipeTimer = setInterval(this._createPipe.bind(this), this.props.setting.pipeInterval)\n                        this.refs.octopus.jump()\n                    })\n                })\n                break\n            case 'RUNNING':\n                this.refs.octopus.jump()\n                break\n            case 'ENDING':\n                break\n        }\n    }\n\n    // create and move pipe\n    _createPipe() {\n        var pipes = this.state.pipes,\n            topHeight = Math.floor(Math.random() * (this.props.canvasHeight - 250)) + 50,\n            bottomHeight = this.props.canvasHeight - (topHeight + this.props.gapHeight)\n        // show at most two pipes\n        var lastPipe = pipes[pipes.length - 1],\n            lastIndex = lastPipe && lastPipe.id || 0\n        if(pipes.length > 1){\n            pipes.splice(0, 1)\n        }\n        this.setState({pipes: pipes.concat({\n            id: lastIndex + 1,\n            topHeight: topHeight,\n            bottomHeight: bottomHeight,\n            gapHeight: this.props.gapHeight,\n            pipeInterval: this.props.setting.pipeInterval,\n            canvasWidth: this.props.canvasWidth\n        })})\n    }\n\n    // fail to jump\n    _fail() {\n        this._loop.end()\n        clearInterval(this._pipeTimer)\n        this.state.pipes.map((pipe) => { this.refs[pipe.id].stop() })\n        this.setState({phase: 'ENDING'}, () => {\n            this.refs.octopus.fall().then(() => this.setState({phase: 'INTRO'}))\n        })\n    }\n\n    // update counter\n    _incrementCount() {\n        this.setState({count: this.state.count + 1})\n    }\n\n    reset() {\n        this._fail()\n    }\n\n    getGroupStyle() {\n        return {\n            position: 'absolute',\n            left: 0,\n            top: 0,\n            width: this.props.canvasWidth,\n            height: this.props.canvasHeight * 2/* FIXME: not sure why but for touch start detection */\n        }\n    }\n\n    getBgImageStyle() {\n        return {\n            position: 'absolute',\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0,\n            width: this.props.canvasWidth,\n            height: this.props.canvasHeight\n        }\n    }\n\n    render() {\n        return (\n            <Surface ref=\"surface\" top={0} left={0} width={this.props.canvasWidth} height={this.props.canvasHeight} enableCSSLayout={true}>\n                <Image src='../img/background.png' style={this.getBgImageStyle()} fadeIn={true}/>\n                <Group style={this.getGroupStyle()}  onClick={this.onClickCanvas.bind(this)} onTouchStart={this.onClickCanvas.bind(this)}>\n                    <Counter ref=\"counter\" count={this.state.count} />\n                    <Octopus ref=\"octopus\" reverse={this.props.setting.reverseGravity} canvasHeight={this.props.canvasHeight}/> \n                    {this.state.pipes.map(\n                        (pipe) => <Pipe ref={pipe.id} key={pipe.id} topHeight={pipe.topHeight} bottomHeight={pipe.bottomHeight} pipeInterval={pipe.pipeInterval} canvasWidth={pipe.canvasWidth} gapHeight={pipe.gapHeight}/>\n                    )}\n                </Group>\n            </Surface>\n        )\n    }\n}\n\n\nCanvas.defaultProps = {\n    canvasWidth: 350,\n    canvasHeight: 450,\n    gapHeight: 120\n}"
  },
  {
    "path": "reactnative/canvasgame/GallaxyOctopus.js",
    "content": "export default class GallaxyOctopus extends React.Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            setting: {\n                reverseGravity: true,\n                pipeInterval: 1600,\n                noHit: false\n            }\n        }\n    }\n    render() {\n        return (\n            <Div>\n                <Canvas ref=\"canvas\" setting={this.state.setting} />\n            </Div>\n        )\n    }\n}"
  },
  {
    "path": "reactnative/canvasgame/game.js",
    "content": "(class Game extends App{\n\trender(){\n\t\tcomponentWillMount(){\n\t\t\tvar FB = {\n\t\t            // set up some inital values\n\t\t            WIDTH: 320,\n\t\t            HEIGHT: 480,\n\t\t            scale: 1,\n\t\t            // the position of the canvas\n\t\t            // in relation to the screen\n\t\t            offset: {\n\t\t                top: 0,\n\t\t                left: 0\n\t\t            },\n\t\t            // store all bird, touches, pipes etc\n\t\t            entities: [],\n\t\t            currentWidth: null,\n\t\t            currentHeight: null,\n\t\t            canvas: null,\n\t\t            ctx: null,\n\t\t            score: {\n\t\t                taps: 0,\n\t\t                coins: 0\n\t\t            },\n\t\t            distance: 0,\n\t\t\t\t\tdigits:[],\n\t\t\t\t\tfonts:[],\n\t\t            // we'll set the rest of these\n\t\t            // in the init function\n\t\t            RATIO: null,\n\t\t            bg_grad: \"day\",\n\t\t\t\t\tgame:null,\n\t\t            currentWidth: null,\n\t\t            currentHeight: null,\n\t\t            canvas: null,\n\t\t            ctx: null,\n\t\t            ua: null,\n\t\t            android: null,\n\t\t            ios: null,\n\t\t            gradients: {},\n\t\t            init: function () {\n\t\t                var grad;\n\t\t                // the proportion of width to height\n\t\t                FB.RATIO = FB.WIDTH / FB.HEIGHT;\n\t\t                // these will change when the screen is resize\n\t\t                FB.currentWidth = FB.WIDTH;\n\t\t                FB.currentHeight = FB.HEIGHT;\n\t\t                // this is our canvas element\n\t\t                FB.canvas = document.getElementsByTagName('canvas')[0];\n\t\t                // it's important to set this\n\t\t                // otherwise the browser will\n\t\t                // default to 320x200\n\t\t                FB.canvas.width = FB.WIDTH;\n\t\t                FB.canvas.height = FB.HEIGHT;\n\t\t                // the canvas context allows us to\n\t\t                // interact with the canvas api\n\t\t                FB.ctx = FB.canvas.getContext('2d');\n\t\t                // we need to sniff out android & ios\n\t\t                // so we can hide the address bar in\n\t\t                // our resize function\n\t\t                FB.ua = navigator.userAgent.toLowerCase();\n\t\t                FB.android = FB.ua.indexOf('android') > -1 ? true : false;\n\t\t                FB.ios = (FB.ua.indexOf('iphone') > -1 || FB.ua.indexOf('ipad') > -1) ? true : false;\n\n\t\t                // setup some gradients\n\t\t                grad = FB.ctx.createLinearGradient(0, 0, 0, FB.HEIGHT);\n\t\t                grad.addColorStop(0, '#036');\n\t\t                grad.addColorStop(0.5, '#69a');\n\t\t                grad.addColorStop(1, 'yellow');\n\t\t                FB.gradients.dawn = grad;\n\n\t\t                grad = FB.ctx.createLinearGradient(0, 0, 0, FB.HEIGHT);\n\t\t                grad.addColorStop(0, '#69a');\n\t\t                grad.addColorStop(0.5, '#9cd');\n\t\t                grad.addColorStop(1, '#fff');\n\t\t                FB.gradients.day = grad;\n\n\t\t                grad = FB.ctx.createLinearGradient(0, 0, 0, FB.HEIGHT);\n\t\t                grad.addColorStop(0, '#036');\n\t\t                grad.addColorStop(0.3, '#69a');\n\t\t                grad.addColorStop(1, 'pink');\n\t\t                FB.gradients.dusk = grad;\n\n\t\t                grad = FB.ctx.createLinearGradient(0, 0, 0, FB.HEIGHT);\n\t\t                grad.addColorStop(0, '#036');\n\t\t                grad.addColorStop(1, 'black');\n\t\t                FB.gradients.night = grad;\n\n\t\t                // listen for clicks\n\t\t                window.addEventListener('click', function (e) {\n\t\t                    e.preventDefault();\n\t\t                    FB.Input.set(e);\n\t\t                }, false);\n\n\t\t                // listen for touches\n\t\t                window.addEventListener('touchstart', function (e) {\n\t\t                    e.preventDefault();\n\t\t                    // the event object has an array\n\t\t                    // called touches, we just want\n\t\t                    // the first touch\n\t\t                    FB.Input.set(e.touches[0]);\n\t\t                }, false);\n\t\t                window.addEventListener('touchmove', function (e) {\n\t\t                    // we're not interested in this\n\t\t                    // but prevent default behaviour\n\t\t                    // so the screen doesn't scroll\n\t\t                    // or zoom\n\t\t                    e.preventDefault();\n\t\t                }, false);\n\t\t                window.addEventListener('touchend', function (e) {\n\t\t                    // as above\n\t\t                    e.preventDefault();\n\t\t                }, false);\n\n\t\t                // we're ready to resize\n\t\t                FB.resize();\n\t\t\t\t\t\tFB.changeState(\"Splash\");\n\t\t                \n\t\t                FB.loop();\n\n\t\t            },\n\n\t\t            resize: function () {\n\n\t\t                FB.currentHeight = window.innerHeight;\n\t\t                // resize the width in proportion\n\t\t                // to the new height\n\t\t                FB.currentWidth = FB.currentHeight * FB.RATIO;\n\n\t\t                // this will create some extra space on the\n\t\t                // page, allowing us to scroll pass\n\t\t                // the address bar, and thus hide it.\n\t\t                if (FB.android || FB.ios) {\n\t\t                    document.body.style.height = (window.innerHeight + 50) + 'px';\n\t\t                }\n\n\t\t                // set the new canvas style width & height\n\t\t                // note: our canvas is still 320x480 but\n\t\t                // we're essentially scaling it with CSS\n\t\t                FB.canvas.style.width = FB.currentWidth + 'px';\n\t\t                FB.canvas.style.height = FB.currentHeight + 'px';\n\n\t\t                // the amount by which the css resized canvas\n\t\t                // is different to the actual (480x320) size.\n\t\t                FB.scale = FB.currentWidth / FB.WIDTH;\n\t\t                // position of canvas in relation to\n\t\t                // the screen\n\t\t                FB.offset.top = FB.canvas.offsetTop;\n\t\t                FB.offset.left = FB.canvas.offsetLeft;\n\n\t\t                // we use a timeout here as some mobile\n\t\t                // browsers won't scroll if there is not\n\t\t                // a small delay\n\t\t                window.setTimeout(function () {\n\t\t                    window.scrollTo(0, 1);\n\t\t                }, 1);\n\t\t            },\n\t\t\t\t\t            \n\t\t            // this is where all entities will be moved\n\t\t            // and checked for collisions etc\n\t\t            update: function () {\n\t\t                FB.game.update();\n\t\t                FB.Input.tapped = false;\n\t\t            },\n\n\t\t            // this is where we draw all the entities\n\t\t            render: function () {\n\n\t\t                FB.Draw.rect(0, 0, FB.WIDTH, FB.HEIGHT, FB.gradients[FB.bg_grad]);\n\t\t\t\t\t\t \n\t\t                // cycle through all entities and render to canvas\n\t\t                for (i = 0; i < FB.entities.length; i += 1) {\n\t\t                    FB.entities[i].render();\n\t\t                }\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tFB.game.render();\n\t\t\t\t\t\t\n\t\t            },\n\n\t\t            // the actual loop\n\t\t            // requests animation frame\n\t\t            // then proceeds to update\n\t\t            // and render\n\t\t            loop: function () {\n\n\t\t                requestAnimFrame(FB.loop);\n\n\t\t                FB.update();\n\t\t                FB.render();\n\t\t            },\n\t\t\t\t\tchangeState: function(state) {    \t\t\t\t \n\t\t\t\t\t\tFB.game = new window[state]();\n\t\t\t\t\t\tFB.game.init();\n\t\t\t\t\t}\n\t\t        };\n\t\t}\n\t\treturn (\n\t\t\t\t<Container startTiles={2} size={4}/>\n\t\t);\n\t}\n}).run();\n"
  },
  {
    "path": "reactnative/canvasgame/parts/Counter.js",
    "content": "var Text = React.Art.Text\n\nexport default class Counter extends React.Component {\n    constructor(props) {\n        super(props)\n    }\n\n    render() {\n        return <Text style={this.getLabelStyle()}> {this.props.count} </Text>\n    }\n\n    getLabelStyle() {\n        return {\n            fontSize: 32,\n            lineHeight: 28,\n            height: 38,\n            marginTop: 20,\n            zIndex: 10,\n            color: '#fff',\n            textAlign: 'center'\n        }\n    }\n}\n\nCounter.propTypes = {\n    count: React.PropTypes.number\n}\n\nCounter.defaultProps = {\n    count: 0\n}"
  },
  {
    "path": "reactnative/canvasgame/parts/Octopus.js",
    "content": "import React from 'react'\nimport ReactCanvas from 'react-canvas'\nimport ImageCache from 'react-canvas/lib/ImageCache';\nimport CanvasUtil from 'react-canvas/lib/CanvasUtils'\nimport ReactStateAnimation from 'react-state-animation'\n\nvar Image = ReactCanvas.Image;\n\nexport default class Octopus extends React.Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            left: props.initLeft,\n            top: props.initTop\n        }\n        // react state animation wrapper\n        this._animate = new ReactStateAnimation(this)\n    }\n\n    clear() {\n        return new Promise((resolve, reject) => {\n            this.setState({top: this.props.initTop}, () => {\n                resolve()\n            })\n        })\n    }\n\n    getPos() {\n        return {\n            l: this.state.left,\n            t: this.state.top,\n            w: this.props.width,\n            h: this.props.height\n        }\n    }\n\n    fall() {\n        return new Promise((resolve, reject) => {\n            var pos = this.getPos(),\n                canvasH = this.props.canvasHeight,\n                reverse = this.props.reverse,\n                operator = reverse ? -1 : 1,\n                distance = reverse ? pos.t : canvasH - pos.t - pos.h,\n                totalFallTime = 1000/*time for fall*/ * distance / canvasH,\n                image = ImageCache.get(this.props.src)\n            // FIXME: rotate by temp patch for CanvasUtil.drawImage\n            image.rotate = 90 * operator\n            if(distance < 10){\n                resolve()\n            }else{\n                this._animate\n                    .stop()\n                    .linear('top', reverse ? 0 : canvasH - pos.h, totalFallTime)\n                    .then(resolve)\n            }\n        })\n    }\n\n    jump() {\n        return new Promise((resolve, reject) => {\n            var distance = 60, \n                operator = this.props.reverse ? -1 : 1,\n                pos = this.getPos(),\n                image = ImageCache.get(this.props.src)\n            // FIXME: rotate by temp patch for CanvasUtil.drawImage\n            image.rotate = -20 * operator\n            this._animate\n                .stop()\n                .linear('top', this.state.top - (distance * operator), 200)\n                .then(() => {\n                    image.rotate = 0\n                    this._animate.linear('top', this.state.top + (distance * operator), 300)\n                        .then(() => {\n                            this.fall().then(resolve)\n                        })\n                })\n        })\n    }\n\n    stop() {\n        this._animate.stop()\n    }\n\n    getImageStyle() {\n        var pos = this.getPos()\n        return {\n            position: 'absolute',\n            zIndex: 4,  \n            left: pos.l,\n            top: pos.t,\n            width: pos.w,\n            height: pos.h\n        }\n    }\n\n    render() {\n        return <Image src={this.props.src} style={this.getImageStyle()} fadeIn={true} />\n    }\n}\n    \nOctopus.defaultProps = {\n    src: \"../img/octopus.png\",\n    initLeft: 130,\n    initTop: 225 - 28,\n    width: 40,\n    height: 28,\n    canvasHeight: 0,\n    reverse: false\n}"
  },
  {
    "path": "reactnative/canvasgame/parts/Pipe.js",
    "content": "import React from 'react'\nimport ReactCanvas from 'react-canvas'\nimport ReactStateAnimation from 'react-state-animation'\n\nvar Group = ReactCanvas.Group\nvar Image = ReactCanvas.Image;\n\nexport default class Pipe extends React.Component {\n    constructor(props) {\n        super(props)\n        // initialize state\n        this.state = {\n            x: props.canvasWidth\n        }\n        // react state animation wrapper\n        this._animate = new ReactStateAnimation(this)\n    }\n\n    componentDidMount() {\n        // strat moving animation\n        this._animate.linear('x', -this.props.pipeWidth, this.props.pipeInterval * 2)\n    }\n\n    componentWillUnmount() {\n        this.stop()\n    }\n\n    stop() {\n        this._animate.stop()\n    }\n\n    getGapPos() {\n        return {\n            w: this.props.pipeWidth,\n            h: this.props.gapHeight,\n            t: this.props.topHeight,\n            l: this.state.x\n        }\n    }\n\n    getGroupStyle() {\n        return {\n            position: 'absolute',\n            left: this.state.x,\n            top: 0,\n            width: this.props.pipeWidth,\n            height: this.props.pipeHeight\n        }\n    }\n\n    getTopHalfStyle() {\n        return {\n            position: 'absolute',\n            left: this.state.x,\n            bottom: (this.props.bottomHeight + this.props.gapHeight),\n            width: this.props.pipeWidth,\n            height: this.props.pipeHeight\n        }\n    }\n\n    getBottomHalfStyle() {\n        return {\n            position: 'absolute',\n            left: this.state.x,\n            top: (this.props.topHeight + this.props.gapHeight),\n            width: this.props.pipeWidth,\n            height: this.props.pipeHeight\n        }\n    }\n\n    render() {\n        return (\n            <Group style={this.getGroupStyle()}>\n                <Image src='../img/pipe.png' style={this.getTopHalfStyle()} />\n                <Image src='../img/pipe.png' style={this.getBottomHalfStyle()} />\n            </Group>\n        )\n    }\n}\n\nPipe.defaultProps = {\n    pipeWidth: 60,\n    pipeHeight: 450,\n    pipeInterval: 0,\n    canvasWidth: 0,\n    gapHeight: 0\n}"
  },
  {
    "path": "reactnative/common/Animation.js",
    "content": "class Animation {\n\tconstructor(config){\n\t\tthis.motionFn = config && config.motionFn ? config.motionFn : function(){return window.requestAnimationFrame.apply(window, arguments)};\n\t\tthis.motionFnCancel = config && config.motionFnCancel ? config.motionFnCancel : function(){return window.cancelAnimationFrame.apply(window, arguments)};\n\t}\n\t/**\n\t * 动画\n\t * @param {Object} config\n\t * @param {Integer} [config.timeSeg] 默认值17，单位毫秒\n\t * @param {Integer} [config.duration] 默认值1000，单位毫秒\n\t * @param {Element|NodeList|Selector} config.el 需要进行动画的元素，或者元素数组\n\t * @param {RegExp} [config.elSplitRegExp] 参数config.el可以为selector的字符，多个selector字符可以用config.elSplitRegExp合并成一个字符\n\t * @param {Object} [config.from] 动画开始第一帧的元素初始Css样式，如{opacity:0,display:'none'}，\n\t * 其中key为cssStyleName，value为cssStyleValue，这里支持Css3的样式属性如{'-webkit-transform':'scale(1) translateX(1000px)'},也是可以支持的。\n\t * @param {Object} config.to 动画最后一帧的元素Css样式\n\t * @param {Function} [config.fx] 动画算法，可以通过anim.fx(type)的方式取得动画算法，也可以直接anim.Fx.easeInQuad的方式取得算法\n\t * @param {Function} [config.then] 动画结束后的匿名方法\n\t * @param {Object} [config.scope] config.then方法的this指针\n\t * @param {Object} [config.reverse] config.reverse控制是否翻转，实现摇头效果\n\t * @param {Number|String} [config.timeout] 因为动画是用setInterval实现的，所有一个timeout句柄，你可以用指定的timeout的句柄数字，也可以用一个String标记\n\t * 在anim.handleMap[timeout]会保存的anim的timeout句柄数字，下一次的motion方法也传入timeout，即可实现终止上一次的动画继续进行，进行新的动画，也可以使用\n\t * clearInterval终止当前进行的动画\n\t * @see <a href=\"http://xueduany.github.com/KitJs/KitJs/demo/Animation/demo.html\">动画样例</a>\n\t */\n\tmotion(config){\n\t\tvar me = this;\n\t\tvar defaultConfig = {\n\t\t\ttimeSeg : 17,\n\t\t\tduration : 10000,\n\t\t\tel : undefined,\n\t\t\telSplitRegExp : /\\s+/,\n\t\t\tfrom : undefined,\n\t\t\tto : undefined,\n\t\t\tfx : Animation.Fx.swing,\n\t\t\treverse : false,\n\t\t\tthen : undefined,\n\t\t\tscope : window,\n\t\t\texceptStyleArray : [\"scrollTop\", \"scrollLeft\"],\n\t\t\ttimeout : undefined\n\t\t};\n\t\tif(({}).toString.call(config.el) != '[object Array]'){\n\t\t\tconfig.el = [config.el];\n\t\t}\n\t\tme.mergeIf(config, defaultConfig);\n\t\tif(config.el != null){\n\t\t\tconfig.hold = 0;\n\t\t\t//\n\t\t\tvar f1 = false, timeoutStr;\n\t\t\tif(({}).toString.call(config.timeout) == '[object String]') {\n\t\t\t\ttimeoutStr = config.timeout;\n\t\t\t\tclearInterval(me.handleMap[config.timeout]);\n\t\t\t\tf1 = true;\n\t\t\t} else if(({}).toString.call(config.timemout) == '[object Number]') {\n\t\t\t\tclearInterval(config.timeout);\n\t\t\t}\n\t\t}\n\t\t// 重置初始样式\n\t\tfor(var p in config.from) {\n\t\t\tconfig.el.forEach(function(node) {\n\t\t\t\tme.setStyle({\n\t\t\t\t\tel : node,\n\t\t\t\t\tstyleName : p,\n\t\t\t\t\tstyleValue : config.from[p],\n\t\t\t\t\texceptStyleArray : config.exceptStyleArray,\n\t\t\t\t\telSplitRegExp : config.elSplitRegExp\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tvar count = 0;\n\t\tconfig.startTime = config.startTime || +new Date();\n\t\tconfig.lastCallTime = config.lastCallTime || config.startTime;\n\t\tvar callback = function() {\n\t\t\tconfig.now = +new Date();\n\t\t\tconfig.hold += config.now - config.lastCallTime;\n\t\t\tconfig.lastCallTime = config.now;\n\t\t\t//结束时状态\n\t\t\tif(config.hold >= config.duration) {\n\t\t\t\tme.motionFnCancel(config.timeout);\n\t\t\t\tconfig.timeout = null;\n\t\t\t\tme.handleMap && config.timeout && delete me.handleMap[config.timeout];\n\t\t\t\tvar reCss = {};\n\t\t\t\tconfig.el.forEach(function(node) {\n\t\t\t\t\tme.setStyle({\n\t\t\t\t\t\tel : node,\n\t\t\t\t\t\tcss: config.to,\n\t\t\t\t\t\texceptStyleArray : config.exceptStyleArray,\n\t\t\t\t\t\telSplitRegExp : config.elSplitRegExp\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tconfig.then && config.then.call(config.scope, config);\n\t\t\t} else {\n\t\t\t\t//过程中状态\n\t\t\t\tconfig.el.forEach(function(node) {\n\t\t\t\t\tvar reCss = {};\n\n\t\t\t\t\tfor(var p in config.to) {\n\t\t\t\t\t\tvar reSty = \"\", sty, sty1;\n\t\t\t\t\t\tif(config.from == null || !( p in config.from)) {\n\t\t\t\t\t\t\tvar _from = node.css(p);\n\t\t\t\t\t\t\tsty = me.identifyCssValue(_from);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsty = me.identifyCssValue(config.from[p]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsty1 = me.identifyCssValue(config.to[p]);\n\t\t\t\t\t\tif(sty == null || sty1 == null || sty.length != sty1.length) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(var i = 0; i < sty1.length; i++) {\n\t\t\t\t\t\t\tif(i > 0) {\n\t\t\t\t\t\t\t\treSty += \" \";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar o = sty1[i];\n\t\t\t\t\t\t\tvar changeValue;\n\t\t\t\t\t\t\tif(o.value.indexOf('#') == 0) {//rgb\n\t\t\t\t\t\t\t\tif(sty[i].value.length == 4) {\n\t\t\t\t\t\t\t\t\tsty[i].value = sty[i].value.substring(0, 1) + sty[i].value.substring(1, 2)//\n\t\t\t\t\t\t\t\t\t+ sty[i].value.substring(1, 2) + sty[i].value.substring(1, 2)//\n\t\t\t\t\t\t\t\t\t+ sty[i].value.substring(2, 3) + sty[i].value.substring(2, 3)//\n\t\t\t\t\t\t\t\t\t+ sty[i].value.substring(3, 4) + sty[i].value.substring(3, 4);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(sty1[i].value.length == 4) {\n\t\t\t\t\t\t\t\t\tsty1[i].value = sty1[i].value.substring(0, 1) + sty1[i].value.substring(1, 2)//\n\t\t\t\t\t\t\t\t\t+ sty1[i].value.substring(1, 2) + sty1[i].value.substring(1, 2)//\n\t\t\t\t\t\t\t\t\t+ sty1[i].value.substring(2, 3) + sty1[i].value.substring(2, 3)//\n\t\t\t\t\t\t\t\t\t+ sty1[i].value.substring(3, 4) + sty1[i].value.substring(3, 4);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar rgbFrom = {\n\t\t\t\t\t\t\t\t\tr : 0,\n\t\t\t\t\t\t\t\t\tg : 0,\n\t\t\t\t\t\t\t\t\tb : 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(sty != null) {\n\t\t\t\t\t\t\t\t\trgbFrom = {\n\t\t\t\t\t\t\t\t\t\tr : parseFloat(me.convert(sty[i].value.substring(1, 3), 16, 10)),\n\t\t\t\t\t\t\t\t\t\tg : parseFloat(me.convert(sty[i].value.substring(3, 5), 16, 10)),\n\t\t\t\t\t\t\t\t\t\tb : parseFloat(me.convert(sty[i].value.substring(5, 7), 16, 10))\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar rgbTo = {\n\t\t\t\t\t\t\t\t\tr : parseFloat(me.convert(sty1[i].value.substring(1, 3), 16, 10)),\n\t\t\t\t\t\t\t\t\tg : parseFloat(me.convert(sty1[i].value.substring(3, 5), 16, 10)),\n\t\t\t\t\t\t\t\t\tb : parseFloat(me.convert(sty1[i].value.substring(5, 7), 16, 10))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar rgb = {\n\t\t\t\t\t\t\t\t\tr : config.fx(config.hold, rgbFrom.r, rgbTo.r - rgbFrom.r, config.duration),\n\t\t\t\t\t\t\t\t\tg : config.fx(config.hold, rgbFrom.g, rgbTo.g - rgbFrom.g, config.duration),\n\t\t\t\t\t\t\t\t\tb : config.fx(config.hold, rgbFrom.b, rgbTo.b - rgbFrom.b, config.duration)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tchangeValue = '#' + me.padZero(me.convert(rgb.r, 10, 16), 2) + //\n\t\t\t\t\t\t\t\tme.padZero(me.convert(rgb.g, 10, 16), 2) + //\n\t\t\t\t\t\t\t\tme.padZero(me.convert(rgb.b, 10, 16), 2);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvar t = config.hold;\n\t\t\t\t\t\t\t\tvar b = sty == null ? 0 : parseFloat(sty[i].value);\n\t\t\t\t\t\t\t\tvar c = sty == null ? parseFloat(sty1[i].value) : parseFloat(sty1[i].value) - parseFloat(sty[i].value);\n\t\t\t\t\t\t\t\tvar d = config.duration;\n\t\t\t\t\t\t\t\tchangeValue = config.fx(t, b, c, d);\n\t\t\t\t\t\t\t\tif(config.reverse && count % 2 == 1) {\n\t\t\t\t\t\t\t\t\tchangeValue = -changeValue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treSty += o.prefix + changeValue + o.unit + o.postfix;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar reSty1 = reSty;\n\t\t\t\t\t\tvar a = reSty.match(/rgba?\\s*\\((\\d+\\.?\\d*\\s*,?)+\\s*\\)/ig);\n\t\t\t\t\t\ta && a.forEach(function(o) {\n\t\t\t\t\t\t\tvar o1 = o;\n\t\t\t\t\t\t\to.match(/(\\d+\\.?\\d*)/g).forEach(function(p, i, ary) {\n\t\t\t\t\t\t\t\to1 = o1.replace(p, parseFloat(p) > 1 ? Math.round(p) : p);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treSty1 = reSty1.replace(o, o1);\n\t\t\t\t\t\t});\n\t\t\t\t\t\treSty = reSty1;\n\t\t\t\t\t\treCss[p] = reSty;\n\t\t\t\t\t}\n\t\t\t\t\tme.setStyle({\n\t\t\t\t\t\tel : node,\n\t\t\t\t\t\tcss: reCss,\n\t\t\t\t\t\texceptStyleArray : config.exceptStyleArray,\n\t\t\t\t\t\telSplitRegExp : config.elSplitRegExp\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\tconfig.timeout = me.motionFn(callback);\n\t\t\t}\n\t\t\tcount++;\n\t\t}\n\t\tconfig.timeout = me.motionFn(callback, config.timeSeg);\n\t}\n\t/**\n\t * 合并对象，后面所有的对象的属性都加到第一个身上，注意，如果第一个有了，则不覆盖\n\t * @param {Object ...}\n\t * @return {Object}\n\t */\n\tmergeIf() {\n\t\tvar a = arguments;\n\t\tif(a.length < 2) {\n\t\t\treturn;\n\t\t}\n\t\tfor(var i = 1; i < a.length; i++) {\n\t\t\tfor(var r in a[i]) {\n\t\t\t\tif(a[0][r] == null) {\n\t\t\t\t\ta[0][r] = a[i][r];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn a[0];\n\t}\n\t/**\n\t * 分解css的值，知道哪个是value(数字)，那个是单位\n\t * @param {String}\n\t * @private\n\t */\n\tidentifyCssValue(cssStr) {\n\t\tvar me = this;\n\t\tif( typeof (cssStr) != \"undefined\") {\n\t\t\tcssStr = cssStr.toString();\n\t\t\tvar a1 = cssStr.match(/([a-z\\(,\\s]*)([+\\-]?\\d+\\.?\\d*|#[\\da-f]{6}|#[\\da-f]{3})([a-z|%]*)([a-z\\)]*)/ig);\n\t\t\tif(a1 != null) {\n\t\t\t\tvar reSty = [];\n\t\t\t\tfor(var i = 0; i < a1.length; i++) {\n\t\t\t\t\tvar a = a1[i].match(/([a-z\\(,\\s]*)([+\\-]?\\d+\\.?\\d*|#[\\da-f]{6}|#[\\da-f]{3})([a-z|%]*)([a-z\\)]*)/i);\n\t\t\t\t\tvar sty = {\n\t\t\t\t\t\tstyle : a[0],\n\t\t\t\t\t\tprefix : a[1],\n\t\t\t\t\t\tvalue : a[2],\n\t\t\t\t\t\tunit : a[3]==''? (window.document && window.document.body ? 'px' : '') : a[3],\n\t\t\t\t\t\tpostfix : a[4]\n\t\t\t\t\t}\n\t\t\t\t\treSty.push(sty);\n\t\t\t\t}\n\t\t\t\treturn reSty;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t * 设置样式\n\t * @private\n\t */\n\tsetStyle() {\n\t\tif(arguments.length == 1) {\n\t\t\tvar config = arguments[0];\n\t\t\tvar//\n\t\t\telSplitRegExp = /\\s+/ || config.elSplitRegExp, //\n\t\t\texceptStyleArray = [\"scrollTop\", \"scrollLeft\"] || config.exceptStyleArray;\n\t\t\tif(({}).toString.call(config.el) != '[object Array]'){\n\t\t\t\tconfig.el = [config.el];\n\t\t\t}\n\t\t\tfor(var k = 0; k < config.el.length; k++) {\n\t\t\t\tvar el = config.el[k];\n\t\t\t\tif(config.styleName && exceptStyleArray.indexOf(config.styleName) > -1) {\n\t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\tif(config.css){\n\t\t\t\t\t\tel.css.call(el, config.css);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tel.css.call(el, config.styleName, config.styleValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * 进制转换\n\t * @param {Number|String}\n\t * @param {Number|String}\n\t * @param {Number|String}\n\t * @return {String}\n\t */\n\tconvert(str, oldHex, newHex) {\n\t\tvar num = new String(str);\n\t\tnum = parseInt(num, parseInt(oldHex));\n\t\treturn num.toString(parseInt(newHex));\n\t}\n\t/**\n\t * 前面补0\n\t * @param {Number|String}\n\t * @param {Number}\n\t * @return {String}\n\t */\n\tpadZero(num, length) {\n\t\tvar re = num.toString();\n\t\tdo {\n\t\t\tvar l1 = re.indexOf(\".\") > -1 ? re.indexOf(\".\") : re.length;\n\t\t\tif(l1 < length) {\n\t\t\t\tre = \"0\" + re;\n\t\t\t}\n\t\t} while (l1 < length);\n\t\treturn re;\n\t}\n\t\n\t/**\n\t * 根据类型返回对应的曲线函数，或者自定义函数\n\t * @param {String} [type] 如swing,easeInBounce等等\n\t * @return {Function}\n\t */\n\tfx(type) {\n\t\tvar me = this;\n\t\tif(me.Fx[type]) {\n\t\t\treturn me.Fx[type];\n\t\t} else if(({}).toString.call(type) == '[object Function]') {\n\t\t\treturn type;\n\t\t}\n\t\treturn me.Fx.swing;\n\t}\n}\n/**\n * 曲线函数\n * @enum {Function}\n */\nAnimation.Fx = {\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\tswing : function(t, b, c, d) {\n\t\treturn -c * (t /= d) * (t - 2) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInQuad : function(t, b, c, d) {\n\t\treturn c * (t /= d) * t + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutQuad : function(t, b, c, d) {\n\t\treturn -c * (t /= d) * (t - 2) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutQuad : function(t, b, c, d) {\n\t\tif((t /= d / 2) < 1)\n\t\t\treturn c / 2 * t * t + b;\n\t\treturn -c / 2 * ((--t) * (t - 2) - 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInCubic : function(t, b, c, d) {\n\t\treturn c * (t /= d) * t * t + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutCubic : function(t, b, c, d) {\n\t\treturn c * (( t = t / d - 1) * t * t + 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutCubic : function(t, b, c, d) {\n\t\tif((t /= d / 2) < 1)\n\t\t\treturn c / 2 * t * t * t + b;\n\t\treturn c / 2 * ((t -= 2) * t * t + 2) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInQuart : function(t, b, c, d) {\n\t\treturn c * (t /= d) * t * t * t + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutQuart : function(t, b, c, d) {\n\t\treturn -c * (( t = t / d - 1) * t * t * t - 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutQuart : function(t, b, c, d) {\n\t\tif((t /= d / 2) < 1)\n\t\t\treturn c / 2 * t * t * t * t + b;\n\t\treturn -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInQuint : function(t, b, c, d) {\n\t\treturn c * (t /= d) * t * t * t * t + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutQuint : function(t, b, c, d) {\n\t\treturn c * (( t = t / d - 1) * t * t * t * t + 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutQuint : function(t, b, c, d) {\n\t\tif((t /= d / 2) < 1)\n\t\t\treturn c / 2 * t * t * t * t * t + b;\n\t\treturn c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInSine : function(t, b, c, d) {\n\t\treturn -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutSine : function(t, b, c, d) {\n\t\treturn c * Math.sin(t / d * (Math.PI / 2)) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutSine : function(t, b, c, d) {\n\t\treturn -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInExpo : function(t, b, c, d) {\n\t\treturn (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutExpo : function(t, b, c, d) {\n\t\treturn (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutExpo : function(t, b, c, d) {\n\t\tif(t == 0)\n\t\t\treturn b;\n\t\tif(t == d)\n\t\t\treturn b + c;\n\t\tif((t /= d / 2) < 1)\n\t\t\treturn c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n\t\treturn c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInCirc : function(t, b, c, d) {\n\t\treturn -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutCirc : function(t, b, c, d) {\n\t\treturn c * Math.sqrt(1 - ( t = t / d - 1) * t) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutCirc : function(t, b, c, d) {\n\t\tif((t /= d / 2) < 1)\n\t\t\treturn -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n\t\treturn c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInElastic : function(t, b, c, d) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = c;\n\t\tif(t == 0)\n\t\t\treturn b;\n\t\tif((t /= d) == 1)\n\t\t\treturn b + c;\n\t\tif(!p)\n\t\t\tp = d * .3;\n\t\tif(a < Math.abs(c)) {\n\t\t\ta = c;\n\t\t\tvar s = p / 4;\n\t\t} else\n\t\t\tvar s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\treturn -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutElastic : function(t, b, c, d) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = c;\n\t\tif(t == 0)\n\t\t\treturn b;\n\t\tif((t /= d) == 1)\n\t\t\treturn b + c;\n\t\tif(!p)\n\t\t\tp = d * .3;\n\t\tif(a < Math.abs(c)) {\n\t\t\ta = c;\n\t\t\tvar s = p / 4;\n\t\t} else\n\t\t\tvar s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\treturn a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutElastic : function(t, b, c, d) {\n\t\tvar s = 1.70158;\n\t\tvar p = 0;\n\t\tvar a = c;\n\t\tif(t == 0)\n\t\t\treturn b;\n\t\tif((t /= d / 2) == 2)\n\t\t\treturn b + c;\n\t\tif(!p)\n\t\t\tp = d * (.3 * 1.5);\n\t\tif(a < Math.abs(c)) {\n\t\t\ta = c;\n\t\t\tvar s = p / 4;\n\t\t} else\n\t\t\tvar s = p / (2 * Math.PI) * Math.asin(c / a);\n\t\tif(t < 1)\n\t\t\treturn -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n\t\treturn a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInBack : function(t, b, c, d, s) {\n\t\tif(s == undefined)\n\t\t\ts = 1.70158;\n\t\treturn c * (t /= d) * t * ((s + 1) * t - s) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutBack : function(t, b, c, d, s) {\n\t\tif(s == undefined)\n\t\t\ts = 1.70158;\n\t\treturn c * (( t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutBack : function(t, b, c, d, s) {\n\t\tif(s == undefined)\n\t\t\ts = 1.70158;\n\t\tif((t /= d / 2) < 1)\n\t\t\treturn c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n\t\treturn c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInBounce : function(t, b, c, d) {\n\t\treturn c - Animation.Fx.easeOutBounce(d - t, 0, c, d) + b;\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseOutBounce : function(t, b, c, d) {\n\t\tif((t /= d) < (1 / 2.75)) {\n\t\t\treturn c * (7.5625 * t * t) + b;\n\t\t} else if(t < (2 / 2.75)) {\n\t\t\treturn c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;\n\t\t} else if(t < (2.5 / 2.75)) {\n\t\t\treturn c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;\n\t\t} else {\n\t\t\treturn c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;\n\t\t}\n\t},\n\t/**\n\t * @param {Number} t current time（当前时间）\n\t * @param {Number} b beginning value（初始值）置0，即b=0；\n\t * @param {Number} c change in value（变化量）置1，即c=1；\n\t * @param {Number} d duration（持续时间） 置1，即d=1。\n\t * @return {Number}\n\t */\n\teaseInOutBounce : function(t, b, c, d) {\n\t\tif(t < d / 2)\n\t\t\treturn Animation.Fx.easeInBounce(t * 2, 0, c, d) * .5 + b;\n\t\treturn Animation.Fx.easeOutBounce(t * 2 - d, 0, c, d) * .5 + c * .5 + b;\n\t}\n}\nmodule.exports = Animation;\n"
  },
  {
    "path": "reactnative/common/App.js",
    "content": "class App extends React.Component {\n\tstatic init(){\n\t\t/**\n\t\t * app 主入口\n\t\t */\n\t\tif(isNative) {\n\t\t\tReact.AppRegistry.registerComponent('native', () => this);\n\t\t}else{\n\t\t\tReact.render(React.createElement(this, null), document.body);\n\t\t}\n\t}\n}\nApp.run = App.init;\nmodule.exports = App;"
  },
  {
    "path": "reactnative/common/Date.js",
    "content": "// #region 工具函数\n\n// #region @Date#format\n\n/**\n * 将日期对象格式化为字符串。\n * @param {String} [format=\"yyyy/MM/dd HH:mm:ss\"] 格式字符串。具体见下文。\n * @returns {String} 格式化后的字符串。\n * @example new Date().format(\"yyyy/MM/dd HH:mm:ss\")\n * @remark\n * #### 格式化语法\n * 格式字符串中，以下元字符会被替换：\n *\n * 元字符 | 意义 | 实例\n * ------|-----|--------------------\n * y     | 年  | yyyy:2014, yy:14\n * M     | 月  | MM:09, M:9\n * d     | 日  | dd:09, d:9\n * H     | 小时 | HH:13, h:13\n * y     | 分钟 | mm:06, m:6\n * y     | 秒  | ss:06, s:6\n * e     | 星期 | e:天, ee:周日, eee: 星期天\n *\n * > #### !注意\n * > 元字符区分大小写。\n */\nDate.prototype.format = function (format) {\n    //typeof console === \"object\" && console.log(!format || typeof format === \"string\", \"date.format([format: 必须是字符串])\");\n    var me = this, formators = Date._formators;\n    if (!formators) {\n        Date._formators = formators = {\n\n            y: function (date, length) {\n                date = date.getFullYear();\n                return date < 0 ? 'BC' + (-date) : length < 3 && date < 3000 ? date % 100 : date;\n            },\n\n            M: function (date) {\n                return date.getMonth() + 1;\n            },\n\n            d: function (date) {\n                return date.getDate();\n            },\n\n            H: function (date) {\n                return date.getHours();\n            },\n\n            m: function (date) {\n                return date.getMinutes();\n            },\n\n            s: function (date) {\n                return date.getSeconds();\n            },\n\n            e: function (date, length) {\n                return (length === 1 ? '' : length === 2 ? '周' : '星期') + [length === 2 ? '日' : '天', '一', '二', '三', '四', '五', '六'][date.getDay()];\n            }\n\n        };\n    }\n    return (format || 'yyyy/MM/dd HH:mm:ss').replace(/(\\w)\\1*/g, function (all, key) {\n        if (key in formators) {\n            key = \"\" + formators[key](me, all.length);\n            while (key.length < all.length) {\n                key = '0' + key;\n            }\n            all = key;\n        }\n        return all;\n    });\n};\n\n// #endregion\n\n// #region @Date.parseDate\n\n/**\n * 将指定对象解析为日期对象。\n * @param {String/Date} value 要解析的对象。\n * @param {String} [format] 解析的格式。\n * 如果未指定，则支持标准的几种时间格式。\n * 如果指定了格式，则按照格式指定的方式解析。具体见下文。\n * @returns {Date} 返回分析出的日期对象。\n * @example\n * Date.parseDate(\"2014-1-1\")\n *\n * Date.parseDate(\"20140101\")\n *\n * Date.parseDate(\"2013年12月1日\", \"yyyy年MM月dd日\")\n * @remark\n * #### 格式化语法\n * 格式化字符串中，以下元字符会被反向替换为对应的值。\n *\n * 元字符 | 意义 | 实例\n * ------|-----|------\n * y     | 年  | 2014\n * M     | 月  | 9\n * d     | 日  | 9\n * H     | 小时 | 9\n * y     | 分钟 | 6\n * y     | 秒  | 6\n *\n * > #### !注意\n * > 元字符区分大小写。\n */\nDate.parseDate = function (value, format) {\n    if (value && !(value instanceof Date)) {\n        if (format) {\n            var groups = [0],\n                obj = {},\n                match = new RegExp(format.replace(/([-.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1').replace(/([yMdHms])\\1*/g, function (all, w) {\n                    groups.push(w);\n                    return \"\\\\s*(\\\\d+)?\\\\s*\";\n                })).exec(value);\n            if (match) {\n                for (var i = 1; i < match.length; i++) {\n                    obj[groups[i]] = +match[i];\n                }\n            }\n            value = new Date(obj.y || new Date().getFullYear(), obj.M ? obj.M - 1 : new Date().getMonth(), obj.d || 1, obj.H || 0, obj.m || 0, obj.s || 0);\n        } else {\n            value = new Date(value.constructor === String ? value.replace(/(\\d{4})\\D*(\\d\\d?)\\D*(\\d\\d?)/, '$1/$2/$3') : value);\n        }\n\n    }\n    return value;\n};\n\n// #endregion\n\n// #region @Date#addDay\n\n/**\n * 在当前日期添加指定的天数并返回新日期。\n * @param {Number} value 要添加的天数。如果小于 0 则倒数指定天数。\n * @returns {Date} 返回新日期对象。\n * @example new Date().addDay(1)\n */\nDate.prototype.addDay = function (value) {\n    return new Date(+this + value * 86400000);\n};\n\n// #endregion\n\n// #region @Date#addMonth\n\n/**\n * 在当前日期添加指定的月数。\n * @param {Number} value 要添加的月数。如果小于 0 则倒数指定月数。\n * @returns {Date} 返回新日期对象。\n * @example new Date().addMonth(1)\n */\nDate.prototype.addMonth = function (value) {\n    var date = new Date(+this);\n    date.setMonth(date.getMonth() + value);\n    if (this.getDate() !== date.getDate()) {\n        date.setDate(0);\n    }\n    return date;\n};\n\n// #endregion\n\n// #region @Date#toDay\n\n/**\n * 获取当前日期的日期部分。\n * @returns {Date} 返回新日期对象，其小时部分已被清零。\n * @example new Date().toDay()\n */\nDate.prototype.toDay = function () {\n    return new Date(this.getFullYear(), this.getMonth(), this.getDate());\n};\n\n// #endregion\n\n/**\n * 将日期对象格式化为字符串。\n * @param {String} format 日期的格式。默认为 yyyy/MM/dd HH:mm:ss。y: 年, M: 月, d: 天, H: 小时（24小时制）,m:分, s:秒, e:星期\n * @return {String} 字符串。\n */\nDate.prototype.Fformat = function(v){\n    console.warn('Fformat将被废弃，请用format');\n    return this.format(v);\n};\n\n/**\n * 清空日期的小时部分。\n */\nDate.prototype.clearHours = function () {\n    this.setMilliseconds(0);\n    this.setSeconds(0);\n    this.setMinutes(0);\n    this.setHours(0);\n    return this;\n};\n\n/**\n * 从日期、字符串、数字转为日期对象。\n * @param {String} date 日期对象。\n */\nDate.from = Date.parseDate;\n\nDate.now = Date.now || function () {\n        return +new Date;\n    };"
  },
  {
    "path": "reactnative/common/DomEvent.js",
    "content": "class DomEvent {\n\tconstructor(args){\n\t\tObject.assign(this, args);\n\t\tif(!args.nativeEvent && args.reactEvent.nativeEvent){\n\t\t\tthis.nativeEvent = args.reactEvent.nativeEvent;\n\t\t}\n\t\tif(/^touch/.test(this.type)){\n\t\t\tthis.pageX = this.nativeEvent.pageX;\n\t\t\tthis.pageY = this.nativeEvent.pageY;\n\t\t\tthis.touches = this.nativeEvent.touches;\n\t\t\tthis.changedTouches = this.nativeEvent.changedTouches;\n\t\t}\n\t\tthis.bubbles = true;\n\t\tthis.cancelable = false;\n\t\tthis.timeStamp = this.reactEvent.timeStamp;\n\t}\n\tstopPropagation(){\n\t\tthis.bubbles = false;\n\t}\n}\nmodule.exports = DomEvent;"
  },
  {
    "path": "reactnative/common/LightningStorm.js",
    "content": "/**\n * ReactMix Base Framework\n * @version alpha\n * @nickname lightningstorm project\n * @author xueduanyang1985@163.com\n */\n\nvar window = window || new Function('return this')();\nwindow.isNative = true;\nif(window.document) {\n\tisNative = false;\n}\n\nimport './String';\nimport './Date';\nimport './console';\n\n//\n\nwindow.DOMTREE_BYID = {};\nwindow.DOMTREE_BYCLASS = {};\n//并入定时器api，为componentWillUnMount做准备\nwindow.TimerMixin = require('./TimerMixin');\n/**\n * 创建全局通用的dom树和css树\n */\nvar StyleSheet = require('./StyleSheet');\n\n\n\nif(isNative) {\n\twindow.React = require('react-native');\n\twindow.requireNativeComponent = React.requireNativeComponent;\n\twindow.Dimensions = require('Dimensions');\n\twindow.PixelRatio = require('PixelRatio');\n\twindow.STYLESHEET = new StyleSheet();\n\twindow.DomEvent = require('./DomEvent');\n\twindow.UIManager = require('NativeModules').UIManager;\n\n\t//\n\twindow.Element = require('./rn/Element');\n\twindow.Text = React.Text;\n\twindow.View = React.View;\n\twindow.StyleSheet = React.StyleSheet;\n\twindow.Image = React.Image;\n\twindow.TouchableOpacity = React.TouchableOpacity;\n\twindow.TouchableWithoutFeedback = React.TouchableWithoutFeedback;\n\twindow.TextInput = React.TextInput;\n\twindow.AsyncStorage = require('AsyncStorage');\n\t//\n\twindow.Input = require('./rn/Input');\n\twindow.Div = require('./rn/Div');\n\twindow.Body = require('./rn/Body');\n\twindow.Span = require('./rn/Span');\n\twindow.Img = require('./rn/Img');\n\twindow.Button = require('./rn/Button');\n\twindow.Tab = require('./rn/Tab');\n\twindow.TabItem = require('./rn/TabItem'); \n\twindow.A = require('./rn/A');\n\twindow.Nav = require('./rn/Nav');\n\twindow.Navigator = React.Navigator;\n\t//window.NavBar = require('react-native-navbar');\n\t\n\twindow.ListView = React.ListView;\n\twindow.SimpleListView = require('./rn/SimpleListView');\n\n\t//\n\twindow.ScrollView = React.ScrollView;\n\t//\n\twindow.localStorage = require('./LocalStorage');\n\twindow.htmlCssParser = require('./rn/HtmlCssParser');\n\n}else{\n\t//这里是ui.js\n\twindow.STYLESHEET = new StyleSheet();\n}\nwindow.App = require('./App');\n/**\n * 全局加载css的函数方法\n */\nwindow.includeCSS = function(o){\n\twindow.STYLESHEET.includeCSS(o);\n}\n\nwindow.TemplateFill = function(){\n\tvar newT = {};\n\tfor(var i=1,template=arguments[0];i<arguments.length;i++){\n\t\tvar source = arguments[i];\n\t\tfor(var k in template){\n\t\t\tnewT[k] = source[k] || template[k];\n\t\t}\n\t}\n\treturn newT;\n}\n\nwindow.Animation = require('./Animation');\nwindow.animation = new Animation();\n\n//UI Component\nif(isNative){\n\twindow.Header = require('../common/rn/Header');\n\twindow.RightSliderMenu = require('../common/rn/RightSliderMenu');\n\twindow.Carousel = require('../common/rn/Carousel');\n}\n\n\n\n/**\n** $选择符\n**/\nwindow.$ = function(selector){\n\tif(/^#(.+)/.test(selector)){\n\t\treturn DOMTREE_BYID[selector.match(/^#(.+)/)[1]];\n\t}else if(/^\\.(.+)/.test(selector)){\n\t\treturn DOMTREE_BYCLASS[selector.match(/^\\.(.+)/)[1]];\n\t}\n\treturn null;\n}\n\n"
  },
  {
    "path": "reactnative/common/LocalStorage.js",
    "content": "class LocalStorage{\n\tconstructor(){\n\t\tthis.store = require('AsyncStorage');\n\t\tfor(var method in this.store){\n\t\t\tthis[method] = this.store[method];\n\t\t}\n\t}\n\tasync json(){\n\t\tvar keys = await this.getAllKeys();\n\t\tvar re = {};\n\t\tfor(var i = 0;i<keys.length;i++){\n\t\t\t re[keys[i]] = await this.getItem(keys[i]);\n\t\t}\n\t\treturn re;\n\t}\n}\nmodule.exports =  new LocalStorage();"
  },
  {
    "path": "reactnative/common/StateStore.js",
    "content": "class StateStore{\n\tconstructor(args){\n\t\tthis.key = args.key;\n\t\tthis.lifeTime = args.lifeTime || '1D';\n\n\n\t\t(async function(){\n\t\t\tvar store_value = await this.getValue();\n\t\t\n\t\t\tif(store_value) {\n\t\n\t\t\t\tconsole.debug('store_value ', store_value);\n\t       \n\t\t\t\tthis.store = store_value;\n\t\t\t\tthis.value = store_value;\n\t\n\t\t\t} \n\t\t\telse {\n\t\t\t\t//默认值\n\t\t\t\tif(args.defaultData) {\n\t\t\t\t\tthis.value = args.defaultData;\n\t\t\t\t\tthis.init();\n\t\n\t\t\t\t}\n\t\t\t}\n\t\t}).call(this);\n\t\t\n\t\treturn this;\n\t}\n\n\tasync getValue() {\n\t\tvar re =  await localStorage.getItem(this.key) ;\n\t\tvar re_obj = re ? JSON.parse(re).value : '';\n\t\tvar store;\n\n\t\tconsole.debug('re_obj ', re_obj);\n\n\t\t//检查是否有过期\n\t\tif(new Date().getTime() < new Date(re_obj ? re_obj.timeout: new Date()).getTime() ) {\n\t\t\tstore = re_obj;\n\t\t} else {\n\t\t\tstore = '';\n\t\t}\n\n\t\treturn store;\n\n\n\t}\n\n\tasync init(){\n\t\t await this.updateStore();\n\t\t return this;\n\t}\n\tasync set(value){\n\t\tthis.value = value;\n\t\tvar result = await this.updateStore();\n\t\treturn result;\n\t}\n\tasync setAttr(attrKey, attrValue){\n\t\tthis.value[attrKey] = attrValue;\n\t\tvar result = await this.updateStore();\n\t\treturn result;\n\t}\n\t\n\tasync getAttr(attrKey){\n\t\tawait this.get();\n\n\t\tconsole.debug('getAttr ',this.store[attrKey],  this.store, attrKey)\n\n\t\treturn this.store[attrKey];\n\t}\n\tasync get(){\n\t\tvar str = await localStorage.getItem(this.key);\n\t\tconsole.debug('gggg ', str);\n\t\tif(str != null){\n\t\t\tthis.store = JSON.parse(str).value;\n\t\t}else{\n\t\t\treturn null;\n\t\t}\n\t\treturn this.store;\n\t}\n\tasync updateStore(){\n\n\t\tvar timeout;\n\t\tvar num = parseInt(this.lifeTime);\n\n\t\tconsole.debug('num ', num);\n\n\t\t//加上过期时间\n\t\tif(this.lifeTime.indexOf('D') > -1) {\n\t\t\ttimeout = new Date().addDay(num).format('yyyy/MM/dd HH:mm:ss');\n\t\t} else if(this.lifeTime.indexOf('M') > -1) {\n\t\t\ttimeout = new Date().addMinute(num).format('yyyy/MM/dd HH:mm:ss');\n\t\t}\n\n\n\t\tthis.store = {\n\t\t\t\tvalue : this.value,\n\t\t\t\ttimeout: timeout,\n\t\t\t\tsavedata: new Date().format('yyyy/MM/dd HH:mm:ss')\n\t\t}\n\t\tvar result = await localStorage.setItem(this.key, JSON.stringify(this.store));\n\t\treturn result;\n\t}\n}\nmodule.exports = StateStore;"
  },
  {
    "path": "reactnative/common/String.js",
    "content": "window.upperCaseFirstLetter = (str)=>{\n\treturn str.replace(/^\\w/, function(w){return w.toUpperCase()});\n}\nString.prototype.toUpperCaseFirstLetter = function(){\n\treturn upperCaseFirstLetter(this);\n}"
  },
  {
    "path": "reactnative/common/StyleSheet.js",
    "content": "class StyleSheet{\n\tconstructor(){\n\t\tthis.emUnit = '16';\n\t\tthis.sheets = [];\n\t\tthis.defineRemUnitAndMeasureViewport();\n\t}\n\tdefineRemUnitAndMeasureViewport(){\n\t\t/**\n\t\t * * rem基本单位\n\t\t */\n\t\tif(isNative){\n\t\t\tthis.dpr = PixelRatio.get();\n\t\t\t// var scale = 1 / (dpr > 1 ? 2 : dpr);\n\t\t\t// 横屏竖屏的分辨率\n\t\t\twindow.windowHeight = Dimensions.get('window').height;\n\t\t\twindow.windowWidth = Dimensions.get('window').width;\n\t\t\t\n\t\t\tthis.remUnit = 20 * (windowWidth / 320);\n\t\t\tthis.remUnit = (this.remUnit > 54) ? 54: this.remUnit;\n\t\t\t//\n\t\t\t\n\n\t\t}else{\n\t\t\tvar docEl = document.documentElement,\n\t\t\tisIPhone = window.navigator.appVersion.match(/iphone/gi),\n\t\t\tfontSize,scale,\n\t\t\tplatform = navigator.platform;\n\t\t\t\n\t\t\t(function recalc() {\n\t\t\t\tvar clientWidth = docEl.clientWidth; // window.document.documentElement.getBoundingClientRect().width\n\t\t\t\tvar dpr = window.devicePixelRatio;\n\t\t\t\tvar justMobile = !/win32/i.test(platform);  // 只限移动端，pc不缩放\n\t\t\t\t\n\t\t\t\t// iOS下，对于2和3的屏，用2倍的方案，其余的用1倍方案 , 其他设备下，仍旧使用1倍的方案\n\t\t\t\tif (!(isIPhone && justMobile)) {\n\t\t\t\t    dpr = 1;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tscale = 1 / (dpr > 1 ? 2 : dpr);\n\n\t\t\t\tfontSize = 20 * (clientWidth / 320) / scale;\n\t\t\t\t\n\t\t\t\tfontSize = (fontSize > 54) ? 54: fontSize;\n\t\t\t\t\n\t\t\t\tthis.remUnit = fontSize;\n\t\t\t\tdocEl.style.fontSize = fontSize + 'px';\n\t\t\t\tthis.dpr = dpr;\n\t\t\t\tdocEl.setAttribute('data-dpr', dpr);\n\t\t\t\t\n\t\t\t\t// 设置viewport\n\t\t\t\tvar viewport = document.querySelector('meta[name=\"viewport\"]');\n\t\t\t\tvar viewport_content = 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no';\n\t\t\t\t\n\t\t\t\tviewport && viewport.setAttribute('content', viewport_content);\n\t\t\t\t\n\t\t\t\twindow.windowHeight = document.documentElement.clientHeight;\n\t\t\t\twindow.windowWidth = document.documentElement.clientWidth;\n\t\t\t}).call(this);\n\t\t}\n\t}\n\tincludeCSS(o){\n\t\tvar self = this;\n\t\tif(isNative){\n\t\t\tvar sheets = self.sheets;\n\t\t\tif(({}).toString.call(o) == '[object String]'){\n\t\t\t\tdeal(eval(o));\n\t\t\t}else{\n\t\t\t\tdeal(o);\n\t\t\t}\n\t\t\tfunction deal(cssObject){\n\t\t\t\tfor(var k in cssObject){\n\t\t\t\t\tif(/\\s+/.test(k)){\n\t\t\t\t\t\tvar a = k.split(/\\s+/);\n\t\t\t\t\t\tvar k1 = a.pop();\n\t\t\t\t\t\tsheets['+' + k1] = sheets['+' + k1] || [];\n\t\t\t\t\t\tsheets['+' + k1].push({\n\t\t\t\t\t\t\t\tcss: cssObject[k],\n\t\t\t\t\t\t\t\tinherit: a\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\tsheets[k] = cssObject[k];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//Object.assign(STYLESHEET, cssObject);\n\t\t\t}\n\t\t}else{\n\t\t\tif(({}).toString.call(o) == '[object String]'){\n\t\t\t\tvar link = document.createElement('link');\n\t\t\t\tlink.rel = 'stylesheet';\n\t\t\t\tlink.href = '../' + o.match(/css\\/[^']+/)[0] + '.css';\n\t\t\t\tdocument.getElementsByTagName('head')[0].appendChild(link);\n\t\t\t}else{\n\t\t\t\t//\n\t\t\t}\n\t\t}\n\t}\n}\nmodule.exports = StyleSheet;"
  },
  {
    "path": "reactnative/common/TimerMixin.js",
    "content": "/*\n *  Copyright (c) 2015-present, Facebook, Inc.\n *  All rights reserved.\n *\n *  This source code is licensed under the BSD-style license found in the\n *  LICENSE file in the root directory of this source tree. An additional grant\n *  of patent rights can be found in the PATENTS file in the same directory.\n *\n */\n'use strict';\n\nvar GLOBAL = typeof window === 'undefined' ? global : window;\n\nvar setter = function(_setter, _clearer, array) {\n  return function(callback, delta) {\n    var id = _setter(function() {\n      _clearer.call(this, id);\n      callback.apply(this, arguments);\n    }.bind(this), delta);\n\n    if (!this[array]) {\n      this[array] = [id];\n    } else {\n      this[array].push(id);\n    }\n    return id;\n  };\n};\n\nvar clearer = function(_clearer, array) {\n  return function(id) {\n    if (this[array]) {\n      var index = this[array].indexOf(id);\n      if (index !== -1) {\n        this[array].splice(index, 1);\n      }\n    }\n    _clearer(id);\n  };\n};\n\nvar _timeouts = 'TimerMixin_timeouts';\nvar _clearTimeout = clearer(GLOBAL.clearTimeout, _timeouts);\nvar _setTimeout = setter(GLOBAL.setTimeout, _clearTimeout, _timeouts);\n\nvar _intervals = 'TimerMixin_intervals';\nvar _clearInterval = clearer(GLOBAL.clearInterval, _intervals);\nvar _setInterval = setter(GLOBAL.setInterval, function() {/* noop */}, _intervals);\n\nvar _immediates = 'TimerMixin_immediates';\nvar _clearImmediate = clearer(GLOBAL.clearImmediate, _immediates);\nvar _setImmediate = setter(GLOBAL.setImmediate, _clearImmediate, _immediates);\n\nvar _rafs = 'TimerMixin_rafs';\nvar _cancelAnimationFrame = clearer(GLOBAL.cancelAnimationFrame, _rafs);\nvar _requestAnimationFrame = setter(GLOBAL.requestAnimationFrame, _cancelAnimationFrame, _rafs);\n\nvar TimerMixin = {\n  componentWillUnmount: function() {\n    this[_timeouts] && this[_timeouts].forEach(function(id) {\n      GLOBAL.clearTimeout(id);\n    });\n    this[_timeouts] = null;\n    this[_intervals] && this[_intervals].forEach(function(id) {\n      GLOBAL.clearInterval(id);\n    });\n    this[_intervals] = null;\n    this[_immediates] && this[_immediates].forEach(function(id) {\n      GLOBAL.clearImmediate(id);\n    });\n    this[_immediates] = null;\n    this[_rafs] && this[_rafs].forEach(function(id) {\n      GLOBAL.cancelAnimationFrame(id);\n    });\n    this[_rafs] = null;\n  },\n\n  setTimeout: _setTimeout,\n  clearTimeout: _clearTimeout,\n\n  setInterval: _setInterval,\n  clearInterval: _clearInterval,\n\n  setImmediate: _setImmediate,\n  clearImmediate: _clearImmediate,\n\n  requestAnimationFrame: _requestAnimationFrame,\n  cancelAnimationFrame: _cancelAnimationFrame,\n};\n\nmodule.exports = TimerMixin;\n"
  },
  {
    "path": "reactnative/common/console.js",
    "content": "/**\n * 对于console事件做兼容\n */\nif(!window.console){\n\twindow.console = {\n\t\t\tlog: function(){},\n\t\t\tdebug: function(){},\n\t\t\terror: function(){},\n\t\t\twarn: function(){}\n\t}\n}else{\n\tif(!console.log){\n\t\tconsole.log = function(){}\n\t}\n\tif(!console.debug){\n\t\tconsole.debug = function(){}\n\t}\n\tif(!console.debug){\n\t\tconsole.debug = function(){}\n\t}\n\tif(!console.debug){\n\t\tconsole.debug = function(){}\n\t}\n}"
  },
  {
    "path": "reactnative/common/rn/A.js",
    "content": "class A extends Element {\n\trender() {\n\t\tthis.compatHTML.call(this);\n\n\t\treturn (\n\t\t\t\t<TouchableOpacity {...this.props} onPress = { this.props.onPress || this.props.onClick }>\n\t\t\t      <Text\n\t\t\t        >{this.props.children}</Text>\n\t\t\t    </TouchableOpacity>\n\t\t);\n\t}\n}\n\nmodule.exports = A;"
  },
  {
    "path": "reactnative/common/rn/Body.js",
    "content": "class Body extends Div{\n\trender(){\n\t\treturn (\n\t\t\t<ScrollView style={{height:this.props.height||(Dimensions.height-20)}}>{super.render()}</ScrollView>\n\t\t)\n\t}\n}\nmodule.exports = Body;"
  },
  {
    "path": "reactnative/common/rn/Button.js",
    "content": "class Button extends Element {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.defaultStyle = {\n\t\t\t\tdisplay: 'flex',\n\t\t\t\twidth: 100,\n\t\t\t\theight: 30,\n\t\t\t\tcolor: 'white',\t\n\t\t\t\tfontSize: 12,\n\t\t\t\tflexWrap: 'wrap',\n\t\t\t\tbackgroundColor: 'gray',\n\t\t\t\tborderWidth: 1,\n\t\t\t\tborderColor: '#ffffff',\n\t\t\t\tflexDirection: 'row',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center'\n\t\t\t}\n\t}\n\trender() {\n\t\tthis.compatHTML();\n\t\tvar s = TemplateFill({\n\t\t\tcolor: null,\n\t\t\tfontFamily: null,\n\t\t\tfontSize: null,\n\t\t\tfontStyle: null,\n\t\t\tfontWeight: null,\n\t\t\tletterSpacing: null,\n\t\t\ttextAlign: null,\n\t\t\ttextDecorationLine: null,\n\t\t\ttextDecorationStyle: null,\n\t\t\ttextDecorationColor: null,\n\t\t\twritingDirection: null,\n\t\t\tflex: 1,\n\t\t\tflexWrap: 'wrap',\n\t\t\ttextAlign: 'center'\n\t\t}, this.htmlProps.style);\n\t\tvar realStyle = htmlCssParser.filterTextStyle(s);\n\t\treturn (\n\t\t\t\t<TouchableOpacity {...this.htmlProps} style={htmlCssParser.filterViewStyle(this.htmlProps.style)} onPress={(e)=>{this.handleEvent.call(this, {type: 'click'})}}>\n\t\t\t     \t<Text style={realStyle}>{this.props.children}</Text>\n\t\t\t    </TouchableOpacity>\n\t\t\t\t);\n\t}\n}\nmodule.exports = Button;"
  },
  {
    "path": "reactnative/common/rn/Carousel.js",
    "content": "var PAGE_CHANGE_DELAY = 4000;\n\n/**\n * Animates pages in cycle (loop possible if children count > 1)\n */\nclass Carousel extends Element{\n\tconstructor(){\n\t\tsuper();\n\n\t}\n\tcomponentWillMount(){\n\t\tsuper.componentWillMount && super.componentWillMount();\n\t\tif (!!this.props.children) {\n\t\t\tvar childrenCount = this.props.children.length;\n\t\t\tthis.state =  {\n\t\t\t\tcontentOffset: {x: 0, y: 0},\n\t\t\t\tcurrentPage: childrenCount > 1 ? 1 : 0,\n\t\t\t\t\t\thasChildren: true,\n\t\t\t\t\t\tsize: { width: 0, height: 0 }\n\t\t\t};\n    \t} else {\n    \t\tthis.state = {\n    \t\t\thasChildren: false,\n    \t\t\tsize: { width: 0, height: 0 }\n    \t\t}\n    \t}\n\t}\n\tcomponentDidMount(){\n\t\tsuper.componentDidMount && super.componentDidMount();\n\t\tif (this.state.hasChildren) {\n\t\t\tthis._setUpTimer();\n\t\t}\n\t}\n\t_onScrollBegin(event) {\n\t\tthis.clearTimeout(this.timer);\n\t}\n\t_onScrollEnd(event) {\n\t\tthis._setUpTimer();\n\n\t\tvar offset = Object.assign({}, event.nativeEvent.contentOffset);\n\n\t\tvar childrenCount = this.props.children.length,\n\t\tsize = this.state.size;\n\t\tif (offset.x === 0) {\n\t\t\toffset.x = childrenCount * size.width;\n\t\t} else if (offset.x == (childrenCount+1)*size.width) {\n\t\t\toffset.x = size.width;\n\t\t}\n\n\t\tthis._calculateCurrentPage(offset.x);\n\t\tthis.setState({contentOffset: offset});\n\t}\n\t_onLayout() {\n\t\tlet self = this;\n\t\tthis.refs.container.measure(function(x, y, w, h, px, py) {\n\t\t\tself.setState({\n\t\t\t\tcontentOffset: { x: w },\n\t\t\t\tsize: { width: w, height: h}\n\t\t\t});\n\t\t});\n\t}\n\t_setUpTimer() {\n\t\t// only for cycling\n\t\tif (this.props.autoplay && this.props.children.length > 1) {\n\t\t\tthis.clearTimeout(this.timer);\n\t\t\tthis.timer = this.setTimeout(this._animateNextPage, this.props.delay);\n\t\t}\n\t}\n\t_animateNextPage() {\n\t\tvar k = this.state.currentPage;\n\t\tvar size = this.state.size;\n\t\tk++;\n\n\t\tthis.setState({currentPage: k});\n\t\tthis.refs.scrollView.scrollTo(0, k*size.width);\n\t\tthis._setUpTimer();\n\t}\n\t_calculateCurrentPage(offset) {\n\t\tvar size = this.state.size;\n\t\tvar page = Math.floor((offset - size.width/2) / size.width) + 1;\n\t\tthis.setState({currentPage: page});\n\t}\n\t// TODO: add optional `dots` for displaying current page (like pageControl)\n\trender() {\n\t\t//this.compatHTML();\n\t\tvar pages = [],\n\t\tcontents,\n\t\tcontainerProps;\n\n\t\tvar size = this.state.size;\n\n\t\tcontainerProps = {\n\t\t\t\tref: 'container',\n\t\t\t\tonLayout: this._onLayout.bind(this),\n\t\t\t\tstyle: [this.props.style]\n\t\t};\n\n\t\tif (!this.state.hasChildren) {\n\t\t\tcontents = (\n\t\t\t\t\t<Text style={{backgroundColor: 'white'}}>\n\t\t\t\t\tYou are supposed to add children inside Carousel\n\t\t\t\t\t</Text>\n\t\t\t);\n\t\t}\n\n\t\tvar children = this.props.children;\n\t\t\n\t\t// to make infinite pages structure like this is needed: 3-1-2-3-1\n\t\t// add last one at the 1st place\n\t\tif (children.length >= 1) {\n\t\t  pages.push(children[children.length-1]);\n\t\t}\n\t\t\n\t\t// add all pages\n\t\tfor (var i=0; i<children.length; i++) {\n\t\t  pages.push(children[i]);\n\t\t}\n\t\t\n\t\t// add first one at the last place\n\t\tif (children.length >= 1) {\n\t\t  pages.push(children[0]);\n\t\t}\n\t\t\n\t\tpages = pages.map((page, i) => {\n\t\t  return (\n\t\t    <View\n\t\t      style={[{width: size.width, height: size.height}, this.props.pageStyle]}\n\t\t      key={\"page\"+i}>{page}</View>\n\t\t  );\n\t\t});\n\t\t\n\t\tcontents = (\n\t\t  <ScrollView\n\t\t    ref='scrollView'\n\t\t        onScrollBeginDrag={this._onScrollBegin.bind(this)}\n\t\t        onMomentumScrollEnd={this._onScrollEnd.bind(this)}\n\t\t        alwaysBounceHorizontal={false}\n\t\t        alwaysBounceVertical={false}\n\t\t        contentInset={{top:0}}\n\t\t        automaticallyAdjustContentInsets={false}\n\t\t        showsHorizontalScrollIndicator={false}\n\t\t        horizontal={true}\n\t\t        pagingEnabled={true}\n\t\t        bounces={false}\n\t\t        contentOffset={this.state.contentOffset}\n\t\t        contentContainerStyle={[\n\t\t          styles.horizontalScroll,\n\t\t          this.props.contentContainerStyle,\n\t\t          {\n\t\t            width: size.width*(this.props.children.length+(this.props.children.length>1?2:0)),\n\t\t            height: size.height\n\t\t          }\n\t\t        ]}\n\t\t      >\n\t\t        {pages}\n\t      </ScrollView>\n\t      );\n\t      return (\n\t        <View {...containerProps}>\n\t          {contents}\n\t        </View>\n\t      );\n\t }\n}\n\nvar styles = StyleSheet.create({\n  horizontalScroll: {\n    position:'absolute'\n  }\n});\nCarousel.propTypes = {\n\tchildren: React.PropTypes.node.isRequired,\n\tdelay: React.PropTypes.number,\n\tstyle: View.propTypes.style,\n\tpageStyle: View.propTypes.style,\n\tcontentContainerStyle: View.propTypes.style,\n\tautoplay: React.PropTypes.bool\n}\nCarousel.defaultProps = {\n\tdelay: PAGE_CHANGE_DELAY,\n\tautoplay: true\n}\nmodule.exports = Carousel;\n"
  },
  {
    "path": "reactnative/common/rn/Div.js",
    "content": "class Div extends Element {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.defaultStyle = {\n\t\t\t\tcolor: 'black'\n\t\t}\n\t}\n\trender(){\n\t\treturn super.render();\n\t}\n}\n\nmodule.exports = Div;"
  },
  {
    "path": "reactnative/common/rn/Element.js",
    "content": "String.prototype.capitalizeFirstLetter = function() {\n    return this.charAt(0).toUpperCase() + this.slice(1);\n}\n\n\n//\nclass Element extends React.Component {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.state = this.state || {};\n\t\tthis.events = {\n\t\t\t\tonClick : React.PropTypes.func,\n\t\t\t\tonDbClick: React.PropTypes.func,\n\t\t\t\t//\n\t\t\t\t//onAbort: React.PropTypes.func,\n\t\t\t\t//onError: React.PropTypes.func,\n\t\t\t\t//\n\t\t\t\tonFocus: React.PropTypes.func,\n\t\t\t\tonSelect: React.PropTypes.func,\n\t\t\t\tonBlur: React.PropTypes.func,\n\t\t\t\t//\n\t\t\t\tonLoad: React.PropTypes.func,\n\t\t\t\tonChange: React.PropTypes.func,\n\t\t\t\tonResize: React.PropTypes.func,\n\t\t\t\tonUnLoad: React.PropTypes.func,\n\t\t\t\t//\n\t\t\t\t//onKeyDown: React.PropTypes.func,\n\t\t\t\t//onKeyPress: React.PropTypes.func,\n\t\t\t\t//onKeyUp: React.PropTypes.func,\n\t\t\t\t//\n\t\t\t\t//onMouseDown: React.PropTypes.func,\n\t\t\t\t//onMouseMove: React.PropTypes.func,\n\t\t\t\t//onMouseUp: React.PropTypes.func,\n\t\t\t\t//\n\t\t\t\tonTouchStart: React.PropTypes.func,\n\t\t\t\tonTouchMove: React.PropTypes.func,\n\t\t\t\tonTouchEnd: React.PropTypes.func,\n\t\t\t\tonTouchCancel: React.PropTypes.func,\n\t\t}\n\t\tfor(var eventName in this.events){\n\t\t\tthis.eventHandle = this.eventHandle || {};\n\t\t\tthis.eventHandle[eventName] = [];\n\t\t}\n\t\tthis.setTimeout = TimerMixin.setTimeout;\n\t\tthis.clearTimeout = TimerMixin.clearTimeout;\n\t\tthis.setInterval = TimerMixin.setInterval;\n\t\tthis.clearInterval = TimerMixin.clearInterval;\n\t\tthis.setImmediate = TimerMixin.setImmediate;\n\t\tthis.clearImmediate = TimerMixin.clearImmediate;\n\t\tthis.requestAnimationFrame = TimerMixin.requestAnimationFrame;\n\t\tthis.cancelAnimationFrame = TimerMixin.cancelAnimationFrame;\n\t}\n\t_walkAndBindParent() {\n\t\tthis.childNodes = this.props.children ?\n\t\t\t\t(({}).toString.call(this.props.children) == '[object Array]' ?\n\t\t\t\t\t\tthis.props.children : \n\t\t\t\t\t\t\t(({}).toString.call(this.props.children) != '[object String]' ?\n\t\t\t\t\t\t\t\t\t[ this.props.children ] : null)) :\n\t\t\t\t\t\t\t\t\t\tthis.props.children;\n\t\tvar self = this;\n\t\tthis.childNodes && this.childNodes.forEach(function(node){\n\t\t\tif(node){\n\t\t\t\tif(node._store){\n\t\t\t\t\ttry{\n\t\t\t\t\t\tnode._store.parentNode = self;\n\t\n\t\t\t\t\t\tnode._store.inheritStyle = htmlCssParser.canInherit(self.htmlProps._css);\n\t\t\t\t\t}catch(e){\n\t\t\t\t\t\tconsole.debug(e);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\tparentNode(){\n\t\tif(this._reactInternalInstance && this._reactInternalInstance._currentElement){\n\t\t\tvar o =this._reactInternalInstance._currentElement;\n\t\t\tif(o && o._store && o._store.parentNode){\n\t\t\t\treturn o._store.parentNode; \n\t\t\t}else if(this.props.parentNode){\n\t\t\t\treturn this.props.parentNode;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\tgetInheritStyle(){\n\t\tif(this._reactInternalInstance && this._reactInternalInstance._currentElement){\n\t\t\tvar o =this._reactInternalInstance._currentElement;\n\t\t\tif(o && o._store && o._store.inheritStyle){\n\t\t\t\treturn o._store.inheritStyle; \n\t\t\t}\n\t\t}\n\t\treturn {};\n\t}\n\ttagName(){\n\t\treturn this.constructor.toString().match(/function (\\w+)\\(\\)/)[1];\n\t}\n\t/**\n\t * event\n\t */\n\taddEventListener(eventName: String, handle: Function) {\n\t\tvar eventName = 'on' + eventName.capitalizeFirstLetter();\n\t\tthis.eventHandle[eventName].push(handle);\n\t}\n\tremoveEventListener(eventName: String, handle: Function) {\n\t\tvar eventName = 'on' + eventName.capitalizeFirstLetter();\n\t\tif(!handle) {\n\t\t\tthis.eventHandle[eventName] = [];\n\t\t}else{\n\t\t\tfor(var i = 0, a = this.eventHandle[eventName]; i < a.length; i++) {\n\t\t\t\tif(a[i] == handle) {\n\t\t\t\t\ta.splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\thandleEvent(event: Event) {\n\t\t//dom 1 event\n\t\tvar eventName = 'on' + event.type.capitalizeFirstLetter();\n\t\tvar handle = this[eventName];\n\t\thandle && handle(event);\n\t\t//dom 2 event\n\t\tvar self = this;\n\t\tself.eventHandle[eventName] && self.eventHandle[eventName].forEach(function(item, index){\n\t\t\titem && item.call(self, event);\n\t\t})\n\t\t//bubble\n\t\tif(event.bubbles){\n\t\t\tvar o;\n\t\t\tif(this._reactInternalInstance && this._reactInternalInstance._currentElement){\n\t\t\t\to = this._reactInternalInstance._currentElement;\n\t\t\t}\n\t\t\to && o._store && o._store.parentNode && o._store.parentNode.handleEvent.apply(o._store.parentNode, arguments);\n\t\t}\n\t}\n\tcomponentWillMount(){\n\t\tsuper.componentWillMount && super.componentWillMount();\n\t}\n\tcomponentDidMount(){\n\t\tsuper.componentDidMount && super.componentDidMount();\n\t\tthis.handleEvent.call(this, {type: 'load'});\n\t}\n\tcomponentWillUnmount() {\n\t\tsuper.componentWillUnmount && super.componentWillUnmount();\n\t\t//this.eventHandle = null;\n\t\tTimerMixin.componentWillUnmount.call(this);\n\t\tif(this.props.id){\n\t\t\tdelete DOMTREE_BYID[this.props.id];\n\t\t}\n\t\tif(this.props.id){\n\t\t\tdelete DOMTREE_BYID[this.props.id];\n\t\t}\n\t\tif(this.props.className) {\n\t\t\tvar a = this.props.className.split(/\\s+/);\n\t\t\tvar self = this;\n\t\t\ta.forEach(function(i){\n\t\t\t\tif(DOMTREE_BYCLASS[i].indexOf(self) > -1){\n\t\t\t\t\tDOMTREE_BYCLASS[i].splice(DOMTREE_BYCLASS[i].indexOf(self), 1);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.handleEvent.call(this, {type: 'unload'});\n\t}\n\t/**\n\t * render\n\t */\n\trender() {\n\t\tthis.compatHTML();\n\t\tif(({}).toString.call(this.props.children)=='[object String]'){\n\t\t\treturn (\n\t\t\t\t<TouchableWithoutFeedback onPress={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'click', reactEvent: e}))}}>\t\n\t\t\t\t<View \n\t\t\t\t\tref=\"i1\"\n\t\t\t\t\t{...this.htmlProps}\n\t\t\t\t\tonTouchStart={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchStart',reactEvent: e}));}}\n\t\t\t\t\tonTouchMove={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchMove',reactEvent: e}));}}\n\t\t\t\t\tonTouchEnd={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchEnd',reactEvent: e}));}}\n\t\t\t\t\tstyle={htmlCssParser.filterViewStyle(this.htmlProps.style)}>\n\t\t\t\t\t<Text style={TemplateFill({\n\t\t\t\t\t\tcolor: null,\n\t\t\t\t\t\tfontFamily: null,\n\t\t\t\t\t\tfontSize: null,\n\t\t\t\t\t\tfontStyle: null,\n\t\t\t\t\t\tfontWeight: null,\n\t\t\t\t\t\tletterSpacing: null,\n\t\t\t\t\t\ttextAlign: 'justify',\n\t\t\t\t\t\ttextDecorationLine: null,\n\t\t\t\t\t\ttextDecorationStyle: null,\n\t\t\t\t\t\ttextDecorationColor: null,\n\t\t\t\t\t\twritingDirection: null,\n\t\t\t\t\t\tlineHeight: null,\n\t\t\t\t\t\ttextAlignVertical: 'center'\n\t\t\t\t\t}, this.htmlProps.style)}>{this.state.children}</Text>\n\t\t\t\t</View>\n\t\t\t\t</TouchableWithoutFeedback>\n\t\t\t);\n\t\t}else if(({}).toString.call(this.props.children)=='[object Array]'){\n\t\t\tvar htmlChildren = [];\n\t\t\tvar self= this;\n\t\t\tthis.props.children.forEach(function(item, idx){\n\t\t\t\tif(item){\n\t\t\t\t\tif(({}).toString.call(item)=='[object String]'){\n\t\t\t\t\t\thtmlChildren.push(React.createElement(Text, {style: TemplateFill({\n\t\t\t\t\t\t\tcolor: null,\n\t\t\t\t\t\t\tfontFamily: null,\n\t\t\t\t\t\t\tfontSize: null,\n\t\t\t\t\t\t\tfontStyle: null,\n\t\t\t\t\t\t\tfontWeight: null,\n\t\t\t\t\t\t\tletterSpacing: null,\n\t\t\t\t\t\t\ttextAlign: null,\n\t\t\t\t\t\t\ttextDecorationLine: null,\n\t\t\t\t\t\t\ttextDecorationStyle: null,\n\t\t\t\t\t\t\ttextDecorationColor: null,\n\t\t\t\t\t\t\twritingDirection: null\n\t\t\t\t\t\t}, self.htmlProps.style), key: idx}, item));\n\t\t\t\t\t}else{\n\t\t\t\t\t\thtmlChildren.push(item);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t});\n\t\t\tthis.state.children = htmlChildren;\n\t\t\treturn (\n\t\t\t\t\t<TouchableWithoutFeedback onPress={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'click', reactEvent: e}))}}>\n\t\t\t\t\t<View \n\t\t\t\t\t\tref=\"i1\"\n\t\t\t\t\t\t{...this.htmlProps}\n\t\t\t\t\t\tonTouchStart={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchStart',reactEvent: e}));}}\n\t\t\t\t\t\tonTouchMove={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchMove',reactEvent: e}));}}\n\t\t\t\t\t\tonTouchEnd={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchEnd',reactEvent: e}));}}\n\t\t\t\t\t\tstyle={htmlCssParser.filterViewStyle(this.htmlProps.style)}>{this.state.children}</View>\n\t\t\t\t\t</TouchableWithoutFeedback>\n\t\t\t);\n\t\t}else{\n\t\t\treturn (\n\t\t\t\t<TouchableWithoutFeedback onPress={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'click', reactEvent: e}))}}>\n\t\t\t\t<View\n\t\t\t\t\tref=\"i1\"\n\t\t\t\t\t{...this.htmlProps} \n\t\t\t\t\tonTouchStart={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchStart',reactEvent: e}));}}\n\t\t\t\t\tonTouchMove={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchMove',reactEvent: e}));}}\n\t\t\t\t\tonTouchEnd={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'touchEnd',reactEvent: e}));}}\n\t\t\t\t\tstyle={htmlCssParser.filterViewStyle(this.htmlProps.style)}\n\t\t\t\t>\n\t\t\t\t\t{this.state.children}\n\t\t\t\t</View>\n\t\t\t\t</TouchableWithoutFeedback>\n\t\t\t);\n\t\t}\n\t\t\n\t}\n\t/**\n\t * 做html的兼容，比如style和dom事件\n\t */\n\tcompatHTML(conf) {\n\t\tvar self = this;\n\t\tself.state = self.state || {};\n\t\tself.state.children = this.props.children;\n\t\t\n\t\tif(!this.htmlProps){\n\t\t\tthis.htmlProps = this.htmlProps || {};\n\t\t\tfor(var k in this.props){\n\t\t\t\tif(k!='style'){\n\t\t\t\t\tthis.htmlProps[k] = this.props[k];\n\t\t\t\t}\n\t\t\t}\n\t\t\t//Object.assign(this.htmlProps, this.props);\n\t\t}\n\t\t\n\t\t/**\n\t\t * reset Event Array\n\t\t */\n\t\tfor(var e in this.eventHandle){\n\t\t\tthis.eventHandle[e] = [];\n\t\t}\n\t\tfor(var eventName in this.events){\n\t\t\tvar fn = this.props[eventName];\n\t\t\tif(fn){\n\t\t\t\tself.addEventListener(eventName.substring(2).capitalizeFirstLetter(), fn);\n\t\t\t}\n\t\t}\n\t\t/**\n\t\t * 默认字体使用rem\n\t\t */\n\t\t\n\t\tif(!this.htmlProps._css){\n\t\t\tthis.defaultStyle = this.defaultStyle || {};\n\t\t\tthis.htmlProps._css = Object.assign({\n\t\t\t\tfontSize: window.STYLESHEET.remUnit\n\t\t\t}, this.defaultStyle, this.getInheritStyle());\n\t\t}\n\t\t//这边是css权重算法\n\t\tif(this.htmlProps.className && !this.classList) {\n\t\t\tvar a = this.htmlProps.className.split(/\\s+/);\n\t\t\tthis.classList = a;\n\t\t}\n\n\n\t\t\n\t\tif(this.classList && this.classList.length){\n\t\t\tthis.state.className = this.classList.join(' ');\n\t\t\tvar self = this;\n\t\t\tthis.classList.forEach(function(i){\n\t\t\t\t/**\n\t\t\t\t * 加入className tree\n\t\t\t\t */\n\t\t\t\tDOMTREE_BYCLASS[i] = DOMTREE_BYCLASS[i] || [];\n\t\t\t\tif(DOMTREE_BYCLASS[i].indexOf(self) == -1){\n\t\t\t\t\tDOMTREE_BYCLASS[i].push(self);\n\t\t\t\t}\n\t\t\t\t/**\n\t\t\t\t * 开始对于className的继承的处理\n\t\t\t\t */\n\t\t\t\tObject.assign(self.htmlProps._css, STYLESHEET.sheets['.' + i]);\n\t\t\t\t\n\t\t\t\tif(STYLESHEET.sheets['+.' + i] && STYLESHEET.sheets['+.' + i].length){\n\t\t\t\t\tfor(var j = 0; j < STYLESHEET.sheets['+.' + i].length; j++){\n\t\t\t\t\t\tvar css = STYLESHEET.sheets['+.' + i][j].inherit.slice();\n\t\t\t\t\t\tvar find = false;\n\t\t\t\t\t\tvar par = self;\n\t\t\t\t\t\tvar maxLoop = 999;\n\t\t\t\t\t\twhile(css.length && (par = par.parentNode()) && (maxLoop> 0)){\n\t\t\t\t\t\t\tmaxLoop--;\n\t\t\t\t\t\t\tvar cur = css[css.length -1];\n\t\t\t\t\t\t\tif(/^\\./.test(cur)){\n\t\t\t\t\t\t\t\tif(par.classList && par.classList.indexOf(cur.substring(1)) > -1){\n\t\t\t\t\t\t\t\t\tcss.pop();\n\t\t\t\t\t\t\t\t\tif(css.length == 0){\n\t\t\t\t\t\t\t\t\t\tfind = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}else if(/^#/.test(cur)){\n\n\t\t\t\t\t\t\t\tif(par.props.id == cur.substring(1)){\n\t\t\t\t\t\t\t\t\tcss.pop();\n\t\t\t\t\t\t\t\t\tif(css.length == 0){\n\t\t\t\t\t\t\t\t\t\tfind = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}else if(/^[A-Z]/.test(cur)){\n\t\t\t\t\t\t\t\tif(par.tagName() == cur){\n\t\t\t\t\t\t\t\t\tcss.pop();\n\t\t\t\t\t\t\t\t\tif(css.length == 0){\n\t\t\t\t\t\t\t\t\t\tfind = true;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(find){\n\t\t\t\t\t\t\tObject.assign(self.htmlProps._css, STYLESHEET.sheets['+.' + i][j].css);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(this.classList){\n\t\t\tvar allEnumClass = allEnum(this.classList);\n\t\t\tfunction allEnum(a){\n\t\t\t\tvar re = [];\n\t\t\t\tfor(var i = 0; i < a.length; i++){\n\t\t\t\t\to(i, a, re, a[i]);\n\t\t\t\t\tfunction o(start, array, re, prefix){\n\t\t\t\t\t\tfor(var j = start + 1; j < array.length; j++){\n\t\t\t\t\t\t\tvar newK = '.' + prefix.toString() + '.' + array[j].toString();\n\t\t\t\t\t\t\tre.push(newK);\n\t\t\t\t\t\t\to(j, array, re, newK);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn re;\n\t\t\t}\n\t\t\t/**\n\t\t\t * 我觉得这里面还是有问题的，我们应该实现一个linkedHashMap保持原来的css的插入顺序才可以，现在这样的权重还是有点问题\n\t\t\t */\n\t\t\tallEnumClass.forEach(function(item){\n\t\t\t\tif(STYLESHEET.sheets[item]){\n\t\t\t\t\tObject.assign(self.htmlProps._css, STYLESHEET.sheets[item]);\n\t\t\t\t}\n\t\t\t})\n\t\t\t\n\t\t}\n\t\tif(this.props.id){\n\t\t\tDOMTREE_BYID[this.props.id] = this;\n\t\t\t/**\n\t\t\t * 权重id的权重大于className\n\t\t\t */\n\t\t\tObject.assign(self.htmlProps._css, STYLESHEET.sheets['#' + this.props.id]);\n\t\t}\n\n\t\t/**\n\t\t * 直接赋值的样式权重最大\n\t\t */\n\t\tif(!this.state.inlineStyle){\n\t\t\t/*\n\t\t\tif(this.props.style!= null && '0' in this.props.style){\n\t\t\t\tvar re = {};\n\t\t\t\tfor(var k in this.props.style){\n\t\t\t\t\tObject.assign(re, this.props.style[k]);\n\t\t\t\t}\n\t\t\t\tthis.state.inlineStyle = re;\n\t\t\t}else{\n\t\t\t\tthis.state.inlineStyle = this.props.style;\n\t\t\t}\n\t\t\t*/\n\t\t\tthis.state.inlineStyle = this.props.style;\n\t\t}\n\t\tif(this.state.inlineStyle){\n\t\t\tObject.assign(this.htmlProps._css, this.state.inlineStyle);\n\t\t}\n\t\tif(this.htmlProps._css) {\n\t\t\tthis.htmlProps.style = htmlCssParser.parse(this.htmlProps._css, this.tagName());\n\t\t}\n\t\t//\n\t\tif(conf && conf.isBubble == false){\n\t\t\t\n\t\t}else{\n\t\t\tthis._walkAndBindParent();\n\t\t}\n\t}\n\t_defineParentNode(parentNode){\n\t\tif(this._reactInternalInstance._currentElement._store){\n\t\t\tthis._reactInternalInstance._currentElement._store.parentNode = parentNode;\n\t\t}\n\t}\n\t/**\n\t * reactnative版本的getComputedStyle，回调处理\n\t */\n\toffset(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tUIManager.measure(React.findNodeHandle(this), (x, y, width, height, left, top) =>  {\n\t\t\t\tresolve({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y,\n\t\t\t\t\tleft: left,\n\t\t\t\t\ttop: top,\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height\n\t\t\t\t});\n\t        });\n\t\t});\n\t}\n\t/**\n\t * class\n\t */\n\taddClass(cls){\n\t\tthis.classList = this.classList || [];\n\t\tvar idx = this.classList.indexOf(cls);\n\t\tif(idx > -1){\n\t\t\tthis.classList.splice(idx, 1);\n\t\t}\n\t\tthis.classList.push(cls);\n\t\tthis.setState({\n\t\t\tclassName: this.classList.join(' ')\n\t\t});\n\t}\n\tremoveClass(cls){\n\t\tthis.classList = this.classList || [];\n\t\tvar idx = this.classList.indexOf(cls);\n\t\tif(idx > -1){\n\t\t\tthis.classList.splice(idx, 1);\n\t\t\tthis.setState({\n\t\t\t\tclassName: this.classList.join(' ')\n\t\t\t});\n\t\t}\n\t}\n\thasClass(cls){\n\t\tthis.classList = this.classList || [];\n\t\tvar idx = this.classList.indexOf(cls);\n\t\tif(idx > -1){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tcss(styleName, styleValue){\n\t\tif(arguments.length == 0){\n\t\t\treturn this.htmlProps._css;\n\t\t}else if(arguments.length == 1){\n\t\t\tif(({}).toString.call(styleName) == '[object String]'){\n\t\t\t\treturn this.htmlProps._css[styleName];\n\t\t\t}else{\n\t\t\t\tvar newInlineStyle = Object.assign({}, this.state.inlineStyle, styleName);\n\t\t\t\tthis.setState({inlineStyle: newInlineStyle});\n\t\t\t}\n\t\t}else if(arguments.length == 2){\n\t\t\tvar t = {};\n\t\t\tt[styleName] = styleValue;\n\t\t\tvar newInlineStyle = Object.assign({}, this.state.inlineStyle, t);\n\t\t\tthis.setState({inlineStyle: newInlineStyle});\n\t\t}\n\t}\n\t/**\n\t * dom\n\t */\n\thtml(o){\n\t\tif(o){\n\t\t\tthis.setState({\n\t\t\t\tchildren: o\n\t\t\t})\n\t\t}else{\n\t\t\treturn this.state.children;\n\t\t}\n\t}\n\tattr(k, v){\n\t\tif(arguments.length ==2){\n\t\t\tthis.htmlProps[k] = v;\n\t\t\tthis.render();\n\t\t}else if(arguments.length == 1){\n\t\t\treturn this.htmlProps[k];\n\t\t}\n\t}\n\tappend(o){\n\t\tvar children = this.state.children.slice(0).concat([o]);\n\t\tthis.setState({\n\t\t\tchildren: children\n\t\t})\n\t}\n\tbefore(o){\n\t\tvar children = [o].concat(this.state.children.slice(0));\n\t\tthis.setState({\n\t\t\tchildren: children\n\t\t})\n\t}\n\ton(eventType, fn){\n\t\tthis.addEventListener(eventType, fn);\n\t}\n\toff(eventType, fn){\n\t\tthis.removeEventListener(eventType, fn);\n\t}\n\tanimate(config){\n\t\tanimation.motion(Object.assign(config, {el: this}));\n\t}\n}\n\nmodule.exports = Element;"
  },
  {
    "path": "reactnative/common/rn/Header.js",
    "content": "class Header extends Element {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.state = {\n\t\t\t\ttitle: '',\n\t\t\t\tleftButton: {\n\t\t\t\t\ttitle: '返回',\n\t\t\t\t\thandler: function(){},\n\t\t\t\t\timage: null\n\t\t\t\t},\n\t\t\t\trightButton: {\n\t\t\t\t\ttitle: '',\n\t\t\t\t\thandler: function(){},\n\t\t\t\t\timage: null\n\t\t\t\t}\n\t\t}\n\t}\n\tsetTitle(title){\n\t\tthis.state.title = title;\n\t}\n\tsetLeftButton(o){\n\t\tthis.state.leftButton = o;\n\t}\n\tsetRightButton(o){\n\t\tthis.state.rightButton = o;\n\t}\n\tcomponentWillMount(){\n\t\tsuper.componentWillMount && super.componentWillMount.call(this);\n\t\tif(this.props.title){\n\t\t\tthis.state.title = this.props.title;\n\t\t}\n\t\tif('leftButton' in this.props){\n\t\t\tif(this.props.leftButton){\n\t\t\t\tthis.state.leftButton = this.state.leftButton || {};\n\t\t\t\tObject.assign(this.state.leftButton, this.props.leftButton);\n\t\t\t}else{\n\t\t\t\tthis.state.leftButton = null;\n\t\t\t}\n\t\t}\n\t\tif('rightButton' in this.props){\n\t\t\tif(this.props.rightButton){\n\t\t\t\tthis.state.rightButton = this.state.rightButton || {};\n\t\t\t\tObject.assign(this.state.rightButton, this.props.rightButton);\n\t\t\t}else{\n\t\t\t\tthis.state.rightButton = null;\n\t\t\t}\n\t\t}\n\t}\n\trender() {\n\t\tthis.compatHTML();\n\t\tvar self = this;\n\t\tif(this.props.children){\n\t\t\treturn (\n\t\t\t\t<Div parentNode={self} id={this.props.id} className=\"custom-native-header\">\n\t\t\t\t\t{this.props.children}\n\t\t\t\t</Div>\n\t\t\t)\n\t\t}else{\n\t\t\t\n\n\t\t\treturn (\n\t\t\t\t<Div id={this.props.id} className=\"native-header\">\n\t\t\t\t\t<Div className=\"native-header-box\">\n\t\t\t\t\t\t<Div className=\"native-header-title\">{self.state.title}</Div>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tself.state.leftButton ?\n\t\t\t\t\t\t\t\t\t<Div className=\"native-header-leftButton\" onClick={self.state.leftButton.handler}>\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tself.state.leftButton.image? <Img style={{backgroundColor:'transparent',width: 18,height: 18, position: 'absolute' }} src={this.state.leftButton.image}/> : null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t{self.state.leftButton.title}\n\t\t\t\t\t\t\t\t\t</Div>\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t}\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tself.state.rightButton ?\n\t\t\t\t\t\t\t\t\t<Div className=\"native-header-rightButton\" onClick={self.state.rightButton.handler}>\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tself.state.rightButton.image? <Img style={{backgroundColor:'transparent',width: 18,height: 18, position: 'absolute' }} src={this.state.rightButton.image}/> : null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t{self.state.rightButton.title}\n\t\t\t\t\t\t\t\t\t</Div>\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t}\n\t\t\t\t\t</Div>\n\t\t\t\t</Div>\n\t\t\t)\n\t\t}\n\t}\n}\n\nmodule.exports = Header;"
  },
  {
    "path": "reactnative/common/rn/HtmlCssParser.js",
    "content": "class HtmlCssParser{\n\tconstructor(){\n\n\t}\n\tparse(cssObject, tagName){\n\t\tvar htmlCssObj = {};\n\t\tfor (var k in cssObject){\n\t\t\tvar v = cssObject[k];\n\t\t\tif(/(.+)(rem)/i.test(v)){\n\t\t\t\t//\n\t\t\t\tv = window.STYLESHEET.remUnit * parseFloat(v.match(/(.+)(rem)/)[1]);\n\t\t\t\tv = parseFloat(v);\n\t\t\t}else if(/(.+)(em)/i.test(v)){\n\t\t\t\t//\n\t\t\t\tv = window.STYLESHEET.emUnit * parseFloat(v.match(/(.+)(em)/)[1]);\n\t\t\t\tv = parseFloat(v);\n\t\t\t}else if(/(.+)(%)/.test(v)){\n\t\t\t\t\n\t\t\t\tif(/height/i.test(k)){\n\t\t\t\t\tv = Dimensions.get('window').height * parseFloat(v.match(/(.+)(%)/)[1]) * 0.01\n\t\t\t\t}else{\n\t\t\t\t\tv = Dimensions.get('window').width * parseFloat(v.match(/(.+)(%)/)[1]) * 0.01\n\t\t\t\t}\n\n\t\t\t}else if(/(\\d+(\\.\\d+)?)px/.test(v)){\n\n\t\t\t\tv = v.replace(/(\\d+(\\.\\d+)?)px/g, function(all, m1){\n\t\t\t\t\tvar v = parseFloat(m1) * (3/4);\n\t\t\t\t\tif(v< 0.5)v=0.5;\n\t\t\t\t\treturn v;\n\t\t\t\t});\n\n\t\t\t\t\n\t\t\t\tv = parseFloat(v);\n\t\t\t}else if(/(\\d+(\\.\\d+)?)pt/.test(v)){\n\t\t\t\t\n\t\t\t\tv = v.replace(/(\\d+(\\.\\d+)?)pt/g, function(all, m1){\n\t\t\t\t\treturn parseFloat(m1);\n\t\t\t\t});\n\t\t\t\tv = parseFloat(v);\n\t\t\t}else if(/^\\d+(\\.\\d+)?$/.test(v)){\n\t\t\t\tv = parseFloat(v);\n\t\t\t}\n\n\t\t\tif(v== 'auto'){\n\t\t\t\t\n\t\t\t}else if(k=='fontFamily'){\n\t\t\t\t\n\t\t\t}else{\n\t\t\t\thtmlCssObj[k] = v;\n\t\t\t}\n\t\t}\n\t\t//crack\n\n\t\t//\n\t\t\n\t\treturn htmlCssObj;\n\t}\n\tfilterViewStyle(m){\n\t\tvar n = {};\n\t\tvar removeList = ['fontSize', 'display', 'color', 'textAlign','lineHeight', 'fontWeight'];\n\t\tfor(var p in m){\n\t\t\tif(removeList.indexOf(p) == -1){\n\t\t\t\tn[p] = m[p]\n\t\t\t}\n\t\t}\n\t\treturn n;\n\t}\n\tfilterTextStyle(m){\n\t\tvar n = {};\n\t\tvar removeList = ['display'];\n\t\tfor(var p in m){\n\t\t\tif(removeList.indexOf(p) == -1){\n\t\t\t\tn[p] = m[p]\n\t\t\t}\n\t\t}\n\t\treturn n;\n\t}\n\tcanInherit(m){\n\t\tvar n = {};\n\t\tvar canI = ['fontSize', 'textAlign', 'color', 'lineHeight', 'fontWeight'];\n\t\tfor(var p in m){\n\t\t\tif(canI.indexOf(p) > -1){\n\t\t\t\tn[p] = m[p]\n\t\t\t}\n\t\t}\n\t\treturn n;\n\t}\n}\nmodule.exports = new HtmlCssParser();"
  },
  {
    "path": "reactnative/common/rn/Img.js",
    "content": "class Img extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\tdelete this.htmlProps.style.fontSize;\n\t\treturn <Image style={this.htmlProps.style} source={this.getRelativePath(this.props.src)} />\n\t}\n\tgetRelativePath(path){\n\t\tif(({}).toString.call(path)=='[object String]'){\n\t\t\treturn {uri: window.IMG_CDN_PREFIX && path.indexOf('http:')!=0 ? (window.IMG_CDN_PREFIX + path) : path};\n\t\t}else{\n\t\t\treturn path;\n\t\t}\n\t}\n}\n\nmodule.exports = Img;"
  },
  {
    "path": "reactnative/common/rn/Input.js",
    "content": "class Input extends Element {\n\tconstructor(){\n\t\tsuper();\n\t\tthis.defaultStyle = {\n\t\t\t\twidth: 150,\n\t\t\t\theight: 30,\n\t\t\t\tborderBottomColor: 'black',\n\t\t\t\tborderWidth: 1\n\t\t}\n\t\tthis.value = '';\n\t}\n\trender() {\n\t\tthis.compatHTML();\n\t\tif(this.props.value){\n\t\t\tthis.value = this.props.value;\n\t\t}\n\t\treturn (\n\t\t\t<TextInput ref=\"i1\" autoCorrect={false} autoCapitalize='none' {...this.props} style={this.htmlProps.style} \n\t\t\tonChangeText={this._setValue.bind(this)}\n\t\t\tonChange={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'change', reactEvent: e}))}}\n\t\t\tonFocus={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'focus', reactEvent: e}))}}\n\t\t\tonBlur={(e)=>{this.handleEvent.call(this, new DomEvent({type: 'blur', reactEvent: e}))}}\n\t\t\t/>\n\t\t);\n\t}\n\t_setValue(v){\n\t\tthis.value = v;\n\t}\n\tval(v){\n\t\tif(v!=null){\n\t\t\tthis.value = v;\n\t\t}\n\t\tif(v==undefined){\n\t\t\treturn this.value;\n\t\t}\n\t}\n\t\n}\nmodule.exports = Input;"
  },
  {
    "path": "reactnative/common/rn/Nav.js",
    "content": "class Nav extends Element {\n\trender () {\n\t\tthis.compatHTML();\n\t\treturn <NavigatorIOS style={{flex: 1}} {...this.props} />;\n\t}\n}\nmodule.exports = Nav;"
  },
  {
    "path": "reactnative/common/rn/RightSliderMenu.js",
    "content": "class RightSliderMenu extends Element{\n\tconstructor(){\n\t\tsuper();\n\t\tthis.state = {\n\t\t\t\tdelay: 30,\n\t\t\t\tmenuWidth: 50\n\t\t}\n\t}\n\t_onScrollBegin(){\n\t\tif(this.props.onTouchStart){\n\t\t\tthis.props.onTouchStart();\n\t\t}\n\t\tconsole.debug(this)\n\t\tthis.clearTimeout(this.timer);\n\t}\n\t_onScrollEnd(){\n\t\tconsole.debug(this)\n\t\tthis.clearTimeout(this.timer);\n\t\tthis.timer = this.setTimeout(this._animate, this.state.delay);\n\t}\n\t_animate(){\n\t\tconsole.debug(this.dragEndX);\n\t\tconsole.debug(this.dragStartX)\n\t\tvar distance = this.dragEndX - this.dragStartX;\n\t\tconsole.debug(distance)\n\t\tif(distance < -(this.state.menuWidth/2)){\n\t\t\tconsole.debug(1);\n\t\t\tthis.refs['scrollView'].scrollTo(0, this.state.menuWidth)\n\t\t}else{\n\t\t\tconsole.debug(2);\n\t\t\tthis.refs['scrollView'].scrollTo(0, 0)\n\t\t}\n\t}\n\t_onTouchStart(e){\n\t\tthis.dragStartX = e.nativeEvent.pageX;\n\t}\n\t_onTouchEnd(e){\n\t\tthis.dragEndX = e.nativeEvent.pageX;\n\t\tthis.clearTimeout(this.timer);\n\t\tthis.timer = this.setTimeout(this._animate, this.state.delay);\n\t}\n\trender(){\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t\t\t<ScrollView \n\t\t\t\t\tref='scrollView'\n\t\t\t\t\tcontentContainerStyle={{\n\t\t\t\t\t\twidth: windowWidth + 50\n\t\t\t\t}}\n\t\t\t\t\tonScrollBeginDrag={this._onScrollBegin.bind(this)}\n\t\t\t\t\tonMomentumScrollEnd={null}\n\t\t\t        alwaysBounceHorizontal={true}\n\t\t\t        alwaysBounceVertical={false}\n\t\t\t        contentInset={{top:0}}\n\t\t\t        automaticallyAdjustContentInsets={false}\n\t\t\t        showsHorizontalScrollIndicator={false}\n\t\t\t        horizontal={true}\n\t\t\t        pagingEnabled={false}\n\t\t\t        bounces={true}\n\t\t\t        contentOffset={{x: 0, y: 0}}\n\t\t\t\t\tonTouchStart={this._onTouchStart.bind(this)}\n\t\t\t\t\tonTouchEnd={this._onTouchEnd.bind(this)}\n\t\t\t\t>\n\t\t\t\t\t{this.props.children}\n\t\t\t\t</ScrollView>\n\t\t);\n\t}\n}\nmodule.exports = RightSliderMenu;"
  },
  {
    "path": "reactnative/common/rn/SimpleListView.js",
    "content": "class SimpleListView extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn <ListView {...this.props} />;\n\t}\n}\nSimpleListView.initDataSource = () => {\n\tvar ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});\n\tvar defaultDS = ds.cloneWithRows([]);\n\treturn defaultDS;\n}\nmodule.exports = SimpleListView;"
  },
  {
    "path": "reactnative/common/rn/Span.js",
    "content": "var DomEvent = require('../DomEvent');\nclass Span extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t\t<Text ref=\"i1\" {...this.htmlProps} style={this.htmlProps.style} />\n\t\t);\n\t}\n\t\n}\n\nmodule.exports = Span;"
  },
  {
    "path": "reactnative/common/rn/Tab.js",
    "content": "class Tab extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t\t\t<TabBarIOS tintColor={this.props.tintColor} barTintColor={this.props.barTintColor}  {...this.props} />\n\t\t);\n\t}\n}\nmodule.exports = Tab;"
  },
  {
    "path": "reactnative/common/rn/TabItem.js",
    "content": "class TabItem extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t\t\t<TabBarIOS.Item style={{flex:1, height: 30}} {...this.props} title={this.props.title} icon={this.props.icon} selected={this.props.selected} onPress={this.props.onPress || this.props.onClick}>{this.props.children}</TabBarIOS.Item>\n\t\t);\n\t}\n}\n\nmodule.exports = TabItem;"
  },
  {
    "path": "reactnative/common/rn/TabSlider.js",
    "content": "class SegmentControl extends Element {\n\t_onChange(event: Event) {\n\t\tthis.props.config.onChange && this.props.config.onChange.call(this, event.nativeEvent.segmentSelectedIndex);\n\t}\n\trender(){\n\t\tthis.compatHTML();\n\t\treturn <CTRIPSegmentViewControl style={{height: (this.props.config.contentHeight + this.props.config.silderViewHeight)}} config={this.props.config} onChange={this._onChange.bind(this)}/>;\n\t}\n}\nSegmentControl.propTypes = {\n\tconfig: React.PropTypes.shape({\n\t\titemNameArray: React.PropTypes.array.isRequired,\n\t\titemFontSize: React.PropTypes.number.isRequired,\n\t\tcontentHeight:React.PropTypes.number.isRequired,\n\t\tsilderViewHeight: React.PropTypes.number.isRequired,\n\t\tselectedColor: React.PropTypes.color,\n\t\tnormalColor: React.PropTypes.color,\n\t\tselectedIndex:React.PropTypes.number.isRequired,\n\t})\n};\nvar CTRIPSegmentViewControl = requireNativeComponent('CTRIPSegmentViewControl', SegmentControl, {\n\tnativeOnly: { onChange: true }\n});\n\nmodule.exports = SegmentControl;\n"
  },
  {
    "path": "reactnative/css/cxylhl/index.js",
    "content": "var styles = {\n  \"body *\": {\n    \"fontFamily\": \"\\\"Consolas\\\",\\\"Microsoft Yahei\\\", Arial, sans-serif\"\n  },\n  \"body\": {\n    \"backgroundColor\": \"white\",\n    \"margin\": \"0\",\n    \"padding\": \"0\"\n  },\n  \".header\": {\n    \"flexDirection\": \"row\"\n  },\n  \".sup\": {\n    \"fontSize\": \"0.4rem\",\n    \"backgroundColor\": \"yellow\",\n    \"color\": \"red\"\n  },\n  \".container\": {},\n  \".container .title\": {\n    \"color\": \"#bbbbbb\",\n    \"fontWeight\": \"bold\",\n    \"backgroundColor\": \"#555555\",\n    \"paddingTop\": \"5px\",\n    \"paddingBottom\": \"5px\",\n    \"paddingRight\": \"15px\",\n    \"paddingLeft\": \"15px\"\n  },\n  \".adlink\": {\n    \"textAlign\": \"center\",\n    \"fontSize\": \"11pt\"\n  },\n  \".adlink a\": {\n    \"color\": \"#666666\",\n    \"fontWeight\": \"bold\",\n    \"marginBottom\": \"10px\",\n    \"backgroundColor\": \"#eeeeee\",\n    \"borderWidth\": \"1px\",\n    \"borderStyle\": \"solid\",\n    \"borderColor\": \"#dddddd\",\n    \"borderRadius\": \"4px\",\n    \"padding\": \"10pt\",\n    \"marginTop\": \"10pt\"\n  },\n  \".date\": {\n    \"fontSize\": \"17pt\",\n    \"fontWeight\": \"bold\",\n    \"lineHeight\": \"30pt\",\n    \"textAlign\": \"center\"\n  },\n  \".split\": {\n    \"height\": \"1px\"\n  },\n  \".clear\": {\n    \"height\": \"1px\"\n  },\n  \".good\": {\n    \"flexDirection\": \"row\",\n    \"backgroundColor\": \"#ffee44\"\n  },\n  \".bad\": {\n    \"flexDirection\": \"row\",\n    \"backgroundColor\": \"#ff4444\"\n  },\n  \".good .title\": {\n    \"flex\": \"0.5\",\n    \"fontWeight\": \"bold\",\n    \"fontSize\": \"2rem\",\n    \"backgroundColor\": \"#ffee44\",\n    \"alignSelf\": \"center\",\n    \"textAlign\": \"center\"\n  },\n  \".bad .title\": {\n    \"flex\": \"0.5\",\n    \"fontWeight\": \"bold\",\n    \"fontSize\": \"2rem\",\n    \"backgroundColor\": \"#ff4444\",\n    \"color\": \"#ffffff\",\n    \"alignSelf\": \"center\",\n    \"textAlign\": \"center\"\n  },\n  \".good .title .title-text\": {},\n  \".bad .title .title-text\": {},\n  \".good .content\": {\n    \"backgroundColor\": \"#ffffaa\",\n    \"flex\": \"1\",\n    \"padding\": \"10px\"\n  },\n  \".someday .good .title\": {\n    \"backgroundColor\": \"#aaaaaa\"\n  },\n  \".bad .content\": {\n    \"backgroundColor\": \"#ffddd3\",\n    \"flex\": \"1\",\n    \"padding\": \"10px\"\n  },\n  \".someday .bad .title\": {\n    \"backgroundColor\": \"#666666\",\n    \"color\": \"#ffffff\"\n  },\n  \".someday .good\": {\n    \"backgroundColor\": \"#dddddd\"\n  },\n  \".someday .bad\": {\n    \"backgroundColor\": \"#aaaaaa\"\n  },\n  \".content .name\": {\n    \"height\": \"1.5rem\",\n    \"justifyContent\": \"center\",\n    \"fontSize\": \"1rem\",\n    \"fontWeight\": \"bold\",\n    \"color\": \"#444444\"\n  },\n  \".content .description\": {\n    \"fontSize\": \"0.7rem\",\n    \"fontWeight\": \"normal\",\n    \"color\": \"#777777\"\n  },\n  \".Divne-tip\": {\n    \"padding\": \"10px\",\n    \"flexDirection\": \"row\",\n    \"alignItems\": \"center\"\n  },\n  \".adDivnk\": {\n    \"fontSize\": \"0.5rem\"\n  },\n  \".direction_value\": {\n    \"color\": \"#4a44a4\",\n    \"fontWeight\": \"bold\"\n  },\n  \".someday .direction_value\": {\n    \"color\": \"#888888\"\n  },\n  \".goddes_value\": {\n    \"color\": \"#f87f87\"\n  },\n  \".someday .goddes_value\": {\n    \"color\": \"#777777\"\n  },\n  \".comment\": {\n    \"fontSize\": \"11pt\",\n    \"margin\": \"10px\",\n    \"color\": \"#999999\"\n  },\n  \".spDivt\": {\n    \"fontSize\": \"0.7rem\"\n  }\n}\nmodule.exports = styles;"
  },
  {
    "path": "reactnative/css/game/game2048.js",
    "content": "var styles = {\n  \".container\": {\n    \"paddingTop\": \"0\",\n    \"paddingBottom\": \"0\",\n    \"paddingRight\": \"20pt\",\n    \"paddingLeft\": \"20pt\"\n  },\n  \".heading\": {\n    \"height\": \"80pt\",\n    \"marginTop\": \"40pt\",\n    \"flexDirection\": \"row\"\n  },\n  \".heading .heading-title\": {\n    \"fontSize\": \"48pt\",\n    \"color\": \"#776E65\",\n    \"fontWeight\": \"bold\"\n  },\n  \".heading .scores\": {\n    \"flex\": \"1\",\n    \"flexDirection\": \"row\",\n    \"justifyContent\": \"flex-end\",\n    \"flexWrap\": \"wrap\",\n    \"alignItems\": \"flex-start\"\n  },\n  \".heading .container\": {\n    \"backgroundColor\": \"#bbada0\",\n    \"paddingLeft\": \"15pt\",\n    \"paddingRight\": \"15pt\",\n    \"paddingTop\": \"5pt\",\n    \"paddingBottom\": \"5pt\",\n    \"borderRadius\": \"3pt\",\n    \"marginLeft\": \"5pt\",\n    \"flexDirection\": \"column\",\n    \"alignItems\": \"center\"\n  },\n  \".heading .container-title\": {\n    \"color\": \"#eee4da\",\n    \"textAlign\": \"center\",\n    \"fontWeight\": \"bold\",\n    \"fontSize\": \"12pt\"\n  },\n  \".heading .container-value\": {\n    \"color\": \"#ffffff\",\n    \"textAlign\": \"center\",\n    \"fontSize\": \"24pt\",\n    \"fontWeight\": \"bold\"\n  },\n  \".abovegame\": {\n    \"flexDirection\": \"row\",\n    \"flexWrap\": \"nowrap\",\n    \"marginTop\": \"5pt\"\n  },\n  \".abovegame .textContainer\": {\n    \"flex\": \"1\",\n    \"marginRight\": \"10pt\"\n  },\n  \".abovegame .text\": {\n    \"color\": \"#776E65\",\n    \"fontSize\": \"16pt\",\n    \"lineHeight\": \"26pt\"\n  },\n  \".abovegame .boldText\": {\n    \"fontWeight\": \"bold\"\n  },\n  \".abovegame .newGameContainer\": {\n    \"backgroundColor\": \"#8f7a66\",\n    \"paddingTop\": \"15pt\",\n    \"paddingBottom\": \"15pt\",\n    \"paddingRight\": \"10pt\",\n    \"paddingLeft\": \"10pt\",\n    \"borderRadius\": \"3pt\"\n  }\n}\nmodule.exports = styles;"
  },
  {
    "path": "reactnative/css/jqueryapi.js",
    "content": "var styles = {\n  \".cls1\": {\n    \"color\": \"red\"\n  },\n  \".cls2\": {\n    \"color\": \"yellow\"\n  }\n}\nmodule.exports = styles;"
  },
  {
    "path": "reactnative/css/lightningStorm.js",
    "content": "var styles = {\n  \".custom-native-header\": {\n    \"marginTop\": \"20pt\"\n  },\n  \".native-header\": {\n    \"flexDirection\": \"row\",\n    \"alignItems\": \"center\",\n    \"justifyContent\": \"center\",\n    \"height\": \"40pt\",\n    \"color\": \"#ffffff\",\n    \"backgroundColor\": \"rgb(9,159,222)\",\n    \"marginTop\": \"20pt\"\n  },\n  \".native-header-box\": {\n    \"flex\": \"1\",\n    \"alignItems\": \"center\",\n    \"justifyContent\": \"center\"\n  },\n  \".native-header-title\": {\n    \"color\": \"#ffffff\"\n  },\n  \".native-header-leftButton\": {\n    \"position\": \"absolute\",\n    \"top\": \"0\",\n    \"left\": \"10pt\",\n    \"color\": \"black\"\n  },\n  \".native-header-rightButton\": {\n    \"position\": \"absolute\",\n    \"right\": \"10pt\",\n    \"top\": \"0\",\n    \"backgroundColor\": \"white\"\n  }\n}\nmodule.exports = styles;"
  },
  {
    "path": "reactnative/css/vsImgList.js",
    "content": "var styles = {\n  \".imgList\": {\n    \"position\": \"relative\"\n  },\n  \".float-bg\": {\n    \"backgroundColor\": \"gray\",\n    \"color\": \"#000000\",\n    \"opacity\": \"0.2\",\n    \"height\": \"4rem\",\n    \"width\": \"100%\",\n    \"position\": \"absolute\",\n    \"bottom\": \"0\",\n    \"left\": \"0\"\n  }\n}\nmodule.exports = styles;"
  },
  {
    "path": "reactnative/css/vsIndex.js",
    "content": "var styles = {\n  \"body\": {\n    \"margin\": \"0\",\n    \"padding\": \"0\"\n  },\n  \"#J-block-test\": {\n    \"backgroundColor\": \"yellow\",\n    \"height\": \"2rem\"\n  },\n  \".j-j_j\": {\n    \"color\": \"red\",\n    \"flexDirection\": \"row\",\n    \"justifyContent\": \"center\",\n    \"alignItems\": \"center\"\n  },\n  \".i_i-i\": {\n    \"color\": \"black\"\n  },\n  \".j-j_j.i_i-i\": {\n    \"color\": \"green\"\n  },\n  \".index-contains\": {\n    \"flex\": \"1\",\n    \"alignItems\": \"center\"\n  },\n  \".index-goDiv\": {\n    \"flexDirection\": \"row\",\n    \"alignItems\": \"center\",\n    \"padding\": \"10\",\n    \"justifyContent\": \"center\"\n  },\n  \".index-btn\": {\n    \"flex\": \"1\",\n    \"alignItems\": \"center\",\n    \"justifyContent\": \"center\",\n    \"flexDirection\": \"row\",\n    \"padding\": \"10pt\"\n  },\n  \".index-list-row .index-list-leftImg\": {\n    \"width\": \"3rem\",\n    \"paddingTop\": \".5rem\",\n    \"flexDirection\": \"row\",\n    \"justifyContent\": \"center\"\n  },\n  \".index-list-leftImg-img\": {\n    \"width\": \"2rem\",\n    \"height\": \"2rem\"\n  },\n  \".index-list-row\": {\n    \"flexDirection\": \"row\",\n    \"justifyContent\": \"flex-start\"\n  },\n  \".index-list-row .index-list-rightBox\": {\n    \"flex\": \"1\"\n  },\n  \".index-list-row .index-list-rightBox-row-desc\": {\n    \"backgroundColor\": \"red\"\n  },\n  \".index-list-complexRow .index-list-rightBox .index-list-rightBox-row\": {\n    \"backgroundColor\": \"green\",\n    \"color\": \"red\"\n  },\n  \"#jjj\": {\n    \"backgroundColor\": \"green\"\n  },\n  \"SimpleListView\": {\n    \"backgroundColor\": \"yellow\"\n  }\n}\nmodule.exports = styles;"
  },
  {
    "path": "reactnative/cxylhl.js",
    "content": "includeCSS(\"require('./css/cxylhl/index')\");\n\n/*\n * 注意：本程序中的“随机”都是伪随机概念，以当前的天为种子。\n */\nfunction random(dayseed, indexseed) {\n\tvar n = dayseed % 11117;\n\tfor (var i = 0; i < 100 + indexseed; i++) {\n\t\tn = n * n;\n\t\tn = n % 11117;   // 11117 是个质数\n\t}\n\treturn n;\n}\n\nvar today = new Date();\nvar iday = today.getFullYear() * 10000 + (today.getMonth() + 1) * 100 + today.getDate();\n\nvar weeks = [\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"];\nvar directions = [\"北方\",\"东北方\",\"东方\",\"东南方\",\"南方\",\"西南方\",\"西方\",\"西北方\"];\nvar activities = [\n\t{name:\"写单元测试\", good:\"写单元测试将减少出错\",bad:\"写单元测试会降低你的开发效率\"},\n\t{name:\"洗澡\", good:\"你几天没洗澡了？\",bad:\"会把设计方面的灵感洗掉\", weekend: true},\n\t{name:\"锻炼一下身体\", good:\"\",bad:\"能量没消耗多少，吃得却更多\", weekend: true},\n\t{name:\"抽烟\", good:\"抽烟有利于提神，增加思维敏捷\",bad:\"除非你活够了，死得早点没关系\", weekend: true},\n\t{name:\"白天上线\", good:\"今天白天上线是安全的\",bad:\"可能导致灾难性后果\"},\n\t{name:\"重构\", good:\"代码质量得到提高\",bad:\"你很有可能会陷入泥潭\"},\n\t{name:\"使用%t\", good:\"你看起来更有品位\",bad:\"别人会觉得你在装逼\"},\n\t{name:\"跳槽\", good:\"该放手时就放手\",bad:\"鉴于当前的经济形势，你的下一份工作未必比现在强\"},\n\t{name:\"招人\", good:\"你面前这位有成为牛人的潜质\",bad:\"这人会写程序吗？\"},\n\t{name:\"面试\", good:\"面试官今天心情很好\",bad:\"面试官不爽，会拿你出气\"},\n\t{name:\"提交辞职申请\", good:\"公司找到了一个比你更能干更便宜的家伙，巴不得你赶快滚蛋\",bad:\"鉴于当前的经济形势，你的下一份工作未必比现在强\"},\n\t{name:\"申请加薪\", good:\"老板今天心情很好\",bad:\"公司正在考虑裁员\"},\n\t{name:\"晚上加班\", good:\"晚上是程序员精神最好的时候\",bad:\"\", weekend: true},\n\t{name:\"在妹子面前吹牛\", good:\"改善你矮穷挫的形象\",bad:\"会被识破\", weekend: true},\n\t{name:\"撸管\", good:\"避免缓冲区溢出\",bad:\"强撸灰飞烟灭\", weekend: true},\n\t{name:\"浏览成人网站\", good:\"重拾对生活的信心\",bad:\"你会心神不宁\", weekend: true},\n\t{name:\"命名变量\\\"%v\\\"\", good:\"\",bad:\"\"},\n\t{name:\"写超过%l行的方法\", good:\"你的代码组织的很好，长一点没关系\",bad:\"你的代码将混乱不堪，你自己都看不懂\"},\n\t{name:\"提交代码\", good:\"遇到冲突的几率是最低的\",bad:\"你遇到的一大堆冲突会让你觉得自己是不是时间穿越了\"},\n\t{name:\"代码复审\", good:\"发现重要问题的几率大大增加\",bad:\"你什么问题都发现不了，白白浪费时间\"},\n\t{name:\"开会\", good:\"写代码之余放松一下打个盹，有益健康\",bad:\"小心被扣屎盆子背黑锅\"},\n\t{name:\"打DOTA\", good:\"你将有如神助\",bad:\"你会被虐的很惨\", weekend: true},\n\t{name:\"晚上上线\", good:\"晚上是程序员精神最好的时候\",bad:\"你白天已经筋疲力尽了\"},\n\t{name:\"修复BUG\", good:\"你今天对BUG的嗅觉大大提高\",bad:\"新产生的BUG将比修复的更多\"},\n\t{name:\"设计评审\", good:\"设计评审会议将变成头脑风暴\",bad:\"人人筋疲力尽，评审就这么过了\"},\n\t{name:\"需求评审\", good:\"\",bad:\"\"},\n\t{name:\"上微博\", good:\"今天发生的事不能错过\",bad:\"今天的微博充满负能量\", weekend: true},\n\t{name:\"上AB站\", good:\"还需要理由吗？\",bad:\"满屏兄贵亮瞎你的眼\", weekend: true},\n\t{name:\"玩FlappyBird\", good:\"今天破纪录的几率很高\",bad:\"除非你想玩到把手机砸了\", weekend: true}\n];\n\nvar specials = [\n\t{date:20140214, type:'bad', name:'待在男（女）友身边', description:'脱团火葬场，入团保平安。'}\n];\n\nvar tools = [\"Eclipse写程序\", \"MSOffice写文档\", \"记事本写程序\", \"Windows8\", \"Linux\", \"MacOS\", \"IE\", \"Android设备\", \"iOS设备\"];\n\nvar varNames = [\"jieguo\", \"huodong\", \"pay\", \"expire\", \"zhangdan\", \"every\", \"free\", \"i1\", \"a\", \"virtual\", \"ad\", \"spider\", \"mima\", \"pass\", \"ui\"];\n\nvar drinks = [\"水\",\"茶\",\"红茶\",\"绿茶\",\"咖啡\",\"奶茶\",\"可乐\",\"鲜奶\",\"豆奶\",\"果汁\",\"果味汽水\",\"苏打水\",\"运动饮料\",\"酸奶\",\"酒\"];\n\nfunction is_someday() {\n\treturn today.getMonth() == 5 && today.getDate() == 4;\n}\n\nfunction getTodayString() {\n\treturn \"今天是\" + today.getFullYear() + \"年\" + (today.getMonth() + 1) + \"月\" + today.getDate() + \"日 星期\" + weeks[today.getDay()];\n}\n\nfunction star(num) {\n\tvar result = \"\";\n\tvar i = 0;\n\twhile (i < num) {\n\t\tresult += \"★\";\n\t\ti++;\n\t}\n\twhile(i < 5) {\n\t\tresult += \"☆\";\n\t\ti++;\n\t}\n\treturn result;\n} \n\n// 生成今日运势\nfunction pickTodaysLuck(good, bad) {\n  var _activities = filter(activities);\n    \n\tvar numGood = random(iday, 98) % 3 + 2;\n\tvar numBad = random(iday, 87) % 3 + 2;\n\tvar eventArr = pickRandomActivity(_activities, numGood + numBad);\n\t\n\tvar specialSize = pickSpecials();\n\t\n\n\t\n\tfor (var i = 0; i < numGood; i++) {\n\t\tgood.push(eventArr[i]);\n\t}\n\t\n\tfor (var i = 0; i < numBad; i++) {\n\t\tbad.push(eventArr[numGood + i]);\n\t}\n}\n\n// 去掉一些不合今日的事件\nfunction filter(activities) {\n    var result = [];\n    \n    // 周末的话，只留下 weekend = true 的事件\n    if (isWeekend()) {\n        \n        for (var i = 0; i < activities.length; i++) {\n            if (activities[i].weekend) {\n                result.push(activities[i]);\n            }\n        }\n        \n        return result;\n    }\n    \n    return activities;\n}\n\nfunction isWeekend() {\n    return today.getDay() == 0 || today.getDay() == 6;\n}\n\n// 添加预定义事件\nfunction pickSpecials() {\n\tvar specialSize = [0,0];\n\t\n\tfor (var i = 0; i < specials.length; i++) {\n\t\tvar special = specials[i];\n\t\t\n\t\tif (iday == special.date) {\n\t\t\tif (special.type == 'good') {\n\t\t\t\tspecialSize[0]++;\n\t\t\t\taddToGood({name: special.name, good: special.description});\n\t\t\t} else {\n\t\t\t\tspecialSize[1]++;\n\t\t\t\taddToBad({name: special.name, bad: special.description});\n\t\t\t}\n\t\t}\n\t}\n\t\n\treturn specialSize;\n}\n\n// 从 activities 中随机挑选 size 个\nfunction pickRandomActivity(activities, size) {\n\tvar picked_events = pickRandom(activities, size);\n\t\n\tfor (var i = 0; i < picked_events.length; i++) {\n\t\tpicked_events[i] = parse(picked_events[i]);\n\t}\n\t\n\treturn picked_events;\n}\n\n// 从数组中随机挑选 size 个\nfunction pickRandom(array, size) {\n\tvar result = [];\n\t\n\tfor (var i = 0; i < array.length; i++) {\n\t\tresult.push(array[i]);\n\t}\n\t\n\tfor (var j = 0; j < array.length - size; j++) {\n\t\tvar index = random(iday, j) % result.length;\n\t\tresult.splice(index, 1);\n\t}\n\t\n\treturn result;\n}\n\n// 解析占位符并替换成随机内容\nfunction parse(event) {\n\tvar result = {name: event.name, good: event.good, bad: event.bad};  // clone\n\t\n\tif (result.name.indexOf('%v') != -1) {\n\t\tresult.name = result.name.replace('%v', varNames[random(iday, 12) % varNames.length]);\n\t}\n\t\n\tif (result.name.indexOf('%t') != -1) {\n\t\tresult.name = result.name.replace('%t', tools[random(iday, 11) % tools.length]);\n\t}\n\t\n\tif (result.name.indexOf('%l') != -1) {\n\t\tresult.name = result.name.replace('%l', (random(iday, 12) % 247 + 30).toString());\n\t}\n\t\n\treturn result;\n}\n\n\n\n// 添加到“宜”\nfunction addToGood(event) {\n\t$('.good .content ul').append('<li><div className=\"name\">' + event.name + '</div><div className=\"description\">' + event.good + '</div></li>');\n}\n\n// 添加到“不宜”\nfunction addToBad(event) {\n\t$('.bad .content ul').append('<li><div className=\"name\">' + event.name + '</div><div className=\"description\">' + event.bad + '</div></li>');\n}\n\n\n\n(class CXYLHL extends App {\n\tconstructor(){\n\t\tsuper();\n\t\tthis.state = {\n\t\t\t\tbodyClass: ''\n\t\t};\n\t\tif (is_someday()) {\n\t\t\tthis.state.bodyClass = 'someday'\n\t\t}\n\t\tthis.state.good = [];\n\t\tthis.state.bad = [];\n\t\tpickTodaysLuck(this.state.good, this.state.bad);\n\t}\n\tacomponentDidMount(){\n\t\tpickTodaysLuck();\n\t}\n\t\n\t\n\trender() {\n\t\treturn (\n\t\t\t\t<Body>\n\t\t<Div id=\"J_body\" className={this.state.bodyClass}>\n\t\t\t<Div className=\"container\">\n\t\t\t\t<Header>\n\t\t\t\t\t<Div className=\"title\">\n\t\t\t\t\t\t<Div className=\"header\"><Span>程序员老黄历</Span><Div className=\"sup\">beta</Div></Div>\n\t\t\t\t\t</Div>\n\t\t\t\t</Header>\n\t\t\t\t<Div className=\"date\">\n\t\t\t\t\t{getTodayString()}\n\t\t\t\t</Div>\n\t\t\t\t<Div className=\"good\">\n\t\t\t\t\t<Div className=\"title\">\n\t\t\t\t\t\t<Div>\n\t\t\t\t\t\t\t<Div className=\"b\">宜</Div>\n\t\t\t\t\t\t</Div>\n\t\t\t\t\t</Div>\n\t\t\t\t\t<Div className=\"content\">\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.state.good.map(function(event, i){\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Div key={i}>\n\t\t\t\t\t\t\t\t\t\t\t<Div className=\"name\">{event.name}</Div><Div className=\"description\">{event.good}</Div>\n\t\t\t\t\t\t\t\t\t\t</Div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t</Div>\n\t\t\t\t</Div>\n\t\t\t\t<Div className=\"spDivt\"></Div>\n\t\t\t\t<Div className=\"bad\">\n\t\t\t\t\t<Div className=\"title\">\n\t\t\t\t\t\t<Div>\n\t\t\t\t\t\t\t<Div className=\"b\">不宜</Div>\n\t\t\t\t\t\t</Div>\n\t\t\t\t\t</Div>\n\t\t\t\t\t<Div className=\"content\">\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.state.bad.map(function(event, i){\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Div key={i}>\n\t\t\t\t\t\t\t\t\t\t\t<Div className=\"name\">{event.name}</Div><Div className=\"description\">{event.good}</Div>\n\t\t\t\t\t\t\t\t\t\t</Div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t</Div>\n\t\t\t\t</Div>\n\t\t\t\t<Div className=\"spDivt\">\n\t\t\t\t\t<Span className=\"Divne-tip\">\n\t\t\t\t\t\t<Span>座位朝向：</Span>面向<Span className=\"direction_value\">{directions[random(iday, 2) % directions.length]}</Span><Span>写程序，BUG 最少。</Span>\n\t\t\t\t\t</Span>\n\t\t\t\t\t<Span className=\"Divne-tip\">\n\t\t\t\t\t\t<Span>今日宜饮：</Span><Span className=\"drink_value\">{pickRandom(drinks,2).join('，')}</Span>\n\t\t\t\t\t</Span>\n\t\t\t\t\t<Span className=\"Divne-tip\">\n\t\t\t\t\t\t<Span>女神亲近指数：</Span><Span className=\"goddes_value\">{star(random(iday, 6) % 5 + 1)}</Span>\n\t\t\t\t\t</Span>\n\n\t\t\t\t</Div>\n\t\t\t\t\n\t\t\t\t<Div className=\"comment\">\n\t\t\t\t\t<Div>\n\t\t\t\t\t\t<Div>本老黄历尚处于beta阶段，作者随时会修改，所以如果上午看到的内容跟下午不同，请勿惊慌；</Div>\n\t\t\t\t\t\t<Div>本老黄历仅面向程序员；</Div>\n\t\t\t\t\t\t<Div>本老黄历内容是程序生成的，因为只有这样程序员才会信。</Div>\n\t\t\t\t\t</Div>\n\t\t\t\t</Div>\n\t\t\t</Div>\n\t\t</Div>\n\t\t</Body>\n\t\t);\n\t}\n\t\n}).run();\n\n\n"
  },
  {
    "path": "reactnative/example_addEventListener.js",
    "content": "import './common/LightningStorm';\n\n(class TestPage extends App{\n\tcomponentDidMount(){\n\t\t$('#J2').addEventListener('click', function(){\n\t\t\talert(3);\n\t\t})\n\t}\n\trender(){\n\t\treturn (\n\t\t\t<Div id=\"J1\">\n\t\t\t\t<Div id=\"J2\">\n\t\t\t\t\t这是一个addEventListener的例子，并且支持冒泡，你可以修改index.ios.js，删除index,改成import这个例子的\n\t\t\t\t</Div>\n\t\t\t</Div>\n\t\t);\n\t\t\n\t}\n}).run();\n\n\n"
  },
  {
    "path": "reactnative/example_animation.js",
    "content": "import './common/LightningStorm';\n\nvar anim = require('./common/Animation');\n\n(class Text extends App{\n\tcomponentDidMount(){\n\t\t$('#J1').animate({\n\t\t\tduration : 1000,\n\t\t\tfrom : {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: '0pt',\n\t\t\t\tleft: 0,\n\t\t\t},\n\t\t\tto : {\n\t\t\t\ttop: '100pt',\n\t\t\t\tleft: '100pt'\n\t\t\t}\n\t\t})\n\t}\n\trender(){\n\t\treturn (\n\t\t\t\t<Div id=\"J1\" style={{marginTop:40}}>zxczxc</Div>\n\t\t)\n\t}\n}).run();"
  },
  {
    "path": "reactnative/example_formElement.js",
    "content": "import './common/LightningStorm';\n\n(class TestPage extends App{\n\tcomponentDidMount(){\n\t\tsetTimeout(async ()=>{\n\t\t\tvar a= await $('#J1').measure();\n\t\t\tconsole.debug(a);\n\t\t},0);\n\t}\n\trender(){\n\t\treturn (\n\t\t\t<Div id=\"J1\">\n\t\t\t\t<Div id=\"J2\">\n\t\t\t\t\t这是一个表单的例子，你可以修改index.ios.js，删除index,改成import这个例子的\n\t\t\t\t\t<Div>\n\t\t\t\t\t\t<Div>input text</Div>\n\t\t\t\t\t\t<Div>\n\t\t\t\t\t\t\t<Input type=\"text\" id=\"J_k\" placeholder=\"key\" value=\"key\"/>\n\t\t\t\t\t\t</Div>\n\t\t\t\t\t</Div>\n\t\t\t\t\t<Div>\n\t\t\t\t\t\t<Div>button</Div>\n\t\t\t\t\t\t<Div>\n\t\t\t\t\t\t\t<Button onClick={(e)=>{alert('receive!')}}>click</Button>\n\t\t\t\t\t\t</Div>\n\t\t\t\t\t</Div>\n\t\t\t\t</Div>\n\t\t\t</Div>\n\t\t);\n\t\t\n\t}\n}).run();\n\n"
  },
  {
    "path": "reactnative/example_jqueryapi.js",
    "content": "import './common/LightningStorm';\nincludeCSS(\"require('./css/jqueryapi')\");\n\n(class TestPage extends App{\n\trender(){\n\t\treturn (\n\t\t\t<Div id=\"J1\" onClick={()=>{alert(1)}}>\n\t\t\t\t<Div id=\"J2\" onClick={()=>{alert(2)}}>\n\t\t\t\t\t对于jQuery API的测试，你可以测试这个节点有哪些常用的api可以操作\n\t\t\t\t</Div>\n\t\t\t\t<Button onClick={this.btn1.bind(this)}>addClass cls2</Button>\n\t\t\t\t<Button onClick={this.btn2.bind(this)}>addClass cls1</Button>\n\t\t\t\t<Button onClick={this.btn3.bind(this)}>removeClass cls1</Button>\n\t\t\t\t<Button onClick={this.btn4.bind(this)}>removeClass cls2</Button>\n\t\t\t</Div>\n\t\t)\n\t\t\n\t}\n\tbtn1(){\n\t\t$('#J2').addClass('cls2');\n\t\tconsole.debug($('#J2').classList)\n\t}\n\tbtn2(){\n\t\t$('#J2').addClass('cls1');\n\t\tconsole.debug($('#J2').classList)\n\t}\n\tbtn3(){\n\t\t$('#J2').removeClass('cls2');\n\t\tconsole.debug($('#J2').classList)\n\t}\n\tbtn4(){\n\t\t$('#J2').removeClass('cls1');\n\t\tconsole.debug($('#J2').classList)\n\t}\n}).run();"
  },
  {
    "path": "reactnative/example_listview.js",
    "content": "includeCSS(\"require('./css/vsIndex')\");\n\nclass vsIndex extends Element {\n\tconstructor(){\n\t\tsuper();\n\t\tthis.state = {\n\t\t\tdataSource: SimpleListView.initDataSource(),\n\t\t}\n\t}\n\trender() {\n\t\treturn (\n<Div style={{height: windowHeight}}>\n\t<Header title=\"维多利亚的秘密\" leftButton={null}></Header>\n\t<Div id=\"J-block-test\" className=\"j-j_j i_i-i\">测试水平居中垂直居中</Div>\n\t\n\t<SimpleListView className=\"listPage-listView iiii\" dataSource={this.state.dataSource}\n\trenderRow={this._renderRow}></SimpleListView>\n</Div>\n\n\t\t);\n\t}\n\tcomponentDidMount(){\n\t\tvar self = this;\n\t\tfetch('http://statics1.jiaru.club/react-native-example/list.js',\n\t\t\t\t{method:'get',headers:{'Content-Type':'application/json;charset=utf-8'},\n\t\t\t//body: [''].join('')\n\t\t\t\t}\n\t\t).then(function(req){\n\t\t\treq.json().then(function(res){\n\t\t\t\tvar o = self.state.dataSource.cloneWithRows(res.list);\n\t\t\t\tself.setState({\n\t\t\t\t\tdataSource: o\n\t\t\t    });\n\t\t\t})\n\t\t})\n\t}\n\t_renderRow(row, sid, rowid){\n\t\treturn <Row data={arguments} jumpFn={this.jumpFn}/>;\n\t}\n}\nclass Row extends Element{\n\tconstructor(){\n\t\tsuper();\n\t\tthis.state = {\n\t\t\t\tnumberOfLines: 3\n\t\t}\n\t}\n\trender(){\n\t\tvar row = this.props.data[0];\n\t\tvar rowid = this.props.data[2];\n\t\treturn (\n\t<Div className={\"index-list-row\" + (rowid%2==0?\" index-list-complexRow\":\"\")}>\n\t\t<Div className=\"index-list-leftImg\" onClick={this.jumpImgList.bind(this)}>\n\t\t\t<Img className=\"index-list-leftImg-img\" src={row.smallpic} />\n\t\t</Div>\n\t\t<Div className=\"index-list-rightBox\">\n\t\t\t<Span className=\"index-list-rightBox-row\">\n\t\t\t\t<Span>姓名：</Span>\n\t\t\t\t<Span>{row.name}</Span>\n\t\t\t</Span>\n\t\t\t<Div onClick={this.collapse.bind(this)}>\n\t\t\t\t<Span ref=\"J_r\" numberOfLines={this.state.numberOfLines} className=\"index-list-rightBox-row-desc\">\n\t\t\t\t\t<Span>简介：</Span>\n\t\t\t\t\t<Span >{row.desc}</Span>\n\t\t\t\t</Span>\n\t\t\t</Div>\n\t\t</Div>\n\t</Div>\n\t\t);\n\t}\n\tcollapse(){\n\t\tif(this.state.numberOfLines == 3){\n\t\t\tthis.setState({\n\t\t\t\tnumberOfLines: null\n\t\t\t})\n\t\t}else{\n\t\t\tthis.setState({\n\t\t\t\tnumberOfLines: 3\n\t\t\t})\n\t\t}\n\t}\n\tjumpImgList(){\n\t\tpageRoute.push({\n\t\t\tpage: require('./vsImgList'),\n\t\t\ta: 1,\n\t\t\tb: 2,\n\t\t\tc: 3\n\t\t})\n\t}\n}\n\n\nmodule.exports = vsIndex;\n"
  },
  {
    "path": "reactnative/example_localStorage.js",
    "content": "import './common/LightningStorm';\n\n(class TestPage extends App{\n\trender(){\n\t\treturn (\n\t\t\t<Div id=\"J1\">\n\t\t\t\t<Div id=\"J2\">\n\t\t\t\t\t这是一个localStorage的例子，你可以修改index.ios.js，删除index,改成import这个例子的\n\t\t\t\t\t<Div style={{display: 'flex', flexDirection: 'row'}}>\n\t\t\t\t\t\t<Span>key:</Span>\n\t\t\t\t\t\t<Input id=\"J_k\" placeholder=\"key\" value=\"key\"/>\n\t\t\t\t\t\t<Span>value:</Span>\n\t\t\t\t\t\t<Input id=\"J_v\" placeholder=\"value\"/>\n\t\t\t\t\t</Div>\n\t\t\t\t\t<Button  onClick={()=>{this.testLocalStorage()}} style={{height: 60,width: 100}}>保存到localStorage</Button>\n\t\t\t\t\t<Div style={{height: 20,alignItems: 'center'}} >-----------</Div>\n\t\t\t\t\t<Button  onClick={()=>{this.loadLocalStorage()}}>查看保存到localStorage的内容</Button>\n\t\t\t\t</Div>\n\t\t\t</Div>\n\t\t);\n\t\t\n\t}\n\tasync testLocalStorage(){\n\t\tconsole.debug('key is',$('#J_k').value);\n\t\tvar key = $('#J_k').val();\n\t\tif(key){\n\t\t\tconsole.debug('value is',$('#J_v').value);\n\t\t\tconsole.debug($('#J_v').value);\n\t\t\tawait localStorage.setItem(key, $('#J_v').value);\n\t\t\talert('save success!');\n\t\t}\n\t\t\n\t}\n\tasync loadLocalStorage(){\n\t\tvar c = await localStorage.json();\n\t\talert(JSON.stringify(c));\n\t\t\n\t}\n}).run();\n\n\n"
  },
  {
    "path": "reactnative/example_onclick.js",
    "content": "import './common/LightningStorm';\n\n(class TestPage extends App{\n\trender(){\n\t\treturn (\n\t\t\t<Div id=\"J1\" onClick={()=>{alert(1)}}>\n\t\t\t\t<Div id=\"J2\" onClick={()=>{alert(2)}}>\n\t\t\t\t\t这是一个点击事件的例子，并且支持冒泡，你可以修改index.ios.js，删除index,改成import这个例子的\n\t\t\t\t</Div>\n\t\t\t</Div>\n\t\t);\n\t\t\n\t}\n}).run();\n\n\n"
  },
  {
    "path": "reactnative/example_ontouch.js",
    "content": "import './common/LightningStorm';\n\n(class TestPage extends App{\n\trender(){\n\t\treturn (\n\t\t\t<Div id=\"J1\" onTouchStart={(e)=>{console.log(e)}}>\n\t\t\t\t<Div id=\"J2\" onTouchMove={(e)=>{console.log(e)}}>\n\t\t\t\t\t这是一个Touch的例子，并且支持冒泡，你可以修改index.ios.js，删除index,改成import这个例子的\n\t\t\t\t</Div>\n\t\t\t</Div>\n\t\t);\n\t\t\n\t}\n}).run();\n"
  },
  {
    "path": "reactnative/example_view.js",
    "content": "import './common/LightningStorm';\n\n\n(class Test extends App{\n\tconstructor(){\n\t\tsuper();\n\t}\n\trender(){\n\t\treturn (\n\t\t\t<TouchableWithoutFeedback onTouchStart={(e)=>{console.debug(e)}} onTouchMove={(e)=>{console.debug(e)}}>\n\t\t\t\t<Text>qlwekqlw;jeqkwjelqwjelkqwjelkqwjlejqwlkjk</Text>\n\t\t\t</TouchableWithoutFeedback>\n\t\t);\n\t}\n}).run();"
  },
  {
    "path": "reactnative/index.android.js",
    "content": "/**\n * index.android.js文件变成了区分ios平台还是安卓平台的工具，主入口改成了index.js\n */\nimport './common/LightningStorm';\n\n\nimport './index.js';"
  },
  {
    "path": "reactnative/index.ios.js",
    "content": "/**\n * index.ios.js文件变成了区分ios平台还是安卓平台的工具，主入口改成了index.js\n */\nimport './common/LightningStorm';\nincludeCSS(\"require('./css/lightningStorm')\");\n\nimport './cxylhl.js';"
  },
  {
    "path": "reactnative/index.js",
    "content": "/**\n * 定义公共的全局变量，比如图片使用的cdn地址\n */\nwindow.IMG_CDN_PREFIX = 'http://cdn.taobao.com/';\n\n//导入UI的css\nincludeCSS(\"require('./css/lightningStorm')\");\n\n/**\n * 首页的例子代码如下, 只是初始化一个导航栏，未来应该会包装掉这个导航栏\n */\n(class HomePage extends App{\n\trender() {\n\t\t  return (\n\t\t\t\t  <Navigator\n\t\t\t    \t  initialRoute={{page: require('./vsIndex')}}\n\t\t\t    \t  renderScene={(route, navigator) => {\n\t\t\t    \t\t  window.pageRoute = navigator;\n\t\t\t    \t      return React.createElement(route.page, Object.assign({navigator: navigator}, route));\n\t\t\t    \t  }}\n\t\t\t\t  />\n\t\t  );\n\t}\n}).run();\n"
  },
  {
    "path": "reactnative/ios/native/AppDelegate.h",
    "content": "/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (nonatomic, strong) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "reactnative/ios/native/AppDelegate.m",
    "content": "/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n#import \"AppDelegate.h\"\n\n#import \"RCTRootView.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n  NSURL *jsCodeLocation;\n\n  /**\n   * Loading JavaScript code - uncomment the one you want.\n   *\n   * OPTION 1\n   * Load from development server. Start the server from the repository root:\n   *\n   * $ npm start\n   *\n   * To run on device, change `localhost` to the IP address of your computer\n   * (you can get this by typing `ifconfig` into the terminal and selecting the\n   * `inet` value under `en0:`) and make sure your computer and iOS device are\n   * on the same Wi-Fi network.\n   */\n\n  jsCodeLocation = [NSURL URLWithString:@\"http://localhost:8081/index.ios.bundle?platform=ios&dev=true\"];\n\n  /**\n   * OPTION 2\n   * Load from pre-bundled file on disk. The static bundle is automatically\n   * generated by \"Bundle React Native code and images\" build step.\n   */\n\n//   jsCodeLocation = [[NSBundle mainBundle] URLForResource:@\"main\" withExtension:@\"jsbundle\"];\n\n  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation\n                                                      moduleName:@\"native\"\n                                               initialProperties:nil\n                                                   launchOptions:launchOptions];\n\n  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n  UIViewController *rootViewController = [UIViewController new];\n  rootViewController.view = rootView;\n  self.window.rootViewController = rootViewController;\n  [self.window makeKeyAndVisible];\n  return YES;\n}\n\n@end\n"
  },
  {
    "path": "reactnative/ios/native/Base.lproj/LaunchScreen.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"9531\" systemVersion=\"14F1021\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"9529\"/>\n        <capability name=\"Aspect ratio constraints\" minToolsVersion=\"5.1\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\"/>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view contentMode=\"scaleToFill\" id=\"iN0-l3-epB\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Powered by xueduanyang\" textAlignment=\"center\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" minimumFontSize=\"9\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"8ie-xW-0ye\">\n                    <rect key=\"frame\" x=\"20\" y=\"527\" width=\"281\" height=\"20.5\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <color key=\"textColor\" red=\"0.0\" green=\"0.0\" blue=\"0.0\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"icon－1024\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"cf5-SG-caR\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"124\" width=\"320\" height=\"320\"/>\n                    <constraints>\n                        <constraint firstAttribute=\"width\" secondItem=\"cf5-SG-caR\" secondAttribute=\"height\" multiplier=\"1:1\" id=\"d9d-dV-gks\"/>\n                    </constraints>\n                </imageView>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"0.95686274509803915\" green=\"0.88235294117647056\" blue=\"0.73725490196078436\" alpha=\"1\" colorSpace=\"calibratedRGB\"/>\n            <constraints>\n                <constraint firstItem=\"cf5-SG-caR\" firstAttribute=\"trailing\" secondItem=\"iN0-l3-epB\" secondAttribute=\"trailing\" id=\"87u-wi-gOf\"/>\n                <constraint firstItem=\"cf5-SG-caR\" firstAttribute=\"centerX\" secondItem=\"iN0-l3-epB\" secondAttribute=\"centerX\" id=\"IbD-Vz-X4w\"/>\n                <constraint firstAttribute=\"bottom\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"bottom\" constant=\"20\" id=\"Kzo-t9-V3l\"/>\n                <constraint firstItem=\"8ie-xW-0ye\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" constant=\"20\" symbolic=\"YES\" id=\"MfP-vx-nX0\"/>\n                <constraint firstAttribute=\"centerX\" secondItem=\"8ie-xW-0ye\" secondAttribute=\"centerX\" id=\"ZEH-qu-HZ9\"/>\n                <constraint firstItem=\"cf5-SG-caR\" firstAttribute=\"centerY\" secondItem=\"iN0-l3-epB\" secondAttribute=\"centerY\" id=\"k9T-d1-e9a\"/>\n                <constraint firstItem=\"cf5-SG-caR\" firstAttribute=\"leading\" secondItem=\"iN0-l3-epB\" secondAttribute=\"leading\" id=\"s9n-kQ-MbD\"/>\n            </constraints>\n            <nil key=\"simulatedStatusBarMetrics\"/>\n            <simulatedScreenMetrics key=\"simulatedDestinationMetrics\" type=\"retina4\"/>\n            <point key=\"canvasLocation\" x=\"548\" y=\"455\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"icon－1024\" width=\"512\" height=\"512\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "reactnative/ios/native/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"icon-60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "reactnative/ios/native/Images.xcassets/Brand Assets.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"minimum-system-version\" : \"7.0\",\n      \"subtype\" : \"retina4\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "reactnative/ios/native/Images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "reactnative/ios/native/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"8.0\",\n      \"subtype\" : \"736h\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"8.0\",\n      \"subtype\" : \"736h\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"8.0\",\n      \"subtype\" : \"667h\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"subtype\" : \"retina4\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Default@2x.png\",\n      \"extent\" : \"full-screen\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"subtype\" : \"retina4\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "reactnative/ios/native/Images.xcassets/icon－1024.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"icon－1024@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "reactnative/ios/native/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>zh_CN</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>2</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSLocationWhenInUseUsageDescription</key>\n\t<string></string>\n\t<key>UILaunchImages</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>UILaunchImageName</key>\n\t\t\t<string>Default-568</string>\n\t\t\t<key>UILaunchImageSize</key>\n\t\t\t<string>{320,568}</string>\n\t\t</dict>\n\t</array>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "reactnative/ios/native/main.m",
    "content": "/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n#import <UIKit/UIKit.h>\n\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n  @autoreleasepool {\n    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n  }\n}\n"
  },
  {
    "path": "reactnative/ios/native.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };\n\t\t00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };\n\t\t00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };\n\t\t00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };\n\t\t00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };\n\t\t00E356F31AD99517003FC87E /* nativeTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* nativeTests.m */; };\n\t\t133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };\n\t\t139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };\n\t\t139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };\n\t\t13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };\n\t\t13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };\n\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };\n\t\t13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };\n\t\t146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };\n\t\t832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };\n\t\t84A404191C7EFBB100BCCEEA /* Default-568@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 84A404181C7EFBB100BCCEEA /* Default-568@2x.png */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 134814201AA4EA6300B7C361;\n\t\t\tremoteInfo = RCTActionSheet;\n\t\t};\n\t\t00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 134814201AA4EA6300B7C361;\n\t\t\tremoteInfo = RCTGeolocation;\n\t\t};\n\t\t00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 58B5115D1A9E6B3D00147676;\n\t\t\tremoteInfo = RCTImage;\n\t\t};\n\t\t00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 58B511DB1A9E6C8500147676;\n\t\t\tremoteInfo = RCTNetwork;\n\t\t};\n\t\t00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 832C81801AAF6DEF007FA2F7;\n\t\t\tremoteInfo = RCTVibration;\n\t\t};\n\t\t00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 13B07F861A680F5B00A75B9A;\n\t\t\tremoteInfo = native;\n\t\t};\n\t\t139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 134814201AA4EA6300B7C361;\n\t\t\tremoteInfo = RCTSettings;\n\t\t};\n\t\t139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 3C86DF461ADF2C930047B81A;\n\t\t\tremoteInfo = RCTWebSocket;\n\t\t};\n\t\t146834031AC3E56700842450 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;\n\t\t\tremoteInfo = React;\n\t\t};\n\t\t78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 134814201AA4EA6300B7C361;\n\t\t\tremoteInfo = RCTLinking;\n\t\t};\n\t\t832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;\n\t\t\tproxyType = 2;\n\t\t\tremoteGlobalIDString = 58B5119B1A9E6C1200147676;\n\t\t\tremoteInfo = RCTText;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = \"<group>\"; };\n\t\t00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTActionSheet.xcodeproj; path = \"../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTGeolocation.xcodeproj; path = \"../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTImage.xcodeproj; path = \"../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTNetwork.xcodeproj; path = \"../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTVibration.xcodeproj; path = \"../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t00E356EE1AD99517003FC87E /* nativeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = nativeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t00E356F21AD99517003FC87E /* nativeTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = nativeTests.m; sourceTree = \"<group>\"; };\n\t\t139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTSettings.xcodeproj; path = \"../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTWebSocket.xcodeproj; path = \"../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t13B07F961A680F5B00A75B9A /* native.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = native.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = native/AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = native/AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = \"<group>\"; };\n\t\t13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = native/Images.xcassets; sourceTree = \"<group>\"; };\n\t\t13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = native/Info.plist; sourceTree = \"<group>\"; };\n\t\t13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = native/main.m; sourceTree = \"<group>\"; };\n\t\t146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = React.xcodeproj; path = \"../node_modules/react-native/React/React.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTLinking.xcodeproj; path = \"../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = RCTText.xcodeproj; path = \"../node_modules/react-native/Libraries/Text/RCTText.xcodeproj\"; sourceTree = \"<group>\"; };\n\t\t84A404181C7EFBB100BCCEEA /* Default-568@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = \"Default-568@2x.png\"; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t00E356EB1AD99517003FC87E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t146834051AC3E58100842450 /* libReact.a in Frameworks */,\n\t\t\t\t00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,\n\t\t\t\t00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,\n\t\t\t\t00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,\n\t\t\t\t133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,\n\t\t\t\t00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,\n\t\t\t\t139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,\n\t\t\t\t832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,\n\t\t\t\t00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,\n\t\t\t\t139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t00C302A81ABCB8CE00DB3ED1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00C302B61ABCB90400DB3ED1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00C302BC1ABCB91800DB3ED1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00C302D41ABCB9D200DB3ED1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00C302E01ABCB9EE00DB3ED1 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00E356EF1AD99517003FC87E /* nativeTests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00E356F21AD99517003FC87E /* nativeTests.m */,\n\t\t\t\t00E356F01AD99517003FC87E /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = nativeTests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t00E356F01AD99517003FC87E /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t00E356F11AD99517003FC87E /* Info.plist */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t139105B71AF99BAD00B5F7CC /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t139FDEE71B06529A00C62182 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t13B07FAE1A68108700A75B9A /* native */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t008F07F21AC5B25A0029DE68 /* main.jsbundle */,\n\t\t\t\t13B07FAF1A68108700A75B9A /* AppDelegate.h */,\n\t\t\t\t13B07FB01A68108700A75B9A /* AppDelegate.m */,\n\t\t\t\t13B07FB51A68108700A75B9A /* Images.xcassets */,\n\t\t\t\t13B07FB61A68108700A75B9A /* Info.plist */,\n\t\t\t\t13B07FB11A68108700A75B9A /* LaunchScreen.xib */,\n\t\t\t\t13B07FB71A68108700A75B9A /* main.m */,\n\t\t\t);\n\t\t\tname = native;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t146834001AC3E56700842450 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t146834041AC3E56700842450 /* libReact.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t78C398B11ACF4ADC00677621 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t78C398B91ACF4ADC00677621 /* libRCTLinking.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t832341AE1AAA6A7D00B99B32 /* Libraries */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t146833FF1AC3E56700842450 /* React.xcodeproj */,\n\t\t\t\t00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,\n\t\t\t\t00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,\n\t\t\t\t00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,\n\t\t\t\t78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,\n\t\t\t\t00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,\n\t\t\t\t139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,\n\t\t\t\t832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,\n\t\t\t\t00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,\n\t\t\t\t139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,\n\t\t\t);\n\t\t\tname = Libraries;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t832341B11AAA6A8300B99B32 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t832341B51AAA6A8300B99B32 /* libRCTText.a */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t83CBB9F61A601CBA00E9B192 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t84A404181C7EFBB100BCCEEA /* Default-568@2x.png */,\n\t\t\t\t13B07FAE1A68108700A75B9A /* native */,\n\t\t\t\t832341AE1AAA6A7D00B99B32 /* Libraries */,\n\t\t\t\t00E356EF1AD99517003FC87E /* nativeTests */,\n\t\t\t\t83CBBA001A601CBA00E9B192 /* Products */,\n\t\t\t);\n\t\t\tindentWidth = 2;\n\t\t\tsourceTree = \"<group>\";\n\t\t\ttabWidth = 2;\n\t\t};\n\t\t83CBBA001A601CBA00E9B192 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07F961A680F5B00A75B9A /* native.app */,\n\t\t\t\t00E356EE1AD99517003FC87E /* nativeTests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t00E356ED1AD99517003FC87E /* nativeTests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"nativeTests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t00E356EA1AD99517003FC87E /* Sources */,\n\t\t\t\t00E356EB1AD99517003FC87E /* Frameworks */,\n\t\t\t\t00E356EC1AD99517003FC87E /* Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = nativeTests;\n\t\t\tproductName = nativeTests;\n\t\t\tproductReference = 00E356EE1AD99517003FC87E /* nativeTests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n\t\t13B07F861A680F5B00A75B9A /* native */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"native\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t13B07F871A680F5B00A75B9A /* Sources */,\n\t\t\t\t13B07F8C1A680F5B00A75B9A /* Frameworks */,\n\t\t\t\t13B07F8E1A680F5B00A75B9A /* Resources */,\n\t\t\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = native;\n\t\t\tproductName = \"Hello World\";\n\t\t\tproductReference = 13B07F961A680F5B00A75B9A /* native.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t83CBB9F71A601CBA00E9B192 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0610;\n\t\t\t\tORGANIZATIONNAME = Facebook;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t00E356ED1AD99517003FC87E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 6.2;\n\t\t\t\t\t\tTestTargetID = 13B07F861A680F5B00A75B9A;\n\t\t\t\t\t};\n\t\t\t\t\t13B07F861A680F5B00A75B9A = {\n\t\t\t\t\t\tDevelopmentTeam = B6E32U87S9;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"native\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 83CBB9F61A601CBA00E9B192;\n\t\t\tproductRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectReferences = (\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;\n\t\t\t\t\tProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;\n\t\t\t\t\tProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;\n\t\t\t\t\tProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 78C398B11ACF4ADC00677621 /* Products */;\n\t\t\t\t\tProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;\n\t\t\t\t\tProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;\n\t\t\t\t\tProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 832341B11AAA6A8300B99B32 /* Products */;\n\t\t\t\t\tProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;\n\t\t\t\t\tProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 139FDEE71B06529A00C62182 /* Products */;\n\t\t\t\t\tProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tProductGroup = 146834001AC3E56700842450 /* Products */;\n\t\t\t\t\tProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;\n\t\t\t\t},\n\t\t\t);\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t13B07F861A680F5B00A75B9A /* native */,\n\t\t\t\t00E356ED1AD99517003FC87E /* nativeTests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXReferenceProxy section */\n\t\t00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTActionSheet.a;\n\t\t\tremoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTGeolocation.a;\n\t\t\tremoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTImage.a;\n\t\t\tremoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTNetwork.a;\n\t\t\tremoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTVibration.a;\n\t\t\tremoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTSettings.a;\n\t\t\tremoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTWebSocket.a;\n\t\t\tremoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t146834041AC3E56700842450 /* libReact.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libReact.a;\n\t\t\tremoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTLinking.a;\n\t\t\tremoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n\t\t832341B51AAA6A8300B99B32 /* libRCTText.a */ = {\n\t\t\tisa = PBXReferenceProxy;\n\t\t\tfileType = archive.ar;\n\t\t\tpath = libRCTText.a;\n\t\t\tremoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;\n\t\t\tsourceTree = BUILT_PRODUCTS_DIR;\n\t\t};\n/* End PBXReferenceProxy section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t00E356EC1AD99517003FC87E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F8E1A680F5B00A75B9A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,\n\t\t\t\t13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,\n\t\t\t\t84A404191C7EFBB100BCCEEA /* Default-568@2x.png in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Bundle React Native code and images\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"../node_modules/react-native/packager/react-native-xcode.sh\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t00E356EA1AD99517003FC87E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t00E356F31AD99517003FC87E /* nativeTests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t13B07F871A680F5B00A75B9A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,\n\t\t\t\t13B07FC11A68108700A75B9A /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t00E356F51AD99517003FC87E /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 13B07F861A680F5B00A75B9A /* native */;\n\t\t\ttargetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t13B07FB21A68108700A75B9A /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.xib;\n\t\t\tpath = native;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t00E356F61AD99517003FC87E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = nativeTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/native.app/native\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t00E356F71AD99517003FC87E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = nativeTests/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.2;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks @loader_path/Frameworks\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/native.app/native\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t13B07F941A680F5B00A75B9A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Distribution: DuanYang Xue (B6E32U87S9)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tDEAD_CODE_STRIPPING = NO;\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t\t\"$(SRCROOT)/../node_modules/react-native/React/**\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = native/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.xueduanyang.reactnative;\n\t\t\t\tPRODUCT_NAME = native;\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t13B07F951A680F5B00A75B9A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Distribution: DuanYang Xue (B6E32U87S9)\";\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t\t\"$(SRCROOT)/../node_modules/react-native/React/**\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = native/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tONLY_ACTIVE_ARCH = NO;\n\t\t\t\tOTHER_LDFLAGS = \"-ObjC\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.xueduanyang.reactnative;\n\t\t\t\tPRODUCT_NAME = native;\n\t\t\t\tPROVISIONING_PROFILE = \"\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t83CBBA201A601CBA00E9B192 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t\t\"$(SRCROOT)/../node_modules/react-native/React/**\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t83CBBA211A601CBA00E9B192 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tHEADER_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,\n\t\t\t\t\t\"$(SRCROOT)/../node_modules/react-native/React/**\",\n\t\t\t\t);\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 7.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget \"nativeTests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t00E356F61AD99517003FC87E /* Debug */,\n\t\t\t\t00E356F71AD99517003FC87E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget \"native\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t13B07F941A680F5B00A75B9A /* Debug */,\n\t\t\t\t13B07F951A680F5B00A75B9A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject \"native\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t83CBBA201A601CBA00E9B192 /* Debug */,\n\t\t\t\t83CBBA211A601CBA00E9B192 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;\n}\n"
  },
  {
    "path": "reactnative/ios/native.xcodeproj/xcshareddata/xcschemes/native.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0620\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n               BuildableName = \"native.app\"\n               BlueprintName = \"native\"\n               ReferencedContainer = \"container:native.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"NO\"\n            buildForArchiving = \"NO\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"00E356ED1AD99517003FC87E\"\n               BuildableName = \"nativeTests.xctest\"\n               BlueprintName = \"nativeTests\"\n               ReferencedContainer = \"container:native.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      buildConfiguration = \"Debug\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"00E356ED1AD99517003FC87E\"\n               BuildableName = \"nativeTests.xctest\"\n               BlueprintName = \"nativeTests\"\n               ReferencedContainer = \"container:native.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"native.app\"\n            BlueprintName = \"native\"\n            ReferencedContainer = \"container:native.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n   </TestAction>\n   <LaunchAction\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Debug\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"native.app\"\n            BlueprintName = \"native\"\n            ReferencedContainer = \"container:native.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      buildConfiguration = \"Release\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"13B07F861A680F5B00A75B9A\"\n            BuildableName = \"native.app\"\n            BlueprintName = \"native\"\n            ReferencedContainer = \"container:native.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "reactnative/ios/nativeTests/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "reactnative/ios/nativeTests/nativeTests.m",
    "content": "/**\n * Copyright (c) 2015-present, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n#import <UIKit/UIKit.h>\n#import <XCTest/XCTest.h>\n\n#import \"RCTLog.h\"\n#import \"RCTRootView.h\"\n\n#define TIMEOUT_SECONDS 240\n#define TEXT_TO_LOOK_FOR @\"Welcome to React Native!\"\n\n@interface nativeTests : XCTestCase\n\n@end\n\n@implementation nativeTests\n\n- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test\n{\n  if (test(view)) {\n    return YES;\n  }\n  for (UIView *subview in [view subviews]) {\n    if ([self findSubviewInView:subview matching:test]) {\n      return YES;\n    }\n  }\n  return NO;\n}\n\n- (void)testRendersWelcomeScreen\n{\n  UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];\n  NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];\n  BOOL foundElement = NO;\n\n  __block NSString *redboxError = nil;\n  RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {\n    if (level >= RCTLogLevelError) {\n      redboxError = message;\n    }\n  });\n\n  while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {\n    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n    [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];\n\n    foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {\n      if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {\n        return YES;\n      }\n      return NO;\n    }];\n  }\n\n  RCTSetLogFunction(RCTDefaultLogFunction);\n\n  XCTAssertNil(redboxError, @\"RedBox error: %@\", redboxError);\n  XCTAssertTrue(foundElement, @\"Couldn't find element with text '%@' in %d seconds\", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);\n}\n\n\n@end\n"
  },
  {
    "path": "reactnative/package.json",
    "content": "{\n  \"name\": \"native\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"scripts\": {\n    \"start\": \"react-native start\"\n  },\n  \"dependencies\": {\n    \"react-native\": \"^0.21.0\"\n  }\n}\n"
  },
  {
    "path": "reactnative/testFlex.js",
    "content": "\n(class Test extends App{\n\trender() {\n\t\t  return (\n\t\t\t\t  <View style={{display:'flex',flexDirection:'row'}}>\n\t\t\t\t  \t<View style={{flex: 1,backgroundColor: 'red', alignItems: 'stretch'}}><Text>qwjel;qjw</Text></View>\n\t\t\t\t  \t<View style={{flex: 1,backgroundColor: 'green'}}>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  \t</View>\n\t\t\t\t  </View>\n\t\t\t\t  \t\n\t\t  );\n\t}\n}).run();\n"
  },
  {
    "path": "reactnative/testLineHeight.js",
    "content": "\n(class Test extends App{\n\trender() {\n\t\t  return (\n\n<Text style={{backgroundColor: 'yellow',lineHeight: 60,flexDirection:'row',alignItems:'center',justifyContent:'center'\n}}>324234242342</Text>\n\t\t\t\t\n\t\t\t\t  \n\t\t\t\t \n\t\t  );\n\t}\n}).run();\n"
  },
  {
    "path": "reactnative/testScroll.js",
    "content": "\n(class Test extends App{\n\trender() {\n\t\t  return (\n\t\t\t\t  <View>\n\t\t\t\t  <ScrollView>\n\t\t\t\t  <View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t\t  <View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t<View><Text>kqwjelkqjwelkjqwlke</Text></View>\n\t\t\t  \t\t<View><Text>asdasdasdasdasdasdasd</Text></View>\n\t\t\t  \t\t</ScrollView>\n\t\t\t  \t\t\n\t\t\t\t  </View>\n\t\t\t\t  \t\n\t\t  );\n\t}\n}).run();\n"
  },
  {
    "path": "reactnative/vsImgList.js",
    "content": "includeCSS(\"require('./css/vsImgList')\");\n\nclass vsImgList extends Element {\n\tconstructor(passedArgs){\n\t\tsuper();\n\t\tthis.state = {\n\t\t\tlist: null,\n\t\t\tpageHeight: windowHeight\n\t\t}\n\t\tthis.passedArgs = {\n\t\t\t\ta: passedArgs.a,\n\t\t\t\tb: passedArgs.b,\n\t\t\t\tc: passedArgs.c\n\t\t}\n\t}\n\tcomponentWillMount(){\n\t\tvar self = this;\n\t\tfetch('http://statics1.jiaru.club/react-native-example/hesui.js',\n\t\t\t\t{\n\t\t\t\t\tmethod:'get',\n\t\t\t\t\theaders:{'Content-Type':'application/json;charset=utf-8'},\n\t\t\t//body: [''].join('')\n\t\t\t\t}\n\t\t).then(function(req){\n\t\t\treq.json().then(function(res){\n\t\t\t\tself.setState({\n\t\t\t\t\tlist: res.images\n\t\t\t    });\n\t\t\t})\n\t\t})\n\t}\n\trender() {\n\t\treturn (\n<Div className=\"imgList\">\n\t<Header ref=\"J_header\" title=\"照片秀\" leftButton={{handler: this.backBtn}}/>\n{\n\t(()=>{\n\t\tif(this.state.list){\n\t\t\treturn (\n\t\t\t\t<Carousel style={{height: (windowHeight - 40)}}>\n\t\t\t\t{\n\t\t\t\t\tthis.state.list.map(function(o, idx){\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Div key={idx} style={{width:windowWidth,height:(windowHeight-40),display:'flex',alignItems:'center',justifyContent:'center'}}>\n\t\t\t\t\t\t\t\t<Img src={o.img} style={{width: o.width,height: o.height}}/>\n\t\t\t\t\t\t\t</Div>\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t</Carousel>\n\t\t\t);\n\t\t}else{\n\t\t\treturn (\n\t\t\t\t<Div style={{backgroundColor:'#fffff',width:windowWidth,height:(windowHeight - 40),alignItems:'center',justifyContent:'center'}}>\n\t\t\t\t\t<Span>加载中...</Span>\n\t\t\t\t</Div>\n\t\t\t);\n\t\t}\n\t}).call(this)\n}\n\t<Div className=\"float-bg\">这是一个透明浮层的测试,上一页面传递过来的参数为{JSON.stringify(this.passedArgs)}</Div>\n</Div>\n\t\t);\n\t}\n\tbackBtn(){\n\t\tpageRoute.pop();\n\t}\n}\n\nmodule.exports = vsImgList;\n"
  },
  {
    "path": "reactnative/vsIndex.js",
    "content": "includeCSS(\"require('./css/vsIndex')\");\n\nclass vsIndex extends Element {\n\tconstructor(){\n\t\tsuper();\n\t\tthis.state = {\n\t\t\tdataSource: SimpleListView.initDataSource(),\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n<Div style={{height: windowHeight}}>\n\t<Header id=\"HH\" title=\"维多利亚的秘密\" leftButton={null}></Header>\n\t<Div id=\"J-block-test\" className=\"j-j_j i_i-i\">测试水平居中垂直居中</Div>\n\t\n\t<SimpleListView className=\"listPage-listView iiii\" dataSource={this.state.dataSource}\n\trenderRow={this._renderRow.bind(this)}></SimpleListView>\n</Div>\n\n\t\t);\n\t}\n\tcomponentDidMount(){\n\t\tvar self = this;\n\t\tvar url = 'http://statics1.jiaru.club/react-native-example/list.js';\n\t\tconsole.debug(url)\n\t\tsetTimeout(function(){\n\t\t\tfetch(url,\n\t\t\t\t\t{method:'get',headers:{'Content-Type':'application/json;charset=utf-8',\n\t\t\t\t\t\t'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',\n\t\t\t\t\t\t'Accept-Encoding':'gzip, deflate, sdch',\n\t\t\t\t\t\t'Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6',\n\t\t\t\t\t\t\n\t\t\t\t\t\t'Host':'statics1.jiaru.club'\n\t\t\t\t\t\t},\n\t\t\t\t//body: [''].join('')\n\t\t\t\t\t}\n\t\t\t).then(function(req){\n\t\t\t\treq.json().then(function(res){\n\t\t\t\t\tvar l = res.list.slice(0);\n\n\t\t\t\t\tfor(var i=0;i<2;i++){\n\t\t\t\t\t\tl = l.concat(l)\n\t\t\t\t\t}\n\t\t\t\t\tvar o = self.state.dataSource.cloneWithRows(l);\n\t\t\t\t\tself.setState({\n\t\t\t\t\t\tdataSource: o\n\t\t\t\t    });\n\t\t\t\t})\n\t\t\t})\n\t\t\t\n\t\t\t\n\t\t\t//\n\t\t\tconsole.debug($('#HH'))\n\t\t\tsetTimeout(function(){\n\t\t\t\t$('#HH').animate({\n\t\t\t\t\tfrom: {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\tposition: 'relative'\n\t\t\t\t\t},\n\t\t\t\t\tto: {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: 100\n\t\t\t\t\t},\n\t\t\t\t\tduration: 1000\n\t\t\t\t})\n\t\t\t},2000)\n\t\t\n\t\t}, 0);\n\t\t\n\t}\n\t_renderRow(row, sid, rowid){\n\t\treturn <Row data={arguments}/>;\n\t}\n}\nclass Row extends Element{\n\tconstructor(){\n\t\tsuper();\n\t\tthis.state = {\n\t\t\t\tnumberOfLines: 3\n\t\t}\n\t}\n\trender(){\n\t\ttry{\n\t\tvar row = this.props.data[0];\n\t\tvar rowid = this.props.data[2];\n\t\treturn (\n\t<Div className={\"index-list-row\" + (rowid%2==0?\" index-list-complexRow\":\"\")}>\n\t\t<Div className=\"index-list-leftImg\" onClick={this.jumpImgList.bind(this)}>\n\t\t\t<Img className=\"index-list-leftImg-img\" src={row.smallpic} />\n\t\t</Div>\n\t\t<Div className=\"index-list-rightBox\">\n\t\t\t<Span className=\"index-list-rightBox-row\">\n\t\t\t\t<Span>姓名：</Span>\n\t\t\t\t<Span>{row.name}</Span>\n\t\t\t</Span>\n\t\t\t<Div onClick={this.collapse.bind(this)}>\n\t\t\t\t<Span ref=\"J_r\" numberOfLines={this.state.numberOfLines} className=\"index-list-rightBox-row-desc\">\n\t\t\t\t\t<Span>简介：</Span>\n\t\t\t\t\t<Span >{row.desc}</Span>\n\t\t\t\t</Span>\n\t\t\t</Div>\n\t\t</Div>\n\t</Div>\n\t\t);\n\t\t}catch(e){\n\t\t\tconsole.debug(e);\n\t\t}\n\t}\n\tcollapse(){\n\t\tif(this.state.numberOfLines == 3){\n\t\t\tthis.setState({\n\t\t\t\tnumberOfLines: null\n\t\t\t})\n\t\t}else{\n\t\t\tthis.setState({\n\t\t\t\tnumberOfLines: 3\n\t\t\t})\n\t\t}\n\t}\n\tjumpImgList(){\n\t\tpageRoute.push({\n\t\t\tpage: require('./vsImgList'),\n\t\t\ta: 1,\n\t\t\tb: 2,\n\t\t\tc: 3\n\t\t})\n\t}\n}\n\n\nmodule.exports = vsIndex;\n"
  },
  {
    "path": "reactnative/webpack.config.js",
    "content": "var webpack = require('webpack');\nmodule.exports = {\n\tentry : ['./index.ios2.js'],\n\toutput : {\n\t\tfilename : './z3.txt'\n\t},\n\t\n\tmodule : {\n\n\t\t    loaders: [{\n\t\t      test: /\\.(js|jsx|es6)$/,\n\t\t      exclude: /node_modules/,\n\t\t      loader: 'babel-loader',\n\t\t      query: {\n\t\t        cacheDirectory: true,\n\t\t        presets: ['stage-0', 'es2015', 'react']\n\t\t      }\n\t\t    }],\n\t\t/*\n\t\tloaders : [ {\n\t\t\tloader : 'babel-loader',\n\t\t\texclude : /node_modules/,\n\t\t\tquery : {\n\t\t\t\tpresets : [ 'es2015', 'react' ]\n\t\t\t}\n\t\t} ]\n\t\t*/\n\t},\n\t\n\tplugins: [\nnew webpack.IgnorePlugin(/(^\\w)|(\\.\\/rn\\/\\w+)/)\n\t          ]\n}"
  },
  {
    "path": "web/common/html/A.js",
    "content": "class A extends Element {\n\trender() {\n\t\treturn <a {...this.props}/>;\n\t}\n}\nmodule.exports = A;"
  },
  {
    "path": "web/common/html/Button.js",
    "content": "class Button extends Element {\n\trender() {\n\t\treturn <button {...this.props}/>;\n\t}\n}\nmodule.exports = Button;"
  },
  {
    "path": "web/common/html/Carousel.js",
    "content": "class Carousel extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t\t\t<div {...this.props}>\n\t\t\t\t{\n\t\t\t\t\t(()=>{\n\t\t\t\t\t\treturn this.props.children;\n\t\t\t\t\t}).call(this)\n\t\t\t\t}\n\t\t\t\t</div>\n\t\t);\n\t}\n}\nmodule.exports = Carousel;"
  },
  {
    "path": "web/common/html/Div.js",
    "content": "class Div extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t\t\t<div {...this.props}>\n\t\t\t\t{\n\t\t\t\t\t(()=>{\n\t\t\t\t\t\treturn this.props.children;\n\t\t\t\t\t}).call(this)\n\t\t\t\t}\n\t\t\t\t</div>\n\t\t);\n\t}\n}\nDiv.defaultProps = {\n\n}\nmodule.exports = Div;"
  },
  {
    "path": "web/common/html/Element.js",
    "content": "class Element extends React.Component {\n\tconstructor(){\n\t\tsuper();\n\t\tthis.state = this.state || {};\n\t\tthis.setTimeout = TimerMixin.setTimeout;\n\t\tthis.clearTimeout = TimerMixin.clearTimeout;\n\t\tthis.setInterval = TimerMixin.setInterval;\n\t\tthis.clearInterval = TimerMixin.clearInterval;\n\t\tthis.setImmediate = TimerMixin.setImmediate;\n\t\tthis.clearImmediate = TimerMixin.clearImmediate;\n\t\tthis.requestAnimationFrame = TimerMixin.requestAnimationFrame;\n\t\tthis.cancelAnimationFrame = TimerMixin.cancelAnimationFrame;\n\t}\n\t/**\n\t * 做html的兼容，比如style和dom事件\n\t */\n\tcompatHTML(conf) {\n\t\tif(this.props.className) {\n\t\t\tvar a = this.props.className.split(/\\s+/);\n\t\t\tvar self = this;\n\t\t\ta.forEach(function(i){\n\t\t\t\tDOMTREE_BYCLASS[i] = DOMTREE_BYCLASS[i] || [];\n\t\t\t\tif(DOMTREE_BYCLASS[i].indexOf(self) == -1){\n\t\t\t\t\tDOMTREE_BYCLASS[i].push(self);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif(this.props.id){\n\t\t\tDOMTREE_BYID[this.props.id] = this;\n\t\t}\n\t}\n\tcomponentWillUnmount(){\n\t\t//this.eventHandle = null;\n\t\tTimerMixin.componentWillUnmount.call(this);\n\t\tif(this.props.id){\n\t\t\tdelete DOMTREE_BYID[this.props.id];\n\t\t}\n\t\tif(this.props.id){\n\t\t\tdelete DOMTREE_BYID[this.props.id];\n\t\t}\n\t\tif(this.props.className) {\n\t\t\tvar a = this.props.className.split(/\\s+/);\n\t\t\tvar self = this;\n\t\t\ta.forEach(function(i){\n\t\t\t\tif(DOMTREE_BYCLASS[i].indexOf(self) > -1){\n\t\t\t\t\tDOMTREE_BYCLASS[i].splice(DOMTREE_BYCLASS[i].indexOf(self), 1);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t * 兼容计算样式的写法\n\t */\n\tmeasure(callback){\n\t\tvar el = React.findDOMNode(this);\n\t\tvar style = getComputedStyle(el);\n\t\tcallback.call(this, {\n\t\t\twidth: el.width,\n\t\t\theight: el.height\n\t\t});\n\t}\n\t/**\n\t * reactnative版本的getComputedStyle，回调处理\n\t */\n\toffset(){\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tUIManager.measure(React.findNodeHandle(this), (x, y, width, height, left, top) =>  {\n\t\t\t\tresolve({\n\t\t\t\t\tx: x,\n\t\t\t\t\ty: y,\n\t\t\t\t\tleft: left,\n\t\t\t\t\ttop: top,\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height\n\t\t\t\t});\n\t        });\n\t\t});\n\t}\n\t/**\n\t * class\n\t */\n\taddClass(cls){\n\t\tvar el = React.findDOMNode(this);\n\t\tvar a = el.className;\n\t\tif(a.indexOf(cls) > -1){\n\t\t\ta.splice(a.indexOf(cls), 1);\n\t\t}\n\t\ta.push(cls);\n\t\tel.className = a.join(' ');\n\t}\n\tremoveClass(cls){\n\t\tvar el = React.findDOMNode(this);\n\t\tvar a = el.className;\n\t\tif(a.indexOf(cls) > -1){\n\t\t\ta.splice(a.indexOf(cls), 1);\n\t\t}\n\t\tel.className = a.join(' ');\n\t}\n\thasClass(cls){\n\t\tvar el = React.findDOMNode(this);\n\t\tvar a = el.className;\n\t\tif(a.indexOf(cls) > -1){\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tcss(styleName, styleValue){\n\t\tvar el = React.findDOMNode(this);\n\t\tif(arguments.length == 1){\n\t\t\tfor(var k in styleName){\n\t\t\t\tel.style[k] = styleName[k];\n\t\t\t}\n\t\t}else if(arguments.length == 2){\n\t\t\tel.style[styleName] = styleValue;\n\t\t}else{\n\t\t\treturn getComputedStyle(o);\n\t\t}\n\t}\n\t/**\n\t * dom\n\t */\n\thtml(o){\n\t\tvar el = React.findDOMNode(this);\n\t\tif(o){\n\t\t\tel.innerHTML = o;\n\t\t}else{\n\t\t\treturn el.innerHTML;\n\t\t}\n\t}\n\t/**\n\t * set方法可能有问题 要再看一下啊\n\t */\n\tattr(k, v){\n\t\tvar el = React.findDOMNode(this);\n\t\tif(arguments.length ==2){\n\t\t\tel.setAttribute(k, v);\n\t\t\tthis.render();\n\t\t}else if(arguments.length == 1){\n\t\t\treturn el.getAttribute(k);\n\t\t}\n\t}\n\tappend(o){\n\t\tvar children = this.state.children.slice(0).concat([o]);\n\t\tthis.setState({\n\t\t\tchildren: children\n\t\t})\n\t}\n\tbefore(o){\n\t\tvar children = [o].concat(this.state.children.slice(0));\n\t\tthis.setState({\n\t\t\tchildren: children\n\t\t})\n\t}\n\ton(eventType, fn){\n\t\tvar el = React.findDOMNode(this);\n\t\tel.addEventListener(eventType, fn);\n\t}\n\toff(eventType, fn){\n\t\tvar el = React.findDOMNode(this);\n\t\tel.removeEventListener(eventType, fn);\n\t}\n\tanimate(config){\n\t\tanimation.motion(Object.assign(config, {el: this}));\n\t}\n}\nmodule.exports = Element;"
  },
  {
    "path": "web/common/html/Header.js",
    "content": "class Header extends Element {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.state = {\n\t\t\t\ttitle: '携程机票'\n\t\t}\n\t}\n\tsetTitle(title){\n\t\tthis.state.title = title;\n\t}\n\tsetLeftButton(o){\n\t\tthis.state.leftButton = o;\n\t}\n\tsetRightButton(o){\n\t\tthis.state.rightButton = o;\n\t}\n\tcomponentWillMount(){\n\t\tif(this.props.title){\n\t\t\tthis.state.title = this.props.title;\n\t\t}\n\t\tif(this.props.leftButton){\n\t\t\tthis.state.leftButton = this.state.leftButton || {title: '返回'};\n\t\t\tObject.assign(this.state.leftButton, this.props.leftButton);\n\t\t}\n\t\tif(this.props.rightButton){\n\t\t\tthis.state.rightButton = this.state.rightButton || {};\n\t\t\tObject.assign(this.state.rightButton, this.props.rightButton);\n\t\t}\n\t}\n\trender() {\n\t\tthis.compatHTML();\n\t\tvar self = this;\n\t\treturn (\n\t\t\t\t<Div id={this.props.id} className=\"native-header\">\n\t\t\t\t\t<Div className=\"native-header-box\">\n\t\t\t\t\t\t<Div className=\"native-header-title\">{self.state.title}</Div>\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tself.state.leftButton ?\n\t\t\t\t\t\t\t\t\t<Div className=\"native-header-leftButton\" onClick={self.state.leftButton.handler}>\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tself.state.leftButton.image? <Img style={{backgroundColor:'transparent',width: 18,height: 18, position: 'absolute' }} src={this.state.leftButton.image}/> : null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t{self.state.leftButton.title}\n\t\t\t\t\t\t\t\t\t</Div>\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t}\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tself.state.rightButton ?\n\t\t\t\t\t\t\t\t\t<Div className=\"native-header-rightButton\" onClick={self.state.rightButton.handler}>\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tself.state.rightButton.image? <Img style={{backgroundColor:'transparent',width: 18,height: 18, position: 'absolute' }} src={this.state.leftButton.image}/> : null\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t{self.state.rightButton.title}\n\t\t\t\t\t\t\t\t\t</Div>\n\t\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t}\n\t\t\t\t\t</Div>\n\t\t\t\t</Div>\n\t\t)\n\t}\n}\n\nmodule.exports = Header;"
  },
  {
    "path": "web/common/html/Img.js",
    "content": "class Img extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn <img {...this.props} src={ (this.props.src.indexOf('http://')>-1) ? this.props.src : (window.IMG_CDN_PREFIX ? (window.IMG_CDN_PREFIX + this.props.src) : this.props.src)}/>;\n\t}\n}\nmodule.exports = Img;"
  },
  {
    "path": "web/common/html/Input.js",
    "content": "var Element = require('./Element');\nclass Input extends React.Component {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn <input type=\"text\" {...this.props}/>;\n\t}\n}\nmodule.exports = Input;"
  },
  {
    "path": "web/common/html/ListView/ListView.js",
    "content": "import ListViewDataSource from './ListViewDataSource';\nimport ScrollView from '../ScrollView/ScrollView';\nimport ScrollResponder from './ScrollResponder';\nimport StaticRenderer from './StaticRenderer';\nimport getLayout from '../Utilties/getLayout';\n\n\nvar DEFAULT_PAGE_SIZE = 1;\nvar DEFAULT_INITIAL_ROWS = 10;\nvar DEFAULT_SCROLL_RENDER_AHEAD = 1000;\nvar DEFAULT_END_REACHED_THRESHOLD = 1000;\nvar DEFAULT_SCROLL_CALLBACK_THROTTLE = 50;\nvar SCROLLVIEW_REF = 'listviewscroll';\n\nvar ListView = React.createClass({\n  mixins: [ScrollResponder.Mixin, TimerMixin],\n\n  statics: {\n    DataSource: ListViewDataSource,\n  },\n\n  /**\n   * You must provide a renderRow function. If you omit any of the other render\n   * functions, ListView will simply skip rendering them.\n   *\n   * - renderRow(rowData, sectionID, rowID, highlightRow);\n   * - renderSectionHeader(sectionData, sectionID);\n   */\n  propTypes: {\n    ...ScrollView.propTypes,\n\n    dataSource: React.PropTypes.instanceOf(ListViewDataSource).isRequired,\n    /**\n     * (sectionID, rowID, adjacentRowHighlighted) => renderable\n     * If provided, a renderable component to be rendered as the separator\n     * below each row but not the last row if there is a section header below.\n     * Take a sectionID and rowID of the row above and whether its adjacent row\n     * is highlighted.\n     */\n    renderSeparator: React.PropTypes.func,\n    /**\n     * (rowData, sectionID, rowID, highlightRow) => renderable\n     * Takes a data entry from the data source and its ids and should return\n     * a renderable component to be rendered as the row.  By default the data\n     * is exactly what was put into the data source, but it's also possible to\n     * provide custom extractors. ListView can be notified when a row is\n     * being highlighted by calling highlightRow function. The separators above and\n     * below will be hidden when a row is highlighted. The highlighted state of\n     * a row can be reset by calling highlightRow(null).\n     */\n    renderRow: React.PropTypes.func.isRequired,\n    /**\n     * How many rows to render on initial component mount.  Use this to make\n     * it so that the first screen worth of data apears at one time instead of\n     * over the course of multiple frames.\n     */\n    initialListSize: React.PropTypes.number,\n    /**\n     * Called when all rows have been rendered and the list has been scrolled\n     * to within onEndReachedThreshold of the bottom.  The native scroll\n     * event is provided.\n     */\n    onEndReached: React.PropTypes.func,\n    /**\n     * Threshold in pixels for onEndReached.\n     */\n    onEndReachedThreshold: React.PropTypes.number,\n    /**\n     * Number of rows to render per event loop.\n     */\n    pageSize: React.PropTypes.number,\n    /**\n     * () => renderable\n     *\n     * The header and footer are always rendered (if these props are provided)\n     * on every render pass.  If they are expensive to re-render, wrap them\n     * in StaticContainer or other mechanism as appropriate.  Footer is always\n     * at the bottom of the list, and header at the top, on every render pass.\n     */\n    renderFooter: React.PropTypes.func,\n    renderHeader: React.PropTypes.func,\n    /**\n     * (sectionData, sectionID) => renderable\n     *\n     * If provided, a sticky header is rendered for this section.  The sticky\n     * behavior means that it will scroll with the content at the top of the\n     * section until it reaches the top of the screen, at which point it will\n     * stick to the top until it is pushed off the screen by the next section\n     * header.\n     */\n    renderSectionHeader: React.PropTypes.func,\n    /**\n     * (props) => renderable\n     *\n     * A function that returns the scrollable component in which the list rows\n     * are rendered. Defaults to returning a ScrollView with the given props.\n     */\n    renderScrollComponent: React.PropTypes.func.isRequired,\n    /**\n     * How early to start rendering rows before they come on screen, in\n     * pixels.\n     */\n    scrollRenderAheadDistance: React.PropTypes.number,\n    /**\n     * (visibleRows, changedRows) => void\n     *\n     * Called when the set of visible rows changes.  `visibleRows` maps\n     * { sectionID: { rowID: true }} for all the visible rows, and\n     * `changedRows` maps { sectionID: { rowID: true | false }} for the rows\n     * that have changed their visibility, with true indicating visible, and\n     * false indicating the view has moved out of view.\n     */\n    onChangeVisibleRows: React.PropTypes.func,\n    /**\n     * An experimental performance optimization for improving scroll perf of\n     * large lists, used in conjunction with overflow: 'hidden' on the row\n     * containers.  Use at your own risk.\n     */\n    removeClippedSubviews: React.PropTypes.bool,\n  },\n\n  /**\n   * Provides a handle to the underlying scroll responder to support operations\n   * such as scrollTo.\n   */\n  getScrollResponder: function() {\n    return this.refs[SCROLLVIEW_REF] &&\n      this.refs[SCROLLVIEW_REF].getScrollResponder &&\n      this.refs[SCROLLVIEW_REF].getScrollResponder();\n  },\n\n  /**\n   * React life cycle hooks.\n   */\n\n  getDefaultProps: function() {\n    return {\n      initialListSize: DEFAULT_INITIAL_ROWS,\n      pageSize: DEFAULT_PAGE_SIZE,\n      renderScrollComponent: props => <ScrollView {...props} />,\n      scrollRenderAheadDistance: DEFAULT_SCROLL_RENDER_AHEAD,\n      onEndReachedThreshold: DEFAULT_END_REACHED_THRESHOLD,\n    };\n  },\n\n  getInitialState: function() {\n    return {\n      curRenderedRowsCount: this.props.initialListSize,\n      prevRenderedRowsCount: 0,\n      highlightedRow: {},\n    };\n  },\n\n  componentWillMount: function() {\n    // this data should never trigger a render pass, so don't put in state\n    this.scrollProperties = {\n      visibleLength: null,\n      contentLength: null,\n      offset: 0\n    };\n    this._childFrames = [];\n    this._visibleRows = {};\n  },\n\n  componentDidMount: function() {\n    // do this in animation frame until componentDidMount actually runs after\n    // the component is laid out\n    this.requestAnimationFrame(() => {\n      this._measureAndUpdateScrollProps();\n    });\n  },\n\n  componentWillReceiveProps: function(nextProps) {\n    if (this.props.dataSource !== nextProps.dataSource) {\n      this.setState((state, props) => {\n        var rowsToRender = Math.min(\n          state.curRenderedRowsCount + props.pageSize,\n          props.dataSource.getRowCount()\n        );\n        return {\n          prevRenderedRowsCount: 0,\n          curRenderedRowsCount: rowsToRender,\n        };\n      });\n    }\n  },\n\n  componentDidUpdate: function() {\n    this.requestAnimationFrame(() => {\n      this._measureAndUpdateScrollProps();\n    });\n  },\n\n  onRowHighlighted: function(sectionID, rowID) {\n    this.setState({highlightedRow: {sectionID, rowID}});\n  },\n\n  render: function() {\n    var bodyComponents = [];\n\n    var dataSource = this.props.dataSource;\n    var allRowIDs = dataSource.rowIdentities;\n    var rowCount = 0;\n    var sectionHeaderIndices = [];\n\n    var header = this.props.renderHeader && this.props.renderHeader();\n    var footer = this.props.renderFooter && this.props.renderFooter();\n    var totalIndex = header ? 1 : 0;\n\n    for (var sectionIdx = 0; sectionIdx < allRowIDs.length; sectionIdx++) {\n      var sectionID = dataSource.sectionIdentities[sectionIdx];\n      var rowIDs = allRowIDs[sectionIdx];\n      if (rowIDs.length === 0) {\n        continue;\n      }\n\n      if (this.props.renderSectionHeader) {\n        var shouldUpdateHeader = rowCount >= this.state.prevRenderedRowsCount &&\n          dataSource.sectionHeaderShouldUpdate(sectionIdx);\n        bodyComponents.push(\n          <StaticRenderer\n            key={'s_' + sectionID}\n            shouldUpdate={!!shouldUpdateHeader}\n            render={this.props.renderSectionHeader.bind(\n              null,\n              dataSource.getSectionHeaderData(sectionIdx),\n              sectionID\n            )}\n          />\n        );\n        sectionHeaderIndices.push(totalIndex++);\n      }\n\n      for (var rowIdx = 0; rowIdx < rowIDs.length; rowIdx++) {\n        var rowID = rowIDs[rowIdx];\n        var comboID = sectionID + rowID;\n        var shouldUpdateRow = rowCount >= this.state.prevRenderedRowsCount &&\n          dataSource.rowShouldUpdate(sectionIdx, rowIdx);\n        var row =\n          <StaticRenderer\n            key={'r_' + comboID}\n            shouldUpdate={!!shouldUpdateRow}\n            render={this.props.renderRow.bind(\n              null,\n              dataSource.getRowData(sectionIdx, rowIdx),\n              sectionID,\n              rowID,\n              this.onRowHighlighted\n            )}\n          />;\n        bodyComponents.push(row);\n        totalIndex++;\n\n        if (this.props.renderSeparator &&\n            (rowIdx !== rowIDs.length - 1 || sectionIdx === allRowIDs.length - 1)) {\n          var adjacentRowHighlighted =\n            this.state.highlightedRow.sectionID === sectionID && (\n              this.state.highlightedRow.rowID === rowID ||\n              this.state.highlightedRow.rowID === rowIDs[rowIdx + 1]\n            );\n          var separator = this.props.renderSeparator(\n            sectionID,\n            rowID,\n            adjacentRowHighlighted\n          );\n          bodyComponents.push(separator);\n          totalIndex++;\n        }\n        if (++rowCount === this.state.curRenderedRowsCount) {\n          break;\n        }\n      }\n      if (rowCount >= this.state.curRenderedRowsCount) {\n        break;\n      }\n    }\n\n    var {\n      renderScrollComponent,\n      ...props,\n    } = this.props;\n    if (!props.scrollEventThrottle) {\n      props.scrollEventThrottle = DEFAULT_SCROLL_CALLBACK_THROTTLE;\n    }\n\n    Object.assign(props, {\n      onScroll: this._onScroll,\n\n      onMoveShouldSetResponderCapture: this.scrollResponderHandleMoveShouldSetResponderCapture,\n\n      stickyHeaderIndices: sectionHeaderIndices,\n\n      // Do not pass these events downstream to ScrollView since they will be\n      // registered in ListView's own ScrollResponder.Mixin\n      onKeyboardWillShow: undefined,\n      onKeyboardWillHide: undefined,\n      onKeyboardDidShow: undefined,\n      onKeyboardDidHide: undefined,\n    });\n\n    // TODO(ide): Use function refs so we can compose with the scroll\n    // component's original ref instead of clobbering it\n    return React.cloneElement(renderScrollComponent(props), {\n      ref: SCROLLVIEW_REF,\n    }, header, bodyComponents, footer);\n  },\n\n  /**\n   * Private methods\n   */\n\n  _measureAndUpdateScrollProps: function() {\n    var scrollComponent = this.getScrollResponder();\n    if (!scrollComponent || !scrollComponent.getInnerViewNode) {\n      return;\n    }\n\n    // TODO: get layout maybe couse performance problem\n    var innerLayout = getLayout(React.findDOMNode(scrollComponent.getInnerViewNode()));\n    this._setScrollContentLength(innerLayout.x, innerLayout.y, innerLayout.width, innerLayout.height);\n\n    var layout = getLayout(React.findDOMNode(scrollComponent));\n    this._setScrollVisibleLength(layout.x, layout.y, layout.width, layout.height);\n\n  },\n\n  _setScrollContentLength: function(left, top, width, height) {\n    this.scrollProperties.contentLength = !this.props.horizontal ?\n      height : width;\n  },\n\n  _setScrollVisibleLength: function(left, top, width, height) {\n    this.scrollProperties.visibleLength = !this.props.horizontal ?\n      height : width;\n    this._renderMoreRowsIfNeeded();\n  },\n\n  _maybeCallOnEndReached: function(event) {\n    if (this.props.onEndReached &&\n        this.scrollProperties.contentLength !== this._sentEndForContentLength &&\n        this._getDistanceFromEnd(this.scrollProperties) < this.props.onEndReachedThreshold &&\n        this.state.curRenderedRowsCount === this.props.dataSource.getRowCount()) {\n      this._sentEndForContentLength = this.scrollProperties.contentLength;\n      this.props.onEndReached(event);\n      return true;\n    }\n    return false;\n  },\n\n  _renderMoreRowsIfNeeded: function() {\n    if (this.scrollProperties.contentLength === null ||\n      this.scrollProperties.visibleLength === null ||\n      this.state.curRenderedRowsCount === this.props.dataSource.getRowCount()) {\n      this._maybeCallOnEndReached();\n      return;\n    }\n\n    var distanceFromEnd = this._getDistanceFromEnd(this.scrollProperties);\n    if (distanceFromEnd < this.props.scrollRenderAheadDistance) {\n      this._pageInNewRows();\n    }\n  },\n\n  _pageInNewRows: function() {\n    this.setState((state, props) => {\n      var rowsToRender = Math.min(\n        state.curRenderedRowsCount + props.pageSize,\n        props.dataSource.getRowCount()\n      );\n      return {\n        prevRenderedRowsCount: state.curRenderedRowsCount,\n        curRenderedRowsCount: rowsToRender\n      };\n    }, () => {\n      this._measureAndUpdateScrollProps();\n      this.setState(state => ({\n        prevRenderedRowsCount: state.curRenderedRowsCount,\n      }));\n    });\n  },\n\n  _getDistanceFromEnd: function(scrollProperties) {\n    return scrollProperties.contentLength -\n      scrollProperties.visibleLength -\n      scrollProperties.offset;\n  },\n\n  // _updateVisibleRows: function(updatedFrames) {\n  //   if (!this.props.onChangeVisibleRows) {\n  //     return; // No need to compute visible rows if there is no callback\n  //   }\n  //   if (updatedFrames) {\n  //     updatedFrames.forEach((newFrame) => {\n  //       this._childFrames[newFrame.index] = merge(newFrame);\n  //     });\n  //   }\n  //   var isVertical = !this.props.horizontal;\n  //   var dataSource = this.props.dataSource;\n  //   var visibleMin = this.scrollProperties.offset;\n  //   var visibleMax = visibleMin + this.scrollProperties.visibleLength;\n  //   var allRowIDs = dataSource.rowIdentities;\n  //\n  //   var header = this.props.renderHeader && this.props.renderHeader();\n  //   var totalIndex = header ? 1 : 0;\n  //   var visibilityChanged = false;\n  //   var changedRows = {};\n  //   for (var sectionIdx = 0; sectionIdx < allRowIDs.length; sectionIdx++) {\n  //     var rowIDs = allRowIDs[sectionIdx];\n  //     if (rowIDs.length === 0) {\n  //       continue;\n  //     }\n  //     var sectionID = dataSource.sectionIdentities[sectionIdx];\n  //     if (this.props.renderSectionHeader) {\n  //       totalIndex++;\n  //     }\n  //     var visibleSection = this._visibleRows[sectionID];\n  //     if (!visibleSection) {\n  //       visibleSection = {};\n  //     }\n  //     for (var rowIdx = 0; rowIdx < rowIDs.length; rowIdx++) {\n  //       var rowID = rowIDs[rowIdx];\n  //       var frame = this._childFrames[totalIndex];\n  //       totalIndex++;\n  //       if (!frame) {\n  //         break;\n  //       }\n  //       var rowVisible = visibleSection[rowID];\n  //       var min = isVertical ? frame.y : frame.x;\n  //       var max = min + (isVertical ? frame.height : frame.width);\n  //       if (min > visibleMax || max < visibleMin) {\n  //         if (rowVisible) {\n  //           visibilityChanged = true;\n  //           delete visibleSection[rowID];\n  //           if (!changedRows[sectionID]) {\n  //             changedRows[sectionID] = {};\n  //           }\n  //           changedRows[sectionID][rowID] = false;\n  //         }\n  //       } else if (!rowVisible) {\n  //         visibilityChanged = true;\n  //         visibleSection[rowID] = true;\n  //         if (!changedRows[sectionID]) {\n  //           changedRows[sectionID] = {};\n  //         }\n  //         changedRows[sectionID][rowID] = true;\n  //       }\n  //     }\n  //     if (!isEmpty(visibleSection)) {\n  //       this._visibleRows[sectionID] = visibleSection;\n  //     } else if (this._visibleRows[sectionID]) {\n  //       delete this._visibleRows[sectionID];\n  //     }\n  //   }\n  //   visibilityChanged && this.props.onChangeVisibleRows(this._visibleRows, changedRows);\n  // },\n\n  _onScroll: function(e) {\n    var isVertical = !this.props.horizontal;\n\n    var target = React.findDOMNode(this.refs[SCROLLVIEW_REF]);\n\n    this.scrollProperties.visibleLength = target[\n      isVertical ? 'offsetHeight' : 'offsetWidth'\n    ];\n    this.scrollProperties.contentLength = target[\n      isVertical ? 'scrollHeight' : 'scrollWidth'\n    ];\n    this.scrollProperties.offset = target[\n      isVertical ? 'scrollTop' : 'scrollTop'\n    ];\n\n    // this._updateVisibleRows(e.nativeEvent.updatedChildFrames);\n    if (!this._maybeCallOnEndReached(e)) {\n      this._renderMoreRowsIfNeeded();\n    }\n\n    this.props.onScroll && this.props.onScroll(e);\n  },\n});\n\nmodule.exports = ListView;\n"
  },
  {
    "path": "web/common/html/ListView/ListViewDataSource.js",
    "content": "import invariant from 'fbjs/lib/invariant';\nimport isEmpty from 'fbjs/lib/isEmpty';\nimport warning from 'fbjs/lib/warning';\n\nfunction defaultGetRowData(\n  dataBlob: any,\n  sectionID: number | string,\n  rowID: number | string\n): any {\n  return dataBlob[sectionID][rowID];\n}\n\nfunction defaultGetSectionHeaderData(\n  dataBlob: any,\n  sectionID: number | string\n): any {\n  return dataBlob[sectionID];\n}\n\ntype differType = (data1: any, data2: any) => bool;\n\ntype ParamType = {\n  rowHasChanged: differType;\n  getRowData: ?typeof defaultGetRowData;\n  sectionHeaderHasChanged: ?differType;\n  getSectionHeaderData: ?typeof defaultGetSectionHeaderData;\n}\n\n/**\n * Provides efficient data processing and access to the\n * `ListView` component.  A `ListViewDataSource` is created with functions for\n * extracting data from the input blob, and comparing elements (with default\n * implementations for convenience).  The input blob can be as simple as an\n * array of strings, or an object with rows nested inside section objects.\n *\n * To update the data in the datasource, use `cloneWithRows` (or\n * `cloneWithRowsAndSections` if you care about sections).  The data in the\n * data source is immutable, so you can't modify it directly.  The clone methods\n * suck in the new data and compute a diff for each row so ListView knows\n * whether to re-render it or not.\n *\n * In this example, a component receives data in chunks, handled by\n * `_onDataArrived`, which concats the new data onto the old data and updates the\n * data source.  We use `concat` to create a new array - mutating `this._data`,\n * e.g. with `this._data.push(newRowData)`, would be an error. `_rowHasChanged`\n * understands the shape of the row data and knows how to efficiently compare\n * it.\n *\n * ```\n * getInitialState: function() {\n *   var ds = new ListViewDataSource({rowHasChanged: this._rowHasChanged});\n *   return {ds};\n * },\n * _onDataArrived(newData) {\n *   this._data = this._data.concat(newData);\n *   this.setState({\n *     ds: this.state.ds.cloneWithRows(this._data)\n *   });\n * }\n * ```\n */\n\nclass ListViewDataSource {\n\n  /**\n   * You can provide custom extraction and `hasChanged` functions for section\n   * headers and rows.  If absent, data will be extracted with the\n   * `defaultGetRowData` and `defaultGetSectionHeaderData` functions.\n   *\n   * The default extractor expects data of one of the following forms:\n   *\n   *      { sectionID_1: { rowID_1: <rowData1>, ... }, ... }\n   *\n   *    or\n   *\n   *      { sectionID_1: [ <rowData1>, <rowData2>, ... ], ... }\n   *\n   *    or\n   *\n   *      [ [ <rowData1>, <rowData2>, ... ], ... ]\n   *\n   * The constructor takes in a params argument that can contain any of the\n   * following:\n   *\n   * - getRowData(dataBlob, sectionID, rowID);\n   * - getSectionHeaderData(dataBlob, sectionID);\n   * - rowHasChanged(prevRowData, nextRowData);\n   * - sectionHeaderHasChanged(prevSectionData, nextSectionData);\n   */\n  constructor(params: ParamType) {\n    invariant(\n      params && typeof params.rowHasChanged === 'function',\n      'Must provide a rowHasChanged function.'\n    );\n    this._rowHasChanged = params.rowHasChanged;\n    this._getRowData = params.getRowData || defaultGetRowData;\n    this._sectionHeaderHasChanged = params.sectionHeaderHasChanged;\n    this._getSectionHeaderData =\n      params.getSectionHeaderData || defaultGetSectionHeaderData;\n\n    this._dataBlob = null;\n    this._dirtyRows = [];\n    this._dirtySections = [];\n    this._cachedRowCount = 0;\n\n    // These two private variables are accessed by outsiders because ListView\n    // uses them to iterate over the data in this class.\n    this.rowIdentities = [];\n    this.sectionIdentities = [];\n  }\n\n  /**\n   * Clones this `ListViewDataSource` with the specified `dataBlob` and\n   * `rowIdentities`. The `dataBlob` is just an aribitrary blob of data. At\n   * construction an extractor to get the interesting information was defined\n   * (or the default was used).\n   *\n   * The `rowIdentities` is is a 2D array of identifiers for rows.\n   * ie. [['a1', 'a2'], ['b1', 'b2', 'b3'], ...].  If not provided, it's\n   * assumed that the keys of the section data are the row identities.\n   *\n   * Note: This function does NOT clone the data in this data source. It simply\n   * passes the functions defined at construction to a new data source with\n   * the data specified. If you wish to maintain the existing data you must\n   * handle merging of old and new data separately and then pass that into\n   * this function as the `dataBlob`.\n   */\n   cloneWithRows(\n       dataBlob: Array<any> | {[key: string]: any},\n       rowIdentities: ?Array<string>\n   ): ListViewDataSource {\n     var rowIds = rowIdentities ? [rowIdentities] : null;\n     if (!this._sectionHeaderHasChanged) {\n       this._sectionHeaderHasChanged = () => false;\n     }\n     return this.cloneWithRowsAndSections({s1: dataBlob}, ['s1'], rowIds);\n   }\n\n  /**\n   * This performs the same function as the `cloneWithRows` function but here\n   * you also specify what your `sectionIdentities` are. If you don't care\n   * about sections you should safely be able to use `cloneWithRows`.\n   *\n   * `sectionIdentities` is an array of identifiers for  sections.\n   * ie. ['s1', 's2', ...].  If not provided, it's assumed that the\n   * keys of dataBlob are the section identities.\n   *\n   * Note: this returns a new object!\n   */\n  cloneWithRowsAndSections(\n      dataBlob: any,\n      sectionIdentities: ?Array<string>,\n      rowIdentities: ?Array<Array<string>>\n  ): ListViewDataSource {\n    invariant(\n      typeof this._sectionHeaderHasChanged === 'function',\n      'Must provide a sectionHeaderHasChanged function with section data.'\n    );\n    var newSource = new ListViewDataSource({\n      getRowData: this._getRowData,\n      getSectionHeaderData: this._getSectionHeaderData,\n      rowHasChanged: this._rowHasChanged,\n      sectionHeaderHasChanged: this._sectionHeaderHasChanged,\n    });\n    newSource._dataBlob = dataBlob;\n    if (sectionIdentities) {\n      newSource.sectionIdentities = sectionIdentities;\n    } else {\n      newSource.sectionIdentities = Object.keys(dataBlob);\n    }\n    if (rowIdentities) {\n      newSource.rowIdentities = rowIdentities;\n    } else {\n      newSource.rowIdentities = [];\n      newSource.sectionIdentities.forEach((sectionID) => {\n        newSource.rowIdentities.push(Object.keys(dataBlob[sectionID]));\n      });\n    }\n    newSource._cachedRowCount = countRows(newSource.rowIdentities);\n\n    newSource._calculateDirtyArrays(\n      this._dataBlob,\n      this.sectionIdentities,\n      this.rowIdentities\n    );\n\n    return newSource;\n  }\n\n  getRowCount(): number {\n    return this._cachedRowCount;\n  }\n\n  /**\n   * Returns if the row is dirtied and needs to be rerendered\n   */\n  rowShouldUpdate(sectionIndex: number, rowIndex: number): bool {\n    var needsUpdate = this._dirtyRows[sectionIndex][rowIndex];\n    warning(needsUpdate !== undefined,\n      'missing dirtyBit for section, row: ' + sectionIndex + ', ' + rowIndex);\n    return needsUpdate;\n  }\n\n  /**\n   * Gets the data required to render the row.\n   */\n  getRowData(sectionIndex: number, rowIndex: number): any {\n    var sectionID = this.sectionIdentities[sectionIndex];\n    var rowID = this.rowIdentities[sectionIndex][rowIndex];\n    warning(\n      sectionID !== undefined && rowID !== undefined,\n      'rendering invalid section, row: ' + sectionIndex + ', ' + rowIndex\n    );\n    return this._getRowData(this._dataBlob, sectionID, rowID);\n  }\n\n  /**\n   * Gets the rowID at index provided if the dataSource arrays were flattened,\n   * or null of out of range indexes.\n   */\n  getRowIDForFlatIndex(index: number): ?string {\n    var accessIndex = index;\n    for (var ii = 0; ii < this.sectionIdentities.length; ii++) {\n      if (accessIndex >= this.rowIdentities[ii].length) {\n        accessIndex -= this.rowIdentities[ii].length;\n      } else {\n        return this.rowIdentities[ii][accessIndex];\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Gets the sectionID at index provided if the dataSource arrays were flattened,\n   * or null for out of range indexes.\n   */\n  getSectionIDForFlatIndex(index: number): ?string {\n    var accessIndex = index;\n    for (var ii = 0; ii < this.sectionIdentities.length; ii++) {\n      if (accessIndex >= this.rowIdentities[ii].length) {\n        accessIndex -= this.rowIdentities[ii].length;\n      } else {\n        return this.sectionIdentities[ii];\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Returns an array containing the number of rows in each section\n   */\n  getSectionLengths(): Array<number> {\n    var results = [];\n    for (var ii = 0; ii < this.sectionIdentities.length; ii++) {\n      results.push(this.rowIdentities[ii].length);\n    }\n    return results;\n  }\n\n  /**\n   * Returns if the section header is dirtied and needs to be rerendered\n   */\n  sectionHeaderShouldUpdate(sectionIndex: number): bool {\n    var needsUpdate = this._dirtySections[sectionIndex];\n    warning(needsUpdate !== undefined,\n      'missing dirtyBit for section: ' + sectionIndex);\n    return needsUpdate;\n  }\n\n  /**\n   * Gets the data required to render the section header\n   */\n  getSectionHeaderData(sectionIndex: number): any {\n    if (!this._getSectionHeaderData) {\n      return null;\n    }\n    var sectionID = this.sectionIdentities[sectionIndex];\n    warning(sectionID !== undefined,\n      'renderSection called on invalid section: ' + sectionIndex);\n    return this._getSectionHeaderData(this._dataBlob, sectionID);\n  }\n\n  /**\n   * Private members and methods.\n   */\n\n  _getRowData: typeof defaultGetRowData;\n  _getSectionHeaderData: typeof defaultGetSectionHeaderData;\n  _rowHasChanged: differType;\n  _sectionHeaderHasChanged: ?differType;\n\n  _dataBlob: any;\n  _dirtyRows: Array<Array<bool>>;\n  _dirtySections: Array<bool>;\n  _cachedRowCount: number;\n\n  // These two 'protected' variables are accessed by ListView to iterate over\n  // the data in this class.\n  rowIdentities: Array<Array<string>>;\n  sectionIdentities: Array<string>;\n\n  _calculateDirtyArrays(\n    prevDataBlob: any,\n    prevSectionIDs: Array<string>,\n    prevRowIDs: Array<Array<string>>\n  ): void {\n    // construct a hashmap of the existing (old) id arrays\n    var prevSectionsHash = keyedDictionaryFromArray(prevSectionIDs);\n    var prevRowsHash = {};\n    for (var ii = 0; ii < prevRowIDs.length; ii++) {\n      var sectionID = prevSectionIDs[ii];\n      warning(\n        !prevRowsHash[sectionID],\n        'SectionID appears more than once: ' + sectionID\n      );\n      prevRowsHash[sectionID] = keyedDictionaryFromArray(prevRowIDs[ii]);\n    }\n\n    // compare the 2 identity array and get the dirtied rows\n    this._dirtySections = [];\n    this._dirtyRows = [];\n\n    var dirty;\n    for (var sIndex = 0; sIndex < this.sectionIdentities.length; sIndex++) {\n      var sectionID = this.sectionIdentities[sIndex];\n      // dirty if the sectionHeader is new or _sectionHasChanged is true\n      dirty = !prevSectionsHash[sectionID];\n      var sectionHeaderHasChanged = this._sectionHeaderHasChanged;\n      if (!dirty && sectionHeaderHasChanged) {\n        dirty = sectionHeaderHasChanged(\n          this._getSectionHeaderData(prevDataBlob, sectionID),\n          this._getSectionHeaderData(this._dataBlob, sectionID)\n        );\n      }\n      this._dirtySections.push(!!dirty);\n\n      this._dirtyRows[sIndex] = [];\n      for (var rIndex = 0; rIndex < this.rowIdentities[sIndex].length; rIndex++) {\n        var rowID = this.rowIdentities[sIndex][rIndex];\n        // dirty if the section is new, row is new or _rowHasChanged is true\n        dirty =\n          !prevSectionsHash[sectionID] ||\n          !prevRowsHash[sectionID][rowID] ||\n          this._rowHasChanged(\n            this._getRowData(prevDataBlob, sectionID, rowID),\n            this._getRowData(this._dataBlob, sectionID, rowID)\n          );\n        this._dirtyRows[sIndex].push(!!dirty);\n      }\n    }\n  }\n}\n\nfunction countRows(allRowIDs) {\n  var totalRows = 0;\n  for (var sectionIdx = 0; sectionIdx < allRowIDs.length; sectionIdx++) {\n    var rowIDs = allRowIDs[sectionIdx];\n    totalRows += rowIDs.length;\n  }\n  return totalRows;\n}\n\nfunction keyedDictionaryFromArray(arr) {\n  if (isEmpty(arr)) {\n    return {};\n  }\n  var result = {};\n  for (var ii = 0; ii < arr.length; ii++) {\n    var key = arr[ii];\n    warning(!result[key], 'Value appears more than once in array: ' + key);\n    result[key] = true;\n  }\n  return result;\n}\n\n\nmodule.exports = ListViewDataSource;\n"
  },
  {
    "path": "web/common/html/ListView/ScrollResponder.js",
    "content": "import warning from 'fbjs/lib/warning';\n\n/**\n * Mixin that can be integrated in order to handle scrolling that plays well\n * with `ResponderEventPlugin`. Integrate with your platform specific scroll\n * views, or even your custom built (every-frame animating) scroll views so that\n * all of these systems play well with the `ResponderEventPlugin`.\n *\n * iOS scroll event timing nuances:\n * ===============================\n *\n *\n * Scrolling without bouncing, if you touch down:\n * -------------------------------\n *\n * 1. `onMomentumScrollBegin` (when animation begins after letting up)\n *    ... physical touch starts ...\n * 2. `onTouchStartCapture`   (when you press down to stop the scroll)\n * 3. `onTouchStart`          (same, but bubble phase)\n * 4. `onResponderRelease`    (when lifting up - you could pause forever before * lifting)\n * 5. `onMomentumScrollEnd`\n *\n *\n * Scrolling with bouncing, if you touch down:\n * -------------------------------\n *\n * 1. `onMomentumScrollBegin` (when animation begins after letting up)\n *    ... bounce begins ...\n *    ... some time elapses ...\n *    ... physical touch during bounce ...\n * 2. `onMomentumScrollEnd`   (Makes no sense why this occurs first during bounce)\n * 3. `onTouchStartCapture`   (immediately after `onMomentumScrollEnd`)\n * 4. `onTouchStart`          (same, but bubble phase)\n * 5. `onTouchEnd`            (You could hold the touch start for a long time)\n * 6. `onMomentumScrollBegin` (When releasing the view starts bouncing back)\n *\n * So when we receive an `onTouchStart`, how can we tell if we are touching\n * *during* an animation (which then causes the animation to stop)? The only way\n * to tell is if the `touchStart` occurred immediately after the\n * `onMomentumScrollEnd`.\n *\n * This is abstracted out for you, so you can just call this.scrollResponderIsAnimating() if\n * necessary\n *\n * `ScrollResponder` also includes logic for blurring a currently focused input\n * if one is focused while scrolling. The `ScrollResponder` is a natural place\n * to put this logic since it can support not dismissing the keyboard while\n * scrolling, unless a recognized \"tap\"-like gesture has occurred.\n *\n * The public lifecycle API includes events for keyboard interaction, responder\n * interaction, and scrolling (among others). The keyboard callbacks\n * `onKeyboardWill/Did/*` are *global* events, but are invoked on scroll\n * responder's props so that you can guarantee that the scroll responder's\n * internal state has been updated accordingly (and deterministically) by\n * the time the props callbacks are invoke. Otherwise, you would always wonder\n * if the scroll responder is currently in a state where it recognizes new\n * keyboard positions etc. If coordinating scrolling with keyboard movement,\n * *always* use these hooks instead of listening to your own global keyboard\n * events.\n *\n * Public keyboard lifecycle API: (props callbacks)\n *\n * Standard Keyboard Appearance Sequence:\n *\n *   this.props.onKeyboardWillShow\n *   this.props.onKeyboardDidShow\n *\n * `onScrollResponderKeyboardDismissed` will be invoked if an appropriate\n * tap inside the scroll responder's scrollable region was responsible\n * for the dismissal of the keyboard. There are other reasons why the\n * keyboard could be dismissed.\n *\n *   this.props.onScrollResponderKeyboardDismissed\n *\n * Standard Keyboard Hide Sequence:\n *\n *   this.props.onKeyboardWillHide\n *   this.props.onKeyboardDidHide\n */\n\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\n\ntype State = {\n    isTouching: boolean;\n    lastMomentumScrollBeginTime: number;\n    lastMomentumScrollEndTime: number;\n    observedScrollSinceBecomingResponder: boolean;\n    becameResponderWhileAnimating: boolean;\n};\ntype Event = Object;\n\nvar ScrollResponderMixin = {\n  // mixins: [Subscribable.Mixin],\n  // statics: RCTScrollViewConsts,\n  scrollResponderMixinGetInitialState: function(): State {\n    return {\n      isTouching: false,\n      lastMomentumScrollBeginTime: 0,\n      lastMomentumScrollEndTime: 0,\n\n      // Reset to false every time becomes responder. This is used to:\n      // - Determine if the scroll view has been scrolled and therefore should\n      // refuse to give up its responder lock.\n      // - Determine if releasing should dismiss the keyboard when we are in\n      // tap-to-dismiss mode (!this.props.keyboardShouldPersistTaps).\n      observedScrollSinceBecomingResponder: false,\n      becameResponderWhileAnimating: false,\n    };\n  },\n\n  /**\n   * Invoke this from an `onScroll` event.\n   */\n  scrollResponderHandleScrollShouldSetResponder: function(): boolean {\n    return this.state.isTouching;\n  },\n\n  /**\n   * Merely touch starting is not sufficient for a scroll view to become the\n   * responder. Being the \"responder\" means that the very next touch move/end\n   * event will result in an action/movement.\n   *\n   * Invoke this from an `onStartShouldSetResponder` event.\n   *\n   * `onStartShouldSetResponder` is used when the next move/end will trigger\n   * some UI movement/action, but when you want to yield priority to views\n   * nested inside of the view.\n   *\n   * There may be some cases where scroll views actually should return `true`\n   * from `onStartShouldSetResponder`: Any time we are detecting a standard tap\n   * that gives priority to nested views.\n   *\n   * - If a single tap on the scroll view triggers an action such as\n   *   recentering a map style view yet wants to give priority to interaction\n   *   views inside (such as dropped pins or labels), then we would return true\n   *   from this method when there is a single touch.\n   *\n   * - Similar to the previous case, if a two finger \"tap\" should trigger a\n   *   zoom, we would check the `touches` count, and if `>= 2`, we would return\n   *   true.\n   *\n   */\n  scrollResponderHandleStartShouldSetResponder: function(): boolean {\n    return false;\n  },\n\n  /**\n   * There are times when the scroll view wants to become the responder\n   * (meaning respond to the next immediate `touchStart/touchEnd`), in a way\n   * that *doesn't* give priority to nested views (hence the capture phase):\n   *\n   * - Currently animating.\n   * - Tapping anywhere that is not the focused input, while the keyboard is\n   *   up (which should dismiss the keyboard).\n   *\n   * Invoke this from an `onStartShouldSetResponderCapture` event.\n   */\n  scrollResponderHandleStartShouldSetResponderCapture: function(e: Event): boolean {\n    // First see if we want to eat taps while the keyboard is up\n    // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n    // if (!this.props.keyboardShouldPersistTaps &&\n    //   currentlyFocusedTextInput != null &&\n    //   e.target !== currentlyFocusedTextInput) {\n    //   return true;\n    // }\n    return this.scrollResponderIsAnimating();\n  },\n\n  /**\n   * make sure responder is `listview` self\n   *\n   * Invoke this from an `onMoveShouldSetResponderCapture` event\n   */\n  scrollResponderHandleMoveShouldSetResponderCapture: function(e: Event): boolean {\n    return true;\n  },\n\n  /**\n   * Invoke this from an `onResponderReject` event.\n   *\n   * Some other element is not yielding its role as responder. Normally, we'd\n   * just disable the `UIScrollView`, but a touch has already began on it, the\n   * `UIScrollView` will not accept being disabled after that. The easiest\n   * solution for now is to accept the limitation of disallowing this\n   * altogether. To improve this, find a way to disable the `UIScrollView` after\n   * a touch has already started.\n   */\n  scrollResponderHandleResponderReject: function() {\n    warning(false, \"ScrollView doesn't take rejection well - scrolls anyway\");\n  },\n\n  /**\n   * We will allow the scroll view to give up its lock iff it acquired the lock\n   * during an animation. This is a very useful default that happens to satisfy\n   * many common user experiences.\n   *\n   * - Stop a scroll on the left edge, then turn that into an outer view's\n   *   backswipe.\n   * - Stop a scroll mid-bounce at the top, continue pulling to have the outer\n   *   view dismiss.\n   * - However, without catching the scroll view mid-bounce (while it is\n   *   motionless), if you drag far enough for the scroll view to become\n   *   responder (and therefore drag the scroll view a bit), any backswipe\n   *   navigation of a swipe gesture higher in the view hierarchy, should be\n   *   rejected.\n   */\n  scrollResponderHandleTerminationRequest: function(): boolean {\n    return !this.state.observedScrollSinceBecomingResponder;\n  },\n\n  /**\n   * Invoke this from an `onTouchEnd` event.\n   *\n   * @param {SyntheticEvent} e Event.\n   */\n  scrollResponderHandleTouchEnd: function(e: Event) {\n    var nativeEvent = e.nativeEvent;\n    this.state.isTouching = nativeEvent.touches.length !== 0;\n    this.props.onTouchEnd && this.props.onTouchEnd(e);\n  },\n\n  /**\n   * Invoke this from an `onResponderRelease` event.\n   */\n  scrollResponderHandleResponderRelease: function(e: Event) {\n    this.props.onResponderRelease && this.props.onResponderRelease(e);\n\n    // By default scroll views will unfocus a textField\n    // if another touch occurs outside of it\n    // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n    if (!this.props.keyboardShouldPersistTaps &&\n      // currentlyFocusedTextInput != null && e.target !== currentlyFocusedTextInput &&\n      !this.state.observedScrollSinceBecomingResponder &&\n      !this.state.becameResponderWhileAnimating) {\n      this.props.onScrollResponderKeyboardDismissed &&\n        this.props.onScrollResponderKeyboardDismissed(e);\n      // TextInputState.blurTextInput(currentlyFocusedTextInput);\n    }\n  },\n\n  scrollResponderHandleScroll: function(e: Event) {\n    this.state.observedScrollSinceBecomingResponder = true;\n    this.props.onScroll && this.props.onScroll(e);\n  },\n\n  /**\n   * Invoke this from an `onResponderGrant` event.\n   */\n  scrollResponderHandleResponderGrant: function(e: Event) {\n    this.state.observedScrollSinceBecomingResponder = false;\n    this.props.onResponderGrant && this.props.onResponderGrant(e);\n    this.state.becameResponderWhileAnimating = this.scrollResponderIsAnimating();\n  },\n\n  /**\n   * Unfortunately, `onScrollBeginDrag` also fires when *stopping* the scroll\n   * animation, and there's not an easy way to distinguish a drag vs. stopping\n   * momentum.\n   *\n   * Invoke this from an `onScrollBeginDrag` event.\n   */\n  scrollResponderHandleScrollBeginDrag: function(e: Event) {\n    this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n  },\n\n  /**\n   * Invoke this from an `onScrollEndDrag` event.\n   */\n  scrollResponderHandleScrollEndDrag: function(e: Event) {\n    this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n  },\n\n  /**\n   * Invoke this from an `onMomentumScrollBegin` event.\n   */\n  scrollResponderHandleMomentumScrollBegin: function(e: Event) {\n    this.state.lastMomentumScrollBeginTime = Date.now();\n    this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n  },\n\n  /**\n   * Invoke this from an `onMomentumScrollEnd` event.\n   */\n  scrollResponderHandleMomentumScrollEnd: function(e: Event) {\n    this.state.lastMomentumScrollEndTime = Date.now();\n    this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n  },\n\n  /**\n   * Invoke this from an `onTouchStart` event.\n   *\n   * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n   * order, after `ResponderEventPlugin`, we can detect that we were *not*\n   * permitted to be the responder (presumably because a contained view became\n   * responder). The `onResponderReject` won't fire in that case - it only\n   * fires when a *current* responder rejects our request.\n   *\n   * @param {SyntheticEvent} e Touch Start event.\n   */\n  scrollResponderHandleTouchStart: function(e: Event) {\n    this.state.isTouching = true;\n    this.props.onTouchStart && this.props.onTouchStart(e);\n  },\n\n  /**\n   * Invoke this from an `onTouchMove` event.\n   *\n   * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n   * order, after `ResponderEventPlugin`, we can detect that we were *not*\n   * permitted to be the responder (presumably because a contained view became\n   * responder). The `onResponderReject` won't fire in that case - it only\n   * fires when a *current* responder rejects our request.\n   *\n   * @param {SyntheticEvent} e Touch Start event.\n   */\n  scrollResponderHandleTouchMove: function(e: Event) {\n    this.props.onTouchMove && this.props.onTouchMove(e);\n  },\n\n  /**\n   * A helper function for this class that lets us quickly determine if the\n   * view is currently animating. This is particularly useful to know when\n   * a touch has just started or ended.\n   */\n  scrollResponderIsAnimating: function(): boolean {\n    var now = Date.now();\n    var timeSinceLastMomentumScrollEnd = now - this.state.lastMomentumScrollEndTime;\n    var isAnimating = timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS ||\n      this.state.lastMomentumScrollEndTime < this.state.lastMomentumScrollBeginTime;\n    return isAnimating;\n  },\n\n  /**\n   * A helper function to scroll to a specific point  in the scrollview.\n   * This is currently used to help focus on child textview's, but this\n   * can also be used to quickly scroll to any element we want to focus\n   */\n  scrollResponderScrollTo: function(offsetX: number, offsetY: number) {\n    // TODO: Add scroll animation\n    this.scrollResponderScrollWithouthAnimationTo(offsetX, offsetY);\n  },\n\n  /**\n   * Like `scrollResponderScrollTo` but immediately scrolls to the given\n   * position\n   */\n  scrollResponderScrollWithouthAnimationTo: function(offsetX: number, offsetY: number) {\n\n    var node = React.findDOMNode(this);\n    node.offsetX = offsetX;\n    node.offsetY = offsetY;\n  },\n\n  /**\n   * A helper function to zoom to a specific rect in the scrollview.\n   * @param {object} rect Should have shape {x, y, width, height}\n   */\n  scrollResponderZoomTo: function(rect: { x: number; y: number; width: number; height: number; }) {\n    // RCTUIManager.zoomToRect(React.findNodeHandle(this), rect);\n    // TODO\n  },\n\n  /**\n   * This method should be used as the callback to onFocus in a TextInputs'\n   * parent view. Note that any module using this mixin needs to return\n   * the parent view's ref in getScrollViewRef() in order to use this method.\n   * @param {any} nodeHandle The TextInput node handle\n   * @param {number} additionalOffset The scroll view's top \"contentInset\".\n   *        Default is 0.\n   * @param {bool} preventNegativeScrolling Whether to allow pulling the content\n   *        down to make it meet the keyboard's top. Default is false.\n   */\n  scrollResponderScrollNativeHandleToKeyboard: function(nodeHandle: any, additionalOffset?: number, preventNegativeScrollOffset?: bool) {\n    this.additionalScrollOffset = additionalOffset || 0;\n    this.preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n    // RCTUIManager.measureLayout(\n    //   nodeHandle,\n    //   React.findNodeHandle(this.getInnerViewNode()),\n    //   this.scrollResponderTextInputFocusError,\n    //   this.scrollResponderInputMeasureAndScrollToKeyboard\n    // );\n  },\n\n  /**\n   * The calculations performed here assume the scroll view takes up the entire\n   * screen - even if has some content inset. We then measure the offsets of the\n   * keyboard, and compensate both for the scroll view's \"contentInset\".\n   *\n   * @param {number} left Position of input w.r.t. table view.\n   * @param {number} top Position of input w.r.t. table view.\n   * @param {number} width Width of the text input.\n   * @param {number} height Height of the text input.\n   */\n  scrollResponderInputMeasureAndScrollToKeyboard: function(left: number, top: number, width: number, height: number) {\n    if (this.keyboardWillOpenTo) {\n      var scrollOffsetY =\n        top - this.keyboardWillOpenTo.endCoordinates.screenY + height +\n        this.additionalScrollOffset;\n\n      // By default, this can scroll with negative offset, pulling the content\n      // down so that the target component's bottom meets the keyboard's top.\n      // If requested otherwise, cap the offset at 0 minimum to avoid content\n      // shifting down.\n      if (this.preventNegativeScrollOffset) {\n        scrollOffsetY = Math.max(0, scrollOffsetY);\n      }\n      this.scrollResponderScrollTo(0, scrollOffsetY);\n    }\n    this.additionalOffset = 0;\n    this.preventNegativeScrollOffset = false;\n  },\n\n  scrollResponderTextInputFocusError: function(e: Event) {\n    console.error('Error measuring text field: ', e);\n  },\n\n  /**\n   * `componentWillMount` is the closest thing to a  standard \"constructor\" for\n   * React components.\n   *\n   * The `keyboardWillShow` is called before input focus.\n   */\n  componentWillMount: function() {\n    // this.keyboardWillOpenTo = null;\n    // this.additionalScrollOffset = 0;\n    // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardWillShow', this.scrollResponderKeyboardWillShow);\n    // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardWillHide', this.scrollResponderKeyboardWillHide);\n    // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardDidShow', this.scrollResponderKeyboardDidShow);\n    // this.addListenerOn(RCTDeviceEventEmitter, 'keyboardDidHide', this.scrollResponderKeyboardDidHide);\n    // warning(this.getInnerViewNode, 'You need to implement getInnerViewNode in '\n    //    + this.constructor.displayName + ' to get full'\n    //    + 'functionality from ScrollResponder mixin. See example of ListView and'\n    //    + ' ScrollView.');\n  },\n\n  /**\n   * Warning, this may be called several times for a single keyboard opening.\n   * It's best to store the information in this method and then take any action\n   * at a later point (either in `keyboardDidShow` or other).\n   *\n   * Here's the order that events occur in:\n   * - focus\n   * - willShow {startCoordinates, endCoordinates} several times\n   * - didShow several times\n   * - blur\n   * - willHide {startCoordinates, endCoordinates} several times\n   * - didHide several times\n   *\n   * The `ScrollResponder` providesModule callbacks for each of these events.\n   * Even though any user could have easily listened to keyboard events\n   * themselves, using these `props` callbacks ensures that ordering of events\n   * is consistent - and not dependent on the order that the keyboard events are\n   * subscribed to. This matters when telling the scroll view to scroll to where\n   * the keyboard is headed - the scroll responder better have been notified of\n   * the keyboard destination before being instructed to scroll to where the\n   * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything\n   * will work.\n   *\n   * WARNING: These callbacks will fire even if a keyboard is displayed in a\n   * different navigation pane. Filter out the events to determine if they are\n   * relevant to you. (For example, only if you receive these callbacks after\n   * you had explicitly focused a node etc).\n   */\n  scrollResponderKeyboardWillShow: function(e: Event) {\n    this.keyboardWillOpenTo = e;\n    this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n  },\n\n  scrollResponderKeyboardWillHide: function(e: Event) {\n    this.keyboardWillOpenTo = null;\n    this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n  },\n\n  scrollResponderKeyboardDidShow: function(e: Event) {\n    // TODO(7693961): The event for DidShow is not available on iOS yet.\n    // Use the one from WillShow and do not assign.\n    if (e) {\n      this.keyboardWillOpenTo = e;\n    }\n    this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n  },\n\n  scrollResponderKeyboardDidHide: function() {\n    this.keyboardWillOpenTo = null;\n    this.props.onKeyboardDidHide && this.props.onKeyboardDidHide();\n  }\n\n};\n\nvar ScrollResponder = {\n  Mixin: ScrollResponderMixin,\n};\n\nmodule.exports = ScrollResponder;\n"
  },
  {
    "path": "web/common/html/ListView/StaticRenderer.js",
    "content": "var StaticRenderer = React.createClass({\n  propTypes: {\n    shouldUpdate: React.PropTypes.bool.isRequired,\n    render: React.PropTypes.func.isRequired,\n  },\n\n  shouldComponentUpdate: function(nextProps: { shouldUpdate: boolean }): boolean {\n    return nextProps.shouldUpdate;\n  },\n\n  render: function(): ReactElement {\n    return this.props.render();\n  },\n});\n\nmodule.exports = StaticRenderer;\n"
  },
  {
    "path": "web/common/html/ListView.js",
    "content": "module.exports = require('./ListView/ListView');"
  },
  {
    "path": "web/common/html/NavBar.js",
    "content": "var Element = require('./Element');\nclass NavBar extends Element {\n\tconstructor() {\n\t\tsuper();\n\t}\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t<div style={{height: 30, textAlign: 'center', clear: 'both'}} {...this.props}>\n\t\t\t{this.props.title.title}\n\t\t\t{\n\t\t\t\tthis.props.leftButton ? <button style={{float: 'left'}} onClick={this.props.leftButton.handler}>{this.props.leftButton.title}</button> : null\n\t\t\t}\n\t\t\t{\n\t\t\t\tthis.props.rightButton ? <button style={{float: 'right'}} onClick={this.props.rightButton.handler}>{this.props.rightButton.title}</button> : null\n\t\t\t}\n\t\t</div>\n\t\t);\n\t}\n}\n\n\n\nmodule.exports = NavBar;"
  },
  {
    "path": "web/common/html/Navigator.js",
    "content": "var Element = require('./Element');\nclass Navigator extends Element {\n\tconstructor() {\n\t\tsuper();\n\t\twindow.pageRoute = window.pageRoute || new BrowserNav();\n\t}\n\tcomponentDidMount() {\n\t\tpageRoute.setContainer(this.refs.J_navigator);\n\t\tpageRoute.push(this.props.initialRoute);\n\t\tpageRoute.route = this.props.initialRoute;\n\t}\n\trender() {\n\t\treturn <div ref=\"J_navigator\"/>;\n\t}\n}\nclass BrowserNav {\n\tconstructor(config) {\n\t\tthis.indexs = [];\n\t\tthis.route = {};\n\t\tthis.pageHistory = [];\n\t\tthis.currentPageIndex = -1;\n\t}\n\tsetContainer(container){\n\t\tthis.container = container;\n\t}\n\tpush(route) {\n\t\tvar page =React.createElement(route.page, {\n\t\t\tnavigator: this\n\t\t});\n\t\tvar newPageContainer = document.createElement('div');\n\t\tthis.container.appendChild(newPageContainer);\n\t\tif(this.currentPageIndex >= 0){\n\t\t\tthis.pageHistory[this.currentPageIndex].container.style.display = 'none';\n\t\t}\n\t\tthis.pageHistory.push({\n\t\t\tcontainer: newPageContainer,\n\t\t\tpage: page \n\t\t});\n\t\tthis.currentPageIndex = this.pageHistory.length - 1;\n\t\tReact.render(page, newPageContainer);\n\t}\n\tpop() {\n\t\tif(this.pageHistory.length > 0){\n\t\t\tvar lastPageInfo = this.pageHistory.pop();\n\t\t\tlastPageInfo.container.style.display = 'none';\n\t\t\tthis.currentPageIndex = this.pageHistory.length - 1;\n\t\t\tthis.pageHistory[this.currentPageIndex].container.style.display = 'block';\n\t\t\t//lastPageInfo.page.componentWillUnmount();\n\t\t}\n\t\t\t\n\t\t\n\t}\n}\n\n\nmodule.exports = Navigator;"
  },
  {
    "path": "web/common/html/RightSliderMenu.js",
    "content": "class RightSliderMenu extends Element{\n\trender(){\n\t\tthis.compatHTML();\n\t\treturn <div {...this.props}>{this.props.children}</div>;\n\t}\n}\nmodule.exports = RightSliderMenu;"
  },
  {
    "path": "web/common/html/ScrollView/ScrollView.js",
    "content": "import ScrollResponder from '../ListView/ScrollResponder';\nimport View from '../View/View';\nimport throttle from 'domkit/throttle';\n\nvar SCROLLVIEW = 'ScrollView';\nvar INNERVIEW = 'InnerScrollView';\n\n/**\n * Component that wraps platform ScrollView while providing\n * integration with touch locking \"responder\" system.\n *\n * Keep in mind that ScrollViews must have a bounded height in order to work,\n * since they contain unbounded-height children into a bounded container (via\n * a scroll interaction). In order to bound the height of a ScrollView, either\n * set the height of the view directly (discouraged) or make sure all parent\n * views have bounded height. Forgetting to transfer `{flex: 1}` down the\n * view stack can lead to errors here, which the element inspector makes\n * easy to debug.\n *\n * Doesn't yet support other contained responders from blocking this scroll\n * view from becoming the responder.\n */\nvar ScrollView = React.createClass({\n  propTypes: {\n    /**\n     * Controls whether iOS should automatically adjust the content inset\n     * for scroll views that are placed behind a navigation bar or\n     * tab bar/ toolbar. The default value is true.\n     * @platform ios\n     */\n    automaticallyAdjustContentInsets: React.PropTypes.bool,\n    /**\n     * The amount by which the scroll view content is inset from the edges\n     * of the scroll view. Defaults to `{0, 0, 0, 0}`.\n     * @platform ios\n     */\n    // contentInset: EdgeInsetsPropType,\n    /**\n     * Used to manually set the starting scroll offset.\n     * The default value is `{x: 0, y: 0}`.\n     * @platform ios\n     */\n    // contentOffset: PointPropType,\n    /**\n     * When true, the scroll view bounces when it reaches the end of the\n     * content if the content is larger then the scroll view along the axis of\n     * the scroll direction. When false, it disables all bouncing even if\n     * the `alwaysBounce*` props are true. The default value is true.\n     * @platform ios\n     */\n    bounces: React.PropTypes.bool,\n    /**\n     * When true, gestures can drive zoom past min/max and the zoom will animate\n     * to the min/max value at gesture end, otherwise the zoom will not exceed\n     * the limits.\n     * @platform ios\n     */\n    bouncesZoom: React.PropTypes.bool,\n    /**\n     * When true, the scroll view bounces horizontally when it reaches the end\n     * even if the content is smaller than the scroll view itself. The default\n     * value is true when `horizontal={true}` and false otherwise.\n     * @platform ios\n     */\n    alwaysBounceHorizontal: React.PropTypes.bool,\n    /**\n     * When true, the scroll view bounces vertically when it reaches the end\n     * even if the content is smaller than the scroll view itself. The default\n     * value is false when `horizontal={true}` and true otherwise.\n     * @platform ios\n     */\n    alwaysBounceVertical: React.PropTypes.bool,\n    /**\n     * When true, the scroll view automatically centers the content when the\n     * content is smaller than the scroll view bounds; when the content is\n     * larger than the scroll view, this property has no effect. The default\n     * value is false.\n     * @platform ios\n     */\n    centerContent: React.PropTypes.bool,\n    /**\n     * These styles will be applied to the scroll view content container which\n     * wraps all of the child views. Example:\n     *\n     *   return (\n     *     <ScrollView contentContainerStyle={styles.contentContainer}>\n     *     </ScrollView>\n     *   );\n     *   ...\n     *   var styles = StyleSheet.create({\n     *     contentContainer: {\n     *       paddingVertical: 20\n     *     }\n     *   });\n     */\n    // contentContainerStyle: StyleSheetPropType(ViewStylePropTypes),\n    /**\n     * A floating-point number that determines how quickly the scroll view\n     * decelerates after the user lifts their finger. Reasonable choices include\n     *   - Normal: 0.998 (the default)\n     *   - Fast: 0.9\n     * @platform ios\n     */\n    decelerationRate: React.PropTypes.number,\n    /**\n     * When true, the scroll view's children are arranged horizontally in a row\n     * instead of vertically in a column. The default value is false.\n     */\n    horizontal: React.PropTypes.bool,\n    /**\n     * When true, the ScrollView will try to lock to only vertical or horizontal\n     * scrolling while dragging.  The default value is false.\n     * @platform ios\n     */\n    directionalLockEnabled: React.PropTypes.bool,\n    /**\n     * When false, once tracking starts, won't try to drag if the touch moves.\n     * The default value is true.\n     * @platform ios\n     */\n    canCancelContentTouches: React.PropTypes.bool,\n    /**\n     * Determines whether the keyboard gets dismissed in response to a drag.\n     *   - 'none' (the default), drags do not dismiss the keyboard.\n     *   - 'on-drag', the keyboard is dismissed when a drag begins.\n     *   - 'interactive', the keyboard is dismissed interactively with the drag and moves in\n     *     synchrony with the touch; dragging upwards cancels the dismissal.\n     *     On android this is not supported and it will have the same behavior as 'none'.\n     */\n    keyboardDismissMode: React.PropTypes.oneOf([\n      'none', // default\n      'interactive',\n      'on-drag',\n    ]),\n    /**\n     * When false, tapping outside of the focused text input when the keyboard\n     * is up dismisses the keyboard. When true, the scroll view will not catch\n     * taps, and the keyboard will not dismiss automatically. The default value\n     * is false.\n     */\n    keyboardShouldPersistTaps: React.PropTypes.bool,\n    /**\n     * The maximum allowed zoom scale. The default value is 1.0.\n     * @platform ios\n     */\n    maximumZoomScale: React.PropTypes.number,\n    /**\n     * The minimum allowed zoom scale. The default value is 1.0.\n     * @platform ios\n     */\n    minimumZoomScale: React.PropTypes.number,\n    /**\n     * Fires at most once per frame during scrolling. The frequency of the\n     * events can be contolled using the `scrollEventThrottle` prop.\n     */\n    onScroll: React.PropTypes.func,\n    /**\n     * Called when a scrolling animation ends.\n     * @platform ios\n     */\n    onScrollAnimationEnd: React.PropTypes.func,\n    /**\n     * When true, the scroll view stops on multiples of the scroll view's size\n     * when scrolling. This can be used for horizontal pagination. The default\n     * value is false.\n     * @platform ios\n     */\n    pagingEnabled: React.PropTypes.bool,\n    /**\n     * When false, the content does not scroll.\n     * The default value is true.\n     * @platform ios\n     */\n    scrollEnabled: React.PropTypes.bool,\n    /**\n     * This controls how often the scroll event will be fired while scrolling\n     * (in events per seconds). A higher number yields better accuracy for code\n     * that is tracking the scroll position, but can lead to scroll performance\n     * problems due to the volume of information being send over the bridge.\n     * The default value is zero, which means the scroll event will be sent\n     * only once each time the view is scrolled.\n     * @platform ios\n     */\n    scrollEventThrottle: React.PropTypes.number,\n    /**\n     * The amount by which the scroll view indicators are inset from the edges\n     * of the scroll view. This should normally be set to the same value as\n     * the `contentInset`. Defaults to `{0, 0, 0, 0}`.\n     * @platform ios\n     */\n    // scrollIndicatorInsets: EdgeInsetsPropType,\n    /**\n     * When true, the scroll view scrolls to top when the status bar is tapped.\n     * The default value is true.\n     * @platform ios\n     */\n    scrollsToTop: React.PropTypes.bool,\n    /**\n     * When true, shows a horizontal scroll indicator.\n     */\n    showsHorizontalScrollIndicator: React.PropTypes.bool,\n    /**\n     * When true, shows a vertical scroll indicator.\n     */\n    showsVerticalScrollIndicator: React.PropTypes.bool,\n    /**\n     * An array of child indices determining which children get docked to the\n     * top of the screen when scrolling. For example, passing\n     * `stickyHeaderIndices={[0]}` will cause the first child to be fixed to the\n     * top of the scroll view. This property is not supported in conjunction\n     * with `horizontal={true}`.\n     * @platform ios\n     */\n    stickyHeaderIndices: React.PropTypes.arrayOf(React.PropTypes.number),\n    // style: StyleSheetPropType(ViewStylePropTypes),\n    /**\n     * When set, causes the scroll view to stop at multiples of the value of\n     * `snapToInterval`. This can be used for paginating through children\n     * that have lengths smaller than the scroll view. Used in combination\n     * with `snapToAlignment`.\n     * @platform ios\n     */\n    snapToInterval: React.PropTypes.number,\n    /**\n     * When `snapToInterval` is set, `snapToAlignment` will define the relationship\n     * of the the snapping to the scroll view.\n     *   - `start` (the default) will align the snap at the left (horizontal) or top (vertical)\n     *   - `center` will align the snap in the center\n     *   - `end` will align the snap at the right (horizontal) or bottom (vertical)\n     * @platform ios\n     */\n    snapToAlignment: React.PropTypes.oneOf([\n      'start', // default\n      'center',\n      'end',\n    ]),\n    /**\n     * Experimental: When true, offscreen child views (whose `overflow` value is\n     * `hidden`) are removed from their native backing superview when offscreen.\n     * This can improve scrolling performance on long lists. The default value is\n     * false.\n     */\n    removeClippedSubviews: React.PropTypes.bool,\n    /**\n     * The current scale of the scroll view content. The default value is 1.0.\n     * @platform ios\n     */\n    zoomScale: React.PropTypes.number,\n  },\n\n  mixins: [ScrollResponder.Mixin],\n\n  getInitialState: function() {\n    return this.scrollResponderMixinGetInitialState();\n  },\n\n  /**\n   * Returns a reference to the underlying scroll responder, which supports\n   * operations like `scrollTo`. All ScrollView-like components should\n   * implement this method so that they can be composed while providing access\n   * to the underlying scroll responder's methods.\n   */\n  getScrollResponder: function(): ReactComponent {\n    return this;\n  },\n\n  getInnerViewNode: function(): any {\n    return this.refs[INNERVIEW];\n  },\n\n  scrollTo: function(destY?: number, destX?: number) {\n    // $FlowFixMe - Don't know how to pass Mixin correctly. Postpone for now\n    // this.getScrollResponder().scrollResponderScrollTo(destX || 0, destY || 0);\n    this.scrollWithoutAnimationTo(destY, destX);\n  },\n\n  scrollWithoutAnimationTo: function(destY?: number, destX?: number) {\n    // $FlowFixMe - Don't know how to pass Mixin correctly. Postpone for now\n    // this.getScrollResponder().scrollResponderScrollWithouthAnimationTo(\n    //   destX || 0,\n    //   destY || 0,\n    // );\n\n    var scrollView = React.findDOMNode(this.refs[SCROLLVIEW]);\n    scrollView.scrollTop = destY || 0;\n    scrollView.scrollLeft = destX || 0;\n  },\n\n  handleScroll: function(e: Event) {\n    // if (__DEV__) {\n    //   if (this.props.onScroll && !this.props.scrollEventThrottle) {\n    //     console.log(\n    //       'You specified `onScroll` on a <ScrollView> but not ' +\n    //       '`scrollEventThrottle`. You will only receive one event. ' +\n    //       'Using `16` you get all the events but be aware that it may ' +\n    //       'cause frame drops, use a bigger number if you don\\'t need as ' +\n    //       'much precision.'\n    //     );\n    //   }\n    // }\n    // if (Platform.OS === 'android') {\n    //   if (this.props.keyboardDismissMode === 'on-drag') {\n    //     dismissKeyboard();\n    //   }\n    // }\n\n    this.props.onScroll && this.props.onScroll(e);\n  },\n\n  render: function() {\n    var contentContainerStyle = [\n      styles.contentContainer,\n      this.props.horizontal && styles.contentContainerHorizontal,\n      this.props.contentContainerStyle,\n    ];\n    // if (__DEV__ && this.props.style) {\n    //   var style = flattenStyle(this.props.style);\n    //   var childLayoutProps = ['alignItems', 'justifyContent']\n    //     .filter((prop) => style && style[prop] !== undefined);\n    //   invariant(\n    //     childLayoutProps.length === 0,\n    //     'ScrollView child layout (' + JSON.stringify(childLayoutProps) +\n    //       ') must by applied through the contentContainerStyle prop.'\n    //   );\n    // }\n\n    var contentContainer =\n      <View\n        ref={INNERVIEW}\n        style={contentContainerStyle}\n        removeClippedSubviews={this.props.removeClippedSubviews}\n        collapsable={false}>\n        {this.props.children}\n      </View>;\n\n    var alwaysBounceHorizontal =\n      this.props.alwaysBounceHorizontal !== undefined ?\n        this.props.alwaysBounceHorizontal :\n        this.props.horizontal;\n\n    var alwaysBounceVertical =\n      this.props.alwaysBounceVertical !== undefined ?\n        this.props.alwaysBounceVertical :\n        !this.props.horizontal;\n\n    if (this.props.scrollEventThrottle && this.props.onScroll) {\n      var handleScroll = throttle(this.handleScroll, this.props.scrollEventThrottle);\n    }\n\n    var props = {\n      ...this.props,\n      alwaysBounceHorizontal,\n      alwaysBounceVertical,\n      style: ([styles.base, this.props.style]: ?Array<any>),\n      onTouchStart: this.scrollResponderHandleTouchStart,\n      onTouchMove: this.scrollResponderHandleTouchMove,\n      onTouchEnd: this.scrollResponderHandleTouchEnd,\n      onScrollBeginDrag: this.scrollResponderHandleScrollBeginDrag,\n      onScrollEndDrag: this.scrollResponderHandleScrollEndDrag,\n      onMomentumScrollBegin: this.scrollResponderHandleMomentumScrollBegin,\n      onMomentumScrollEnd: this.scrollResponderHandleMomentumScrollEnd,\n      onStartShouldSetResponder: this.scrollResponderHandleStartShouldSetResponder,\n      onStartShouldSetResponderCapture: this.scrollResponderHandleStartShouldSetResponderCapture,\n      // onScrollShouldSetResponder: this.scrollResponderHandleScrollShouldSetResponder,\n      // onScroll: handleScroll,\n      onScrollShouldSetResponder: handleScroll,\n      // replace onScroll in the props\n      onScroll: function() {},\n      onResponderGrant: this.scrollResponderHandleResponderGrant,\n      onResponderTerminationRequest: this.scrollResponderHandleTerminationRequest,\n      onResponderTerminate: this.scrollResponderHandleTerminate,\n      onResponderRelease: this.scrollResponderHandleResponderRelease,\n      onResponderReject: this.scrollResponderHandleResponderReject,\n    };\n\n    return (\n      <View {...props} ref={SCROLLVIEW}>\n        {contentContainer}\n      </View>\n    );\n  }\n});\n\nvar styles = {\n  base: {\n    overflow: 'scroll',\n    WebkitOverflowScrolling: 'touch',\n    flex: 1,\n  },\n  contentContainer: {\n    position: 'absolute',\n    minWidth: '100%',\n  },\n  contentContainerHorizontal: {\n    alignSelf: 'flex-start',\n    flexDirection: 'row',\n  },\n};\n\nmodule.exports = ScrollView;\n"
  },
  {
    "path": "web/common/html/ScrollView.js",
    "content": "class ScrollView extends Element{\n\trender(){\n\t\tthis.compatHTML();\n\t\treturn <div {...this.props}>{this.props.children}</div>;\n\t}\n}\nmodule.exports = ScrollView;"
  },
  {
    "path": "web/common/html/SimpleListView.js",
    "content": "class SimpleListView extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn <ListView {...this.props} />;\n\t}\n}\nSimpleListView.initDataSource = () => {\n\tvar ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});\n\tvar defaultDS = ds.cloneWithRows([]);\n\treturn defaultDS;\n}\nmodule.exports = SimpleListView;"
  },
  {
    "path": "web/common/html/Span.js",
    "content": "var Element = require('./Element');\nclass Span extends Element {\n\trender() {\n\t\tthis.compatHTML();\n\t\treturn <span {...this.props}/>;\n\t}\n}\nmodule.exports = Span;"
  },
  {
    "path": "web/common/html/TabSlider.js",
    "content": "class TabSlider extends Element{\n\trender(){\n\t\tthis.compatHTML();\n\t\treturn (\n\t\t\t\t<div className=\"ui-tab\">\n\t\t\t\t\t<div className=\"ui-tab-item ui-tab-cur\" onClick={this.selected.bind(this,0)}>按起降地</div>\n\t\t\t\t\t<div className=\"ui-tab-item\" onClick={this.selected.bind(this,1)}>按航班号</div>\n\t\t\t\t\t<div className=\"ui-tab-item\" onClick={this.selected.bind(this,2)}>我的关注</div>\n\t\t\t\t\t<div className=\"ui-bottom\"></div>\n\t\t\t\t</div>\n\t\t);\n\t}\n\tselected(idx){\n\t\tthis.props.config.onChange(idx);\n\t}\n}\nmodule.exports = TabSlider;"
  },
  {
    "path": "web/common/html/Utilties/ErrorUitls.js",
    "content": "/* eslint global-strict:0 */\n(function(global) {\n  var ErrorUtils = {\n    _inGuard: 0,\n    _globalHandler: null,\n    setGlobalHandler: function(fun) {\n      ErrorUtils._globalHandler = fun;\n    },\n    reportError: function(error) {\n      ErrorUtils._globalHandler && ErrorUtils._globalHandler(error);\n    },\n    reportFatalError: function(error) {\n      ErrorUtils._globalHandler && ErrorUtils._globalHandler(error, true);\n    },\n    applyWithGuard: function(fun, context, args) {\n      try {\n        ErrorUtils._inGuard++;\n        return fun.apply(context, args);\n      } catch (e) {\n        ErrorUtils.reportError(e);\n      } finally {\n        ErrorUtils._inGuard--;\n      }\n    },\n    applyWithGuardIfNeeded: function(fun, context, args) {\n      if (ErrorUtils.inGuard()) {\n        return fun.apply(context, args);\n      } else {\n        ErrorUtils.applyWithGuard(fun, context, args);\n      }\n    },\n    inGuard: function() {\n      return ErrorUtils._inGuard;\n    },\n    guard: function(fun, name, context) {\n      if (typeof fun !== 'function') {\n        console.warn('A function must be passed to ErrorUtils.guard, got ', fun);\n        return null;\n      }\n      name = name || fun.name || '<generated guard>';\n      function guarded() {\n        return (\n          ErrorUtils.applyWithGuard(\n            fun,\n            context || this,\n            arguments,\n            null,\n            name\n          )\n        );\n      }\n\n      return guarded;\n    }\n  };\n  global.ErrorUtils = ErrorUtils;\n\n  /**\n   * This is the error handler that is called when we encounter an exception\n   * when loading a module.\n   */\n  function setupErrorGuard() {\n    var onError = function(e) {\n      global.console.error(\n        'Error: ' +\n        '\\n stack: ' + e.stack +\n        '\\n line: ' + e.line +\n        '\\n message: ' + e.message,\n        e\n      );\n    };\n    global.ErrorUtils.setGlobalHandler(onError);\n  }\n\n  setupErrorGuard();\n})(window);\n\nmodule.exports = ErrorUtils;\n"
  },
  {
    "path": "web/common/html/Utilties/LayoutMixin.js",
    "content": "import getLayout from './getLayout';\n\nvar LayoutMixin = {\n  getInitialState: function() {\n    return {layout: {}};\n  },\n\n  componentDidMount: function() {\n    this.layoutHandle();\n  },\n\n  componentDidUpdate: function() {\n    this.layoutHandle();\n  },\n\n  layoutHandle: function() {\n    if (this.props.onLayout) {\n\n      var layout = getLayout(React.findDOMNode(this));\n      var stateLayout = this.state.layout;\n      if (stateLayout.x !== layout.x || stateLayout.y !== layout.y || stateLayout.width !== layout.width || stateLayout.height !== layout.height) {\n        this.props.onLayout({nativeEvent: {layout}});\n        this.setState({layout});\n      }\n    }\n  }\n};\n\nmodule.exports = {\n  Mixin: LayoutMixin\n};\n"
  },
  {
    "path": "web/common/html/Utilties/dismissKeyboard.js",
    "content": "function dismissKeyboard() {\n  document.activeElement.blur();\n}\n\nmodule.exports = dismissKeyboard;\n"
  },
  {
    "path": "web/common/html/Utilties/getLayout.js",
    "content": "// get element x, y\nfunction getCumulativeOffset(obj) {\n  var left, top;\n  left = top = 0;\n  if (obj.offsetParent) {\n    do {\n      left += obj.offsetLeft;\n      top += obj.offsetTop;\n    } while (obj = obj.offsetParent);\n  }\n  return {\n    x : left,\n    y : top\n  };\n}\n\n// this functions returns the x, y, width and height of a given dom node\nfunction getLayout(element) {\n  var rect = getCumulativeOffset(element);\n  return {\n    x: rect.x,\n    y: rect.y,\n    width: element.offsetWidth,\n    height: element.offsetHeight\n  };\n}\n\nmodule.exports = getLayout;\n"
  },
  {
    "path": "web/common/html/Utilties/setNativeProps.js",
    "content": "function convertTransform(style) {\n  var result = {};\n  var transform = '';\n\n  for (var k in style) {\n    if (k === 'transformMatrix') {\n      transform += ( 'matrix3d(' + style[k].join(',') + ') ' );\n    }else if ( k === 'translateX' || k === 'translateY' || k === 'translateZ') {\n      var v = style[k];\n      if (typeof(v) === 'number') v += 'px';\n      transform += ( k + '(' + v + ') ' );\n    } else if (k === 'scaleX' || k === 'scaleY' || k === 'scaleZ') {\n      transform += ( k + '(' + style[k] + ') ');\n    } else {\n      var val = style[k];\n\n      if (typeof val == 'number') {\n        val += 'px';\n      }\n\n      result[k] = val;\n    }\n  }\n\n  if (transform) {\n    result.transform = transform;\n  }\n\n  return result;\n}\n\nfunction setNativeProps(ref, props) {\n  var node = React.findDOMNode(ref);\n  var style = props.style;\n\n  if (style) {\n    style = convertTransform(style);\n    for (var k in style) {\n      node.style[k] = style[k];\n    }\n  }\n}\n\nmodule.exports = setNativeProps;\n"
  },
  {
    "path": "web/common/html/View/View.js",
    "content": "import { Mixin as LayoutMixin } from '../Utilties/LayoutMixin';\n\nvar View = React.createClass({\n  mixins: [LayoutMixin],\n\n  propTypes: {\n    /**\n     * Used to locate this view in end-to-end tests. NB: disables the 'layout-only\n     * view removal' optimization for this view!\n     */\n    testID: React.PropTypes.string,\n\n    /**\n     * For most touch interactions, you'll simply want to wrap your component in\n     * `TouchableHighlight` or `TouchableOpacity`. Check out `Touchable.js`,\n     * `ScrollResponder.js` and `ResponderEventPlugin.js` for more discussion.\n     */\n    onMoveShouldSetResponder: React.PropTypes.func,\n    onResponderGrant: React.PropTypes.func,\n    onResponderMove: React.PropTypes.func,\n    onResponderReject: React.PropTypes.func,\n    onResponderRelease: React.PropTypes.func,\n    onResponderTerminate: React.PropTypes.func,\n    onResponderTerminationRequest: React.PropTypes.func,\n    onStartShouldSetResponder: React.PropTypes.func,\n    onStartShouldSetResponderCapture: React.PropTypes.func,\n\n    /**\n     * Invoked on mount and layout changes with\n     *\n     *   {nativeEvent: { layout: {x, y, width, height}}}.\n     *\n     * This event is fired immediately once the layout has been calculated, but\n     * the new layout may not yet be reflected on the screen at the time the\n     * event is received, especially if a layout animation is in progress.\n     */\n    onLayout: React.PropTypes.func,\n\n    /**\n     * In the absence of `auto` property, `none` is much like `CSS`'s `none`\n     * value. `box-none` is as if you had applied the `CSS` class:\n     *\n     * ```\n     * .box-none {\n     *   pointer-events: none;\n     * }\n     * .box-none * {\n     *   pointer-events: all;\n     * }\n     * ```\n     *\n     * `box-only` is the equivalent of\n     *\n     * ```\n     * .box-only {\n     *   pointer-events: all;\n     * }\n     * .box-only * {\n     *   pointer-events: none;\n     * }\n     * ```\n     *\n     * But since `pointerEvents` does not affect layout/appearance, and we are\n     * already deviating from the spec by adding additional modes, we opt to not\n     * include `pointerEvents` on `style`. On some platforms, we would need to\n     * implement it as a `className` anyways. Using `style` or not is an\n     * implementation detail of the platform.\n     */\n    pointerEvents: React.PropTypes.oneOf([\n      'box-none',\n      'none',\n      'box-only',\n      'auto',\n    ]),\n\n    style: React.PropTypes.oneOfType([\n      React.PropTypes.object,\n      React.PropTypes.array\n    ]),\n  },\n\n  render: function() {\n    return (\n      <div {...this.props}>\n        {this.props.children}\n      </div>\n    );\n  }\n});\n\nmodule.exports = View;\n"
  },
  {
    "path": "web/common/react.js",
    "content": " /**\n  * React v0.14.3\n  */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.React = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule React\n */\n\n'use strict';\n\nvar ReactDOM = _dereq_(35);\nvar ReactDOMServer = _dereq_(45);\nvar ReactIsomorphic = _dereq_(63);\n\nvar assign = _dereq_(23);\nvar deprecated = _dereq_(106);\n\n// `version` will be added here by ReactIsomorphic.\nvar React = {};\n\nassign(React, ReactIsomorphic);\n\nassign(React, {\n  // ReactDOM\n  findDOMNode: deprecated('findDOMNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.findDOMNode),\n  render: deprecated('render', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.render),\n  unmountComponentAtNode: deprecated('unmountComponentAtNode', 'ReactDOM', 'react-dom', ReactDOM, ReactDOM.unmountComponentAtNode),\n\n  // ReactDOMServer\n  renderToString: deprecated('renderToString', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToString),\n  renderToStaticMarkup: deprecated('renderToStaticMarkup', 'ReactDOMServer', 'react-dom/server', ReactDOMServer, ReactDOMServer.renderToStaticMarkup)\n});\n\nReact.__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOM;\nReact.__SECRET_DOM_SERVER_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactDOMServer;\n\nmodule.exports = React;\n},{\"106\":106,\"23\":23,\"35\":35,\"45\":45,\"63\":63}],2:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule AutoFocusUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactMount = _dereq_(65);\n\nvar findDOMNode = _dereq_(108);\nvar focusNode = _dereq_(138);\n\nvar Mixin = {\n  componentDidMount: function () {\n    if (this.props.autoFocus) {\n      focusNode(findDOMNode(this));\n    }\n  }\n};\n\nvar AutoFocusUtils = {\n  Mixin: Mixin,\n\n  focusDOMComponent: function () {\n    focusNode(ReactMount.getNode(this._rootNodeID));\n  }\n};\n\nmodule.exports = AutoFocusUtils;\n},{\"108\":108,\"138\":138,\"65\":65}],3:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015 Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule BeforeInputEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar EventPropagators = _dereq_(19);\nvar ExecutionEnvironment = _dereq_(130);\nvar FallbackCompositionState = _dereq_(20);\nvar SyntheticCompositionEvent = _dereq_(90);\nvar SyntheticInputEvent = _dereq_(94);\n\nvar keyOf = _dereq_(148);\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\nvar START_KEYCODE = 229;\n\nvar canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;\n\nvar documentMode = null;\nif (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {\n  documentMode = document.documentMode;\n}\n\n// Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\nvar canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();\n\n// In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\nvar useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\n\n/**\n * Opera <= 12 includes TextEvent in window, but does not fire\n * text input events. Rely on keypress instead.\n */\nfunction isPresto() {\n  var opera = window.opera;\n  return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;\n}\n\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\n// Events and their corresponding property names.\nvar eventTypes = {\n  beforeInput: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBeforeInput: null }),\n      captured: keyOf({ onBeforeInputCapture: null })\n    },\n    dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]\n  },\n  compositionEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionEnd: null }),\n      captured: keyOf({ onCompositionEndCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionStart: null }),\n      captured: keyOf({ onCompositionStartCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  },\n  compositionUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCompositionUpdate: null }),\n      captured: keyOf({ onCompositionUpdateCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]\n  }\n};\n\n// Track whether we've ever handled a keypress on the space key.\nvar hasSpaceKeypress = false;\n\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\nfunction isKeypressCommand(nativeEvent) {\n  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&\n  // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n  !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\nfunction getCompositionEventType(topLevelType) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionStart:\n      return eventTypes.compositionStart;\n    case topLevelTypes.topCompositionEnd:\n      return eventTypes.compositionEnd;\n    case topLevelTypes.topCompositionUpdate:\n      return eventTypes.compositionUpdate;\n  }\n}\n\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n  return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;\n}\n\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topKeyUp:\n      // Command keys insert or clear IME input.\n      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n    case topLevelTypes.topKeyDown:\n      // Expect IME keyCode on each keydown. If we get any other\n      // code we must have exited earlier.\n      return nativeEvent.keyCode !== START_KEYCODE;\n    case topLevelTypes.topKeyPress:\n    case topLevelTypes.topMouseDown:\n    case topLevelTypes.topBlur:\n      // Events are not possible without cancelling IME.\n      return true;\n    default:\n      return false;\n  }\n}\n\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\nfunction getDataFromCustomEvent(nativeEvent) {\n  var detail = nativeEvent.detail;\n  if (typeof detail === 'object' && 'data' in detail) {\n    return detail.data;\n  }\n  return null;\n}\n\n// Track the current IME composition fallback object, if any.\nvar currentComposition = null;\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticCompositionEvent.\n */\nfunction extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n  var eventType;\n  var fallbackData;\n\n  if (canUseCompositionEvent) {\n    eventType = getCompositionEventType(topLevelType);\n  } else if (!currentComposition) {\n    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n      eventType = eventTypes.compositionStart;\n    }\n  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n    eventType = eventTypes.compositionEnd;\n  }\n\n  if (!eventType) {\n    return null;\n  }\n\n  if (useFallbackCompositionData) {\n    // The current composition is stored statically and must not be\n    // overwritten while composition continues.\n    if (!currentComposition && eventType === eventTypes.compositionStart) {\n      currentComposition = FallbackCompositionState.getPooled(topLevelTarget);\n    } else if (eventType === eventTypes.compositionEnd) {\n      if (currentComposition) {\n        fallbackData = currentComposition.getData();\n      }\n    }\n  }\n\n  var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n  if (fallbackData) {\n    // Inject data generated from fallback path into the synthetic event.\n    // This matches the property of native CompositionEventInterface.\n    event.data = fallbackData;\n  } else {\n    var customData = getDataFromCustomEvent(nativeEvent);\n    if (customData !== null) {\n      event.data = customData;\n    }\n  }\n\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n  switch (topLevelType) {\n    case topLevelTypes.topCompositionEnd:\n      return getDataFromCustomEvent(nativeEvent);\n    case topLevelTypes.topKeyPress:\n      /**\n       * If native `textInput` events are available, our goal is to make\n       * use of them. However, there is a special case: the spacebar key.\n       * In Webkit, preventing default on a spacebar `textInput` event\n       * cancels character insertion, but it *also* causes the browser\n       * to fall back to its default spacebar behavior of scrolling the\n       * page.\n       *\n       * Tracking at:\n       * https://code.google.com/p/chromium/issues/detail?id=355103\n       *\n       * To avoid this issue, use the keypress event as if no `textInput`\n       * event is available.\n       */\n      var which = nativeEvent.which;\n      if (which !== SPACEBAR_CODE) {\n        return null;\n      }\n\n      hasSpaceKeypress = true;\n      return SPACEBAR_CHAR;\n\n    case topLevelTypes.topTextInput:\n      // Record the characters to be added to the DOM.\n      var chars = nativeEvent.data;\n\n      // If it's a spacebar character, assume that we have already handled\n      // it at the keypress level and bail immediately. Android Chrome\n      // doesn't give us keycodes, so we need to blacklist it.\n      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n        return null;\n      }\n\n      return chars;\n\n    default:\n      // For other native event types, do nothing.\n      return null;\n  }\n}\n\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n  // If we are currently composing (IME) and using a fallback to do so,\n  // try to extract the composed characters from the fallback object.\n  if (currentComposition) {\n    if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n      var chars = currentComposition.getData();\n      FallbackCompositionState.release(currentComposition);\n      currentComposition = null;\n      return chars;\n    }\n    return null;\n  }\n\n  switch (topLevelType) {\n    case topLevelTypes.topPaste:\n      // If a paste event occurs after a keypress, throw out the input\n      // chars. Paste events should not lead to BeforeInput events.\n      return null;\n    case topLevelTypes.topKeyPress:\n      /**\n       * As of v27, Firefox may fire keypress events even when no character\n       * will be inserted. A few possibilities:\n       *\n       * - `which` is `0`. Arrow keys, Esc key, etc.\n       *\n       * - `which` is the pressed key code, but no char is available.\n       *   Ex: 'AltGr + d` in Polish. There is no modified character for\n       *   this key combination and no character is inserted into the\n       *   document, but FF fires the keypress for char code `100` anyway.\n       *   No `input` event will occur.\n       *\n       * - `which` is the pressed key code, but a command combination is\n       *   being used. Ex: `Cmd+C`. No character is inserted, and no\n       *   `input` event will occur.\n       */\n      if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {\n        return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case topLevelTypes.topCompositionEnd:\n      return useFallbackCompositionData ? null : nativeEvent.data;\n    default:\n      return null;\n  }\n}\n\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @param {string} topLevelType Record from `EventConstants`.\n * @param {DOMEventTarget} topLevelTarget The listening component root node.\n * @param {string} topLevelTargetID ID of `topLevelTarget`.\n * @param {object} nativeEvent Native browser event.\n * @return {?object} A SyntheticInputEvent.\n */\nfunction extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n  var chars;\n\n  if (canUseTextInputEvent) {\n    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n  } else {\n    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n  }\n\n  // If no characters are being inserted, no BeforeInput event should\n  // be fired.\n  if (!chars) {\n    return null;\n  }\n\n  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent, nativeEventTarget);\n\n  event.data = chars;\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n  return event;\n}\n\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\nvar BeforeInputEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget)];\n  }\n};\n\nmodule.exports = BeforeInputEventPlugin;\n},{\"130\":130,\"148\":148,\"15\":15,\"19\":19,\"20\":20,\"90\":90,\"94\":94}],4:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSProperty\n */\n\n'use strict';\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n  animationIterationCount: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  flexOrder: true,\n  fontWeight: true,\n  lineClamp: true,\n  lineHeight: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n\n  // SVG-related properties\n  fillOpacity: true,\n  stopOpacity: true,\n  strokeDashoffset: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\n\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\nfunction prefixKey(prefix, key) {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\n// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n  prefixes.forEach(function (prefix) {\n    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n  });\n});\n\n/**\n * Most style properties can be unset by doing .style[prop] = '' but IE8\n * doesn't like doing that with shorthand properties so for the properties that\n * IE8 breaks on, which are listed here, we instead unset each of the\n * individual properties. See http://bugs.jquery.com/ticket/12385.\n * The 4-value 'clock' properties like margin, padding, border-width seem to\n * behave without any problems. Curiously, list-style works too without any\n * special prodding.\n */\nvar shorthandPropertyExpansions = {\n  background: {\n    backgroundAttachment: true,\n    backgroundColor: true,\n    backgroundImage: true,\n    backgroundPositionX: true,\n    backgroundPositionY: true,\n    backgroundRepeat: true\n  },\n  backgroundPosition: {\n    backgroundPositionX: true,\n    backgroundPositionY: true\n  },\n  border: {\n    borderWidth: true,\n    borderStyle: true,\n    borderColor: true\n  },\n  borderBottom: {\n    borderBottomWidth: true,\n    borderBottomStyle: true,\n    borderBottomColor: true\n  },\n  borderLeft: {\n    borderLeftWidth: true,\n    borderLeftStyle: true,\n    borderLeftColor: true\n  },\n  borderRight: {\n    borderRightWidth: true,\n    borderRightStyle: true,\n    borderRightColor: true\n  },\n  borderTop: {\n    borderTopWidth: true,\n    borderTopStyle: true,\n    borderTopColor: true\n  },\n  font: {\n    fontStyle: true,\n    fontVariant: true,\n    fontWeight: true,\n    fontSize: true,\n    lineHeight: true,\n    fontFamily: true\n  },\n  outline: {\n    outlineWidth: true,\n    outlineStyle: true,\n    outlineColor: true\n  }\n};\n\nvar CSSProperty = {\n  isUnitlessNumber: isUnitlessNumber,\n  shorthandPropertyExpansions: shorthandPropertyExpansions\n};\n\nmodule.exports = CSSProperty;\n},{}],5:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CSSPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = _dereq_(4);\nvar ExecutionEnvironment = _dereq_(130);\nvar ReactPerf = _dereq_(71);\n\nvar camelizeStyleName = _dereq_(132);\nvar dangerousStyleValue = _dereq_(105);\nvar hyphenateStyleName = _dereq_(143);\nvar memoizeStringOnly = _dereq_(150);\nvar warning = _dereq_(155);\n\nvar processStyleName = memoizeStringOnly(function (styleName) {\n  return hyphenateStyleName(styleName);\n});\n\nvar hasShorthandPropertyBug = false;\nvar styleFloatAccessor = 'cssFloat';\nif (ExecutionEnvironment.canUseDOM) {\n  var tempStyle = document.createElement('div').style;\n  try {\n    // IE8 throws \"Invalid argument.\" if resetting shorthand style properties.\n    tempStyle.font = '';\n  } catch (e) {\n    hasShorthandPropertyBug = true;\n  }\n  // IE8 only supports accessing cssFloat (standard) as styleFloat\n  if (document.documentElement.style.cssFloat === undefined) {\n    styleFloatAccessor = 'styleFloat';\n  }\n}\n\nif (\"development\" !== 'production') {\n  // 'msTransform' is correct, but the other prefixes should be capitalized\n  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n\n  // style values shouldn't contain a semicolon\n  var badStyleValueWithSemicolonPattern = /;\\s*$/;\n\n  var warnedStyleNames = {};\n  var warnedStyleValues = {};\n\n  var warnHyphenatedStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    \"development\" !== 'production' ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : undefined;\n  };\n\n  var warnBadVendoredStyleName = function (name) {\n    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n      return;\n    }\n\n    warnedStyleNames[name] = true;\n    \"development\" !== 'production' ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : undefined;\n  };\n\n  var warnStyleValueWithSemicolon = function (name, value) {\n    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n      return;\n    }\n\n    warnedStyleValues[value] = true;\n    \"development\" !== 'production' ? warning(false, 'Style property values shouldn\\'t contain a semicolon. ' + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : undefined;\n  };\n\n  /**\n   * @param {string} name\n   * @param {*} value\n   */\n  var warnValidStyle = function (name, value) {\n    if (name.indexOf('-') > -1) {\n      warnHyphenatedStyleName(name);\n    } else if (badVendoredStyleNamePattern.test(name)) {\n      warnBadVendoredStyleName(name);\n    } else if (badStyleValueWithSemicolonPattern.test(value)) {\n      warnStyleValueWithSemicolon(name, value);\n    }\n  };\n}\n\n/**\n * Operations for dealing with CSS properties.\n */\nvar CSSPropertyOperations = {\n\n  /**\n   * Serializes a mapping of style properties for use as inline styles:\n   *\n   *   > createMarkupForStyles({width: '200px', height: 0})\n   *   \"width:200px;height:0;\"\n   *\n   * Undefined values are ignored so that declarative programming is easier.\n   * The result should be HTML-escaped before insertion into the DOM.\n   *\n   * @param {object} styles\n   * @return {?string}\n   */\n  createMarkupForStyles: function (styles) {\n    var serialized = '';\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      var styleValue = styles[styleName];\n      if (\"development\" !== 'production') {\n        warnValidStyle(styleName, styleValue);\n      }\n      if (styleValue != null) {\n        serialized += processStyleName(styleName) + ':';\n        serialized += dangerousStyleValue(styleName, styleValue) + ';';\n      }\n    }\n    return serialized || null;\n  },\n\n  /**\n   * Sets the value for multiple styles on a node.  If a value is specified as\n   * '' (empty string), the corresponding style property will be unset.\n   *\n   * @param {DOMElement} node\n   * @param {object} styles\n   */\n  setValueForStyles: function (node, styles) {\n    var style = node.style;\n    for (var styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) {\n        continue;\n      }\n      if (\"development\" !== 'production') {\n        warnValidStyle(styleName, styles[styleName]);\n      }\n      var styleValue = dangerousStyleValue(styleName, styles[styleName]);\n      if (styleName === 'float') {\n        styleName = styleFloatAccessor;\n      }\n      if (styleValue) {\n        style[styleName] = styleValue;\n      } else {\n        var expansion = hasShorthandPropertyBug && CSSProperty.shorthandPropertyExpansions[styleName];\n        if (expansion) {\n          // Shorthand property that IE8 won't like unsetting, so unset each\n          // component to placate it\n          for (var individualStyleName in expansion) {\n            style[individualStyleName] = '';\n          }\n        } else {\n          style[styleName] = '';\n        }\n      }\n    }\n  }\n\n};\n\nReactPerf.measureMethods(CSSPropertyOperations, 'CSSPropertyOperations', {\n  setValueForStyles: 'setValueForStyles'\n});\n\nmodule.exports = CSSPropertyOperations;\n},{\"105\":105,\"130\":130,\"132\":132,\"143\":143,\"150\":150,\"155\":155,\"4\":4,\"71\":71}],6:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule CallbackQueue\n */\n\n'use strict';\n\nvar PooledClass = _dereq_(24);\n\nvar assign = _dereq_(23);\nvar invariant = _dereq_(144);\n\n/**\n * A specialized pseudo-event module to help keep track of components waiting to\n * be notified when their DOM representations are available for use.\n *\n * This implements `PooledClass`, so you should never need to instantiate this.\n * Instead, use `CallbackQueue.getPooled()`.\n *\n * @class ReactMountReady\n * @implements PooledClass\n * @internal\n */\nfunction CallbackQueue() {\n  this._callbacks = null;\n  this._contexts = null;\n}\n\nassign(CallbackQueue.prototype, {\n\n  /**\n   * Enqueues a callback to be invoked when `notifyAll` is invoked.\n   *\n   * @param {function} callback Invoked when `notifyAll` is invoked.\n   * @param {?object} context Context to call `callback` with.\n   * @internal\n   */\n  enqueue: function (callback, context) {\n    this._callbacks = this._callbacks || [];\n    this._contexts = this._contexts || [];\n    this._callbacks.push(callback);\n    this._contexts.push(context);\n  },\n\n  /**\n   * Invokes all enqueued callbacks and clears the queue. This is invoked after\n   * the DOM representation of a component has been created or updated.\n   *\n   * @internal\n   */\n  notifyAll: function () {\n    var callbacks = this._callbacks;\n    var contexts = this._contexts;\n    if (callbacks) {\n      !(callbacks.length === contexts.length) ? \"development\" !== 'production' ? invariant(false, 'Mismatched list of contexts in callback queue') : invariant(false) : undefined;\n      this._callbacks = null;\n      this._contexts = null;\n      for (var i = 0; i < callbacks.length; i++) {\n        callbacks[i].call(contexts[i]);\n      }\n      callbacks.length = 0;\n      contexts.length = 0;\n    }\n  },\n\n  /**\n   * Resets the internal queue.\n   *\n   * @internal\n   */\n  reset: function () {\n    this._callbacks = null;\n    this._contexts = null;\n  },\n\n  /**\n   * `PooledClass` looks for this.\n   */\n  destructor: function () {\n    this.reset();\n  }\n\n});\n\nPooledClass.addPoolingTo(CallbackQueue);\n\nmodule.exports = CallbackQueue;\n},{\"144\":144,\"23\":23,\"24\":24}],7:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ChangeEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar EventPluginHub = _dereq_(16);\nvar EventPropagators = _dereq_(19);\nvar ExecutionEnvironment = _dereq_(130);\nvar ReactUpdates = _dereq_(83);\nvar SyntheticEvent = _dereq_(92);\n\nvar getEventTarget = _dereq_(114);\nvar isEventSupported = _dereq_(119);\nvar isTextInputElement = _dereq_(120);\nvar keyOf = _dereq_(148);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  change: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onChange: null }),\n      captured: keyOf({ onChangeCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]\n  }\n};\n\n/**\n * For IE shims\n */\nvar activeElement = null;\nvar activeElementID = null;\nvar activeElementValue = null;\nvar activeElementValueProp = null;\n\n/**\n * SECTION: handle `change` event\n */\nfunction shouldUseChangeEvent(elem) {\n  var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nvar doesChangeEventBubble = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // See `handleChange` comment below\n  doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n  var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent, getEventTarget(nativeEvent));\n  EventPropagators.accumulateTwoPhaseDispatches(event);\n\n  // If change and propertychange bubbled, we'd just bind to it like all the\n  // other events and have it go through ReactBrowserEventEmitter. Since it\n  // doesn't, we manually listen for the events and so we have to enqueue and\n  // process the abstract event manually.\n  //\n  // Batching is necessary here in order to ensure that all event handlers run\n  // before the next rerender (including event handlers attached to ancestor\n  // elements instead of directly on the input). Without this, controlled\n  // components don't work properly in conjunction with event bubbling because\n  // the component is rerendered and the value reverted before all the event\n  // handlers can run. See https://github.com/facebook/react/issues/708.\n  ReactUpdates.batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n  EventPluginHub.enqueueEvents(event);\n  EventPluginHub.processEventQueue(false);\n}\n\nfunction startWatchingForChangeEventIE8(target, targetID) {\n  activeElement = target;\n  activeElementID = targetID;\n  activeElement.attachEvent('onchange', manualDispatchChangeEvent);\n}\n\nfunction stopWatchingForChangeEventIE8() {\n  if (!activeElement) {\n    return;\n  }\n  activeElement.detachEvent('onchange', manualDispatchChangeEvent);\n  activeElement = null;\n  activeElementID = null;\n}\n\nfunction getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topChange) {\n    return topLevelTargetID;\n  }\n}\nfunction handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForChangeEventIE8();\n    startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForChangeEventIE8();\n  }\n}\n\n/**\n * SECTION: handle `input` event\n */\nvar isInputEventSupported = false;\nif (ExecutionEnvironment.canUseDOM) {\n  // IE9 claims to support the input event but fails to trigger it when\n  // deleting text, so we ignore its input events\n  isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);\n}\n\n/**\n * (For old IE.) Replacement getter/setter for the `value` property that gets\n * set on the active element.\n */\nvar newValueProp = {\n  get: function () {\n    return activeElementValueProp.get.call(this);\n  },\n  set: function (val) {\n    // Cast to a string so we can do equality checks.\n    activeElementValue = '' + val;\n    activeElementValueProp.set.call(this, val);\n  }\n};\n\n/**\n * (For old IE.) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\nfunction startWatchingForValueChange(target, targetID) {\n  activeElement = target;\n  activeElementID = targetID;\n  activeElementValue = target.value;\n  activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');\n\n  // Not guarded in a canDefineProperty check: IE8 supports defineProperty only\n  // on DOM elements\n  Object.defineProperty(activeElement, 'value', newValueProp);\n  activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n\n/**\n * (For old IE.) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\nfunction stopWatchingForValueChange() {\n  if (!activeElement) {\n    return;\n  }\n\n  // delete restores the original property definition\n  delete activeElement.value;\n  activeElement.detachEvent('onpropertychange', handlePropertyChange);\n\n  activeElement = null;\n  activeElementID = null;\n  activeElementValue = null;\n  activeElementValueProp = null;\n}\n\n/**\n * (For old IE.) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\nfunction handlePropertyChange(nativeEvent) {\n  if (nativeEvent.propertyName !== 'value') {\n    return;\n  }\n  var value = nativeEvent.srcElement.value;\n  if (value === activeElementValue) {\n    return;\n  }\n  activeElementValue = value;\n\n  manualDispatchChangeEvent(nativeEvent);\n}\n\n/**\n * If a `change` event should be fired, returns the target's ID.\n */\nfunction getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topInput) {\n    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly\n    // what we want so fall through here and trigger an abstract event\n    return topLevelTargetID;\n  }\n}\n\n// For IE8 and IE9.\nfunction handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topFocus) {\n    // In IE8, we can capture almost all .value changes by adding a\n    // propertychange handler and looking for events with propertyName\n    // equal to 'value'\n    // In IE9, propertychange fires for most input events but is buggy and\n    // doesn't fire when text is deleted, but conveniently, selectionchange\n    // appears to fire in all of the remaining cases so we catch those and\n    // forward the event if the value has changed\n    // In either case, we don't want to call the event handler if the value\n    // is changed from JS so we redefine a setter for `.value` that updates\n    // our activeElementValue variable, allowing us to ignore those changes\n    //\n    // stopWatching() should be a noop here but we call it just in case we\n    // missed a blur event somehow.\n    stopWatchingForValueChange();\n    startWatchingForValueChange(topLevelTarget, topLevelTargetID);\n  } else if (topLevelType === topLevelTypes.topBlur) {\n    stopWatchingForValueChange();\n  }\n}\n\n// For IE8 and IE9.\nfunction getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {\n    // On the selectionchange event, the target is just document which isn't\n    // helpful for us so just check activeElement instead.\n    //\n    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n    // propertychange on the first input event after setting `value` from a\n    // script and fires only keydown, keypress, keyup. Catching keyup usually\n    // gets it and catching keydown lets us fire an event for the first\n    // keystroke if user does a key repeat (it'll be a little delayed: right\n    // before the second keystroke). Other input methods (e.g., paste) seem to\n    // fire selectionchange normally.\n    if (activeElement && activeElement.value !== activeElementValue) {\n      activeElementValue = activeElement.value;\n      return activeElementID;\n    }\n  }\n}\n\n/**\n * SECTION: handle `click` event\n */\nfunction shouldUseClickEvent(elem) {\n  // Use the `click` event to detect changes to checkbox and radio inputs.\n  // This approach works across all browsers, whereas `change` does not fire\n  // until `blur` in IE8.\n  return elem.nodeName && elem.nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {\n  if (topLevelType === topLevelTypes.topClick) {\n    return topLevelTargetID;\n  }\n}\n\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\nvar ChangeEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n\n    var getTargetIDFunc, handleEventFunc;\n    if (shouldUseChangeEvent(topLevelTarget)) {\n      if (doesChangeEventBubble) {\n        getTargetIDFunc = getTargetIDForChangeEvent;\n      } else {\n        handleEventFunc = handleEventsForChangeEventIE8;\n      }\n    } else if (isTextInputElement(topLevelTarget)) {\n      if (isInputEventSupported) {\n        getTargetIDFunc = getTargetIDForInputEvent;\n      } else {\n        getTargetIDFunc = getTargetIDForInputEventIE;\n        handleEventFunc = handleEventsForInputEventIE;\n      }\n    } else if (shouldUseClickEvent(topLevelTarget)) {\n      getTargetIDFunc = getTargetIDForClickEvent;\n    }\n\n    if (getTargetIDFunc) {\n      var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);\n      if (targetID) {\n        var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent, nativeEventTarget);\n        event.type = 'change';\n        EventPropagators.accumulateTwoPhaseDispatches(event);\n        return event;\n      }\n    }\n\n    if (handleEventFunc) {\n      handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);\n    }\n  }\n\n};\n\nmodule.exports = ChangeEventPlugin;\n},{\"114\":114,\"119\":119,\"120\":120,\"130\":130,\"148\":148,\"15\":15,\"16\":16,\"19\":19,\"83\":83,\"92\":92}],8:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ClientReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar nextReactRootIndex = 0;\n\nvar ClientReactRootIndex = {\n  createReactRootIndex: function () {\n    return nextReactRootIndex++;\n  }\n};\n\nmodule.exports = ClientReactRootIndex;\n},{}],9:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMChildrenOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar Danger = _dereq_(12);\nvar ReactMultiChildUpdateTypes = _dereq_(67);\nvar ReactPerf = _dereq_(71);\n\nvar setInnerHTML = _dereq_(124);\nvar setTextContent = _dereq_(125);\nvar invariant = _dereq_(144);\n\n/**\n * Inserts `childNode` as a child of `parentNode` at the `index`.\n *\n * @param {DOMElement} parentNode Parent node in which to insert.\n * @param {DOMElement} childNode Child node to insert.\n * @param {number} index Index at which to insert the child.\n * @internal\n */\nfunction insertChildAt(parentNode, childNode, index) {\n  // By exploiting arrays returning `undefined` for an undefined index, we can\n  // rely exclusively on `insertBefore(node, null)` instead of also using\n  // `appendChild(node)`. However, using `undefined` is not allowed by all\n  // browsers so we must replace it with `null`.\n\n  // fix render order error in safari\n  // IE8 will throw error when index out of list size.\n  var beforeChild = index >= parentNode.childNodes.length ? null : parentNode.childNodes.item(index);\n\n  parentNode.insertBefore(childNode, beforeChild);\n}\n\n/**\n * Operations for updating with DOM children.\n */\nvar DOMChildrenOperations = {\n\n  dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,\n\n  updateTextContent: setTextContent,\n\n  /**\n   * Updates a component's children by processing a series of updates. The\n   * update configurations are each expected to have a `parentNode` property.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @param {array<string>} markupList List of markup strings.\n   * @internal\n   */\n  processUpdates: function (updates, markupList) {\n    var update;\n    // Mapping from parent IDs to initial child orderings.\n    var initialChildren = null;\n    // List of children that will be moved or removed.\n    var updatedChildren = null;\n\n    for (var i = 0; i < updates.length; i++) {\n      update = updates[i];\n      if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {\n        var updatedIndex = update.fromIndex;\n        var updatedChild = update.parentNode.childNodes[updatedIndex];\n        var parentID = update.parentID;\n\n        !updatedChild ? \"development\" !== 'production' ? invariant(false, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(false) : undefined;\n\n        initialChildren = initialChildren || {};\n        initialChildren[parentID] = initialChildren[parentID] || [];\n        initialChildren[parentID][updatedIndex] = updatedChild;\n\n        updatedChildren = updatedChildren || [];\n        updatedChildren.push(updatedChild);\n      }\n    }\n\n    var renderedMarkup;\n    // markupList is either a list of markup or just a list of elements\n    if (markupList.length && typeof markupList[0] === 'string') {\n      renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);\n    } else {\n      renderedMarkup = markupList;\n    }\n\n    // Remove updated children first so that `toIndex` is consistent.\n    if (updatedChildren) {\n      for (var j = 0; j < updatedChildren.length; j++) {\n        updatedChildren[j].parentNode.removeChild(updatedChildren[j]);\n      }\n    }\n\n    for (var k = 0; k < updates.length; k++) {\n      update = updates[k];\n      switch (update.type) {\n        case ReactMultiChildUpdateTypes.INSERT_MARKUP:\n          insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);\n          break;\n        case ReactMultiChildUpdateTypes.MOVE_EXISTING:\n          insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);\n          break;\n        case ReactMultiChildUpdateTypes.SET_MARKUP:\n          setInnerHTML(update.parentNode, update.content);\n          break;\n        case ReactMultiChildUpdateTypes.TEXT_CONTENT:\n          setTextContent(update.parentNode, update.content);\n          break;\n        case ReactMultiChildUpdateTypes.REMOVE_NODE:\n          // Already removed by the for-loop above.\n          break;\n      }\n    }\n  }\n\n};\n\nReactPerf.measureMethods(DOMChildrenOperations, 'DOMChildrenOperations', {\n  updateTextContent: 'updateTextContent'\n});\n\nmodule.exports = DOMChildrenOperations;\n},{\"12\":12,\"124\":124,\"125\":125,\"144\":144,\"67\":67,\"71\":71}],10:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMProperty\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\nfunction checkMask(value, bitmask) {\n  return (value & bitmask) === bitmask;\n}\n\nvar DOMPropertyInjection = {\n  /**\n   * Mapping from normalized, camelcased property names to a configuration that\n   * specifies how the associated DOM property should be accessed or rendered.\n   */\n  MUST_USE_ATTRIBUTE: 0x1,\n  MUST_USE_PROPERTY: 0x2,\n  HAS_SIDE_EFFECTS: 0x4,\n  HAS_BOOLEAN_VALUE: 0x8,\n  HAS_NUMERIC_VALUE: 0x10,\n  HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,\n  HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,\n\n  /**\n   * Inject some specialized knowledge about the DOM. This takes a config object\n   * with the following properties:\n   *\n   * isCustomAttribute: function that given an attribute name will return true\n   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*\n   * attributes where it's impossible to enumerate all of the possible\n   * attribute names,\n   *\n   * Properties: object mapping DOM property name to one of the\n   * DOMPropertyInjection constants or null. If your attribute isn't in here,\n   * it won't get written to the DOM.\n   *\n   * DOMAttributeNames: object mapping React attribute name to the DOM\n   * attribute name. Attribute names not specified use the **lowercase**\n   * normalized name.\n   *\n   * DOMAttributeNamespaces: object mapping React attribute name to the DOM\n   * attribute namespace URL. (Attribute names not specified use no namespace.)\n   *\n   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.\n   * Property names not specified use the normalized name.\n   *\n   * DOMMutationMethods: Properties that require special mutation methods. If\n   * `value` is undefined, the mutation method should unset the property.\n   *\n   * @param {object} domPropertyConfig the config as described above.\n   */\n  injectDOMPropertyConfig: function (domPropertyConfig) {\n    var Injection = DOMPropertyInjection;\n    var Properties = domPropertyConfig.Properties || {};\n    var DOMAttributeNamespaces = domPropertyConfig.DOMAttributeNamespaces || {};\n    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};\n    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};\n    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};\n\n    if (domPropertyConfig.isCustomAttribute) {\n      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);\n    }\n\n    for (var propName in Properties) {\n      !!DOMProperty.properties.hasOwnProperty(propName) ? \"development\" !== 'production' ? invariant(false, 'injectDOMPropertyConfig(...): You\\'re trying to inject DOM property ' + '\\'%s\\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(false) : undefined;\n\n      var lowerCased = propName.toLowerCase();\n      var propConfig = Properties[propName];\n\n      var propertyInfo = {\n        attributeName: lowerCased,\n        attributeNamespace: null,\n        propertyName: propName,\n        mutationMethod: null,\n\n        mustUseAttribute: checkMask(propConfig, Injection.MUST_USE_ATTRIBUTE),\n        mustUseProperty: checkMask(propConfig, Injection.MUST_USE_PROPERTY),\n        hasSideEffects: checkMask(propConfig, Injection.HAS_SIDE_EFFECTS),\n        hasBooleanValue: checkMask(propConfig, Injection.HAS_BOOLEAN_VALUE),\n        hasNumericValue: checkMask(propConfig, Injection.HAS_NUMERIC_VALUE),\n        hasPositiveNumericValue: checkMask(propConfig, Injection.HAS_POSITIVE_NUMERIC_VALUE),\n        hasOverloadedBooleanValue: checkMask(propConfig, Injection.HAS_OVERLOADED_BOOLEAN_VALUE)\n      };\n\n      !(!propertyInfo.mustUseAttribute || !propertyInfo.mustUseProperty) ? \"development\" !== 'production' ? invariant(false, 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(false) : undefined;\n      !(propertyInfo.mustUseProperty || !propertyInfo.hasSideEffects) ? \"development\" !== 'production' ? invariant(false, 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(false) : undefined;\n      !(propertyInfo.hasBooleanValue + propertyInfo.hasNumericValue + propertyInfo.hasOverloadedBooleanValue <= 1) ? \"development\" !== 'production' ? invariant(false, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(false) : undefined;\n\n      if (\"development\" !== 'production') {\n        DOMProperty.getPossibleStandardName[lowerCased] = propName;\n      }\n\n      if (DOMAttributeNames.hasOwnProperty(propName)) {\n        var attributeName = DOMAttributeNames[propName];\n        propertyInfo.attributeName = attributeName;\n        if (\"development\" !== 'production') {\n          DOMProperty.getPossibleStandardName[attributeName] = propName;\n        }\n      }\n\n      if (DOMAttributeNamespaces.hasOwnProperty(propName)) {\n        propertyInfo.attributeNamespace = DOMAttributeNamespaces[propName];\n      }\n\n      if (DOMPropertyNames.hasOwnProperty(propName)) {\n        propertyInfo.propertyName = DOMPropertyNames[propName];\n      }\n\n      if (DOMMutationMethods.hasOwnProperty(propName)) {\n        propertyInfo.mutationMethod = DOMMutationMethods[propName];\n      }\n\n      DOMProperty.properties[propName] = propertyInfo;\n    }\n  }\n};\nvar defaultValueCache = {};\n\n/**\n * DOMProperty exports lookup objects that can be used like functions:\n *\n *   > DOMProperty.isValid['id']\n *   true\n *   > DOMProperty.isValid['foobar']\n *   undefined\n *\n * Although this may be confusing, it performs better in general.\n *\n * @see http://jsperf.com/key-exists\n * @see http://jsperf.com/key-missing\n */\nvar DOMProperty = {\n\n  ID_ATTRIBUTE_NAME: 'data-reactid',\n\n  /**\n   * Map from property \"standard name\" to an object with info about how to set\n   * the property in the DOM. Each object contains:\n   *\n   * attributeName:\n   *   Used when rendering markup or with `*Attribute()`.\n   * attributeNamespace\n   * propertyName:\n   *   Used on DOM node instances. (This includes properties that mutate due to\n   *   external factors.)\n   * mutationMethod:\n   *   If non-null, used instead of the property or `setAttribute()` after\n   *   initial render.\n   * mustUseAttribute:\n   *   Whether the property must be accessed and mutated using `*Attribute()`.\n   *   (This includes anything that fails `<propName> in <element>`.)\n   * mustUseProperty:\n   *   Whether the property must be accessed and mutated as an object property.\n   * hasSideEffects:\n   *   Whether or not setting a value causes side effects such as triggering\n   *   resources to be loaded or text selection changes. If true, we read from\n   *   the DOM before updating to ensure that the value is only set if it has\n   *   changed.\n   * hasBooleanValue:\n   *   Whether the property should be removed when set to a falsey value.\n   * hasNumericValue:\n   *   Whether the property must be numeric or parse as a numeric and should be\n   *   removed when set to a falsey value.\n   * hasPositiveNumericValue:\n   *   Whether the property must be positive numeric or parse as a positive\n   *   numeric and should be removed when set to a falsey value.\n   * hasOverloadedBooleanValue:\n   *   Whether the property can be used as a flag as well as with a value.\n   *   Removed when strictly equal to false; present without a value when\n   *   strictly equal to true; present with a value otherwise.\n   */\n  properties: {},\n\n  /**\n   * Mapping from lowercase property names to the properly cased version, used\n   * to warn in the case of missing properties. Available only in __DEV__.\n   * @type {Object}\n   */\n  getPossibleStandardName: \"development\" !== 'production' ? {} : null,\n\n  /**\n   * All of the isCustomAttribute() functions that have been injected.\n   */\n  _isCustomAttributeFunctions: [],\n\n  /**\n   * Checks whether a property name is a custom attribute.\n   * @method\n   */\n  isCustomAttribute: function (attributeName) {\n    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {\n      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];\n      if (isCustomAttributeFn(attributeName)) {\n        return true;\n      }\n    }\n    return false;\n  },\n\n  /**\n   * Returns the default property value for a DOM property (i.e., not an\n   * attribute). Most default values are '' or false, but not all. Worse yet,\n   * some (in particular, `type`) vary depending on the type of element.\n   *\n   * TODO: Is it better to grab all the possible properties when creating an\n   * element to avoid having to create the same element twice?\n   */\n  getDefaultValueForProperty: function (nodeName, prop) {\n    var nodeDefaults = defaultValueCache[nodeName];\n    var testElement;\n    if (!nodeDefaults) {\n      defaultValueCache[nodeName] = nodeDefaults = {};\n    }\n    if (!(prop in nodeDefaults)) {\n      testElement = document.createElement(nodeName);\n      nodeDefaults[prop] = testElement[prop];\n    }\n    return nodeDefaults[prop];\n  },\n\n  injection: DOMPropertyInjection\n};\n\nmodule.exports = DOMProperty;\n},{\"144\":144}],11:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DOMPropertyOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar ReactPerf = _dereq_(71);\n\nvar quoteAttributeValueForBrowser = _dereq_(122);\nvar warning = _dereq_(155);\n\n// Simplified subset\nvar VALID_ATTRIBUTE_NAME_REGEX = /^[a-zA-Z_][\\w\\.\\-]*$/;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\n\nfunction isAttributeNameSafe(attributeName) {\n  if (validatedAttributeNameCache.hasOwnProperty(attributeName)) {\n    return true;\n  }\n  if (illegalAttributeNameCache.hasOwnProperty(attributeName)) {\n    return false;\n  }\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n    validatedAttributeNameCache[attributeName] = true;\n    return true;\n  }\n  illegalAttributeNameCache[attributeName] = true;\n  \"development\" !== 'production' ? warning(false, 'Invalid attribute name: `%s`', attributeName) : undefined;\n  return false;\n}\n\nfunction shouldIgnoreValue(propertyInfo, value) {\n  return value == null || propertyInfo.hasBooleanValue && !value || propertyInfo.hasNumericValue && isNaN(value) || propertyInfo.hasPositiveNumericValue && value < 1 || propertyInfo.hasOverloadedBooleanValue && value === false;\n}\n\nif (\"development\" !== 'production') {\n  var reactProps = {\n    children: true,\n    dangerouslySetInnerHTML: true,\n    key: true,\n    ref: true\n  };\n  var warnedProperties = {};\n\n  var warnUnknownProperty = function (name) {\n    if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {\n      return;\n    }\n\n    warnedProperties[name] = true;\n    var lowerCasedName = name.toLowerCase();\n\n    // data-* attributes should be lowercase; suggest the lowercase version\n    var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;\n\n    // For now, only warn when we have a suggested correction. This prevents\n    // logging too much when using transferPropsTo.\n    \"development\" !== 'production' ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : undefined;\n  };\n}\n\n/**\n * Operations for dealing with DOM properties.\n */\nvar DOMPropertyOperations = {\n\n  /**\n   * Creates markup for the ID property.\n   *\n   * @param {string} id Unescaped ID.\n   * @return {string} Markup string.\n   */\n  createMarkupForID: function (id) {\n    return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);\n  },\n\n  setAttributeForID: function (node, id) {\n    node.setAttribute(DOMProperty.ID_ATTRIBUTE_NAME, id);\n  },\n\n  /**\n   * Creates markup for a property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {?string} Markup string, or null if the property was invalid.\n   */\n  createMarkupForProperty: function (name, value) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      if (shouldIgnoreValue(propertyInfo, value)) {\n        return '';\n      }\n      var attributeName = propertyInfo.attributeName;\n      if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n        return attributeName + '=\"\"';\n      }\n      return attributeName + '=' + quoteAttributeValueForBrowser(value);\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      if (value == null) {\n        return '';\n      }\n      return name + '=' + quoteAttributeValueForBrowser(value);\n    } else if (\"development\" !== 'production') {\n      warnUnknownProperty(name);\n    }\n    return null;\n  },\n\n  /**\n   * Creates markup for a custom property.\n   *\n   * @param {string} name\n   * @param {*} value\n   * @return {string} Markup string, or empty string if the property was invalid.\n   */\n  createMarkupForCustomAttribute: function (name, value) {\n    if (!isAttributeNameSafe(name) || value == null) {\n      return '';\n    }\n    return name + '=' + quoteAttributeValueForBrowser(value);\n  },\n\n  /**\n   * Sets the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   * @param {*} value\n   */\n  setValueForProperty: function (node, name, value) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, value);\n      } else if (shouldIgnoreValue(propertyInfo, value)) {\n        this.deleteValueForProperty(node, name);\n      } else if (propertyInfo.mustUseAttribute) {\n        var attributeName = propertyInfo.attributeName;\n        var namespace = propertyInfo.attributeNamespace;\n        // `setAttribute` with objects becomes only `[object]` in IE8/9,\n        // ('' + value) makes it output the correct toString()-value.\n        if (namespace) {\n          node.setAttributeNS(namespace, attributeName, '' + value);\n        } else if (propertyInfo.hasBooleanValue || propertyInfo.hasOverloadedBooleanValue && value === true) {\n          node.setAttribute(attributeName, '');\n        } else {\n          node.setAttribute(attributeName, '' + value);\n        }\n      } else {\n        var propName = propertyInfo.propertyName;\n        // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the\n        // property type before comparing; only `value` does and is string.\n        if (!propertyInfo.hasSideEffects || '' + node[propName] !== '' + value) {\n          // Contrary to `setAttribute`, object properties are properly\n          // `toString`ed by IE8/9.\n          node[propName] = value;\n        }\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      DOMPropertyOperations.setValueForAttribute(node, name, value);\n    } else if (\"development\" !== 'production') {\n      warnUnknownProperty(name);\n    }\n  },\n\n  setValueForAttribute: function (node, name, value) {\n    if (!isAttributeNameSafe(name)) {\n      return;\n    }\n    if (value == null) {\n      node.removeAttribute(name);\n    } else {\n      node.setAttribute(name, '' + value);\n    }\n  },\n\n  /**\n   * Deletes the value for a property on a node.\n   *\n   * @param {DOMElement} node\n   * @param {string} name\n   */\n  deleteValueForProperty: function (node, name) {\n    var propertyInfo = DOMProperty.properties.hasOwnProperty(name) ? DOMProperty.properties[name] : null;\n    if (propertyInfo) {\n      var mutationMethod = propertyInfo.mutationMethod;\n      if (mutationMethod) {\n        mutationMethod(node, undefined);\n      } else if (propertyInfo.mustUseAttribute) {\n        node.removeAttribute(propertyInfo.attributeName);\n      } else {\n        var propName = propertyInfo.propertyName;\n        var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);\n        if (!propertyInfo.hasSideEffects || '' + node[propName] !== defaultValue) {\n          node[propName] = defaultValue;\n        }\n      }\n    } else if (DOMProperty.isCustomAttribute(name)) {\n      node.removeAttribute(name);\n    } else if (\"development\" !== 'production') {\n      warnUnknownProperty(name);\n    }\n  }\n\n};\n\nReactPerf.measureMethods(DOMPropertyOperations, 'DOMPropertyOperations', {\n  setValueForProperty: 'setValueForProperty',\n  setValueForAttribute: 'setValueForAttribute',\n  deleteValueForProperty: 'deleteValueForProperty'\n});\n\nmodule.exports = DOMPropertyOperations;\n},{\"10\":10,\"122\":122,\"155\":155,\"71\":71}],12:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Danger\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar createNodesFromMarkup = _dereq_(135);\nvar emptyFunction = _dereq_(136);\nvar getMarkupWrap = _dereq_(140);\nvar invariant = _dereq_(144);\n\nvar OPEN_TAG_NAME_EXP = /^(<[^ \\/>]+)/;\nvar RESULT_INDEX_ATTR = 'data-danger-index';\n\n/**\n * Extracts the `nodeName` from a string of markup.\n *\n * NOTE: Extracting the `nodeName` does not require a regular expression match\n * because we make assumptions about React-generated markup (i.e. there are no\n * spaces surrounding the opening tag and there is at least one attribute).\n *\n * @param {string} markup String of markup.\n * @return {string} Node name of the supplied markup.\n * @see http://jsperf.com/extract-nodename\n */\nfunction getNodeName(markup) {\n  return markup.substring(1, markup.indexOf(' '));\n}\n\nvar Danger = {\n\n  /**\n   * Renders markup into an array of nodes. The markup is expected to render\n   * into a list of root nodes. Also, the length of `resultList` and\n   * `markupList` should be the same.\n   *\n   * @param {array<string>} markupList List of markup strings to render.\n   * @return {array<DOMElement>} List of rendered nodes.\n   * @internal\n   */\n  dangerouslyRenderMarkup: function (markupList) {\n    !ExecutionEnvironment.canUseDOM ? \"development\" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString for server rendering.') : invariant(false) : undefined;\n    var nodeName;\n    var markupByNodeName = {};\n    // Group markup by `nodeName` if a wrap is necessary, else by '*'.\n    for (var i = 0; i < markupList.length; i++) {\n      !markupList[i] ? \"development\" !== 'production' ? invariant(false, 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(false) : undefined;\n      nodeName = getNodeName(markupList[i]);\n      nodeName = getMarkupWrap(nodeName) ? nodeName : '*';\n      markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];\n      markupByNodeName[nodeName][i] = markupList[i];\n    }\n    var resultList = [];\n    var resultListAssignmentCount = 0;\n    for (nodeName in markupByNodeName) {\n      if (!markupByNodeName.hasOwnProperty(nodeName)) {\n        continue;\n      }\n      var markupListByNodeName = markupByNodeName[nodeName];\n\n      // This for-in loop skips the holes of the sparse array. The order of\n      // iteration should follow the order of assignment, which happens to match\n      // numerical index order, but we don't rely on that.\n      var resultIndex;\n      for (resultIndex in markupListByNodeName) {\n        if (markupListByNodeName.hasOwnProperty(resultIndex)) {\n          var markup = markupListByNodeName[resultIndex];\n\n          // Push the requested markup with an additional RESULT_INDEX_ATTR\n          // attribute.  If the markup does not start with a < character, it\n          // will be discarded below (with an appropriate console.error).\n          markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,\n          // This index will be parsed back out below.\n          '$1 ' + RESULT_INDEX_ATTR + '=\"' + resultIndex + '\" ');\n        }\n      }\n\n      // Render each group of markup with similar wrapping `nodeName`.\n      var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.\n      );\n\n      for (var j = 0; j < renderNodes.length; ++j) {\n        var renderNode = renderNodes[j];\n        if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {\n\n          resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);\n          renderNode.removeAttribute(RESULT_INDEX_ATTR);\n\n          !!resultList.hasOwnProperty(resultIndex) ? \"development\" !== 'production' ? invariant(false, 'Danger: Assigning to an already-occupied result index.') : invariant(false) : undefined;\n\n          resultList[resultIndex] = renderNode;\n\n          // This should match resultList.length and markupList.length when\n          // we're done.\n          resultListAssignmentCount += 1;\n        } else if (\"development\" !== 'production') {\n          console.error('Danger: Discarding unexpected node:', renderNode);\n        }\n      }\n    }\n\n    // Although resultList was populated out of order, it should now be a dense\n    // array.\n    !(resultListAssignmentCount === resultList.length) ? \"development\" !== 'production' ? invariant(false, 'Danger: Did not assign to every index of resultList.') : invariant(false) : undefined;\n\n    !(resultList.length === markupList.length) ? \"development\" !== 'production' ? invariant(false, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(false) : undefined;\n\n    return resultList;\n  },\n\n  /**\n   * Replaces a node with a string of markup at its current position within its\n   * parent. The markup must render into a single root node.\n   *\n   * @param {DOMElement} oldChild Child node to replace.\n   * @param {string} markup Markup to render in place of the child node.\n   * @internal\n   */\n  dangerouslyReplaceNodeWithMarkup: function (oldChild, markup) {\n    !ExecutionEnvironment.canUseDOM ? \"development\" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n    !markup ? \"development\" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(false) : undefined;\n    !(oldChild.tagName.toLowerCase() !== 'html') ? \"development\" !== 'production' ? invariant(false, 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See ReactDOMServer.renderToString().') : invariant(false) : undefined;\n\n    var newChild;\n    if (typeof markup === 'string') {\n      newChild = createNodesFromMarkup(markup, emptyFunction)[0];\n    } else {\n      newChild = markup;\n    }\n    oldChild.parentNode.replaceChild(newChild, oldChild);\n  }\n\n};\n\nmodule.exports = Danger;\n},{\"130\":130,\"135\":135,\"136\":136,\"140\":140,\"144\":144}],13:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule DefaultEventPluginOrder\n */\n\n'use strict';\n\nvar keyOf = _dereq_(148);\n\n/**\n * Module that is injectable into `EventPluginHub`, that specifies a\n * deterministic ordering of `EventPlugin`s. A convenient way to reason about\n * plugins, without having to package every one of them. This is better than\n * having plugins be ordered in the same order that they are injected because\n * that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\nvar DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null })];\n\nmodule.exports = DefaultEventPluginOrder;\n},{\"148\":148}],14:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EnterLeaveEventPlugin\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar EventPropagators = _dereq_(19);\nvar SyntheticMouseEvent = _dereq_(96);\n\nvar ReactMount = _dereq_(65);\nvar keyOf = _dereq_(148);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\nvar getFirstReactDOM = ReactMount.getFirstReactDOM;\n\nvar eventTypes = {\n  mouseEnter: {\n    registrationName: keyOf({ onMouseEnter: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  },\n  mouseLeave: {\n    registrationName: keyOf({ onMouseLeave: null }),\n    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]\n  }\n};\n\nvar extractedEvents = [null, null];\n\nvar EnterLeaveEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * For almost every interaction we care about, there will be both a top-level\n   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n   * we do not extract duplicate events. However, moving the mouse into the\n   * browser from outside will not fire a `mouseout` event. In this case, we use\n   * the `mouseover` top-level event.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n      return null;\n    }\n    if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {\n      // Must not be a mouse in or mouse out - ignoring.\n      return null;\n    }\n\n    var win;\n    if (topLevelTarget.window === topLevelTarget) {\n      // `topLevelTarget` is probably a window object.\n      win = topLevelTarget;\n    } else {\n      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n      var doc = topLevelTarget.ownerDocument;\n      if (doc) {\n        win = doc.defaultView || doc.parentWindow;\n      } else {\n        win = window;\n      }\n    }\n\n    var from;\n    var to;\n    var fromID = '';\n    var toID = '';\n    if (topLevelType === topLevelTypes.topMouseOut) {\n      from = topLevelTarget;\n      fromID = topLevelTargetID;\n      to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement);\n      if (to) {\n        toID = ReactMount.getID(to);\n      } else {\n        to = win;\n      }\n      to = to || win;\n    } else {\n      from = win;\n      to = topLevelTarget;\n      toID = topLevelTargetID;\n    }\n\n    if (from === to) {\n      // Nothing pertains to our managed components.\n      return null;\n    }\n\n    var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent, nativeEventTarget);\n    leave.type = 'mouseleave';\n    leave.target = from;\n    leave.relatedTarget = to;\n\n    var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent, nativeEventTarget);\n    enter.type = 'mouseenter';\n    enter.target = to;\n    enter.relatedTarget = from;\n\n    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);\n\n    extractedEvents[0] = leave;\n    extractedEvents[1] = enter;\n\n    return extractedEvents;\n  }\n\n};\n\nmodule.exports = EnterLeaveEventPlugin;\n},{\"148\":148,\"15\":15,\"19\":19,\"65\":65,\"96\":96}],15:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventConstants\n */\n\n'use strict';\n\nvar keyMirror = _dereq_(147);\n\nvar PropagationPhases = keyMirror({ bubbled: null, captured: null });\n\n/**\n * Types of raw signals from the browser caught at the top level.\n */\nvar topLevelTypes = keyMirror({\n  topAbort: null,\n  topBlur: null,\n  topCanPlay: null,\n  topCanPlayThrough: null,\n  topChange: null,\n  topClick: null,\n  topCompositionEnd: null,\n  topCompositionStart: null,\n  topCompositionUpdate: null,\n  topContextMenu: null,\n  topCopy: null,\n  topCut: null,\n  topDoubleClick: null,\n  topDrag: null,\n  topDragEnd: null,\n  topDragEnter: null,\n  topDragExit: null,\n  topDragLeave: null,\n  topDragOver: null,\n  topDragStart: null,\n  topDrop: null,\n  topDurationChange: null,\n  topEmptied: null,\n  topEncrypted: null,\n  topEnded: null,\n  topError: null,\n  topFocus: null,\n  topInput: null,\n  topKeyDown: null,\n  topKeyPress: null,\n  topKeyUp: null,\n  topLoad: null,\n  topLoadedData: null,\n  topLoadedMetadata: null,\n  topLoadStart: null,\n  topMouseDown: null,\n  topMouseMove: null,\n  topMouseOut: null,\n  topMouseOver: null,\n  topMouseUp: null,\n  topPaste: null,\n  topPause: null,\n  topPlay: null,\n  topPlaying: null,\n  topProgress: null,\n  topRateChange: null,\n  topReset: null,\n  topScroll: null,\n  topSeeked: null,\n  topSeeking: null,\n  topSelectionChange: null,\n  topStalled: null,\n  topSubmit: null,\n  topSuspend: null,\n  topTextInput: null,\n  topTimeUpdate: null,\n  topTouchCancel: null,\n  topTouchEnd: null,\n  topTouchMove: null,\n  topTouchStart: null,\n  topVolumeChange: null,\n  topWaiting: null,\n  topWheel: null\n});\n\nvar EventConstants = {\n  topLevelTypes: topLevelTypes,\n  PropagationPhases: PropagationPhases\n};\n\nmodule.exports = EventConstants;\n},{\"147\":147}],16:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginHub\n */\n\n'use strict';\n\nvar EventPluginRegistry = _dereq_(17);\nvar EventPluginUtils = _dereq_(18);\nvar ReactErrorUtils = _dereq_(56);\n\nvar accumulateInto = _dereq_(102);\nvar forEachAccumulated = _dereq_(110);\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\n/**\n * Internal store for event listeners\n */\nvar listenerBank = {};\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\nvar eventQueue = null;\n\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @private\n */\nvar executeDispatchesAndRelease = function (event, simulated) {\n  if (event) {\n    EventPluginUtils.executeDispatchesInOrder(event, simulated);\n\n    if (!event.isPersistent()) {\n      event.constructor.release(event);\n    }\n  }\n};\nvar executeDispatchesAndReleaseSimulated = function (e) {\n  return executeDispatchesAndRelease(e, true);\n};\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n  return executeDispatchesAndRelease(e, false);\n};\n\n/**\n * - `InstanceHandle`: [required] Module that performs logical traversals of DOM\n *   hierarchy given ids of the logical DOM elements involved.\n */\nvar InstanceHandle = null;\n\nfunction validateInstanceHandle() {\n  var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;\n  \"development\" !== 'production' ? warning(valid, 'InstanceHandle not injected before use!') : undefined;\n}\n\n/**\n * This is a unified interface for event plugins to be installed and configured.\n *\n * Event plugins can implement the following properties:\n *\n *   `extractEvents` {function(string, DOMEventTarget, string, object): *}\n *     Required. When a top-level event is fired, this method is expected to\n *     extract synthetic events that will in turn be queued and dispatched.\n *\n *   `eventTypes` {object}\n *     Optional, plugins that fire events must publish a mapping of registration\n *     names that are used to register listeners. Values of this mapping must\n *     be objects that contain `registrationName` or `phasedRegistrationNames`.\n *\n *   `executeDispatch` {function(object, function, string)}\n *     Optional, allows plugins to override how an event gets dispatched. By\n *     default, the listener is simply invoked.\n *\n * Each plugin that is injected into `EventsPluginHub` is immediately operable.\n *\n * @public\n */\nvar EventPluginHub = {\n\n  /**\n   * Methods for injecting dependencies.\n   */\n  injection: {\n\n    /**\n     * @param {object} InjectedMount\n     * @public\n     */\n    injectMount: EventPluginUtils.injection.injectMount,\n\n    /**\n     * @param {object} InjectedInstanceHandle\n     * @public\n     */\n    injectInstanceHandle: function (InjectedInstanceHandle) {\n      InstanceHandle = InjectedInstanceHandle;\n      if (\"development\" !== 'production') {\n        validateInstanceHandle();\n      }\n    },\n\n    getInstanceHandle: function () {\n      if (\"development\" !== 'production') {\n        validateInstanceHandle();\n      }\n      return InstanceHandle;\n    },\n\n    /**\n     * @param {array} InjectedEventPluginOrder\n     * @public\n     */\n    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,\n\n    /**\n     * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n     */\n    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName\n\n  },\n\n  eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,\n\n  registrationNameModules: EventPluginRegistry.registrationNameModules,\n\n  /**\n   * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.\n   *\n   * @param {string} id ID of the DOM element.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {?function} listener The callback to store.\n   */\n  putListener: function (id, registrationName, listener) {\n    !(typeof listener === 'function') ? \"development\" !== 'production' ? invariant(false, 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(false) : undefined;\n\n    var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});\n    bankForRegistrationName[id] = listener;\n\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.didPutListener) {\n      PluginModule.didPutListener(id, registrationName, listener);\n    }\n  },\n\n  /**\n   * @param {string} id ID of the DOM element.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @return {?function} The stored callback.\n   */\n  getListener: function (id, registrationName) {\n    var bankForRegistrationName = listenerBank[registrationName];\n    return bankForRegistrationName && bankForRegistrationName[id];\n  },\n\n  /**\n   * Deletes a listener from the registration bank.\n   *\n   * @param {string} id ID of the DOM element.\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   */\n  deleteListener: function (id, registrationName) {\n    var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n    if (PluginModule && PluginModule.willDeleteListener) {\n      PluginModule.willDeleteListener(id, registrationName);\n    }\n\n    var bankForRegistrationName = listenerBank[registrationName];\n    // TODO: This should never be null -- when is it?\n    if (bankForRegistrationName) {\n      delete bankForRegistrationName[id];\n    }\n  },\n\n  /**\n   * Deletes all listeners for the DOM element with the supplied ID.\n   *\n   * @param {string} id ID of the DOM element.\n   */\n  deleteAllListeners: function (id) {\n    for (var registrationName in listenerBank) {\n      if (!listenerBank[registrationName][id]) {\n        continue;\n      }\n\n      var PluginModule = EventPluginRegistry.registrationNameModules[registrationName];\n      if (PluginModule && PluginModule.willDeleteListener) {\n        PluginModule.willDeleteListener(id, registrationName);\n      }\n\n      delete listenerBank[registrationName][id];\n    }\n  },\n\n  /**\n   * Allows registered plugins an opportunity to extract events from top-level\n   * native browser events.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @internal\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    var events;\n    var plugins = EventPluginRegistry.plugins;\n    for (var i = 0; i < plugins.length; i++) {\n      // Not every plugin in the ordering may be loaded at runtime.\n      var possiblePlugin = plugins[i];\n      if (possiblePlugin) {\n        var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n        if (extractedEvents) {\n          events = accumulateInto(events, extractedEvents);\n        }\n      }\n    }\n    return events;\n  },\n\n  /**\n   * Enqueues a synthetic event that should be dispatched when\n   * `processEventQueue` is invoked.\n   *\n   * @param {*} events An accumulation of synthetic events.\n   * @internal\n   */\n  enqueueEvents: function (events) {\n    if (events) {\n      eventQueue = accumulateInto(eventQueue, events);\n    }\n  },\n\n  /**\n   * Dispatches all synthetic events on the event queue.\n   *\n   * @internal\n   */\n  processEventQueue: function (simulated) {\n    // Set `eventQueue` to null before processing it so that we can tell if more\n    // events get enqueued while processing.\n    var processingEventQueue = eventQueue;\n    eventQueue = null;\n    if (simulated) {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseSimulated);\n    } else {\n      forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n    }\n    !!eventQueue ? \"development\" !== 'production' ? invariant(false, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(false) : undefined;\n    // This would be a good time to rethrow if any of the event handlers threw.\n    ReactErrorUtils.rethrowCaughtError();\n  },\n\n  /**\n   * These are needed for tests only. Do not use!\n   */\n  __purge: function () {\n    listenerBank = {};\n  },\n\n  __getListenerBank: function () {\n    return listenerBank;\n  }\n\n};\n\nmodule.exports = EventPluginHub;\n},{\"102\":102,\"110\":110,\"144\":144,\"155\":155,\"17\":17,\"18\":18,\"56\":56}],17:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginRegistry\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\n/**\n * Injectable ordering of event plugins.\n */\nvar EventPluginOrder = null;\n\n/**\n * Injectable mapping from names to event plugin modules.\n */\nvar namesToPlugins = {};\n\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\nfunction recomputePluginOrdering() {\n  if (!EventPluginOrder) {\n    // Wait until an `EventPluginOrder` is injected.\n    return;\n  }\n  for (var pluginName in namesToPlugins) {\n    var PluginModule = namesToPlugins[pluginName];\n    var pluginIndex = EventPluginOrder.indexOf(pluginName);\n    !(pluginIndex > -1) ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(false) : undefined;\n    if (EventPluginRegistry.plugins[pluginIndex]) {\n      continue;\n    }\n    !PluginModule.extractEvents ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(false) : undefined;\n    EventPluginRegistry.plugins[pluginIndex] = PluginModule;\n    var publishedEvents = PluginModule.eventTypes;\n    for (var eventName in publishedEvents) {\n      !publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName) ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(false) : undefined;\n    }\n  }\n}\n\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\nfunction publishEventForPlugin(dispatchConfig, PluginModule, eventName) {\n  !!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName) ? \"development\" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(false) : undefined;\n  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;\n\n  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n  if (phasedRegistrationNames) {\n    for (var phaseName in phasedRegistrationNames) {\n      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n        var phasedRegistrationName = phasedRegistrationNames[phaseName];\n        publishRegistrationName(phasedRegistrationName, PluginModule, eventName);\n      }\n    }\n    return true;\n  } else if (dispatchConfig.registrationName) {\n    publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);\n    return true;\n  }\n  return false;\n}\n\n/**\n * Publishes a registration name that is used to identify dispatched events and\n * can be used with `EventPluginHub.putListener` to register listeners.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\nfunction publishRegistrationName(registrationName, PluginModule, eventName) {\n  !!EventPluginRegistry.registrationNameModules[registrationName] ? \"development\" !== 'production' ? invariant(false, 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(false) : undefined;\n  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;\n  EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;\n}\n\n/**\n * Registers plugins so that they can extract and dispatch events.\n *\n * @see {EventPluginHub}\n */\nvar EventPluginRegistry = {\n\n  /**\n   * Ordered list of injected plugins.\n   */\n  plugins: [],\n\n  /**\n   * Mapping from event name to dispatch config\n   */\n  eventNameDispatchConfigs: {},\n\n  /**\n   * Mapping from registration name to plugin module\n   */\n  registrationNameModules: {},\n\n  /**\n   * Mapping from registration name to event name\n   */\n  registrationNameDependencies: {},\n\n  /**\n   * Injects an ordering of plugins (by plugin name). This allows the ordering\n   * to be decoupled from injection of the actual plugins so that ordering is\n   * always deterministic regardless of packaging, on-the-fly injection, etc.\n   *\n   * @param {array} InjectedEventPluginOrder\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginOrder}\n   */\n  injectEventPluginOrder: function (InjectedEventPluginOrder) {\n    !!EventPluginOrder ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(false) : undefined;\n    // Clone the ordering so it cannot be dynamically mutated.\n    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);\n    recomputePluginOrdering();\n  },\n\n  /**\n   * Injects plugins to be used by `EventPluginHub`. The plugin names must be\n   * in the ordering injected by `injectEventPluginOrder`.\n   *\n   * Plugins can be injected as part of page initialization or on-the-fly.\n   *\n   * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n   * @internal\n   * @see {EventPluginHub.injection.injectEventPluginsByName}\n   */\n  injectEventPluginsByName: function (injectedNamesToPlugins) {\n    var isOrderingDirty = false;\n    for (var pluginName in injectedNamesToPlugins) {\n      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n        continue;\n      }\n      var PluginModule = injectedNamesToPlugins[pluginName];\n      if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {\n        !!namesToPlugins[pluginName] ? \"development\" !== 'production' ? invariant(false, 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(false) : undefined;\n        namesToPlugins[pluginName] = PluginModule;\n        isOrderingDirty = true;\n      }\n    }\n    if (isOrderingDirty) {\n      recomputePluginOrdering();\n    }\n  },\n\n  /**\n   * Looks up the plugin for the supplied event.\n   *\n   * @param {object} event A synthetic event.\n   * @return {?object} The plugin that created the supplied event.\n   * @internal\n   */\n  getPluginModuleForEvent: function (event) {\n    var dispatchConfig = event.dispatchConfig;\n    if (dispatchConfig.registrationName) {\n      return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;\n    }\n    for (var phase in dispatchConfig.phasedRegistrationNames) {\n      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {\n        continue;\n      }\n      var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];\n      if (PluginModule) {\n        return PluginModule;\n      }\n    }\n    return null;\n  },\n\n  /**\n   * Exposed for unit testing.\n   * @private\n   */\n  _resetEventPlugins: function () {\n    EventPluginOrder = null;\n    for (var pluginName in namesToPlugins) {\n      if (namesToPlugins.hasOwnProperty(pluginName)) {\n        delete namesToPlugins[pluginName];\n      }\n    }\n    EventPluginRegistry.plugins.length = 0;\n\n    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;\n    for (var eventName in eventNameDispatchConfigs) {\n      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n        delete eventNameDispatchConfigs[eventName];\n      }\n    }\n\n    var registrationNameModules = EventPluginRegistry.registrationNameModules;\n    for (var registrationName in registrationNameModules) {\n      if (registrationNameModules.hasOwnProperty(registrationName)) {\n        delete registrationNameModules[registrationName];\n      }\n    }\n  }\n\n};\n\nmodule.exports = EventPluginRegistry;\n},{\"144\":144}],18:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPluginUtils\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar ReactErrorUtils = _dereq_(56);\n\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\n/**\n * Injected dependencies:\n */\n\n/**\n * - `Mount`: [required] Module that can convert between React dom IDs and\n *   actual node references.\n */\nvar injection = {\n  Mount: null,\n  injectMount: function (InjectedMount) {\n    injection.Mount = InjectedMount;\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(InjectedMount && InjectedMount.getNode && InjectedMount.getID, 'EventPluginUtils.injection.injectMount(...): Injected Mount ' + 'module is missing getNode or getID.') : undefined;\n    }\n  }\n};\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nfunction isEndish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;\n}\n\nfunction isMoveish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;\n}\nfunction isStartish(topLevelType) {\n  return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;\n}\n\nvar validateEventDispatches;\nif (\"development\" !== 'production') {\n  validateEventDispatches = function (event) {\n    var dispatchListeners = event._dispatchListeners;\n    var dispatchIDs = event._dispatchIDs;\n\n    var listenersIsArr = Array.isArray(dispatchListeners);\n    var idsIsArr = Array.isArray(dispatchIDs);\n    var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;\n    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n\n    \"development\" !== 'production' ? warning(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : undefined;\n  };\n}\n\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {boolean} simulated If the event is simulated (changes exn behavior)\n * @param {function} listener Application-level callback\n * @param {string} domID DOM id to pass to the callback.\n */\nfunction executeDispatch(event, simulated, listener, domID) {\n  var type = event.type || 'unknown-event';\n  event.currentTarget = injection.Mount.getNode(domID);\n  if (simulated) {\n    ReactErrorUtils.invokeGuardedCallbackWithCatch(type, listener, event, domID);\n  } else {\n    ReactErrorUtils.invokeGuardedCallback(type, listener, event, domID);\n  }\n  event.currentTarget = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\nfunction executeDispatchesInOrder(event, simulated) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchIDs = event._dispatchIDs;\n  if (\"development\" !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and IDs are two parallel arrays that are always in sync.\n      executeDispatch(event, simulated, dispatchListeners[i], dispatchIDs[i]);\n    }\n  } else if (dispatchListeners) {\n    executeDispatch(event, simulated, dispatchListeners, dispatchIDs);\n  }\n  event._dispatchListeners = null;\n  event._dispatchIDs = null;\n}\n\n/**\n * Standard/simple iteration through an event's collected dispatches, but stops\n * at the first dispatch execution returning true, and returns that id.\n *\n * @return {?string} id of the first dispatch execution who's listener returns\n * true, or null if no listener returned true.\n */\nfunction executeDispatchesInOrderStopAtTrueImpl(event) {\n  var dispatchListeners = event._dispatchListeners;\n  var dispatchIDs = event._dispatchIDs;\n  if (\"development\" !== 'production') {\n    validateEventDispatches(event);\n  }\n  if (Array.isArray(dispatchListeners)) {\n    for (var i = 0; i < dispatchListeners.length; i++) {\n      if (event.isPropagationStopped()) {\n        break;\n      }\n      // Listeners and IDs are two parallel arrays that are always in sync.\n      if (dispatchListeners[i](event, dispatchIDs[i])) {\n        return dispatchIDs[i];\n      }\n    }\n  } else if (dispatchListeners) {\n    if (dispatchListeners(event, dispatchIDs)) {\n      return dispatchIDs;\n    }\n  }\n  return null;\n}\n\n/**\n * @see executeDispatchesInOrderStopAtTrueImpl\n */\nfunction executeDispatchesInOrderStopAtTrue(event) {\n  var ret = executeDispatchesInOrderStopAtTrueImpl(event);\n  event._dispatchIDs = null;\n  event._dispatchListeners = null;\n  return ret;\n}\n\n/**\n * Execution of a \"direct\" dispatch - there must be at most one dispatch\n * accumulated on the event or it is considered an error. It doesn't really make\n * sense for an event with multiple dispatches (bubbled) to keep track of the\n * return values at each dispatch execution, but it does tend to make sense when\n * dealing with \"direct\" dispatches.\n *\n * @return {*} The return value of executing the single dispatch.\n */\nfunction executeDirectDispatch(event) {\n  if (\"development\" !== 'production') {\n    validateEventDispatches(event);\n  }\n  var dispatchListener = event._dispatchListeners;\n  var dispatchID = event._dispatchIDs;\n  !!Array.isArray(dispatchListener) ? \"development\" !== 'production' ? invariant(false, 'executeDirectDispatch(...): Invalid `event`.') : invariant(false) : undefined;\n  var res = dispatchListener ? dispatchListener(event, dispatchID) : null;\n  event._dispatchListeners = null;\n  event._dispatchIDs = null;\n  return res;\n}\n\n/**\n * @param {SyntheticEvent} event\n * @return {boolean} True iff number of dispatches accumulated is greater than 0.\n */\nfunction hasDispatches(event) {\n  return !!event._dispatchListeners;\n}\n\n/**\n * General utilities that are useful in creating custom Event Plugins.\n */\nvar EventPluginUtils = {\n  isEndish: isEndish,\n  isMoveish: isMoveish,\n  isStartish: isStartish,\n\n  executeDirectDispatch: executeDirectDispatch,\n  executeDispatchesInOrder: executeDispatchesInOrder,\n  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,\n  hasDispatches: hasDispatches,\n\n  getNode: function (id) {\n    return injection.Mount.getNode(id);\n  },\n  getID: function (node) {\n    return injection.Mount.getID(node);\n  },\n\n  injection: injection\n};\n\nmodule.exports = EventPluginUtils;\n},{\"144\":144,\"15\":15,\"155\":155,\"56\":56}],19:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule EventPropagators\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar EventPluginHub = _dereq_(16);\n\nvar warning = _dereq_(155);\n\nvar accumulateInto = _dereq_(102);\nvar forEachAccumulated = _dereq_(110);\n\nvar PropagationPhases = EventConstants.PropagationPhases;\nvar getListener = EventPluginHub.getListener;\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(id, event, propagationPhase) {\n  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n  return getListener(id, registrationName);\n}\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\nfunction accumulateDirectionalDispatches(domID, upwards, event) {\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(domID, 'Dispatching id must not be null') : undefined;\n  }\n  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;\n  var listener = listenerAtPhase(domID, event, phase);\n  if (listener) {\n    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n    event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);\n  }\n}\n\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory.  We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Same as `accumulateTwoPhaseDispatchesSingle`, but skips over the targetID.\n */\nfunction accumulateTwoPhaseDispatchesSingleSkipTarget(event) {\n  if (event && event.dispatchConfig.phasedRegistrationNames) {\n    EventPluginHub.injection.getInstanceHandle().traverseTwoPhaseSkipTarget(event.dispatchMarker, accumulateDirectionalDispatches, event);\n  }\n}\n\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\nfunction accumulateDispatches(id, ignoredDirection, event) {\n  if (event && event.dispatchConfig.registrationName) {\n    var registrationName = event.dispatchConfig.registrationName;\n    var listener = getListener(id, registrationName);\n    if (listener) {\n      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n      event._dispatchIDs = accumulateInto(event._dispatchIDs, id);\n    }\n  }\n}\n\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\nfunction accumulateDirectDispatchesSingle(event) {\n  if (event && event.dispatchConfig.registrationName) {\n    accumulateDispatches(event.dispatchMarker, null, event);\n  }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\n\nfunction accumulateTwoPhaseDispatchesSkipTarget(events) {\n  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingleSkipTarget);\n}\n\nfunction accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {\n  EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);\n}\n\nfunction accumulateDirectDispatches(events) {\n  forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing event a\n * single one.\n *\n * @constructor EventPropagators\n */\nvar EventPropagators = {\n  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,\n  accumulateTwoPhaseDispatchesSkipTarget: accumulateTwoPhaseDispatchesSkipTarget,\n  accumulateDirectDispatches: accumulateDirectDispatches,\n  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches\n};\n\nmodule.exports = EventPropagators;\n},{\"102\":102,\"110\":110,\"15\":15,\"155\":155,\"16\":16}],20:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule FallbackCompositionState\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = _dereq_(24);\n\nvar assign = _dereq_(23);\nvar getTextContentAccessor = _dereq_(117);\n\n/**\n * This helper class stores information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n * @param {DOMEventTarget} root\n */\nfunction FallbackCompositionState(root) {\n  this._root = root;\n  this._startText = this.getText();\n  this._fallbackText = null;\n}\n\nassign(FallbackCompositionState.prototype, {\n  destructor: function () {\n    this._root = null;\n    this._startText = null;\n    this._fallbackText = null;\n  },\n\n  /**\n   * Get current text of input.\n   *\n   * @return {string}\n   */\n  getText: function () {\n    if ('value' in this._root) {\n      return this._root.value;\n    }\n    return this._root[getTextContentAccessor()];\n  },\n\n  /**\n   * Determine the differing substring between the initially stored\n   * text content and the current content.\n   *\n   * @return {string}\n   */\n  getData: function () {\n    if (this._fallbackText) {\n      return this._fallbackText;\n    }\n\n    var start;\n    var startValue = this._startText;\n    var startLength = startValue.length;\n    var end;\n    var endValue = this.getText();\n    var endLength = endValue.length;\n\n    for (start = 0; start < startLength; start++) {\n      if (startValue[start] !== endValue[start]) {\n        break;\n      }\n    }\n\n    var minEnd = startLength - start;\n    for (end = 1; end <= minEnd; end++) {\n      if (startValue[startLength - end] !== endValue[endLength - end]) {\n        break;\n      }\n    }\n\n    var sliceTail = end > 1 ? 1 - end : undefined;\n    this._fallbackText = endValue.slice(start, sliceTail);\n    return this._fallbackText;\n  }\n});\n\nPooledClass.addPoolingTo(FallbackCompositionState);\n\nmodule.exports = FallbackCompositionState;\n},{\"117\":117,\"23\":23,\"24\":24}],21:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule HTMLDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar ExecutionEnvironment = _dereq_(130);\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\nvar MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;\nvar HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;\nvar HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;\nvar HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;\nvar HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;\nvar HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;\n\nvar hasSVG;\nif (ExecutionEnvironment.canUseDOM) {\n  var implementation = document.implementation;\n  hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');\n}\n\nvar HTMLDOMPropertyConfig = {\n  isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\\d_.\\-]*$/),\n  Properties: {\n    /**\n     * Standard Properties\n     */\n    accept: null,\n    acceptCharset: null,\n    accessKey: null,\n    action: null,\n    allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    allowTransparency: MUST_USE_ATTRIBUTE,\n    alt: null,\n    async: HAS_BOOLEAN_VALUE,\n    autoComplete: null,\n    // autoFocus is polyfilled/normalized by AutoFocusUtils\n    // autoFocus: HAS_BOOLEAN_VALUE,\n    autoPlay: HAS_BOOLEAN_VALUE,\n    capture: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    cellPadding: null,\n    cellSpacing: null,\n    charSet: MUST_USE_ATTRIBUTE,\n    challenge: MUST_USE_ATTRIBUTE,\n    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    classID: MUST_USE_ATTRIBUTE,\n    // To set className on SVG elements, it's necessary to use .setAttribute;\n    // this works on HTML elements too in all browsers except IE8. Conveniently,\n    // IE8 doesn't support SVG and so we can simply use the attribute in\n    // browsers that support SVG and the property in browsers that don't,\n    // regardless of whether the element is HTML or SVG.\n    className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,\n    cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n    colSpan: null,\n    content: null,\n    contentEditable: null,\n    contextMenu: MUST_USE_ATTRIBUTE,\n    controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    coords: null,\n    crossOrigin: null,\n    data: null, // For `<object />` acts as `src`.\n    dateTime: MUST_USE_ATTRIBUTE,\n    'default': HAS_BOOLEAN_VALUE,\n    defer: HAS_BOOLEAN_VALUE,\n    dir: null,\n    disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    download: HAS_OVERLOADED_BOOLEAN_VALUE,\n    draggable: null,\n    encType: null,\n    form: MUST_USE_ATTRIBUTE,\n    formAction: MUST_USE_ATTRIBUTE,\n    formEncType: MUST_USE_ATTRIBUTE,\n    formMethod: MUST_USE_ATTRIBUTE,\n    formNoValidate: HAS_BOOLEAN_VALUE,\n    formTarget: MUST_USE_ATTRIBUTE,\n    frameBorder: MUST_USE_ATTRIBUTE,\n    headers: null,\n    height: MUST_USE_ATTRIBUTE,\n    hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    high: null,\n    href: null,\n    hrefLang: null,\n    htmlFor: null,\n    httpEquiv: null,\n    icon: null,\n    id: MUST_USE_PROPERTY,\n    inputMode: MUST_USE_ATTRIBUTE,\n    integrity: null,\n    is: MUST_USE_ATTRIBUTE,\n    keyParams: MUST_USE_ATTRIBUTE,\n    keyType: MUST_USE_ATTRIBUTE,\n    kind: null,\n    label: null,\n    lang: null,\n    list: MUST_USE_ATTRIBUTE,\n    loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    low: null,\n    manifest: MUST_USE_ATTRIBUTE,\n    marginHeight: null,\n    marginWidth: null,\n    max: null,\n    maxLength: MUST_USE_ATTRIBUTE,\n    media: MUST_USE_ATTRIBUTE,\n    mediaGroup: null,\n    method: null,\n    min: null,\n    minLength: MUST_USE_ATTRIBUTE,\n    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    name: null,\n    nonce: MUST_USE_ATTRIBUTE,\n    noValidate: HAS_BOOLEAN_VALUE,\n    open: HAS_BOOLEAN_VALUE,\n    optimum: null,\n    pattern: null,\n    placeholder: null,\n    poster: null,\n    preload: null,\n    radioGroup: null,\n    readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    rel: null,\n    required: HAS_BOOLEAN_VALUE,\n    reversed: HAS_BOOLEAN_VALUE,\n    role: MUST_USE_ATTRIBUTE,\n    rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n    rowSpan: null,\n    sandbox: null,\n    scope: null,\n    scoped: HAS_BOOLEAN_VALUE,\n    scrolling: null,\n    seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,\n    shape: null,\n    size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,\n    sizes: MUST_USE_ATTRIBUTE,\n    span: HAS_POSITIVE_NUMERIC_VALUE,\n    spellCheck: null,\n    src: null,\n    srcDoc: MUST_USE_PROPERTY,\n    srcLang: null,\n    srcSet: MUST_USE_ATTRIBUTE,\n    start: HAS_NUMERIC_VALUE,\n    step: null,\n    style: null,\n    summary: null,\n    tabIndex: null,\n    target: null,\n    title: null,\n    type: null,\n    useMap: null,\n    value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,\n    width: MUST_USE_ATTRIBUTE,\n    wmode: MUST_USE_ATTRIBUTE,\n    wrap: null,\n\n    /**\n     * RDFa Properties\n     */\n    about: MUST_USE_ATTRIBUTE,\n    datatype: MUST_USE_ATTRIBUTE,\n    inlist: MUST_USE_ATTRIBUTE,\n    prefix: MUST_USE_ATTRIBUTE,\n    // property is also supported for OpenGraph in meta tags.\n    property: MUST_USE_ATTRIBUTE,\n    resource: MUST_USE_ATTRIBUTE,\n    'typeof': MUST_USE_ATTRIBUTE,\n    vocab: MUST_USE_ATTRIBUTE,\n\n    /**\n     * Non-standard Properties\n     */\n    // autoCapitalize and autoCorrect are supported in Mobile Safari for\n    // keyboard hints.\n    autoCapitalize: null,\n    autoCorrect: null,\n    // autoSave allows WebKit/Blink to persist values of input fields on page reloads\n    autoSave: null,\n    // color is for Safari mask-icon link\n    color: null,\n    // itemProp, itemScope, itemType are for\n    // Microdata support. See http://schema.org/docs/gs.html\n    itemProp: MUST_USE_ATTRIBUTE,\n    itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,\n    itemType: MUST_USE_ATTRIBUTE,\n    // itemID and itemRef are for Microdata support as well but\n    // only specified in the the WHATWG spec document. See\n    // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api\n    itemID: MUST_USE_ATTRIBUTE,\n    itemRef: MUST_USE_ATTRIBUTE,\n    // results show looking glass icon and recent searches on input\n    // search fields in WebKit/Blink\n    results: null,\n    // IE-only attribute that specifies security restrictions on an iframe\n    // as an alternative to the sandbox attribute on IE<10\n    security: MUST_USE_ATTRIBUTE,\n    // IE-only attribute that controls focus behavior\n    unselectable: MUST_USE_ATTRIBUTE\n  },\n  DOMAttributeNames: {\n    acceptCharset: 'accept-charset',\n    className: 'class',\n    htmlFor: 'for',\n    httpEquiv: 'http-equiv'\n  },\n  DOMPropertyNames: {\n    autoCapitalize: 'autocapitalize',\n    autoComplete: 'autocomplete',\n    autoCorrect: 'autocorrect',\n    autoFocus: 'autofocus',\n    autoPlay: 'autoplay',\n    autoSave: 'autosave',\n    // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.\n    // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding\n    encType: 'encoding',\n    hrefLang: 'hreflang',\n    radioGroup: 'radiogroup',\n    spellCheck: 'spellcheck',\n    srcDoc: 'srcdoc',\n    srcSet: 'srcset'\n  }\n};\n\nmodule.exports = HTMLDOMPropertyConfig;\n},{\"10\":10,\"130\":130}],22:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule LinkedValueUtils\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactPropTypes = _dereq_(74);\nvar ReactPropTypeLocations = _dereq_(73);\n\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\nvar hasReadOnlyValue = {\n  'button': true,\n  'checkbox': true,\n  'image': true,\n  'hidden': true,\n  'radio': true,\n  'reset': true,\n  'submit': true\n};\n\nfunction _assertSingleLink(inputProps) {\n  !(inputProps.checkedLink == null || inputProps.valueLink == null) ? \"development\" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\\'t want to use valueLink and vice versa.') : invariant(false) : undefined;\n}\nfunction _assertValueLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.value == null && inputProps.onChange == null) ? \"development\" !== 'production' ? invariant(false, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\\'t want to use valueLink.') : invariant(false) : undefined;\n}\n\nfunction _assertCheckedLink(inputProps) {\n  _assertSingleLink(inputProps);\n  !(inputProps.checked == null && inputProps.onChange == null) ? \"development\" !== 'production' ? invariant(false, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\\'t want to ' + 'use checkedLink') : invariant(false) : undefined;\n}\n\nvar propTypes = {\n  value: function (props, propName, componentName) {\n    if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  checked: function (props, propName, componentName) {\n    if (!props[propName] || props.onChange || props.readOnly || props.disabled) {\n      return null;\n    }\n    return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n  },\n  onChange: ReactPropTypes.func\n};\n\nvar loggedTypeFailures = {};\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\nvar LinkedValueUtils = {\n  checkPropTypes: function (tagName, props, owner) {\n    for (var propName in propTypes) {\n      if (propTypes.hasOwnProperty(propName)) {\n        var error = propTypes[propName](props, propName, tagName, ReactPropTypeLocations.prop);\n      }\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var addendum = getDeclarationErrorAddendum(owner);\n        \"development\" !== 'production' ? warning(false, 'Failed form propType: %s%s', error.message, addendum) : undefined;\n      }\n    }\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current value of the input either from value prop or link.\n   */\n  getValue: function (inputProps) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.value;\n    }\n    return inputProps.value;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @return {*} current checked status of the input either from checked prop\n   *             or link.\n   */\n  getChecked: function (inputProps) {\n    if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.value;\n    }\n    return inputProps.checked;\n  },\n\n  /**\n   * @param {object} inputProps Props for form component\n   * @param {SyntheticEvent} event change event to handle\n   */\n  executeOnChange: function (inputProps, event) {\n    if (inputProps.valueLink) {\n      _assertValueLink(inputProps);\n      return inputProps.valueLink.requestChange(event.target.value);\n    } else if (inputProps.checkedLink) {\n      _assertCheckedLink(inputProps);\n      return inputProps.checkedLink.requestChange(event.target.checked);\n    } else if (inputProps.onChange) {\n      return inputProps.onChange.call(undefined, event);\n    }\n  }\n};\n\nmodule.exports = LinkedValueUtils;\n},{\"144\":144,\"155\":155,\"73\":73,\"74\":74}],23:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Object.assign\n */\n\n// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign\n\n'use strict';\n\nfunction assign(target, sources) {\n  if (target == null) {\n    throw new TypeError('Object.assign target cannot be null or undefined');\n  }\n\n  var to = Object(target);\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n  for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {\n    var nextSource = arguments[nextIndex];\n    if (nextSource == null) {\n      continue;\n    }\n\n    var from = Object(nextSource);\n\n    // We don't currently support accessors nor proxies. Therefore this\n    // copy cannot throw. If we ever supported this then we must handle\n    // exceptions and side-effects. We don't support symbols so they won't\n    // be transferred.\n\n    for (var key in from) {\n      if (hasOwnProperty.call(from, key)) {\n        to[key] = from[key];\n      }\n    }\n  }\n\n  return to;\n}\n\nmodule.exports = assign;\n},{}],24:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule PooledClass\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\n/**\n * Static poolers. Several custom versions for each potential number of\n * arguments. A completely generic pooler is easy to implement, but would\n * require accessing the `arguments` object. In each of these, `this` refers to\n * the Class itself, not an instance. If any others are needed, simply add them\n * here, or in their own files.\n */\nvar oneArgumentPooler = function (copyFieldsFrom) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, copyFieldsFrom);\n    return instance;\n  } else {\n    return new Klass(copyFieldsFrom);\n  }\n};\n\nvar twoArgumentPooler = function (a1, a2) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2);\n    return instance;\n  } else {\n    return new Klass(a1, a2);\n  }\n};\n\nvar threeArgumentPooler = function (a1, a2, a3) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3);\n  }\n};\n\nvar fourArgumentPooler = function (a1, a2, a3, a4) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4);\n  }\n};\n\nvar fiveArgumentPooler = function (a1, a2, a3, a4, a5) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2, a3, a4, a5);\n    return instance;\n  } else {\n    return new Klass(a1, a2, a3, a4, a5);\n  }\n};\n\nvar standardReleaser = function (instance) {\n  var Klass = this;\n  !(instance instanceof Klass) ? \"development\" !== 'production' ? invariant(false, 'Trying to release an instance into a pool of a different type.') : invariant(false) : undefined;\n  instance.destructor();\n  if (Klass.instancePool.length < Klass.poolSize) {\n    Klass.instancePool.push(instance);\n  }\n};\n\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = oneArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances (optional).\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function (CopyConstructor, pooler) {\n  var NewKlass = CopyConstructor;\n  NewKlass.instancePool = [];\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\n  if (!NewKlass.poolSize) {\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\n  }\n  NewKlass.release = standardReleaser;\n  return NewKlass;\n};\n\nvar PooledClass = {\n  addPoolingTo: addPoolingTo,\n  oneArgumentPooler: oneArgumentPooler,\n  twoArgumentPooler: twoArgumentPooler,\n  threeArgumentPooler: threeArgumentPooler,\n  fourArgumentPooler: fourArgumentPooler,\n  fiveArgumentPooler: fiveArgumentPooler\n};\n\nmodule.exports = PooledClass;\n},{\"144\":144}],25:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserComponentMixin\n */\n\n'use strict';\n\nvar ReactInstanceMap = _dereq_(62);\n\nvar findDOMNode = _dereq_(108);\nvar warning = _dereq_(155);\n\nvar didWarnKey = '_getDOMNodeDidWarn';\n\nvar ReactBrowserComponentMixin = {\n  /**\n   * Returns the DOM node rendered by this component.\n   *\n   * @return {DOMElement} The root node of this component.\n   * @final\n   * @protected\n   */\n  getDOMNode: function () {\n    \"development\" !== 'production' ? warning(this.constructor[didWarnKey], '%s.getDOMNode(...) is deprecated. Please use ' + 'ReactDOM.findDOMNode(instance) instead.', ReactInstanceMap.get(this).getName() || this.tagName || 'Unknown') : undefined;\n    this.constructor[didWarnKey] = true;\n    return findDOMNode(this);\n  }\n};\n\nmodule.exports = ReactBrowserComponentMixin;\n},{\"108\":108,\"155\":155,\"62\":62}],26:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactBrowserEventEmitter\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar EventPluginHub = _dereq_(16);\nvar EventPluginRegistry = _dereq_(17);\nvar ReactEventEmitterMixin = _dereq_(57);\nvar ReactPerf = _dereq_(71);\nvar ViewportMetrics = _dereq_(101);\n\nvar assign = _dereq_(23);\nvar isEventSupported = _dereq_(119);\n\n/**\n * Summary of `ReactBrowserEventEmitter` event handling:\n *\n *  - Top-level delegation is used to trap most native browser events. This\n *    may only occur in the main thread and is the responsibility of\n *    ReactEventListener, which is injected and can therefore support pluggable\n *    event sources. This is the only work that occurs in the main thread.\n *\n *  - We normalize and de-duplicate events to account for browser quirks. This\n *    may be done in the worker thread.\n *\n *  - Forward these native events (with the associated top-level type used to\n *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want\n *    to extract any synthetic events.\n *\n *  - The `EventPluginHub` will then process each event by annotating them with\n *    \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n *  - The `EventPluginHub` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+    .\n * |    DOM     |    .\n * +------------+    .\n *       |           .\n *       v           .\n * +------------+    .\n * | ReactEvent |    .\n * |  Listener  |    .\n * +------------+    .                         +-----------+\n *       |           .               +--------+|SimpleEvent|\n *       |           .               |         |Plugin     |\n * +-----|------+    .               v         +-----------+\n * |     |      |    .    +--------------+                    +------------+\n * |     +-----------.--->|EventPluginHub|                    |    Event   |\n * |            |    .    |              |     +-----------+  | Propagators|\n * | ReactEvent |    .    |              |     |TapEvent   |  |------------|\n * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|\n * |            |    .    |              |     +-----------+  |  utilities |\n * |     +-----------.--->|              |                    +------------+\n * |     |      |    .    +--------------+\n * +-----|------+    .                ^        +-----------+\n *       |           .                |        |Enter/Leave|\n *       +           .                +-------+|Plugin     |\n * +-------------+   .                         +-----------+\n * | application |   .\n * |-------------|   .\n * |             |   .\n * |             |   .\n * +-------------+   .\n *                   .\n *    React Core     .  General Purpose Event Plugin System\n */\n\nvar alreadyListeningTo = {};\nvar isMonitoringScrollValue = false;\nvar reactTopListenersCounter = 0;\n\n// For events like 'submit' which don't consistently bubble (which we trap at a\n// lower node than `document`), binding at `document` would cause duplicate\n// events so we don't include them here\nvar topEventMapping = {\n  topAbort: 'abort',\n  topBlur: 'blur',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topChange: 'change',\n  topClick: 'click',\n  topCompositionEnd: 'compositionend',\n  topCompositionStart: 'compositionstart',\n  topCompositionUpdate: 'compositionupdate',\n  topContextMenu: 'contextmenu',\n  topCopy: 'copy',\n  topCut: 'cut',\n  topDoubleClick: 'dblclick',\n  topDrag: 'drag',\n  topDragEnd: 'dragend',\n  topDragEnter: 'dragenter',\n  topDragExit: 'dragexit',\n  topDragLeave: 'dragleave',\n  topDragOver: 'dragover',\n  topDragStart: 'dragstart',\n  topDrop: 'drop',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topFocus: 'focus',\n  topInput: 'input',\n  topKeyDown: 'keydown',\n  topKeyPress: 'keypress',\n  topKeyUp: 'keyup',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topMouseDown: 'mousedown',\n  topMouseMove: 'mousemove',\n  topMouseOut: 'mouseout',\n  topMouseOver: 'mouseover',\n  topMouseUp: 'mouseup',\n  topPaste: 'paste',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topScroll: 'scroll',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topSelectionChange: 'selectionchange',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTextInput: 'textInput',\n  topTimeUpdate: 'timeupdate',\n  topTouchCancel: 'touchcancel',\n  topTouchEnd: 'touchend',\n  topTouchMove: 'touchmove',\n  topTouchStart: 'touchstart',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting',\n  topWheel: 'wheel'\n};\n\n/**\n * To ensure no conflicts with other potential React instances on the page\n */\nvar topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);\n\nfunction getListeningForDocument(mountAt) {\n  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`\n  // directly.\n  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {\n    mountAt[topListenersIDKey] = reactTopListenersCounter++;\n    alreadyListeningTo[mountAt[topListenersIDKey]] = {};\n  }\n  return alreadyListeningTo[mountAt[topListenersIDKey]];\n}\n\n/**\n * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For\n * example:\n *\n *   ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);\n *\n * This would allocate a \"registration\" of `('onClick', myFunction)` on 'myID'.\n *\n * @internal\n */\nvar ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {\n\n  /**\n   * Injectable event backend\n   */\n  ReactEventListener: null,\n\n  injection: {\n    /**\n     * @param {object} ReactEventListener\n     */\n    injectReactEventListener: function (ReactEventListener) {\n      ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);\n      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;\n    }\n  },\n\n  /**\n   * Sets whether or not any created callbacks should be enabled.\n   *\n   * @param {boolean} enabled True if callbacks should be enabled.\n   */\n  setEnabled: function (enabled) {\n    if (ReactBrowserEventEmitter.ReactEventListener) {\n      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);\n    }\n  },\n\n  /**\n   * @return {boolean} True if callbacks are enabled.\n   */\n  isEnabled: function () {\n    return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());\n  },\n\n  /**\n   * We listen for bubbled touch events on the document object.\n   *\n   * Firefox v8.01 (and possibly others) exhibited strange behavior when\n   * mounting `onmousemove` events at some node that was not the document\n   * element. The symptoms were that if your mouse is not moving over something\n   * contained within that mount point (for example on the background) the\n   * top-level listeners for `onmousemove` won't be called. However, if you\n   * register the `mousemove` on the document object, then it will of course\n   * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n   * top-level listeners to the document object only, at least for these\n   * movement types of events and possibly all events.\n   *\n   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n   *\n   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n   * they bubble to document.\n   *\n   * @param {string} registrationName Name of listener (e.g. `onClick`).\n   * @param {object} contentDocumentHandle Document which owns the container\n   */\n  listenTo: function (registrationName, contentDocumentHandle) {\n    var mountAt = contentDocumentHandle;\n    var isListening = getListeningForDocument(mountAt);\n    var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];\n\n    var topLevelTypes = EventConstants.topLevelTypes;\n    for (var i = 0; i < dependencies.length; i++) {\n      var dependency = dependencies[i];\n      if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {\n        if (dependency === topLevelTypes.topWheel) {\n          if (isEventSupported('wheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);\n          } else if (isEventSupported('mousewheel')) {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);\n          } else {\n            // Firefox needs to capture a different mouse scroll event.\n            // @see http://www.quirksmode.org/dom/events/tests/scroll.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);\n          }\n        } else if (dependency === topLevelTypes.topScroll) {\n\n          if (isEventSupported('scroll', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);\n          } else {\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);\n          }\n        } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {\n\n          if (isEventSupported('focus', true)) {\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);\n          } else if (isEventSupported('focusin')) {\n            // IE has `focusin` and `focusout` events which bubble.\n            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);\n            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);\n          }\n\n          // to make sure blur and focus event listeners are only attached once\n          isListening[topLevelTypes.topBlur] = true;\n          isListening[topLevelTypes.topFocus] = true;\n        } else if (topEventMapping.hasOwnProperty(dependency)) {\n          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);\n        }\n\n        isListening[dependency] = true;\n      }\n    }\n  },\n\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);\n  },\n\n  /**\n   * Listens to window scroll and resize events. We cache scroll values so that\n   * application code can access them without triggering reflows.\n   *\n   * NOTE: Scroll events do not bubble.\n   *\n   * @see http://www.quirksmode.org/dom/events/scroll.html\n   */\n  ensureScrollValueMonitoring: function () {\n    if (!isMonitoringScrollValue) {\n      var refresh = ViewportMetrics.refreshScrollValues;\n      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);\n      isMonitoringScrollValue = true;\n    }\n  },\n\n  eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,\n\n  registrationNameModules: EventPluginHub.registrationNameModules,\n\n  putListener: EventPluginHub.putListener,\n\n  getListener: EventPluginHub.getListener,\n\n  deleteListener: EventPluginHub.deleteListener,\n\n  deleteAllListeners: EventPluginHub.deleteAllListeners\n\n});\n\nReactPerf.measureMethods(ReactBrowserEventEmitter, 'ReactBrowserEventEmitter', {\n  putListener: 'putListener',\n  deleteListener: 'deleteListener'\n});\n\nmodule.exports = ReactBrowserEventEmitter;\n},{\"101\":101,\"119\":119,\"15\":15,\"16\":16,\"17\":17,\"23\":23,\"57\":57,\"71\":71}],27:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildReconciler\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactReconciler = _dereq_(76);\n\nvar instantiateReactComponent = _dereq_(118);\nvar shouldUpdateReactComponent = _dereq_(126);\nvar traverseAllChildren = _dereq_(127);\nvar warning = _dereq_(155);\n\nfunction instantiateChild(childInstances, child, name) {\n  // We found a component instance.\n  var keyUnique = childInstances[name] === undefined;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n  }\n  if (child != null && keyUnique) {\n    childInstances[name] = instantiateReactComponent(child, null);\n  }\n}\n\n/**\n * ReactChildReconciler provides helpers for initializing or updating a set of\n * children. Its output is suitable for passing it onto ReactMultiChild which\n * does diffed reordering and insertion.\n */\nvar ReactChildReconciler = {\n  /**\n   * Generates a \"mount image\" for each of the supplied children. In the case\n   * of `ReactDOMComponent`, a mount image is a string of markup.\n   *\n   * @param {?object} nestedChildNodes Nested child maps.\n   * @return {?object} A set of child instances.\n   * @internal\n   */\n  instantiateChildren: function (nestedChildNodes, transaction, context) {\n    if (nestedChildNodes == null) {\n      return null;\n    }\n    var childInstances = {};\n    traverseAllChildren(nestedChildNodes, instantiateChild, childInstances);\n    return childInstances;\n  },\n\n  /**\n   * Updates the rendered children and returns a new set of children.\n   *\n   * @param {?object} prevChildren Previously initialized set of children.\n   * @param {?object} nextChildren Flat child element maps.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @return {?object} A new set of child instances.\n   * @internal\n   */\n  updateChildren: function (prevChildren, nextChildren, transaction, context) {\n    // We currently don't have a way to track moves here but if we use iterators\n    // instead of for..in we can zip the iterators and check if an item has\n    // moved.\n    // TODO: If nothing has changed, return the prevChildren object so that we\n    // can quickly bailout if nothing has changed.\n    if (!nextChildren && !prevChildren) {\n      return null;\n    }\n    var name;\n    for (name in nextChildren) {\n      if (!nextChildren.hasOwnProperty(name)) {\n        continue;\n      }\n      var prevChild = prevChildren && prevChildren[name];\n      var prevElement = prevChild && prevChild._currentElement;\n      var nextElement = nextChildren[name];\n      if (prevChild != null && shouldUpdateReactComponent(prevElement, nextElement)) {\n        ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);\n        nextChildren[name] = prevChild;\n      } else {\n        if (prevChild) {\n          ReactReconciler.unmountComponent(prevChild, name);\n        }\n        // The child must be instantiated before it's mounted.\n        var nextChildInstance = instantiateReactComponent(nextElement, null);\n        nextChildren[name] = nextChildInstance;\n      }\n    }\n    // Unmount children that are no longer present.\n    for (name in prevChildren) {\n      if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n        ReactReconciler.unmountComponent(prevChildren[name]);\n      }\n    }\n    return nextChildren;\n  },\n\n  /**\n   * Unmounts all rendered children. This should be used to clean up children\n   * when this component is unmounted.\n   *\n   * @param {?object} renderedChildren Previously initialized set of children.\n   * @internal\n   */\n  unmountChildren: function (renderedChildren) {\n    for (var name in renderedChildren) {\n      if (renderedChildren.hasOwnProperty(name)) {\n        var renderedChild = renderedChildren[name];\n        ReactReconciler.unmountComponent(renderedChild);\n      }\n    }\n  }\n\n};\n\nmodule.exports = ReactChildReconciler;\n},{\"118\":118,\"126\":126,\"127\":127,\"155\":155,\"76\":76}],28:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactChildren\n */\n\n'use strict';\n\nvar PooledClass = _dereq_(24);\nvar ReactElement = _dereq_(52);\n\nvar emptyFunction = _dereq_(136);\nvar traverseAllChildren = _dereq_(127);\n\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nvar fourArgumentPooler = PooledClass.fourArgumentPooler;\n\nvar userProvidedKeyEscapeRegex = /\\/(?!\\/)/g;\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, '//');\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * traversal. Allows avoiding binding callbacks.\n *\n * @constructor ForEachBookKeeping\n * @param {!function} forEachFunction Function to perform traversal with.\n * @param {?*} forEachContext Context to perform context with.\n */\nfunction ForEachBookKeeping(forEachFunction, forEachContext) {\n  this.func = forEachFunction;\n  this.context = forEachContext;\n  this.count = 0;\n}\nForEachBookKeeping.prototype.destructor = function () {\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n  func.call(context, child, bookKeeping.count++);\n}\n\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n  if (children == null) {\n    return children;\n  }\n  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);\n  traverseAllChildren(children, forEachSingleChild, traverseContext);\n  ForEachBookKeeping.release(traverseContext);\n}\n\n/**\n * PooledClass representing the bookkeeping associated with performing a child\n * mapping. Allows avoiding binding callbacks.\n *\n * @constructor MapBookKeeping\n * @param {!*} mapResult Object containing the ordered map of results.\n * @param {!function} mapFunction Function to perform mapping with.\n * @param {?*} mapContext Context to perform mapping with.\n */\nfunction MapBookKeeping(mapResult, keyPrefix, mapFunction, mapContext) {\n  this.result = mapResult;\n  this.keyPrefix = keyPrefix;\n  this.func = mapFunction;\n  this.context = mapContext;\n  this.count = 0;\n}\nMapBookKeeping.prototype.destructor = function () {\n  this.result = null;\n  this.keyPrefix = null;\n  this.func = null;\n  this.context = null;\n  this.count = 0;\n};\nPooledClass.addPoolingTo(MapBookKeeping, fourArgumentPooler);\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n  var result = bookKeeping.result;\n  var keyPrefix = bookKeeping.keyPrefix;\n  var func = bookKeeping.func;\n  var context = bookKeeping.context;\n\n  var mappedChild = func.call(context, child, bookKeeping.count++);\n  if (Array.isArray(mappedChild)) {\n    mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, emptyFunction.thatReturnsArgument);\n  } else if (mappedChild != null) {\n    if (ReactElement.isValidElement(mappedChild)) {\n      mappedChild = ReactElement.cloneAndReplaceKey(mappedChild,\n      // Keep both the (mapped) and old keys if they differ, just as\n      // traverseAllChildren used to do for objects as children\n      keyPrefix + (mappedChild !== child ? escapeUserProvidedKey(mappedChild.key || '') + '/' : '') + childKey);\n    }\n    result.push(mappedChild);\n  }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n  var escapedPrefix = '';\n  if (prefix != null) {\n    escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n  }\n  var traverseContext = MapBookKeeping.getPooled(array, escapedPrefix, func, context);\n  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n  MapBookKeeping.release(traverseContext);\n}\n\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\nfunction mapChildren(children, func, context) {\n  if (children == null) {\n    return children;\n  }\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n  return result;\n}\n\nfunction forEachSingleChildDummy(traverseContext, child, name) {\n  return null;\n}\n\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\nfunction countChildren(children, context) {\n  return traverseAllChildren(children, forEachSingleChildDummy, null);\n}\n\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n */\nfunction toArray(children) {\n  var result = [];\n  mapIntoWithKeyPrefixInternal(children, result, null, emptyFunction.thatReturnsArgument);\n  return result;\n}\n\nvar ReactChildren = {\n  forEach: forEachChildren,\n  map: mapChildren,\n  mapIntoWithKeyPrefixInternal: mapIntoWithKeyPrefixInternal,\n  count: countChildren,\n  toArray: toArray\n};\n\nmodule.exports = ReactChildren;\n},{\"127\":127,\"136\":136,\"24\":24,\"52\":52}],29:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactClass\n */\n\n'use strict';\n\nvar ReactComponent = _dereq_(30);\nvar ReactElement = _dereq_(52);\nvar ReactPropTypeLocations = _dereq_(73);\nvar ReactPropTypeLocationNames = _dereq_(72);\nvar ReactNoopUpdateQueue = _dereq_(69);\n\nvar assign = _dereq_(23);\nvar emptyObject = _dereq_(137);\nvar invariant = _dereq_(144);\nvar keyMirror = _dereq_(147);\nvar keyOf = _dereq_(148);\nvar warning = _dereq_(155);\n\nvar MIXINS_KEY = keyOf({ mixins: null });\n\n/**\n * Policies that describe methods in `ReactClassInterface`.\n */\nvar SpecPolicy = keyMirror({\n  /**\n   * These methods may be defined only once by the class specification or mixin.\n   */\n  DEFINE_ONCE: null,\n  /**\n   * These methods may be defined by both the class specification and mixins.\n   * Subsequent definitions will be chained. These methods must return void.\n   */\n  DEFINE_MANY: null,\n  /**\n   * These methods are overriding the base class.\n   */\n  OVERRIDE_BASE: null,\n  /**\n   * These methods are similar to DEFINE_MANY, except we assume they return\n   * objects. We try to merge the keys of the return values of all the mixed in\n   * functions. If there is a key conflict we throw.\n   */\n  DEFINE_MANY_MERGED: null\n});\n\nvar injectedMixins = [];\n\nvar warnedSetProps = false;\nfunction warnSetProps() {\n  if (!warnedSetProps) {\n    warnedSetProps = true;\n    \"development\" !== 'production' ? warning(false, 'setProps(...) and replaceProps(...) are deprecated. ' + 'Instead, call render again at the top level.') : undefined;\n  }\n}\n\n/**\n * Composite components are higher-level components that compose other composite\n * or native components.\n *\n * To create a new type of `ReactClass`, pass a specification of\n * your new class to `React.createClass`. The only requirement of your class\n * specification is that you implement a `render` method.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return <div>Hello World</div>;\n *     }\n *   });\n *\n * The class specification supports a specific protocol of methods that have\n * special meaning (e.g. `render`). See `ReactClassInterface` for\n * more the comprehensive protocol. Any other properties and methods in the\n * class specification will be available on the prototype.\n *\n * @interface ReactClassInterface\n * @internal\n */\nvar ReactClassInterface = {\n\n  /**\n   * An array of Mixin objects to include when defining your component.\n   *\n   * @type {array}\n   * @optional\n   */\n  mixins: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * An object containing properties and methods that should be defined on\n   * the component's constructor instead of its prototype (static methods).\n   *\n   * @type {object}\n   * @optional\n   */\n  statics: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of prop types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  propTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types for this component.\n   *\n   * @type {object}\n   * @optional\n   */\n  contextTypes: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Definition of context types this component sets for its children.\n   *\n   * @type {object}\n   * @optional\n   */\n  childContextTypes: SpecPolicy.DEFINE_MANY,\n\n  // ==== Definition methods ====\n\n  /**\n   * Invoked when the component is mounted. Values in the mapping will be set on\n   * `this.props` if that prop is not specified (i.e. using an `in` check).\n   *\n   * This method is invoked before `getInitialState` and therefore cannot rely\n   * on `this.state` or use `this.setState`.\n   *\n   * @return {object}\n   * @optional\n   */\n  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Invoked once before the component is mounted. The return value will be used\n   * as the initial value of `this.state`.\n   *\n   *   getInitialState: function() {\n   *     return {\n   *       isOn: false,\n   *       fooBaz: new BazFoo()\n   *     }\n   *   }\n   *\n   * @return {object}\n   * @optional\n   */\n  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * @return {object}\n   * @optional\n   */\n  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,\n\n  /**\n   * Uses props from `this.props` and state from `this.state` to render the\n   * structure of the component.\n   *\n   * No guarantees are made about when or how often this method is invoked, so\n   * it must not have side effects.\n   *\n   *   render: function() {\n   *     var name = this.props.name;\n   *     return <div>Hello, {name}!</div>;\n   *   }\n   *\n   * @return {ReactComponent}\n   * @nosideeffects\n   * @required\n   */\n  render: SpecPolicy.DEFINE_ONCE,\n\n  // ==== Delegate methods ====\n\n  /**\n   * Invoked when the component is initially created and about to be mounted.\n   * This may have side effects, but any external subscriptions or data created\n   * by this method must be cleaned up in `componentWillUnmount`.\n   *\n   * @optional\n   */\n  componentWillMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component has been mounted and has a DOM representation.\n   * However, there is no guarantee that the DOM node is in the document.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been mounted (initialized and rendered) for the first time.\n   *\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidMount: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked before the component receives new props.\n   *\n   * Use this as an opportunity to react to a prop transition by updating the\n   * state using `this.setState`. Current props are accessed via `this.props`.\n   *\n   *   componentWillReceiveProps: function(nextProps, nextContext) {\n   *     this.setState({\n   *       likesIncreasing: nextProps.likeCount > this.props.likeCount\n   *     });\n   *   }\n   *\n   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop\n   * transition may cause a state change, but the opposite is not true. If you\n   * need it, you are probably looking for `componentWillUpdate`.\n   *\n   * @param {object} nextProps\n   * @optional\n   */\n  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked while deciding if the component should be updated as a result of\n   * receiving new props, state and/or context.\n   *\n   * Use this as an opportunity to `return false` when you're certain that the\n   * transition to the new props/state/context will not require a component\n   * update.\n   *\n   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {\n   *     return !equal(nextProps, this.props) ||\n   *       !equal(nextState, this.state) ||\n   *       !equal(nextContext, this.context);\n   *   }\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @return {boolean} True if the component should update.\n   * @optional\n   */\n  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,\n\n  /**\n   * Invoked when the component is about to update due to a transition from\n   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`\n   * and `nextContext`.\n   *\n   * Use this as an opportunity to perform preparation before an update occurs.\n   *\n   * NOTE: You **cannot** use `this.setState()` in this method.\n   *\n   * @param {object} nextProps\n   * @param {?object} nextState\n   * @param {?object} nextContext\n   * @param {ReactReconcileTransaction} transaction\n   * @optional\n   */\n  componentWillUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component's DOM representation has been updated.\n   *\n   * Use this as an opportunity to operate on the DOM when the component has\n   * been updated.\n   *\n   * @param {object} prevProps\n   * @param {?object} prevState\n   * @param {?object} prevContext\n   * @param {DOMElement} rootNode DOM element representing the component.\n   * @optional\n   */\n  componentDidUpdate: SpecPolicy.DEFINE_MANY,\n\n  /**\n   * Invoked when the component is about to be removed from its parent and have\n   * its DOM representation destroyed.\n   *\n   * Use this as an opportunity to deallocate any external resources.\n   *\n   * NOTE: There is no `componentDidUnmount` since your component will have been\n   * destroyed by that point.\n   *\n   * @optional\n   */\n  componentWillUnmount: SpecPolicy.DEFINE_MANY,\n\n  // ==== Advanced methods ====\n\n  /**\n   * Updates the component's currently mounted DOM representation.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   * @overridable\n   */\n  updateComponent: SpecPolicy.OVERRIDE_BASE\n\n};\n\n/**\n * Mapping from class specification keys to special processing functions.\n *\n * Although these are declared like instance properties in the specification\n * when defining classes using `React.createClass`, they are actually static\n * and are accessible on the constructor instead of the prototype. Despite\n * being static, they must be defined outside of the \"statics\" key under\n * which all other static methods are defined.\n */\nvar RESERVED_SPEC_KEYS = {\n  displayName: function (Constructor, displayName) {\n    Constructor.displayName = displayName;\n  },\n  mixins: function (Constructor, mixins) {\n    if (mixins) {\n      for (var i = 0; i < mixins.length; i++) {\n        mixSpecIntoComponent(Constructor, mixins[i]);\n      }\n    }\n  },\n  childContextTypes: function (Constructor, childContextTypes) {\n    if (\"development\" !== 'production') {\n      validateTypeDef(Constructor, childContextTypes, ReactPropTypeLocations.childContext);\n    }\n    Constructor.childContextTypes = assign({}, Constructor.childContextTypes, childContextTypes);\n  },\n  contextTypes: function (Constructor, contextTypes) {\n    if (\"development\" !== 'production') {\n      validateTypeDef(Constructor, contextTypes, ReactPropTypeLocations.context);\n    }\n    Constructor.contextTypes = assign({}, Constructor.contextTypes, contextTypes);\n  },\n  /**\n   * Special case getDefaultProps which should move into statics but requires\n   * automatic merging.\n   */\n  getDefaultProps: function (Constructor, getDefaultProps) {\n    if (Constructor.getDefaultProps) {\n      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps);\n    } else {\n      Constructor.getDefaultProps = getDefaultProps;\n    }\n  },\n  propTypes: function (Constructor, propTypes) {\n    if (\"development\" !== 'production') {\n      validateTypeDef(Constructor, propTypes, ReactPropTypeLocations.prop);\n    }\n    Constructor.propTypes = assign({}, Constructor.propTypes, propTypes);\n  },\n  statics: function (Constructor, statics) {\n    mixStaticSpecIntoComponent(Constructor, statics);\n  },\n  autobind: function () {} };\n\n// noop\nfunction validateTypeDef(Constructor, typeDef, location) {\n  for (var propName in typeDef) {\n    if (typeDef.hasOwnProperty(propName)) {\n      // use a warning instead of an invariant so components\n      // don't show up in prod but not in __DEV__\n      \"development\" !== 'production' ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : undefined;\n    }\n  }\n}\n\nfunction validateMethodOverride(proto, name) {\n  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;\n\n  // Disallow overriding of base class methods unless explicitly allowed.\n  if (ReactClassMixin.hasOwnProperty(name)) {\n    !(specPolicy === SpecPolicy.OVERRIDE_BASE) ? \"development\" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(false) : undefined;\n  }\n\n  // Disallow defining methods more than once unless explicitly allowed.\n  if (proto.hasOwnProperty(name)) {\n    !(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED) ? \"development\" !== 'production' ? invariant(false, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(false) : undefined;\n  }\n}\n\n/**\n * Mixin helper which handles policy validation and reserved\n * specification keys when building React classses.\n */\nfunction mixSpecIntoComponent(Constructor, spec) {\n  if (!spec) {\n    return;\n  }\n\n  !(typeof spec !== 'function') ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n  !!ReactElement.isValidElement(spec) ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You\\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(false) : undefined;\n\n  var proto = Constructor.prototype;\n\n  // By handling mixins before any other properties, we ensure the same\n  // chaining order is applied to methods with DEFINE_MANY policy, whether\n  // mixins are listed before or after these methods in the spec.\n  if (spec.hasOwnProperty(MIXINS_KEY)) {\n    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);\n  }\n\n  for (var name in spec) {\n    if (!spec.hasOwnProperty(name)) {\n      continue;\n    }\n\n    if (name === MIXINS_KEY) {\n      // We have already handled mixins in a special case above.\n      continue;\n    }\n\n    var property = spec[name];\n    validateMethodOverride(proto, name);\n\n    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {\n      RESERVED_SPEC_KEYS[name](Constructor, property);\n    } else {\n      // Setup methods on prototype:\n      // The following member methods should not be automatically bound:\n      // 1. Expected ReactClass methods (in the \"interface\").\n      // 2. Overridden methods (that were mixed in).\n      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);\n      var isAlreadyDefined = proto.hasOwnProperty(name);\n      var isFunction = typeof property === 'function';\n      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false;\n\n      if (shouldAutoBind) {\n        if (!proto.__reactAutoBindMap) {\n          proto.__reactAutoBindMap = {};\n        }\n        proto.__reactAutoBindMap[name] = property;\n        proto[name] = property;\n      } else {\n        if (isAlreadyDefined) {\n          var specPolicy = ReactClassInterface[name];\n\n          // These cases should already be caught by validateMethodOverride.\n          !(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY)) ? \"development\" !== 'production' ? invariant(false, 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(false) : undefined;\n\n          // For methods which are defined more than once, call the existing\n          // methods before calling the new property, merging if appropriate.\n          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {\n            proto[name] = createMergedResultFunction(proto[name], property);\n          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {\n            proto[name] = createChainedFunction(proto[name], property);\n          }\n        } else {\n          proto[name] = property;\n          if (\"development\" !== 'production') {\n            // Add verbose displayName to the function, which helps when looking\n            // at profiling tools.\n            if (typeof property === 'function' && spec.displayName) {\n              proto[name].displayName = spec.displayName + '_' + name;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction mixStaticSpecIntoComponent(Constructor, statics) {\n  if (!statics) {\n    return;\n  }\n  for (var name in statics) {\n    var property = statics[name];\n    if (!statics.hasOwnProperty(name)) {\n      continue;\n    }\n\n    var isReserved = (name in RESERVED_SPEC_KEYS);\n    !!isReserved ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\\'t be on the \"statics\" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(false) : undefined;\n\n    var isInherited = (name in Constructor);\n    !!isInherited ? \"development\" !== 'production' ? invariant(false, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(false) : undefined;\n    Constructor[name] = property;\n  }\n}\n\n/**\n * Merge two objects, but throw if both contain the same key.\n *\n * @param {object} one The first object, which is mutated.\n * @param {object} two The second object\n * @return {object} one after it has been mutated to contain everything in two.\n */\nfunction mergeIntoWithNoDuplicateKeys(one, two) {\n  !(one && two && typeof one === 'object' && typeof two === 'object') ? \"development\" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(false) : undefined;\n\n  for (var key in two) {\n    if (two.hasOwnProperty(key)) {\n      !(one[key] === undefined) ? \"development\" !== 'production' ? invariant(false, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(false) : undefined;\n      one[key] = two[key];\n    }\n  }\n  return one;\n}\n\n/**\n * Creates a function that invokes two functions and merges their return values.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createMergedResultFunction(one, two) {\n  return function mergedResult() {\n    var a = one.apply(this, arguments);\n    var b = two.apply(this, arguments);\n    if (a == null) {\n      return b;\n    } else if (b == null) {\n      return a;\n    }\n    var c = {};\n    mergeIntoWithNoDuplicateKeys(c, a);\n    mergeIntoWithNoDuplicateKeys(c, b);\n    return c;\n  };\n}\n\n/**\n * Creates a function that invokes two functions and ignores their return vales.\n *\n * @param {function} one Function to invoke first.\n * @param {function} two Function to invoke second.\n * @return {function} Function that invokes the two argument functions.\n * @private\n */\nfunction createChainedFunction(one, two) {\n  return function chainedFunction() {\n    one.apply(this, arguments);\n    two.apply(this, arguments);\n  };\n}\n\n/**\n * Binds a method to the component.\n *\n * @param {object} component Component whose method is going to be bound.\n * @param {function} method Method to be bound.\n * @return {function} The bound method.\n */\nfunction bindAutoBindMethod(component, method) {\n  var boundMethod = method.bind(component);\n  if (\"development\" !== 'production') {\n    boundMethod.__reactBoundContext = component;\n    boundMethod.__reactBoundMethod = method;\n    boundMethod.__reactBoundArguments = null;\n    var componentName = component.constructor.displayName;\n    var _bind = boundMethod.bind;\n    /* eslint-disable block-scoped-var, no-undef */\n    boundMethod.bind = function (newThis) {\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      // User is trying to bind() an autobound method; we effectively will\n      // ignore the value of \"this\" that the user is trying to use, so\n      // let's warn.\n      if (newThis !== component && newThis !== null) {\n        \"development\" !== 'production' ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : undefined;\n      } else if (!args.length) {\n        \"development\" !== 'production' ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : undefined;\n        return boundMethod;\n      }\n      var reboundMethod = _bind.apply(boundMethod, arguments);\n      reboundMethod.__reactBoundContext = component;\n      reboundMethod.__reactBoundMethod = method;\n      reboundMethod.__reactBoundArguments = args;\n      return reboundMethod;\n      /* eslint-enable */\n    };\n  }\n  return boundMethod;\n}\n\n/**\n * Binds all auto-bound methods in a component.\n *\n * @param {object} component Component whose method is going to be bound.\n */\nfunction bindAutoBindMethods(component) {\n  for (var autoBindKey in component.__reactAutoBindMap) {\n    if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {\n      var method = component.__reactAutoBindMap[autoBindKey];\n      component[autoBindKey] = bindAutoBindMethod(component, method);\n    }\n  }\n}\n\n/**\n * Add more to the ReactClass base class. These are all legacy features and\n * therefore not already part of the modern ReactComponent.\n */\nvar ReactClassMixin = {\n\n  /**\n   * TODO: This will be deprecated because state should always keep a consistent\n   * type signature and the only use case for this, is to avoid that.\n   */\n  replaceState: function (newState, callback) {\n    this.updater.enqueueReplaceState(this, newState);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback);\n    }\n  },\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function () {\n    return this.updater.isMounted(this);\n  },\n\n  /**\n   * Sets a subset of the props.\n   *\n   * @param {object} partialProps Subset of the next props.\n   * @param {?function} callback Called after props are updated.\n   * @final\n   * @public\n   * @deprecated\n   */\n  setProps: function (partialProps, callback) {\n    if (\"development\" !== 'production') {\n      warnSetProps();\n    }\n    this.updater.enqueueSetProps(this, partialProps);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback);\n    }\n  },\n\n  /**\n   * Replace all the props.\n   *\n   * @param {object} newProps Subset of the next props.\n   * @param {?function} callback Called after props are updated.\n   * @final\n   * @public\n   * @deprecated\n   */\n  replaceProps: function (newProps, callback) {\n    if (\"development\" !== 'production') {\n      warnSetProps();\n    }\n    this.updater.enqueueReplaceProps(this, newProps);\n    if (callback) {\n      this.updater.enqueueCallback(this, callback);\n    }\n  }\n};\n\nvar ReactClassComponent = function () {};\nassign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);\n\n/**\n * Module for creating composite components.\n *\n * @class ReactClass\n */\nvar ReactClass = {\n\n  /**\n   * Creates a composite component class given a class specification.\n   *\n   * @param {object} spec Class specification (which must define `render`).\n   * @return {function} Component constructor function.\n   * @public\n   */\n  createClass: function (spec) {\n    var Constructor = function (props, context, updater) {\n      // This constructor is overridden by mocks. The argument is used\n      // by mocks to assert on what gets mounted.\n\n      if (\"development\" !== 'production') {\n        \"development\" !== 'production' ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : undefined;\n      }\n\n      // Wire up auto-binding\n      if (this.__reactAutoBindMap) {\n        bindAutoBindMethods(this);\n      }\n\n      this.props = props;\n      this.context = context;\n      this.refs = emptyObject;\n      this.updater = updater || ReactNoopUpdateQueue;\n\n      this.state = null;\n\n      // ReactClasses doesn't have constructors. Instead, they use the\n      // getInitialState and componentWillMount methods for initialization.\n\n      var initialState = this.getInitialState ? this.getInitialState() : null;\n      if (\"development\" !== 'production') {\n        // We allow auto-mocks to proceed as if they're returning null.\n        if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) {\n          // This is probably bad practice. Consider warning here and\n          // deprecating this convenience.\n          initialState = null;\n        }\n      }\n      !(typeof initialState === 'object' && !Array.isArray(initialState)) ? \"development\" !== 'production' ? invariant(false, '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n      this.state = initialState;\n    };\n    Constructor.prototype = new ReactClassComponent();\n    Constructor.prototype.constructor = Constructor;\n\n    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));\n\n    mixSpecIntoComponent(Constructor, spec);\n\n    // Initialize the defaultProps property after all mixins have been merged.\n    if (Constructor.getDefaultProps) {\n      Constructor.defaultProps = Constructor.getDefaultProps();\n    }\n\n    if (\"development\" !== 'production') {\n      // This is a tag to indicate that the use of these method names is ok,\n      // since it's used with createClass. If it's not, then it's likely a\n      // mistake so we'll warn you to use the static property, property\n      // initializer or constructor respectively.\n      if (Constructor.getDefaultProps) {\n        Constructor.getDefaultProps.isReactClassApproved = {};\n      }\n      if (Constructor.prototype.getInitialState) {\n        Constructor.prototype.getInitialState.isReactClassApproved = {};\n      }\n    }\n\n    !Constructor.prototype.render ? \"development\" !== 'production' ? invariant(false, 'createClass(...): Class specification must implement a `render` method.') : invariant(false) : undefined;\n\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : undefined;\n      \"development\" !== 'production' ? warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component') : undefined;\n    }\n\n    // Reduce time spent doing lookups by setting these on the prototype.\n    for (var methodName in ReactClassInterface) {\n      if (!Constructor.prototype[methodName]) {\n        Constructor.prototype[methodName] = null;\n      }\n    }\n\n    return Constructor;\n  },\n\n  injection: {\n    injectMixin: function (mixin) {\n      injectedMixins.push(mixin);\n    }\n  }\n\n};\n\nmodule.exports = ReactClass;\n},{\"137\":137,\"144\":144,\"147\":147,\"148\":148,\"155\":155,\"23\":23,\"30\":30,\"52\":52,\"69\":69,\"72\":72,\"73\":73}],30:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponent\n */\n\n'use strict';\n\nvar ReactNoopUpdateQueue = _dereq_(69);\n\nvar canDefineProperty = _dereq_(104);\nvar emptyObject = _dereq_(137);\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\n/**\n * Base class helpers for the updating state of a component.\n */\nfunction ReactComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  // We initialize the default updater but the real one gets injected by the\n  // renderer.\n  this.updater = updater || ReactNoopUpdateQueue;\n}\n\nReactComponent.prototype.isReactComponent = {};\n\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together.  You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n *        produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\nReactComponent.prototype.setState = function (partialState, callback) {\n  !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? \"development\" !== 'production' ? invariant(false, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(false) : undefined;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : undefined;\n  }\n  this.updater.enqueueSetState(this, partialState);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback);\n  }\n};\n\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\nReactComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this);\n  if (callback) {\n    this.updater.enqueueCallback(this, callback);\n  }\n};\n\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\nif (\"development\" !== 'production') {\n  var deprecatedAPIs = {\n    getDOMNode: ['getDOMNode', 'Use ReactDOM.findDOMNode(component) instead.'],\n    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n    replaceProps: ['replaceProps', 'Instead, call render again at the top level.'],\n    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],\n    setProps: ['setProps', 'Instead, call render again at the top level.']\n  };\n  var defineDeprecationWarning = function (methodName, info) {\n    if (canDefineProperty) {\n      Object.defineProperty(ReactComponent.prototype, methodName, {\n        get: function () {\n          \"development\" !== 'production' ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : undefined;\n          return undefined;\n        }\n      });\n    }\n  };\n  for (var fnName in deprecatedAPIs) {\n    if (deprecatedAPIs.hasOwnProperty(fnName)) {\n      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n    }\n  }\n}\n\nmodule.exports = ReactComponent;\n},{\"104\":104,\"137\":137,\"144\":144,\"155\":155,\"69\":69}],31:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentBrowserEnvironment\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = _dereq_(40);\nvar ReactMount = _dereq_(65);\n\n/**\n * Abstracts away all functionality of the reconciler that requires knowledge of\n * the browser context. TODO: These callers should be refactored to avoid the\n * need for this injection.\n */\nvar ReactComponentBrowserEnvironment = {\n\n  processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,\n\n  replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,\n\n  /**\n   * If a particular environment requires that some resources be cleaned up,\n   * specify this in the injected Mixin. In the DOM, we would likely want to\n   * purge any cached node ID lookups.\n   *\n   * @private\n   */\n  unmountIDFromEnvironment: function (rootNodeID) {\n    ReactMount.purgeID(rootNodeID);\n  }\n\n};\n\nmodule.exports = ReactComponentBrowserEnvironment;\n},{\"40\":40,\"65\":65}],32:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactComponentEnvironment\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\nvar injected = false;\n\nvar ReactComponentEnvironment = {\n\n  /**\n   * Optionally injectable environment dependent cleanup hook. (server vs.\n   * browser etc). Example: A browser system caches DOM nodes based on component\n   * ID and must remove that cache entry when this instance is unmounted.\n   */\n  unmountIDFromEnvironment: null,\n\n  /**\n   * Optionally injectable hook for swapping out mount images in the middle of\n   * the tree.\n   */\n  replaceNodeWithMarkupByID: null,\n\n  /**\n   * Optionally injectable hook for processing a queue of child updates. Will\n   * later move into MultiChildComponents.\n   */\n  processChildrenUpdates: null,\n\n  injection: {\n    injectEnvironment: function (environment) {\n      !!injected ? \"development\" !== 'production' ? invariant(false, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(false) : undefined;\n      ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;\n      ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;\n      ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;\n      injected = true;\n    }\n  }\n\n};\n\nmodule.exports = ReactComponentEnvironment;\n},{\"144\":144}],33:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCompositeComponent\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = _dereq_(32);\nvar ReactCurrentOwner = _dereq_(34);\nvar ReactElement = _dereq_(52);\nvar ReactInstanceMap = _dereq_(62);\nvar ReactPerf = _dereq_(71);\nvar ReactPropTypeLocations = _dereq_(73);\nvar ReactPropTypeLocationNames = _dereq_(72);\nvar ReactReconciler = _dereq_(76);\nvar ReactUpdateQueue = _dereq_(82);\n\nvar assign = _dereq_(23);\nvar emptyObject = _dereq_(137);\nvar invariant = _dereq_(144);\nvar shouldUpdateReactComponent = _dereq_(126);\nvar warning = _dereq_(155);\n\nfunction getDeclarationErrorAddendum(component) {\n  var owner = component._currentElement._owner || null;\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nfunction StatelessComponent(Component) {}\nStatelessComponent.prototype.render = function () {\n  var Component = ReactInstanceMap.get(this)._currentElement.type;\n  return Component(this.props, this.context, this.updater);\n};\n\n/**\n * ------------------ The Life-Cycle of a Composite Component ------------------\n *\n * - constructor: Initialization of state. The instance is now retained.\n *   - componentWillMount\n *   - render\n *   - [children's constructors]\n *     - [children's componentWillMount and render]\n *     - [children's componentDidMount]\n *     - componentDidMount\n *\n *       Update Phases:\n *       - componentWillReceiveProps (only called if parent updated)\n *       - shouldComponentUpdate\n *         - componentWillUpdate\n *           - render\n *           - [children's constructors or receive props phases]\n *         - componentDidUpdate\n *\n *     - componentWillUnmount\n *     - [children's componentWillUnmount]\n *   - [children destroyed]\n * - (destroyed): The instance is now blank, released by React and ready for GC.\n *\n * -----------------------------------------------------------------------------\n */\n\n/**\n * An incrementing ID assigned to each component when it is mounted. This is\n * used to enforce the order in which `ReactUpdates` updates dirty components.\n *\n * @private\n */\nvar nextMountID = 1;\n\n/**\n * @lends {ReactCompositeComponent.prototype}\n */\nvar ReactCompositeComponentMixin = {\n\n  /**\n   * Base constructor for all composite component.\n   *\n   * @param {ReactElement} element\n   * @final\n   * @internal\n   */\n  construct: function (element) {\n    this._currentElement = element;\n    this._rootNodeID = null;\n    this._instance = null;\n\n    // See ReactUpdateQueue\n    this._pendingElement = null;\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    this._renderedComponent = null;\n\n    this._context = null;\n    this._mountOrder = 0;\n    this._topLevelWrapper = null;\n\n    // See ReactUpdates and ReactUpdateQueue.\n    this._pendingCallbacks = null;\n  },\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {string} rootID DOM ID of the root node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (rootID, transaction, context) {\n    this._context = context;\n    this._mountOrder = nextMountID++;\n    this._rootNodeID = rootID;\n\n    var publicProps = this._processProps(this._currentElement.props);\n    var publicContext = this._processContext(context);\n\n    var Component = this._currentElement.type;\n\n    // Initialize the public class\n    var inst;\n    var renderedElement;\n\n    // This is a way to detect if Component is a stateless arrow function\n    // component, which is not newable. It might not be 100% reliable but is\n    // something we can do until we start detecting that Component extends\n    // React.Component. We already assume that typeof Component === 'function'.\n    var canInstantiate = ('prototype' in Component);\n\n    if (canInstantiate) {\n      if (\"development\" !== 'production') {\n        ReactCurrentOwner.current = this;\n        try {\n          inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n        } finally {\n          ReactCurrentOwner.current = null;\n        }\n      } else {\n        inst = new Component(publicProps, publicContext, ReactUpdateQueue);\n      }\n    }\n\n    if (!canInstantiate || inst === null || inst === false || ReactElement.isValidElement(inst)) {\n      renderedElement = inst;\n      inst = new StatelessComponent(Component);\n    }\n\n    if (\"development\" !== 'production') {\n      // This will throw later in _renderValidatedComponent, but add an early\n      // warning now to help debugging\n      if (inst.render == null) {\n        \"development\" !== 'production' ? warning(false, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`, returned ' + 'null/false from a stateless component, or tried to render an ' + 'element whose type is a function that isn\\'t a React component.', Component.displayName || Component.name || 'Component') : undefined;\n      } else {\n        // We support ES6 inheriting from React.Component, the module pattern,\n        // and stateless components, but not ES6 classes that don't extend\n        \"development\" !== 'production' ? warning(Component.prototype && Component.prototype.isReactComponent || !canInstantiate || !(inst instanceof Component), '%s(...): React component classes must extend React.Component.', Component.displayName || Component.name || 'Component') : undefined;\n      }\n    }\n\n    // These should be set up in the constructor, but as a convenience for\n    // simpler class abstractions, we set them up after the fact.\n    inst.props = publicProps;\n    inst.context = publicContext;\n    inst.refs = emptyObject;\n    inst.updater = ReactUpdateQueue;\n\n    this._instance = inst;\n\n    // Store a reference from the instance back to the internal representation\n    ReactInstanceMap.set(inst, this);\n\n    if (\"development\" !== 'production') {\n      // Since plain JS classes are defined without any special initialization\n      // logic, we can not catch common errors early. Therefore, we have to\n      // catch them here, at initialization time, instead.\n      \"development\" !== 'production' ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : undefined;\n      \"development\" !== 'production' ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : undefined;\n      \"development\" !== 'production' ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : undefined;\n      \"development\" !== 'production' ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : undefined;\n      \"development\" !== 'production' ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : undefined;\n      \"development\" !== 'production' ? warning(typeof inst.componentDidUnmount !== 'function', '%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', this.getName() || 'A component') : undefined;\n      \"development\" !== 'production' ? warning(typeof inst.componentWillRecieveProps !== 'function', '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', this.getName() || 'A component') : undefined;\n    }\n\n    var initialState = inst.state;\n    if (initialState === undefined) {\n      inst.state = initialState = null;\n    }\n    !(typeof initialState === 'object' && !Array.isArray(initialState)) ? \"development\" !== 'production' ? invariant(false, '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n\n    if (inst.componentWillMount) {\n      inst.componentWillMount();\n      // When mounting, calls to `setState` by `componentWillMount` will set\n      // `this._pendingStateQueue` without triggering a re-render.\n      if (this._pendingStateQueue) {\n        inst.state = this._processPendingState(inst.props, inst.context);\n      }\n    }\n\n    // If not a stateless component, we now render\n    if (renderedElement === undefined) {\n      renderedElement = this._renderValidatedComponent();\n    }\n\n    this._renderedComponent = this._instantiateReactComponent(renderedElement);\n\n    var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._processChildContext(context));\n    if (inst.componentDidMount) {\n      transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);\n    }\n\n    return markup;\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function () {\n    var inst = this._instance;\n\n    if (inst.componentWillUnmount) {\n      inst.componentWillUnmount();\n    }\n\n    ReactReconciler.unmountComponent(this._renderedComponent);\n    this._renderedComponent = null;\n    this._instance = null;\n\n    // Reset pending fields\n    // Even if this component is scheduled for another update in ReactUpdates,\n    // it would still be ignored because these fields are reset.\n    this._pendingStateQueue = null;\n    this._pendingReplaceState = false;\n    this._pendingForceUpdate = false;\n    this._pendingCallbacks = null;\n    this._pendingElement = null;\n\n    // These fields do not really need to be reset since this object is no\n    // longer accessible.\n    this._context = null;\n    this._rootNodeID = null;\n    this._topLevelWrapper = null;\n\n    // Delete the reference from the instance to this internal representation\n    // which allow the internals to be properly cleaned up even if the user\n    // leaks a reference to the public instance.\n    ReactInstanceMap.remove(inst);\n\n    // Some existing components rely on inst.props even after they've been\n    // destroyed (in event handlers).\n    // TODO: inst.props = null;\n    // TODO: inst.state = null;\n    // TODO: inst.context = null;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _maskContext: function (context) {\n    var maskedContext = null;\n    var Component = this._currentElement.type;\n    var contextTypes = Component.contextTypes;\n    if (!contextTypes) {\n      return emptyObject;\n    }\n    maskedContext = {};\n    for (var contextName in contextTypes) {\n      maskedContext[contextName] = context[contextName];\n    }\n    return maskedContext;\n  },\n\n  /**\n   * Filters the context object to only contain keys specified in\n   * `contextTypes`, and asserts that they are valid.\n   *\n   * @param {object} context\n   * @return {?object}\n   * @private\n   */\n  _processContext: function (context) {\n    var maskedContext = this._maskContext(context);\n    if (\"development\" !== 'production') {\n      var Component = this._currentElement.type;\n      if (Component.contextTypes) {\n        this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);\n      }\n    }\n    return maskedContext;\n  },\n\n  /**\n   * @param {object} currentContext\n   * @return {object}\n   * @private\n   */\n  _processChildContext: function (currentContext) {\n    var Component = this._currentElement.type;\n    var inst = this._instance;\n    var childContext = inst.getChildContext && inst.getChildContext();\n    if (childContext) {\n      !(typeof Component.childContextTypes === 'object') ? \"development\" !== 'production' ? invariant(false, '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n      if (\"development\" !== 'production') {\n        this._checkPropTypes(Component.childContextTypes, childContext, ReactPropTypeLocations.childContext);\n      }\n      for (var name in childContext) {\n        !(name in Component.childContextTypes) ? \"development\" !== 'production' ? invariant(false, '%s.getChildContext(): key \"%s\" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(false) : undefined;\n      }\n      return assign({}, currentContext, childContext);\n    }\n    return currentContext;\n  },\n\n  /**\n   * Processes props by setting default values for unspecified props and\n   * asserting that the props are valid. Does not mutate its argument; returns\n   * a new props object with defaults merged in.\n   *\n   * @param {object} newProps\n   * @return {object}\n   * @private\n   */\n  _processProps: function (newProps) {\n    if (\"development\" !== 'production') {\n      var Component = this._currentElement.type;\n      if (Component.propTypes) {\n        this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);\n      }\n    }\n    return newProps;\n  },\n\n  /**\n   * Assert that the props are valid\n   *\n   * @param {object} propTypes Map of prop name to a ReactPropType\n   * @param {object} props\n   * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n   * @private\n   */\n  _checkPropTypes: function (propTypes, props, location) {\n    // TODO: Stop validating prop types here and only use the element\n    // validation.\n    var componentName = this.getName();\n    for (var propName in propTypes) {\n      if (propTypes.hasOwnProperty(propName)) {\n        var error;\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          !(typeof propTypes[propName] === 'function') ? \"development\" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n          error = propTypes[propName](props, propName, componentName, location);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error instanceof Error) {\n          // We may want to extend this logic for similar errors in\n          // top-level render calls, so I'm abstracting it away into\n          // a function to minimize refactoring in the future\n          var addendum = getDeclarationErrorAddendum(this);\n\n          if (location === ReactPropTypeLocations.prop) {\n            // Preface gives us something to blacklist in warning module\n            \"development\" !== 'production' ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : undefined;\n          } else {\n            \"development\" !== 'production' ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : undefined;\n          }\n        }\n      }\n    }\n  },\n\n  receiveComponent: function (nextElement, transaction, nextContext) {\n    var prevElement = this._currentElement;\n    var prevContext = this._context;\n\n    this._pendingElement = null;\n\n    this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);\n  },\n\n  /**\n   * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`\n   * is set, update the component.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (transaction) {\n    if (this._pendingElement != null) {\n      ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context);\n    }\n\n    if (this._pendingStateQueue !== null || this._pendingForceUpdate) {\n      this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);\n    }\n  },\n\n  /**\n   * Perform an update to a mounted component. The componentWillReceiveProps and\n   * shouldComponentUpdate methods are called, then (assuming the update isn't\n   * skipped) the remaining update lifecycle methods are called and the DOM\n   * representation is updated.\n   *\n   * By default, this implements React's rendering and reconciliation algorithm.\n   * Sophisticated clients may wish to override this.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevParentElement\n   * @param {ReactElement} nextParentElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {\n    var inst = this._instance;\n\n    var nextContext = this._context === nextUnmaskedContext ? inst.context : this._processContext(nextUnmaskedContext);\n    var nextProps;\n\n    // Distinguish between a props update versus a simple state update\n    if (prevParentElement === nextParentElement) {\n      // Skip checking prop types again -- we don't read inst.props to avoid\n      // warning for DOM component props in this upgrade\n      nextProps = nextParentElement.props;\n    } else {\n      nextProps = this._processProps(nextParentElement.props);\n      // An update here will schedule an update but immediately set\n      // _pendingStateQueue which will ensure that any state updates gets\n      // immediately reconciled instead of waiting for the next batch.\n\n      if (inst.componentWillReceiveProps) {\n        inst.componentWillReceiveProps(nextProps, nextContext);\n      }\n    }\n\n    var nextState = this._processPendingState(nextProps, nextContext);\n\n    var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);\n\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : undefined;\n    }\n\n    if (shouldUpdate) {\n      this._pendingForceUpdate = false;\n      // Will set `this.props`, `this.state` and `this.context`.\n      this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);\n    } else {\n      // If it's determined that a component should not update, we still want\n      // to set props and state but we shortcut the rest of the update.\n      this._currentElement = nextParentElement;\n      this._context = nextUnmaskedContext;\n      inst.props = nextProps;\n      inst.state = nextState;\n      inst.context = nextContext;\n    }\n  },\n\n  _processPendingState: function (props, context) {\n    var inst = this._instance;\n    var queue = this._pendingStateQueue;\n    var replace = this._pendingReplaceState;\n    this._pendingReplaceState = false;\n    this._pendingStateQueue = null;\n\n    if (!queue) {\n      return inst.state;\n    }\n\n    if (replace && queue.length === 1) {\n      return queue[0];\n    }\n\n    var nextState = assign({}, replace ? queue[0] : inst.state);\n    for (var i = replace ? 1 : 0; i < queue.length; i++) {\n      var partial = queue[i];\n      assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);\n    }\n\n    return nextState;\n  },\n\n  /**\n   * Merges new props and state, notifies delegate methods of update and\n   * performs update.\n   *\n   * @param {ReactElement} nextElement Next element\n   * @param {object} nextProps Next public object to set as properties.\n   * @param {?object} nextState Next object to set as state.\n   * @param {?object} nextContext Next public object to set as context.\n   * @param {ReactReconcileTransaction} transaction\n   * @param {?object} unmaskedContext\n   * @private\n   */\n  _performComponentUpdate: function (nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {\n    var inst = this._instance;\n\n    var hasComponentDidUpdate = Boolean(inst.componentDidUpdate);\n    var prevProps;\n    var prevState;\n    var prevContext;\n    if (hasComponentDidUpdate) {\n      prevProps = inst.props;\n      prevState = inst.state;\n      prevContext = inst.context;\n    }\n\n    if (inst.componentWillUpdate) {\n      inst.componentWillUpdate(nextProps, nextState, nextContext);\n    }\n\n    this._currentElement = nextElement;\n    this._context = unmaskedContext;\n    inst.props = nextProps;\n    inst.state = nextState;\n    inst.context = nextContext;\n\n    this._updateRenderedComponent(transaction, unmaskedContext);\n\n    if (hasComponentDidUpdate) {\n      transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);\n    }\n  },\n\n  /**\n   * Call the component's `render` method and update the DOM accordingly.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  _updateRenderedComponent: function (transaction, context) {\n    var prevComponentInstance = this._renderedComponent;\n    var prevRenderedElement = prevComponentInstance._currentElement;\n    var nextRenderedElement = this._renderValidatedComponent();\n    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {\n      ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._processChildContext(context));\n    } else {\n      // These two IDs are actually the same! But nothing should rely on that.\n      var thisID = this._rootNodeID;\n      var prevComponentID = prevComponentInstance._rootNodeID;\n      ReactReconciler.unmountComponent(prevComponentInstance);\n\n      this._renderedComponent = this._instantiateReactComponent(nextRenderedElement);\n      var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._processChildContext(context));\n      this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n    }\n  },\n\n  /**\n   * @protected\n   */\n  _replaceNodeWithMarkupByID: function (prevComponentID, nextMarkup) {\n    ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup);\n  },\n\n  /**\n   * @protected\n   */\n  _renderValidatedComponentWithoutOwnerOrContext: function () {\n    var inst = this._instance;\n    var renderedComponent = inst.render();\n    if (\"development\" !== 'production') {\n      // We allow auto-mocks to proceed as if they're returning null.\n      if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) {\n        // This is probably bad practice. Consider warning here and\n        // deprecating this convenience.\n        renderedComponent = null;\n      }\n    }\n\n    return renderedComponent;\n  },\n\n  /**\n   * @private\n   */\n  _renderValidatedComponent: function () {\n    var renderedComponent;\n    ReactCurrentOwner.current = this;\n    try {\n      renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();\n    } finally {\n      ReactCurrentOwner.current = null;\n    }\n    !(\n    // TODO: An `isValidNode` function would probably be more appropriate\n    renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent)) ? \"development\" !== 'production' ? invariant(false, '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant(false) : undefined;\n    return renderedComponent;\n  },\n\n  /**\n   * Lazily allocates the refs object and stores `component` as `ref`.\n   *\n   * @param {string} ref Reference name.\n   * @param {component} component Component to store as `ref`.\n   * @final\n   * @private\n   */\n  attachRef: function (ref, component) {\n    var inst = this.getPublicInstance();\n    !(inst != null) ? \"development\" !== 'production' ? invariant(false, 'Stateless function components cannot have refs.') : invariant(false) : undefined;\n    var publicComponentInstance = component.getPublicInstance();\n    if (\"development\" !== 'production') {\n      var componentName = component && component.getName ? component.getName() : 'a component';\n      \"development\" !== 'production' ? warning(publicComponentInstance != null, 'Stateless function components cannot be given refs ' + '(See ref \"%s\" in %s created by %s). ' + 'Attempts to access this ref will fail.', ref, componentName, this.getName()) : undefined;\n    }\n    var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;\n    refs[ref] = publicComponentInstance;\n  },\n\n  /**\n   * Detaches a reference name.\n   *\n   * @param {string} ref Name to dereference.\n   * @final\n   * @private\n   */\n  detachRef: function (ref) {\n    var refs = this.getPublicInstance().refs;\n    delete refs[ref];\n  },\n\n  /**\n   * Get a text description of the component that can be used to identify it\n   * in error messages.\n   * @return {string} The name or null.\n   * @internal\n   */\n  getName: function () {\n    var type = this._currentElement.type;\n    var constructor = this._instance && this._instance.constructor;\n    return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;\n  },\n\n  /**\n   * Get the publicly accessible representation of this component - i.e. what\n   * is exposed by refs and returned by render. Can be null for stateless\n   * components.\n   *\n   * @return {ReactComponent} the public component instance.\n   * @internal\n   */\n  getPublicInstance: function () {\n    var inst = this._instance;\n    if (inst instanceof StatelessComponent) {\n      return null;\n    }\n    return inst;\n  },\n\n  // Stub\n  _instantiateReactComponent: null\n\n};\n\nReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {\n  mountComponent: 'mountComponent',\n  updateComponent: 'updateComponent',\n  _renderValidatedComponent: '_renderValidatedComponent'\n});\n\nvar ReactCompositeComponent = {\n\n  Mixin: ReactCompositeComponentMixin\n\n};\n\nmodule.exports = ReactCompositeComponent;\n},{\"126\":126,\"137\":137,\"144\":144,\"155\":155,\"23\":23,\"32\":32,\"34\":34,\"52\":52,\"62\":62,\"71\":71,\"72\":72,\"73\":73,\"76\":76,\"82\":82}],34:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactCurrentOwner\n */\n\n'use strict';\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n\n  /**\n   * @internal\n   * @type {ReactComponent}\n   */\n  current: null\n\n};\n\nmodule.exports = ReactCurrentOwner;\n},{}],35:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOM\n */\n\n/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(34);\nvar ReactDOMTextComponent = _dereq_(46);\nvar ReactDefaultInjection = _dereq_(49);\nvar ReactInstanceHandles = _dereq_(61);\nvar ReactMount = _dereq_(65);\nvar ReactPerf = _dereq_(71);\nvar ReactReconciler = _dereq_(76);\nvar ReactUpdates = _dereq_(83);\nvar ReactVersion = _dereq_(84);\n\nvar findDOMNode = _dereq_(108);\nvar renderSubtreeIntoContainer = _dereq_(123);\nvar warning = _dereq_(155);\n\nReactDefaultInjection.inject();\n\nvar render = ReactPerf.measure('React', 'render', ReactMount.render);\n\nvar React = {\n  findDOMNode: findDOMNode,\n  render: render,\n  unmountComponentAtNode: ReactMount.unmountComponentAtNode,\n  version: ReactVersion,\n\n  /* eslint-disable camelcase */\n  unstable_batchedUpdates: ReactUpdates.batchedUpdates,\n  unstable_renderSubtreeIntoContainer: renderSubtreeIntoContainer\n};\n\n// Inject the runtime into a devtools global hook regardless of browser.\n// Allows for debugging when the hook is injected on the page.\n/* eslint-enable camelcase */\nif (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {\n  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({\n    CurrentOwner: ReactCurrentOwner,\n    InstanceHandles: ReactInstanceHandles,\n    Mount: ReactMount,\n    Reconciler: ReactReconciler,\n    TextComponent: ReactDOMTextComponent\n  });\n}\n\nif (\"development\" !== 'production') {\n  var ExecutionEnvironment = _dereq_(130);\n  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {\n\n    // First check if devtools is not installed\n    if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n      // If we're in Chrome or Firefox, provide a download link if not installed.\n      if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n        console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');\n      }\n    }\n\n    // If we're in IE8, check to see if we are in compatibility mode and provide\n    // information on preventing compatibility mode\n    var ieCompatibilityMode = document.documentMode && document.documentMode < 8;\n\n    \"development\" !== 'production' ? warning(!ieCompatibilityMode, 'Internet Explorer is running in compatibility mode; please add the ' + 'following tag to your HTML to prevent this from happening: ' + '<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />') : undefined;\n\n    var expectedFeatures = [\n    // shims\n    Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,\n\n    // shams\n    Object.create, Object.freeze];\n\n    for (var i = 0; i < expectedFeatures.length; i++) {\n      if (!expectedFeatures[i]) {\n        console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');\n        break;\n      }\n    }\n  }\n}\n\nmodule.exports = React;\n},{\"108\":108,\"123\":123,\"130\":130,\"155\":155,\"34\":34,\"46\":46,\"49\":49,\"61\":61,\"65\":65,\"71\":71,\"76\":76,\"83\":83,\"84\":84}],36:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMButton\n */\n\n'use strict';\n\nvar mouseListenerNames = {\n  onClick: true,\n  onDoubleClick: true,\n  onMouseDown: true,\n  onMouseMove: true,\n  onMouseUp: true,\n\n  onClickCapture: true,\n  onDoubleClickCapture: true,\n  onMouseDownCapture: true,\n  onMouseMoveCapture: true,\n  onMouseUpCapture: true\n};\n\n/**\n * Implements a <button> native component that does not receive mouse events\n * when `disabled` is set.\n */\nvar ReactDOMButton = {\n  getNativeProps: function (inst, props, context) {\n    if (!props.disabled) {\n      return props;\n    }\n\n    // Copy the props, except the mouse listeners\n    var nativeProps = {};\n    for (var key in props) {\n      if (props.hasOwnProperty(key) && !mouseListenerNames[key]) {\n        nativeProps[key] = props[key];\n      }\n    }\n\n    return nativeProps;\n  }\n};\n\nmodule.exports = ReactDOMButton;\n},{}],37:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMComponent\n * @typechecks static-only\n */\n\n/* global hasOwnProperty:true */\n\n'use strict';\n\nvar AutoFocusUtils = _dereq_(2);\nvar CSSPropertyOperations = _dereq_(5);\nvar DOMProperty = _dereq_(10);\nvar DOMPropertyOperations = _dereq_(11);\nvar EventConstants = _dereq_(15);\nvar ReactBrowserEventEmitter = _dereq_(26);\nvar ReactComponentBrowserEnvironment = _dereq_(31);\nvar ReactDOMButton = _dereq_(36);\nvar ReactDOMInput = _dereq_(41);\nvar ReactDOMOption = _dereq_(42);\nvar ReactDOMSelect = _dereq_(43);\nvar ReactDOMTextarea = _dereq_(47);\nvar ReactMount = _dereq_(65);\nvar ReactMultiChild = _dereq_(66);\nvar ReactPerf = _dereq_(71);\nvar ReactUpdateQueue = _dereq_(82);\n\nvar assign = _dereq_(23);\nvar canDefineProperty = _dereq_(104);\nvar escapeTextContentForBrowser = _dereq_(107);\nvar invariant = _dereq_(144);\nvar isEventSupported = _dereq_(119);\nvar keyOf = _dereq_(148);\nvar setInnerHTML = _dereq_(124);\nvar setTextContent = _dereq_(125);\nvar shallowEqual = _dereq_(153);\nvar validateDOMNesting = _dereq_(128);\nvar warning = _dereq_(155);\n\nvar deleteListener = ReactBrowserEventEmitter.deleteListener;\nvar listenTo = ReactBrowserEventEmitter.listenTo;\nvar registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;\n\n// For quickly matching children type, to test if can be treated as content.\nvar CONTENT_TYPES = { 'string': true, 'number': true };\n\nvar CHILDREN = keyOf({ children: null });\nvar STYLE = keyOf({ style: null });\nvar HTML = keyOf({ __html: null });\n\nvar ELEMENT_NODE_TYPE = 1;\n\nfunction getDeclarationErrorAddendum(internalInstance) {\n  if (internalInstance) {\n    var owner = internalInstance._currentElement._owner || null;\n    if (owner) {\n      var name = owner.getName();\n      if (name) {\n        return ' This DOM node was rendered by `' + name + '`.';\n      }\n    }\n  }\n  return '';\n}\n\nvar legacyPropsDescriptor;\nif (\"development\" !== 'production') {\n  legacyPropsDescriptor = {\n    props: {\n      enumerable: false,\n      get: function () {\n        var component = this._reactInternalComponent;\n        \"development\" !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .props of a DOM node; instead, ' + 'recreate the props as `render` did originally or read the DOM ' + 'properties/attributes directly from this node (e.g., ' + 'this.refs.box.className).%s', getDeclarationErrorAddendum(component)) : undefined;\n        return component._currentElement.props;\n      }\n    }\n  };\n}\n\nfunction legacyGetDOMNode() {\n  if (\"development\" !== 'production') {\n    var component = this._reactInternalComponent;\n    \"development\" !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .getDOMNode() of a DOM node; ' + 'instead, use the node directly.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  return this;\n}\n\nfunction legacyIsMounted() {\n  var component = this._reactInternalComponent;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .isMounted() of a DOM node.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  return !!component;\n}\n\nfunction legacySetStateEtc() {\n  if (\"development\" !== 'production') {\n    var component = this._reactInternalComponent;\n    \"development\" !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setState(), .replaceState(), or ' + '.forceUpdate() of a DOM node. This is a no-op.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n}\n\nfunction legacySetProps(partialProps, callback) {\n  var component = this._reactInternalComponent;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .setProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  if (!component) {\n    return;\n  }\n  ReactUpdateQueue.enqueueSetPropsInternal(component, partialProps);\n  if (callback) {\n    ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n  }\n}\n\nfunction legacyReplaceProps(partialProps, callback) {\n  var component = this._reactInternalComponent;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(false, 'ReactDOMComponent: Do not access .replaceProps() of a DOM node. ' + 'Instead, call ReactDOM.render again at the top level.%s', getDeclarationErrorAddendum(component)) : undefined;\n  }\n  if (!component) {\n    return;\n  }\n  ReactUpdateQueue.enqueueReplacePropsInternal(component, partialProps);\n  if (callback) {\n    ReactUpdateQueue.enqueueCallbackInternal(component, callback);\n  }\n}\n\nfunction friendlyStringify(obj) {\n  if (typeof obj === 'object') {\n    if (Array.isArray(obj)) {\n      return '[' + obj.map(friendlyStringify).join(', ') + ']';\n    } else {\n      var pairs = [];\n      for (var key in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\n          var keyEscaped = /^[a-z$_][\\w$_]*$/i.test(key) ? key : JSON.stringify(key);\n          pairs.push(keyEscaped + ': ' + friendlyStringify(obj[key]));\n        }\n      }\n      return '{' + pairs.join(', ') + '}';\n    }\n  } else if (typeof obj === 'string') {\n    return JSON.stringify(obj);\n  } else if (typeof obj === 'function') {\n    return '[function object]';\n  }\n  // Differs from JSON.stringify in that undefined becauses undefined and that\n  // inf and nan don't become null\n  return String(obj);\n}\n\nvar styleMutationWarning = {};\n\nfunction checkAndWarnForMutatedStyle(style1, style2, component) {\n  if (style1 == null || style2 == null) {\n    return;\n  }\n  if (shallowEqual(style1, style2)) {\n    return;\n  }\n\n  var componentName = component._tag;\n  var owner = component._currentElement._owner;\n  var ownerName;\n  if (owner) {\n    ownerName = owner.getName();\n  }\n\n  var hash = ownerName + '|' + componentName;\n\n  if (styleMutationWarning.hasOwnProperty(hash)) {\n    return;\n  }\n\n  styleMutationWarning[hash] = true;\n\n  \"development\" !== 'production' ? warning(false, '`%s` was passed a style object that has previously been mutated. ' + 'Mutating `style` is deprecated. Consider cloning it beforehand. Check ' + 'the `render` %s. Previous style: %s. Mutated style: %s.', componentName, owner ? 'of `' + ownerName + '`' : 'using <' + componentName + '>', friendlyStringify(style1), friendlyStringify(style2)) : undefined;\n}\n\n/**\n * @param {object} component\n * @param {?object} props\n */\nfunction assertValidProps(component, props) {\n  if (!props) {\n    return;\n  }\n  // Note the use of `==` which checks for null or undefined.\n  if (\"development\" !== 'production') {\n    if (voidElementTags[component._tag]) {\n      \"development\" !== 'production' ? warning(props.children == null && props.dangerouslySetInnerHTML == null, '%s is a void element tag and must not have `children` or ' + 'use `props.dangerouslySetInnerHTML`.%s', component._tag, component._currentElement._owner ? ' Check the render method of ' + component._currentElement._owner.getName() + '.' : '') : undefined;\n    }\n  }\n  if (props.dangerouslySetInnerHTML != null) {\n    !(props.children == null) ? \"development\" !== 'production' ? invariant(false, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(false) : undefined;\n    !(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML) ? \"development\" !== 'production' ? invariant(false, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(false) : undefined;\n  }\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : undefined;\n    \"development\" !== 'production' ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : undefined;\n  }\n  !(props.style == null || typeof props.style === 'object') ? \"development\" !== 'production' ? invariant(false, 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \\'em\\'}} when ' + 'using JSX.%s', getDeclarationErrorAddendum(component)) : invariant(false) : undefined;\n}\n\nfunction enqueuePutListener(id, registrationName, listener, transaction) {\n  if (\"development\" !== 'production') {\n    // IE8 has no API for event capturing and the `onScroll` event doesn't\n    // bubble.\n    \"development\" !== 'production' ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\\'t support the `onScroll` event') : undefined;\n  }\n  var container = ReactMount.findReactContainerForID(id);\n  if (container) {\n    var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;\n    listenTo(registrationName, doc);\n  }\n  transaction.getReactMountReady().enqueue(putListener, {\n    id: id,\n    registrationName: registrationName,\n    listener: listener\n  });\n}\n\nfunction putListener() {\n  var listenerToPut = this;\n  ReactBrowserEventEmitter.putListener(listenerToPut.id, listenerToPut.registrationName, listenerToPut.listener);\n}\n\n// There are so many media events, it makes sense to just\n// maintain a list rather than create a `trapBubbledEvent` for each\nvar mediaEvents = {\n  topAbort: 'abort',\n  topCanPlay: 'canplay',\n  topCanPlayThrough: 'canplaythrough',\n  topDurationChange: 'durationchange',\n  topEmptied: 'emptied',\n  topEncrypted: 'encrypted',\n  topEnded: 'ended',\n  topError: 'error',\n  topLoadedData: 'loadeddata',\n  topLoadedMetadata: 'loadedmetadata',\n  topLoadStart: 'loadstart',\n  topPause: 'pause',\n  topPlay: 'play',\n  topPlaying: 'playing',\n  topProgress: 'progress',\n  topRateChange: 'ratechange',\n  topSeeked: 'seeked',\n  topSeeking: 'seeking',\n  topStalled: 'stalled',\n  topSuspend: 'suspend',\n  topTimeUpdate: 'timeupdate',\n  topVolumeChange: 'volumechange',\n  topWaiting: 'waiting'\n};\n\nfunction trapBubbledEventsLocal() {\n  var inst = this;\n  // If a component renders to null or if another component fatals and causes\n  // the state of the tree to be corrupted, `node` here can be null.\n  !inst._rootNodeID ? \"development\" !== 'production' ? invariant(false, 'Must be mounted to trap events') : invariant(false) : undefined;\n  var node = ReactMount.getNode(inst._rootNodeID);\n  !node ? \"development\" !== 'production' ? invariant(false, 'trapBubbledEvent(...): Requires node to be rendered.') : invariant(false) : undefined;\n\n  switch (inst._tag) {\n    case 'iframe':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'video':\n    case 'audio':\n\n      inst._wrapperState.listeners = [];\n      // create listener for each media event\n      for (var event in mediaEvents) {\n        if (mediaEvents.hasOwnProperty(event)) {\n          inst._wrapperState.listeners.push(ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes[event], mediaEvents[event], node));\n        }\n      }\n\n      break;\n    case 'img':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load', node)];\n      break;\n    case 'form':\n      inst._wrapperState.listeners = [ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset', node), ReactBrowserEventEmitter.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit', node)];\n      break;\n  }\n}\n\nfunction mountReadyInputWrapper() {\n  ReactDOMInput.mountReadyWrapper(this);\n}\n\nfunction postUpdateSelectWrapper() {\n  ReactDOMSelect.postUpdateWrapper(this);\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special cased tags.\n\nvar omittedCloseTags = {\n  'area': true,\n  'base': true,\n  'br': true,\n  'col': true,\n  'embed': true,\n  'hr': true,\n  'img': true,\n  'input': true,\n  'keygen': true,\n  'link': true,\n  'meta': true,\n  'param': true,\n  'source': true,\n  'track': true,\n  'wbr': true\n};\n\n// NOTE: menuitem's close tag should be omitted, but that causes problems.\nvar newlineEatingTags = {\n  'listing': true,\n  'pre': true,\n  'textarea': true\n};\n\n// For HTML, certain tags cannot have children. This has the same purpose as\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = assign({\n  'menuitem': true\n}, omittedCloseTags);\n\n// We accept any tag to be rendered but since this gets injected into arbitrary\n// HTML, we want to make sure that it's a safe tag.\n// http://www.w3.org/TR/REC-xml/#NT-Name\n\nvar VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/; // Simplified subset\nvar validatedTagCache = {};\nvar hasOwnProperty = ({}).hasOwnProperty;\n\nfunction validateDangerousTag(tag) {\n  if (!hasOwnProperty.call(validatedTagCache, tag)) {\n    !VALID_TAG_REGEX.test(tag) ? \"development\" !== 'production' ? invariant(false, 'Invalid tag: %s', tag) : invariant(false) : undefined;\n    validatedTagCache[tag] = true;\n  }\n}\n\nfunction processChildContextDev(context, inst) {\n  // Pass down our tag name to child components for validation purposes\n  context = assign({}, context);\n  var info = context[validateDOMNesting.ancestorInfoContextKey];\n  context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(info, inst._tag, inst);\n  return context;\n}\n\nfunction isCustomComponent(tagName, props) {\n  return tagName.indexOf('-') >= 0 || props.is != null;\n}\n\n/**\n * Creates a new React class that is idempotent and capable of containing other\n * React components. It accepts event listeners and DOM properties that are\n * valid according to `DOMProperty`.\n *\n *  - Event listeners: `onClick`, `onMouseDown`, etc.\n *  - DOM properties: `className`, `name`, `title`, etc.\n *\n * The `style` property functions differently from the DOM API. It accepts an\n * object mapping of style properties to values.\n *\n * @constructor ReactDOMComponent\n * @extends ReactMultiChild\n */\nfunction ReactDOMComponent(tag) {\n  validateDangerousTag(tag);\n  this._tag = tag.toLowerCase();\n  this._renderedChildren = null;\n  this._previousStyle = null;\n  this._previousStyleCopy = null;\n  this._rootNodeID = null;\n  this._wrapperState = null;\n  this._topLevelWrapper = null;\n  this._nodeWithLegacyProperties = null;\n  if (\"development\" !== 'production') {\n    this._unprocessedContextDev = null;\n    this._processedContextDev = null;\n  }\n}\n\nReactDOMComponent.displayName = 'ReactDOMComponent';\n\nReactDOMComponent.Mixin = {\n\n  construct: function (element) {\n    this._currentElement = element;\n  },\n\n  /**\n   * Generates root tag markup then recurses. This method has side effects and\n   * is not idempotent.\n   *\n   * @internal\n   * @param {string} rootID The root DOM ID for this node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} context\n   * @return {string} The computed markup.\n   */\n  mountComponent: function (rootID, transaction, context) {\n    this._rootNodeID = rootID;\n\n    var props = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'iframe':\n      case 'img':\n      case 'form':\n      case 'video':\n      case 'audio':\n        this._wrapperState = {\n          listeners: null\n        };\n        transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);\n        break;\n      case 'button':\n        props = ReactDOMButton.getNativeProps(this, props, context);\n        break;\n      case 'input':\n        ReactDOMInput.mountWrapper(this, props, context);\n        props = ReactDOMInput.getNativeProps(this, props, context);\n        break;\n      case 'option':\n        ReactDOMOption.mountWrapper(this, props, context);\n        props = ReactDOMOption.getNativeProps(this, props, context);\n        break;\n      case 'select':\n        ReactDOMSelect.mountWrapper(this, props, context);\n        props = ReactDOMSelect.getNativeProps(this, props, context);\n        context = ReactDOMSelect.processChildContext(this, props, context);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.mountWrapper(this, props, context);\n        props = ReactDOMTextarea.getNativeProps(this, props, context);\n        break;\n    }\n\n    assertValidProps(this, props);\n    if (\"development\" !== 'production') {\n      if (context[validateDOMNesting.ancestorInfoContextKey]) {\n        validateDOMNesting(this._tag, this, context[validateDOMNesting.ancestorInfoContextKey]);\n      }\n    }\n\n    if (\"development\" !== 'production') {\n      this._unprocessedContextDev = context;\n      this._processedContextDev = processChildContextDev(context, this);\n      context = this._processedContextDev;\n    }\n\n    var mountImage;\n    if (transaction.useCreateElement) {\n      var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n      var el = ownerDocument.createElement(this._currentElement.type);\n      DOMPropertyOperations.setAttributeForID(el, this._rootNodeID);\n      // Populate node cache\n      ReactMount.getID(el);\n      this._updateDOMProperties({}, props, transaction, el);\n      this._createInitialChildren(transaction, props, context, el);\n      mountImage = el;\n    } else {\n      var tagOpen = this._createOpenTagMarkupAndPutListeners(transaction, props);\n      var tagContent = this._createContentMarkup(transaction, props, context);\n      if (!tagContent && omittedCloseTags[this._tag]) {\n        mountImage = tagOpen + '/>';\n      } else {\n        mountImage = tagOpen + '>' + tagContent + '</' + this._currentElement.type + '>';\n      }\n    }\n\n    switch (this._tag) {\n      case 'input':\n        transaction.getReactMountReady().enqueue(mountReadyInputWrapper, this);\n      // falls through\n      case 'button':\n      case 'select':\n      case 'textarea':\n        if (props.autoFocus) {\n          transaction.getReactMountReady().enqueue(AutoFocusUtils.focusDOMComponent, this);\n        }\n        break;\n    }\n\n    return mountImage;\n  },\n\n  /**\n   * Creates markup for the open tag and all attributes.\n   *\n   * This method has side effects because events get registered.\n   *\n   * Iterating over object properties is faster than iterating over arrays.\n   * @see http://jsperf.com/obj-vs-arr-iteration\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @return {string} Markup of opening tag.\n   */\n  _createOpenTagMarkupAndPutListeners: function (transaction, props) {\n    var ret = '<' + this._currentElement.type;\n\n    for (var propKey in props) {\n      if (!props.hasOwnProperty(propKey)) {\n        continue;\n      }\n      var propValue = props[propKey];\n      if (propValue == null) {\n        continue;\n      }\n      if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (propValue) {\n          enqueuePutListener(this._rootNodeID, propKey, propValue, transaction);\n        }\n      } else {\n        if (propKey === STYLE) {\n          if (propValue) {\n            if (\"development\" !== 'production') {\n              // See `_updateDOMProperties`. style block\n              this._previousStyle = propValue;\n            }\n            propValue = this._previousStyleCopy = assign({}, props.style);\n          }\n          propValue = CSSPropertyOperations.createMarkupForStyles(propValue);\n        }\n        var markup = null;\n        if (this._tag != null && isCustomComponent(this._tag, props)) {\n          if (propKey !== CHILDREN) {\n            markup = DOMPropertyOperations.createMarkupForCustomAttribute(propKey, propValue);\n          }\n        } else {\n          markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);\n        }\n        if (markup) {\n          ret += ' ' + markup;\n        }\n      }\n    }\n\n    // For static pages, no need to put React ID and checksum. Saves lots of\n    // bytes.\n    if (transaction.renderToStaticMarkup) {\n      return ret;\n    }\n\n    var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);\n    return ret + ' ' + markupForID;\n  },\n\n  /**\n   * Creates markup for the content between the tags.\n   *\n   * @private\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} props\n   * @param {object} context\n   * @return {string} Content markup.\n   */\n  _createContentMarkup: function (transaction, props, context) {\n    var ret = '';\n\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        ret = innerHTML.__html;\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        ret = escapeTextContentForBrowser(contentToUse);\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        ret = mountImages.join('');\n      }\n    }\n    if (newlineEatingTags[this._tag] && ret.charAt(0) === '\\n') {\n      // text/html ignores the first character in these tags if it's a newline\n      // Prefer to break application/xml over text/html (for now) by adding\n      // a newline specifically to get eaten by the parser. (Alternately for\n      // textareas, replacing \"^\\n\" with \"\\r\\n\" doesn't get eaten, and the first\n      // \\r is normalized out by HTMLTextAreaElement#value.)\n      // See: <http://www.w3.org/TR/html-polyglot/#newlines-in-textarea-and-pre>\n      // See: <http://www.w3.org/TR/html5/syntax.html#element-restrictions>\n      // See: <http://www.w3.org/TR/html5/syntax.html#newlines>\n      // See: Parsing of \"textarea\" \"listing\" and \"pre\" elements\n      //  from <http://www.w3.org/TR/html5/syntax.html#parsing-main-inbody>\n      return '\\n' + ret;\n    } else {\n      return ret;\n    }\n  },\n\n  _createInitialChildren: function (transaction, props, context, el) {\n    // Intentional use of != to avoid catching zero/false.\n    var innerHTML = props.dangerouslySetInnerHTML;\n    if (innerHTML != null) {\n      if (innerHTML.__html != null) {\n        setInnerHTML(el, innerHTML.__html);\n      }\n    } else {\n      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;\n      var childrenToUse = contentToUse != null ? null : props.children;\n      if (contentToUse != null) {\n        // TODO: Validate that text is allowed as a child of this node\n        setTextContent(el, contentToUse);\n      } else if (childrenToUse != null) {\n        var mountImages = this.mountChildren(childrenToUse, transaction, context);\n        for (var i = 0; i < mountImages.length; i++) {\n          el.appendChild(mountImages[i]);\n        }\n      }\n    }\n  },\n\n  /**\n   * Receives a next element and updates the component.\n   *\n   * @internal\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @param {object} context\n   */\n  receiveComponent: function (nextElement, transaction, context) {\n    var prevElement = this._currentElement;\n    this._currentElement = nextElement;\n    this.updateComponent(transaction, prevElement, nextElement, context);\n  },\n\n  /**\n   * Updates a native DOM component after it has already been allocated and\n   * attached to the DOM. Reconciles the root DOM node, then recurses.\n   *\n   * @param {ReactReconcileTransaction} transaction\n   * @param {ReactElement} prevElement\n   * @param {ReactElement} nextElement\n   * @internal\n   * @overridable\n   */\n  updateComponent: function (transaction, prevElement, nextElement, context) {\n    var lastProps = prevElement.props;\n    var nextProps = this._currentElement.props;\n\n    switch (this._tag) {\n      case 'button':\n        lastProps = ReactDOMButton.getNativeProps(this, lastProps);\n        nextProps = ReactDOMButton.getNativeProps(this, nextProps);\n        break;\n      case 'input':\n        ReactDOMInput.updateWrapper(this);\n        lastProps = ReactDOMInput.getNativeProps(this, lastProps);\n        nextProps = ReactDOMInput.getNativeProps(this, nextProps);\n        break;\n      case 'option':\n        lastProps = ReactDOMOption.getNativeProps(this, lastProps);\n        nextProps = ReactDOMOption.getNativeProps(this, nextProps);\n        break;\n      case 'select':\n        lastProps = ReactDOMSelect.getNativeProps(this, lastProps);\n        nextProps = ReactDOMSelect.getNativeProps(this, nextProps);\n        break;\n      case 'textarea':\n        ReactDOMTextarea.updateWrapper(this);\n        lastProps = ReactDOMTextarea.getNativeProps(this, lastProps);\n        nextProps = ReactDOMTextarea.getNativeProps(this, nextProps);\n        break;\n    }\n\n    if (\"development\" !== 'production') {\n      // If the context is reference-equal to the old one, pass down the same\n      // processed object so the update bailout in ReactReconciler behaves\n      // correctly (and identically in dev and prod). See #5005.\n      if (this._unprocessedContextDev !== context) {\n        this._unprocessedContextDev = context;\n        this._processedContextDev = processChildContextDev(context, this);\n      }\n      context = this._processedContextDev;\n    }\n\n    assertValidProps(this, nextProps);\n    this._updateDOMProperties(lastProps, nextProps, transaction, null);\n    this._updateDOMChildren(lastProps, nextProps, transaction, context);\n\n    if (!canDefineProperty && this._nodeWithLegacyProperties) {\n      this._nodeWithLegacyProperties.props = nextProps;\n    }\n\n    if (this._tag === 'select') {\n      // <select> value update needs to occur after <option> children\n      // reconciliation\n      transaction.getReactMountReady().enqueue(postUpdateSelectWrapper, this);\n    }\n  },\n\n  /**\n   * Reconciles the properties by detecting differences in property values and\n   * updating the DOM as necessary. This function is probably the single most\n   * critical path for performance optimization.\n   *\n   * TODO: Benchmark whether checking for changed values in memory actually\n   *       improves performance (especially statically positioned elements).\n   * TODO: Benchmark the effects of putting this at the top since 99% of props\n   *       do not change for a given reconciliation.\n   * TODO: Benchmark areas that can be improved with caching.\n   *\n   * @private\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {ReactReconcileTransaction} transaction\n   * @param {?DOMElement} node\n   */\n  _updateDOMProperties: function (lastProps, nextProps, transaction, node) {\n    var propKey;\n    var styleName;\n    var styleUpdates;\n    for (propKey in lastProps) {\n      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        var lastStyle = this._previousStyleCopy;\n        for (styleName in lastStyle) {\n          if (lastStyle.hasOwnProperty(styleName)) {\n            styleUpdates = styleUpdates || {};\n            styleUpdates[styleName] = '';\n          }\n        }\n        this._previousStyleCopy = null;\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (lastProps[propKey]) {\n          // Only call deleteListener if there was a listener previously or\n          // else willDeleteListener gets called when there wasn't actually a\n          // listener (e.g., onClick={null})\n          deleteListener(this._rootNodeID, propKey);\n        }\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        if (!node) {\n          node = ReactMount.getNode(this._rootNodeID);\n        }\n        DOMPropertyOperations.deleteValueForProperty(node, propKey);\n      }\n    }\n    for (propKey in nextProps) {\n      var nextProp = nextProps[propKey];\n      var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey];\n      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {\n        continue;\n      }\n      if (propKey === STYLE) {\n        if (nextProp) {\n          if (\"development\" !== 'production') {\n            checkAndWarnForMutatedStyle(this._previousStyleCopy, this._previousStyle, this);\n            this._previousStyle = nextProp;\n          }\n          nextProp = this._previousStyleCopy = assign({}, nextProp);\n        } else {\n          this._previousStyleCopy = null;\n        }\n        if (lastProp) {\n          // Unset styles on `lastProp` but not on `nextProp`.\n          for (styleName in lastProp) {\n            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = '';\n            }\n          }\n          // Update styles that changed since `lastProp`.\n          for (styleName in nextProp) {\n            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n              styleUpdates = styleUpdates || {};\n              styleUpdates[styleName] = nextProp[styleName];\n            }\n          }\n        } else {\n          // Relies on `updateStylesByID` not mutating `styleUpdates`.\n          styleUpdates = nextProp;\n        }\n      } else if (registrationNameModules.hasOwnProperty(propKey)) {\n        if (nextProp) {\n          enqueuePutListener(this._rootNodeID, propKey, nextProp, transaction);\n        } else if (lastProp) {\n          deleteListener(this._rootNodeID, propKey);\n        }\n      } else if (isCustomComponent(this._tag, nextProps)) {\n        if (!node) {\n          node = ReactMount.getNode(this._rootNodeID);\n        }\n        if (propKey === CHILDREN) {\n          nextProp = null;\n        }\n        DOMPropertyOperations.setValueForAttribute(node, propKey, nextProp);\n      } else if (DOMProperty.properties[propKey] || DOMProperty.isCustomAttribute(propKey)) {\n        if (!node) {\n          node = ReactMount.getNode(this._rootNodeID);\n        }\n        // If we're updating to null or undefined, we should remove the property\n        // from the DOM node instead of inadvertantly setting to a string. This\n        // brings us in line with the same behavior we have on initial render.\n        if (nextProp != null) {\n          DOMPropertyOperations.setValueForProperty(node, propKey, nextProp);\n        } else {\n          DOMPropertyOperations.deleteValueForProperty(node, propKey);\n        }\n      }\n    }\n    if (styleUpdates) {\n      if (!node) {\n        node = ReactMount.getNode(this._rootNodeID);\n      }\n      CSSPropertyOperations.setValueForStyles(node, styleUpdates);\n    }\n  },\n\n  /**\n   * Reconciles the children with the various properties that affect the\n   * children content.\n   *\n   * @param {object} lastProps\n   * @param {object} nextProps\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   */\n  _updateDOMChildren: function (lastProps, nextProps, transaction, context) {\n    var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;\n    var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;\n\n    var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;\n    var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;\n\n    // Note the use of `!=` which checks for null or undefined.\n    var lastChildren = lastContent != null ? null : lastProps.children;\n    var nextChildren = nextContent != null ? null : nextProps.children;\n\n    // If we're switching from children to content/html or vice versa, remove\n    // the old content\n    var lastHasContentOrHtml = lastContent != null || lastHtml != null;\n    var nextHasContentOrHtml = nextContent != null || nextHtml != null;\n    if (lastChildren != null && nextChildren == null) {\n      this.updateChildren(null, transaction, context);\n    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {\n      this.updateTextContent('');\n    }\n\n    if (nextContent != null) {\n      if (lastContent !== nextContent) {\n        this.updateTextContent('' + nextContent);\n      }\n    } else if (nextHtml != null) {\n      if (lastHtml !== nextHtml) {\n        this.updateMarkup('' + nextHtml);\n      }\n    } else if (nextChildren != null) {\n      this.updateChildren(nextChildren, transaction, context);\n    }\n  },\n\n  /**\n   * Destroys all event registrations for this instance. Does not remove from\n   * the DOM. That must be done by the parent.\n   *\n   * @internal\n   */\n  unmountComponent: function () {\n    switch (this._tag) {\n      case 'iframe':\n      case 'img':\n      case 'form':\n      case 'video':\n      case 'audio':\n        var listeners = this._wrapperState.listeners;\n        if (listeners) {\n          for (var i = 0; i < listeners.length; i++) {\n            listeners[i].remove();\n          }\n        }\n        break;\n      case 'input':\n        ReactDOMInput.unmountWrapper(this);\n        break;\n      case 'html':\n      case 'head':\n      case 'body':\n        /**\n         * Components like <html> <head> and <body> can't be removed or added\n         * easily in a cross-browser way, however it's valuable to be able to\n         * take advantage of React's reconciliation for styling and <title>\n         * management. So we just document it and throw in dangerous cases.\n         */\n        !false ? \"development\" !== 'production' ? invariant(false, '<%s> tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, ' + '<head>, and <body>) reliably and efficiently. To fix this, have a ' + 'single top-level component that never unmounts render these ' + 'elements.', this._tag) : invariant(false) : undefined;\n        break;\n    }\n\n    this.unmountChildren();\n    ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);\n    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n    this._rootNodeID = null;\n    this._wrapperState = null;\n    if (this._nodeWithLegacyProperties) {\n      var node = this._nodeWithLegacyProperties;\n      node._reactInternalComponent = null;\n      this._nodeWithLegacyProperties = null;\n    }\n  },\n\n  getPublicInstance: function () {\n    if (!this._nodeWithLegacyProperties) {\n      var node = ReactMount.getNode(this._rootNodeID);\n\n      node._reactInternalComponent = this;\n      node.getDOMNode = legacyGetDOMNode;\n      node.isMounted = legacyIsMounted;\n      node.setState = legacySetStateEtc;\n      node.replaceState = legacySetStateEtc;\n      node.forceUpdate = legacySetStateEtc;\n      node.setProps = legacySetProps;\n      node.replaceProps = legacyReplaceProps;\n\n      if (\"development\" !== 'production') {\n        if (canDefineProperty) {\n          Object.defineProperties(node, legacyPropsDescriptor);\n        } else {\n          // updateComponent will update this property on subsequent renders\n          node.props = this._currentElement.props;\n        }\n      } else {\n        // updateComponent will update this property on subsequent renders\n        node.props = this._currentElement.props;\n      }\n\n      this._nodeWithLegacyProperties = node;\n    }\n    return this._nodeWithLegacyProperties;\n  }\n\n};\n\nReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {\n  mountComponent: 'mountComponent',\n  updateComponent: 'updateComponent'\n});\n\nassign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);\n\nmodule.exports = ReactDOMComponent;\n},{\"10\":10,\"104\":104,\"107\":107,\"11\":11,\"119\":119,\"124\":124,\"125\":125,\"128\":128,\"144\":144,\"148\":148,\"15\":15,\"153\":153,\"155\":155,\"2\":2,\"23\":23,\"26\":26,\"31\":31,\"36\":36,\"41\":41,\"42\":42,\"43\":43,\"47\":47,\"5\":5,\"65\":65,\"66\":66,\"71\":71,\"82\":82}],38:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFactories\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(52);\nvar ReactElementValidator = _dereq_(53);\n\nvar mapObject = _dereq_(149);\n\n/**\n * Create a factory that creates HTML tag elements.\n *\n * @param {string} tag Tag name (e.g. `div`).\n * @private\n */\nfunction createDOMFactory(tag) {\n  if (\"development\" !== 'production') {\n    return ReactElementValidator.createFactory(tag);\n  }\n  return ReactElement.createFactory(tag);\n}\n\n/**\n * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.\n * This is also accessible via `React.DOM`.\n *\n * @public\n */\nvar ReactDOMFactories = mapObject({\n  a: 'a',\n  abbr: 'abbr',\n  address: 'address',\n  area: 'area',\n  article: 'article',\n  aside: 'aside',\n  audio: 'audio',\n  b: 'b',\n  base: 'base',\n  bdi: 'bdi',\n  bdo: 'bdo',\n  big: 'big',\n  blockquote: 'blockquote',\n  body: 'body',\n  br: 'br',\n  button: 'button',\n  canvas: 'canvas',\n  caption: 'caption',\n  cite: 'cite',\n  code: 'code',\n  col: 'col',\n  colgroup: 'colgroup',\n  data: 'data',\n  datalist: 'datalist',\n  dd: 'dd',\n  del: 'del',\n  details: 'details',\n  dfn: 'dfn',\n  dialog: 'dialog',\n  div: 'div',\n  dl: 'dl',\n  dt: 'dt',\n  em: 'em',\n  embed: 'embed',\n  fieldset: 'fieldset',\n  figcaption: 'figcaption',\n  figure: 'figure',\n  footer: 'footer',\n  form: 'form',\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  head: 'head',\n  header: 'header',\n  hgroup: 'hgroup',\n  hr: 'hr',\n  html: 'html',\n  i: 'i',\n  iframe: 'iframe',\n  img: 'img',\n  input: 'input',\n  ins: 'ins',\n  kbd: 'kbd',\n  keygen: 'keygen',\n  label: 'label',\n  legend: 'legend',\n  li: 'li',\n  link: 'link',\n  main: 'main',\n  map: 'map',\n  mark: 'mark',\n  menu: 'menu',\n  menuitem: 'menuitem',\n  meta: 'meta',\n  meter: 'meter',\n  nav: 'nav',\n  noscript: 'noscript',\n  object: 'object',\n  ol: 'ol',\n  optgroup: 'optgroup',\n  option: 'option',\n  output: 'output',\n  p: 'p',\n  param: 'param',\n  picture: 'picture',\n  pre: 'pre',\n  progress: 'progress',\n  q: 'q',\n  rp: 'rp',\n  rt: 'rt',\n  ruby: 'ruby',\n  s: 's',\n  samp: 'samp',\n  script: 'script',\n  section: 'section',\n  select: 'select',\n  small: 'small',\n  source: 'source',\n  span: 'span',\n  strong: 'strong',\n  style: 'style',\n  sub: 'sub',\n  summary: 'summary',\n  sup: 'sup',\n  table: 'table',\n  tbody: 'tbody',\n  td: 'td',\n  textarea: 'textarea',\n  tfoot: 'tfoot',\n  th: 'th',\n  thead: 'thead',\n  time: 'time',\n  title: 'title',\n  tr: 'tr',\n  track: 'track',\n  u: 'u',\n  ul: 'ul',\n  'var': 'var',\n  video: 'video',\n  wbr: 'wbr',\n\n  // SVG\n  circle: 'circle',\n  clipPath: 'clipPath',\n  defs: 'defs',\n  ellipse: 'ellipse',\n  g: 'g',\n  image: 'image',\n  line: 'line',\n  linearGradient: 'linearGradient',\n  mask: 'mask',\n  path: 'path',\n  pattern: 'pattern',\n  polygon: 'polygon',\n  polyline: 'polyline',\n  radialGradient: 'radialGradient',\n  rect: 'rect',\n  stop: 'stop',\n  svg: 'svg',\n  text: 'text',\n  tspan: 'tspan'\n\n}, createDOMFactory);\n\nmodule.exports = ReactDOMFactories;\n},{\"149\":149,\"52\":52,\"53\":53}],39:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMFeatureFlags\n */\n\n'use strict';\n\nvar ReactDOMFeatureFlags = {\n  useCreateElement: false\n};\n\nmodule.exports = ReactDOMFeatureFlags;\n},{}],40:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMIDOperations\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = _dereq_(9);\nvar DOMPropertyOperations = _dereq_(11);\nvar ReactMount = _dereq_(65);\nvar ReactPerf = _dereq_(71);\n\nvar invariant = _dereq_(144);\n\n/**\n * Errors for properties that should not be updated with `updatePropertyByID()`.\n *\n * @type {object}\n * @private\n */\nvar INVALID_PROPERTY_ERRORS = {\n  dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',\n  style: '`style` must be set using `updateStylesByID()`.'\n};\n\n/**\n * Operations used to process updates to DOM nodes.\n */\nvar ReactDOMIDOperations = {\n\n  /**\n   * Updates a DOM node with new property values. This should only be used to\n   * update DOM properties in `DOMProperty`.\n   *\n   * @param {string} id ID of the node to update.\n   * @param {string} name A valid property name, see `DOMProperty`.\n   * @param {*} value New value of the property.\n   * @internal\n   */\n  updatePropertyByID: function (id, name, value) {\n    var node = ReactMount.getNode(id);\n    !!INVALID_PROPERTY_ERRORS.hasOwnProperty(name) ? \"development\" !== 'production' ? invariant(false, 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(false) : undefined;\n\n    // If we're updating to null or undefined, we should remove the property\n    // from the DOM node instead of inadvertantly setting to a string. This\n    // brings us in line with the same behavior we have on initial render.\n    if (value != null) {\n      DOMPropertyOperations.setValueForProperty(node, name, value);\n    } else {\n      DOMPropertyOperations.deleteValueForProperty(node, name);\n    }\n  },\n\n  /**\n   * Replaces a DOM node that exists in the document with markup.\n   *\n   * @param {string} id ID of child to be replaced.\n   * @param {string} markup Dangerous markup to inject in place of child.\n   * @internal\n   * @see {Danger.dangerouslyReplaceNodeWithMarkup}\n   */\n  dangerouslyReplaceNodeWithMarkupByID: function (id, markup) {\n    var node = ReactMount.getNode(id);\n    DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);\n  },\n\n  /**\n   * Updates a component's children by processing a series of updates.\n   *\n   * @param {array<object>} updates List of update configurations.\n   * @param {array<string>} markup List of markup strings.\n   * @internal\n   */\n  dangerouslyProcessChildrenUpdates: function (updates, markup) {\n    for (var i = 0; i < updates.length; i++) {\n      updates[i].parentNode = ReactMount.getNode(updates[i].parentID);\n    }\n    DOMChildrenOperations.processUpdates(updates, markup);\n  }\n};\n\nReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {\n  dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',\n  dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'\n});\n\nmodule.exports = ReactDOMIDOperations;\n},{\"11\":11,\"144\":144,\"65\":65,\"71\":71,\"9\":9}],41:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMInput\n */\n\n'use strict';\n\nvar ReactDOMIDOperations = _dereq_(40);\nvar LinkedValueUtils = _dereq_(22);\nvar ReactMount = _dereq_(65);\nvar ReactUpdates = _dereq_(83);\n\nvar assign = _dereq_(23);\nvar invariant = _dereq_(144);\n\nvar instancesByReactID = {};\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMInput.updateWrapper(this);\n  }\n}\n\n/**\n * Implements an <input> native component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\nvar ReactDOMInput = {\n  getNativeProps: function (inst, props, context) {\n    var value = LinkedValueUtils.getValue(props);\n    var checked = LinkedValueUtils.getChecked(props);\n\n    var nativeProps = assign({}, props, {\n      defaultChecked: undefined,\n      defaultValue: undefined,\n      value: value != null ? value : inst._wrapperState.initialValue,\n      checked: checked != null ? checked : inst._wrapperState.initialChecked,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return nativeProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (\"development\" !== 'production') {\n      LinkedValueUtils.checkPropTypes('input', props, inst._currentElement._owner);\n    }\n\n    var defaultValue = props.defaultValue;\n    inst._wrapperState = {\n      initialChecked: props.defaultChecked || false,\n      initialValue: defaultValue != null ? defaultValue : null,\n      onChange: _handleChange.bind(inst)\n    };\n  },\n\n  mountReadyWrapper: function (inst) {\n    // Can't be in mountWrapper or else server rendering leaks.\n    instancesByReactID[inst._rootNodeID] = inst;\n  },\n\n  unmountWrapper: function (inst) {\n    delete instancesByReactID[inst._rootNodeID];\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    // TODO: Shouldn't this be getChecked(props)?\n    var checked = props.checked;\n    if (checked != null) {\n      ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'checked', checked || false);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  // Here we use asap to wait until all updates have propagated, which\n  // is important when using controlled components within layers:\n  // https://github.com/facebook/react/issues/1698\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n\n  var name = props.name;\n  if (props.type === 'radio' && name != null) {\n    var rootNode = ReactMount.getNode(this._rootNodeID);\n    var queryRoot = rootNode;\n\n    while (queryRoot.parentNode) {\n      queryRoot = queryRoot.parentNode;\n    }\n\n    // If `rootNode.form` was non-null, then we could try `form.elements`,\n    // but that sometimes behaves strangely in IE8. We could also try using\n    // `form.getElementsByName`, but that will only return direct children\n    // and won't include inputs that use the HTML5 `form=` attribute. Since\n    // the input might not even be in a form, let's just use the global\n    // `querySelectorAll` to ensure we don't miss anything.\n    var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n    for (var i = 0; i < group.length; i++) {\n      var otherNode = group[i];\n      if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n        continue;\n      }\n      // This will throw if radio buttons rendered by different copies of React\n      // and the same name are rendered into the same form (same as #1939).\n      // That's probably okay; we don't support it just as we don't support\n      // mixing React with non-React.\n      var otherID = ReactMount.getID(otherNode);\n      !otherID ? \"development\" !== 'production' ? invariant(false, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(false) : undefined;\n      var otherInstance = instancesByReactID[otherID];\n      !otherInstance ? \"development\" !== 'production' ? invariant(false, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(false) : undefined;\n      // If this is a controlled radio button group, forcing the input that\n      // was previously checked to update will cause it to be come re-checked\n      // as appropriate.\n      ReactUpdates.asap(forceUpdateIfMounted, otherInstance);\n    }\n  }\n\n  return returnValue;\n}\n\nmodule.exports = ReactDOMInput;\n},{\"144\":144,\"22\":22,\"23\":23,\"40\":40,\"65\":65,\"83\":83}],42:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMOption\n */\n\n'use strict';\n\nvar ReactChildren = _dereq_(28);\nvar ReactDOMSelect = _dereq_(43);\n\nvar assign = _dereq_(23);\nvar warning = _dereq_(155);\n\nvar valueContextKey = ReactDOMSelect.valueContextKey;\n\n/**\n * Implements an <option> native component that warns when `selected` is set.\n */\nvar ReactDOMOption = {\n  mountWrapper: function (inst, props, context) {\n    // TODO (yungsters): Remove support for `selected` in <option>.\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : undefined;\n    }\n\n    // Look up whether this option is 'selected' via context\n    var selectValue = context[valueContextKey];\n\n    // If context key is null (e.g., no specified value or after initial mount)\n    // or missing (e.g., for <datalist>), we don't change props.selected\n    var selected = null;\n    if (selectValue != null) {\n      selected = false;\n      if (Array.isArray(selectValue)) {\n        // multiple\n        for (var i = 0; i < selectValue.length; i++) {\n          if ('' + selectValue[i] === '' + props.value) {\n            selected = true;\n            break;\n          }\n        }\n      } else {\n        selected = '' + selectValue === '' + props.value;\n      }\n    }\n\n    inst._wrapperState = { selected: selected };\n  },\n\n  getNativeProps: function (inst, props, context) {\n    var nativeProps = assign({ selected: undefined, children: undefined }, props);\n\n    // Read state only from initial mount because <select> updates value\n    // manually; we need the initial state only for server rendering\n    if (inst._wrapperState.selected != null) {\n      nativeProps.selected = inst._wrapperState.selected;\n    }\n\n    var content = '';\n\n    // Flatten children and warn if they aren't strings or numbers;\n    // invalid types are ignored.\n    ReactChildren.forEach(props.children, function (child) {\n      if (child == null) {\n        return;\n      }\n      if (typeof child === 'string' || typeof child === 'number') {\n        content += child;\n      } else {\n        \"development\" !== 'production' ? warning(false, 'Only strings and numbers are supported as <option> children.') : undefined;\n      }\n    });\n\n    nativeProps.children = content;\n    return nativeProps;\n  }\n\n};\n\nmodule.exports = ReactDOMOption;\n},{\"155\":155,\"23\":23,\"28\":28,\"43\":43}],43:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelect\n */\n\n'use strict';\n\nvar LinkedValueUtils = _dereq_(22);\nvar ReactMount = _dereq_(65);\nvar ReactUpdates = _dereq_(83);\n\nvar assign = _dereq_(23);\nvar warning = _dereq_(155);\n\nvar valueContextKey = '__ReactDOMSelect_value$' + Math.random().toString(36).slice(2);\n\nfunction updateOptionsIfPendingUpdateAndMounted() {\n  if (this._rootNodeID && this._wrapperState.pendingUpdate) {\n    this._wrapperState.pendingUpdate = false;\n\n    var props = this._currentElement.props;\n    var value = LinkedValueUtils.getValue(props);\n\n    if (value != null) {\n      updateOptions(this, props, value);\n    }\n  }\n}\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n\n/**\n * Validation function for `value` and `defaultValue`.\n * @private\n */\nfunction checkSelectPropTypes(inst, props) {\n  var owner = inst._currentElement._owner;\n  LinkedValueUtils.checkPropTypes('select', props, owner);\n\n  for (var i = 0; i < valuePropNames.length; i++) {\n    var propName = valuePropNames[i];\n    if (props[propName] == null) {\n      continue;\n    }\n    if (props.multiple) {\n      \"development\" !== 'production' ? warning(Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n    } else {\n      \"development\" !== 'production' ? warning(!Array.isArray(props[propName]), 'The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum(owner)) : undefined;\n    }\n  }\n}\n\n/**\n * @param {ReactDOMComponent} inst\n * @param {boolean} multiple\n * @param {*} propValue A stringable (with `multiple`, a list of stringables).\n * @private\n */\nfunction updateOptions(inst, multiple, propValue) {\n  var selectedValue, i;\n  var options = ReactMount.getNode(inst._rootNodeID).options;\n\n  if (multiple) {\n    selectedValue = {};\n    for (i = 0; i < propValue.length; i++) {\n      selectedValue['' + propValue[i]] = true;\n    }\n    for (i = 0; i < options.length; i++) {\n      var selected = selectedValue.hasOwnProperty(options[i].value);\n      if (options[i].selected !== selected) {\n        options[i].selected = selected;\n      }\n    }\n  } else {\n    // Do not set `select.value` as exact behavior isn't consistent across all\n    // browsers for all cases.\n    selectedValue = '' + propValue;\n    for (i = 0; i < options.length; i++) {\n      if (options[i].value === selectedValue) {\n        options[i].selected = true;\n        return;\n      }\n    }\n    if (options.length) {\n      options[0].selected = true;\n    }\n  }\n}\n\n/**\n * Implements a <select> native component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\nvar ReactDOMSelect = {\n  valueContextKey: valueContextKey,\n\n  getNativeProps: function (inst, props, context) {\n    return assign({}, props, {\n      onChange: inst._wrapperState.onChange,\n      value: undefined\n    });\n  },\n\n  mountWrapper: function (inst, props) {\n    if (\"development\" !== 'production') {\n      checkSelectPropTypes(inst, props);\n    }\n\n    var value = LinkedValueUtils.getValue(props);\n    inst._wrapperState = {\n      pendingUpdate: false,\n      initialValue: value != null ? value : props.defaultValue,\n      onChange: _handleChange.bind(inst),\n      wasMultiple: Boolean(props.multiple)\n    };\n  },\n\n  processChildContext: function (inst, props, context) {\n    // Pass down initial value so initial generated markup has correct\n    // `selected` attributes\n    var childContext = assign({}, context);\n    childContext[valueContextKey] = inst._wrapperState.initialValue;\n    return childContext;\n  },\n\n  postUpdateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n\n    // After the initial mount, we control selected-ness manually so don't pass\n    // the context value down\n    inst._wrapperState.initialValue = undefined;\n\n    var wasMultiple = inst._wrapperState.wasMultiple;\n    inst._wrapperState.wasMultiple = Boolean(props.multiple);\n\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      inst._wrapperState.pendingUpdate = false;\n      updateOptions(inst, Boolean(props.multiple), value);\n    } else if (wasMultiple !== Boolean(props.multiple)) {\n      // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n      if (props.defaultValue != null) {\n        updateOptions(inst, Boolean(props.multiple), props.defaultValue);\n      } else {\n        // Revert the select back to its default unselected state.\n        updateOptions(inst, Boolean(props.multiple), props.multiple ? [] : '');\n      }\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n\n  this._wrapperState.pendingUpdate = true;\n  ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMSelect;\n},{\"155\":155,\"22\":22,\"23\":23,\"65\":65,\"83\":83}],44:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMSelection\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar getNodeForCharacterOffset = _dereq_(116);\nvar getTextContentAccessor = _dereq_(117);\n\n/**\n * While `isCollapsed` is available on the Selection object and `collapsed`\n * is available on the Range object, IE11 sometimes gets them wrong.\n * If the anchor/focus nodes and offsets are the same, the range is collapsed.\n */\nfunction isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {\n  return anchorNode === focusNode && anchorOffset === focusOffset;\n}\n\n/**\n * Get the appropriate anchor and focus node/offset pairs for IE.\n *\n * The catch here is that IE's selection API doesn't provide information\n * about whether the selection is forward or backward, so we have to\n * behave as though it's always forward.\n *\n * IE text differs from modern selection in that it behaves as though\n * block elements end with a new line. This means character offsets will\n * differ between the two APIs.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getIEOffsets(node) {\n  var selection = document.selection;\n  var selectedRange = selection.createRange();\n  var selectedLength = selectedRange.text.length;\n\n  // Duplicate selection so we can move range without breaking user selection.\n  var fromStart = selectedRange.duplicate();\n  fromStart.moveToElementText(node);\n  fromStart.setEndPoint('EndToStart', selectedRange);\n\n  var startOffset = fromStart.text.length;\n  var endOffset = startOffset + selectedLength;\n\n  return {\n    start: startOffset,\n    end: endOffset\n  };\n}\n\n/**\n * @param {DOMElement} node\n * @return {?object}\n */\nfunction getModernOffsets(node) {\n  var selection = window.getSelection && window.getSelection();\n\n  if (!selection || selection.rangeCount === 0) {\n    return null;\n  }\n\n  var anchorNode = selection.anchorNode;\n  var anchorOffset = selection.anchorOffset;\n  var focusNode = selection.focusNode;\n  var focusOffset = selection.focusOffset;\n\n  var currentRange = selection.getRangeAt(0);\n\n  // In Firefox, range.startContainer and range.endContainer can be \"anonymous\n  // divs\", e.g. the up/down buttons on an <input type=\"number\">. Anonymous\n  // divs do not seem to expose properties, triggering a \"Permission denied\n  // error\" if any of its properties are accessed. The only seemingly possible\n  // way to avoid erroring is to access a property that typically works for\n  // non-anonymous divs and catch any error that may otherwise arise. See\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n  try {\n    /* eslint-disable no-unused-expressions */\n    currentRange.startContainer.nodeType;\n    currentRange.endContainer.nodeType;\n    /* eslint-enable no-unused-expressions */\n  } catch (e) {\n    return null;\n  }\n\n  // If the node and offset values are the same, the selection is collapsed.\n  // `Selection.isCollapsed` is available natively, but IE sometimes gets\n  // this value wrong.\n  var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);\n\n  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;\n\n  var tempRange = currentRange.cloneRange();\n  tempRange.selectNodeContents(node);\n  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);\n\n  var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);\n\n  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;\n  var end = start + rangeLength;\n\n  // Detect whether the selection is backward.\n  var detectionRange = document.createRange();\n  detectionRange.setStart(anchorNode, anchorOffset);\n  detectionRange.setEnd(focusNode, focusOffset);\n  var isBackward = detectionRange.collapsed;\n\n  return {\n    start: isBackward ? end : start,\n    end: isBackward ? start : end\n  };\n}\n\n/**\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setIEOffsets(node, offsets) {\n  var range = document.selection.createRange().duplicate();\n  var start, end;\n\n  if (typeof offsets.end === 'undefined') {\n    start = offsets.start;\n    end = start;\n  } else if (offsets.start > offsets.end) {\n    start = offsets.end;\n    end = offsets.start;\n  } else {\n    start = offsets.start;\n    end = offsets.end;\n  }\n\n  range.moveToElementText(node);\n  range.moveStart('character', start);\n  range.setEndPoint('EndToStart', range);\n  range.moveEnd('character', end - start);\n  range.select();\n}\n\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\nfunction setModernOffsets(node, offsets) {\n  if (!window.getSelection) {\n    return;\n  }\n\n  var selection = window.getSelection();\n  var length = node[getTextContentAccessor()].length;\n  var start = Math.min(offsets.start, length);\n  var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length);\n\n  // IE 11 uses modern selection, but doesn't support the extend method.\n  // Flip backward selections, so we can set with a single range.\n  if (!selection.extend && start > end) {\n    var temp = end;\n    end = start;\n    start = temp;\n  }\n\n  var startMarker = getNodeForCharacterOffset(node, start);\n  var endMarker = getNodeForCharacterOffset(node, end);\n\n  if (startMarker && endMarker) {\n    var range = document.createRange();\n    range.setStart(startMarker.node, startMarker.offset);\n    selection.removeAllRanges();\n\n    if (start > end) {\n      selection.addRange(range);\n      selection.extend(endMarker.node, endMarker.offset);\n    } else {\n      range.setEnd(endMarker.node, endMarker.offset);\n      selection.addRange(range);\n    }\n  }\n}\n\nvar useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);\n\nvar ReactDOMSelection = {\n  /**\n   * @param {DOMElement} node\n   */\n  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,\n\n  /**\n   * @param {DOMElement|DOMTextNode} node\n   * @param {object} offsets\n   */\n  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets\n};\n\nmodule.exports = ReactDOMSelection;\n},{\"116\":116,\"117\":117,\"130\":130}],45:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMServer\n */\n\n'use strict';\n\nvar ReactDefaultInjection = _dereq_(49);\nvar ReactServerRendering = _dereq_(80);\nvar ReactVersion = _dereq_(84);\n\nReactDefaultInjection.inject();\n\nvar ReactDOMServer = {\n  renderToString: ReactServerRendering.renderToString,\n  renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,\n  version: ReactVersion\n};\n\nmodule.exports = ReactDOMServer;\n},{\"49\":49,\"80\":80,\"84\":84}],46:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMChildrenOperations = _dereq_(9);\nvar DOMPropertyOperations = _dereq_(11);\nvar ReactComponentBrowserEnvironment = _dereq_(31);\nvar ReactMount = _dereq_(65);\n\nvar assign = _dereq_(23);\nvar escapeTextContentForBrowser = _dereq_(107);\nvar setTextContent = _dereq_(125);\nvar validateDOMNesting = _dereq_(128);\n\n/**\n * Text nodes violate a couple assumptions that React makes about components:\n *\n *  - When mounting text into the DOM, adjacent text nodes are merged.\n *  - Text nodes cannot be assigned a React root ID.\n *\n * This component is used to wrap strings in elements so that they can undergo\n * the same reconciliation that is applied to elements.\n *\n * TODO: Investigate representing React components in the DOM with text nodes.\n *\n * @class ReactDOMTextComponent\n * @extends ReactComponent\n * @internal\n */\nvar ReactDOMTextComponent = function (props) {\n  // This constructor and its argument is currently used by mocks.\n};\n\nassign(ReactDOMTextComponent.prototype, {\n\n  /**\n   * @param {ReactText} text\n   * @internal\n   */\n  construct: function (text) {\n    // TODO: This is really a ReactText (ReactNode), not a ReactElement\n    this._currentElement = text;\n    this._stringText = '' + text;\n\n    // Properties\n    this._rootNodeID = null;\n    this._mountIndex = 0;\n  },\n\n  /**\n   * Creates the markup for this text node. This node is not intended to have\n   * any features besides containing text content.\n   *\n   * @param {string} rootID DOM ID of the root node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {string} Markup for this text node.\n   * @internal\n   */\n  mountComponent: function (rootID, transaction, context) {\n    if (\"development\" !== 'production') {\n      if (context[validateDOMNesting.ancestorInfoContextKey]) {\n        validateDOMNesting('span', null, context[validateDOMNesting.ancestorInfoContextKey]);\n      }\n    }\n\n    this._rootNodeID = rootID;\n    if (transaction.useCreateElement) {\n      var ownerDocument = context[ReactMount.ownerDocumentContextKey];\n      var el = ownerDocument.createElement('span');\n      DOMPropertyOperations.setAttributeForID(el, rootID);\n      // Populate node cache\n      ReactMount.getID(el);\n      setTextContent(el, this._stringText);\n      return el;\n    } else {\n      var escapedText = escapeTextContentForBrowser(this._stringText);\n\n      if (transaction.renderToStaticMarkup) {\n        // Normally we'd wrap this in a `span` for the reasons stated above, but\n        // since this is a situation where React won't take over (static pages),\n        // we can simply return the text as it is.\n        return escapedText;\n      }\n\n      return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';\n    }\n  },\n\n  /**\n   * Updates this component by updating the text content.\n   *\n   * @param {ReactText} nextText The next text content\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  receiveComponent: function (nextText, transaction) {\n    if (nextText !== this._currentElement) {\n      this._currentElement = nextText;\n      var nextStringText = '' + nextText;\n      if (nextStringText !== this._stringText) {\n        // TODO: Save this as pending props and use performUpdateIfNecessary\n        // and/or updateComponent to do the actual update for consistency with\n        // other component types?\n        this._stringText = nextStringText;\n        var node = ReactMount.getNode(this._rootNodeID);\n        DOMChildrenOperations.updateTextContent(node, nextStringText);\n      }\n    }\n  },\n\n  unmountComponent: function () {\n    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);\n  }\n\n});\n\nmodule.exports = ReactDOMTextComponent;\n},{\"107\":107,\"11\":11,\"125\":125,\"128\":128,\"23\":23,\"31\":31,\"65\":65,\"9\":9}],47:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDOMTextarea\n */\n\n'use strict';\n\nvar LinkedValueUtils = _dereq_(22);\nvar ReactDOMIDOperations = _dereq_(40);\nvar ReactUpdates = _dereq_(83);\n\nvar assign = _dereq_(23);\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\nfunction forceUpdateIfMounted() {\n  if (this._rootNodeID) {\n    // DOM component is still mounted; update\n    ReactDOMTextarea.updateWrapper(this);\n  }\n}\n\n/**\n * Implements a <textarea> native component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nvar ReactDOMTextarea = {\n  getNativeProps: function (inst, props, context) {\n    !(props.dangerouslySetInnerHTML == null) ? \"development\" !== 'production' ? invariant(false, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(false) : undefined;\n\n    // Always set children to the same thing. In IE9, the selection range will\n    // get reset if `textContent` is mutated.\n    var nativeProps = assign({}, props, {\n      defaultValue: undefined,\n      value: undefined,\n      children: inst._wrapperState.initialValue,\n      onChange: inst._wrapperState.onChange\n    });\n\n    return nativeProps;\n  },\n\n  mountWrapper: function (inst, props) {\n    if (\"development\" !== 'production') {\n      LinkedValueUtils.checkPropTypes('textarea', props, inst._currentElement._owner);\n    }\n\n    var defaultValue = props.defaultValue;\n    // TODO (yungsters): Remove support for children content in <textarea>.\n    var children = props.children;\n    if (children != null) {\n      if (\"development\" !== 'production') {\n        \"development\" !== 'production' ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : undefined;\n      }\n      !(defaultValue == null) ? \"development\" !== 'production' ? invariant(false, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(false) : undefined;\n      if (Array.isArray(children)) {\n        !(children.length <= 1) ? \"development\" !== 'production' ? invariant(false, '<textarea> can only have at most one child.') : invariant(false) : undefined;\n        children = children[0];\n      }\n\n      defaultValue = '' + children;\n    }\n    if (defaultValue == null) {\n      defaultValue = '';\n    }\n    var value = LinkedValueUtils.getValue(props);\n\n    inst._wrapperState = {\n      // We save the initial value so that `ReactDOMComponent` doesn't update\n      // `textContent` (unnecessary since we update value).\n      // The initial value can be a boolean or object so that's why it's\n      // forced to be a string.\n      initialValue: '' + (value != null ? value : defaultValue),\n      onChange: _handleChange.bind(inst)\n    };\n  },\n\n  updateWrapper: function (inst) {\n    var props = inst._currentElement.props;\n    var value = LinkedValueUtils.getValue(props);\n    if (value != null) {\n      // Cast `value` to a string to ensure the value is set correctly. While\n      // browsers typically do this as necessary, jsdom doesn't.\n      ReactDOMIDOperations.updatePropertyByID(inst._rootNodeID, 'value', '' + value);\n    }\n  }\n};\n\nfunction _handleChange(event) {\n  var props = this._currentElement.props;\n  var returnValue = LinkedValueUtils.executeOnChange(props, event);\n  ReactUpdates.asap(forceUpdateIfMounted, this);\n  return returnValue;\n}\n\nmodule.exports = ReactDOMTextarea;\n},{\"144\":144,\"155\":155,\"22\":22,\"23\":23,\"40\":40,\"83\":83}],48:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultBatchingStrategy\n */\n\n'use strict';\n\nvar ReactUpdates = _dereq_(83);\nvar Transaction = _dereq_(100);\n\nvar assign = _dereq_(23);\nvar emptyFunction = _dereq_(136);\n\nvar RESET_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: function () {\n    ReactDefaultBatchingStrategy.isBatchingUpdates = false;\n  }\n};\n\nvar FLUSH_BATCHED_UPDATES = {\n  initialize: emptyFunction,\n  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)\n};\n\nvar TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];\n\nfunction ReactDefaultBatchingStrategyTransaction() {\n  this.reinitializeTransaction();\n}\n\nassign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  }\n});\n\nvar transaction = new ReactDefaultBatchingStrategyTransaction();\n\nvar ReactDefaultBatchingStrategy = {\n  isBatchingUpdates: false,\n\n  /**\n   * Call the provided function in a context within which calls to `setState`\n   * and friends are batched such that components aren't updated unnecessarily.\n   */\n  batchedUpdates: function (callback, a, b, c, d, e) {\n    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;\n\n    ReactDefaultBatchingStrategy.isBatchingUpdates = true;\n\n    // The code is written this way to avoid extra allocations\n    if (alreadyBatchingUpdates) {\n      callback(a, b, c, d, e);\n    } else {\n      transaction.perform(callback, null, a, b, c, d, e);\n    }\n  }\n};\n\nmodule.exports = ReactDefaultBatchingStrategy;\n},{\"100\":100,\"136\":136,\"23\":23,\"83\":83}],49:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultInjection\n */\n\n'use strict';\n\nvar BeforeInputEventPlugin = _dereq_(3);\nvar ChangeEventPlugin = _dereq_(7);\nvar ClientReactRootIndex = _dereq_(8);\nvar DefaultEventPluginOrder = _dereq_(13);\nvar EnterLeaveEventPlugin = _dereq_(14);\nvar ExecutionEnvironment = _dereq_(130);\nvar HTMLDOMPropertyConfig = _dereq_(21);\nvar ReactBrowserComponentMixin = _dereq_(25);\nvar ReactComponentBrowserEnvironment = _dereq_(31);\nvar ReactDefaultBatchingStrategy = _dereq_(48);\nvar ReactDOMComponent = _dereq_(37);\nvar ReactDOMTextComponent = _dereq_(46);\nvar ReactEventListener = _dereq_(58);\nvar ReactInjection = _dereq_(59);\nvar ReactInstanceHandles = _dereq_(61);\nvar ReactMount = _dereq_(65);\nvar ReactReconcileTransaction = _dereq_(75);\nvar SelectEventPlugin = _dereq_(86);\nvar ServerReactRootIndex = _dereq_(87);\nvar SimpleEventPlugin = _dereq_(88);\nvar SVGDOMPropertyConfig = _dereq_(85);\n\nvar alreadyInjected = false;\n\nfunction inject() {\n  if (alreadyInjected) {\n    // TODO: This is currently true because these injections are shared between\n    // the client and the server package. They should be built independently\n    // and not share any injection state. Then this problem will be solved.\n    return;\n  }\n  alreadyInjected = true;\n\n  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);\n\n  /**\n   * Inject modules for resolving DOM hierarchy and plugin ordering.\n   */\n  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);\n  ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);\n  ReactInjection.EventPluginHub.injectMount(ReactMount);\n\n  /**\n   * Some important event plugins included by default (without having to require\n   * them).\n   */\n  ReactInjection.EventPluginHub.injectEventPluginsByName({\n    SimpleEventPlugin: SimpleEventPlugin,\n    EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n    ChangeEventPlugin: ChangeEventPlugin,\n    SelectEventPlugin: SelectEventPlugin,\n    BeforeInputEventPlugin: BeforeInputEventPlugin\n  });\n\n  ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);\n\n  ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);\n\n  ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);\n\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);\n  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);\n\n  ReactInjection.EmptyComponent.injectEmptyComponent('noscript');\n\n  ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);\n  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n\n  ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);\n\n  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);\n\n  if (\"development\" !== 'production') {\n    var url = ExecutionEnvironment.canUseDOM && window.location.href || '';\n    if (/[?&]react_perf\\b/.test(url)) {\n      var ReactDefaultPerf = _dereq_(50);\n      ReactDefaultPerf.start();\n    }\n  }\n}\n\nmodule.exports = {\n  inject: inject\n};\n},{\"13\":13,\"130\":130,\"14\":14,\"21\":21,\"25\":25,\"3\":3,\"31\":31,\"37\":37,\"46\":46,\"48\":48,\"50\":50,\"58\":58,\"59\":59,\"61\":61,\"65\":65,\"7\":7,\"75\":75,\"8\":8,\"85\":85,\"86\":86,\"87\":87,\"88\":88}],50:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerf\n * @typechecks static-only\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar ReactDefaultPerfAnalysis = _dereq_(51);\nvar ReactMount = _dereq_(65);\nvar ReactPerf = _dereq_(71);\n\nvar performanceNow = _dereq_(152);\n\nfunction roundFloat(val) {\n  return Math.floor(val * 100) / 100;\n}\n\nfunction addValue(obj, key, val) {\n  obj[key] = (obj[key] || 0) + val;\n}\n\nvar ReactDefaultPerf = {\n  _allMeasurements: [], // last item in the list is the current one\n  _mountStack: [0],\n  _injected: false,\n\n  start: function () {\n    if (!ReactDefaultPerf._injected) {\n      ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);\n    }\n\n    ReactDefaultPerf._allMeasurements.length = 0;\n    ReactPerf.enableMeasure = true;\n  },\n\n  stop: function () {\n    ReactPerf.enableMeasure = false;\n  },\n\n  getLastMeasurements: function () {\n    return ReactDefaultPerf._allMeasurements;\n  },\n\n  printExclusive: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);\n    console.table(summary.map(function (item) {\n      return {\n        'Component class name': item.componentName,\n        'Total inclusive time (ms)': roundFloat(item.inclusive),\n        'Exclusive mount time (ms)': roundFloat(item.exclusive),\n        'Exclusive render time (ms)': roundFloat(item.render),\n        'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),\n        'Render time per instance (ms)': roundFloat(item.render / item.count),\n        'Instances': item.count\n      };\n    }));\n    // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct\n    // number.\n  },\n\n  printInclusive: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);\n    console.table(summary.map(function (item) {\n      return {\n        'Owner > component': item.componentName,\n        'Inclusive time (ms)': roundFloat(item.time),\n        'Instances': item.count\n      };\n    }));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  getMeasurementsSummaryMap: function (measurements) {\n    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);\n    return summary.map(function (item) {\n      return {\n        'Owner > component': item.componentName,\n        'Wasted time (ms)': item.time,\n        'Instances': item.count\n      };\n    });\n  },\n\n  printWasted: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  printDOM: function (measurements) {\n    measurements = measurements || ReactDefaultPerf._allMeasurements;\n    var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);\n    console.table(summary.map(function (item) {\n      var result = {};\n      result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;\n      result.type = item.type;\n      result.args = JSON.stringify(item.args);\n      return result;\n    }));\n    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');\n  },\n\n  _recordWrite: function (id, fnName, totalTime, args) {\n    // TODO: totalTime isn't that useful since it doesn't count paints/reflows\n    var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;\n    writes[id] = writes[id] || [];\n    writes[id].push({\n      type: fnName,\n      time: totalTime,\n      args: args\n    });\n  },\n\n  measure: function (moduleName, fnName, func) {\n    return function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      var totalTime;\n      var rv;\n      var start;\n\n      if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {\n        // A \"measurement\" is a set of metrics recorded for each flush. We want\n        // to group the metrics for a given flush together so we can look at the\n        // components that rendered and the DOM operations that actually\n        // happened to determine the amount of \"wasted work\" performed.\n        ReactDefaultPerf._allMeasurements.push({\n          exclusive: {},\n          inclusive: {},\n          render: {},\n          counts: {},\n          writes: {},\n          displayNames: {},\n          totalTime: 0,\n          created: {}\n        });\n        start = performanceNow();\n        rv = func.apply(this, args);\n        ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;\n        return rv;\n      } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactBrowserEventEmitter' || moduleName === 'ReactDOMIDOperations' || moduleName === 'CSSPropertyOperations' || moduleName === 'DOMChildrenOperations' || moduleName === 'DOMPropertyOperations') {\n        start = performanceNow();\n        rv = func.apply(this, args);\n        totalTime = performanceNow() - start;\n\n        if (fnName === '_mountImageIntoNode') {\n          var mountID = ReactMount.getID(args[1]);\n          ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);\n        } else if (fnName === 'dangerouslyProcessChildrenUpdates') {\n          // special format\n          args[0].forEach(function (update) {\n            var writeArgs = {};\n            if (update.fromIndex !== null) {\n              writeArgs.fromIndex = update.fromIndex;\n            }\n            if (update.toIndex !== null) {\n              writeArgs.toIndex = update.toIndex;\n            }\n            if (update.textContent !== null) {\n              writeArgs.textContent = update.textContent;\n            }\n            if (update.markupIndex !== null) {\n              writeArgs.markup = args[1][update.markupIndex];\n            }\n            ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);\n          });\n        } else {\n          // basic format\n          var id = args[0];\n          if (typeof id === 'object') {\n            id = ReactMount.getID(args[0]);\n          }\n          ReactDefaultPerf._recordWrite(id, fnName, totalTime, Array.prototype.slice.call(args, 1));\n        }\n        return rv;\n      } else if (moduleName === 'ReactCompositeComponent' && (fnName === 'mountComponent' || fnName === 'updateComponent' || // TODO: receiveComponent()?\n      fnName === '_renderValidatedComponent')) {\n\n        if (this._currentElement.type === ReactMount.TopLevelWrapper) {\n          return func.apply(this, args);\n        }\n\n        var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID;\n        var isRender = fnName === '_renderValidatedComponent';\n        var isMount = fnName === 'mountComponent';\n\n        var mountStack = ReactDefaultPerf._mountStack;\n        var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];\n\n        if (isRender) {\n          addValue(entry.counts, rootNodeID, 1);\n        } else if (isMount) {\n          entry.created[rootNodeID] = true;\n          mountStack.push(0);\n        }\n\n        start = performanceNow();\n        rv = func.apply(this, args);\n        totalTime = performanceNow() - start;\n\n        if (isRender) {\n          addValue(entry.render, rootNodeID, totalTime);\n        } else if (isMount) {\n          var subMountTime = mountStack.pop();\n          mountStack[mountStack.length - 1] += totalTime;\n          addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);\n          addValue(entry.inclusive, rootNodeID, totalTime);\n        } else {\n          addValue(entry.inclusive, rootNodeID, totalTime);\n        }\n\n        entry.displayNames[rootNodeID] = {\n          current: this.getName(),\n          owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'\n        };\n\n        return rv;\n      } else {\n        return func.apply(this, args);\n      }\n    };\n  }\n};\n\nmodule.exports = ReactDefaultPerf;\n},{\"10\":10,\"152\":152,\"51\":51,\"65\":65,\"71\":71}],51:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactDefaultPerfAnalysis\n */\n\n'use strict';\n\nvar assign = _dereq_(23);\n\n// Don't try to save users less than 1.2ms (a number I made up)\nvar DONT_CARE_THRESHOLD = 1.2;\nvar DOM_OPERATION_TYPES = {\n  '_mountImageIntoNode': 'set innerHTML',\n  INSERT_MARKUP: 'set innerHTML',\n  MOVE_EXISTING: 'move',\n  REMOVE_NODE: 'remove',\n  SET_MARKUP: 'set innerHTML',\n  TEXT_CONTENT: 'set textContent',\n  'setValueForProperty': 'update attribute',\n  'setValueForAttribute': 'update attribute',\n  'deleteValueForProperty': 'remove attribute',\n  'dangerouslyReplaceNodeWithMarkupByID': 'replace'\n};\n\nfunction getTotalTime(measurements) {\n  // TODO: return number of DOM ops? could be misleading.\n  // TODO: measure dropped frames after reconcile?\n  // TODO: log total time of each reconcile and the top-level component\n  // class that triggered it.\n  var totalTime = 0;\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    totalTime += measurement.totalTime;\n  }\n  return totalTime;\n}\n\nfunction getDOMSummary(measurements) {\n  var items = [];\n  measurements.forEach(function (measurement) {\n    Object.keys(measurement.writes).forEach(function (id) {\n      measurement.writes[id].forEach(function (write) {\n        items.push({\n          id: id,\n          type: DOM_OPERATION_TYPES[write.type] || write.type,\n          args: write.args\n        });\n      });\n    });\n  });\n  return items;\n}\n\nfunction getExclusiveSummary(measurements) {\n  var candidates = {};\n  var displayName;\n\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n    for (var id in allIDs) {\n      displayName = measurement.displayNames[id].current;\n\n      candidates[displayName] = candidates[displayName] || {\n        componentName: displayName,\n        inclusive: 0,\n        exclusive: 0,\n        render: 0,\n        count: 0\n      };\n      if (measurement.render[id]) {\n        candidates[displayName].render += measurement.render[id];\n      }\n      if (measurement.exclusive[id]) {\n        candidates[displayName].exclusive += measurement.exclusive[id];\n      }\n      if (measurement.inclusive[id]) {\n        candidates[displayName].inclusive += measurement.inclusive[id];\n      }\n      if (measurement.counts[id]) {\n        candidates[displayName].count += measurement.counts[id];\n      }\n    }\n  }\n\n  // Now make a sorted array with the results.\n  var arr = [];\n  for (displayName in candidates) {\n    if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {\n      arr.push(candidates[displayName]);\n    }\n  }\n\n  arr.sort(function (a, b) {\n    return b.exclusive - a.exclusive;\n  });\n\n  return arr;\n}\n\nfunction getInclusiveSummary(measurements, onlyClean) {\n  var candidates = {};\n  var inclusiveKey;\n\n  for (var i = 0; i < measurements.length; i++) {\n    var measurement = measurements[i];\n    var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n    var cleanComponents;\n\n    if (onlyClean) {\n      cleanComponents = getUnchangedComponents(measurement);\n    }\n\n    for (var id in allIDs) {\n      if (onlyClean && !cleanComponents[id]) {\n        continue;\n      }\n\n      var displayName = measurement.displayNames[id];\n\n      // Inclusive time is not useful for many components without knowing where\n      // they are instantiated. So we aggregate inclusive time with both the\n      // owner and current displayName as the key.\n      inclusiveKey = displayName.owner + ' > ' + displayName.current;\n\n      candidates[inclusiveKey] = candidates[inclusiveKey] || {\n        componentName: inclusiveKey,\n        time: 0,\n        count: 0\n      };\n\n      if (measurement.inclusive[id]) {\n        candidates[inclusiveKey].time += measurement.inclusive[id];\n      }\n      if (measurement.counts[id]) {\n        candidates[inclusiveKey].count += measurement.counts[id];\n      }\n    }\n  }\n\n  // Now make a sorted array with the results.\n  var arr = [];\n  for (inclusiveKey in candidates) {\n    if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {\n      arr.push(candidates[inclusiveKey]);\n    }\n  }\n\n  arr.sort(function (a, b) {\n    return b.time - a.time;\n  });\n\n  return arr;\n}\n\nfunction getUnchangedComponents(measurement) {\n  // For a given reconcile, look at which components did not actually\n  // render anything to the DOM and return a mapping of their ID to\n  // the amount of time it took to render the entire subtree.\n  var cleanComponents = {};\n  var dirtyLeafIDs = Object.keys(measurement.writes);\n  var allIDs = assign({}, measurement.exclusive, measurement.inclusive);\n\n  for (var id in allIDs) {\n    var isDirty = false;\n    // For each component that rendered, see if a component that triggered\n    // a DOM op is in its subtree.\n    for (var i = 0; i < dirtyLeafIDs.length; i++) {\n      if (dirtyLeafIDs[i].indexOf(id) === 0) {\n        isDirty = true;\n        break;\n      }\n    }\n    // check if component newly created\n    if (measurement.created[id]) {\n      isDirty = true;\n    }\n    if (!isDirty && measurement.counts[id] > 0) {\n      cleanComponents[id] = true;\n    }\n  }\n  return cleanComponents;\n}\n\nvar ReactDefaultPerfAnalysis = {\n  getExclusiveSummary: getExclusiveSummary,\n  getInclusiveSummary: getInclusiveSummary,\n  getDOMSummary: getDOMSummary,\n  getTotalTime: getTotalTime\n};\n\nmodule.exports = ReactDefaultPerfAnalysis;\n},{\"23\":23}],52:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElement\n */\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(34);\n\nvar assign = _dereq_(23);\nvar canDefineProperty = _dereq_(104);\n\n// The Symbol used to tag the ReactElement type. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\nvar RESERVED_PROPS = {\n  key: true,\n  ref: true,\n  __self: true,\n  __source: true\n};\n\n/**\n * Base constructor for all React elements. This is only used to make this\n * work with a dynamic instanceof check. Nothing should live on this prototype.\n *\n * @param {*} type\n * @param {*} key\n * @param {string|object} ref\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @param {*} owner\n * @param {*} props\n * @internal\n */\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n  var element = {\n    // This tag allow us to uniquely identify this as a React Element\n    $$typeof: REACT_ELEMENT_TYPE,\n\n    // Built-in properties that belong on the element\n    type: type,\n    key: key,\n    ref: ref,\n    props: props,\n\n    // Record the component responsible for creating this element.\n    _owner: owner\n  };\n\n  if (\"development\" !== 'production') {\n    // The validation flag is currently mutative. We put it on\n    // an external backing store so that we can freeze the whole object.\n    // This can be replaced with a WeakMap once they are implemented in\n    // commonly used development environments.\n    element._store = {};\n\n    // To make comparing ReactElements easier for testing purposes, we make\n    // the validation flag non-enumerable (where possible, which should\n    // include every environment we run tests in), so the test framework\n    // ignores it.\n    if (canDefineProperty) {\n      Object.defineProperty(element._store, 'validated', {\n        configurable: false,\n        enumerable: false,\n        writable: true,\n        value: false\n      });\n      // self and source are DEV only properties.\n      Object.defineProperty(element, '_self', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: self\n      });\n      // Two elements created in two different places should be considered\n      // equal for testing purposes and therefore we hide it from enumeration.\n      Object.defineProperty(element, '_source', {\n        configurable: false,\n        enumerable: false,\n        writable: false,\n        value: source\n      });\n    } else {\n      element._store.validated = false;\n      element._self = self;\n      element._source = source;\n    }\n    Object.freeze(element.props);\n    Object.freeze(element);\n  }\n\n  return element;\n};\n\nReactElement.createElement = function (type, config, children) {\n  var propName;\n\n  // Reserved names are extracted\n  var props = {};\n\n  var key = null;\n  var ref = null;\n  var self = null;\n  var source = null;\n\n  if (config != null) {\n    ref = config.ref === undefined ? null : config.ref;\n    key = config.key === undefined ? null : '' + config.key;\n    self = config.__self === undefined ? null : config.__self;\n    source = config.__source === undefined ? null : config.__source;\n    // Remaining properties are added to a new props object\n    for (propName in config) {\n      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  // Resolve default props\n  if (type && type.defaultProps) {\n    var defaultProps = type.defaultProps;\n    for (propName in defaultProps) {\n      if (typeof props[propName] === 'undefined') {\n        props[propName] = defaultProps[propName];\n      }\n    }\n  }\n\n  return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n};\n\nReactElement.createFactory = function (type) {\n  var factory = ReactElement.createElement.bind(null, type);\n  // Expose the type on the factory and the prototype so that it can be\n  // easily accessed on elements. E.g. `<Foo />.type === Foo`.\n  // This should not be named `constructor` since this may not be the function\n  // that created the element, and it may not even be a constructor.\n  // Legacy hook TODO: Warn if this is accessed\n  factory.type = type;\n  return factory;\n};\n\nReactElement.cloneAndReplaceKey = function (oldElement, newKey) {\n  var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n\n  return newElement;\n};\n\nReactElement.cloneAndReplaceProps = function (oldElement, newProps) {\n  var newElement = ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, newProps);\n\n  if (\"development\" !== 'production') {\n    // If the key on the original is valid, then the clone is valid\n    newElement._store.validated = oldElement._store.validated;\n  }\n\n  return newElement;\n};\n\nReactElement.cloneElement = function (element, config, children) {\n  var propName;\n\n  // Original props are copied\n  var props = assign({}, element.props);\n\n  // Reserved names are extracted\n  var key = element.key;\n  var ref = element.ref;\n  // Self is preserved since the owner is preserved.\n  var self = element._self;\n  // Source is preserved since cloneElement is unlikely to be targeted by a\n  // transpiler, and the original source is probably a better indicator of the\n  // true owner.\n  var source = element._source;\n\n  // Owner will be preserved, unless ref is overridden\n  var owner = element._owner;\n\n  if (config != null) {\n    if (config.ref !== undefined) {\n      // Silently steal the ref from the parent.\n      ref = config.ref;\n      owner = ReactCurrentOwner.current;\n    }\n    if (config.key !== undefined) {\n      key = '' + config.key;\n    }\n    // Remaining properties override existing props\n    for (propName in config) {\n      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n        props[propName] = config[propName];\n      }\n    }\n  }\n\n  // Children can be more than one argument, and those are transferred onto\n  // the newly allocated props object.\n  var childrenLength = arguments.length - 2;\n  if (childrenLength === 1) {\n    props.children = children;\n  } else if (childrenLength > 1) {\n    var childArray = Array(childrenLength);\n    for (var i = 0; i < childrenLength; i++) {\n      childArray[i] = arguments[i + 2];\n    }\n    props.children = childArray;\n  }\n\n  return ReactElement(element.type, key, ref, self, source, owner, props);\n};\n\n/**\n * @param {?object} object\n * @return {boolean} True if `object` is a valid component.\n * @final\n */\nReactElement.isValidElement = function (object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n};\n\nmodule.exports = ReactElement;\n},{\"104\":104,\"23\":23,\"34\":34}],53:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactElementValidator\n */\n\n/**\n * ReactElementValidator provides a wrapper around a element factory\n * which validates the props passed to the element. This is intended to be\n * used only in DEV and could be replaced by a static type checker for languages\n * that support it.\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(52);\nvar ReactPropTypeLocations = _dereq_(73);\nvar ReactPropTypeLocationNames = _dereq_(72);\nvar ReactCurrentOwner = _dereq_(34);\n\nvar canDefineProperty = _dereq_(104);\nvar getIteratorFn = _dereq_(115);\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\nfunction getDeclarationErrorAddendum() {\n  if (ReactCurrentOwner.current) {\n    var name = ReactCurrentOwner.current.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\nvar ownerHasKeyUseWarning = {};\n\nvar loggedTypeFailures = {};\n\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\nfunction validateExplicitKey(element, parentType) {\n  if (!element._store || element._store.validated || element.key != null) {\n    return;\n  }\n  element._store.validated = true;\n\n  var addenda = getAddendaForKeyUse('uniqueKey', element, parentType);\n  if (addenda === null) {\n    // we already showed the warning\n    return;\n  }\n  \"development\" !== 'production' ? warning(false, 'Each child in an array or iterator should have a unique \"key\" prop.' + '%s%s%s', addenda.parentOrOwner || '', addenda.childOwner || '', addenda.url || '') : undefined;\n}\n\n/**\n * Shared warning and monitoring code for the key warnings.\n *\n * @internal\n * @param {string} messageType A key used for de-duping warnings.\n * @param {ReactElement} element Component that requires a key.\n * @param {*} parentType element's parent's type.\n * @returns {?object} A set of addenda to use in the warning message, or null\n * if the warning has already been shown before (and shouldn't be shown again).\n */\nfunction getAddendaForKeyUse(messageType, element, parentType) {\n  var addendum = getDeclarationErrorAddendum();\n  if (!addendum) {\n    var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n    if (parentName) {\n      addendum = ' Check the top-level render call using <' + parentName + '>.';\n    }\n  }\n\n  var memoizer = ownerHasKeyUseWarning[messageType] || (ownerHasKeyUseWarning[messageType] = {});\n  if (memoizer[addendum]) {\n    return null;\n  }\n  memoizer[addendum] = true;\n\n  var addenda = {\n    parentOrOwner: addendum,\n    url: ' See https://fb.me/react-warning-keys for more information.',\n    childOwner: null\n  };\n\n  // Usually the current owner is the offender, but if it accepts children as a\n  // property, it may be the creator of the child that's responsible for\n  // assigning it a key.\n  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n    // Give the component that originally created this child.\n    addenda.childOwner = ' It was passed a child from ' + element._owner.getName() + '.';\n  }\n\n  return addenda;\n}\n\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\nfunction validateChildKeys(node, parentType) {\n  if (typeof node !== 'object') {\n    return;\n  }\n  if (Array.isArray(node)) {\n    for (var i = 0; i < node.length; i++) {\n      var child = node[i];\n      if (ReactElement.isValidElement(child)) {\n        validateExplicitKey(child, parentType);\n      }\n    }\n  } else if (ReactElement.isValidElement(node)) {\n    // This element was passed in a valid location.\n    if (node._store) {\n      node._store.validated = true;\n    }\n  } else if (node) {\n    var iteratorFn = getIteratorFn(node);\n    // Entry iterators provide implicit keys.\n    if (iteratorFn) {\n      if (iteratorFn !== node.entries) {\n        var iterator = iteratorFn.call(node);\n        var step;\n        while (!(step = iterator.next()).done) {\n          if (ReactElement.isValidElement(step.value)) {\n            validateExplicitKey(step.value, parentType);\n          }\n        }\n      }\n    }\n  }\n}\n\n/**\n * Assert that the props are valid\n *\n * @param {string} componentName Name of the component for error messages.\n * @param {object} propTypes Map of prop name to a ReactPropType\n * @param {object} props\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @private\n */\nfunction checkPropTypes(componentName, propTypes, props, location) {\n  for (var propName in propTypes) {\n    if (propTypes.hasOwnProperty(propName)) {\n      var error;\n      // Prop type validation may throw. In case they do, we don't want to\n      // fail the render phase where it didn't fail before. So we log it.\n      // After these have been cleaned up, we'll let them throw.\n      try {\n        // This is intentionally an invariant that gets caught. It's the same\n        // behavior as without this statement except with a better message.\n        !(typeof propTypes[propName] === 'function') ? \"development\" !== 'production' ? invariant(false, '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(false) : undefined;\n        error = propTypes[propName](props, propName, componentName, location);\n      } catch (ex) {\n        error = ex;\n      }\n      \"development\" !== 'production' ? warning(!error || error instanceof Error, '%s: type specification of %s `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', ReactPropTypeLocationNames[location], propName, typeof error) : undefined;\n      if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n        // Only monitor this failure once because there tends to be a lot of the\n        // same error.\n        loggedTypeFailures[error.message] = true;\n\n        var addendum = getDeclarationErrorAddendum();\n        \"development\" !== 'production' ? warning(false, 'Failed propType: %s%s', error.message, addendum) : undefined;\n      }\n    }\n  }\n}\n\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\nfunction validatePropTypes(element) {\n  var componentClass = element.type;\n  if (typeof componentClass !== 'function') {\n    return;\n  }\n  var name = componentClass.displayName || componentClass.name;\n  if (componentClass.propTypes) {\n    checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);\n  }\n  if (typeof componentClass.getDefaultProps === 'function') {\n    \"development\" !== 'production' ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : undefined;\n  }\n}\n\nvar ReactElementValidator = {\n\n  createElement: function (type, props, children) {\n    var validType = typeof type === 'string' || typeof type === 'function';\n    // We warn in this case but don't throw. We expect the element creation to\n    // succeed and there will likely be errors in render.\n    \"development\" !== 'production' ? warning(validType, 'React.createElement: type should not be null, undefined, boolean, or ' + 'number. It should be a string (for DOM elements) or a ReactClass ' + '(for composite components).%s', getDeclarationErrorAddendum()) : undefined;\n\n    var element = ReactElement.createElement.apply(this, arguments);\n\n    // The result can be nullish if a mock or a custom function is used.\n    // TODO: Drop this when these are no longer allowed as the type argument.\n    if (element == null) {\n      return element;\n    }\n\n    // Skip key warning if the type isn't valid since our key validation logic\n    // doesn't expect a non-string/function type and can throw confusing errors.\n    // We don't want exception behavior to differ between dev and prod.\n    // (Rendering will throw with a helpful message and as soon as the type is\n    // fixed, the key warnings will appear.)\n    if (validType) {\n      for (var i = 2; i < arguments.length; i++) {\n        validateChildKeys(arguments[i], type);\n      }\n    }\n\n    validatePropTypes(element);\n\n    return element;\n  },\n\n  createFactory: function (type) {\n    var validatedFactory = ReactElementValidator.createElement.bind(null, type);\n    // Legacy hook TODO: Warn if this is accessed\n    validatedFactory.type = type;\n\n    if (\"development\" !== 'production') {\n      if (canDefineProperty) {\n        Object.defineProperty(validatedFactory, 'type', {\n          enumerable: false,\n          get: function () {\n            \"development\" !== 'production' ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : undefined;\n            Object.defineProperty(this, 'type', {\n              value: type\n            });\n            return type;\n          }\n        });\n      }\n    }\n\n    return validatedFactory;\n  },\n\n  cloneElement: function (element, props, children) {\n    var newElement = ReactElement.cloneElement.apply(this, arguments);\n    for (var i = 2; i < arguments.length; i++) {\n      validateChildKeys(arguments[i], newElement.type);\n    }\n    validatePropTypes(newElement);\n    return newElement;\n  }\n\n};\n\nmodule.exports = ReactElementValidator;\n},{\"104\":104,\"115\":115,\"144\":144,\"155\":155,\"34\":34,\"52\":52,\"72\":72,\"73\":73}],54:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponent\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(52);\nvar ReactEmptyComponentRegistry = _dereq_(55);\nvar ReactReconciler = _dereq_(76);\n\nvar assign = _dereq_(23);\n\nvar placeholderElement;\n\nvar ReactEmptyComponentInjection = {\n  injectEmptyComponent: function (component) {\n    placeholderElement = ReactElement.createElement(component);\n  }\n};\n\nvar ReactEmptyComponent = function (instantiate) {\n  this._currentElement = null;\n  this._rootNodeID = null;\n  this._renderedComponent = instantiate(placeholderElement);\n};\nassign(ReactEmptyComponent.prototype, {\n  construct: function (element) {},\n  mountComponent: function (rootID, transaction, context) {\n    ReactEmptyComponentRegistry.registerNullComponentID(rootID);\n    this._rootNodeID = rootID;\n    return ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, context);\n  },\n  receiveComponent: function () {},\n  unmountComponent: function (rootID, transaction, context) {\n    ReactReconciler.unmountComponent(this._renderedComponent);\n    ReactEmptyComponentRegistry.deregisterNullComponentID(this._rootNodeID);\n    this._rootNodeID = null;\n    this._renderedComponent = null;\n  }\n});\n\nReactEmptyComponent.injection = ReactEmptyComponentInjection;\n\nmodule.exports = ReactEmptyComponent;\n},{\"23\":23,\"52\":52,\"55\":55,\"76\":76}],55:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEmptyComponentRegistry\n */\n\n'use strict';\n\n// This registry keeps track of the React IDs of the components that rendered to\n// `null` (in reality a placeholder such as `noscript`)\nvar nullComponentIDsRegistry = {};\n\n/**\n * @param {string} id Component's `_rootNodeID`.\n * @return {boolean} True if the component is rendered to null.\n */\nfunction isNullComponentID(id) {\n  return !!nullComponentIDsRegistry[id];\n}\n\n/**\n * Mark the component as having rendered to null.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction registerNullComponentID(id) {\n  nullComponentIDsRegistry[id] = true;\n}\n\n/**\n * Unmark the component as having rendered to null: it renders to something now.\n * @param {string} id Component's `_rootNodeID`.\n */\nfunction deregisterNullComponentID(id) {\n  delete nullComponentIDsRegistry[id];\n}\n\nvar ReactEmptyComponentRegistry = {\n  isNullComponentID: isNullComponentID,\n  registerNullComponentID: registerNullComponentID,\n  deregisterNullComponentID: deregisterNullComponentID\n};\n\nmodule.exports = ReactEmptyComponentRegistry;\n},{}],56:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactErrorUtils\n * @typechecks\n */\n\n'use strict';\n\nvar caughtError = null;\n\n/**\n * Call a function while guarding against errors that happens within it.\n *\n * @param {?String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} a First argument\n * @param {*} b Second argument\n */\nfunction invokeGuardedCallback(name, func, a, b) {\n  try {\n    return func(a, b);\n  } catch (x) {\n    if (caughtError === null) {\n      caughtError = x;\n    }\n    return undefined;\n  }\n}\n\nvar ReactErrorUtils = {\n  invokeGuardedCallback: invokeGuardedCallback,\n\n  /**\n   * Invoked by ReactTestUtils.Simulate so that any errors thrown by the event\n   * handler are sure to be rethrown by rethrowCaughtError.\n   */\n  invokeGuardedCallbackWithCatch: invokeGuardedCallback,\n\n  /**\n   * During execution of guarded functions we will capture the first error which\n   * we will rethrow to be handled by the top level error handler.\n   */\n  rethrowCaughtError: function () {\n    if (caughtError) {\n      var error = caughtError;\n      caughtError = null;\n      throw error;\n    }\n  }\n};\n\nif (\"development\" !== 'production') {\n  /**\n   * To help development we can get better devtools integration by simulating a\n   * real browser event.\n   */\n  if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n    var fakeNode = document.createElement('react');\n    ReactErrorUtils.invokeGuardedCallback = function (name, func, a, b) {\n      var boundFunc = func.bind(null, a, b);\n      var evtType = 'react-' + name;\n      fakeNode.addEventListener(evtType, boundFunc, false);\n      var evt = document.createEvent('Event');\n      evt.initEvent(evtType, false, false);\n      fakeNode.dispatchEvent(evt);\n      fakeNode.removeEventListener(evtType, boundFunc, false);\n    };\n  }\n}\n\nmodule.exports = ReactErrorUtils;\n},{}],57:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventEmitterMixin\n */\n\n'use strict';\n\nvar EventPluginHub = _dereq_(16);\n\nfunction runEventQueueInBatch(events) {\n  EventPluginHub.enqueueEvents(events);\n  EventPluginHub.processEventQueue(false);\n}\n\nvar ReactEventEmitterMixin = {\n\n  /**\n   * Streams a fired top-level event to `EventPluginHub` where plugins have the\n   * opportunity to create `ReactEvent`s to be dispatched.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {object} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native environment event.\n   */\n  handleTopLevel: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget);\n    runEventQueueInBatch(events);\n  }\n};\n\nmodule.exports = ReactEventEmitterMixin;\n},{\"16\":16}],58:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactEventListener\n * @typechecks static-only\n */\n\n'use strict';\n\nvar EventListener = _dereq_(129);\nvar ExecutionEnvironment = _dereq_(130);\nvar PooledClass = _dereq_(24);\nvar ReactInstanceHandles = _dereq_(61);\nvar ReactMount = _dereq_(65);\nvar ReactUpdates = _dereq_(83);\n\nvar assign = _dereq_(23);\nvar getEventTarget = _dereq_(114);\nvar getUnboundedScrollPosition = _dereq_(141);\n\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\n/**\n * Finds the parent React component of `node`.\n *\n * @param {*} node\n * @return {?DOMEventTarget} Parent container, or `null` if the specified node\n *                           is not nested.\n */\nfunction findParent(node) {\n  // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n  // traversal, but caching is difficult to do correctly without using a\n  // mutation observer to listen for all DOM changes.\n  var nodeID = ReactMount.getID(node);\n  var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n  var container = ReactMount.findReactContainerForID(rootID);\n  var parent = ReactMount.getFirstReactDOM(container);\n  return parent;\n}\n\n// Used to store ancestor hierarchy in top level callback\nfunction TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {\n  this.topLevelType = topLevelType;\n  this.nativeEvent = nativeEvent;\n  this.ancestors = [];\n}\nassign(TopLevelCallbackBookKeeping.prototype, {\n  destructor: function () {\n    this.topLevelType = null;\n    this.nativeEvent = null;\n    this.ancestors.length = 0;\n  }\n});\nPooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);\n\nfunction handleTopLevelImpl(bookKeeping) {\n  // TODO: Re-enable event.path handling\n  //\n  // if (bookKeeping.nativeEvent.path && bookKeeping.nativeEvent.path.length > 1) {\n  //   // New browsers have a path attribute on native events\n  //   handleTopLevelWithPath(bookKeeping);\n  // } else {\n  //   // Legacy browsers don't have a path attribute on native events\n  //   handleTopLevelWithoutPath(bookKeeping);\n  // }\n\n  void handleTopLevelWithPath; // temporarily unused\n  handleTopLevelWithoutPath(bookKeeping);\n}\n\n// Legacy browsers don't have a path attribute on native events\nfunction handleTopLevelWithoutPath(bookKeeping) {\n  var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window;\n\n  // Loop through the hierarchy, in case there's any nested components.\n  // It's important that we build the array of ancestors before calling any\n  // event handlers, because event handlers can modify the DOM, leading to\n  // inconsistencies with ReactMount's node cache. See #1105.\n  var ancestor = topLevelTarget;\n  while (ancestor) {\n    bookKeeping.ancestors.push(ancestor);\n    ancestor = findParent(ancestor);\n  }\n\n  for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n    topLevelTarget = bookKeeping.ancestors[i];\n    var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';\n    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n  }\n}\n\n// New browsers have a path attribute on native events\nfunction handleTopLevelWithPath(bookKeeping) {\n  var path = bookKeeping.nativeEvent.path;\n  var currentNativeTarget = path[0];\n  var eventsFired = 0;\n  for (var i = 0; i < path.length; i++) {\n    var currentPathElement = path[i];\n    if (currentPathElement.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE) {\n      currentNativeTarget = path[i + 1];\n    }\n    // TODO: slow\n    var reactParent = ReactMount.getFirstReactDOM(currentPathElement);\n    if (reactParent === currentPathElement) {\n      var currentPathElementID = ReactMount.getID(currentPathElement);\n      var newRootID = ReactInstanceHandles.getReactRootIDFromNodeID(currentPathElementID);\n      bookKeeping.ancestors.push(currentPathElement);\n\n      var topLevelTargetID = ReactMount.getID(currentPathElement) || '';\n      eventsFired++;\n      ReactEventListener._handleTopLevel(bookKeeping.topLevelType, currentPathElement, topLevelTargetID, bookKeeping.nativeEvent, currentNativeTarget);\n\n      // Jump to the root of this React render tree\n      while (currentPathElementID !== newRootID) {\n        i++;\n        currentPathElement = path[i];\n        currentPathElementID = ReactMount.getID(currentPathElement);\n      }\n    }\n  }\n  if (eventsFired === 0) {\n    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, window, '', bookKeeping.nativeEvent, getEventTarget(bookKeeping.nativeEvent));\n  }\n}\n\nfunction scrollValueMonitor(cb) {\n  var scrollPosition = getUnboundedScrollPosition(window);\n  cb(scrollPosition);\n}\n\nvar ReactEventListener = {\n  _enabled: true,\n  _handleTopLevel: null,\n\n  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,\n\n  setHandleTopLevel: function (handleTopLevel) {\n    ReactEventListener._handleTopLevel = handleTopLevel;\n  },\n\n  setEnabled: function (enabled) {\n    ReactEventListener._enabled = !!enabled;\n  },\n\n  isEnabled: function () {\n    return ReactEventListener._enabled;\n  },\n\n  /**\n   * Traps top-level events by using event bubbling.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapBubbledEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  /**\n   * Traps a top-level event by using event capturing.\n   *\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {string} handlerBaseName Event name (e.g. \"click\").\n   * @param {object} handle Element on which to attach listener.\n   * @return {?object} An object with a remove function which will forcefully\n   *                  remove the listener.\n   * @internal\n   */\n  trapCapturedEvent: function (topLevelType, handlerBaseName, handle) {\n    var element = handle;\n    if (!element) {\n      return null;\n    }\n    return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));\n  },\n\n  monitorScrollValue: function (refresh) {\n    var callback = scrollValueMonitor.bind(null, refresh);\n    EventListener.listen(window, 'scroll', callback);\n  },\n\n  dispatchEvent: function (topLevelType, nativeEvent) {\n    if (!ReactEventListener._enabled) {\n      return;\n    }\n\n    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);\n    try {\n      // Event queue being processed in the same cycle allows\n      // `preventDefault`.\n      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);\n    } finally {\n      TopLevelCallbackBookKeeping.release(bookKeeping);\n    }\n  }\n};\n\nmodule.exports = ReactEventListener;\n},{\"114\":114,\"129\":129,\"130\":130,\"141\":141,\"23\":23,\"24\":24,\"61\":61,\"65\":65,\"83\":83}],59:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInjection\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar EventPluginHub = _dereq_(16);\nvar ReactComponentEnvironment = _dereq_(32);\nvar ReactClass = _dereq_(29);\nvar ReactEmptyComponent = _dereq_(54);\nvar ReactBrowserEventEmitter = _dereq_(26);\nvar ReactNativeComponent = _dereq_(68);\nvar ReactPerf = _dereq_(71);\nvar ReactRootIndex = _dereq_(78);\nvar ReactUpdates = _dereq_(83);\n\nvar ReactInjection = {\n  Component: ReactComponentEnvironment.injection,\n  Class: ReactClass.injection,\n  DOMProperty: DOMProperty.injection,\n  EmptyComponent: ReactEmptyComponent.injection,\n  EventPluginHub: EventPluginHub.injection,\n  EventEmitter: ReactBrowserEventEmitter.injection,\n  NativeComponent: ReactNativeComponent.injection,\n  Perf: ReactPerf.injection,\n  RootIndex: ReactRootIndex.injection,\n  Updates: ReactUpdates.injection\n};\n\nmodule.exports = ReactInjection;\n},{\"10\":10,\"16\":16,\"26\":26,\"29\":29,\"32\":32,\"54\":54,\"68\":68,\"71\":71,\"78\":78,\"83\":83}],60:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInputSelection\n */\n\n'use strict';\n\nvar ReactDOMSelection = _dereq_(44);\n\nvar containsNode = _dereq_(133);\nvar focusNode = _dereq_(138);\nvar getActiveElement = _dereq_(139);\n\nfunction isInDocument(node) {\n  return containsNode(document.documentElement, node);\n}\n\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\nvar ReactInputSelection = {\n\n  hasSelectionCapabilities: function (elem) {\n    var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n    return nodeName && (nodeName === 'input' && elem.type === 'text' || nodeName === 'textarea' || elem.contentEditable === 'true');\n  },\n\n  getSelectionInformation: function () {\n    var focusedElem = getActiveElement();\n    return {\n      focusedElem: focusedElem,\n      selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null\n    };\n  },\n\n  /**\n   * @restoreSelection: If any selection information was potentially lost,\n   * restore it. This is useful when performing operations that could remove dom\n   * nodes and place them back in, resulting in focus being lost.\n   */\n  restoreSelection: function (priorSelectionInformation) {\n    var curFocusedElem = getActiveElement();\n    var priorFocusedElem = priorSelectionInformation.focusedElem;\n    var priorSelectionRange = priorSelectionInformation.selectionRange;\n    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {\n        ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);\n      }\n      focusNode(priorFocusedElem);\n    }\n  },\n\n  /**\n   * @getSelection: Gets the selection bounds of a focused textarea, input or\n   * contentEditable node.\n   * -@input: Look up selection bounds of this input\n   * -@return {start: selectionStart, end: selectionEnd}\n   */\n  getSelection: function (input) {\n    var selection;\n\n    if ('selectionStart' in input) {\n      // Modern browser with input or textarea.\n      selection = {\n        start: input.selectionStart,\n        end: input.selectionEnd\n      };\n    } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n      // IE8 input.\n      var range = document.selection.createRange();\n      // There can only be one selection per document in IE, so it must\n      // be in our element.\n      if (range.parentElement() === input) {\n        selection = {\n          start: -range.moveStart('character', -input.value.length),\n          end: -range.moveEnd('character', -input.value.length)\n        };\n      }\n    } else {\n      // Content editable or old IE textarea.\n      selection = ReactDOMSelection.getOffsets(input);\n    }\n\n    return selection || { start: 0, end: 0 };\n  },\n\n  /**\n   * @setSelection: Sets the selection bounds of a textarea or input and focuses\n   * the input.\n   * -@input     Set selection bounds of this input or textarea\n   * -@offsets   Object of same form that is returned from get*\n   */\n  setSelection: function (input, offsets) {\n    var start = offsets.start;\n    var end = offsets.end;\n    if (typeof end === 'undefined') {\n      end = start;\n    }\n\n    if ('selectionStart' in input) {\n      input.selectionStart = start;\n      input.selectionEnd = Math.min(end, input.value.length);\n    } else if (document.selection && (input.nodeName && input.nodeName.toLowerCase() === 'input')) {\n      var range = input.createTextRange();\n      range.collapse(true);\n      range.moveStart('character', start);\n      range.moveEnd('character', end - start);\n      range.select();\n    } else {\n      ReactDOMSelection.setOffsets(input, offsets);\n    }\n  }\n};\n\nmodule.exports = ReactInputSelection;\n},{\"133\":133,\"138\":138,\"139\":139,\"44\":44}],61:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceHandles\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactRootIndex = _dereq_(78);\n\nvar invariant = _dereq_(144);\n\nvar SEPARATOR = '.';\nvar SEPARATOR_LENGTH = SEPARATOR.length;\n\n/**\n * Maximum depth of traversals before we consider the possibility of a bad ID.\n */\nvar MAX_TREE_DEPTH = 10000;\n\n/**\n * Creates a DOM ID prefix to use when mounting React components.\n *\n * @param {number} index A unique integer\n * @return {string} React root ID.\n * @internal\n */\nfunction getReactRootIDString(index) {\n  return SEPARATOR + index.toString(36);\n}\n\n/**\n * Checks if a character in the supplied ID is a separator or the end.\n *\n * @param {string} id A React DOM ID.\n * @param {number} index Index of the character to check.\n * @return {boolean} True if the character is a separator or end of the ID.\n * @private\n */\nfunction isBoundary(id, index) {\n  return id.charAt(index) === SEPARATOR || index === id.length;\n}\n\n/**\n * Checks if the supplied string is a valid React DOM ID.\n *\n * @param {string} id A React DOM ID, maybe.\n * @return {boolean} True if the string is a valid React DOM ID.\n * @private\n */\nfunction isValidID(id) {\n  return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;\n}\n\n/**\n * Checks if the first ID is an ancestor of or equal to the second ID.\n *\n * @param {string} ancestorID\n * @param {string} descendantID\n * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.\n * @internal\n */\nfunction isAncestorIDOf(ancestorID, descendantID) {\n  return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length);\n}\n\n/**\n * Gets the parent ID of the supplied React DOM ID, `id`.\n *\n * @param {string} id ID of a component.\n * @return {string} ID of the parent, or an empty string.\n * @private\n */\nfunction getParentID(id) {\n  return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';\n}\n\n/**\n * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the\n * supplied `destinationID`. If they are equal, the ID is returned.\n *\n * @param {string} ancestorID ID of an ancestor node of `destinationID`.\n * @param {string} destinationID ID of the destination node.\n * @return {string} Next ID on the path from `ancestorID` to `destinationID`.\n * @private\n */\nfunction getNextDescendantID(ancestorID, destinationID) {\n  !(isValidID(ancestorID) && isValidID(destinationID)) ? \"development\" !== 'production' ? invariant(false, 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(false) : undefined;\n  !isAncestorIDOf(ancestorID, destinationID) ? \"development\" !== 'production' ? invariant(false, 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(false) : undefined;\n  if (ancestorID === destinationID) {\n    return ancestorID;\n  }\n  // Skip over the ancestor and the immediate separator. Traverse until we hit\n  // another separator or we reach the end of `destinationID`.\n  var start = ancestorID.length + SEPARATOR_LENGTH;\n  var i;\n  for (i = start; i < destinationID.length; i++) {\n    if (isBoundary(destinationID, i)) {\n      break;\n    }\n  }\n  return destinationID.substr(0, i);\n}\n\n/**\n * Gets the nearest common ancestor ID of two IDs.\n *\n * Using this ID scheme, the nearest common ancestor ID is the longest common\n * prefix of the two IDs that immediately preceded a \"marker\" in both strings.\n *\n * @param {string} oneID\n * @param {string} twoID\n * @return {string} Nearest common ancestor ID, or the empty string if none.\n * @private\n */\nfunction getFirstCommonAncestorID(oneID, twoID) {\n  var minLength = Math.min(oneID.length, twoID.length);\n  if (minLength === 0) {\n    return '';\n  }\n  var lastCommonMarkerIndex = 0;\n  // Use `<=` to traverse until the \"EOL\" of the shorter string.\n  for (var i = 0; i <= minLength; i++) {\n    if (isBoundary(oneID, i) && isBoundary(twoID, i)) {\n      lastCommonMarkerIndex = i;\n    } else if (oneID.charAt(i) !== twoID.charAt(i)) {\n      break;\n    }\n  }\n  var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);\n  !isValidID(longestCommonID) ? \"development\" !== 'production' ? invariant(false, 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(false) : undefined;\n  return longestCommonID;\n}\n\n/**\n * Traverses the parent path between two IDs (either up or down). The IDs must\n * not be the same, and there must exist a parent path between them. If the\n * callback returns `false`, traversal is stopped.\n *\n * @param {?string} start ID at which to start traversal.\n * @param {?string} stop ID at which to end traversal.\n * @param {function} cb Callback to invoke each ID with.\n * @param {*} arg Argument to invoke the callback with.\n * @param {?boolean} skipFirst Whether or not to skip the first node.\n * @param {?boolean} skipLast Whether or not to skip the last node.\n * @private\n */\nfunction traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {\n  start = start || '';\n  stop = stop || '';\n  !(start !== stop) ? \"development\" !== 'production' ? invariant(false, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(false) : undefined;\n  var traverseUp = isAncestorIDOf(stop, start);\n  !(traverseUp || isAncestorIDOf(start, stop)) ? \"development\" !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(false) : undefined;\n  // Traverse from `start` to `stop` one depth at a time.\n  var depth = 0;\n  var traverse = traverseUp ? getParentID : getNextDescendantID;\n  for (var id = start;; /* until break */id = traverse(id, stop)) {\n    var ret;\n    if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {\n      ret = cb(id, traverseUp, arg);\n    }\n    if (ret === false || id === stop) {\n      // Only break //after// visiting `stop`.\n      break;\n    }\n    !(depth++ < MAX_TREE_DEPTH) ? \"development\" !== 'production' ? invariant(false, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop, id) : invariant(false) : undefined;\n  }\n}\n\n/**\n * Manages the IDs assigned to DOM representations of React components. This\n * uses a specific scheme in order to traverse the DOM efficiently (e.g. in\n * order to simulate events).\n *\n * @internal\n */\nvar ReactInstanceHandles = {\n\n  /**\n   * Constructs a React root ID\n   * @return {string} A React root ID.\n   */\n  createReactRootID: function () {\n    return getReactRootIDString(ReactRootIndex.createReactRootIndex());\n  },\n\n  /**\n   * Constructs a React ID by joining a root ID with a name.\n   *\n   * @param {string} rootID Root ID of a parent component.\n   * @param {string} name A component's name (as flattened children).\n   * @return {string} A React ID.\n   * @internal\n   */\n  createReactID: function (rootID, name) {\n    return rootID + name;\n  },\n\n  /**\n   * Gets the DOM ID of the React component that is the root of the tree that\n   * contains the React component with the supplied DOM ID.\n   *\n   * @param {string} id DOM ID of a React component.\n   * @return {?string} DOM ID of the React component that is the root.\n   * @internal\n   */\n  getReactRootIDFromNodeID: function (id) {\n    if (id && id.charAt(0) === SEPARATOR && id.length > 1) {\n      var index = id.indexOf(SEPARATOR, 1);\n      return index > -1 ? id.substr(0, index) : id;\n    }\n    return null;\n  },\n\n  /**\n   * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n   * should would receive a `mouseEnter` or `mouseLeave` event.\n   *\n   * NOTE: Does not invoke the callback on the nearest common ancestor because\n   * nothing \"entered\" or \"left\" that element.\n   *\n   * @param {string} leaveID ID being left.\n   * @param {string} enterID ID being entered.\n   * @param {function} cb Callback to invoke on each entered/left ID.\n   * @param {*} upArg Argument to invoke the callback with on left IDs.\n   * @param {*} downArg Argument to invoke the callback with on entered IDs.\n   * @internal\n   */\n  traverseEnterLeave: function (leaveID, enterID, cb, upArg, downArg) {\n    var ancestorID = getFirstCommonAncestorID(leaveID, enterID);\n    if (ancestorID !== leaveID) {\n      traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);\n    }\n    if (ancestorID !== enterID) {\n      traverseParentPath(ancestorID, enterID, cb, downArg, true, false);\n    }\n  },\n\n  /**\n   * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n   *\n   * NOTE: This traversal happens on IDs without touching the DOM.\n   *\n   * @param {string} targetID ID of the target node.\n   * @param {function} cb Callback to invoke.\n   * @param {*} arg Argument to invoke the callback with.\n   * @internal\n   */\n  traverseTwoPhase: function (targetID, cb, arg) {\n    if (targetID) {\n      traverseParentPath('', targetID, cb, arg, true, false);\n      traverseParentPath(targetID, '', cb, arg, false, true);\n    }\n  },\n\n  /**\n   * Same as `traverseTwoPhase` but skips the `targetID`.\n   */\n  traverseTwoPhaseSkipTarget: function (targetID, cb, arg) {\n    if (targetID) {\n      traverseParentPath('', targetID, cb, arg, true, true);\n      traverseParentPath(targetID, '', cb, arg, true, true);\n    }\n  },\n\n  /**\n   * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For\n   * example, passing `.0.$row-0.1` would result in `cb` getting called\n   * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.\n   *\n   * NOTE: This traversal happens on IDs without touching the DOM.\n   *\n   * @param {string} targetID ID of the target node.\n   * @param {function} cb Callback to invoke.\n   * @param {*} arg Argument to invoke the callback with.\n   * @internal\n   */\n  traverseAncestors: function (targetID, cb, arg) {\n    traverseParentPath('', targetID, cb, arg, true, false);\n  },\n\n  getFirstCommonAncestorID: getFirstCommonAncestorID,\n\n  /**\n   * Exposed for unit testing.\n   * @private\n   */\n  _getNextDescendantID: getNextDescendantID,\n\n  isAncestorIDOf: isAncestorIDOf,\n\n  SEPARATOR: SEPARATOR\n\n};\n\nmodule.exports = ReactInstanceHandles;\n},{\"144\":144,\"78\":78}],62:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactInstanceMap\n */\n\n'use strict';\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n */\n\n// TODO: Replace this with ES6: var ReactInstanceMap = new Map();\nvar ReactInstanceMap = {\n\n  /**\n   * This API should be called `delete` but we'd have to make sure to always\n   * transform these to strings for IE support. When this transform is fully\n   * supported we can rename it.\n   */\n  remove: function (key) {\n    key._reactInternalInstance = undefined;\n  },\n\n  get: function (key) {\n    return key._reactInternalInstance;\n  },\n\n  has: function (key) {\n    return key._reactInternalInstance !== undefined;\n  },\n\n  set: function (key, value) {\n    key._reactInternalInstance = value;\n  }\n\n};\n\nmodule.exports = ReactInstanceMap;\n},{}],63:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactIsomorphic\n */\n\n'use strict';\n\nvar ReactChildren = _dereq_(28);\nvar ReactComponent = _dereq_(30);\nvar ReactClass = _dereq_(29);\nvar ReactDOMFactories = _dereq_(38);\nvar ReactElement = _dereq_(52);\nvar ReactElementValidator = _dereq_(53);\nvar ReactPropTypes = _dereq_(74);\nvar ReactVersion = _dereq_(84);\n\nvar assign = _dereq_(23);\nvar onlyChild = _dereq_(121);\n\nvar createElement = ReactElement.createElement;\nvar createFactory = ReactElement.createFactory;\nvar cloneElement = ReactElement.cloneElement;\n\nif (\"development\" !== 'production') {\n  createElement = ReactElementValidator.createElement;\n  createFactory = ReactElementValidator.createFactory;\n  cloneElement = ReactElementValidator.cloneElement;\n}\n\nvar React = {\n\n  // Modern\n\n  Children: {\n    map: ReactChildren.map,\n    forEach: ReactChildren.forEach,\n    count: ReactChildren.count,\n    toArray: ReactChildren.toArray,\n    only: onlyChild\n  },\n\n  Component: ReactComponent,\n\n  createElement: createElement,\n  cloneElement: cloneElement,\n  isValidElement: ReactElement.isValidElement,\n\n  // Classic\n\n  PropTypes: ReactPropTypes,\n  createClass: ReactClass.createClass,\n  createFactory: createFactory,\n  createMixin: function (mixin) {\n    // Currently a noop. Will be used to validate and trace mixins.\n    return mixin;\n  },\n\n  // This looks DOM specific but these are actually isomorphic helpers\n  // since they are just generating DOM strings.\n  DOM: ReactDOMFactories,\n\n  version: ReactVersion,\n\n  // Hook for JSX spread, don't use this for anything else.\n  __spread: assign\n};\n\nmodule.exports = React;\n},{\"121\":121,\"23\":23,\"28\":28,\"29\":29,\"30\":30,\"38\":38,\"52\":52,\"53\":53,\"74\":74,\"84\":84}],64:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMarkupChecksum\n */\n\n'use strict';\n\nvar adler32 = _dereq_(103);\n\nvar TAG_END = /\\/?>/;\n\nvar ReactMarkupChecksum = {\n  CHECKSUM_ATTR_NAME: 'data-react-checksum',\n\n  /**\n   * @param {string} markup Markup string\n   * @return {string} Markup string with checksum attribute attached\n   */\n  addChecksumToMarkup: function (markup) {\n    var checksum = adler32(markup);\n\n    // Add checksum (handle both parent tags and self-closing tags)\n    return markup.replace(TAG_END, ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '=\"' + checksum + '\"$&');\n  },\n\n  /**\n   * @param {string} markup to use\n   * @param {DOMElement} element root React element\n   * @returns {boolean} whether or not the markup is the same\n   */\n  canReuseMarkup: function (markup, element) {\n    var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);\n    var markupChecksum = adler32(markup);\n    return markupChecksum === existingChecksum;\n  }\n};\n\nmodule.exports = ReactMarkupChecksum;\n},{\"103\":103}],65:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMount\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\nvar ReactBrowserEventEmitter = _dereq_(26);\nvar ReactCurrentOwner = _dereq_(34);\nvar ReactDOMFeatureFlags = _dereq_(39);\nvar ReactElement = _dereq_(52);\nvar ReactEmptyComponentRegistry = _dereq_(55);\nvar ReactInstanceHandles = _dereq_(61);\nvar ReactInstanceMap = _dereq_(62);\nvar ReactMarkupChecksum = _dereq_(64);\nvar ReactPerf = _dereq_(71);\nvar ReactReconciler = _dereq_(76);\nvar ReactUpdateQueue = _dereq_(82);\nvar ReactUpdates = _dereq_(83);\n\nvar assign = _dereq_(23);\nvar emptyObject = _dereq_(137);\nvar containsNode = _dereq_(133);\nvar instantiateReactComponent = _dereq_(118);\nvar invariant = _dereq_(144);\nvar setInnerHTML = _dereq_(124);\nvar shouldUpdateReactComponent = _dereq_(126);\nvar validateDOMNesting = _dereq_(128);\nvar warning = _dereq_(155);\n\nvar ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;\nvar nodeCache = {};\n\nvar ELEMENT_NODE_TYPE = 1;\nvar DOC_NODE_TYPE = 9;\nvar DOCUMENT_FRAGMENT_NODE_TYPE = 11;\n\nvar ownerDocumentContextKey = '__ReactMount_ownerDocument$' + Math.random().toString(36).slice(2);\n\n/** Mapping from reactRootID to React component instance. */\nvar instancesByReactRootID = {};\n\n/** Mapping from reactRootID to `container` nodes. */\nvar containersByReactRootID = {};\n\nif (\"development\" !== 'production') {\n  /** __DEV__-only mapping from reactRootID to root elements. */\n  var rootElementsByReactRootID = {};\n}\n\n// Used to store breadth-first search state in findComponentRoot.\nvar findComponentRootReusableArray = [];\n\n/**\n * Finds the index of the first character\n * that's not common between the two given strings.\n *\n * @return {number} the index of the character where the strings diverge\n */\nfunction firstDifferenceIndex(string1, string2) {\n  var minLen = Math.min(string1.length, string2.length);\n  for (var i = 0; i < minLen; i++) {\n    if (string1.charAt(i) !== string2.charAt(i)) {\n      return i;\n    }\n  }\n  return string1.length === string2.length ? -1 : minLen;\n}\n\n/**\n * @param {DOMElement|DOMDocument} container DOM element that may contain\n * a React component\n * @return {?*} DOM element that may have the reactRoot ID, or null.\n */\nfunction getReactRootElementInContainer(container) {\n  if (!container) {\n    return null;\n  }\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    return container.documentElement;\n  } else {\n    return container.firstChild;\n  }\n}\n\n/**\n * @param {DOMElement} container DOM element that may contain a React component.\n * @return {?string} A \"reactRoot\" ID, if a React component is rendered.\n */\nfunction getReactRootID(container) {\n  var rootElement = getReactRootElementInContainer(container);\n  return rootElement && ReactMount.getID(rootElement);\n}\n\n/**\n * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form\n * element can return its control whose name or ID equals ATTR_NAME. All\n * DOM nodes support `getAttributeNode` but this can also get called on\n * other objects so just return '' if we're given something other than a\n * DOM node (such as window).\n *\n * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.\n * @return {string} ID of the supplied `domNode`.\n */\nfunction getID(node) {\n  var id = internalGetID(node);\n  if (id) {\n    if (nodeCache.hasOwnProperty(id)) {\n      var cached = nodeCache[id];\n      if (cached !== node) {\n        !!isValid(cached, id) ? \"development\" !== 'production' ? invariant(false, 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(false) : undefined;\n\n        nodeCache[id] = node;\n      }\n    } else {\n      nodeCache[id] = node;\n    }\n  }\n\n  return id;\n}\n\nfunction internalGetID(node) {\n  // If node is something like a window, document, or text node, none of\n  // which support attributes or a .getAttribute method, gracefully return\n  // the empty string, as if the attribute were missing.\n  return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';\n}\n\n/**\n * Sets the React-specific ID of the given node.\n *\n * @param {DOMElement} node The DOM node whose ID will be set.\n * @param {string} id The value of the ID attribute.\n */\nfunction setID(node, id) {\n  var oldID = internalGetID(node);\n  if (oldID !== id) {\n    delete nodeCache[oldID];\n  }\n  node.setAttribute(ATTR_NAME, id);\n  nodeCache[id] = node;\n}\n\n/**\n * Finds the node with the supplied React-generated DOM ID.\n *\n * @param {string} id A React-generated DOM ID.\n * @return {DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNode(id) {\n  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n    nodeCache[id] = ReactMount.findReactNodeByID(id);\n  }\n  return nodeCache[id];\n}\n\n/**\n * Finds the node with the supplied public React instance.\n *\n * @param {*} instance A public React instance.\n * @return {?DOMElement} DOM node with the suppled `id`.\n * @internal\n */\nfunction getNodeFromInstance(instance) {\n  var id = ReactInstanceMap.get(instance)._rootNodeID;\n  if (ReactEmptyComponentRegistry.isNullComponentID(id)) {\n    return null;\n  }\n  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {\n    nodeCache[id] = ReactMount.findReactNodeByID(id);\n  }\n  return nodeCache[id];\n}\n\n/**\n * A node is \"valid\" if it is contained by a currently mounted container.\n *\n * This means that the node does not have to be contained by a document in\n * order to be considered valid.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @param {string} id The expected ID of the node.\n * @return {boolean} Whether the node is contained by a mounted container.\n */\nfunction isValid(node, id) {\n  if (node) {\n    !(internalGetID(node) === id) ? \"development\" !== 'production' ? invariant(false, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(false) : undefined;\n\n    var container = ReactMount.findReactContainerForID(id);\n    if (container && containsNode(container, node)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/**\n * Causes the cache to forget about one React-specific ID.\n *\n * @param {string} id The ID to forget.\n */\nfunction purgeID(id) {\n  delete nodeCache[id];\n}\n\nvar deepestNodeSoFar = null;\nfunction findDeepestCachedAncestorImpl(ancestorID) {\n  var ancestor = nodeCache[ancestorID];\n  if (ancestor && isValid(ancestor, ancestorID)) {\n    deepestNodeSoFar = ancestor;\n  } else {\n    // This node isn't populated in the cache, so presumably none of its\n    // descendants are. Break out of the loop.\n    return false;\n  }\n}\n\n/**\n * Return the deepest cached node whose ID is a prefix of `targetID`.\n */\nfunction findDeepestCachedAncestor(targetID) {\n  deepestNodeSoFar = null;\n  ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);\n\n  var foundNode = deepestNodeSoFar;\n  deepestNodeSoFar = null;\n  return foundNode;\n}\n\n/**\n * Mounts this component and inserts it into the DOM.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {ReactReconcileTransaction} transaction\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup, context) {\n  if (ReactDOMFeatureFlags.useCreateElement) {\n    context = assign({}, context);\n    if (container.nodeType === DOC_NODE_TYPE) {\n      context[ownerDocumentContextKey] = container;\n    } else {\n      context[ownerDocumentContextKey] = container.ownerDocument;\n    }\n  }\n  if (\"development\" !== 'production') {\n    if (context === emptyObject) {\n      context = {};\n    }\n    var tag = container.nodeName.toLowerCase();\n    context[validateDOMNesting.ancestorInfoContextKey] = validateDOMNesting.updatedAncestorInfo(null, tag, null);\n  }\n  var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, context);\n  componentInstance._renderedComponent._topLevelWrapper = componentInstance;\n  ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup, transaction);\n}\n\n/**\n * Batched mount.\n *\n * @param {ReactComponent} componentInstance The instance to mount.\n * @param {string} rootID DOM ID of the root node.\n * @param {DOMElement} container DOM element to mount into.\n * @param {boolean} shouldReuseMarkup If true, do not insert markup\n */\nfunction batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup, context) {\n  var transaction = ReactUpdates.ReactReconcileTransaction.getPooled(\n  /* forceHTML */shouldReuseMarkup);\n  transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup, context);\n  ReactUpdates.ReactReconcileTransaction.release(transaction);\n}\n\n/**\n * Unmounts a component and removes it from the DOM.\n *\n * @param {ReactComponent} instance React component instance.\n * @param {DOMElement} container DOM element to unmount from.\n * @final\n * @internal\n * @see {ReactMount.unmountComponentAtNode}\n */\nfunction unmountComponentFromNode(instance, container) {\n  ReactReconciler.unmountComponent(instance);\n\n  if (container.nodeType === DOC_NODE_TYPE) {\n    container = container.documentElement;\n  }\n\n  // http://jsperf.com/emptying-a-node\n  while (container.lastChild) {\n    container.removeChild(container.lastChild);\n  }\n}\n\n/**\n * True if the supplied DOM node has a direct React-rendered child that is\n * not a React root element. Useful for warning in `render`,\n * `unmountComponentAtNode`, etc.\n *\n * @param {?DOMElement} node The candidate DOM node.\n * @return {boolean} True if the DOM element contains a direct child that was\n * rendered by React but is not a root element.\n * @internal\n */\nfunction hasNonRootReactChild(node) {\n  var reactRootID = getReactRootID(node);\n  return reactRootID ? reactRootID !== ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID) : false;\n}\n\n/**\n * Returns the first (deepest) ancestor of a node which is rendered by this copy\n * of React.\n */\nfunction findFirstReactDOMImpl(node) {\n  // This node might be from another React instance, so we make sure not to\n  // examine the node cache here\n  for (; node && node.parentNode !== node; node = node.parentNode) {\n    if (node.nodeType !== 1) {\n      // Not a DOMElement, therefore not a React component\n      continue;\n    }\n    var nodeID = internalGetID(node);\n    if (!nodeID) {\n      continue;\n    }\n    var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);\n\n    // If containersByReactRootID contains the container we find by crawling up\n    // the tree, we know that this instance of React rendered the node.\n    // nb. isValid's strategy (with containsNode) does not work because render\n    // trees may be nested and we don't want a false positive in that case.\n    var current = node;\n    var lastID;\n    do {\n      lastID = internalGetID(current);\n      current = current.parentNode;\n      if (current == null) {\n        // The passed-in node has been detached from the container it was\n        // originally rendered into.\n        return null;\n      }\n    } while (lastID !== reactRootID);\n\n    if (current === containersByReactRootID[reactRootID]) {\n      return node;\n    }\n  }\n  return null;\n}\n\n/**\n * Temporary (?) hack so that we can store all top-level pending updates on\n * composites instead of having to worry about different types of components\n * here.\n */\nvar TopLevelWrapper = function () {};\nTopLevelWrapper.prototype.isReactComponent = {};\nif (\"development\" !== 'production') {\n  TopLevelWrapper.displayName = 'TopLevelWrapper';\n}\nTopLevelWrapper.prototype.render = function () {\n  // this.props is actually a ReactElement\n  return this.props;\n};\n\n/**\n * Mounting is the process of initializing a React component by creating its\n * representative DOM elements and inserting them into a supplied `container`.\n * Any prior content inside `container` is destroyed in the process.\n *\n *   ReactMount.render(\n *     component,\n *     document.getElementById('container')\n *   );\n *\n *   <div id=\"container\">                   <-- Supplied `container`.\n *     <div data-reactid=\".3\">              <-- Rendered reactRoot of React\n *       // ...                                 component.\n *     </div>\n *   </div>\n *\n * Inside of `container`, the first element rendered is the \"reactRoot\".\n */\nvar ReactMount = {\n\n  TopLevelWrapper: TopLevelWrapper,\n\n  /** Exposed for debugging purposes **/\n  _instancesByReactRootID: instancesByReactRootID,\n\n  /**\n   * This is a hook provided to support rendering React components while\n   * ensuring that the apparent scroll position of its `container` does not\n   * change.\n   *\n   * @param {DOMElement} container The `container` being rendered into.\n   * @param {function} renderCallback This must be called once to do the render.\n   */\n  scrollMonitor: function (container, renderCallback) {\n    renderCallback();\n  },\n\n  /**\n   * Take a component that's already mounted into the DOM and replace its props\n   * @param {ReactComponent} prevComponent component instance already in the DOM\n   * @param {ReactElement} nextElement component instance to render\n   * @param {DOMElement} container container to render into\n   * @param {?function} callback function triggered on completion\n   */\n  _updateRootComponent: function (prevComponent, nextElement, container, callback) {\n    ReactMount.scrollMonitor(container, function () {\n      ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);\n      if (callback) {\n        ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);\n      }\n    });\n\n    if (\"development\" !== 'production') {\n      // Record the root element in case it later gets transplanted.\n      rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);\n    }\n\n    return prevComponent;\n  },\n\n  /**\n   * Register a component into the instance map and starts scroll value\n   * monitoring\n   * @param {ReactComponent} nextComponent component instance to render\n   * @param {DOMElement} container container to render into\n   * @return {string} reactRoot ID prefix\n   */\n  _registerComponent: function (nextComponent, container) {\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? \"development\" !== 'production' ? invariant(false, '_registerComponent(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n    ReactBrowserEventEmitter.ensureScrollValueMonitoring();\n\n    var reactRootID = ReactMount.registerContainer(container);\n    instancesByReactRootID[reactRootID] = nextComponent;\n    return reactRootID;\n  },\n\n  /**\n   * Render a new component into the DOM.\n   * @param {ReactElement} nextElement element to render\n   * @param {DOMElement} container container to render into\n   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion\n   * @return {ReactComponent} nextComponent\n   */\n  _renderNewRootComponent: function (nextElement, container, shouldReuseMarkup, context) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case.\n    \"development\" !== 'production' ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n    var componentInstance = instantiateReactComponent(nextElement, null);\n    var reactRootID = ReactMount._registerComponent(componentInstance, container);\n\n    // The initial render is synchronous but any updates that happen during\n    // rendering, in componentWillMount or componentDidMount, will be batched\n    // according to the current batching strategy.\n\n    ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup, context);\n\n    if (\"development\" !== 'production') {\n      // Record the root element in case it later gets transplanted.\n      rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);\n    }\n\n    return componentInstance;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactComponent} parentComponent The conceptual parent of this render tree.\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    !(parentComponent != null && parentComponent._reactInternalInstance != null) ? \"development\" !== 'production' ? invariant(false, 'parentComponent must be a valid React Component') : invariant(false) : undefined;\n    return ReactMount._renderSubtreeIntoContainer(parentComponent, nextElement, container, callback);\n  },\n\n  _renderSubtreeIntoContainer: function (parentComponent, nextElement, container, callback) {\n    !ReactElement.isValidElement(nextElement) ? \"development\" !== 'production' ? invariant(false, 'ReactDOM.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :\n    // Check if it quacks like an element\n    nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(false) : undefined;\n\n    \"development\" !== 'production' ? warning(!container || !container.tagName || container.tagName.toUpperCase() !== 'BODY', 'render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.') : undefined;\n\n    var nextWrappedElement = new ReactElement(TopLevelWrapper, null, null, null, null, null, nextElement);\n\n    var prevComponent = instancesByReactRootID[getReactRootID(container)];\n\n    if (prevComponent) {\n      var prevWrappedElement = prevComponent._currentElement;\n      var prevElement = prevWrappedElement.props;\n      if (shouldUpdateReactComponent(prevElement, nextElement)) {\n        var publicInst = prevComponent._renderedComponent.getPublicInstance();\n        var updatedCallback = callback && function () {\n          callback.call(publicInst);\n        };\n        ReactMount._updateRootComponent(prevComponent, nextWrappedElement, container, updatedCallback);\n        return publicInst;\n      } else {\n        ReactMount.unmountComponentAtNode(container);\n      }\n    }\n\n    var reactRootElement = getReactRootElementInContainer(container);\n    var containerHasReactMarkup = reactRootElement && !!internalGetID(reactRootElement);\n    var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(!containerHasNonRootReactChild, 'render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.') : undefined;\n\n      if (!containerHasReactMarkup || reactRootElement.nextSibling) {\n        var rootElementSibling = reactRootElement;\n        while (rootElementSibling) {\n          if (internalGetID(rootElementSibling)) {\n            \"development\" !== 'production' ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : undefined;\n            break;\n          }\n          rootElementSibling = rootElementSibling.nextSibling;\n        }\n      }\n    }\n\n    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent && !containerHasNonRootReactChild;\n    var component = ReactMount._renderNewRootComponent(nextWrappedElement, container, shouldReuseMarkup, parentComponent != null ? parentComponent._reactInternalInstance._processChildContext(parentComponent._reactInternalInstance._context) : emptyObject)._renderedComponent.getPublicInstance();\n    if (callback) {\n      callback.call(component);\n    }\n    return component;\n  },\n\n  /**\n   * Renders a React component into the DOM in the supplied `container`.\n   *\n   * If the React component was previously rendered into `container`, this will\n   * perform an update on it and only mutate the DOM as necessary to reflect the\n   * latest React component.\n   *\n   * @param {ReactElement} nextElement Component element to render.\n   * @param {DOMElement} container DOM element to render into.\n   * @param {?function} callback function triggered on completion\n   * @return {ReactComponent} Component instance rendered in `container`.\n   */\n  render: function (nextElement, container, callback) {\n    return ReactMount._renderSubtreeIntoContainer(null, nextElement, container, callback);\n  },\n\n  /**\n   * Registers a container node into which React components will be rendered.\n   * This also creates the \"reactRoot\" ID that will be assigned to the element\n   * rendered within.\n   *\n   * @param {DOMElement} container DOM element to register as a container.\n   * @return {string} The \"reactRoot\" ID of elements rendered within.\n   */\n  registerContainer: function (container) {\n    var reactRootID = getReactRootID(container);\n    if (reactRootID) {\n      // If one exists, make sure it is a valid \"reactRoot\" ID.\n      reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);\n    }\n    if (!reactRootID) {\n      // No valid \"reactRoot\" ID found, create one.\n      reactRootID = ReactInstanceHandles.createReactRootID();\n    }\n    containersByReactRootID[reactRootID] = container;\n    return reactRootID;\n  },\n\n  /**\n   * Unmounts and destroys the React component rendered in the `container`.\n   *\n   * @param {DOMElement} container DOM element containing a React component.\n   * @return {boolean} True if a component was found in and unmounted from\n   *                   `container`\n   */\n  unmountComponentAtNode: function (container) {\n    // Various parts of our code (such as ReactCompositeComponent's\n    // _renderValidatedComponent) assume that calls to render aren't nested;\n    // verify that that's the case. (Strictly speaking, unmounting won't cause a\n    // render but we still don't expect to be in a render call here.)\n    \"development\" !== 'production' ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from render ' + 'is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate. Check the render method of %s.', ReactCurrentOwner.current && ReactCurrentOwner.current.getName() || 'ReactCompositeComponent') : undefined;\n\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? \"development\" !== 'production' ? invariant(false, 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(false) : undefined;\n\n    var reactRootID = getReactRootID(container);\n    var component = instancesByReactRootID[reactRootID];\n    if (!component) {\n      // Check if the node being unmounted was rendered by React, but isn't a\n      // root node.\n      var containerHasNonRootReactChild = hasNonRootReactChild(container);\n\n      // Check if the container itself is a React root node.\n      var containerID = internalGetID(container);\n      var isContainerReactRoot = containerID && containerID === ReactInstanceHandles.getReactRootIDFromNodeID(containerID);\n\n      if (\"development\" !== 'production') {\n        \"development\" !== 'production' ? warning(!containerHasNonRootReactChild, 'unmountComponentAtNode(): The node you\\'re attempting to unmount ' + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.') : undefined;\n      }\n\n      return false;\n    }\n    ReactUpdates.batchedUpdates(unmountComponentFromNode, component, container);\n    delete instancesByReactRootID[reactRootID];\n    delete containersByReactRootID[reactRootID];\n    if (\"development\" !== 'production') {\n      delete rootElementsByReactRootID[reactRootID];\n    }\n    return true;\n  },\n\n  /**\n   * Finds the container DOM element that contains React component to which the\n   * supplied DOM `id` belongs.\n   *\n   * @param {string} id The ID of an element rendered by a React component.\n   * @return {?DOMElement} DOM element that contains the `id`.\n   */\n  findReactContainerForID: function (id) {\n    var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);\n    var container = containersByReactRootID[reactRootID];\n\n    if (\"development\" !== 'production') {\n      var rootElement = rootElementsByReactRootID[reactRootID];\n      if (rootElement && rootElement.parentNode !== container) {\n        \"development\" !== 'production' ? warning(\n        // Call internalGetID here because getID calls isValid which calls\n        // findReactContainerForID (this function).\n        internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : undefined;\n        var containerChild = container.firstChild;\n        if (containerChild && reactRootID === internalGetID(containerChild)) {\n          // If the container has a new child with the same ID as the old\n          // root element, then rootElementsByReactRootID[reactRootID] is\n          // just stale and needs to be updated. The case that deserves a\n          // warning is when the container is empty.\n          rootElementsByReactRootID[reactRootID] = containerChild;\n        } else {\n          \"development\" !== 'production' ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container: %s', rootElement.parentNode) : undefined;\n        }\n      }\n    }\n\n    return container;\n  },\n\n  /**\n   * Finds an element rendered by React with the supplied ID.\n   *\n   * @param {string} id ID of a DOM node in the React component.\n   * @return {DOMElement} Root DOM node of the React component.\n   */\n  findReactNodeByID: function (id) {\n    var reactRoot = ReactMount.findReactContainerForID(id);\n    return ReactMount.findComponentRoot(reactRoot, id);\n  },\n\n  /**\n   * Traverses up the ancestors of the supplied node to find a node that is a\n   * DOM representation of a React component rendered by this copy of React.\n   *\n   * @param {*} node\n   * @return {?DOMEventTarget}\n   * @internal\n   */\n  getFirstReactDOM: function (node) {\n    return findFirstReactDOMImpl(node);\n  },\n\n  /**\n   * Finds a node with the supplied `targetID` inside of the supplied\n   * `ancestorNode`.  Exploits the ID naming scheme to perform the search\n   * quickly.\n   *\n   * @param {DOMEventTarget} ancestorNode Search from this root.\n   * @pararm {string} targetID ID of the DOM representation of the component.\n   * @return {DOMEventTarget} DOM node with the supplied `targetID`.\n   * @internal\n   */\n  findComponentRoot: function (ancestorNode, targetID) {\n    var firstChildren = findComponentRootReusableArray;\n    var childIndex = 0;\n\n    var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;\n\n    if (\"development\" !== 'production') {\n      // This will throw on the next line; give an early warning\n      \"development\" !== 'production' ? warning(deepestAncestor != null, 'React can\\'t find the root component node for data-reactid value ' + '`%s`. If you\\'re seeing this message, it probably means that ' + 'you\\'ve loaded two copies of React on the page. At this time, only ' + 'a single copy of React can be loaded at a time.', targetID) : undefined;\n    }\n\n    firstChildren[0] = deepestAncestor.firstChild;\n    firstChildren.length = 1;\n\n    while (childIndex < firstChildren.length) {\n      var child = firstChildren[childIndex++];\n      var targetChild;\n\n      while (child) {\n        var childID = ReactMount.getID(child);\n        if (childID) {\n          // Even if we find the node we're looking for, we finish looping\n          // through its siblings to ensure they're cached so that we don't have\n          // to revisit this node again. Otherwise, we make n^2 calls to getID\n          // when visiting the many children of a single node in order.\n\n          if (targetID === childID) {\n            targetChild = child;\n          } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {\n            // If we find a child whose ID is an ancestor of the given ID,\n            // then we can be sure that we only want to search the subtree\n            // rooted at this child, so we can throw out the rest of the\n            // search state.\n            firstChildren.length = childIndex = 0;\n            firstChildren.push(child.firstChild);\n          }\n        } else {\n          // If this child had no ID, then there's a chance that it was\n          // injected automatically by the browser, as when a `<table>`\n          // element sprouts an extra `<tbody>` child as a side effect of\n          // `.innerHTML` parsing. Optimistically continue down this\n          // branch, but not before examining the other siblings.\n          firstChildren.push(child.firstChild);\n        }\n\n        child = child.nextSibling;\n      }\n\n      if (targetChild) {\n        // Emptying firstChildren/findComponentRootReusableArray is\n        // not necessary for correctness, but it helps the GC reclaim\n        // any nodes that were left at the end of the search.\n        firstChildren.length = 0;\n\n        return targetChild;\n      }\n    }\n\n    firstChildren.length = 0;\n\n    !false ? \"development\" !== 'production' ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false) : undefined;\n  },\n\n  _mountImageIntoNode: function (markup, container, shouldReuseMarkup, transaction) {\n    !(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE || container.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE)) ? \"development\" !== 'production' ? invariant(false, 'mountComponentIntoNode(...): Target container is not valid.') : invariant(false) : undefined;\n\n    if (shouldReuseMarkup) {\n      var rootElement = getReactRootElementInContainer(container);\n      if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {\n        return;\n      } else {\n        var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n        rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);\n\n        var rootMarkup = rootElement.outerHTML;\n        rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);\n\n        var normalizedMarkup = markup;\n        if (\"development\" !== 'production') {\n          // because rootMarkup is retrieved from the DOM, various normalizations\n          // will have occurred which will not be present in `markup`. Here,\n          // insert markup into a <div> or <iframe> depending on the container\n          // type to perform the same normalizations before comparing.\n          var normalizer;\n          if (container.nodeType === ELEMENT_NODE_TYPE) {\n            normalizer = document.createElement('div');\n            normalizer.innerHTML = markup;\n            normalizedMarkup = normalizer.innerHTML;\n          } else {\n            normalizer = document.createElement('iframe');\n            document.body.appendChild(normalizer);\n            normalizer.contentDocument.write(markup);\n            normalizedMarkup = normalizer.contentDocument.documentElement.outerHTML;\n            document.body.removeChild(normalizer);\n          }\n        }\n\n        var diffIndex = firstDifferenceIndex(normalizedMarkup, rootMarkup);\n        var difference = ' (client) ' + normalizedMarkup.substring(diffIndex - 20, diffIndex + 20) + '\\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);\n\n        !(container.nodeType !== DOC_NODE_TYPE) ? \"development\" !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\\n%s', difference) : invariant(false) : undefined;\n\n        if (\"development\" !== 'production') {\n          \"development\" !== 'production' ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\\n%s', difference) : undefined;\n        }\n      }\n    }\n\n    !(container.nodeType !== DOC_NODE_TYPE) ? \"development\" !== 'production' ? invariant(false, 'You\\'re trying to render a component to the document but ' + 'you didn\\'t use server rendering. We can\\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See ReactDOMServer.renderToString() for server rendering.') : invariant(false) : undefined;\n\n    if (transaction.useCreateElement) {\n      while (container.lastChild) {\n        container.removeChild(container.lastChild);\n      }\n      container.appendChild(markup);\n    } else {\n      setInnerHTML(container, markup);\n    }\n  },\n\n  ownerDocumentContextKey: ownerDocumentContextKey,\n\n  /**\n   * React ID utilities.\n   */\n\n  getReactRootID: getReactRootID,\n\n  getID: getID,\n\n  setID: setID,\n\n  getNode: getNode,\n\n  getNodeFromInstance: getNodeFromInstance,\n\n  isValid: isValid,\n\n  purgeID: purgeID\n};\n\nReactPerf.measureMethods(ReactMount, 'ReactMount', {\n  _renderNewRootComponent: '_renderNewRootComponent',\n  _mountImageIntoNode: '_mountImageIntoNode'\n});\n\nmodule.exports = ReactMount;\n},{\"10\":10,\"118\":118,\"124\":124,\"126\":126,\"128\":128,\"133\":133,\"137\":137,\"144\":144,\"155\":155,\"23\":23,\"26\":26,\"34\":34,\"39\":39,\"52\":52,\"55\":55,\"61\":61,\"62\":62,\"64\":64,\"71\":71,\"76\":76,\"82\":82,\"83\":83}],66:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChild\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactComponentEnvironment = _dereq_(32);\nvar ReactMultiChildUpdateTypes = _dereq_(67);\n\nvar ReactCurrentOwner = _dereq_(34);\nvar ReactReconciler = _dereq_(76);\nvar ReactChildReconciler = _dereq_(27);\n\nvar flattenChildren = _dereq_(109);\n\n/**\n * Updating children of a component may trigger recursive updates. The depth is\n * used to batch recursive updates to render markup more efficiently.\n *\n * @type {number}\n * @private\n */\nvar updateDepth = 0;\n\n/**\n * Queue of update configuration objects.\n *\n * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.\n *\n * @type {array<object>}\n * @private\n */\nvar updateQueue = [];\n\n/**\n * Queue of markup to be rendered.\n *\n * @type {array<string>}\n * @private\n */\nvar markupQueue = [];\n\n/**\n * Enqueues markup to be rendered and inserted at a supplied index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @param {number} toIndex Destination index.\n * @private\n */\nfunction enqueueInsertMarkup(parentID, markup, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,\n    markupIndex: markupQueue.push(markup) - 1,\n    content: null,\n    fromIndex: null,\n    toIndex: toIndex\n  });\n}\n\n/**\n * Enqueues moving an existing element to another index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Source index of the existing element.\n * @param {number} toIndex Destination index of the element.\n * @private\n */\nfunction enqueueMove(parentID, fromIndex, toIndex) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,\n    markupIndex: null,\n    content: null,\n    fromIndex: fromIndex,\n    toIndex: toIndex\n  });\n}\n\n/**\n * Enqueues removing an element at an index.\n *\n * @param {string} parentID ID of the parent component.\n * @param {number} fromIndex Index of the element to remove.\n * @private\n */\nfunction enqueueRemove(parentID, fromIndex) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.REMOVE_NODE,\n    markupIndex: null,\n    content: null,\n    fromIndex: fromIndex,\n    toIndex: null\n  });\n}\n\n/**\n * Enqueues setting the markup of a node.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} markup Markup that renders into an element.\n * @private\n */\nfunction enqueueSetMarkup(parentID, markup) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.SET_MARKUP,\n    markupIndex: null,\n    content: markup,\n    fromIndex: null,\n    toIndex: null\n  });\n}\n\n/**\n * Enqueues setting the text content.\n *\n * @param {string} parentID ID of the parent component.\n * @param {string} textContent Text content to set.\n * @private\n */\nfunction enqueueTextContent(parentID, textContent) {\n  // NOTE: Null values reduce hidden classes.\n  updateQueue.push({\n    parentID: parentID,\n    parentNode: null,\n    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,\n    markupIndex: null,\n    content: textContent,\n    fromIndex: null,\n    toIndex: null\n  });\n}\n\n/**\n * Processes any enqueued updates.\n *\n * @private\n */\nfunction processQueue() {\n  if (updateQueue.length) {\n    ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue);\n    clearQueue();\n  }\n}\n\n/**\n * Clears any enqueued updates.\n *\n * @private\n */\nfunction clearQueue() {\n  updateQueue.length = 0;\n  markupQueue.length = 0;\n}\n\n/**\n * ReactMultiChild are capable of reconciling multiple children.\n *\n * @class ReactMultiChild\n * @internal\n */\nvar ReactMultiChild = {\n\n  /**\n   * Provides common functionality for components that must reconcile multiple\n   * children. This is used by `ReactDOMComponent` to mount, update, and\n   * unmount child components.\n   *\n   * @lends {ReactMultiChild.prototype}\n   */\n  Mixin: {\n\n    _reconcilerInstantiateChildren: function (nestedChildren, transaction, context) {\n      if (\"development\" !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n        }\n      }\n      return ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);\n    },\n\n    _reconcilerUpdateChildren: function (prevChildren, nextNestedChildrenElements, transaction, context) {\n      var nextChildren;\n      if (\"development\" !== 'production') {\n        if (this._currentElement) {\n          try {\n            ReactCurrentOwner.current = this._currentElement._owner;\n            nextChildren = flattenChildren(nextNestedChildrenElements);\n          } finally {\n            ReactCurrentOwner.current = null;\n          }\n          return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n        }\n      }\n      nextChildren = flattenChildren(nextNestedChildrenElements);\n      return ReactChildReconciler.updateChildren(prevChildren, nextChildren, transaction, context);\n    },\n\n    /**\n     * Generates a \"mount image\" for each of the supplied children. In the case\n     * of `ReactDOMComponent`, a mount image is a string of markup.\n     *\n     * @param {?object} nestedChildren Nested child maps.\n     * @return {array} An array of mounted representations.\n     * @internal\n     */\n    mountChildren: function (nestedChildren, transaction, context) {\n      var children = this._reconcilerInstantiateChildren(nestedChildren, transaction, context);\n      this._renderedChildren = children;\n      var mountImages = [];\n      var index = 0;\n      for (var name in children) {\n        if (children.hasOwnProperty(name)) {\n          var child = children[name];\n          // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n          var rootID = this._rootNodeID + name;\n          var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n          child._mountIndex = index++;\n          mountImages.push(mountImage);\n        }\n      }\n      return mountImages;\n    },\n\n    /**\n     * Replaces any rendered children with a text content string.\n     *\n     * @param {string} nextContent String of content.\n     * @internal\n     */\n    updateTextContent: function (nextContent) {\n      updateDepth++;\n      var errorThrown = true;\n      try {\n        var prevChildren = this._renderedChildren;\n        // Remove any rendered children.\n        ReactChildReconciler.unmountChildren(prevChildren);\n        // TODO: The setTextContent operation should be enough\n        for (var name in prevChildren) {\n          if (prevChildren.hasOwnProperty(name)) {\n            this._unmountChild(prevChildren[name]);\n          }\n        }\n        // Set new text content.\n        this.setTextContent(nextContent);\n        errorThrown = false;\n      } finally {\n        updateDepth--;\n        if (!updateDepth) {\n          if (errorThrown) {\n            clearQueue();\n          } else {\n            processQueue();\n          }\n        }\n      }\n    },\n\n    /**\n     * Replaces any rendered children with a markup string.\n     *\n     * @param {string} nextMarkup String of markup.\n     * @internal\n     */\n    updateMarkup: function (nextMarkup) {\n      updateDepth++;\n      var errorThrown = true;\n      try {\n        var prevChildren = this._renderedChildren;\n        // Remove any rendered children.\n        ReactChildReconciler.unmountChildren(prevChildren);\n        for (var name in prevChildren) {\n          if (prevChildren.hasOwnProperty(name)) {\n            this._unmountChildByName(prevChildren[name], name);\n          }\n        }\n        this.setMarkup(nextMarkup);\n        errorThrown = false;\n      } finally {\n        updateDepth--;\n        if (!updateDepth) {\n          if (errorThrown) {\n            clearQueue();\n          } else {\n            processQueue();\n          }\n        }\n      }\n    },\n\n    /**\n     * Updates the rendered children with new children.\n     *\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @internal\n     */\n    updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      updateDepth++;\n      var errorThrown = true;\n      try {\n        this._updateChildren(nextNestedChildrenElements, transaction, context);\n        errorThrown = false;\n      } finally {\n        updateDepth--;\n        if (!updateDepth) {\n          if (errorThrown) {\n            clearQueue();\n          } else {\n            processQueue();\n          }\n        }\n      }\n    },\n\n    /**\n     * Improve performance by isolating this hot code path from the try/catch\n     * block in `updateChildren`.\n     *\n     * @param {?object} nextNestedChildrenElements Nested child element maps.\n     * @param {ReactReconcileTransaction} transaction\n     * @final\n     * @protected\n     */\n    _updateChildren: function (nextNestedChildrenElements, transaction, context) {\n      var prevChildren = this._renderedChildren;\n      var nextChildren = this._reconcilerUpdateChildren(prevChildren, nextNestedChildrenElements, transaction, context);\n      this._renderedChildren = nextChildren;\n      if (!nextChildren && !prevChildren) {\n        return;\n      }\n      var name;\n      // `nextIndex` will increment for each child in `nextChildren`, but\n      // `lastIndex` will be the last index visited in `prevChildren`.\n      var lastIndex = 0;\n      var nextIndex = 0;\n      for (name in nextChildren) {\n        if (!nextChildren.hasOwnProperty(name)) {\n          continue;\n        }\n        var prevChild = prevChildren && prevChildren[name];\n        var nextChild = nextChildren[name];\n        if (prevChild === nextChild) {\n          this.moveChild(prevChild, nextIndex, lastIndex);\n          lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n          prevChild._mountIndex = nextIndex;\n        } else {\n          if (prevChild) {\n            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.\n            lastIndex = Math.max(prevChild._mountIndex, lastIndex);\n            this._unmountChild(prevChild);\n          }\n          // The child must be instantiated before it's mounted.\n          this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context);\n        }\n        nextIndex++;\n      }\n      // Remove children that are no longer present.\n      for (name in prevChildren) {\n        if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {\n          this._unmountChild(prevChildren[name]);\n        }\n      }\n    },\n\n    /**\n     * Unmounts all rendered children. This should be used to clean up children\n     * when this component is unmounted.\n     *\n     * @internal\n     */\n    unmountChildren: function () {\n      var renderedChildren = this._renderedChildren;\n      ReactChildReconciler.unmountChildren(renderedChildren);\n      this._renderedChildren = null;\n    },\n\n    /**\n     * Moves a child component to the supplied index.\n     *\n     * @param {ReactComponent} child Component to move.\n     * @param {number} toIndex Destination index of the element.\n     * @param {number} lastIndex Last index visited of the siblings of `child`.\n     * @protected\n     */\n    moveChild: function (child, toIndex, lastIndex) {\n      // If the index of `child` is less than `lastIndex`, then it needs to\n      // be moved. Otherwise, we do not need to move it because a child will be\n      // inserted or moved before `child`.\n      if (child._mountIndex < lastIndex) {\n        enqueueMove(this._rootNodeID, child._mountIndex, toIndex);\n      }\n    },\n\n    /**\n     * Creates a child component.\n     *\n     * @param {ReactComponent} child Component to create.\n     * @param {string} mountImage Markup to insert.\n     * @protected\n     */\n    createChild: function (child, mountImage) {\n      enqueueInsertMarkup(this._rootNodeID, mountImage, child._mountIndex);\n    },\n\n    /**\n     * Removes a child component.\n     *\n     * @param {ReactComponent} child Child to remove.\n     * @protected\n     */\n    removeChild: function (child) {\n      enqueueRemove(this._rootNodeID, child._mountIndex);\n    },\n\n    /**\n     * Sets this text content string.\n     *\n     * @param {string} textContent Text content to set.\n     * @protected\n     */\n    setTextContent: function (textContent) {\n      enqueueTextContent(this._rootNodeID, textContent);\n    },\n\n    /**\n     * Sets this markup string.\n     *\n     * @param {string} markup Markup to set.\n     * @protected\n     */\n    setMarkup: function (markup) {\n      enqueueSetMarkup(this._rootNodeID, markup);\n    },\n\n    /**\n     * Mounts a child with the supplied name.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to mount.\n     * @param {string} name Name of the child.\n     * @param {number} index Index at which to insert the child.\n     * @param {ReactReconcileTransaction} transaction\n     * @private\n     */\n    _mountChildByNameAtIndex: function (child, name, index, transaction, context) {\n      // Inlined for performance, see `ReactInstanceHandles.createReactID`.\n      var rootID = this._rootNodeID + name;\n      var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);\n      child._mountIndex = index;\n      this.createChild(child, mountImage);\n    },\n\n    /**\n     * Unmounts a rendered child.\n     *\n     * NOTE: This is part of `updateChildren` and is here for readability.\n     *\n     * @param {ReactComponent} child Component to unmount.\n     * @private\n     */\n    _unmountChild: function (child) {\n      this.removeChild(child);\n      child._mountIndex = null;\n    }\n\n  }\n\n};\n\nmodule.exports = ReactMultiChild;\n},{\"109\":109,\"27\":27,\"32\":32,\"34\":34,\"67\":67,\"76\":76}],67:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactMultiChildUpdateTypes\n */\n\n'use strict';\n\nvar keyMirror = _dereq_(147);\n\n/**\n * When a component's children are updated, a series of update configuration\n * objects are created in order to batch and serialize the required changes.\n *\n * Enumerates all the possible types of update configurations.\n *\n * @internal\n */\nvar ReactMultiChildUpdateTypes = keyMirror({\n  INSERT_MARKUP: null,\n  MOVE_EXISTING: null,\n  REMOVE_NODE: null,\n  SET_MARKUP: null,\n  TEXT_CONTENT: null\n});\n\nmodule.exports = ReactMultiChildUpdateTypes;\n},{\"147\":147}],68:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNativeComponent\n */\n\n'use strict';\n\nvar assign = _dereq_(23);\nvar invariant = _dereq_(144);\n\nvar autoGenerateWrapperClass = null;\nvar genericComponentClass = null;\n// This registry keeps track of wrapper classes around native tags.\nvar tagToComponentClass = {};\nvar textComponentClass = null;\n\nvar ReactNativeComponentInjection = {\n  // This accepts a class that receives the tag string. This is a catch all\n  // that can render any kind of tag.\n  injectGenericComponentClass: function (componentClass) {\n    genericComponentClass = componentClass;\n  },\n  // This accepts a text component class that takes the text string to be\n  // rendered as props.\n  injectTextComponentClass: function (componentClass) {\n    textComponentClass = componentClass;\n  },\n  // This accepts a keyed object with classes as values. Each key represents a\n  // tag. That particular tag will use this class instead of the generic one.\n  injectComponentClasses: function (componentClasses) {\n    assign(tagToComponentClass, componentClasses);\n  }\n};\n\n/**\n * Get a composite component wrapper class for a specific tag.\n *\n * @param {ReactElement} element The tag for which to get the class.\n * @return {function} The React class constructor function.\n */\nfunction getComponentClassForElement(element) {\n  if (typeof element.type === 'function') {\n    return element.type;\n  }\n  var tag = element.type;\n  var componentClass = tagToComponentClass[tag];\n  if (componentClass == null) {\n    tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);\n  }\n  return componentClass;\n}\n\n/**\n * Get a native internal component class for a specific tag.\n *\n * @param {ReactElement} element The element to create.\n * @return {function} The internal class constructor function.\n */\nfunction createInternalComponent(element) {\n  !genericComponentClass ? \"development\" !== 'production' ? invariant(false, 'There is no registered component for the tag %s', element.type) : invariant(false) : undefined;\n  return new genericComponentClass(element.type, element.props);\n}\n\n/**\n * @param {ReactText} text\n * @return {ReactComponent}\n */\nfunction createInstanceForText(text) {\n  return new textComponentClass(text);\n}\n\n/**\n * @param {ReactComponent} component\n * @return {boolean}\n */\nfunction isTextComponent(component) {\n  return component instanceof textComponentClass;\n}\n\nvar ReactNativeComponent = {\n  getComponentClassForElement: getComponentClassForElement,\n  createInternalComponent: createInternalComponent,\n  createInstanceForText: createInstanceForText,\n  isTextComponent: isTextComponent,\n  injection: ReactNativeComponentInjection\n};\n\nmodule.exports = ReactNativeComponent;\n},{\"144\":144,\"23\":23}],69:[function(_dereq_,module,exports){\n/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactNoopUpdateQueue\n */\n\n'use strict';\n\nvar warning = _dereq_(155);\n\nfunction warnTDZ(publicInstance, callerName) {\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(false, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor && publicInstance.constructor.displayName || '') : undefined;\n  }\n}\n\n/**\n * This is the abstract API for an update queue.\n */\nvar ReactNoopUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    return false;\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback) {},\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    warnTDZ(publicInstance, 'forceUpdate');\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    warnTDZ(publicInstance, 'replaceState');\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    warnTDZ(publicInstance, 'setState');\n  },\n\n  /**\n   * Sets a subset of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialProps Subset of the next props.\n   * @internal\n   */\n  enqueueSetProps: function (publicInstance, partialProps) {\n    warnTDZ(publicInstance, 'setProps');\n  },\n\n  /**\n   * Replaces all of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} props New props.\n   * @internal\n   */\n  enqueueReplaceProps: function (publicInstance, props) {\n    warnTDZ(publicInstance, 'replaceProps');\n  }\n\n};\n\nmodule.exports = ReactNoopUpdateQueue;\n},{\"155\":155}],70:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactOwner\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\n/**\n * ReactOwners are capable of storing references to owned components.\n *\n * All components are capable of //being// referenced by owner components, but\n * only ReactOwner components are capable of //referencing// owned components.\n * The named reference is known as a \"ref\".\n *\n * Refs are available when mounted and updated during reconciliation.\n *\n *   var MyComponent = React.createClass({\n *     render: function() {\n *       return (\n *         <div onClick={this.handleClick}>\n *           <CustomComponent ref=\"custom\" />\n *         </div>\n *       );\n *     },\n *     handleClick: function() {\n *       this.refs.custom.handleClick();\n *     },\n *     componentDidMount: function() {\n *       this.refs.custom.initialize();\n *     }\n *   });\n *\n * Refs should rarely be used. When refs are used, they should only be done to\n * control data that is not handled by React's data flow.\n *\n * @class ReactOwner\n */\nvar ReactOwner = {\n\n  /**\n   * @param {?object} object\n   * @return {boolean} True if `object` is a valid owner.\n   * @final\n   */\n  isValidOwner: function (object) {\n    return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');\n  },\n\n  /**\n   * Adds a component by ref to an owner component.\n   *\n   * @param {ReactComponent} component Component to reference.\n   * @param {string} ref Name by which to refer to the component.\n   * @param {ReactOwner} owner Component on which to record the ref.\n   * @final\n   * @internal\n   */\n  addComponentAsRefTo: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? \"development\" !== 'production' ? invariant(false, 'addComponentAsRefTo(...): Only a ReactOwner can have refs. You might ' + 'be adding a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n    owner.attachRef(ref, component);\n  },\n\n  /**\n   * Removes a component by ref from an owner component.\n   *\n   * @param {ReactComponent} component Component to dereference.\n   * @param {string} ref Name of the ref to remove.\n   * @param {ReactOwner} owner Component on which the ref is recorded.\n   * @final\n   * @internal\n   */\n  removeComponentAsRefFrom: function (component, ref, owner) {\n    !ReactOwner.isValidOwner(owner) ? \"development\" !== 'production' ? invariant(false, 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. You might ' + 'be removing a ref to a component that was not created inside a component\\'s ' + '`render` method, or you have multiple copies of React loaded ' + '(details: https://fb.me/react-refs-must-have-owner).') : invariant(false) : undefined;\n    // Check that `component` is still the current ref because we do not want to\n    // detach the ref if another component stole it.\n    if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {\n      owner.detachRef(ref);\n    }\n  }\n\n};\n\nmodule.exports = ReactOwner;\n},{\"144\":144}],71:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPerf\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * ReactPerf is a general AOP system designed to measure performance. This\n * module only has the hooks: see ReactDefaultPerf for the analysis tool.\n */\nvar ReactPerf = {\n  /**\n   * Boolean to enable/disable measurement. Set to false by default to prevent\n   * accidental logging and perf loss.\n   */\n  enableMeasure: false,\n\n  /**\n   * Holds onto the measure function in use. By default, don't measure\n   * anything, but we'll override this if we inject a measure function.\n   */\n  storedMeasure: _noMeasure,\n\n  /**\n   * @param {object} object\n   * @param {string} objectName\n   * @param {object<string>} methodNames\n   */\n  measureMethods: function (object, objectName, methodNames) {\n    if (\"development\" !== 'production') {\n      for (var key in methodNames) {\n        if (!methodNames.hasOwnProperty(key)) {\n          continue;\n        }\n        object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);\n      }\n    }\n  },\n\n  /**\n   * Use this to wrap methods you want to measure. Zero overhead in production.\n   *\n   * @param {string} objName\n   * @param {string} fnName\n   * @param {function} func\n   * @return {function}\n   */\n  measure: function (objName, fnName, func) {\n    if (\"development\" !== 'production') {\n      var measuredFunc = null;\n      var wrapper = function () {\n        if (ReactPerf.enableMeasure) {\n          if (!measuredFunc) {\n            measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);\n          }\n          return measuredFunc.apply(this, arguments);\n        }\n        return func.apply(this, arguments);\n      };\n      wrapper.displayName = objName + '_' + fnName;\n      return wrapper;\n    }\n    return func;\n  },\n\n  injection: {\n    /**\n     * @param {function} measure\n     */\n    injectMeasure: function (measure) {\n      ReactPerf.storedMeasure = measure;\n    }\n  }\n};\n\n/**\n * Simply passes through the measured function, without measuring it.\n *\n * @param {string} objName\n * @param {string} fnName\n * @param {function} func\n * @return {function}\n */\nfunction _noMeasure(objName, fnName, func) {\n  return func;\n}\n\nmodule.exports = ReactPerf;\n},{}],72:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocationNames\n */\n\n'use strict';\n\nvar ReactPropTypeLocationNames = {};\n\nif (\"development\" !== 'production') {\n  ReactPropTypeLocationNames = {\n    prop: 'prop',\n    context: 'context',\n    childContext: 'child context'\n  };\n}\n\nmodule.exports = ReactPropTypeLocationNames;\n},{}],73:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypeLocations\n */\n\n'use strict';\n\nvar keyMirror = _dereq_(147);\n\nvar ReactPropTypeLocations = keyMirror({\n  prop: null,\n  context: null,\n  childContext: null\n});\n\nmodule.exports = ReactPropTypeLocations;\n},{\"147\":147}],74:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactPropTypes\n */\n\n'use strict';\n\nvar ReactElement = _dereq_(52);\nvar ReactPropTypeLocationNames = _dereq_(72);\n\nvar emptyFunction = _dereq_(136);\nvar getIteratorFn = _dereq_(115);\n\n/**\n * Collection of methods that allow declaration and validation of props that are\n * supplied to React components. Example usage:\n *\n *   var Props = require('ReactPropTypes');\n *   var MyArticle = React.createClass({\n *     propTypes: {\n *       // An optional string prop named \"description\".\n *       description: Props.string,\n *\n *       // A required enum prop named \"category\".\n *       category: Props.oneOf(['News','Photos']).isRequired,\n *\n *       // A prop named \"dialog\" that requires an instance of Dialog.\n *       dialog: Props.instanceOf(Dialog).isRequired\n *     },\n *     render: function() { ... }\n *   });\n *\n * A more formal specification of how these methods are used:\n *\n *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n *   decl := ReactPropTypes.{type}(.isRequired)?\n *\n * Each and every declaration produces a function with the same signature. This\n * allows the creation of custom validation functions. For example:\n *\n *  var MyLink = React.createClass({\n *    propTypes: {\n *      // An optional string or URI prop named \"href\".\n *      href: function(props, propName, componentName) {\n *        var propValue = props[propName];\n *        if (propValue != null && typeof propValue !== 'string' &&\n *            !(propValue instanceof URI)) {\n *          return new Error(\n *            'Expected a string or an URI for ' + propName + ' in ' +\n *            componentName\n *          );\n *        }\n *      }\n *    },\n *    render: function() {...}\n *  });\n *\n * @internal\n */\n\nvar ANONYMOUS = '<<anonymous>>';\n\nvar ReactPropTypes = {\n  array: createPrimitiveTypeChecker('array'),\n  bool: createPrimitiveTypeChecker('boolean'),\n  func: createPrimitiveTypeChecker('function'),\n  number: createPrimitiveTypeChecker('number'),\n  object: createPrimitiveTypeChecker('object'),\n  string: createPrimitiveTypeChecker('string'),\n\n  any: createAnyTypeChecker(),\n  arrayOf: createArrayOfTypeChecker,\n  element: createElementTypeChecker(),\n  instanceOf: createInstanceTypeChecker,\n  node: createNodeChecker(),\n  objectOf: createObjectOfTypeChecker,\n  oneOf: createEnumTypeChecker,\n  oneOfType: createUnionTypeChecker,\n  shape: createShapeTypeChecker\n};\n\nfunction createChainableTypeChecker(validate) {\n  function checkType(isRequired, props, propName, componentName, location, propFullName) {\n    componentName = componentName || ANONYMOUS;\n    propFullName = propFullName || propName;\n    if (props[propName] == null) {\n      var locationName = ReactPropTypeLocationNames[location];\n      if (isRequired) {\n        return new Error('Required ' + locationName + ' `' + propFullName + '` was not specified in ' + ('`' + componentName + '`.'));\n      }\n      return null;\n    } else {\n      return validate(props, propName, componentName, location, propFullName);\n    }\n  }\n\n  var chainedCheckType = checkType.bind(null, false);\n  chainedCheckType.isRequired = checkType.bind(null, true);\n\n  return chainedCheckType;\n}\n\nfunction createPrimitiveTypeChecker(expectedType) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== expectedType) {\n      var locationName = ReactPropTypeLocationNames[location];\n      // `propValue` being instance of, say, date/regexp, pass the 'object'\n      // check, but we can offer a more precise error message here rather than\n      // 'of type `object`'.\n      var preciseType = getPreciseType(propValue);\n\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createAnyTypeChecker() {\n  return createChainableTypeChecker(emptyFunction.thatReturns(null));\n}\n\nfunction createArrayOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    if (!Array.isArray(propValue)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var propType = getPropType(propValue);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n    }\n    for (var i = 0; i < propValue.length; i++) {\n      var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']');\n      if (error instanceof Error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createElementTypeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!ReactElement.isValidElement(props[propName])) {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a single ReactElement.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createInstanceTypeChecker(expectedClass) {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!(props[propName] instanceof expectedClass)) {\n      var locationName = ReactPropTypeLocationNames[location];\n      var expectedClassName = expectedClass.name || ANONYMOUS;\n      var actualClassName = getClassName(props[propName]);\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createEnumTypeChecker(expectedValues) {\n  if (!Array.isArray(expectedValues)) {\n    return createChainableTypeChecker(function () {\n      return new Error('Invalid argument supplied to oneOf, expected an instance of array.');\n    });\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    for (var i = 0; i < expectedValues.length; i++) {\n      if (propValue === expectedValues[i]) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    var valuesString = JSON.stringify(expectedValues);\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createObjectOfTypeChecker(typeChecker) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n    }\n    for (var key in propValue) {\n      if (propValue.hasOwnProperty(key)) {\n        var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createUnionTypeChecker(arrayOfTypeCheckers) {\n  if (!Array.isArray(arrayOfTypeCheckers)) {\n    return createChainableTypeChecker(function () {\n      return new Error('Invalid argument supplied to oneOfType, expected an instance of array.');\n    });\n  }\n\n  function validate(props, propName, componentName, location, propFullName) {\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (checker(props, propName, componentName, location, propFullName) == null) {\n        return null;\n      }\n    }\n\n    var locationName = ReactPropTypeLocationNames[location];\n    return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createNodeChecker() {\n  function validate(props, propName, componentName, location, propFullName) {\n    if (!isNode(props[propName])) {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction createShapeTypeChecker(shapeTypes) {\n  function validate(props, propName, componentName, location, propFullName) {\n    var propValue = props[propName];\n    var propType = getPropType(propValue);\n    if (propType !== 'object') {\n      var locationName = ReactPropTypeLocationNames[location];\n      return new Error('Invalid ' + locationName + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n    }\n    for (var key in shapeTypes) {\n      var checker = shapeTypes[key];\n      if (!checker) {\n        continue;\n      }\n      var error = checker(propValue, key, componentName, location, propFullName + '.' + key);\n      if (error) {\n        return error;\n      }\n    }\n    return null;\n  }\n  return createChainableTypeChecker(validate);\n}\n\nfunction isNode(propValue) {\n  switch (typeof propValue) {\n    case 'number':\n    case 'string':\n    case 'undefined':\n      return true;\n    case 'boolean':\n      return !propValue;\n    case 'object':\n      if (Array.isArray(propValue)) {\n        return propValue.every(isNode);\n      }\n      if (propValue === null || ReactElement.isValidElement(propValue)) {\n        return true;\n      }\n\n      var iteratorFn = getIteratorFn(propValue);\n      if (iteratorFn) {\n        var iterator = iteratorFn.call(propValue);\n        var step;\n        if (iteratorFn !== propValue.entries) {\n          while (!(step = iterator.next()).done) {\n            if (!isNode(step.value)) {\n              return false;\n            }\n          }\n        } else {\n          // Iterator will provide entry [k,v] tuples rather than values.\n          while (!(step = iterator.next()).done) {\n            var entry = step.value;\n            if (entry) {\n              if (!isNode(entry[1])) {\n                return false;\n              }\n            }\n          }\n        }\n      } else {\n        return false;\n      }\n\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Equivalent of `typeof` but with special handling for array and regexp.\nfunction getPropType(propValue) {\n  var propType = typeof propValue;\n  if (Array.isArray(propValue)) {\n    return 'array';\n  }\n  if (propValue instanceof RegExp) {\n    // Old webkits (at least until Android 4.0) return 'function' rather than\n    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n    // passes PropTypes.object.\n    return 'object';\n  }\n  return propType;\n}\n\n// This handles more types than `getPropType`. Only used for error messages.\n// See `createPrimitiveTypeChecker`.\nfunction getPreciseType(propValue) {\n  var propType = getPropType(propValue);\n  if (propType === 'object') {\n    if (propValue instanceof Date) {\n      return 'date';\n    } else if (propValue instanceof RegExp) {\n      return 'regexp';\n    }\n  }\n  return propType;\n}\n\n// Returns class name of the object, if any.\nfunction getClassName(propValue) {\n  if (!propValue.constructor || !propValue.constructor.name) {\n    return '<<anonymous>>';\n  }\n  return propValue.constructor.name;\n}\n\nmodule.exports = ReactPropTypes;\n},{\"115\":115,\"136\":136,\"52\":52,\"72\":72}],75:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconcileTransaction\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CallbackQueue = _dereq_(6);\nvar PooledClass = _dereq_(24);\nvar ReactBrowserEventEmitter = _dereq_(26);\nvar ReactDOMFeatureFlags = _dereq_(39);\nvar ReactInputSelection = _dereq_(60);\nvar Transaction = _dereq_(100);\n\nvar assign = _dereq_(23);\n\n/**\n * Ensures that, when possible, the selection range (currently selected text\n * input) is not disturbed by performing the transaction.\n */\nvar SELECTION_RESTORATION = {\n  /**\n   * @return {Selection} Selection information.\n   */\n  initialize: ReactInputSelection.getSelectionInformation,\n  /**\n   * @param {Selection} sel Selection information returned from `initialize`.\n   */\n  close: ReactInputSelection.restoreSelection\n};\n\n/**\n * Suppresses events (blur/focus) that could be inadvertently dispatched due to\n * high level DOM manipulations (like temporarily removing a text input from the\n * DOM).\n */\nvar EVENT_SUPPRESSION = {\n  /**\n   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before\n   * the reconciliation.\n   */\n  initialize: function () {\n    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();\n    ReactBrowserEventEmitter.setEnabled(false);\n    return currentlyEnabled;\n  },\n\n  /**\n   * @param {boolean} previouslyEnabled Enabled status of\n   *   `ReactBrowserEventEmitter` before the reconciliation occurred. `close`\n   *   restores the previous value.\n   */\n  close: function (previouslyEnabled) {\n    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);\n  }\n};\n\n/**\n * Provides a queue for collecting `componentDidMount` and\n * `componentDidUpdate` callbacks during the the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n  /**\n   * Initializes the internal `onDOMReady` queue.\n   */\n  initialize: function () {\n    this.reactMountReady.reset();\n  },\n\n  /**\n   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.\n   */\n  close: function () {\n    this.reactMountReady.notifyAll();\n  }\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];\n\n/**\n * Currently:\n * - The order that these are listed in the transaction is critical:\n * - Suppresses events.\n * - Restores selection range.\n *\n * Future:\n * - Restore document/overflow scroll positions that were unintentionally\n *   modified via DOM insertions above the top viewport boundary.\n * - Implement/integrate with customized constraint based layout system and keep\n *   track of which dimensions must be remeasured.\n *\n * @class ReactReconcileTransaction\n */\nfunction ReactReconcileTransaction(forceHTML) {\n  this.reinitializeTransaction();\n  // Only server-side rendering really needs this option (see\n  // `ReactServerRendering`), but server-side uses\n  // `ReactServerRenderingTransaction` instead. This option is here so that it's\n  // accessible and defaults to false when `ReactDOMComponent` and\n  // `ReactTextComponent` checks it in `mountComponent`.`\n  this.renderToStaticMarkup = false;\n  this.reactMountReady = CallbackQueue.getPooled(null);\n  this.useCreateElement = !forceHTML && ReactDOMFeatureFlags.useCreateElement;\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array<object>} List of operation wrap procedures.\n   *   TODO: convert to array<TransactionWrapper>\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return this.reactMountReady;\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {\n    CallbackQueue.release(this.reactMountReady);\n    this.reactMountReady = null;\n  }\n};\n\nassign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactReconcileTransaction);\n\nmodule.exports = ReactReconcileTransaction;\n},{\"100\":100,\"23\":23,\"24\":24,\"26\":26,\"39\":39,\"6\":6,\"60\":60}],76:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactReconciler\n */\n\n'use strict';\n\nvar ReactRef = _dereq_(77);\n\n/**\n * Helper to call ReactRef.attachRefs with this composite component, split out\n * to avoid allocations in the transaction mount-ready queue.\n */\nfunction attachRefs() {\n  ReactRef.attachRefs(this, this._currentElement);\n}\n\nvar ReactReconciler = {\n\n  /**\n   * Initializes the component, renders markup, and registers event listeners.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {string} rootID DOM ID of the root node.\n   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction\n   * @return {?string} Rendered markup to be inserted into the DOM.\n   * @final\n   * @internal\n   */\n  mountComponent: function (internalInstance, rootID, transaction, context) {\n    var markup = internalInstance.mountComponent(rootID, transaction, context);\n    if (internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n    return markup;\n  },\n\n  /**\n   * Releases any resources allocated by `mountComponent`.\n   *\n   * @final\n   * @internal\n   */\n  unmountComponent: function (internalInstance) {\n    ReactRef.detachRefs(internalInstance, internalInstance._currentElement);\n    internalInstance.unmountComponent();\n  },\n\n  /**\n   * Update a component using a new element.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactElement} nextElement\n   * @param {ReactReconcileTransaction} transaction\n   * @param {object} context\n   * @internal\n   */\n  receiveComponent: function (internalInstance, nextElement, transaction, context) {\n    var prevElement = internalInstance._currentElement;\n\n    if (nextElement === prevElement && context === internalInstance._context) {\n      // Since elements are immutable after the owner is rendered,\n      // we can do a cheap identity compare here to determine if this is a\n      // superfluous reconcile. It's possible for state to be mutable but such\n      // change should trigger an update of the owner which would recreate\n      // the element. We explicitly check for the existence of an owner since\n      // it's possible for an element created outside a composite to be\n      // deeply mutated and reused.\n\n      // TODO: Bailing out early is just a perf optimization right?\n      // TODO: Removing the return statement should affect correctness?\n      return;\n    }\n\n    var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);\n\n    if (refsChanged) {\n      ReactRef.detachRefs(internalInstance, prevElement);\n    }\n\n    internalInstance.receiveComponent(nextElement, transaction, context);\n\n    if (refsChanged && internalInstance._currentElement && internalInstance._currentElement.ref != null) {\n      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);\n    }\n  },\n\n  /**\n   * Flush any dirty changes in a component.\n   *\n   * @param {ReactComponent} internalInstance\n   * @param {ReactReconcileTransaction} transaction\n   * @internal\n   */\n  performUpdateIfNecessary: function (internalInstance, transaction) {\n    internalInstance.performUpdateIfNecessary(transaction);\n  }\n\n};\n\nmodule.exports = ReactReconciler;\n},{\"77\":77}],77:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRef\n */\n\n'use strict';\n\nvar ReactOwner = _dereq_(70);\n\nvar ReactRef = {};\n\nfunction attachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(component.getPublicInstance());\n  } else {\n    // Legacy ref\n    ReactOwner.addComponentAsRefTo(component, ref, owner);\n  }\n}\n\nfunction detachRef(ref, component, owner) {\n  if (typeof ref === 'function') {\n    ref(null);\n  } else {\n    // Legacy ref\n    ReactOwner.removeComponentAsRefFrom(component, ref, owner);\n  }\n}\n\nReactRef.attachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    attachRef(ref, instance, element._owner);\n  }\n};\n\nReactRef.shouldUpdateRefs = function (prevElement, nextElement) {\n  // If either the owner or a `ref` has changed, make sure the newest owner\n  // has stored a reference to `this`, and the previous owner (if different)\n  // has forgotten the reference to `this`. We use the element instead\n  // of the public this.props because the post processing cannot determine\n  // a ref. The ref conceptually lives on the element.\n\n  // TODO: Should this even be possible? The owner cannot change because\n  // it's forbidden by shouldUpdateReactComponent. The ref can change\n  // if you swap the keys of but not the refs. Reconsider where this check\n  // is made. It probably belongs where the key checking and\n  // instantiateReactComponent is done.\n\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n\n  return(\n    // This has a few false positives w/r/t empty components.\n    prevEmpty || nextEmpty || nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref\n  );\n};\n\nReactRef.detachRefs = function (instance, element) {\n  if (element === null || element === false) {\n    return;\n  }\n  var ref = element.ref;\n  if (ref != null) {\n    detachRef(ref, instance, element._owner);\n  }\n};\n\nmodule.exports = ReactRef;\n},{\"70\":70}],78:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\nvar ReactRootIndexInjection = {\n  /**\n   * @param {function} _createReactRootIndex\n   */\n  injectCreateReactRootIndex: function (_createReactRootIndex) {\n    ReactRootIndex.createReactRootIndex = _createReactRootIndex;\n  }\n};\n\nvar ReactRootIndex = {\n  createReactRootIndex: null,\n  injection: ReactRootIndexInjection\n};\n\nmodule.exports = ReactRootIndex;\n},{}],79:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerBatchingStrategy\n * @typechecks\n */\n\n'use strict';\n\nvar ReactServerBatchingStrategy = {\n  isBatchingUpdates: false,\n  batchedUpdates: function (callback) {\n    // Don't do anything here. During the server rendering we don't want to\n    // schedule any updates. We will simply ignore them.\n  }\n};\n\nmodule.exports = ReactServerBatchingStrategy;\n},{}],80:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @typechecks static-only\n * @providesModule ReactServerRendering\n */\n'use strict';\n\nvar ReactDefaultBatchingStrategy = _dereq_(48);\nvar ReactElement = _dereq_(52);\nvar ReactInstanceHandles = _dereq_(61);\nvar ReactMarkupChecksum = _dereq_(64);\nvar ReactServerBatchingStrategy = _dereq_(79);\nvar ReactServerRenderingTransaction = _dereq_(81);\nvar ReactUpdates = _dereq_(83);\n\nvar emptyObject = _dereq_(137);\nvar instantiateReactComponent = _dereq_(118);\nvar invariant = _dereq_(144);\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup\n */\nfunction renderToString(element) {\n  !ReactElement.isValidElement(element) ? \"development\" !== 'production' ? invariant(false, 'renderToString(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n  var transaction;\n  try {\n    ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n    var id = ReactInstanceHandles.createReactRootID();\n    transaction = ReactServerRenderingTransaction.getPooled(false);\n\n    return transaction.perform(function () {\n      var componentInstance = instantiateReactComponent(element, null);\n      var markup = componentInstance.mountComponent(id, transaction, emptyObject);\n      return ReactMarkupChecksum.addChecksumToMarkup(markup);\n    }, null);\n  } finally {\n    ReactServerRenderingTransaction.release(transaction);\n    // Revert to the DOM batching strategy since these two renderers\n    // currently share these stateful modules.\n    ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n  }\n}\n\n/**\n * @param {ReactElement} element\n * @return {string} the HTML markup, without the extra React ID and checksum\n * (for generating static pages)\n */\nfunction renderToStaticMarkup(element) {\n  !ReactElement.isValidElement(element) ? \"development\" !== 'production' ? invariant(false, 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(false) : undefined;\n\n  var transaction;\n  try {\n    ReactUpdates.injection.injectBatchingStrategy(ReactServerBatchingStrategy);\n\n    var id = ReactInstanceHandles.createReactRootID();\n    transaction = ReactServerRenderingTransaction.getPooled(true);\n\n    return transaction.perform(function () {\n      var componentInstance = instantiateReactComponent(element, null);\n      return componentInstance.mountComponent(id, transaction, emptyObject);\n    }, null);\n  } finally {\n    ReactServerRenderingTransaction.release(transaction);\n    // Revert to the DOM batching strategy since these two renderers\n    // currently share these stateful modules.\n    ReactUpdates.injection.injectBatchingStrategy(ReactDefaultBatchingStrategy);\n  }\n}\n\nmodule.exports = {\n  renderToString: renderToString,\n  renderToStaticMarkup: renderToStaticMarkup\n};\n},{\"118\":118,\"137\":137,\"144\":144,\"48\":48,\"52\":52,\"61\":61,\"64\":64,\"79\":79,\"81\":81,\"83\":83}],81:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactServerRenderingTransaction\n * @typechecks\n */\n\n'use strict';\n\nvar PooledClass = _dereq_(24);\nvar CallbackQueue = _dereq_(6);\nvar Transaction = _dereq_(100);\n\nvar assign = _dereq_(23);\nvar emptyFunction = _dereq_(136);\n\n/**\n * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks\n * during the performing of the transaction.\n */\nvar ON_DOM_READY_QUEUEING = {\n  /**\n   * Initializes the internal `onDOMReady` queue.\n   */\n  initialize: function () {\n    this.reactMountReady.reset();\n  },\n\n  close: emptyFunction\n};\n\n/**\n * Executed within the scope of the `Transaction` instance. Consider these as\n * being member methods, but with an implied ordering while being isolated from\n * each other.\n */\nvar TRANSACTION_WRAPPERS = [ON_DOM_READY_QUEUEING];\n\n/**\n * @class ReactServerRenderingTransaction\n * @param {boolean} renderToStaticMarkup\n */\nfunction ReactServerRenderingTransaction(renderToStaticMarkup) {\n  this.reinitializeTransaction();\n  this.renderToStaticMarkup = renderToStaticMarkup;\n  this.reactMountReady = CallbackQueue.getPooled(null);\n  this.useCreateElement = false;\n}\n\nvar Mixin = {\n  /**\n   * @see Transaction\n   * @abstract\n   * @final\n   * @return {array} Empty list of operation wrap procedures.\n   */\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  /**\n   * @return {object} The queue to collect `onDOMReady` callbacks with.\n   */\n  getReactMountReady: function () {\n    return this.reactMountReady;\n  },\n\n  /**\n   * `PooledClass` looks for this, and will invoke this before allowing this\n   * instance to be reused.\n   */\n  destructor: function () {\n    CallbackQueue.release(this.reactMountReady);\n    this.reactMountReady = null;\n  }\n};\n\nassign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);\n\nPooledClass.addPoolingTo(ReactServerRenderingTransaction);\n\nmodule.exports = ReactServerRenderingTransaction;\n},{\"100\":100,\"136\":136,\"23\":23,\"24\":24,\"6\":6}],82:[function(_dereq_,module,exports){\n/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdateQueue\n */\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(34);\nvar ReactElement = _dereq_(52);\nvar ReactInstanceMap = _dereq_(62);\nvar ReactUpdates = _dereq_(83);\n\nvar assign = _dereq_(23);\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\nfunction enqueueUpdate(internalInstance) {\n  ReactUpdates.enqueueUpdate(internalInstance);\n}\n\nfunction getInternalInstanceReadyForUpdate(publicInstance, callerName) {\n  var internalInstance = ReactInstanceMap.get(publicInstance);\n  if (!internalInstance) {\n    if (\"development\" !== 'production') {\n      // Only warn when we have a callerName. Otherwise we should be silent.\n      // We're probably calling from enqueueCallback. We don't want to warn\n      // there because we already warned for the corresponding lifecycle method.\n      \"development\" !== 'production' ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted component. ' + 'This is a no-op. Please check the code for the %s component.', callerName, callerName, publicInstance.constructor.displayName) : undefined;\n    }\n    return null;\n  }\n\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : undefined;\n  }\n\n  return internalInstance;\n}\n\n/**\n * ReactUpdateQueue allows for state updates to be scheduled into a later\n * reconciliation step.\n */\nvar ReactUpdateQueue = {\n\n  /**\n   * Checks whether or not this composite component is mounted.\n   * @param {ReactClass} publicInstance The instance we want to test.\n   * @return {boolean} True if mounted, false otherwise.\n   * @protected\n   * @final\n   */\n  isMounted: function (publicInstance) {\n    if (\"development\" !== 'production') {\n      var owner = ReactCurrentOwner.current;\n      if (owner !== null) {\n        \"development\" !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n        owner._warnedAboutRefsInRender = true;\n      }\n    }\n    var internalInstance = ReactInstanceMap.get(publicInstance);\n    if (internalInstance) {\n      // During componentWillMount and render this will still be null but after\n      // that will always render to something. At least for now. So we can use\n      // this hack.\n      return !!internalInstance._renderedComponent;\n    } else {\n      return false;\n    }\n  },\n\n  /**\n   * Enqueue a callback that will be executed after all the pending updates\n   * have processed.\n   *\n   * @param {ReactClass} publicInstance The instance to use as `this` context.\n   * @param {?function} callback Called after state is updated.\n   * @internal\n   */\n  enqueueCallback: function (publicInstance, callback) {\n    !(typeof callback === 'function') ? \"development\" !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);\n\n    // Previously we would throw an error if we didn't have an internal\n    // instance. Since we want to make it a no-op instead, we mirror the same\n    // behavior we have in other enqueue* methods.\n    // We also need to ignore callbacks in componentWillMount. See\n    // enqueueUpdates.\n    if (!internalInstance) {\n      return null;\n    }\n\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    // TODO: The callback here is ignored when setState is called from\n    // componentWillMount. Either fix it or disallow doing so completely in\n    // favor of getInitialState. Alternatively, we can disallow\n    // componentWillMount during server-side rendering.\n    enqueueUpdate(internalInstance);\n  },\n\n  enqueueCallbackInternal: function (internalInstance, callback) {\n    !(typeof callback === 'function') ? \"development\" !== 'production' ? invariant(false, 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\\'t callable.') : invariant(false) : undefined;\n    if (internalInstance._pendingCallbacks) {\n      internalInstance._pendingCallbacks.push(callback);\n    } else {\n      internalInstance._pendingCallbacks = [callback];\n    }\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Forces an update. This should only be invoked when it is known with\n   * certainty that we are **not** in a DOM transaction.\n   *\n   * You may want to call this when you know that some deeper aspect of the\n   * component's state has changed but `setState` was not called.\n   *\n   * This will not invoke `shouldComponentUpdate`, but it will invoke\n   * `componentWillUpdate` and `componentDidUpdate`.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @internal\n   */\n  enqueueForceUpdate: function (publicInstance) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingForceUpdate = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Replaces all of the state. Always use this or `setState` to mutate state.\n   * You should treat `this.state` as immutable.\n   *\n   * There is no guarantee that `this.state` will be immediately updated, so\n   * accessing `this.state` after calling this method may return the old value.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} completeState Next state.\n   * @internal\n   */\n  enqueueReplaceState: function (publicInstance, completeState) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    internalInstance._pendingStateQueue = [completeState];\n    internalInstance._pendingReplaceState = true;\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Sets a subset of the state. This only exists because _pendingState is\n   * internal. This provides a merging strategy that is not available to deep\n   * properties which is confusing. TODO: Expose pendingState or don't use it\n   * during the merge.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialState Next partial state to be merged with state.\n   * @internal\n   */\n  enqueueSetState: function (publicInstance, partialState) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');\n\n    if (!internalInstance) {\n      return;\n    }\n\n    var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);\n    queue.push(partialState);\n\n    enqueueUpdate(internalInstance);\n  },\n\n  /**\n   * Sets a subset of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} partialProps Subset of the next props.\n   * @internal\n   */\n  enqueueSetProps: function (publicInstance, partialProps) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps');\n    if (!internalInstance) {\n      return;\n    }\n    ReactUpdateQueue.enqueueSetPropsInternal(internalInstance, partialProps);\n  },\n\n  enqueueSetPropsInternal: function (internalInstance, partialProps) {\n    var topLevelWrapper = internalInstance._topLevelWrapper;\n    !topLevelWrapper ? \"development\" !== 'production' ? invariant(false, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n    // Merge with the pending element if it exists, otherwise with existing\n    // element props.\n    var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n    var element = wrapElement.props;\n    var props = assign({}, element.props, partialProps);\n    topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n    enqueueUpdate(topLevelWrapper);\n  },\n\n  /**\n   * Replaces all of the props.\n   *\n   * @param {ReactClass} publicInstance The instance that should rerender.\n   * @param {object} props New props.\n   * @internal\n   */\n  enqueueReplaceProps: function (publicInstance, props) {\n    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps');\n    if (!internalInstance) {\n      return;\n    }\n    ReactUpdateQueue.enqueueReplacePropsInternal(internalInstance, props);\n  },\n\n  enqueueReplacePropsInternal: function (internalInstance, props) {\n    var topLevelWrapper = internalInstance._topLevelWrapper;\n    !topLevelWrapper ? \"development\" !== 'production' ? invariant(false, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(false) : undefined;\n\n    // Merge with the pending element if it exists, otherwise with existing\n    // element props.\n    var wrapElement = topLevelWrapper._pendingElement || topLevelWrapper._currentElement;\n    var element = wrapElement.props;\n    topLevelWrapper._pendingElement = ReactElement.cloneAndReplaceProps(wrapElement, ReactElement.cloneAndReplaceProps(element, props));\n\n    enqueueUpdate(topLevelWrapper);\n  },\n\n  enqueueElementInternal: function (internalInstance, newElement) {\n    internalInstance._pendingElement = newElement;\n    enqueueUpdate(internalInstance);\n  }\n\n};\n\nmodule.exports = ReactUpdateQueue;\n},{\"144\":144,\"155\":155,\"23\":23,\"34\":34,\"52\":52,\"62\":62,\"83\":83}],83:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactUpdates\n */\n\n'use strict';\n\nvar CallbackQueue = _dereq_(6);\nvar PooledClass = _dereq_(24);\nvar ReactPerf = _dereq_(71);\nvar ReactReconciler = _dereq_(76);\nvar Transaction = _dereq_(100);\n\nvar assign = _dereq_(23);\nvar invariant = _dereq_(144);\n\nvar dirtyComponents = [];\nvar asapCallbackQueue = CallbackQueue.getPooled();\nvar asapEnqueued = false;\n\nvar batchingStrategy = null;\n\nfunction ensureInjected() {\n  !(ReactUpdates.ReactReconcileTransaction && batchingStrategy) ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(false) : undefined;\n}\n\nvar NESTED_UPDATES = {\n  initialize: function () {\n    this.dirtyComponentsLength = dirtyComponents.length;\n  },\n  close: function () {\n    if (this.dirtyComponentsLength !== dirtyComponents.length) {\n      // Additional updates were enqueued by componentDidUpdate handlers or\n      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run\n      // these new updates so that if A's componentDidUpdate calls setState on\n      // B, B will update before the callback A's updater provided when calling\n      // setState.\n      dirtyComponents.splice(0, this.dirtyComponentsLength);\n      flushBatchedUpdates();\n    } else {\n      dirtyComponents.length = 0;\n    }\n  }\n};\n\nvar UPDATE_QUEUEING = {\n  initialize: function () {\n    this.callbackQueue.reset();\n  },\n  close: function () {\n    this.callbackQueue.notifyAll();\n  }\n};\n\nvar TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];\n\nfunction ReactUpdatesFlushTransaction() {\n  this.reinitializeTransaction();\n  this.dirtyComponentsLength = null;\n  this.callbackQueue = CallbackQueue.getPooled();\n  this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled( /* forceHTML */false);\n}\n\nassign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {\n  getTransactionWrappers: function () {\n    return TRANSACTION_WRAPPERS;\n  },\n\n  destructor: function () {\n    this.dirtyComponentsLength = null;\n    CallbackQueue.release(this.callbackQueue);\n    this.callbackQueue = null;\n    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);\n    this.reconcileTransaction = null;\n  },\n\n  perform: function (method, scope, a) {\n    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`\n    // with this transaction's wrappers around it.\n    return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);\n  }\n});\n\nPooledClass.addPoolingTo(ReactUpdatesFlushTransaction);\n\nfunction batchedUpdates(callback, a, b, c, d, e) {\n  ensureInjected();\n  batchingStrategy.batchedUpdates(callback, a, b, c, d, e);\n}\n\n/**\n * Array comparator for ReactComponents by mount ordering.\n *\n * @param {ReactComponent} c1 first component you're comparing\n * @param {ReactComponent} c2 second component you're comparing\n * @return {number} Return value usable by Array.prototype.sort().\n */\nfunction mountOrderComparator(c1, c2) {\n  return c1._mountOrder - c2._mountOrder;\n}\n\nfunction runBatchedUpdates(transaction) {\n  var len = transaction.dirtyComponentsLength;\n  !(len === dirtyComponents.length) ? \"development\" !== 'production' ? invariant(false, 'Expected flush transaction\\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(false) : undefined;\n\n  // Since reconciling a component higher in the owner hierarchy usually (not\n  // always -- see shouldComponentUpdate()) will reconcile children, reconcile\n  // them before their children by sorting the array.\n  dirtyComponents.sort(mountOrderComparator);\n\n  for (var i = 0; i < len; i++) {\n    // If a component is unmounted before pending changes apply, it will still\n    // be here, but we assume that it has cleared its _pendingCallbacks and\n    // that performUpdateIfNecessary is a noop.\n    var component = dirtyComponents[i];\n\n    // If performUpdateIfNecessary happens to enqueue any new updates, we\n    // shouldn't execute the callbacks until the next render happens, so\n    // stash the callbacks first\n    var callbacks = component._pendingCallbacks;\n    component._pendingCallbacks = null;\n\n    ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);\n\n    if (callbacks) {\n      for (var j = 0; j < callbacks.length; j++) {\n        transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());\n      }\n    }\n  }\n}\n\nvar flushBatchedUpdates = function () {\n  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents\n  // array and perform any updates enqueued by mount-ready handlers (i.e.,\n  // componentDidUpdate) but we need to check here too in order to catch\n  // updates enqueued by setState callbacks and asap calls.\n  while (dirtyComponents.length || asapEnqueued) {\n    if (dirtyComponents.length) {\n      var transaction = ReactUpdatesFlushTransaction.getPooled();\n      transaction.perform(runBatchedUpdates, null, transaction);\n      ReactUpdatesFlushTransaction.release(transaction);\n    }\n\n    if (asapEnqueued) {\n      asapEnqueued = false;\n      var queue = asapCallbackQueue;\n      asapCallbackQueue = CallbackQueue.getPooled();\n      queue.notifyAll();\n      CallbackQueue.release(queue);\n    }\n  }\n};\nflushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);\n\n/**\n * Mark a component as needing a rerender, adding an optional callback to a\n * list of functions which will be executed once the rerender occurs.\n */\nfunction enqueueUpdate(component) {\n  ensureInjected();\n\n  // Various parts of our code (such as ReactCompositeComponent's\n  // _renderValidatedComponent) assume that calls to render aren't nested;\n  // verify that that's the case. (This is called by each top-level update\n  // function, like setProps, setState, forceUpdate, etc.; creation and\n  // destruction of top-level components is guarded in ReactMount.)\n\n  if (!batchingStrategy.isBatchingUpdates) {\n    batchingStrategy.batchedUpdates(enqueueUpdate, component);\n    return;\n  }\n\n  dirtyComponents.push(component);\n}\n\n/**\n * Enqueue a callback to be run at the end of the current batching cycle. Throws\n * if no updates are currently being performed.\n */\nfunction asap(callback, context) {\n  !batchingStrategy.isBatchingUpdates ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates.asap: Can\\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(false) : undefined;\n  asapCallbackQueue.enqueue(callback, context);\n  asapEnqueued = true;\n}\n\nvar ReactUpdatesInjection = {\n  injectReconcileTransaction: function (ReconcileTransaction) {\n    !ReconcileTransaction ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide a reconcile transaction class') : invariant(false) : undefined;\n    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;\n  },\n\n  injectBatchingStrategy: function (_batchingStrategy) {\n    !_batchingStrategy ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide a batching strategy') : invariant(false) : undefined;\n    !(typeof _batchingStrategy.batchedUpdates === 'function') ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide a batchedUpdates() function') : invariant(false) : undefined;\n    !(typeof _batchingStrategy.isBatchingUpdates === 'boolean') ? \"development\" !== 'production' ? invariant(false, 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(false) : undefined;\n    batchingStrategy = _batchingStrategy;\n  }\n};\n\nvar ReactUpdates = {\n  /**\n   * React references `ReactReconcileTransaction` using this property in order\n   * to allow dependency injection.\n   *\n   * @internal\n   */\n  ReactReconcileTransaction: null,\n\n  batchedUpdates: batchedUpdates,\n  enqueueUpdate: enqueueUpdate,\n  flushBatchedUpdates: flushBatchedUpdates,\n  injection: ReactUpdatesInjection,\n  asap: asap\n};\n\nmodule.exports = ReactUpdates;\n},{\"100\":100,\"144\":144,\"23\":23,\"24\":24,\"6\":6,\"71\":71,\"76\":76}],84:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ReactVersion\n */\n\n'use strict';\n\nmodule.exports = '0.14.3';\n},{}],85:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SVGDOMPropertyConfig\n */\n\n'use strict';\n\nvar DOMProperty = _dereq_(10);\n\nvar MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;\n\nvar NS = {\n  xlink: 'http://www.w3.org/1999/xlink',\n  xml: 'http://www.w3.org/XML/1998/namespace'\n};\n\nvar SVGDOMPropertyConfig = {\n  Properties: {\n    clipPath: MUST_USE_ATTRIBUTE,\n    cx: MUST_USE_ATTRIBUTE,\n    cy: MUST_USE_ATTRIBUTE,\n    d: MUST_USE_ATTRIBUTE,\n    dx: MUST_USE_ATTRIBUTE,\n    dy: MUST_USE_ATTRIBUTE,\n    fill: MUST_USE_ATTRIBUTE,\n    fillOpacity: MUST_USE_ATTRIBUTE,\n    fontFamily: MUST_USE_ATTRIBUTE,\n    fontSize: MUST_USE_ATTRIBUTE,\n    fx: MUST_USE_ATTRIBUTE,\n    fy: MUST_USE_ATTRIBUTE,\n    gradientTransform: MUST_USE_ATTRIBUTE,\n    gradientUnits: MUST_USE_ATTRIBUTE,\n    markerEnd: MUST_USE_ATTRIBUTE,\n    markerMid: MUST_USE_ATTRIBUTE,\n    markerStart: MUST_USE_ATTRIBUTE,\n    offset: MUST_USE_ATTRIBUTE,\n    opacity: MUST_USE_ATTRIBUTE,\n    patternContentUnits: MUST_USE_ATTRIBUTE,\n    patternUnits: MUST_USE_ATTRIBUTE,\n    points: MUST_USE_ATTRIBUTE,\n    preserveAspectRatio: MUST_USE_ATTRIBUTE,\n    r: MUST_USE_ATTRIBUTE,\n    rx: MUST_USE_ATTRIBUTE,\n    ry: MUST_USE_ATTRIBUTE,\n    spreadMethod: MUST_USE_ATTRIBUTE,\n    stopColor: MUST_USE_ATTRIBUTE,\n    stopOpacity: MUST_USE_ATTRIBUTE,\n    stroke: MUST_USE_ATTRIBUTE,\n    strokeDasharray: MUST_USE_ATTRIBUTE,\n    strokeLinecap: MUST_USE_ATTRIBUTE,\n    strokeOpacity: MUST_USE_ATTRIBUTE,\n    strokeWidth: MUST_USE_ATTRIBUTE,\n    textAnchor: MUST_USE_ATTRIBUTE,\n    transform: MUST_USE_ATTRIBUTE,\n    version: MUST_USE_ATTRIBUTE,\n    viewBox: MUST_USE_ATTRIBUTE,\n    x1: MUST_USE_ATTRIBUTE,\n    x2: MUST_USE_ATTRIBUTE,\n    x: MUST_USE_ATTRIBUTE,\n    xlinkActuate: MUST_USE_ATTRIBUTE,\n    xlinkArcrole: MUST_USE_ATTRIBUTE,\n    xlinkHref: MUST_USE_ATTRIBUTE,\n    xlinkRole: MUST_USE_ATTRIBUTE,\n    xlinkShow: MUST_USE_ATTRIBUTE,\n    xlinkTitle: MUST_USE_ATTRIBUTE,\n    xlinkType: MUST_USE_ATTRIBUTE,\n    xmlBase: MUST_USE_ATTRIBUTE,\n    xmlLang: MUST_USE_ATTRIBUTE,\n    xmlSpace: MUST_USE_ATTRIBUTE,\n    y1: MUST_USE_ATTRIBUTE,\n    y2: MUST_USE_ATTRIBUTE,\n    y: MUST_USE_ATTRIBUTE\n  },\n  DOMAttributeNamespaces: {\n    xlinkActuate: NS.xlink,\n    xlinkArcrole: NS.xlink,\n    xlinkHref: NS.xlink,\n    xlinkRole: NS.xlink,\n    xlinkShow: NS.xlink,\n    xlinkTitle: NS.xlink,\n    xlinkType: NS.xlink,\n    xmlBase: NS.xml,\n    xmlLang: NS.xml,\n    xmlSpace: NS.xml\n  },\n  DOMAttributeNames: {\n    clipPath: 'clip-path',\n    fillOpacity: 'fill-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    gradientTransform: 'gradientTransform',\n    gradientUnits: 'gradientUnits',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    patternContentUnits: 'patternContentUnits',\n    patternUnits: 'patternUnits',\n    preserveAspectRatio: 'preserveAspectRatio',\n    spreadMethod: 'spreadMethod',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strokeDasharray: 'stroke-dasharray',\n    strokeLinecap: 'stroke-linecap',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    textAnchor: 'text-anchor',\n    viewBox: 'viewBox',\n    xlinkActuate: 'xlink:actuate',\n    xlinkArcrole: 'xlink:arcrole',\n    xlinkHref: 'xlink:href',\n    xlinkRole: 'xlink:role',\n    xlinkShow: 'xlink:show',\n    xlinkTitle: 'xlink:title',\n    xlinkType: 'xlink:type',\n    xmlBase: 'xml:base',\n    xmlLang: 'xml:lang',\n    xmlSpace: 'xml:space'\n  }\n};\n\nmodule.exports = SVGDOMPropertyConfig;\n},{\"10\":10}],86:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SelectEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar EventPropagators = _dereq_(19);\nvar ExecutionEnvironment = _dereq_(130);\nvar ReactInputSelection = _dereq_(60);\nvar SyntheticEvent = _dereq_(92);\n\nvar getActiveElement = _dereq_(139);\nvar isTextInputElement = _dereq_(120);\nvar keyOf = _dereq_(148);\nvar shallowEqual = _dereq_(153);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar skipSelectionChangeEvent = ExecutionEnvironment.canUseDOM && 'documentMode' in document && document.documentMode <= 11;\n\nvar eventTypes = {\n  select: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSelect: null }),\n      captured: keyOf({ onSelectCapture: null })\n    },\n    dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]\n  }\n};\n\nvar activeElement = null;\nvar activeElementID = null;\nvar lastSelection = null;\nvar mouseDown = false;\n\n// Track whether a listener exists for this plugin. If none exist, we do\n// not extract events.\nvar hasListener = false;\nvar ON_SELECT_KEY = keyOf({ onSelect: null });\n\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\nfunction getSelection(node) {\n  if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {\n    return {\n      start: node.selectionStart,\n      end: node.selectionEnd\n    };\n  } else if (window.getSelection) {\n    var selection = window.getSelection();\n    return {\n      anchorNode: selection.anchorNode,\n      anchorOffset: selection.anchorOffset,\n      focusNode: selection.focusNode,\n      focusOffset: selection.focusOffset\n    };\n  } else if (document.selection) {\n    var range = document.selection.createRange();\n    return {\n      parentElement: range.parentElement(),\n      text: range.text,\n      top: range.boundingTop,\n      left: range.boundingLeft\n    };\n  }\n}\n\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @return {?SyntheticEvent}\n */\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n  // Ensure we have the right element, and that the user is not dragging a\n  // selection (this matches native `select` event behavior). In HTML5, select\n  // fires only on input and textarea thus if there's no focused element we\n  // won't dispatch.\n  if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {\n    return null;\n  }\n\n  // Only fire when selection has actually changed.\n  var currentSelection = getSelection(activeElement);\n  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n    lastSelection = currentSelection;\n\n    var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent, nativeEventTarget);\n\n    syntheticEvent.type = 'select';\n    syntheticEvent.target = activeElement;\n\n    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);\n\n    return syntheticEvent;\n  }\n\n  return null;\n}\n\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\nvar SelectEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    if (!hasListener) {\n      return null;\n    }\n\n    switch (topLevelType) {\n      // Track the input node that has focus.\n      case topLevelTypes.topFocus:\n        if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') {\n          activeElement = topLevelTarget;\n          activeElementID = topLevelTargetID;\n          lastSelection = null;\n        }\n        break;\n      case topLevelTypes.topBlur:\n        activeElement = null;\n        activeElementID = null;\n        lastSelection = null;\n        break;\n\n      // Don't fire the event while the user is dragging. This matches the\n      // semantics of the native select event.\n      case topLevelTypes.topMouseDown:\n        mouseDown = true;\n        break;\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topMouseUp:\n        mouseDown = false;\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n\n      // Chrome and IE fire non-standard event when selection is changed (and\n      // sometimes when it hasn't). IE's event fires out of order with respect\n      // to key and input events on deletion, so we discard it.\n      //\n      // Firefox doesn't support selectionchange, so check selection status\n      // after each key entry. The selection changes after keydown and before\n      // keyup, but we check on keydown as well in the case of holding down a\n      // key, when multiple keydown events are fired but only one keyup is.\n      // This is also our approach for IE handling, for the reason above.\n      case topLevelTypes.topSelectionChange:\n        if (skipSelectionChangeEvent) {\n          break;\n        }\n      // falls through\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        return constructSelectEvent(nativeEvent, nativeEventTarget);\n    }\n\n    return null;\n  },\n\n  didPutListener: function (id, registrationName, listener) {\n    if (registrationName === ON_SELECT_KEY) {\n      hasListener = true;\n    }\n  }\n};\n\nmodule.exports = SelectEventPlugin;\n},{\"120\":120,\"130\":130,\"139\":139,\"148\":148,\"15\":15,\"153\":153,\"19\":19,\"60\":60,\"92\":92}],87:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ServerReactRootIndex\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Size of the reactRoot ID space. We generate random numbers for React root\n * IDs and if there's a collision the events and DOM update system will\n * get confused. In the future we need a way to generate GUIDs but for\n * now this will work on a smaller scale.\n */\nvar GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);\n\nvar ServerReactRootIndex = {\n  createReactRootIndex: function () {\n    return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);\n  }\n};\n\nmodule.exports = ServerReactRootIndex;\n},{}],88:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SimpleEventPlugin\n */\n\n'use strict';\n\nvar EventConstants = _dereq_(15);\nvar EventListener = _dereq_(129);\nvar EventPropagators = _dereq_(19);\nvar ReactMount = _dereq_(65);\nvar SyntheticClipboardEvent = _dereq_(89);\nvar SyntheticEvent = _dereq_(92);\nvar SyntheticFocusEvent = _dereq_(93);\nvar SyntheticKeyboardEvent = _dereq_(95);\nvar SyntheticMouseEvent = _dereq_(96);\nvar SyntheticDragEvent = _dereq_(91);\nvar SyntheticTouchEvent = _dereq_(97);\nvar SyntheticUIEvent = _dereq_(98);\nvar SyntheticWheelEvent = _dereq_(99);\n\nvar emptyFunction = _dereq_(136);\nvar getEventCharCode = _dereq_(111);\nvar invariant = _dereq_(144);\nvar keyOf = _dereq_(148);\n\nvar topLevelTypes = EventConstants.topLevelTypes;\n\nvar eventTypes = {\n  abort: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onAbort: true }),\n      captured: keyOf({ onAbortCapture: true })\n    }\n  },\n  blur: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onBlur: true }),\n      captured: keyOf({ onBlurCapture: true })\n    }\n  },\n  canPlay: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlay: true }),\n      captured: keyOf({ onCanPlayCapture: true })\n    }\n  },\n  canPlayThrough: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCanPlayThrough: true }),\n      captured: keyOf({ onCanPlayThroughCapture: true })\n    }\n  },\n  click: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onClick: true }),\n      captured: keyOf({ onClickCapture: true })\n    }\n  },\n  contextMenu: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onContextMenu: true }),\n      captured: keyOf({ onContextMenuCapture: true })\n    }\n  },\n  copy: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCopy: true }),\n      captured: keyOf({ onCopyCapture: true })\n    }\n  },\n  cut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onCut: true }),\n      captured: keyOf({ onCutCapture: true })\n    }\n  },\n  doubleClick: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDoubleClick: true }),\n      captured: keyOf({ onDoubleClickCapture: true })\n    }\n  },\n  drag: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrag: true }),\n      captured: keyOf({ onDragCapture: true })\n    }\n  },\n  dragEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnd: true }),\n      captured: keyOf({ onDragEndCapture: true })\n    }\n  },\n  dragEnter: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragEnter: true }),\n      captured: keyOf({ onDragEnterCapture: true })\n    }\n  },\n  dragExit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragExit: true }),\n      captured: keyOf({ onDragExitCapture: true })\n    }\n  },\n  dragLeave: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragLeave: true }),\n      captured: keyOf({ onDragLeaveCapture: true })\n    }\n  },\n  dragOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragOver: true }),\n      captured: keyOf({ onDragOverCapture: true })\n    }\n  },\n  dragStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDragStart: true }),\n      captured: keyOf({ onDragStartCapture: true })\n    }\n  },\n  drop: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDrop: true }),\n      captured: keyOf({ onDropCapture: true })\n    }\n  },\n  durationChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onDurationChange: true }),\n      captured: keyOf({ onDurationChangeCapture: true })\n    }\n  },\n  emptied: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEmptied: true }),\n      captured: keyOf({ onEmptiedCapture: true })\n    }\n  },\n  encrypted: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEncrypted: true }),\n      captured: keyOf({ onEncryptedCapture: true })\n    }\n  },\n  ended: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onEnded: true }),\n      captured: keyOf({ onEndedCapture: true })\n    }\n  },\n  error: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onError: true }),\n      captured: keyOf({ onErrorCapture: true })\n    }\n  },\n  focus: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onFocus: true }),\n      captured: keyOf({ onFocusCapture: true })\n    }\n  },\n  input: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onInput: true }),\n      captured: keyOf({ onInputCapture: true })\n    }\n  },\n  keyDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyDown: true }),\n      captured: keyOf({ onKeyDownCapture: true })\n    }\n  },\n  keyPress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyPress: true }),\n      captured: keyOf({ onKeyPressCapture: true })\n    }\n  },\n  keyUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onKeyUp: true }),\n      captured: keyOf({ onKeyUpCapture: true })\n    }\n  },\n  load: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoad: true }),\n      captured: keyOf({ onLoadCapture: true })\n    }\n  },\n  loadedData: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedData: true }),\n      captured: keyOf({ onLoadedDataCapture: true })\n    }\n  },\n  loadedMetadata: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadedMetadata: true }),\n      captured: keyOf({ onLoadedMetadataCapture: true })\n    }\n  },\n  loadStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onLoadStart: true }),\n      captured: keyOf({ onLoadStartCapture: true })\n    }\n  },\n  // Note: We do not allow listening to mouseOver events. Instead, use the\n  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.\n  mouseDown: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseDown: true }),\n      captured: keyOf({ onMouseDownCapture: true })\n    }\n  },\n  mouseMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseMove: true }),\n      captured: keyOf({ onMouseMoveCapture: true })\n    }\n  },\n  mouseOut: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOut: true }),\n      captured: keyOf({ onMouseOutCapture: true })\n    }\n  },\n  mouseOver: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseOver: true }),\n      captured: keyOf({ onMouseOverCapture: true })\n    }\n  },\n  mouseUp: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onMouseUp: true }),\n      captured: keyOf({ onMouseUpCapture: true })\n    }\n  },\n  paste: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPaste: true }),\n      captured: keyOf({ onPasteCapture: true })\n    }\n  },\n  pause: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPause: true }),\n      captured: keyOf({ onPauseCapture: true })\n    }\n  },\n  play: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlay: true }),\n      captured: keyOf({ onPlayCapture: true })\n    }\n  },\n  playing: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onPlaying: true }),\n      captured: keyOf({ onPlayingCapture: true })\n    }\n  },\n  progress: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onProgress: true }),\n      captured: keyOf({ onProgressCapture: true })\n    }\n  },\n  rateChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onRateChange: true }),\n      captured: keyOf({ onRateChangeCapture: true })\n    }\n  },\n  reset: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onReset: true }),\n      captured: keyOf({ onResetCapture: true })\n    }\n  },\n  scroll: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onScroll: true }),\n      captured: keyOf({ onScrollCapture: true })\n    }\n  },\n  seeked: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeked: true }),\n      captured: keyOf({ onSeekedCapture: true })\n    }\n  },\n  seeking: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSeeking: true }),\n      captured: keyOf({ onSeekingCapture: true })\n    }\n  },\n  stalled: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onStalled: true }),\n      captured: keyOf({ onStalledCapture: true })\n    }\n  },\n  submit: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSubmit: true }),\n      captured: keyOf({ onSubmitCapture: true })\n    }\n  },\n  suspend: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onSuspend: true }),\n      captured: keyOf({ onSuspendCapture: true })\n    }\n  },\n  timeUpdate: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTimeUpdate: true }),\n      captured: keyOf({ onTimeUpdateCapture: true })\n    }\n  },\n  touchCancel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchCancel: true }),\n      captured: keyOf({ onTouchCancelCapture: true })\n    }\n  },\n  touchEnd: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchEnd: true }),\n      captured: keyOf({ onTouchEndCapture: true })\n    }\n  },\n  touchMove: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchMove: true }),\n      captured: keyOf({ onTouchMoveCapture: true })\n    }\n  },\n  touchStart: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onTouchStart: true }),\n      captured: keyOf({ onTouchStartCapture: true })\n    }\n  },\n  volumeChange: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onVolumeChange: true }),\n      captured: keyOf({ onVolumeChangeCapture: true })\n    }\n  },\n  waiting: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWaiting: true }),\n      captured: keyOf({ onWaitingCapture: true })\n    }\n  },\n  wheel: {\n    phasedRegistrationNames: {\n      bubbled: keyOf({ onWheel: true }),\n      captured: keyOf({ onWheelCapture: true })\n    }\n  }\n};\n\nvar topLevelEventsToDispatchConfig = {\n  topAbort: eventTypes.abort,\n  topBlur: eventTypes.blur,\n  topCanPlay: eventTypes.canPlay,\n  topCanPlayThrough: eventTypes.canPlayThrough,\n  topClick: eventTypes.click,\n  topContextMenu: eventTypes.contextMenu,\n  topCopy: eventTypes.copy,\n  topCut: eventTypes.cut,\n  topDoubleClick: eventTypes.doubleClick,\n  topDrag: eventTypes.drag,\n  topDragEnd: eventTypes.dragEnd,\n  topDragEnter: eventTypes.dragEnter,\n  topDragExit: eventTypes.dragExit,\n  topDragLeave: eventTypes.dragLeave,\n  topDragOver: eventTypes.dragOver,\n  topDragStart: eventTypes.dragStart,\n  topDrop: eventTypes.drop,\n  topDurationChange: eventTypes.durationChange,\n  topEmptied: eventTypes.emptied,\n  topEncrypted: eventTypes.encrypted,\n  topEnded: eventTypes.ended,\n  topError: eventTypes.error,\n  topFocus: eventTypes.focus,\n  topInput: eventTypes.input,\n  topKeyDown: eventTypes.keyDown,\n  topKeyPress: eventTypes.keyPress,\n  topKeyUp: eventTypes.keyUp,\n  topLoad: eventTypes.load,\n  topLoadedData: eventTypes.loadedData,\n  topLoadedMetadata: eventTypes.loadedMetadata,\n  topLoadStart: eventTypes.loadStart,\n  topMouseDown: eventTypes.mouseDown,\n  topMouseMove: eventTypes.mouseMove,\n  topMouseOut: eventTypes.mouseOut,\n  topMouseOver: eventTypes.mouseOver,\n  topMouseUp: eventTypes.mouseUp,\n  topPaste: eventTypes.paste,\n  topPause: eventTypes.pause,\n  topPlay: eventTypes.play,\n  topPlaying: eventTypes.playing,\n  topProgress: eventTypes.progress,\n  topRateChange: eventTypes.rateChange,\n  topReset: eventTypes.reset,\n  topScroll: eventTypes.scroll,\n  topSeeked: eventTypes.seeked,\n  topSeeking: eventTypes.seeking,\n  topStalled: eventTypes.stalled,\n  topSubmit: eventTypes.submit,\n  topSuspend: eventTypes.suspend,\n  topTimeUpdate: eventTypes.timeUpdate,\n  topTouchCancel: eventTypes.touchCancel,\n  topTouchEnd: eventTypes.touchEnd,\n  topTouchMove: eventTypes.touchMove,\n  topTouchStart: eventTypes.touchStart,\n  topVolumeChange: eventTypes.volumeChange,\n  topWaiting: eventTypes.waiting,\n  topWheel: eventTypes.wheel\n};\n\nfor (var type in topLevelEventsToDispatchConfig) {\n  topLevelEventsToDispatchConfig[type].dependencies = [type];\n}\n\nvar ON_CLICK_KEY = keyOf({ onClick: null });\nvar onClickListeners = {};\n\nvar SimpleEventPlugin = {\n\n  eventTypes: eventTypes,\n\n  /**\n   * @param {string} topLevelType Record from `EventConstants`.\n   * @param {DOMEventTarget} topLevelTarget The listening component root node.\n   * @param {string} topLevelTargetID ID of `topLevelTarget`.\n   * @param {object} nativeEvent Native browser event.\n   * @return {*} An accumulation of synthetic events.\n   * @see {EventPluginHub.extractEvents}\n   */\n  extractEvents: function (topLevelType, topLevelTarget, topLevelTargetID, nativeEvent, nativeEventTarget) {\n    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];\n    if (!dispatchConfig) {\n      return null;\n    }\n    var EventConstructor;\n    switch (topLevelType) {\n      case topLevelTypes.topAbort:\n      case topLevelTypes.topCanPlay:\n      case topLevelTypes.topCanPlayThrough:\n      case topLevelTypes.topDurationChange:\n      case topLevelTypes.topEmptied:\n      case topLevelTypes.topEncrypted:\n      case topLevelTypes.topEnded:\n      case topLevelTypes.topError:\n      case topLevelTypes.topInput:\n      case topLevelTypes.topLoad:\n      case topLevelTypes.topLoadedData:\n      case topLevelTypes.topLoadedMetadata:\n      case topLevelTypes.topLoadStart:\n      case topLevelTypes.topPause:\n      case topLevelTypes.topPlay:\n      case topLevelTypes.topPlaying:\n      case topLevelTypes.topProgress:\n      case topLevelTypes.topRateChange:\n      case topLevelTypes.topReset:\n      case topLevelTypes.topSeeked:\n      case topLevelTypes.topSeeking:\n      case topLevelTypes.topStalled:\n      case topLevelTypes.topSubmit:\n      case topLevelTypes.topSuspend:\n      case topLevelTypes.topTimeUpdate:\n      case topLevelTypes.topVolumeChange:\n      case topLevelTypes.topWaiting:\n        // HTML Events\n        // @see http://www.w3.org/TR/html5/index.html#events-0\n        EventConstructor = SyntheticEvent;\n        break;\n      case topLevelTypes.topKeyPress:\n        // FireFox creates a keypress event for function keys too. This removes\n        // the unwanted keypress events. Enter is however both printable and\n        // non-printable. One would expect Tab to be as well (but it isn't).\n        if (getEventCharCode(nativeEvent) === 0) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topKeyDown:\n      case topLevelTypes.topKeyUp:\n        EventConstructor = SyntheticKeyboardEvent;\n        break;\n      case topLevelTypes.topBlur:\n      case topLevelTypes.topFocus:\n        EventConstructor = SyntheticFocusEvent;\n        break;\n      case topLevelTypes.topClick:\n        // Firefox creates a click event on right mouse clicks. This removes the\n        // unwanted click events.\n        if (nativeEvent.button === 2) {\n          return null;\n        }\n      /* falls through */\n      case topLevelTypes.topContextMenu:\n      case topLevelTypes.topDoubleClick:\n      case topLevelTypes.topMouseDown:\n      case topLevelTypes.topMouseMove:\n      case topLevelTypes.topMouseOut:\n      case topLevelTypes.topMouseOver:\n      case topLevelTypes.topMouseUp:\n        EventConstructor = SyntheticMouseEvent;\n        break;\n      case topLevelTypes.topDrag:\n      case topLevelTypes.topDragEnd:\n      case topLevelTypes.topDragEnter:\n      case topLevelTypes.topDragExit:\n      case topLevelTypes.topDragLeave:\n      case topLevelTypes.topDragOver:\n      case topLevelTypes.topDragStart:\n      case topLevelTypes.topDrop:\n        EventConstructor = SyntheticDragEvent;\n        break;\n      case topLevelTypes.topTouchCancel:\n      case topLevelTypes.topTouchEnd:\n      case topLevelTypes.topTouchMove:\n      case topLevelTypes.topTouchStart:\n        EventConstructor = SyntheticTouchEvent;\n        break;\n      case topLevelTypes.topScroll:\n        EventConstructor = SyntheticUIEvent;\n        break;\n      case topLevelTypes.topWheel:\n        EventConstructor = SyntheticWheelEvent;\n        break;\n      case topLevelTypes.topCopy:\n      case topLevelTypes.topCut:\n      case topLevelTypes.topPaste:\n        EventConstructor = SyntheticClipboardEvent;\n        break;\n    }\n    !EventConstructor ? \"development\" !== 'production' ? invariant(false, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(false) : undefined;\n    var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent, nativeEventTarget);\n    EventPropagators.accumulateTwoPhaseDispatches(event);\n    return event;\n  },\n\n  didPutListener: function (id, registrationName, listener) {\n    // Mobile Safari does not fire properly bubble click events on\n    // non-interactive elements, which means delegated click listeners do not\n    // fire. The workaround for this bug involves attaching an empty click\n    // listener on the target node.\n    if (registrationName === ON_CLICK_KEY) {\n      var node = ReactMount.getNode(id);\n      if (!onClickListeners[id]) {\n        onClickListeners[id] = EventListener.listen(node, 'click', emptyFunction);\n      }\n    }\n  },\n\n  willDeleteListener: function (id, registrationName) {\n    if (registrationName === ON_CLICK_KEY) {\n      onClickListeners[id].remove();\n      delete onClickListeners[id];\n    }\n  }\n\n};\n\nmodule.exports = SimpleEventPlugin;\n},{\"111\":111,\"129\":129,\"136\":136,\"144\":144,\"148\":148,\"15\":15,\"19\":19,\"65\":65,\"89\":89,\"91\":91,\"92\":92,\"93\":93,\"95\":95,\"96\":96,\"97\":97,\"98\":98,\"99\":99}],89:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticClipboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(92);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\nvar ClipboardEventInterface = {\n  clipboardData: function (event) {\n    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);\n\nmodule.exports = SyntheticClipboardEvent;\n},{\"92\":92}],90:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticCompositionEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(92);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\nvar CompositionEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);\n\nmodule.exports = SyntheticCompositionEvent;\n},{\"92\":92}],91:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticDragEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = _dereq_(96);\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar DragEventInterface = {\n  dataTransfer: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);\n\nmodule.exports = SyntheticDragEvent;\n},{\"96\":96}],92:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar PooledClass = _dereq_(24);\n\nvar assign = _dereq_(23);\nvar emptyFunction = _dereq_(136);\nvar warning = _dereq_(155);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar EventInterface = {\n  type: null,\n  // currentTarget is set when dispatching; no use in copying it here\n  currentTarget: emptyFunction.thatReturnsNull,\n  eventPhase: null,\n  bubbles: null,\n  cancelable: null,\n  timeStamp: function (event) {\n    return event.timeStamp || Date.now();\n  },\n  defaultPrevented: null,\n  isTrusted: null\n};\n\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n */\nfunction SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  this.dispatchConfig = dispatchConfig;\n  this.dispatchMarker = dispatchMarker;\n  this.nativeEvent = nativeEvent;\n  this.target = nativeEventTarget;\n  this.currentTarget = nativeEventTarget;\n\n  var Interface = this.constructor.Interface;\n  for (var propName in Interface) {\n    if (!Interface.hasOwnProperty(propName)) {\n      continue;\n    }\n    var normalize = Interface[propName];\n    if (normalize) {\n      this[propName] = normalize(nativeEvent);\n    } else {\n      this[propName] = nativeEvent[propName];\n    }\n  }\n\n  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n  if (defaultPrevented) {\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  } else {\n    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;\n  }\n  this.isPropagationStopped = emptyFunction.thatReturnsFalse;\n}\n\nassign(SyntheticEvent.prototype, {\n\n  preventDefault: function () {\n    this.defaultPrevented = true;\n    var event = this.nativeEvent;\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `preventDefault` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n    }\n    if (!event) {\n      return;\n    }\n\n    if (event.preventDefault) {\n      event.preventDefault();\n    } else {\n      event.returnValue = false;\n    }\n    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;\n  },\n\n  stopPropagation: function () {\n    var event = this.nativeEvent;\n    if (\"development\" !== 'production') {\n      \"development\" !== 'production' ? warning(event, 'This synthetic event is reused for performance reasons. If you\\'re ' + 'seeing this, you\\'re calling `stopPropagation` on a ' + 'released/nullified synthetic event. This is a no-op. See ' + 'https://fb.me/react-event-pooling for more information.') : undefined;\n    }\n    if (!event) {\n      return;\n    }\n\n    if (event.stopPropagation) {\n      event.stopPropagation();\n    } else {\n      event.cancelBubble = true;\n    }\n    this.isPropagationStopped = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * We release all dispatched `SyntheticEvent`s after each event loop, adding\n   * them back into the pool. This allows a way to hold onto a reference that\n   * won't be added back into the pool.\n   */\n  persist: function () {\n    this.isPersistent = emptyFunction.thatReturnsTrue;\n  },\n\n  /**\n   * Checks if this event should be released back into the pool.\n   *\n   * @return {boolean} True if this should not be released, false otherwise.\n   */\n  isPersistent: emptyFunction.thatReturnsFalse,\n\n  /**\n   * `PooledClass` looks for `destructor` on each instance it releases.\n   */\n  destructor: function () {\n    var Interface = this.constructor.Interface;\n    for (var propName in Interface) {\n      this[propName] = null;\n    }\n    this.dispatchConfig = null;\n    this.dispatchMarker = null;\n    this.nativeEvent = null;\n  }\n\n});\n\nSyntheticEvent.Interface = EventInterface;\n\n/**\n * Helper to reduce boilerplate when creating subclasses.\n *\n * @param {function} Class\n * @param {?object} Interface\n */\nSyntheticEvent.augmentClass = function (Class, Interface) {\n  var Super = this;\n\n  var prototype = Object.create(Super.prototype);\n  assign(prototype, Class.prototype);\n  Class.prototype = prototype;\n  Class.prototype.constructor = Class;\n\n  Class.Interface = assign({}, Super.Interface, Interface);\n  Class.augmentClass = Super.augmentClass;\n\n  PooledClass.addPoolingTo(Class, PooledClass.fourArgumentPooler);\n};\n\nPooledClass.addPoolingTo(SyntheticEvent, PooledClass.fourArgumentPooler);\n\nmodule.exports = SyntheticEvent;\n},{\"136\":136,\"155\":155,\"23\":23,\"24\":24}],93:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticFocusEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(98);\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar FocusEventInterface = {\n  relatedTarget: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);\n\nmodule.exports = SyntheticFocusEvent;\n},{\"98\":98}],94:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticInputEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(92);\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n *      /#events-inputevents\n */\nvar InputEventInterface = {\n  data: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);\n\nmodule.exports = SyntheticInputEvent;\n},{\"92\":92}],95:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticKeyboardEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(98);\n\nvar getEventCharCode = _dereq_(111);\nvar getEventKey = _dereq_(112);\nvar getEventModifierState = _dereq_(113);\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar KeyboardEventInterface = {\n  key: getEventKey,\n  location: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  repeat: null,\n  locale: null,\n  getModifierState: getEventModifierState,\n  // Legacy Interface\n  charCode: function (event) {\n    // `charCode` is the result of a KeyPress event and represents the value of\n    // the actual printable character.\n\n    // KeyPress is deprecated, but its replacement is not yet final and not\n    // implemented in any major browser. Only KeyPress has charCode.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    return 0;\n  },\n  keyCode: function (event) {\n    // `keyCode` is the result of a KeyDown/Up event and represents the value of\n    // physical keyboard key.\n\n    // The actual meaning of the value depends on the users' keyboard layout\n    // which cannot be detected. Assuming that it is a US keyboard layout\n    // provides a surprisingly accurate mapping for US and European users.\n    // Due to this, it is left to the user to implement at this time.\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  },\n  which: function (event) {\n    // `which` is an alias for either `keyCode` or `charCode` depending on the\n    // type of the event.\n    if (event.type === 'keypress') {\n      return getEventCharCode(event);\n    }\n    if (event.type === 'keydown' || event.type === 'keyup') {\n      return event.keyCode;\n    }\n    return 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);\n\nmodule.exports = SyntheticKeyboardEvent;\n},{\"111\":111,\"112\":112,\"113\":113,\"98\":98}],96:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticMouseEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(98);\nvar ViewportMetrics = _dereq_(101);\n\nvar getEventModifierState = _dereq_(113);\n\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar MouseEventInterface = {\n  screenX: null,\n  screenY: null,\n  clientX: null,\n  clientY: null,\n  ctrlKey: null,\n  shiftKey: null,\n  altKey: null,\n  metaKey: null,\n  getModifierState: getEventModifierState,\n  button: function (event) {\n    // Webkit, Firefox, IE9+\n    // which:  1 2 3\n    // button: 0 1 2 (standard)\n    var button = event.button;\n    if ('which' in event) {\n      return button;\n    }\n    // IE<9\n    // which:  undefined\n    // button: 0 0 0\n    // button: 1 4 2 (onmouseup)\n    return button === 2 ? 2 : button === 4 ? 1 : 0;\n  },\n  buttons: null,\n  relatedTarget: function (event) {\n    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n  },\n  // \"Proprietary\" Interface.\n  pageX: function (event) {\n    return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;\n  },\n  pageY: function (event) {\n    return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);\n\nmodule.exports = SyntheticMouseEvent;\n},{\"101\":101,\"113\":113,\"98\":98}],97:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticTouchEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticUIEvent = _dereq_(98);\n\nvar getEventModifierState = _dereq_(113);\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\nvar TouchEventInterface = {\n  touches: null,\n  targetTouches: null,\n  changedTouches: null,\n  altKey: null,\n  metaKey: null,\n  ctrlKey: null,\n  shiftKey: null,\n  getModifierState: getEventModifierState\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticUIEvent}\n */\nfunction SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);\n\nmodule.exports = SyntheticTouchEvent;\n},{\"113\":113,\"98\":98}],98:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticUIEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticEvent = _dereq_(92);\n\nvar getEventTarget = _dereq_(114);\n\n/**\n * @interface UIEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar UIEventInterface = {\n  view: function (event) {\n    if (event.view) {\n      return event.view;\n    }\n\n    var target = getEventTarget(event);\n    if (target != null && target.window === target) {\n      // target is a window object\n      return target;\n    }\n\n    var doc = target.ownerDocument;\n    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n    if (doc) {\n      return doc.defaultView || doc.parentWindow;\n    } else {\n      return window;\n    }\n  },\n  detail: function (event) {\n    return event.detail || 0;\n  }\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticEvent}\n */\nfunction SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);\n\nmodule.exports = SyntheticUIEvent;\n},{\"114\":114,\"92\":92}],99:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule SyntheticWheelEvent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar SyntheticMouseEvent = _dereq_(96);\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\nvar WheelEventInterface = {\n  deltaX: function (event) {\n    return 'deltaX' in event ? event.deltaX :\n    // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n  },\n  deltaY: function (event) {\n    return 'deltaY' in event ? event.deltaY :\n    // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n    'wheelDeltaY' in event ? -event.wheelDeltaY :\n    // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n    'wheelDelta' in event ? -event.wheelDelta : 0;\n  },\n  deltaZ: null,\n\n  // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n  // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n  deltaMode: null\n};\n\n/**\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {string} dispatchMarker Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @extends {SyntheticMouseEvent}\n */\nfunction SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget) {\n  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent, nativeEventTarget);\n}\n\nSyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);\n\nmodule.exports = SyntheticWheelEvent;\n},{\"96\":96}],100:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule Transaction\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\n/**\n * `Transaction` creates a black box that is able to wrap any method such that\n * certain invariants are maintained before and after the method is invoked\n * (Even if an exception is thrown while invoking the wrapped method). Whoever\n * instantiates a transaction can provide enforcers of the invariants at\n * creation time. The `Transaction` class itself will supply one additional\n * automatic invariant for you - the invariant that any transaction instance\n * should not be run while it is already being run. You would typically create a\n * single instance of a `Transaction` for reuse multiple times, that potentially\n * is used to wrap several different methods. Wrappers are extremely simple -\n * they only require implementing two methods.\n *\n * <pre>\n *                       wrappers (injected at creation time)\n *                                      +        +\n *                                      |        |\n *                    +-----------------|--------|--------------+\n *                    |                 v        |              |\n *                    |      +---------------+   |              |\n *                    |   +--|    wrapper1   |---|----+         |\n *                    |   |  +---------------+   v    |         |\n *                    |   |          +-------------+  |         |\n *                    |   |     +----|   wrapper2  |--------+   |\n *                    |   |     |    +-------------+  |     |   |\n *                    |   |     |                     |     |   |\n *                    |   v     v                     v     v   | wrapper\n *                    | +---+ +---+   +---------+   +---+ +---+ | invariants\n * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained\n * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | |   | |   |   |         |   |   | |   | |\n *                    | +---+ +---+   +---------+   +---+ +---+ |\n *                    |  initialize                    close    |\n *                    +-----------------------------------------+\n * </pre>\n *\n * Use cases:\n * - Preserving the input selection ranges before/after reconciliation.\n *   Restoring selection even in the event of an unexpected error.\n * - Deactivating events while rearranging the DOM, preventing blurs/focuses,\n *   while guaranteeing that afterwards, the event system is reactivated.\n * - Flushing a queue of collected DOM mutations to the main UI thread after a\n *   reconciliation takes place in a worker thread.\n * - Invoking any collected `componentDidUpdate` callbacks after rendering new\n *   content.\n * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue\n *   to preserve the `scrollTop` (an automatic scroll aware DOM).\n * - (Future use case): Layout calculations before and after DOM updates.\n *\n * Transactional plugin API:\n * - A module that has an `initialize` method that returns any precomputation.\n * - and a `close` method that accepts the precomputation. `close` is invoked\n *   when the wrapped process is completed, or has failed.\n *\n * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules\n * that implement `initialize` and `close`.\n * @return {Transaction} Single transaction for reuse in thread.\n *\n * @class Transaction\n */\nvar Mixin = {\n  /**\n   * Sets up this instance so that it is prepared for collecting metrics. Does\n   * so such that this setup method may be used on an instance that is already\n   * initialized, in a way that does not consume additional memory upon reuse.\n   * That can be useful if you decide to make your subclass of this mixin a\n   * \"PooledClass\".\n   */\n  reinitializeTransaction: function () {\n    this.transactionWrappers = this.getTransactionWrappers();\n    if (this.wrapperInitData) {\n      this.wrapperInitData.length = 0;\n    } else {\n      this.wrapperInitData = [];\n    }\n    this._isInTransaction = false;\n  },\n\n  _isInTransaction: false,\n\n  /**\n   * @abstract\n   * @return {Array<TransactionWrapper>} Array of transaction wrappers.\n   */\n  getTransactionWrappers: null,\n\n  isInTransaction: function () {\n    return !!this._isInTransaction;\n  },\n\n  /**\n   * Executes the function within a safety window. Use this for the top level\n   * methods that result in large amounts of computation/mutations that would\n   * need to be safety checked. The optional arguments helps prevent the need\n   * to bind in many cases.\n   *\n   * @param {function} method Member of scope to call.\n   * @param {Object} scope Scope to invoke from.\n   * @param {Object?=} a Argument to pass to the method.\n   * @param {Object?=} b Argument to pass to the method.\n   * @param {Object?=} c Argument to pass to the method.\n   * @param {Object?=} d Argument to pass to the method.\n   * @param {Object?=} e Argument to pass to the method.\n   * @param {Object?=} f Argument to pass to the method.\n   *\n   * @return {*} Return value from `method`.\n   */\n  perform: function (method, scope, a, b, c, d, e, f) {\n    !!this.isInTransaction() ? \"development\" !== 'production' ? invariant(false, 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(false) : undefined;\n    var errorThrown;\n    var ret;\n    try {\n      this._isInTransaction = true;\n      // Catching errors makes debugging more difficult, so we start with\n      // errorThrown set to true before setting it to false after calling\n      // close -- if it's still set to true in the finally block, it means\n      // one of these calls threw.\n      errorThrown = true;\n      this.initializeAll(0);\n      ret = method.call(scope, a, b, c, d, e, f);\n      errorThrown = false;\n    } finally {\n      try {\n        if (errorThrown) {\n          // If `method` throws, prefer to show that stack trace over any thrown\n          // by invoking `closeAll`.\n          try {\n            this.closeAll(0);\n          } catch (err) {}\n        } else {\n          // Since `method` didn't throw, we don't want to silence the exception\n          // here.\n          this.closeAll(0);\n        }\n      } finally {\n        this._isInTransaction = false;\n      }\n    }\n    return ret;\n  },\n\n  initializeAll: function (startIndex) {\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      try {\n        // Catching errors makes debugging more difficult, so we start with the\n        // OBSERVED_ERROR state before overwriting it with the real return value\n        // of initialize -- if it's still set to OBSERVED_ERROR in the finally\n        // block, it means wrapper.initialize threw.\n        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;\n        this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;\n      } finally {\n        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {\n          // The initializer for wrapper i threw an error; initialize the\n          // remaining wrappers but silence any exceptions from them to ensure\n          // that the first error is the one to bubble up.\n          try {\n            this.initializeAll(i + 1);\n          } catch (err) {}\n        }\n      }\n    }\n  },\n\n  /**\n   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into\n   * them the respective return values of `this.transactionWrappers.init[i]`\n   * (`close`rs that correspond to initializers that failed will not be\n   * invoked).\n   */\n  closeAll: function (startIndex) {\n    !this.isInTransaction() ? \"development\" !== 'production' ? invariant(false, 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(false) : undefined;\n    var transactionWrappers = this.transactionWrappers;\n    for (var i = startIndex; i < transactionWrappers.length; i++) {\n      var wrapper = transactionWrappers[i];\n      var initData = this.wrapperInitData[i];\n      var errorThrown;\n      try {\n        // Catching errors makes debugging more difficult, so we start with\n        // errorThrown set to true before setting it to false after calling\n        // close -- if it's still set to true in the finally block, it means\n        // wrapper.close threw.\n        errorThrown = true;\n        if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {\n          wrapper.close.call(this, initData);\n        }\n        errorThrown = false;\n      } finally {\n        if (errorThrown) {\n          // The closer for wrapper i threw an error; close the remaining\n          // wrappers but silence any exceptions from them to ensure that the\n          // first error is the one to bubble up.\n          try {\n            this.closeAll(i + 1);\n          } catch (e) {}\n        }\n      }\n    }\n    this.wrapperInitData.length = 0;\n  }\n};\n\nvar Transaction = {\n\n  Mixin: Mixin,\n\n  /**\n   * Token to look for to determine if an error occurred.\n   */\n  OBSERVED_ERROR: {}\n\n};\n\nmodule.exports = Transaction;\n},{\"144\":144}],101:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ViewportMetrics\n */\n\n'use strict';\n\nvar ViewportMetrics = {\n\n  currentScrollLeft: 0,\n\n  currentScrollTop: 0,\n\n  refreshScrollValues: function (scrollPosition) {\n    ViewportMetrics.currentScrollLeft = scrollPosition.x;\n    ViewportMetrics.currentScrollTop = scrollPosition.y;\n  }\n\n};\n\nmodule.exports = ViewportMetrics;\n},{}],102:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule accumulateInto\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\n/**\n *\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n  !(next != null) ? \"development\" !== 'production' ? invariant(false, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(false) : undefined;\n  if (current == null) {\n    return next;\n  }\n\n  // Both are not empty. Warning: Never call x.concat(y) when you are not\n  // certain that x is an Array (x could be a string with concat method).\n  var currentIsArray = Array.isArray(current);\n  var nextIsArray = Array.isArray(next);\n\n  if (currentIsArray && nextIsArray) {\n    current.push.apply(current, next);\n    return current;\n  }\n\n  if (currentIsArray) {\n    current.push(next);\n    return current;\n  }\n\n  if (nextIsArray) {\n    // A bit too dangerous to mutate `next`.\n    return [current].concat(next);\n  }\n\n  return [current, next];\n}\n\nmodule.exports = accumulateInto;\n},{\"144\":144}],103:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule adler32\n */\n\n'use strict';\n\nvar MOD = 65521;\n\n// adler32 is not cryptographically strong, and is only used to sanity check that\n// markup generated on the server matches the markup generated on the client.\n// This implementation (a modified version of the SheetJS version) has been optimized\n// for our use case, at the expense of conforming to the adler32 specification\n// for non-ascii inputs.\nfunction adler32(data) {\n  var a = 1;\n  var b = 0;\n  var i = 0;\n  var l = data.length;\n  var m = l & ~0x3;\n  while (i < m) {\n    for (; i < Math.min(i + 4096, m); i += 4) {\n      b += (a += data.charCodeAt(i)) + (a += data.charCodeAt(i + 1)) + (a += data.charCodeAt(i + 2)) + (a += data.charCodeAt(i + 3));\n    }\n    a %= MOD;\n    b %= MOD;\n  }\n  for (; i < l; i++) {\n    b += a += data.charCodeAt(i);\n  }\n  a %= MOD;\n  b %= MOD;\n  return a | b << 16;\n}\n\nmodule.exports = adler32;\n},{}],104:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule canDefineProperty\n */\n\n'use strict';\n\nvar canDefineProperty = false;\nif (\"development\" !== 'production') {\n  try {\n    Object.defineProperty({}, 'x', { get: function () {} });\n    canDefineProperty = true;\n  } catch (x) {\n    // IE will fail on defineProperty\n  }\n}\n\nmodule.exports = canDefineProperty;\n},{}],105:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule dangerousStyleValue\n * @typechecks static-only\n */\n\n'use strict';\n\nvar CSSProperty = _dereq_(4);\n\nvar isUnitlessNumber = CSSProperty.isUnitlessNumber;\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n  if (isEmpty) {\n    return '';\n  }\n\n  var isNonNumeric = isNaN(value);\n  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {\n    return '' + value; // cast to string\n  }\n\n  if (typeof value === 'string') {\n    value = value.trim();\n  }\n  return value + 'px';\n}\n\nmodule.exports = dangerousStyleValue;\n},{\"4\":4}],106:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule deprecated\n */\n\n'use strict';\n\nvar assign = _dereq_(23);\nvar warning = _dereq_(155);\n\n/**\n * This will log a single deprecation notice per function and forward the call\n * on to the new API.\n *\n * @param {string} fnName The name of the function\n * @param {string} newModule The module that fn will exist in\n * @param {string} newPackage The module that fn will exist in\n * @param {*} ctx The context this forwarded call should run in\n * @param {function} fn The function to forward on to\n * @return {function} The function that will warn once and then call fn\n */\nfunction deprecated(fnName, newModule, newPackage, ctx, fn) {\n  var warned = false;\n  if (\"development\" !== 'production') {\n    var newFn = function () {\n      \"development\" !== 'production' ? warning(warned,\n      // Require examples in this string must be split to prevent React's\n      // build tools from mistaking them for real requires.\n      // Otherwise the build tools will attempt to build a '%s' module.\n      'React.%s is deprecated. Please use %s.%s from require' + '(\\'%s\\') ' + 'instead.', fnName, newModule, fnName, newPackage) : undefined;\n      warned = true;\n      return fn.apply(ctx, arguments);\n    };\n    // We need to make sure all properties of the original fn are copied over.\n    // In particular, this is needed to support PropTypes\n    return assign(newFn, fn);\n  }\n\n  return fn;\n}\n\nmodule.exports = deprecated;\n},{\"155\":155,\"23\":23}],107:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule escapeTextContentForBrowser\n */\n\n'use strict';\n\nvar ESCAPE_LOOKUP = {\n  '&': '&amp;',\n  '>': '&gt;',\n  '<': '&lt;',\n  '\"': '&quot;',\n  '\\'': '&#x27;'\n};\n\nvar ESCAPE_REGEX = /[&><\"']/g;\n\nfunction escaper(match) {\n  return ESCAPE_LOOKUP[match];\n}\n\n/**\n * Escapes text to prevent scripting attacks.\n *\n * @param {*} text Text value to escape.\n * @return {string} An escaped string.\n */\nfunction escapeTextContentForBrowser(text) {\n  return ('' + text).replace(ESCAPE_REGEX, escaper);\n}\n\nmodule.exports = escapeTextContentForBrowser;\n},{}],108:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule findDOMNode\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(34);\nvar ReactInstanceMap = _dereq_(62);\nvar ReactMount = _dereq_(65);\n\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\n/**\n * Returns the DOM node rendered by this element.\n *\n * @param {ReactComponent|DOMElement} componentOrElement\n * @return {?DOMElement} The root node of this element.\n */\nfunction findDOMNode(componentOrElement) {\n  if (\"development\" !== 'production') {\n    var owner = ReactCurrentOwner.current;\n    if (owner !== null) {\n      \"development\" !== 'production' ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : undefined;\n      owner._warnedAboutRefsInRender = true;\n    }\n  }\n  if (componentOrElement == null) {\n    return null;\n  }\n  if (componentOrElement.nodeType === 1) {\n    return componentOrElement;\n  }\n  if (ReactInstanceMap.has(componentOrElement)) {\n    return ReactMount.getNodeFromInstance(componentOrElement);\n  }\n  !(componentOrElement.render == null || typeof componentOrElement.render !== 'function') ? \"development\" !== 'production' ? invariant(false, 'findDOMNode was called on an unmounted component.') : invariant(false) : undefined;\n  !false ? \"development\" !== 'production' ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false) : undefined;\n}\n\nmodule.exports = findDOMNode;\n},{\"144\":144,\"155\":155,\"34\":34,\"62\":62,\"65\":65}],109:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule flattenChildren\n */\n\n'use strict';\n\nvar traverseAllChildren = _dereq_(127);\nvar warning = _dereq_(155);\n\n/**\n * @param {function} traverseContext Context passed through traversal.\n * @param {?ReactComponent} child React child component.\n * @param {!string} name String name of key path to child.\n */\nfunction flattenSingleChildIntoContext(traverseContext, child, name) {\n  // We found a component instance.\n  var result = traverseContext;\n  var keyUnique = result[name] === undefined;\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : undefined;\n  }\n  if (keyUnique && child != null) {\n    result[name] = child;\n  }\n}\n\n/**\n * Flattens children that are typically specified as `props.children`. Any null\n * children will not be included in the resulting object.\n * @return {!object} flattened children keyed by name.\n */\nfunction flattenChildren(children) {\n  if (children == null) {\n    return children;\n  }\n  var result = {};\n  traverseAllChildren(children, flattenSingleChildIntoContext, result);\n  return result;\n}\n\nmodule.exports = flattenChildren;\n},{\"127\":127,\"155\":155}],110:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule forEachAccumulated\n */\n\n'use strict';\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n */\nvar forEachAccumulated = function (arr, cb, scope) {\n  if (Array.isArray(arr)) {\n    arr.forEach(cb, scope);\n  } else if (arr) {\n    cb.call(scope, arr);\n  }\n};\n\nmodule.exports = forEachAccumulated;\n},{}],111:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventCharCode\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n  var charCode;\n  var keyCode = nativeEvent.keyCode;\n\n  if ('charCode' in nativeEvent) {\n    charCode = nativeEvent.charCode;\n\n    // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n    if (charCode === 0 && keyCode === 13) {\n      charCode = 13;\n    }\n  } else {\n    // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n    charCode = keyCode;\n  }\n\n  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n  // Must not discard the (non-)printable Enter-key.\n  if (charCode >= 32 || charCode === 13) {\n    return charCode;\n  }\n\n  return 0;\n}\n\nmodule.exports = getEventCharCode;\n},{}],112:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventKey\n * @typechecks static-only\n */\n\n'use strict';\n\nvar getEventCharCode = _dereq_(111);\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar normalizeKey = {\n  'Esc': 'Escape',\n  'Spacebar': ' ',\n  'Left': 'ArrowLeft',\n  'Up': 'ArrowUp',\n  'Right': 'ArrowRight',\n  'Down': 'ArrowDown',\n  'Del': 'Delete',\n  'Win': 'OS',\n  'Menu': 'ContextMenu',\n  'Apps': 'ContextMenu',\n  'Scroll': 'ScrollLock',\n  'MozPrintableKey': 'Unidentified'\n};\n\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\nvar translateToKey = {\n  8: 'Backspace',\n  9: 'Tab',\n  12: 'Clear',\n  13: 'Enter',\n  16: 'Shift',\n  17: 'Control',\n  18: 'Alt',\n  19: 'Pause',\n  20: 'CapsLock',\n  27: 'Escape',\n  32: ' ',\n  33: 'PageUp',\n  34: 'PageDown',\n  35: 'End',\n  36: 'Home',\n  37: 'ArrowLeft',\n  38: 'ArrowUp',\n  39: 'ArrowRight',\n  40: 'ArrowDown',\n  45: 'Insert',\n  46: 'Delete',\n  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',\n  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',\n  144: 'NumLock',\n  145: 'ScrollLock',\n  224: 'Meta'\n};\n\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\nfunction getEventKey(nativeEvent) {\n  if (nativeEvent.key) {\n    // Normalize inconsistent values reported by browsers due to\n    // implementations of a working draft specification.\n\n    // FireFox implements `key` but returns `MozPrintableKey` for all\n    // printable characters (normalized to `Unidentified`), ignore it.\n    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n    if (key !== 'Unidentified') {\n      return key;\n    }\n  }\n\n  // Browser does not implement `key`, polyfill as much of it as we can.\n  if (nativeEvent.type === 'keypress') {\n    var charCode = getEventCharCode(nativeEvent);\n\n    // The enter-key is technically both printable and non-printable and can\n    // thus be captured by `keypress`, no other non-printable key should.\n    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n  }\n  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n    // While user keyboard layout determines the actual meaning of each\n    // `keyCode` value, almost all function keys have a universal value.\n    return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n  }\n  return '';\n}\n\nmodule.exports = getEventKey;\n},{\"111\":111}],113:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventModifierState\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\n\nvar modifierKeyToProp = {\n  'Alt': 'altKey',\n  'Control': 'ctrlKey',\n  'Meta': 'metaKey',\n  'Shift': 'shiftKey'\n};\n\n// IE8 does not implement getModifierState so we simply map it to the only\n// modifier keys exposed by the event itself, does not support Lock-keys.\n// Currently, all major browsers except Chrome seems to support Lock-keys.\nfunction modifierStateGetter(keyArg) {\n  var syntheticEvent = this;\n  var nativeEvent = syntheticEvent.nativeEvent;\n  if (nativeEvent.getModifierState) {\n    return nativeEvent.getModifierState(keyArg);\n  }\n  var keyProp = modifierKeyToProp[keyArg];\n  return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n  return modifierStateGetter;\n}\n\nmodule.exports = getEventModifierState;\n},{}],114:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getEventTarget\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\nfunction getEventTarget(nativeEvent) {\n  var target = nativeEvent.target || nativeEvent.srcElement || window;\n  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n  // @see http://www.quirksmode.org/js/events_properties.html\n  return target.nodeType === 3 ? target.parentNode : target;\n}\n\nmodule.exports = getEventTarget;\n},{}],115:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getIteratorFn\n * @typechecks static-only\n */\n\n'use strict';\n\n/* global Symbol */\nvar ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n/**\n * Returns the iterator method function contained on the iterable object.\n *\n * Be sure to invoke the function with the iterable as context:\n *\n *     var iteratorFn = getIteratorFn(myIterable);\n *     if (iteratorFn) {\n *       var iterator = iteratorFn.call(myIterable);\n *       ...\n *     }\n *\n * @param {?object} maybeIterable\n * @return {?function}\n */\nfunction getIteratorFn(maybeIterable) {\n  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n  if (typeof iteratorFn === 'function') {\n    return iteratorFn;\n  }\n}\n\nmodule.exports = getIteratorFn;\n},{}],116:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getNodeForCharacterOffset\n */\n\n'use strict';\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\nfunction getLeafNode(node) {\n  while (node && node.firstChild) {\n    node = node.firstChild;\n  }\n  return node;\n}\n\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\nfunction getSiblingNode(node) {\n  while (node) {\n    if (node.nextSibling) {\n      return node.nextSibling;\n    }\n    node = node.parentNode;\n  }\n}\n\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  var nodeStart = 0;\n  var nodeEnd = 0;\n\n  while (node) {\n    if (node.nodeType === 3) {\n      nodeEnd = nodeStart + node.textContent.length;\n\n      if (nodeStart <= offset && nodeEnd >= offset) {\n        return {\n          node: node,\n          offset: offset - nodeStart\n        };\n      }\n\n      nodeStart = nodeEnd;\n    }\n\n    node = getLeafNode(getSiblingNode(node));\n  }\n}\n\nmodule.exports = getNodeForCharacterOffset;\n},{}],117:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getTextContentAccessor\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar contentKey = null;\n\n/**\n * Gets the key used to access text content on a DOM node.\n *\n * @return {?string} Key used to access text content.\n * @internal\n */\nfunction getTextContentAccessor() {\n  if (!contentKey && ExecutionEnvironment.canUseDOM) {\n    // Prefer textContent to innerText because many browsers support both but\n    // SVG <text> elements don't support innerText even when <div> does.\n    contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';\n  }\n  return contentKey;\n}\n\nmodule.exports = getTextContentAccessor;\n},{\"130\":130}],118:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule instantiateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\nvar ReactCompositeComponent = _dereq_(33);\nvar ReactEmptyComponent = _dereq_(54);\nvar ReactNativeComponent = _dereq_(68);\n\nvar assign = _dereq_(23);\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\n// To avoid a cyclic dependency, we create the final class in this module\nvar ReactCompositeComponentWrapper = function () {};\nassign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {\n  _instantiateReactComponent: instantiateReactComponent\n});\n\nfunction getDeclarationErrorAddendum(owner) {\n  if (owner) {\n    var name = owner.getName();\n    if (name) {\n      return ' Check the render method of `' + name + '`.';\n    }\n  }\n  return '';\n}\n\n/**\n * Check if the type reference is a known internal type. I.e. not a user\n * provided composite type.\n *\n * @param {function} type\n * @return {boolean} Returns true if this is a valid internal type.\n */\nfunction isInternalComponentType(type) {\n  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';\n}\n\n/**\n * Given a ReactNode, create an instance that will actually be mounted.\n *\n * @param {ReactNode} node\n * @return {object} A new instance of the element's constructor.\n * @protected\n */\nfunction instantiateReactComponent(node) {\n  var instance;\n\n  if (node === null || node === false) {\n    instance = new ReactEmptyComponent(instantiateReactComponent);\n  } else if (typeof node === 'object') {\n    var element = node;\n    !(element && (typeof element.type === 'function' || typeof element.type === 'string')) ? \"development\" !== 'production' ? invariant(false, 'Element type is invalid: expected a string (for built-in components) ' + 'or a class/function (for composite components) but got: %s.%s', element.type == null ? element.type : typeof element.type, getDeclarationErrorAddendum(element._owner)) : invariant(false) : undefined;\n\n    // Special case string values\n    if (typeof element.type === 'string') {\n      instance = ReactNativeComponent.createInternalComponent(element);\n    } else if (isInternalComponentType(element.type)) {\n      // This is temporarily available for custom components that are not string\n      // representations. I.e. ART. Once those are updated to use the string\n      // representation, we can drop this code path.\n      instance = new element.type(element);\n    } else {\n      instance = new ReactCompositeComponentWrapper();\n    }\n  } else if (typeof node === 'string' || typeof node === 'number') {\n    instance = ReactNativeComponent.createInstanceForText(node);\n  } else {\n    !false ? \"development\" !== 'production' ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false) : undefined;\n  }\n\n  if (\"development\" !== 'production') {\n    \"development\" !== 'production' ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : undefined;\n  }\n\n  // Sets up the instance. This can probably just move into the constructor now.\n  instance.construct(node);\n\n  // These two fields are used by the DOM and ART diffing algorithms\n  // respectively. Instead of using expandos on components, we should be\n  // storing the state needed by the diffing algorithms elsewhere.\n  instance._mountIndex = 0;\n  instance._mountImage = null;\n\n  if (\"development\" !== 'production') {\n    instance._isOwnerNecessary = false;\n    instance._warnedAboutRefsInRender = false;\n  }\n\n  // Internal instances should fully constructed at this point, so they should\n  // not get any new fields added to them at this point.\n  if (\"development\" !== 'production') {\n    if (Object.preventExtensions) {\n      Object.preventExtensions(instance);\n    }\n  }\n\n  return instance;\n}\n\nmodule.exports = instantiateReactComponent;\n},{\"144\":144,\"155\":155,\"23\":23,\"33\":33,\"54\":54,\"68\":68}],119:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n  useHasFeature = document.implementation && document.implementation.hasFeature &&\n  // always returns true in newer browsers as per the standard.\n  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n  document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n  if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {\n    return false;\n  }\n\n  var eventName = 'on' + eventNameSuffix;\n  var isSupported = (eventName in document);\n\n  if (!isSupported) {\n    var element = document.createElement('div');\n    element.setAttribute(eventName, 'return;');\n    isSupported = typeof element[eventName] === 'function';\n  }\n\n  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n    // This is the only way to test support for the `wheel` event in IE9+.\n    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n  }\n\n  return isSupported;\n}\n\nmodule.exports = isEventSupported;\n},{\"130\":130}],120:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextInputElement\n */\n\n'use strict';\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n  'color': true,\n  'date': true,\n  'datetime': true,\n  'datetime-local': true,\n  'email': true,\n  'month': true,\n  'number': true,\n  'password': true,\n  'range': true,\n  'search': true,\n  'tel': true,\n  'text': true,\n  'time': true,\n  'url': true,\n  'week': true\n};\n\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return nodeName && (nodeName === 'input' && supportedInputTypes[elem.type] || nodeName === 'textarea');\n}\n\nmodule.exports = isTextInputElement;\n},{}],121:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule onlyChild\n */\n'use strict';\n\nvar ReactElement = _dereq_(52);\n\nvar invariant = _dereq_(144);\n\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection. The current implementation of this\n * function assumes that a single child gets passed without a wrapper, but the\n * purpose of this helper function is to abstract away the particular structure\n * of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactComponent} The first and only `ReactComponent` contained in the\n * structure.\n */\nfunction onlyChild(children) {\n  !ReactElement.isValidElement(children) ? \"development\" !== 'production' ? invariant(false, 'onlyChild must be passed a children with exactly one child.') : invariant(false) : undefined;\n  return children;\n}\n\nmodule.exports = onlyChild;\n},{\"144\":144,\"52\":52}],122:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule quoteAttributeValueForBrowser\n */\n\n'use strict';\n\nvar escapeTextContentForBrowser = _dereq_(107);\n\n/**\n * Escapes attribute value to prevent scripting attacks.\n *\n * @param {*} value Value to escape.\n * @return {string} An escaped string.\n */\nfunction quoteAttributeValueForBrowser(value) {\n  return '\"' + escapeTextContentForBrowser(value) + '\"';\n}\n\nmodule.exports = quoteAttributeValueForBrowser;\n},{\"107\":107}],123:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n* @providesModule renderSubtreeIntoContainer\n*/\n\n'use strict';\n\nvar ReactMount = _dereq_(65);\n\nmodule.exports = ReactMount.renderSubtreeIntoContainer;\n},{\"65\":65}],124:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setInnerHTML\n */\n\n/* globals MSApp */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar WHITESPACE_TEST = /^[ \\r\\n\\t\\f]/;\nvar NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \\r\\n\\t\\f\\/>]/;\n\n/**\n * Set the innerHTML property of a node, ensuring that whitespace is preserved\n * even in IE8.\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\nvar setInnerHTML = function (node, html) {\n  node.innerHTML = html;\n};\n\n// Win8 apps: Allow all html to be inserted\nif (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n  setInnerHTML = function (node, html) {\n    MSApp.execUnsafeLocalFunction(function () {\n      node.innerHTML = html;\n    });\n  };\n}\n\nif (ExecutionEnvironment.canUseDOM) {\n  // IE8: When updating a just created node with innerHTML only leading\n  // whitespace is removed. When updating an existing node with innerHTML\n  // whitespace in root TextNodes is also collapsed.\n  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html\n\n  // Feature detection; only IE8 is known to behave improperly like this.\n  var testElement = document.createElement('div');\n  testElement.innerHTML = ' ';\n  if (testElement.innerHTML === '') {\n    setInnerHTML = function (node, html) {\n      // Magic theory: IE8 supposedly differentiates between added and updated\n      // nodes when processing innerHTML, innerHTML on updated nodes suffers\n      // from worse whitespace behavior. Re-adding a node like this triggers\n      // the initial and more favorable whitespace behavior.\n      // TODO: What to do on a detached node?\n      if (node.parentNode) {\n        node.parentNode.replaceChild(node, node);\n      }\n\n      // We also implement a workaround for non-visible tags disappearing into\n      // thin air on IE8, this only happens if there is no visible text\n      // in-front of the non-visible tags. Piggyback on the whitespace fix\n      // and simply check if any non-visible tags appear in the source.\n      if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {\n        // Recover leading whitespace by temporarily prepending any character.\n        // \\uFEFF has the potential advantage of being zero-width/invisible.\n        // UglifyJS drops U+FEFF chars when parsing, so use String.fromCharCode\n        // in hopes that this is preserved even if \"\\uFEFF\" is transformed to\n        // the actual Unicode character (by Babel, for example).\n        // https://github.com/mishoo/UglifyJS2/blob/v2.4.20/lib/parse.js#L216\n        node.innerHTML = String.fromCharCode(0xFEFF) + html;\n\n        // deleteData leaves an empty `TextNode` which offsets the index of all\n        // children. Definitely want to avoid this.\n        var textNode = node.firstChild;\n        if (textNode.data.length === 1) {\n          node.removeChild(textNode);\n        } else {\n          textNode.deleteData(0, 1);\n        }\n      } else {\n        node.innerHTML = html;\n      }\n    };\n  }\n}\n\nmodule.exports = setInnerHTML;\n},{\"130\":130}],125:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule setTextContent\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\nvar escapeTextContentForBrowser = _dereq_(107);\nvar setInnerHTML = _dereq_(124);\n\n/**\n * Set the textContent property of a node, ensuring that whitespace is preserved\n * even in IE8. innerText is a poor substitute for textContent and, among many\n * issues, inserts <br> instead of the literal newline chars. innerHTML behaves\n * as it should.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\nvar setTextContent = function (node, text) {\n  node.textContent = text;\n};\n\nif (ExecutionEnvironment.canUseDOM) {\n  if (!('textContent' in document.documentElement)) {\n    setTextContent = function (node, text) {\n      setInnerHTML(node, escapeTextContentForBrowser(text));\n    };\n  }\n}\n\nmodule.exports = setTextContent;\n},{\"107\":107,\"124\":124,\"130\":130}],126:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shouldUpdateReactComponent\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Given a `prevElement` and `nextElement`, determines if the existing\n * instance should be updated as opposed to being destroyed or replaced by a new\n * instance. Both arguments are elements. This ensures that this logic can\n * operate on stateless trees without any backing instance.\n *\n * @param {?object} prevElement\n * @param {?object} nextElement\n * @return {boolean} True if the existing instance should be updated.\n * @protected\n */\nfunction shouldUpdateReactComponent(prevElement, nextElement) {\n  var prevEmpty = prevElement === null || prevElement === false;\n  var nextEmpty = nextElement === null || nextElement === false;\n  if (prevEmpty || nextEmpty) {\n    return prevEmpty === nextEmpty;\n  }\n\n  var prevType = typeof prevElement;\n  var nextType = typeof nextElement;\n  if (prevType === 'string' || prevType === 'number') {\n    return nextType === 'string' || nextType === 'number';\n  } else {\n    return nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key;\n  }\n  return false;\n}\n\nmodule.exports = shouldUpdateReactComponent;\n},{}],127:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule traverseAllChildren\n */\n\n'use strict';\n\nvar ReactCurrentOwner = _dereq_(34);\nvar ReactElement = _dereq_(52);\nvar ReactInstanceHandles = _dereq_(61);\n\nvar getIteratorFn = _dereq_(115);\nvar invariant = _dereq_(144);\nvar warning = _dereq_(155);\n\nvar SEPARATOR = ReactInstanceHandles.SEPARATOR;\nvar SUBSEPARATOR = ':';\n\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\nvar userProvidedKeyEscaperLookup = {\n  '=': '=0',\n  '.': '=1',\n  ':': '=2'\n};\n\nvar userProvidedKeyEscapeRegex = /[=.:]/g;\n\nvar didWarnAboutMaps = false;\n\nfunction userProvidedKeyEscaper(match) {\n  return userProvidedKeyEscaperLookup[match];\n}\n\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\nfunction getComponentKey(component, index) {\n  if (component && component.key != null) {\n    // Explicit key\n    return wrapUserProvidedKey(component.key);\n  }\n  // Implicit key determined by the index in the set\n  return index.toString(36);\n}\n\n/**\n * Escape a component key so that it is safe to use in a reactid.\n *\n * @param {*} text Component key to be escaped.\n * @return {string} An escaped string.\n */\nfunction escapeUserProvidedKey(text) {\n  return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);\n}\n\n/**\n * Wrap a `key` value explicitly provided by the user to distinguish it from\n * implicitly-generated keys generated by a component's index in its parent.\n *\n * @param {string} key Value of a user-provided `key` attribute\n * @return {string}\n */\nfunction wrapUserProvidedKey(key) {\n  return '$' + escapeUserProvidedKey(key);\n}\n\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n  var type = typeof children;\n\n  if (type === 'undefined' || type === 'boolean') {\n    // All of the above are perceived as null.\n    children = null;\n  }\n\n  if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {\n    callback(traverseContext, children,\n    // If it's the only child, treat the name as if it was wrapped in an array\n    // so that it's consistent if the number of children grows.\n    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n    return 1;\n  }\n\n  var child;\n  var nextName;\n  var subtreeCount = 0; // Count of children found in the current subtree.\n  var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      nextName = nextNamePrefix + getComponentKey(child, i);\n      subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n    }\n  } else {\n    var iteratorFn = getIteratorFn(children);\n    if (iteratorFn) {\n      var iterator = iteratorFn.call(children);\n      var step;\n      if (iteratorFn !== children.entries) {\n        var ii = 0;\n        while (!(step = iterator.next()).done) {\n          child = step.value;\n          nextName = nextNamePrefix + getComponentKey(child, ii++);\n          subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n        }\n      } else {\n        if (\"development\" !== 'production') {\n          \"development\" !== 'production' ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : undefined;\n          didWarnAboutMaps = true;\n        }\n        // Iterator will provide entry [k,v] tuples rather than values.\n        while (!(step = iterator.next()).done) {\n          var entry = step.value;\n          if (entry) {\n            child = entry[1];\n            nextName = nextNamePrefix + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);\n            subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n          }\n        }\n      }\n    } else if (type === 'object') {\n      var addendum = '';\n      if (\"development\" !== 'production') {\n        addendum = ' If you meant to render a collection of children, use an array ' + 'instead or wrap the object using createFragment(object) from the ' + 'React add-ons.';\n        if (children._isReactElement) {\n          addendum = ' It looks like you\\'re using an element created by a different ' + 'version of React. Make sure to use only one copy of React.';\n        }\n        if (ReactCurrentOwner.current) {\n          var name = ReactCurrentOwner.current.getName();\n          if (name) {\n            addendum += ' Check the render method of `' + name + '`.';\n          }\n        }\n      }\n      var childrenString = String(children);\n      !false ? \"development\" !== 'production' ? invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum) : invariant(false) : undefined;\n    }\n  }\n\n  return subtreeCount;\n}\n\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\nfunction traverseAllChildren(children, callback, traverseContext) {\n  if (children == null) {\n    return 0;\n  }\n\n  return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n\nmodule.exports = traverseAllChildren;\n},{\"115\":115,\"144\":144,\"155\":155,\"34\":34,\"52\":52,\"61\":61}],128:[function(_dereq_,module,exports){\n/**\n * Copyright 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule validateDOMNesting\n */\n\n'use strict';\n\nvar assign = _dereq_(23);\nvar emptyFunction = _dereq_(136);\nvar warning = _dereq_(155);\n\nvar validateDOMNesting = emptyFunction;\n\nif (\"development\" !== 'production') {\n  // This validation code was written based on the HTML5 parsing spec:\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  //\n  // Note: this does not catch all invalid nesting, nor does it try to (as it's\n  // not clear what practical benefit doing so provides); instead, we warn only\n  // for cases where the parser will give a parse tree differing from what React\n  // intended. For example, <b><div></div></b> is invalid but we don't warn\n  // because it still parses correctly; we do warn for other cases like nested\n  // <p> tags where the beginning of the second element implicitly closes the\n  // first, causing a confusing mess.\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#special\n  var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n  var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template',\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n  // TODO: Distinguish by namespace here -- for <title>, including it here\n  // errs on the side of fewer warnings\n  'foreignObject', 'desc', 'title'];\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n  var buttonScopeTags = inScopeTags.concat(['button']);\n\n  // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n  var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n\n  var emptyAncestorInfo = {\n    parentTag: null,\n\n    formTag: null,\n    aTagInScope: null,\n    buttonTagInScope: null,\n    nobrTagInScope: null,\n    pTagInButtonScope: null,\n\n    listItemTagAutoclosing: null,\n    dlItemTagAutoclosing: null\n  };\n\n  var updatedAncestorInfo = function (oldInfo, tag, instance) {\n    var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);\n    var info = { tag: tag, instance: instance };\n\n    if (inScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.aTagInScope = null;\n      ancestorInfo.buttonTagInScope = null;\n      ancestorInfo.nobrTagInScope = null;\n    }\n    if (buttonScopeTags.indexOf(tag) !== -1) {\n      ancestorInfo.pTagInButtonScope = null;\n    }\n\n    // See rules for 'li', 'dd', 'dt' start tags in\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n      ancestorInfo.listItemTagAutoclosing = null;\n      ancestorInfo.dlItemTagAutoclosing = null;\n    }\n\n    ancestorInfo.parentTag = info;\n\n    if (tag === 'form') {\n      ancestorInfo.formTag = info;\n    }\n    if (tag === 'a') {\n      ancestorInfo.aTagInScope = info;\n    }\n    if (tag === 'button') {\n      ancestorInfo.buttonTagInScope = info;\n    }\n    if (tag === 'nobr') {\n      ancestorInfo.nobrTagInScope = info;\n    }\n    if (tag === 'p') {\n      ancestorInfo.pTagInButtonScope = info;\n    }\n    if (tag === 'li') {\n      ancestorInfo.listItemTagAutoclosing = info;\n    }\n    if (tag === 'dd' || tag === 'dt') {\n      ancestorInfo.dlItemTagAutoclosing = info;\n    }\n\n    return ancestorInfo;\n  };\n\n  /**\n   * Returns whether\n   */\n  var isTagValidWithParent = function (tag, parentTag) {\n    // First, let's check if we're in an unusual parsing mode...\n    switch (parentTag) {\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n      case 'select':\n        return tag === 'option' || tag === 'optgroup' || tag === '#text';\n      case 'optgroup':\n        return tag === 'option' || tag === '#text';\n      // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n      // but\n      case 'option':\n        return tag === '#text';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n      // No special behavior since these rules fall back to \"in body\" mode for\n      // all except special table nodes which cause bad parsing behavior anyway.\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n      case 'tr':\n        return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n      case 'tbody':\n      case 'thead':\n      case 'tfoot':\n        return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n      case 'colgroup':\n        return tag === 'col' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n      case 'table':\n        return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n      case 'head':\n        return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n\n      // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n      case 'html':\n        return tag === 'head' || tag === 'body';\n    }\n\n    // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n    // where the parsing rules cause implicit opens or closes to be added.\n    // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n    switch (tag) {\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n      case 'rp':\n      case 'rt':\n        return impliedEndTags.indexOf(parentTag) === -1;\n\n      case 'caption':\n      case 'col':\n      case 'colgroup':\n      case 'frame':\n      case 'head':\n      case 'tbody':\n      case 'td':\n      case 'tfoot':\n      case 'th':\n      case 'thead':\n      case 'tr':\n        // These tags are only valid with a few parents that have special child\n        // parsing rules -- if we're down here, then none of those matched and\n        // so we allow it only if we don't know what the parent is, as all other\n        // cases are invalid.\n        return parentTag == null;\n    }\n\n    return true;\n  };\n\n  /**\n   * Returns whether\n   */\n  var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n    switch (tag) {\n      case 'address':\n      case 'article':\n      case 'aside':\n      case 'blockquote':\n      case 'center':\n      case 'details':\n      case 'dialog':\n      case 'dir':\n      case 'div':\n      case 'dl':\n      case 'fieldset':\n      case 'figcaption':\n      case 'figure':\n      case 'footer':\n      case 'header':\n      case 'hgroup':\n      case 'main':\n      case 'menu':\n      case 'nav':\n      case 'ol':\n      case 'p':\n      case 'section':\n      case 'summary':\n      case 'ul':\n\n      case 'pre':\n      case 'listing':\n\n      case 'table':\n\n      case 'hr':\n\n      case 'xmp':\n\n      case 'h1':\n      case 'h2':\n      case 'h3':\n      case 'h4':\n      case 'h5':\n      case 'h6':\n        return ancestorInfo.pTagInButtonScope;\n\n      case 'form':\n        return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n      case 'li':\n        return ancestorInfo.listItemTagAutoclosing;\n\n      case 'dd':\n      case 'dt':\n        return ancestorInfo.dlItemTagAutoclosing;\n\n      case 'button':\n        return ancestorInfo.buttonTagInScope;\n\n      case 'a':\n        // Spec says something about storing a list of markers, but it sounds\n        // equivalent to this check.\n        return ancestorInfo.aTagInScope;\n\n      case 'nobr':\n        return ancestorInfo.nobrTagInScope;\n    }\n\n    return null;\n  };\n\n  /**\n   * Given a ReactCompositeComponent instance, return a list of its recursive\n   * owners, starting at the root and ending with the instance itself.\n   */\n  var findOwnerStack = function (instance) {\n    if (!instance) {\n      return [];\n    }\n\n    var stack = [];\n    /*eslint-disable space-after-keywords */\n    do {\n      /*eslint-enable space-after-keywords */\n      stack.push(instance);\n    } while (instance = instance._currentElement._owner);\n    stack.reverse();\n    return stack;\n  };\n\n  var didWarn = {};\n\n  validateDOMNesting = function (childTag, childInstance, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.parentTag;\n    var parentTag = parentInfo && parentInfo.tag;\n\n    var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n    var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n    var problematic = invalidParent || invalidAncestor;\n\n    if (problematic) {\n      var ancestorTag = problematic.tag;\n      var ancestorInstance = problematic.instance;\n\n      var childOwner = childInstance && childInstance._currentElement._owner;\n      var ancestorOwner = ancestorInstance && ancestorInstance._currentElement._owner;\n\n      var childOwners = findOwnerStack(childOwner);\n      var ancestorOwners = findOwnerStack(ancestorOwner);\n\n      var minStackLen = Math.min(childOwners.length, ancestorOwners.length);\n      var i;\n\n      var deepestCommon = -1;\n      for (i = 0; i < minStackLen; i++) {\n        if (childOwners[i] === ancestorOwners[i]) {\n          deepestCommon = i;\n        } else {\n          break;\n        }\n      }\n\n      var UNKNOWN = '(unknown)';\n      var childOwnerNames = childOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ancestorOwnerNames = ancestorOwners.slice(deepestCommon + 1).map(function (inst) {\n        return inst.getName() || UNKNOWN;\n      });\n      var ownerInfo = [].concat(\n      // If the parent and child instances have a common owner ancestor, start\n      // with that -- otherwise we just start with the parent's owners.\n      deepestCommon !== -1 ? childOwners[deepestCommon].getName() || UNKNOWN : [], ancestorOwnerNames, ancestorTag,\n      // If we're warning about an invalid (non-parent) ancestry, add '...'\n      invalidAncestor ? ['...'] : [], childOwnerNames, childTag).join(' > ');\n\n      var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + ownerInfo;\n      if (didWarn[warnKey]) {\n        return;\n      }\n      didWarn[warnKey] = true;\n\n      if (invalidParent) {\n        var info = '';\n        if (ancestorTag === 'table' && childTag === 'tr') {\n          info += ' Add a <tbody> to your code to match the DOM tree generated by ' + 'the browser.';\n        }\n        \"development\" !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a child of <%s>. ' + 'See %s.%s', childTag, ancestorTag, ownerInfo, info) : undefined;\n      } else {\n        \"development\" !== 'production' ? warning(false, 'validateDOMNesting(...): <%s> cannot appear as a descendant of ' + '<%s>. See %s.', childTag, ancestorTag, ownerInfo) : undefined;\n      }\n    }\n  };\n\n  validateDOMNesting.ancestorInfoContextKey = '__validateDOMNesting_ancestorInfo$' + Math.random().toString(36).slice(2);\n\n  validateDOMNesting.updatedAncestorInfo = updatedAncestorInfo;\n\n  // For testing\n  validateDOMNesting.isTagValidInContext = function (tag, ancestorInfo) {\n    ancestorInfo = ancestorInfo || emptyAncestorInfo;\n    var parentInfo = ancestorInfo.parentTag;\n    var parentTag = parentInfo && parentInfo.tag;\n    return isTagValidWithParent(tag, parentTag) && !findInvalidAncestorForTag(tag, ancestorInfo);\n  };\n}\n\nmodule.exports = validateDOMNesting;\n},{\"136\":136,\"155\":155,\"23\":23}],129:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * @providesModule EventListener\n * @typechecks\n */\n\n'use strict';\n\nvar emptyFunction = _dereq_(136);\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n  /**\n   * Listen to DOM events during the bubble phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  listen: function (target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, false);\n      return {\n        remove: function () {\n          target.removeEventListener(eventType, callback, false);\n        }\n      };\n    } else if (target.attachEvent) {\n      target.attachEvent('on' + eventType, callback);\n      return {\n        remove: function () {\n          target.detachEvent('on' + eventType, callback);\n        }\n      };\n    }\n  },\n\n  /**\n   * Listen to DOM events during the capture phase.\n   *\n   * @param {DOMEventTarget} target DOM element to register listener on.\n   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n   * @param {function} callback Callback function.\n   * @return {object} Object with a `remove` method.\n   */\n  capture: function (target, eventType, callback) {\n    if (target.addEventListener) {\n      target.addEventListener(eventType, callback, true);\n      return {\n        remove: function () {\n          target.removeEventListener(eventType, callback, true);\n        }\n      };\n    } else {\n      if (\"development\" !== 'production') {\n        console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n      }\n      return {\n        remove: emptyFunction\n      };\n    }\n  },\n\n  registerDefault: function () {}\n};\n\nmodule.exports = EventListener;\n},{\"136\":136}],130:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n'use strict';\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n  canUseDOM: canUseDOM,\n\n  canUseWorkers: typeof Worker !== 'undefined',\n\n  canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n  canUseViewport: canUseDOM && !!window.screen,\n\n  isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n},{}],131:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelize\n * @typechecks\n */\n\n\"use strict\";\n\nvar _hyphenPattern = /-(.)/g;\n\n/**\n * Camelcases a hyphenated string, for example:\n *\n *   > camelize('background-color')\n *   < \"backgroundColor\"\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelize(string) {\n  return string.replace(_hyphenPattern, function (_, character) {\n    return character.toUpperCase();\n  });\n}\n\nmodule.exports = camelize;\n},{}],132:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule camelizeStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar camelize = _dereq_(131);\n\nvar msPattern = /^-ms-/;\n\n/**\n * Camelcases a hyphenated CSS property name, for example:\n *\n *   > camelizeStyleName('background-color')\n *   < \"backgroundColor\"\n *   > camelizeStyleName('-moz-transition')\n *   < \"MozTransition\"\n *   > camelizeStyleName('-ms-transition')\n *   < \"msTransition\"\n *\n * As Andi Smith suggests\n * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n * is converted to lowercase `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction camelizeStyleName(string) {\n  return camelize(string.replace(msPattern, 'ms-'));\n}\n\nmodule.exports = camelizeStyleName;\n},{\"131\":131}],133:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule containsNode\n * @typechecks\n */\n\n'use strict';\n\nvar isTextNode = _dereq_(146);\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n *\n * @param {?DOMNode} outerNode Outer DOM node.\n * @param {?DOMNode} innerNode Inner DOM node.\n * @return {boolean} True if `outerNode` contains or is `innerNode`.\n */\nfunction containsNode(_x, _x2) {\n  var _again = true;\n\n  _function: while (_again) {\n    var outerNode = _x,\n        innerNode = _x2;\n    _again = false;\n\n    if (!outerNode || !innerNode) {\n      return false;\n    } else if (outerNode === innerNode) {\n      return true;\n    } else if (isTextNode(outerNode)) {\n      return false;\n    } else if (isTextNode(innerNode)) {\n      _x = outerNode;\n      _x2 = innerNode.parentNode;\n      _again = true;\n      continue _function;\n    } else if (outerNode.contains) {\n      return outerNode.contains(innerNode);\n    } else if (outerNode.compareDocumentPosition) {\n      return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n    } else {\n      return false;\n    }\n  }\n}\n\nmodule.exports = containsNode;\n},{\"146\":146}],134:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createArrayFromMixed\n * @typechecks\n */\n\n'use strict';\n\nvar toArray = _dereq_(154);\n\n/**\n * Perform a heuristic test to determine if an object is \"array-like\".\n *\n *   A monk asked Joshu, a Zen master, \"Has a dog Buddha nature?\"\n *   Joshu replied: \"Mu.\"\n *\n * This function determines if its argument has \"array nature\": it returns\n * true if the argument is an actual array, an `arguments' object, or an\n * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).\n *\n * It will return false for other array-like objects like Filelist.\n *\n * @param {*} obj\n * @return {boolean}\n */\nfunction hasArrayNature(obj) {\n  return(\n    // not null/false\n    !!obj && (\n    // arrays are objects, NodeLists are functions in Safari\n    typeof obj == 'object' || typeof obj == 'function') &&\n    // quacks like an array\n    'length' in obj &&\n    // not window\n    !('setInterval' in obj) &&\n    // no DOM node should be considered an array-like\n    // a 'select' element has 'length' and 'item' properties on IE8\n    typeof obj.nodeType != 'number' && (\n    // a real array\n    Array.isArray(obj) ||\n    // arguments\n    'callee' in obj ||\n    // HTMLCollection/NodeList\n    'item' in obj)\n  );\n}\n\n/**\n * Ensure that the argument is an array by wrapping it in an array if it is not.\n * Creates a copy of the argument if it is already an array.\n *\n * This is mostly useful idiomatically:\n *\n *   var createArrayFromMixed = require('createArrayFromMixed');\n *\n *   function takesOneOrMoreThings(things) {\n *     things = createArrayFromMixed(things);\n *     ...\n *   }\n *\n * This allows you to treat `things' as an array, but accept scalars in the API.\n *\n * If you need to convert an array-like object, like `arguments`, into an array\n * use toArray instead.\n *\n * @param {*} obj\n * @return {array}\n */\nfunction createArrayFromMixed(obj) {\n  if (!hasArrayNature(obj)) {\n    return [obj];\n  } else if (Array.isArray(obj)) {\n    return obj.slice();\n  } else {\n    return toArray(obj);\n  }\n}\n\nmodule.exports = createArrayFromMixed;\n},{\"154\":154}],135:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule createNodesFromMarkup\n * @typechecks\n */\n\n/*eslint-disable fb-www/unsafe-html*/\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar createArrayFromMixed = _dereq_(134);\nvar getMarkupWrap = _dereq_(140);\nvar invariant = _dereq_(144);\n\n/**\n * Dummy container used to render all markup.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Pattern used by `getNodeName`.\n */\nvar nodeNamePattern = /^\\s*<(\\w+)/;\n\n/**\n * Extracts the `nodeName` of the first element in a string of markup.\n *\n * @param {string} markup String of markup.\n * @return {?string} Node name of the supplied markup.\n */\nfunction getNodeName(markup) {\n  var nodeNameMatch = markup.match(nodeNamePattern);\n  return nodeNameMatch && nodeNameMatch[1].toLowerCase();\n}\n\n/**\n * Creates an array containing the nodes rendered from the supplied markup. The\n * optionally supplied `handleScript` function will be invoked once for each\n * <script> element that is rendered. If no `handleScript` function is supplied,\n * an exception is thrown if any <script> elements are rendered.\n *\n * @param {string} markup A string of valid HTML markup.\n * @param {?function} handleScript Invoked once for each rendered <script>.\n * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.\n */\nfunction createNodesFromMarkup(markup, handleScript) {\n  var node = dummyNode;\n  !!!dummyNode ? \"development\" !== 'production' ? invariant(false, 'createNodesFromMarkup dummy not initialized') : invariant(false) : undefined;\n  var nodeName = getNodeName(markup);\n\n  var wrap = nodeName && getMarkupWrap(nodeName);\n  if (wrap) {\n    node.innerHTML = wrap[1] + markup + wrap[2];\n\n    var wrapDepth = wrap[0];\n    while (wrapDepth--) {\n      node = node.lastChild;\n    }\n  } else {\n    node.innerHTML = markup;\n  }\n\n  var scripts = node.getElementsByTagName('script');\n  if (scripts.length) {\n    !handleScript ? \"development\" !== 'production' ? invariant(false, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(false) : undefined;\n    createArrayFromMixed(scripts).forEach(handleScript);\n  }\n\n  var nodes = createArrayFromMixed(node.childNodes);\n  while (node.lastChild) {\n    node.removeChild(node.lastChild);\n  }\n  return nodes;\n}\n\nmodule.exports = createNodesFromMarkup;\n},{\"130\":130,\"134\":134,\"140\":140,\"144\":144}],136:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyFunction\n */\n\n\"use strict\";\n\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nfunction emptyFunction() {}\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;\n},{}],137:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule emptyObject\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (\"development\" !== 'production') {\n  Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n},{}],138:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule focusNode\n */\n\n'use strict';\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\nfunction focusNode(node) {\n  // IE8 can throw \"Can't move focus to the control because it is invisible,\n  // not enabled, or of a type that does not accept the focus.\" for all kinds of\n  // reasons that are too expensive and fragile to test.\n  try {\n    node.focus();\n  } catch (e) {}\n}\n\nmodule.exports = focusNode;\n},{}],139:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getActiveElement\n * @typechecks\n */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not yet defined.\n */\n'use strict';\n\nfunction getActiveElement() /*?DOMElement*/{\n  if (typeof document === 'undefined') {\n    return null;\n  }\n\n  try {\n    return document.activeElement || document.body;\n  } catch (e) {\n    return document.body;\n  }\n}\n\nmodule.exports = getActiveElement;\n},{}],140:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getMarkupWrap\n */\n\n/*eslint-disable fb-www/unsafe-html */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar invariant = _dereq_(144);\n\n/**\n * Dummy container used to detect which wraps are necessary.\n */\nvar dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;\n\n/**\n * Some browsers cannot use `innerHTML` to render certain elements standalone,\n * so we wrap them, render the wrapped nodes, then extract the desired node.\n *\n * In IE8, certain elements cannot render alone, so wrap all elements ('*').\n */\n\nvar shouldWrap = {};\n\nvar selectWrap = [1, '<select multiple=\"true\">', '</select>'];\nvar tableWrap = [1, '<table>', '</table>'];\nvar trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];\n\nvar svgWrap = [1, '<svg xmlns=\"http://www.w3.org/2000/svg\">', '</svg>'];\n\nvar markupWrap = {\n  '*': [1, '?<div>', '</div>'],\n\n  'area': [1, '<map>', '</map>'],\n  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],\n  'legend': [1, '<fieldset>', '</fieldset>'],\n  'param': [1, '<object>', '</object>'],\n  'tr': [2, '<table><tbody>', '</tbody></table>'],\n\n  'optgroup': selectWrap,\n  'option': selectWrap,\n\n  'caption': tableWrap,\n  'colgroup': tableWrap,\n  'tbody': tableWrap,\n  'tfoot': tableWrap,\n  'thead': tableWrap,\n\n  'td': trWrap,\n  'th': trWrap\n};\n\n// Initialize the SVG elements since we know they'll always need to be wrapped\n// consistently. If they are created inside a <div> they will be initialized in\n// the wrong namespace (and will not display).\nvar svgElements = ['circle', 'clipPath', 'defs', 'ellipse', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'text', 'tspan'];\nsvgElements.forEach(function (nodeName) {\n  markupWrap[nodeName] = svgWrap;\n  shouldWrap[nodeName] = true;\n});\n\n/**\n * Gets the markup wrap configuration for the supplied `nodeName`.\n *\n * NOTE: This lazily detects which wraps are necessary for the current browser.\n *\n * @param {string} nodeName Lowercase `nodeName`.\n * @return {?array} Markup wrap configuration, if applicable.\n */\nfunction getMarkupWrap(nodeName) {\n  !!!dummyNode ? \"development\" !== 'production' ? invariant(false, 'Markup wrapping node not initialized') : invariant(false) : undefined;\n  if (!markupWrap.hasOwnProperty(nodeName)) {\n    nodeName = '*';\n  }\n  if (!shouldWrap.hasOwnProperty(nodeName)) {\n    if (nodeName === '*') {\n      dummyNode.innerHTML = '<link />';\n    } else {\n      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';\n    }\n    shouldWrap[nodeName] = !dummyNode.firstChild;\n  }\n  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;\n}\n\nmodule.exports = getMarkupWrap;\n},{\"130\":130,\"144\":144}],141:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule getUnboundedScrollPosition\n * @typechecks\n */\n\n'use strict';\n\n/**\n * Gets the scroll position of the supplied element or window.\n *\n * The return values are unbounded, unlike `getScrollPosition`. This means they\n * may be negative or exceed the element boundaries (which is possible using\n * inertial scrolling).\n *\n * @param {DOMWindow|DOMElement} scrollable\n * @return {object} Map with `x` and `y` keys.\n */\nfunction getUnboundedScrollPosition(scrollable) {\n  if (scrollable === window) {\n    return {\n      x: window.pageXOffset || document.documentElement.scrollLeft,\n      y: window.pageYOffset || document.documentElement.scrollTop\n    };\n  }\n  return {\n    x: scrollable.scrollLeft,\n    y: scrollable.scrollTop\n  };\n}\n\nmodule.exports = getUnboundedScrollPosition;\n},{}],142:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenate\n * @typechecks\n */\n\n'use strict';\n\nvar _uppercasePattern = /([A-Z])/g;\n\n/**\n * Hyphenates a camelcased string, for example:\n *\n *   > hyphenate('backgroundColor')\n *   < \"background-color\"\n *\n * For CSS style names, use `hyphenateStyleName` instead which works properly\n * with all vendor prefixes, including `ms`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenate(string) {\n  return string.replace(_uppercasePattern, '-$1').toLowerCase();\n}\n\nmodule.exports = hyphenate;\n},{}],143:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule hyphenateStyleName\n * @typechecks\n */\n\n'use strict';\n\nvar hyphenate = _dereq_(142);\n\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return hyphenate(string).replace(msPattern, '-ms-');\n}\n\nmodule.exports = hyphenateStyleName;\n},{\"142\":142}],144:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule invariant\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function (condition, format, a, b, c, d, e, f) {\n  if (\"development\" !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      }));\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n},{}],145:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isNode\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\n'use strict';\n\nfunction isNode(object) {\n  return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n},{}],146:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isTextNode\n * @typechecks\n */\n\n'use strict';\n\nvar isNode = _dereq_(145);\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n  return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n},{\"145\":145}],147:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyMirror\n * @typechecks static-only\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\n/**\n * Constructs an enumeration with keys equal to their value.\n *\n * For example:\n *\n *   var COLORS = keyMirror({blue: null, red: null});\n *   var myColor = COLORS.blue;\n *   var isColorValid = !!COLORS[myColor];\n *\n * The last line could not be performed if the values of the generated enum were\n * not equal to their keys.\n *\n *   Input:  {key1: val1, key2: val2}\n *   Output: {key1: key1, key2: key2}\n *\n * @param {object} obj\n * @return {object}\n */\nvar keyMirror = function (obj) {\n  var ret = {};\n  var key;\n  !(obj instanceof Object && !Array.isArray(obj)) ? \"development\" !== 'production' ? invariant(false, 'keyMirror(...): Argument must be an object.') : invariant(false) : undefined;\n  for (key in obj) {\n    if (!obj.hasOwnProperty(key)) {\n      continue;\n    }\n    ret[key] = key;\n  }\n  return ret;\n};\n\nmodule.exports = keyMirror;\n},{\"144\":144}],148:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule keyOf\n */\n\n/**\n * Allows extraction of a minified key. Let's the build system minify keys\n * without losing the ability to dynamically use key strings as values\n * themselves. Pass in an object with a single key/val pair and it will return\n * you the string key of that single record. Suppose you want to grab the\n * value for a key 'className' inside of an object. Key/val minification may\n * have aliased that key to be 'xa12'. keyOf({className: null}) will return\n * 'xa12' in that case. Resolve keys you want to use once at startup time, then\n * reuse those resolutions.\n */\n\"use strict\";\n\nvar keyOf = function (oneKeyObj) {\n  var key;\n  for (key in oneKeyObj) {\n    if (!oneKeyObj.hasOwnProperty(key)) {\n      continue;\n    }\n    return key;\n  }\n  return null;\n};\n\nmodule.exports = keyOf;\n},{}],149:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule mapObject\n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Executes the provided `callback` once for each enumerable own property in the\n * object and constructs a new object from the results. The `callback` is\n * invoked with three arguments:\n *\n *  - the property value\n *  - the property name\n *  - the object being traversed\n *\n * Properties that are added after the call to `mapObject` will not be visited\n * by `callback`. If the values of existing properties are changed, the value\n * passed to `callback` will be the value at the time `mapObject` visits them.\n * Properties that are deleted before being visited are not visited.\n *\n * @grep function objectMap()\n * @grep function objMap()\n *\n * @param {?object} object\n * @param {function} callback\n * @param {*} context\n * @return {?object}\n */\nfunction mapObject(object, callback, context) {\n  if (!object) {\n    return null;\n  }\n  var result = {};\n  for (var name in object) {\n    if (hasOwnProperty.call(object, name)) {\n      result[name] = callback.call(context, object[name], name, object);\n    }\n  }\n  return result;\n}\n\nmodule.exports = mapObject;\n},{}],150:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule memoizeStringOnly\n * @typechecks static-only\n */\n\n'use strict';\n\n/**\n * Memoizes the return value of a function that accepts one string argument.\n *\n * @param {function} callback\n * @return {function}\n */\nfunction memoizeStringOnly(callback) {\n  var cache = {};\n  return function (string) {\n    if (!cache.hasOwnProperty(string)) {\n      cache[string] = callback.call(this, string);\n    }\n    return cache[string];\n  };\n}\n\nmodule.exports = memoizeStringOnly;\n},{}],151:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performance\n * @typechecks\n */\n\n'use strict';\n\nvar ExecutionEnvironment = _dereq_(130);\n\nvar performance;\n\nif (ExecutionEnvironment.canUseDOM) {\n  performance = window.performance || window.msPerformance || window.webkitPerformance;\n}\n\nmodule.exports = performance || {};\n},{\"130\":130}],152:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule performanceNow\n * @typechecks\n */\n\n'use strict';\n\nvar performance = _dereq_(151);\nvar curPerformance = performance;\n\n/**\n * Detect if we can use `window.performance.now()` and gracefully fallback to\n * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now\n * because of Facebook's testing infrastructure.\n */\nif (!curPerformance || !curPerformance.now) {\n  curPerformance = Date;\n}\n\nvar performanceNow = curPerformance.now.bind(curPerformance);\n\nmodule.exports = performanceNow;\n},{\"151\":151}],153:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule shallowEqual\n * @typechecks\n * \n */\n\n'use strict';\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  // Test for A's keys different from B.\n  var bHasOwnProperty = hasOwnProperty.bind(objB);\n  for (var i = 0; i < keysA.length; i++) {\n    if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = shallowEqual;\n},{}],154:[function(_dereq_,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule toArray\n * @typechecks\n */\n\n'use strict';\n\nvar invariant = _dereq_(144);\n\n/**\n * Convert array-like objects to arrays.\n *\n * This API assumes the caller knows the contents of the data type. For less\n * well defined inputs use createArrayFromMixed.\n *\n * @param {object|function|filelist} obj\n * @return {array}\n */\nfunction toArray(obj) {\n  var length = obj.length;\n\n  // Some browse builtin objects can report typeof 'function' (e.g. NodeList in\n  // old versions of Safari).\n  !(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function')) ? \"development\" !== 'production' ? invariant(false, 'toArray: Array-like object expected') : invariant(false) : undefined;\n\n  !(typeof length === 'number') ? \"development\" !== 'production' ? invariant(false, 'toArray: Object needs a length property') : invariant(false) : undefined;\n\n  !(length === 0 || length - 1 in obj) ? \"development\" !== 'production' ? invariant(false, 'toArray: Object should have keys for indices') : invariant(false) : undefined;\n\n  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs\n  // without method will throw during the slice call and skip straight to the\n  // fallback.\n  if (obj.hasOwnProperty) {\n    try {\n      return Array.prototype.slice.call(obj);\n    } catch (e) {\n      // IE < 9 does not support Array#slice on collections objects\n    }\n  }\n\n  // Fall back to copying key by key. This assumes all keys have a value,\n  // so will not preserve sparsely populated inputs.\n  var ret = Array(length);\n  for (var ii = 0; ii < length; ii++) {\n    ret[ii] = obj[ii];\n  }\n  return ret;\n}\n\nmodule.exports = toArray;\n},{\"144\":144}],155:[function(_dereq_,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule warning\n */\n\n'use strict';\n\nvar emptyFunction = _dereq_(136);\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = emptyFunction;\n\nif (\"development\" !== 'production') {\n  warning = function (condition, format) {\n    for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n      args[_key - 2] = arguments[_key];\n    }\n\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n\n    if (format.indexOf('Failed Composite propType: ') === 0) {\n      return; // Ignore CompositeComponent proptype check.\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // --- Welcome to debugging React ---\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch (x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n},{\"136\":136}]},{},[1])(1)\n});"
  },
  {
    "path": "web/common/ui.js",
    "content": "window.Element = require('./html/Element');\nwindow.Div = require('./html/Div');\nwindow.Span = require('./html/Span');\nwindow.Input = require('./html/Input');\nwindow.Button = require('./html/Button');\nwindow.Navigator = require('./html/Navigator');\nwindow.NavBar = require('./html/NavBar');\nwindow.ListView = require('./html/ListView');\nwindow.Img = require('./html/Img');\nwindow.SimpleListView = require('./html/SimpleListView');\nwindow.Header = require('./html/Header');\nwindow.A = require('./html/A');\n//\nwindow.Body = window.Div;\nwindow.TabSlider = require('./html/TabSlider');\nwindow.ScrollView = require('./html/ScrollView');\nwindow.RightSliderMenu = require('./html/RightSliderMenu');\n//\nwindow.Carousel = require('./html/Carousel');\n"
  },
  {
    "path": "web/index.html",
    "content": "<!doctype html>\n<html>\n\t<head>\n\t\t<meta charset=\"utf-8\"/>\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\" />\n\n\t</head>\n\t<body>\n\t\t<script src=\"./common/react.js\"></script>\n\t\t<script src=\"./index.web.build.js\"></script>\n\t</body>\n</html>"
  },
  {
    "path": "webpack.config.js",
    "content": "var webpack = require('webpack');\n\nmodule.exports = {\n\tentry : [ 'babel-polyfill', './reactnative/common/LightningStorm.js',\n\t\t\t'./web/common/ui.js', './reactnative/index.ios.js' ],\n\toutput : {\n\t\tfilename : './web/index.web.build.js'\n\t},\n\tmodule : {\n\t\tloaders : [ {\n\t\t\tloader : 'babel-loader',\n\t\t\texclude : /node_modules/,\n\t\t\tquery : {\n\t\t\t\tplugins : [ 'transform-object-assign' ],\n\t\t\t\tpresets : [ 'es2015', 'stage-0', 'react' ]\n\t\t\t}\n\t\t} ],\n\t\tnoParse : [ /Dimensions/ ],\n\t},\n\tplugins : [ new webpack.IgnorePlugin(/(^(?!babel-polyfill)\\w+$)|(\\.\\/rn\\/\\w+)|(.*\\.png)/) ]\n}\n"
  }
]