cssAudio - ActiveCSS - ActiveGeneric - ActiveHTML - ActiveImage - ActiveJS - ActiveSVG - ActiveText - Activefile-genericVideo - Activehtmlicon-personicon-teamoctocatspinnerstartv

Pen Settings

CSS Base

Vendor Prefixing

Add External CSS

These stylesheets will be added in this order and before the code you write in the CSS editor. You can also add another Pen here, and it will pull the CSS from it. Try typing "font" or "ribbon" below.

Quick-add: + add another resource

Add External JavaScript

These scripts will run in this order and before the code in the JavaScript editor. You can also link to another Pen here, and it will run the JavaScript from it. Also try typing the name of any popular library.

Quick-add: + add another resource

Code Indentation

     

Save Automatically?

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

            
              <canvas id="canvas"></canvas>

<div id="tag" class="before">
	<h1>HAIR</h1>
	<p>Inspired by
		<a target="_blank" href="http://twitter.com/soulwire">Soulwire's</a>
		<a target="_blank" href="http://soulwire.co.uk/experiments/muscular-hydrostats/">Muscular Hydrostats</a></p>
	<ul>
		<li><a href="https://github.com/MathiasPaumgarten/hair">Github</a></li>
	</ul>
	<span>by <a href="http://mathias-paumgarten.com">Mathias Paumgarten</a></span>
</div>
            
          
!
            
              @import "compass/css3";

@import url( http://fonts.googleapis.com/css?family=Quicksand );
@import "compass";

html, body {
	padding: 0;
	margin: 0;
	width: 100%;
	height: 100%;
	overflow: hidden;
}

body {
	@include background( radial-gradient( #d45656, #c23131 100% ) );
}

canvas {
	width: 100%;
	height: 100%;
}

#tag.before {
	width: 0;
	left: 0;
	padding: 15px 0 0 0;

	h1, p, ul, span {
		opacity: 0;
		@include transform( translate3d( -50px, 0, 0 ) );
	}

}

#tag.in {
	width: 220px;
}

#tag {
	@include single-transition( all, 0.3s, cubic-bezier( 0.8, 0, 0.2, 1 ) );

	position: fixed;
	width: 180px;
	height: 180px;
	top: 20px;
	left: 20px;
	font-family: "Quicksand", sans-serif;
	padding: 15px 0 0 20px;
	background-color: #000;
	color: #fff;

	h1, p, ul, span {
		opacity: 1;
		@include transform( translate3d( 0, 0, 0 ) );
	}

	h1 {
		@include single-transition( all, 0.3s, ease-in-out, 0.3s );
		font-size: 30px;
		font-weight: 400;
		margin: 0;
	}

	p {
		@include single-transition( all, 0.3s, ease-in-out, 0.4s );
	}

	ul {
		@include single-transition( all, 0.3s, ease-in-out, 0.6s );
	}

	p , ul a {
		font-size: 12px;
		font-weight: 700;
	}

	a {
		color: white;
		text-decoration: none;
	}

	a:hover {
		background-color: #333;
		color: white;
		border-bottom: 1px solid #d45656;
	}

	span {
		@include single-transition( all, 0.3s, ease-in-out, 0.7s );

		display: inline-block;
		margin-top: 20px;
		font-size: 10px;
	}

	ul {
		list-style: none;
		margin: 0;
		padding: 0;
	}
}
            
          
!
            
              /*
 * Sorry for the compiled code. The original uses AMD and can be
 * found on Github: https://github.com/MathiasPaumgarten/hair
 */


var requirejs,require,define;(function(global){function isFunction(e){return ostring.call(e)==="[object Function]"}function isArray(e){return ostring.call(e)==="[object Array]"}function each(e,t){if(e){var n;for(n=0;n<e.length;n+=1)if(e[n]&&t(e[n],n,e))break}}function eachReverse(e,t){if(e){var n;for(n=e.length-1;n>-1;n-=1)if(e[n]&&t(e[n],n,e))break}}function hasProp(e,t){return hasOwn.call(e,t)}function eachProp(e,t){var n;for(n in e)if(e.hasOwnProperty(n)&&t(e[n],n))break}function mixin(e,t,n,r){return t&&eachProp(t,function(t,i){if(n||!hasProp(e,i))r&&typeof t!="string"?(e[i]||(e[i]={}),mixin(e[i],t,n,r)):e[i]=t}),e}function bind(e,t){return function(){return t.apply(e,arguments)}}function scripts(){return document.getElementsByTagName("script")}function getGlobal(e){if(!e)return e;var t=global;return each(e.split("."),function(e){t=t[e]}),t}function makeContextModuleFunc(e,t,n){return function(){var r=aps.call(arguments,0),i;return n&&isFunction(i=r[r.length-1])&&(i.__requireJsBuild=!0),r.push(t),e.apply(null,r)}}function addRequireMethods(e,t,n){each([["toUrl"],["undef"],["defined","requireDefined"],["specified","requireSpecified"]],function(r){var i=r[1]||r[0];e[r[0]]=t?makeContextModuleFunc(t[i],n):function(){var e=contexts[defContextName];return e[i].apply(e,arguments)}})}function makeError(e,t,n,r){var i=new Error(t+"\nhttp://requirejs.org/docs/errors.html#"+e);return i.requireType=e,i.requireModules=r,n&&(i.originalError=n),i}function newContext(e){function v(e){var t,n;for(t=0;e[t];t+=1){n=e[t];if(n===".")e.splice(t,1),t-=1;else if(n===".."){if(t===1&&(e[2]===".."||e[0]===".."))break;t>0&&(e.splice(t-1,2),t-=2)}}}function m(e,t,n){var r,i,s,u,a,f,l,c,h,p,d,m=t&&t.split("/"),g=m,y=o.map,b=y&&y["*"];e&&e.charAt(0)==="."&&(t?(o.pkgs[t]?g=m=[t]:g=m.slice(0,m.length-1),e=g.concat(e.split("/")),v(e),i=o.pkgs[r=e[0]],e=e.join("/"),i&&e===r+"/"+i.main&&(e=r)):e.indexOf("./")===0&&(e=e.substring(2)));if(n&&(m||b)&&y){u=e.split("/");for(a=u.length;a>0;a-=1){l=u.slice(0,a).join("/");if(m)for(f=m.length;f>0;f-=1){s=y[m.slice(0,f).join("/")];if(s){s=s[l];if(s){c=s,h=a;break}}}if(c)break;!p&&b&&b[l]&&(p=b[l],d=a)}!c&&p&&(c=p,h=d),c&&(u.splice(0,h,c),e=u.join("/"))}return e}function g(e){isBrowser&&each(scripts(),function(t){if(t.getAttribute("data-requiremodule")===e&&t.getAttribute("data-requirecontext")===r.contextName)return t.parentNode.removeChild(t),!0})}function y(e){var t=o.paths[e];if(t&&isArray(t)&&t.length>1)return g(e),t.shift(),r.undef(e),r.require([e]),!0}function b(e,t,n,i){var s,o,u,a=e?e.indexOf("!"):-1,f=null,c=t?t.name:null,d=e,v=!0,g="";return e||(v=!1,e="_@r"+(h+=1)),a!==-1&&(f=e.substring(0,a),e=e.substring(a+1,e.length)),f&&(f=m(f,c,i),o=l[f]),e&&(f?o&&o.normalize?g=o.normalize(e,function(e){return m(e,c,i)}):g=m(e,c,i):(g=m(e,c,i),s=r.nameToUrl(g))),u=f&&!o&&!n?"_unnormalized"+(p+=1):"",{prefix:f,name:g,parentMap:t,unnormalized:!!u,url:s,originalName:d,isDefine:v,id:(f?f+"!"+g:g)+u}}function w(e){var t=e.id,n=u[t];return n||(n=u[t]=new r.Module(e)),n}function E(e,t,n){var r=e.id,i=u[r];hasProp(l,r)&&(!i||i.defineEmitComplete)?t==="defined"&&n(l[r]):w(e).on(t,n)}function S(e,t){var n=e.requireModules,r=!1;t?t(e):(each(n,function(t){var n=u[t];n&&(n.error=e,n.events.error&&(r=!0,n.emit("error",e)))}),r||req.onError(e))}function x(){globalDefQueue.length&&(apsp.apply(f,[f.length-1,0].concat(globalDefQueue)),globalDefQueue=[])}function T(e,t,n){var i=e&&e.map,s=makeContextModuleFunc(n||r.require,i,t);return addRequireMethods(s,r,i),s.isBrowser=isBrowser,s}function N(e){delete u[e],each(d,function(t,n){if(t.map.id===e)return d.splice(n,1),t.defined||(r.waitCount-=1),!0})}function C(e,t){var n=e.map.id,r=e.depMaps,i;if(!e.inited)return;return t[n]?e:(t[n]=!0,each(r,function(e){var r=e.id,s=u[r];if(!s)return;return!s.inited||!s.enabled?(i=null,delete t[n],!0):i=C(s,mixin({},t))}),i)}function k(e,t,n){var r=e.map.id,s=e.depMaps;if(!e.inited||!e.map.isDefine)return;return t[r]?l[r]:(t[r]=e,each(s,function(s){var o=s.id,a=u[o],f;if(i[o])return;if(a){if(!a.inited||!a.enabled){n[r]=!0;return}f=k(a,t,n),n[o]||e.defineDepById(o,f)}}),e.check(!0),l[r])}function L(e){e.check()}function A(){var e,n,i,a,f=o.waitSeconds*1e3,l=f&&r.startTime+f<(new Date).getTime(),c=[],h=!1,p=!0;if(t)return;t=!0,eachProp(u,function(t){e=t.map,n=e.id;if(!t.enabled)return;if(!t.error)if(!t.inited&&l)y(n)?(a=!0,h=!0):(c.push(n),g(n));else if(!t.inited&&t.fetched&&e.isDefine){h=!0;if(!e.prefix)return p=!1}});if(l&&c.length)return i=makeError("timeout","Load timeout for modules: "+c,null,c),i.contextName=r.contextName,S(i);p&&(each(d,function(e){if(e.defined)return;var t=C(e,{}),n={};t&&(k(t,n,{}),eachProp(n,L))}),eachProp(u,L)),(!l||a)&&h&&(isBrowser||isWebWorker)&&!s&&(s=setTimeout(function(){s=0,A()},50)),t=!1}function O(e){w(b(e[0],null,!0)).init(e[1],e[2])}function M(e,t,n,r){e.detachEvent&&!isOpera?r&&e.detachEvent(r,t):e.removeEventListener(n,t,!1)}function _(e){var t=e.currentTarget||e.srcElement;return M(t,r.onScriptLoad,"load","onreadystatechange"),M(t,r.onScriptError,"error"),{node:t,id:t&&t.getAttribute("data-requiremodule")}}var t,n,r,i,s,o={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{},shim:{}},u={},a={},f=[],l={},c={},h=1,p=1,d=[];return i={require:function(e){return T(e)},exports:function(e){e.usingExports=!0;if(e.map.isDefine)return e.exports=l[e.map.id]={}},module:function(e){return e.module={id:e.map.id,uri:e.map.url,config:function(){return o.config&&o.config[e.map.id]||{}},exports:l[e.map.id]}}},n=function(e){this.events=a[e.id]||{},this.map=e,this.shim=o.shim[e.id],this.depExports=[],this.depMaps=[],this.depMatched=[],this.pluginMaps={},this.depCount=0},n.prototype={init:function(e,t,n,r){r=r||{};if(this.inited)return;this.factory=t,n?this.on("error",n):this.events.error&&(n=bind(this,function(e){this.emit("error",e)})),this.depMaps=e&&e.slice(0),this.depMaps.rjsSkipMap=e.rjsSkipMap,this.errback=n,this.inited=!0,this.ignore=r.ignore,r.enabled||this.enabled?this.enable():this.check()},defineDepById:function(e,t){var n;return each(this.depMaps,function(t,r){if(t.id===e)return n=r,!0}),this.defineDep(n,t)},defineDep:function(e,t){this.depMatched[e]||(this.depMatched[e]=!0,this.depCount-=1,this.depExports[e]=t)},fetch:function(){if(this.fetched)return;this.fetched=!0,r.startTime=(new Date).getTime();var e=this.map;if(!this.shim)return e.prefix?this.callPlugin():this.load();T(this,!0)(this.shim.deps||[],bind(this,function(){return e.prefix?this.callPlugin():this.load()}))},load:function(){var e=this.map.url;c[e]||(c[e]=!0,r.load(this.map.id,e))},check:function(e){if(!this.enabled||this.enabling)return;var t,n,i=this.map.id,s=this.depExports,o=this.exports,a=this.factory;if(!this.inited)this.fetch();else if(this.error)this.emit("error",this.error);else if(!this.defining){this.defining=!0;if(this.depCount<1&&!this.defined){if(isFunction(a)){if(this.events.error)try{o=r.execCb(i,a,s,o)}catch(f){t=f}else o=r.execCb(i,a,s,o);this.map.isDefine&&(n=this.module,n&&n.exports!==undefined&&n.exports!==this.exports?o=n.exports:o===undefined&&this.usingExports&&(o=this.exports));if(t)return t.requireMap=this.map,t.requireModules=[this.map.id],t.requireType="define",S(this.error=t)}else o=a;this.exports=o,this.map.isDefine&&!this.ignore&&(l[i]=o,req.onResourceLoad&&req.onResourceLoad(r,this.map,this.depMaps)),delete u[i],this.defined=!0,r.waitCount-=1,r.waitCount===0&&(d=[])}this.defining=!1,e||this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}},callPlugin:function(){var e=this.map,t=e.id,n=b(e.prefix,null,!1,!0);E(n,"defined",bind(this,function(n){var i,s,a,f=this.map.name,l=this.map.parentMap?this.map.parentMap.name:null;if(this.map.unnormalized){n.normalize&&(f=n.normalize(f,function(e){return m(e,l,!0)})||""),s=b(e.prefix+"!"+f,this.map.parentMap,!1,!0),E(s,"defined",bind(this,function(e){this.init([],function(){return e},null,{enabled:!0,ignore:!0})})),a=u[s.id],a&&(this.events.error&&a.on("error",bind(this,function(e){this.emit("error",e)})),a.enable());return}i=bind(this,function(e){this.init([],function(){return e},null,{enabled:!0})}),i.error=bind(this,function(e){this.inited=!0,this.error=e,e.requireModules=[t],eachProp(u,function(e){e.map.id.indexOf(t+"_unnormalized")===0&&N(e.map.id)}),S(e)}),i.fromText=function(e,t){var n=useInteractive;n&&(useInteractive=!1),w(b(e)),req.exec(t),n&&(useInteractive=!0),r.completeLoad(e)},n.load(e.name,T(e.parentMap,!0,function(e,t,n){return e.rjsSkipMap=!0,r.require(e,t,n)}),i,o)})),r.enable(n,this),this.pluginMaps[n.id]=n},enable:function(){this.enabled=!0,this.waitPushed||(d.push(this),r.waitCount+=1,this.waitPushed=!0),this.enabling=!0,each(this.depMaps,bind(this,function(e,t){var n,s,o;if(typeof e=="string"){e=b(e,this.map.isDefine?this.map:this.map.parentMap,!1,!this.depMaps.rjsSkipMap),this.depMaps[t]=e,o=i[e.id];if(o){this.depExports[t]=o(this);return}this.depCount+=1,E(e,"defined",bind(this,function(e){this.defineDep(t,e),this.check()})),this.errback&&E(e,"error",this.errback)}n=e.id,s=u[n],!i[n]&&s&&!s.enabled&&r.enable(e,this)})),eachProp(this.pluginMaps,bind(this,function(e){var t=u[e.id];t&&!t.enabled&&r.enable(e,this)})),this.enabling=!1,this.check()},on:function(e,t){var n=this.events[e];n||(n=this.events[e]=[]),n.push(t)},emit:function(e,t){each(this.events[e],function(e){e(t)}),e==="error"&&delete this.events[e]}},r={config:o,contextName:e,registry:u,defined:l,urlFetched:c,waitCount:0,defQueue:f,Module:n,makeModuleMap:b,configure:function(e){e.baseUrl&&e.baseUrl.charAt(e.baseUrl.length-1)!=="/"&&(e.baseUrl+="/");var t=o.pkgs,n=o.shim,i=o.paths,s=o.map;mixin(o,e,!0),o.paths=mixin(i,e.paths,!0),e.map&&(o.map=mixin(s||{},e.map,!0,!0)),e.shim&&(eachProp(e.shim,function(e,t){isArray(e)&&(e={deps:e}),e.exports&&!e.exports.__buildReady&&(e.exports=r.makeShimExports(e.exports)),n[t]=e}),o.shim=n),e.packages&&(each(e.packages,function(e){var n;e=typeof e=="string"?{name:e}:e,n=e.location,t[e.name]={name:e.name,location:n||e.name,main:(e.main||"main").replace(currDirRegExp,"").replace(jsSuffixRegExp,"")}}),o.pkgs=t),eachProp(u,function(e,t){!e.inited&&!e.map.unnormalized&&(e.map=b(t))}),(e.deps||e.callback)&&r.require(e.deps||[],e.callback)},makeShimExports:function(e){var t;return typeof e=="string"?(t=function(){return getGlobal(e)},t.exports=e,t):function(){return e.apply(global,arguments)}},requireDefined:function(e,t){return hasProp(l,b(e,t,!1,!0).id)},requireSpecified:function(e,t){return e=b(e,t,!1,!0).id,hasProp(l,e)||hasProp(u,e)},require:function(t,n,i,s){var o,u,a,c,h;if(typeof t=="string")return isFunction(n)?S(makeError("requireargs","Invalid require call"),i):req.get?req.get(r,t,n):(o=t,s=n,a=b(o,s,!1,!0),u=a.id,hasProp(l,u)?l[u]:S(makeError("notloaded",'Module name "'+u+'" has not been loaded yet for context: '+e)));i&&!isFunction(i)&&(s=i,i=undefined),n&&!isFunction(n)&&(s=n,n=undefined),x();while(f.length){h=f.shift();if(h[0]===null)return S(makeError("mismatch","Mismatched anonymous define() module: "+h[h.length-1]));O(h)}return c=w(b(null,s)),c.init(t,n,i,{enabled:!0}),A(),r.require},undef:function(e){x();var t=b(e,null,!0),n=u[e];delete l[e],delete c[t.url],delete a[e],n&&(n.events.defined&&(a[e]=n.events),N(e))},enable:function(e,t){var n=u[e.id];n&&w(e).enable()},completeLoad:function(e){var t,n,r,i=o.shim[e]||{},s=i.exports&&i.exports.exports;x();while(f.length){n=f.shift();if(n[0]===null){n[0]=e;if(t)break;t=!0}else n[0]===e&&(t=!0);O(n)}r=u[e];if(!t&&!l[e]&&r&&!r.inited){if(o.enforceDefine&&(!s||!getGlobal(s))){if(y(e))return;return S(makeError("nodefine","No define call for "+e,null,[e]))}O([e,i.deps||[],i.exports])}A()},toUrl:function(e,t){var n=e.lastIndexOf("."),i=null;return n!==-1&&(i=e.substring(n,e.length),e=e.substring(0,n)),r.nameToUrl(m(e,t&&t.id,!0),i)},nameToUrl:function(e,t){var n,r,i,s,u,a,f,l,c;if(req.jsExtRegExp.test(e))l=e+(t||"");else{n=o.paths,r=o.pkgs,u=e.split("/");for(a=u.length;a>0;a-=1){f=u.slice(0,a).join("/"),i=r[f],c=n[f];if(c){isArray(c)&&(c=c[0]),u.splice(0,a,c);break}if(i){e===i.name?s=i.location+"/"+i.main:s=i.location,u.splice(0,a,s);break}}l=u.join("/"),l+=t||(/\?/.test(l)?"":".js"),l=(l.charAt(0)==="/"||l.match(/^[\w\+\.\-]+:/)?"":o.baseUrl)+l}return o.urlArgs?l+((l.indexOf("?")===-1?"?":"&")+o.urlArgs):l},load:function(e,t){req.load(r,e,t)},execCb:function(e,t,n,r){return t.apply(r,n)},onScriptLoad:function(e){if(e.type==="load"||readyRegExp.test((e.currentTarget||e.srcElement).readyState)){interactiveScript=null;var t=_(e);r.completeLoad(t.id)}},onScriptError:function(e){var t=_(e);if(!y(t.id))return S(makeError("scripterror","Script error",e,[t.id]))}}}function getInteractiveScript(){return interactiveScript&&interactiveScript.readyState==="interactive"?interactiveScript:(eachReverse(scripts(),function(e){if(e.readyState==="interactive")return interactiveScript=e}),interactiveScript)}var req,s,head,baseElement,dataMain,src,interactiveScript,currentlyAddingScript,mainScript,subPath,version="2.0.5",commentRegExp=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,cjsRequireRegExp=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,jsSuffixRegExp=/\.js$/,currDirRegExp=/^\.\//,op=Object.prototype,ostring=op.toString,hasOwn=op.hasOwnProperty,ap=Array.prototype,aps=ap.slice,apsp=ap.splice,isBrowser=typeof window!="undefined"&&!!navigator&&!!document,isWebWorker=!isBrowser&&typeof importScripts!="undefined",readyRegExp=isBrowser&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/,defContextName="_",isOpera=typeof opera!="undefined"&&opera.toString()==="[object Opera]",contexts={},cfg={},globalDefQueue=[],useInteractive=!1;if(typeof define!="undefined")return;if(typeof requirejs!="undefined"){if(isFunction(requirejs))return;cfg=requirejs,requirejs=undefined}typeof require!="undefined"&&!isFunction(require)&&(cfg=require,require=undefined),req=requirejs=function(e,t,n,r){var i,s,o=defContextName;return!isArray(e)&&typeof e!="string"&&(s=e,isArray(t)?(e=t,t=n,n=r):e=[]),s&&s.context&&(o=s.context),i=contexts[o],i||(i=contexts[o]=req.s.newContext(o)),s&&i.configure(s),i.require(e,t,n)},req.config=function(e){return req(e)},require||(require=req),req.version=version,req.jsExtRegExp=/^\/|:|\?|\.js$/,req.isBrowser=isBrowser,s=req.s={contexts:contexts,newContext:newContext},req({}),addRequireMethods(req),isBrowser&&(head=s.head=document.getElementsByTagName("head")[0],baseElement=document.getElementsByTagName("base")[0],baseElement&&(head=s.head=baseElement.parentNode)),req.onError=function(e){throw e},req.load=function(e,t,n){var r=e&&e.config||{},i;if(isBrowser)return i=r.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script"),i.type=r.scriptType||"text/javascript",i.charset="utf-8",i.async=!0,i.setAttribute("data-requirecontext",e.contextName),i.setAttribute("data-requiremodule",t),i.attachEvent&&!(i.attachEvent.toString&&i.attachEvent.toString().indexOf("[native code")<0)&&!isOpera?(useInteractive=!0,i.attachEvent("onreadystatechange",e.onScriptLoad)):(i.addEventListener("load",e.onScriptLoad,!1),i.addEventListener("error",e.onScriptError,!1)),i.src=n,currentlyAddingScript=i,baseElement?head.insertBefore(i,baseElement):head.appendChild(i),currentlyAddingScript=null,i;isWebWorker&&(importScripts(n),e.completeLoad(t))},isBrowser&&eachReverse(scripts(),function(e){head||(head=e.parentNode),dataMain=e.getAttribute("data-main");if(dataMain)return cfg.baseUrl||(src=dataMain.split("/"),mainScript=src.pop(),subPath=src.length?src.join("/")+"/":"./",cfg.baseUrl=subPath,dataMain=mainScript),dataMain=dataMain.replace(jsSuffixRegExp,""),cfg.deps=cfg.deps?cfg.deps.concat(dataMain):[dataMain],!0}),define=function(e,t,n){var r,i;typeof e!="string"&&(n=t,t=e,e=null),isArray(t)||(n=t,t=[]),!t.length&&isFunction(n)&&n.length&&(n.toString().replace(commentRegExp,"").replace(cjsRequireRegExp,function(e,n){t.push(n)}),t=(n.length===1?["require"]:["require","exports","module"]).concat(t)),useInteractive&&(r=currentlyAddingScript||getInteractiveScript(),r&&(e||(e=r.getAttribute("data-requiremodule")),i=contexts[r.getAttribute("data-requirecontext")])),(i?i.defQueue:globalDefQueue).push([e,t,n])},define.amd={jQuery:!0},req.exec=function(text){return eval(text)},req(cfg)})(this),define("requireJS",function(){}),define("suds/oop/Class",[],function(){var e=!1,t=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/,n=function(){};return n.extend=function(n){function o(){!e&&this.initialize&&this.initialize.apply(this,arguments)}var r=this.prototype;e=!0;var i=new this;e=!1;for(var s in n)i[s]=typeof n[s]=="function"&&typeof r[s]=="function"&&t.test(n[s])?function(e,t){return function(){var n=this._super;this._super=r[e];var i=t.apply(this,arguments);return this._super=n,i}}(s,n[s]):n[s];return o.prototype=i,o.prototype.constructor=o,o.extend=arguments.callee,o},n}),define("suds/events/Dispatcher",["suds/oop/Class"],function(e){"use strict";var t=e.extend({listeners:null,initialize:function(){this.listeners=[]},addListener:function(e,t){this.removeListener(e,t),this.listeners.push({name:e,closure:t})},removeListener:function(e,t){var n,r=0,i=this.listeners.length;for(;r<i;r++)n=this.listeners[r],n.name===e&&n.closure===t&&(this.listeners.splice(r,1),r--,i--)},dispatch:function(e,t){var n,r=0,i=this.listeners.length;for(;r<i;r++){n=this.listeners[r];if(!n)continue;n.name===e&&n.closure.call(null,t)}},hasListenerFor:function(e){var t,n=0,r=this.listeners.length;for(;n<r;n++)if(this.listeners[n].name===e)return!0;return!1},hasListeners:function(){return this.listeners.length>0},removeAllListeners:function(){this.listeners=[]}});return t}),define("suds/patches/function.bind",[],function(){return typeof Function.prototype.bind!="function"&&(Function.prototype.bind=function(e){var t=this;return function(){t.apply(e,arguments)}}),!0}),define("suds/events/Interval",["suds/events/Dispatcher","suds/patches/function.bind"],function(e){var t="FRAME",n=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}}(),r=e.extend({FRAME:t,initialize:function(){this._super(),this.loop()},loop:function(){this.dispatch(t),n(this.loop.bind(this))}}),i=new r;return i.FRAME=t,i}),define("suds/helpers/MouseHelper",["suds/events/Dispatcher","suds/events/Interval"],function(e,t){var n={},r=new e,i=-1,s=-1;n.x=-1,n.y=-1,n.startTracking=function(){window.addEventListener("mousemove",o)},n.stopTracking=function(){window.removeEventListener("mousemove",o),n.x=-1,n.y=-1},n.addListener=function(e,i){e===n.MOUSE_MOVE&&(n.startTracking(),t.addListener(t.FRAME,u)),r.addListener(e,i)},n.removeListener=function(e,i){r.removeListener(e,i);var s=!1;for(var o=0;o<dispachter.listeners.length;o++)dispachter.listeners[o].name===n.MOUSE_MOVE&&(s=!0);s===!1&&(n.stopTracking(),t.removeListener(t.FRAME,u))};var o=function(e){n.x=e.clientX,n.y=e.clientY},u=function(e){(n.x!==i||n.y!==s)&&r.dispatch(n.MOUSE_MOVE),i=n.x,s=n.y};return n.MOUSE_MOVE="MouseHelper.MOUSE_MOVE",n}),define("suds/math/Point",["suds/oop/Class"],function(e){var t=e.extend({x:0,y:0,initialize:function(e,t){this.x=e||0,this.y=t||0},add:function(e){return this.x+=e.x,this.y+=e.y,this},subtract:function(e){return this.x-=e.x,this.y-=e.y,this},multiply:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return this.x/=e,this.y/=e,this},clone:function(){return new t(this.x,this.y)},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){return this.divide(this.length())},set:function(e){return this.x=e.x,this.y=e.y,this},rotate:function(e){var t=Math.cos(e),n=Math.sin(e),r=this.x*t-this.y*n,i=this.y*t+this.x*n;return this.x=r,this.y=i,this},flip:function(){return this.x*=-1,this.y*=-1,this}});return t.subtract=function(e,t){return e.clone().subtract(t)},t.add=function(e,t){return e.clone().add(t)},t.distance=function(e,t){var n=e.x-t.x,r=e.y-t.y;return Math.sqrt(n*n+r*r)},t.between=function(e,n){return new t(n.x-e.x,n.y-e.y)},t}),define("suds/math/Bezier",["suds/oop/Class","suds/math/Point"],function(e,t){var n=e.extend({anchors:null,time:0,speed:.1,pixels:null,x:null,y:null,pixelBased:!1,initialize:function(e,t,n){this.anchors=[],this.pixelBased=typeof t=="undefined"?!1:!!t,this.accuracy=typeof n=="undefined"?10:n,this.time=0,this.speed=e||.1,this.pixels=this.speed},addAnchor:function(e){this.anchors.push(e);if(this.pixelBased){var n=this.time,r=0,i=this.accuracy,s=0,o,u;for(;r<i;r++){this.time=r/i,this.calculate();if(r===0){o=new t(this.x,this.y);continue}u=o,u=new t(this.x,this.y),s+=t.distance(o,u)}this.time=n,this.speed=Math.min(1,this.pixels/s)}},update:function(){this.time+=this.speed,this.time>1&&(this.time=1),this.calculate()},calculate:function(){var e=this.time,t=this.anchors.length,n=[],r,i;for(r=0;r<t;r++)n[r]={x:this.anchors[r].x,y:this.anchors[r].y};for(i=1;i<t;++i)for(r=0;r<t-i;++r)n[r].x=(1-e)*n[r].x+e*n[~~(r+1)].x,n[r].y=(1-e)*n[r].y+e*n[~~(r+1)].y;this.x=n[0].x,this.y=n[0].y},isComplete:function(){return this.time>=1},setPercent:function(e){this.time=e,this.calculate()}});return n}),define("suds/ui/Motion",["suds/oop/Class","suds/math/Point","suds/math/Bezier"],function(e,t,n){var r=e.extend({pointA:null,pointB:null,pointC:null,pointAB:null,pointBC:null,speed:.1,radius:10,initialize:function(e,t,r){this.radius=e||this.radius,this.speed=t||this.speed,this.accuracy=r||10,this.bezier=new n(this.speed,!0,this.accuracy),this.pointA=this.getRandomPoint(),this.pointB=this.getRandomPoint(),this.pointC=this.getRandomPoint(),this.pointAB=this.getMiddle(this.pointA,this.pointB),this.pointBC=this.getMiddle(this.pointB,this.pointC),this.bezier.addAnchor(this.pointAB),this.bezier.addAnchor(this.pointB),this.bezier.addAnchor(this.pointBC)},update:function(){if(this.bezier.isComplete()){this.bezier=new n(this.speed,!0,this.accuracy),this.bezier.addAnchor(this.pointBC),this.bezier.addAnchor(this.pointC),this.pointA=this.pointB,this.pointB=this.pointC,this.pointC=this.getRandomPoint(),this.pointAB=this.pointBC,this.pointBC=this.getMiddle(this.pointB,this.pointC),this.bezier.addAnchor(this.pointBC),this.bezier.calculate();return}this.bezier.update()},getRandomPoint:function(){var e=Math.random()*Math.PI*2;return new t(Math.cos(e)*(.1+Math.random()*.9)*this.radius,Math.sin(e)*(.1+Math.random()*.9)*this.radius)},getMiddle:function(e,n){return t.add(e,n).divide(2)},getX:function(){return this.bezier.x},getY:function(){return this.bezier.y},getPosition:function(){return new t(this.bezier.x,this.bezier.y)}});return r}),define("dat/utils/css",[],function(){return{load:function(e,t){t=t||document;var n=t.createElement("link");n.type="text/css",n.rel="stylesheet",n.href=e,t.getElementsByTagName("head")[0].appendChild(n)},inject:function(e,t){t=t||document;var n=document.createElement("style");n.type="text/css",n.innerHTML=e,t.getElementsByTagName("head")[0].appendChild(n)}}}),function(){var e=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],t=/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,n=/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im,r=typeof location!="undefined"&&location.href,i=r&&location.protocol&&location.protocol.replace(/\:/,""),s=r&&location.hostname,o=r&&(location.port||undefined),u=[];define("text",[],function(){var a,f,l;return typeof window!="undefined"&&window.navigator&&window.document?f=function(e,t){var n=a.createXhr();n.open("GET",e,!0),n.onreadystatechange=function(e){n.readyState===4&&t(n.responseText)},n.send(null)}:typeof process!="undefined"&&process.versions&&!!process.versions.node?(l=require.nodeRequire("fs"),f=function(e,t){t(l.readFileSync(e,"utf8"))}):typeof Packages!="undefined"&&(f=function(e,t){var n="utf-8",r=new java.io.File(e),i=java.lang.System.getProperty("line.separator"),s=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(r),n)),o,u,a="";try{o=new java.lang.StringBuffer,u=s.readLine(),u&&u.length()&&u.charAt(0)===65279&&(u=u.substring(1)),o.append(u);while((u=s.readLine())!==null)o.append(i),o.append(u);a=String(o.toString())}finally{s.close()}t(a)}),a={version:"1.0.0",strip:function(e){if(e){e=e.replace(t,"");var r=e.match(n);r&&(e=r[1])}else e="";return e},jsEscape:function(e){return e.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r")},createXhr:function(){var t,n,r;if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;for(n=0;n<3;n++){r=e[n];try{t=new ActiveXObject(r)}catch(i){}if(t){e=[r];break}}if(!t)throw new Error("createXhr(): XMLHttpRequest not available");return t},get:f,parseName:function(e){var t=!1,n=e.indexOf("."),r=e.substring(0,n),i=e.substring(n+1,e.length);return n=i.indexOf("!"),n!==-1&&(t=i.substring(n+1,i.length),t=t==="strip",i=i.substring(0,n)),{moduleName:r,ext:i,strip:t}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(e,t,n,r){var i=a.xdRegExp.exec(e),s,o,u;return i?(s=i[2],o=i[3],o=o.split(":"),u=o[1],o=o[0],(!s||s===t)&&(!o||o===n)&&(!u&&!o||u===r)):!0},finishLoad:function(e,t,n,r,i){n=t?a.strip(n):n,i.isBuild&&i.inlineText&&(u[e]=n),r(n)},load:function(e,t,n,u){var f=a.parseName(e),l=f.moduleName+"."+f.ext,c=t.toUrl(l),h=u&&u.text&&u.text.useXhr||a.useXhr;!r||h(c,i,s,o)?a.get(c,function(t){a.finishLoad(e,f.strip,t,n,u)}):t([l],function(e){a.finishLoad(f.moduleName+"."+f.ext,f.strip,e,n,u)})},write:function(e,t,n,r){if(t in u){var i=a.jsEscape(u[t]);n.asModule(e+"!"+t,"define(function () { return '"+i+"';});\n")}},writeFile:function(e,t,n,r,i){var s=a.parseName(t),o=s.moduleName+"."+s.ext,u=n.toUrl(s.moduleName+"."+s.ext)+".js";a.load(o,n,function(t){var n=function(e){return r(u,e)};n.asModule=function(e,t){return r.asModule(e,u,t)},a.write(e,o,n,i)},i)}},a})}(),define("text!dat/gui/saveDialogue.html",[],function(){return'<div id="dg-save" class="dg dialogue">\r\n\r\n  Here\'s the new load parameter for your <code>GUI</code>\'s constructor:\r\n\r\n  <textarea id="dg-new-constructor"></textarea>\r\n\r\n  <div id="dg-save-locally">\r\n\r\n    <input id="dg-local-storage" type="checkbox"/> Automatically save\r\n    values to <code>localStorage</code> on exit.\r\n\r\n    <div id="dg-local-explain">The values saved to <code>localStorage</code> will\r\n      override those passed to <code>dat.GUI</code>\'s constructor. This makes it\r\n      easier to work incrementally, but <code>localStorage</code> is fragile,\r\n      and your friends may not see the same values you do.\r\n      \r\n    </div>\r\n    \r\n  </div>\r\n\r\n</div>'}),define("text!dat/gui/style.css",[],function(){return"/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\n.dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity 0.1s linear;-o-transition:opacity 0.1s linear;-moz-transition:opacity 0.1s linear;transition:opacity 0.1s linear;border:0;position:absolute;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-x:hidden}.dg.a.has-save ul{margin-top:27px}.dg.a.has-save ul.closed{margin-top:0}.dg.a .save-row{position:fixed;top:0;z-index:1002}.dg li{-webkit-transition:height 0.1s ease-out;-o-transition:height 0.1s ease-out;-moz-transition:height 0.1s ease-out;transition:height 0.1s ease-out}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;overflow:hidden;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li > *{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:9px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\r\n"}),define("dat/utils/common",[],function(){var e=Array.prototype.forEach,t=Array.prototype.slice;return{BREAK:{},extend:function(e){return this.each(t.call(arguments,1),function(t){for(var n in t)this.isUndefined(t[n])||(e[n]=t[n])},this),e},defaults:function(e){return this.each(t.call(arguments,1),function(t){for(var n in t)this.isUndefined(e[n])&&(e[n]=t[n])},this),e},compose:function(){var e=t.call(arguments);return function(){var n=t.call(arguments);for(var r=e.length-1;r>=0;r--)n=[e[r].apply(this,n)];return n[0]}},each:function(t,n,r){if(e&&t.forEach===e)t.forEach(n,r);else if(t.length===t.length+0){for(var i=0,s=t.length;i<s;i++)if(i in t&&n.call(r,t[i],i)===this.BREAK)return}else for(var i in t)if(n.call(r,t[i],i)===this.BREAK)return},defer:function(e){setTimeout(e,0)},toArray:function(e){return e.toArray?e.toArray():t.call(e)},isUndefined:function(e){return e===undefined},isNull:function(e){return e===null},isNaN:function(e){return e!==e},isArray:Array.isArray||function(e){return e.constructor===Array},isObject:function(e){return e===Object(e)},isNumber:function(e){return e===e+0},isString:function(e){return e===e+""},isBoolean:function(e){return e===!1||e===!0},isFunction:function(e){return Object.prototype.toString.call(e)==="[object Function]"}}}),define("dat/controllers/Controller",["dat/utils/common"],function(e){var t=function(e,t){this.initialValue=e[t],this.domElement=document.createElement("div"),this.object=e,this.property=t,this.__onChange=undefined,this.__onFinishChange=undefined};return e.extend(t.prototype,{onChange:function(e){return this.__onChange=e,this},onFinishChange:function(e){return this.__onFinishChange=e,this},setValue:function(e){return this.object[this.property]=e,this.__onChange&&this.__onChange.call(this,e),this.updateDisplay(),this},getValue:function(){return this.object[this.property]},updateDisplay:function(){return this},isModified:function(){return this.initialValue!==this.getValue()}}),t}),define("dat/dom/dom",["dat/utils/common"],function(e){function i(t){if(t==="0"||e.isUndefined(t))return 0;var n=t.match(r);return e.isNull(n)?0:parseFloat(n[1])}var t={HTMLEvents:["change"],MouseEvents:["click","mousemove","mousedown","mouseup","mouseover"],KeyboardEvents:["keydown"]},n={};e.each(t,function(t,r){e.each(t,function(e){n[e]=r})});var r=/(\d+(\.\d+)?)px/,s={makeSelectable:function(e,t){if(e===undefined||e.style===undefined)return;e.onselectstart=t?function(){return!1}:function(){},e.style.MozUserSelect=t?"auto":"none",e.style.KhtmlUserSelect=t?"auto":"none",e.unselectable=t?"on":"off"},makeFullscreen:function(t,n,r){e.isUndefined(n)&&(n=!0),e.isUndefined(r)&&(r=!0),t.style.position="absolute",n&&(t.style.left=0,t.style.right=0),r&&(t.style.top=0,t.style.bottom=0)},fakeEvent:function(t,r,i,s){i=i||{};var o=n[r];if(!o)throw new Error("Event type "+r+" not supported.");var u=document.createEvent(o);switch(o){case"MouseEvents":var a=i.x||i.clientX||0,f=i.y||i.clientY||0;u.initMouseEvent(r,i.bubbles||!1,i.cancelable||!0,window,i.clickCount||1,0,0,a,f,!1,!1,!1,!1,0,null);break;case"KeyboardEvents":var l=u.initKeyboardEvent||u.initKeyEvent;e.defaults(i,{cancelable:!0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,keyCode:undefined,charCode:undefined}),l(r,i.bubbles||!1,i.cancelable,window,i.ctrlKey,i.altKey,i.shiftKey,i.metaKey,i.keyCode,i.charCode);break;default:u.initEvent(r,i.bubbles||!1,i.cancelable||!0)}e.defaults(u,s),t.dispatchEvent(u)},bind:function(e,t,n,r){return r=r||!1,e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on"+t,n),s},unbind:function(e,t,n,r){return r=r||!1,e.removeEventListener?e.removeEventListener(t,n,r):e.detachEvent&&e.detachEvent("on"+t,n),s},addClass:function(e,t){if(e.className===undefined)e.className=t;else if(e.className!==t){var n=e.className.split(/ +/);n.indexOf(t)==-1&&(n.push(t),e.className=n.join(" ").replace(/^\s+/,"").replace(/\s+$/,""))}return s},removeClass:function(e,t){if(t){if(e.className!==undefined)if(e.className===t)e.removeAttribute("class");else{var n=e.className.split(/ +/),r=n.indexOf(t);r!=-1&&(n.splice(r,1),e.className=n.join(" "))}}else e.className=undefined;return s},hasClass:function(e,t){return(new RegExp("(?:^|\\s+)"+t+"(?:\\s+|$)")).test(e.className)||!1},getWidth:function(e){var t=getComputedStyle(e);return i(t["border-left-width"])+i(t["border-right-width"])+i(t["padding-left"])+i(t["padding-right"])+i(t.width)},getHeight:function(e){var t=getComputedStyle(e);return i(t["border-top-width"])+i(t["border-bottom-width"])+i(t["padding-top"])+i(t["padding-bottom"])+i(t.height)},getOffset:function(e){var t={left:0,top:0};if(e.offsetParent)do t.left+=e.offsetLeft,t.top+=e.offsetTop;while(e=e.offsetParent);return t},isActive:function(e){return e===document.activeElement&&(e.type||e.href)}};return s}),define("dat/controllers/OptionController",["dat/controllers/Controller","dat/dom/dom","dat/utils/common"],function(e,t,n){var r=function(e,i,s){r.superclass.call(this,e,i);var o=this;this.__select=document.createElement("select");if(n.isArray(s)){var u={};n.each(s,function(e){u[e]=e}),s=u}n.each(s,function(e,t){var n=document.createElement("option");n.innerHTML=t,n.setAttribute("value",e),o.__select.appendChild(n)}),this.updateDisplay(),t.bind(this.__select,"change",function(){var e=this.options[this.selectedIndex].value;o.setValue(e)}),this.domElement.appendChild(this.__select)};return r.superclass=e,n.extend(r.prototype,e.prototype,{setValue:function(e){var t=r.superclass.prototype.setValue.call(this,e);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),t},updateDisplay:function(){return this.__select.value=this.getValue(),r.superclass.prototype.updateDisplay.call(this)}}),r}),define("dat/controllers/NumberController",["dat/controllers/Controller","dat/utils/common"],function(e,t){function r(e){return e=e.toString(),e.indexOf(".")>-1?e.length-e.indexOf(".")-1:0}var n=function(e,i,s){n.superclass.call(this,e,i),s=s||{},this.__min=s.min,this.__max=s.max,this.__step=s.step,t.isUndefined(this.__step)?this.initialValue==0?this.__impliedStep=1:this.__impliedStep=Math.pow(10,Math.floor(Math.log(this.initialValue)/Math.LN10))/10:this.__impliedStep=this.__step,this.__precision=r(this.__impliedStep)};return n.superclass=e,t.extend(n.prototype,e.prototype,{setValue:function(e){return this.__min!==undefined&&e<this.__min?e=this.__min:this.__max!==undefined&&e>this.__max&&(e=this.__max),this.__step!==undefined&&e%this.__step!=0&&(e=Math.round(e/this.__step)*this.__step),n.superclass.prototype.setValue.call(this,e)},min:function(e){return this.__min=e,this},max:function(e){return this.__max=e,this},step:function(e){return this.__step=e,this}}),n}),define("dat/controllers/NumberControllerBox",["dat/controllers/NumberController","dat/dom/dom","dat/utils/common"],function(e,t,n){function i(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}var r=function(e,i,s){function a(){var e=parseFloat(o.__input.value);n.isNaN(e)||o.setValue(e)}function f(){a(),o.__onFinishChange&&o.__onFinishChange.call(o,o.getValue())}function l(e){t.bind(window,"mousemove",c),t.bind(window,"mouseup",h),u=e.clientY}function c(e){var t=u-e.clientY;o.setValue(o.getValue()+t*o.__impliedStep),u=e.clientY}function h(){t.unbind(window,"mousemove",c),t.unbind(window,"mouseup",h)}this.__truncationSuspended=!1,r.superclass.call(this,e,i,s);var o=this,u;this.__input=document.createElement("input"),this.__input.setAttribute("type","text"),t.bind(this.__input,"change",a),t.bind(this.__input,"blur",f),t.bind(this.__input,"mousedown",l),t.bind(this.__input,"keydown",function(e){e.keyCode===13&&(o.__truncationSuspended=!0,this.blur(),o.__truncationSuspended=!1)}),this.updateDisplay(),this.domElement.appendChild(this.__input)};return r.superclass=e,n.extend(r.prototype,e.prototype,{updateDisplay:function(){return this.__input.value=this.__truncationSuspended?this.getValue():i(this.getValue(),this.__precision),r.superclass.prototype.updateDisplay.call(this)}}),r}),define("text!dat/controllers/NumberControllerSlider.css",[],function(){return"/**\r\n * dat-gui JavaScript Controller Library\r\n * http://code.google.com/p/dat-gui\r\n *\r\n * Copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\n.slider {\r\n  box-shadow: inset 0 2px 4px rgba(0,0,0,0.15);\r\n  height: 1em;\r\n  border-radius: 1em;\r\n  background-color: #eee;\r\n  padding: 0 0.5em;\r\n  overflow: hidden;\r\n}\r\n\r\n.slider-fg {\r\n  padding: 1px 0 2px 0;\r\n  background-color: #aaa;\r\n  height: 1em;\r\n  margin-left: -0.5em;\r\n  padding-right: 0.5em;\r\n  border-radius: 1em 0 0 1em;\r\n}\r\n\r\n.slider-fg:after {\r\n  display: inline-block;\r\n  border-radius: 1em;\r\n  background-color: #fff;\r\n  border:  1px solid #aaa;\r\n  content: '';\r\n  float: right;\r\n  margin-right: -1em;\r\n  margin-top: -1px;\r\n  height: 0.9em;\r\n  width: 0.9em;\r\n}"}),define("dat/controllers/NumberControllerSlider",["dat/controllers/NumberController","dat/dom/dom","dat/utils/css","dat/utils/common","text!dat/controllers/NumberControllerSlider.css"],function(e,t,n,r,i){function o(e,t,n,r,i){return r+(i-r)*((e-t)/(n-t))}var s=function(e,n,r,i,u){function f(e){t.bind(window,"mousemove",l),t.bind(window,"mouseup",c),l(e)}function l(e){e.preventDefault();var n=t.getOffset(a.__background),r=t.getWidth(a.__background);return a.setValue(o(e.clientX,n.left,n.left+r,a.__min,a.__max)),!1}function c(){t.unbind(window,"mousemove",l),t.unbind(window,"mouseup",c),a.__onFinishChange&&a.__onFinishChange.call(a,a.getValue())}s.superclass.call(this,e,n,{min:r,max:i,step:u});var a=this;this.__background=document.createElement("div"),this.__foreground=document.createElement("div"),t.bind(this.__background,"mousedown",f),t.addClass(this.__background,"slider"),t.addClass(this.__foreground,"slider-fg"),this.updateDisplay(),this.__background.appendChild(this.__foreground),this.domElement.appendChild(this.__background)};return s.superclass=e,s.useDefaultStyles=function(){n.inject(i)},r.extend(s.prototype,e.prototype,{updateDisplay:function(){var e=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=e*100+"%",s.superclass.prototype.updateDisplay.call(this)}}),s}),define("dat/controllers/StringController",["dat/controllers/Controller","dat/dom/dom","dat/utils/common"],function(e,t,n){var r=function(e,n){function s(){i.setValue(i.__input.value)}function o(){i.__onFinishChange&&i.__onFinishChange.call(i,i.getValue())}r.superclass.call(this,e,n);var i=this;this.__input=document.createElement("input"),this.__input.setAttribute("type","text"),t.bind(this.__input,"keyup",s),t.bind(this.__input,"change",s),t.bind(this.__input,"blur",o),t.bind(this.__input,"keydown",function(e){e.keyCode===13&&this.blur()}),this.updateDisplay(),this.domElement.appendChild(this.__input)};return r.superclass=e,n.extend(r.prototype,e.prototype,{updateDisplay:function(){return t.isActive(this.__input)||(this.__input.value=this.getValue()),r.superclass.prototype.updateDisplay.call(this)}}),r}),define("dat/controllers/FunctionController",["dat/controllers/Controller","dat/dom/dom","dat/utils/common"],function(e,t,n){var r=function(e,n,i){r.superclass.call(this,e,n);var s=this;this.__button=document.createElement("div"),this.__button.innerHTML=i===undefined?"Fire":i,t.bind(this.__button,"click",function(e){return e.preventDefault(),s.fire(),!1}),t.addClass(this.__button,"button"),this.domElement.appendChild(this.__button)};return r.superclass=e,n.extend(r.prototype,e.prototype,{fire:function(){this.__onChange&&this.__onChange.call(this),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),this.getValue().call(this.object)}}),r}),define("dat/controllers/BooleanController",["dat/controllers/Controller","dat/dom/dom","dat/utils/common"],function(e,t,n){var r=function(e,n){function s(){i.setValue(!i.__prev)}r.superclass.call(this,e,n);var i=this;this.__prev=this.getValue(),this.__checkbox=document.createElement("input"),this.__checkbox.setAttribute("type","checkbox"),t.bind(this.__checkbox,"change",s,!1),this.domElement.appendChild(this.__checkbox),this.updateDisplay()};return r.superclass=e,n.extend(r.prototype,e.prototype,{setValue:function(e){var t=r.superclass.prototype.setValue.call(this,e);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),this.__prev=this.getValue(),t},updateDisplay:function(){return this.getValue()===!0?(this.__checkbox.setAttribute("checked","checked"),this.__checkbox.checked=!0):this.__checkbox.checked=!1,r.superclass.prototype.updateDisplay.call(this)}}),r}),define("dat/controllers/factory",["dat/controllers/OptionController","dat/controllers/NumberControllerBox","dat/controllers/NumberControllerSlider","dat/controllers/StringController","dat/controllers/FunctionController","dat/controllers/BooleanController","dat/utils/common"],function(e,t,n,r,i,s,o){return function(u,a){var f=u[a];if(o.isArray(arguments[2])||o.isObject(arguments[2]))return new e(u,a,arguments[2]);if(o.isNumber(f))return o.isNumber(arguments[2])&&o.isNumber(arguments[3])?new n(u,a,arguments[2],arguments[3]):new t(u,a,{min:arguments[2],max:arguments[3]});if(o.isString(f))return new r(u,a);if(o.isFunction(f))return new i(u,a,"");if(o.isBoolean(f))return new s(u,a)}}),define("dat/color/toString",["dat/utils/common"],function(e){return function(t){if(t.a==1||e.isUndefined(t.a)){var n=t.hex.toString(16);while(n.length<6)n="0"+n;return"#"+n}return"rgba("+Math.round(t.r)+","+Math.round(t.g)+","+Math.round(t.b)+","+t.a+")"}}),define("dat/color/interpret",["dat/color/toString","dat/utils/common"],function(e,t){var n,r,i=function(){r=!1;var e=arguments.length>1?t.toArray(arguments):arguments[0];return t.each(s,function(i){if(i.litmus(e))return t.each(i.conversions,function(i,s){n=i.read(e);if(r===!1&&n!==!1)return r=n,n.conversionName=s,n.conversion=i,t.BREAK}),t.BREAK}),r},s=[{litmus:t.isString,conversions:{THREE_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return t===null?!1:{space:"HEX",hex:parseInt("0x"+t[1].toString()+t[1].toString()+t[2].toString()+t[2].toString()+t[3].toString()+t[3].toString())}},write:e},SIX_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9]{6})$/i);return t===null?!1:{space:"HEX",hex:parseInt("0x"+t[1].toString())}},write:e},CSS_RGB:{read:function(e){var t=e.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/);return t===null?!1:{space:"RGB",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3])}},write:e},CSS_RGBA:{read:function(e){var t=e.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\,\s*(.+)\s*\)/);return t===null?!1:{space:"RGB",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3]),a:parseFloat(t[4])}},write:e}}},{litmus:t.isNumber,conversions:{HEX:{read:function(e){return{space:"HEX",hex:e,conversionName:"HEX"}},write:function(e){return e.hex}}}},{litmus:t.isArray,conversions:{RGB_ARRAY:{read:function(e){return e.length!=3?!1:{space:"RGB",r:e[0],g:e[1],b:e[2]}},write:function(e){return[e.r,e.g,e.b]}},RGBA_ARRAY:{read:function(e){return e.length!=4?!1:{space:"RGB",r:e[0],g:e[1],b:e[2],a:e[3]}},write:function(e){return[e.r,e.g,e.b,e.a]}}}},{litmus:t.isObject,conversions:{RGBA_OBJ:{read:function(e){return t.isNumber(e.r)&&t.isNumber(e.g)&&t.isNumber(e.b)&&t.isNumber(e.a)?{space:"RGB",r:e.r,g:e.g,b:e.b,a:e.a}:!1},write:function(e){return{r:e.r,g:e.g,b:e.b,a:e.a}}},RGB_OBJ:{read:function(e){return t.isNumber(e.r)&&t.isNumber(e.g)&&t.isNumber(e.b)?{space:"RGB",r:e.r,g:e.g,b:e.b}:!1},write:function(e){return{r:e.r,g:e.g,b:e.b}}},HSVA_OBJ:{read:function(e){return t.isNumber(e.h)&&t.isNumber(e.s)&&t.isNumber(e.v)&&t.isNumber(e.a)?{space:"HSV",h:e.h,s:e.s,v:e.v,a:e.a}:!1},write:function(e){return{h:e.h,s:e.s,v:e.v,a:e.a}}},HSV_OBJ:{read:function(e){return t.isNumber(e.h)&&t.isNumber(e.s)&&t.isNumber(e.v)?{space:"HSV",h:e.h,s:e.s,v:e.v}:!1},write:function(e){return{h:e.h,s:e.s,v:e.v}}}}}];return i}),define("dat/color/math",[],function(){var e;return{hsv_to_rgb:function(e,t,n){var r=Math.floor(e/60)%6,i=e/60-Math.floor(e/60),s=n*(1-t),o=n*(1-i*t),u=n*(1-(1-i)*t),a=[[n,u,s],[o,n,s],[s,n,u],[s,o,n],[u,s,n],[n,s,o]][r];return{r:a[0]*255,g:a[1]*255,b:a[2]*255}},rgb_to_hsv:function(e,t,n){var r=Math.min(e,t,n),i=Math.max(e,t,n),s=i-r,o,u;return i==0?{h:NaN,s:0,v:0}:(u=s/i,e==i?o=(t-n)/s:t==i?o=2+(n-e)/s:o=4+(e-t)/s,o/=6,o<0&&(o+=1),{h:o*360,s:u,v:i/255})},rgb_to_hex:function(e,t,n){var r=this.hex_with_component(0,2,e);return r=this.hex_with_component(r,1,t),r=this.hex_with_component(r,0,n),r},component_from_hex:function(e,t){return e>>t*8&255},hex_with_component:function(t,n,r){return r<<(e=n*8)|t&~(255<<e)}}}),define("dat/color/Color",["dat/color/interpret","dat/color/math","dat/color/toString","dat/utils/common"],function(e,t,n,r){function s(e,t,n){Object.defineProperty(e,t,{get:function(){return this.__state.space==="RGB"?this.__state[t]:(u(this,t,n),this.__state[t])},set:function(e){this.__state.space!=="RGB"&&(u(this,t,n),this.__state.space="RGB"),this.__state[t]=e}})}function o(e,t){Object.defineProperty(e,t,{get:function(){return this.__state.space==="HSV"?this.__state[t]:(a(this),this.__state[t])},set:function(e){this.__state.space!=="HSV"&&(a(this),this.__state.space="HSV"),this.__state[t]=e}})}function u(e,n,i){if(e.__state.space==="HEX")e.__state[n]=t.component_from_hex(e.__state.hex,i);else{if(e.__state.space!=="HSV")throw"Corrupted color state";r.extend(e.__state,t.hsv_to_rgb(e.__state.h,e.__state.s,e.__state.v))}}function a(e){var n=t.rgb_to_hsv(e.r,e.g,e.b);r.extend(e.__state,{s:n.s,v:n.v}),r.isNaN(n.h)?r.isUndefined(e.__state.h)&&(e.__state.h=0):e.__state.h=n.h}var i=function(){this.__state=e.apply(this,arguments);if(this.__state===!1)throw"Failed to interpret color arguments";this.__state.a=this.__state.a||1};return i.COMPONENTS=["r","g","b","h","s","v","hex","a"],r.extend(i.prototype,{toString:function(){return n(this)},toOriginal:function(){return this.__state.conversion.write(this)}}),s(i.prototype,"r",2),s(i.prototype,"g",1),s(i.prototype,"b",0),o(i.prototype,"h"),o(i.prototype,"s"),o(i.prototype,"v"),Object.defineProperty(i.prototype,"a",{get:function(){return this.__state.a},set:function(e){this.__state.a=e}}),Object.defineProperty(i.prototype,"hex",{get:function(){return!this.__state.space!=="HEX"&&(this.__state.hex=t.rgb_to_hex(this.r,this.g,this.b)),this.__state.hex},set:function(e){this.__state.space="HEX",this.__state.hex=e}}),i}),define("dat/controllers/ColorController",["dat/controllers/Controller","dat/dom/dom","dat/color/Color","dat/color/interpret","dat/utils/common"],function(e,t,n,r,i){function u(e,t,n,r){e.style.background="",i.each(o,function(i){e.style.cssText+="background: "+i+"linear-gradient("+t+", "+n+" 0%, "+r+" 100%); "})}function a(e){e.style.background="",e.style.cssText+="background: -moz-linear-gradient(top,  #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);",e.style.cssText+="background: -webkit-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -o-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: -ms-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);",e.style.cssText+="background: linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);"}var s=function(e,o){function c(e){v(e),t.bind(window,"mousemove",v),t.bind(window,"mouseup",h)}function h(){t.unbind(window,"mousemove",v),t.unbind(window,"mouseup",h)}function p(){var e=r(this.value);e!==!1?(f.__color.__state=e,f.setValue(f.__color.toOriginal())):this.value=f.__color.toString()}function d(){t.unbind(window,"mousemove",m),t.unbind(window,"mouseup",d)}function v(e){e.preventDefault();var n=t.getWidth(f.__saturation_field),r=t.getOffset(f.__saturation_field),i=(e.clientX-r.left+document.body.scrollLeft)/n,s=1-(e.clientY-r.top+document.body.scrollTop)/n;return s>1?s=1:s<0&&(s=0),i>1?i=1:i<0&&(i=0),f.__color.v=s,f.__color.s=i,f.setValue(f.__color.toOriginal()),!1}function m(e){e.preventDefault();var n=t.getHeight(f.__hue_field),r=t.getOffset(f.__hue_field),i=1-(e.clientY-r.top+document.body.scrollTop)/n;return i>1?i=1:i<0&&(i=0),f.__color.h=i*360,f.setValue(f.__color.toOriginal()),!1}s.superclass.call(this,e,o),this.__color=new n(this.getValue()),this.__temp=new n(0);var f=this;this.domElement=document.createElement("div"),t.makeSelectable(this.domElement,!1),this.__selector=document.createElement("div"),this.__selector.className="selector",this.__saturation_field=document.createElement("div"),this.__saturation_field.className="saturation-field",this.__field_knob=document.createElement("div"),this.__field_knob.className="field-knob",this.__field_knob_border="2px solid ",this.__hue_knob=document.createElement("div"),this.__hue_knob.className="hue-knob",this.__hue_field=document.createElement("div"),this.__hue_field.className="hue-field",this.__input=document.createElement("input"),this.__input.type="text",this.__input_textShadow="0 1px 1px ",t.bind(this.__input,"keydown",function(e){e.keyCode===13&&p.call(this)}),t.bind(this.__input,"blur",p),t.bind(this.__selector,"mousedown",function(e){t.addClass(this,"drag").bind(window,"mouseup",function(e){t.removeClass(f.__selector,"drag")})});var l=document.createElement("div");i.extend(this.__selector.style,{width:"122px",height:"102px",padding:"3px",backgroundColor:"#222",boxShadow:"0px 1px 3px rgba(0,0,0,0.3)"}),i.extend(this.__field_knob.style,{position:"absolute",width:"12px",height:"12px",border:this.__field_knob_border+(this.__color.v<.5?"#fff":"#000"),boxShadow:"0px 1px 3px rgba(0,0,0,0.5)",borderRadius:"12px",zIndex:1}),i.extend(this.__hue_knob.style,{position:"absolute",width:"15px",height:"2px",borderRight:"4px solid #fff",zIndex:1}),i.extend(this.__saturation_field.style,{width:"100px",height:"100px",border:"1px solid #555",marginRight:"3px",display:"inline-block",cursor:"pointer"}),i.extend(l.style,{width:"100%",height:"100%",background:"none"}),u(l,"top","rgba(0,0,0,0)","#000"),i.extend(this.__hue_field.style,{width:"15px",height:"100px",display:"inline-block",border:"1px solid #555",cursor:"ns-resize"}),a(this.__hue_field),i.extend(this.__input.style,{outline:"none",textAlign:"center",color:"#fff",border:0,fontWeight:"bold",textShadow:this.__input_textShadow+"rgba(0,0,0,0.7)"}),t.bind(this.__saturation_field,"mousedown",c),t.bind(this.__field_knob,"mousedown",c),t.bind(this.__hue_field,"mousedown",function(e){m(e),t.bind(window,"mousemove",m),t.bind(window,"mouseup",d)}),this.__saturation_field.appendChild(l),this.__selector.appendChild(this.__field_knob),this.__selector.appendChild(this.__saturation_field),this.__selector.appendChild(this.__hue_field),this.__hue_field.appendChild(this.__hue_knob),this.domElement.appendChild(this.__input),this.domElement.appendChild(this.__selector),this.updateDisplay()};s.superclass=e,i.extend(s.prototype,e.prototype,{updateDisplay:function(){var e=r(this.getValue());if(e!==!1){var t=!1;i.each(n.COMPONENTS,function(n){if(!i.isUndefined(e[n])&&!i.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}},this),t&&i.extend(this.__color.__state,e)}i.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var s=this.__color.v<.5||this.__color.s>.5?255:0,o=255-s;i.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+"px",marginTop:100*(1-this.__color.v)-7+"px",backgroundColor:this.__temp.toString(),border:this.__field_knob_border+"rgb("+s+","+s+","+s+")"}),this.__hue_knob.style.marginTop=(1-this.__color.h/360)*100+"px",this.__temp.s=1,this.__temp.v=1,u(this.__saturation_field,"left","#fff",this.__temp.toString()),i.extend(this.__input.style,{backgroundColor:this.__input.value=this.__color.toString(),color:"rgb("+s+","+s+","+s+")",textShadow:this.__input_textShadow+"rgba("+o+","+o+","+o+",.7)"})}});var o=["-moz-","-o-","-webkit-","-ms-",""];return s}),define("dat/utils/requestAnimationFrame",[],function(){return window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(e,t){window.setTimeout(e,1e3/60)}}),define("dat/dom/CenteredDiv",["dat/dom/dom","dat/utils/common"],function(e,t){function r(e){console.log(e)}var n=function(){this.backgroundElement=document.createElement("div"),t.extend(this.backgroundElement.style,{backgroundColor:"rgba(0,0,0,0.8)",top:0,left:0,display:"none",zIndex:"1000",opacity:0,WebkitTransition:"opacity 0.2s linear"}),e.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position="fixed",this.domElement=document.createElement("div"),t.extend(this.domElement.style,{position:"fixed",display:"none",zIndex:"1001",opacity:0,WebkitTransition:"-webkit-transform 0.2s ease-out, opacity 0.2s linear"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var n=this;e.bind(this.backgroundElement,"click",function(){n.hide()})};return n.prototype.show=function(){var e=this;this.backgroundElement.style.display="block",this.domElement.style.display="block",this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)",this.layout(),t.defer(function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform="scale(1)"})},n.prototype.hide=function(){var t=this,n=function(){t.domElement.style.display="none",t.backgroundElement.style.display="none",e.unbind(t.domElement,"webkitTransitionEnd",n),e.unbind(t.domElement,"transitionend",n),e.unbind(t.domElement,"oTransitionEnd",n)};e.bind(this.domElement,"webkitTransitionEnd",n),e.bind(this.domElement,"transitionend",n),e.bind(this.domElement,"oTransitionEnd",n),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform="scale(1.1)"},n.prototype.layout=function(){this.domElement.style.left=window.innerWidth/2-e.getWidth(this.domElement)/2+"px",this.domElement.style.top=window.innerHeight/2-e.getHeight(this.domElement)/2+"px"},n}),define("dat/gui/GUI",["dat/utils/css","text!dat/gui/saveDialogue.html","text!dat/gui/style.css","dat/controllers/factory","dat/controllers/Controller","dat/controllers/BooleanController","dat/controllers/FunctionController","dat/controllers/NumberControllerBox","dat/controllers/NumberControllerSlider","dat/controllers/OptionController","dat/controllers/ColorController","dat/utils/requestAnimationFrame","dat/dom/CenteredDiv","dat/dom/dom","dat/utils/common"],function(e,t,n,r,i,s,o,u,a,f,l,c,h,p,d){function C(e,t,n,s){if(t[n]===undefined)throw new Error("Object "+t+' has no property "'+n+'"');var o;if(s.color)o=new l(t,n);else{var u=[t,n].concat(s.factoryArgs);o=r.apply(e,u)}s.before instanceof i&&(s.before=s.before.__li),A(e,o),p.addClass(o.domElement,"c");var a=document.createElement("span");p.addClass(a,"property-name"),a.innerHTML=o.property;var f=document.createElement("div");f.appendChild(a),f.appendChild(o.domElement);var c=k(e,f,s.before);return p.addClass(c,N.CLASS_CONTROLLER_ROW),p.addClass(c,typeof o.getValue()),L(e,c,o),e.__controllers.push(o),o}function k(e,t,n){var r=document.createElement("li");return t&&r.appendChild(t),n?e.__ul.insertBefore(r,params.before):e.__ul.appendChild(r),e.onResize(),r}function L(e,t,n){n.__li=t,n.__gui=e,d.extend(n,{options:function(t){if(arguments.length>1)return n.remove(),C(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[d.toArray(arguments)]});if(d.isArray(t)||d.isObject(t))return n.remove(),C(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[t]})},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}});if(n instanceof a){var r=new u(n.object,n.property,{min:n.__min,max:n.__max,step:n.__step});d.each(["updateDisplay","onChange","onFinishChange"],function(e){var t=n[e],i=r[e];n[e]=r[e]=function(){var e=Array.prototype.slice.call(arguments);return t.apply(n,e),i.apply(r,e)}}),p.addClass(t,"has-slider"),n.domElement.insertBefore(r.domElement,n.domElement.firstElementChild)}else if(n instanceof u){var i=function(t){return d.isNumber(n.__min)&&d.isNumber(n.__max)?(n.remove(),C(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]})):t};n.min=d.compose(i,n.min),n.max=d.compose(i,n.max)}else n instanceof s?(p.bind(t,"click",function(){p.fakeEvent(n.__checkbox,"click")}),p.bind(n.__checkbox,"click",function(e){e.stopPropagation()})):n instanceof o?(p.bind(t,"click",function(){p.fakeEvent(n.__button,"click")}),p.bind(t,"mouseover",function(){p.addClass(n.__button,"hover")}),p.bind(t,"mouseout",function(){p.removeClass(n.__button,"hover")})):n instanceof l&&(p.addClass(t,"color"),n.updateDisplay=d.compose(function(e){return t.style.borderLeftColor=n.__color.toString(),e},n.updateDisplay),n.updateDisplay());n.setValue=d.compose(function(t){return e.getRoot().__preset_select&&n.isModified()&&j(e.getRoot(),!0),t},n.setValue)}function A(e,t){var n=e.getRoot(),r=n.__rememberedObjects.indexOf(t.object);if(r!=-1){var i=n.__rememberedObjectIndecesToControllers[r];i===undefined&&(i={},n.__rememberedObjectIndecesToControllers[r]=i),i[t.property]=t;if(n.load&&n.load.remembered){var s=n.load.remembered,o;if(s[e.preset])o=s[e.preset];else{if(!s[y])return;o=s[y]}if(o[r]&&o[r][t.property]!==undefined){var u=o[r][t.property];t.initialValue=u,t.setValue(u)}}}}function O(e,t){return document.location.href+"."+t}function M(e){var t=e.__save_row=document.createElement("li");p.addClass(e.domElement,"has-save"),e.__ul.insertBefore(t,e.__ul.firstChild),p.addClass(t,"save-row");var n=document.createElement("span");n.innerHTML="&nbsp;",p.addClass(n,"button gears");var r=document.createElement("span");r.innerHTML="Save",p.addClass(r,"button"),p.addClass(r,"save");var i=document.createElement("span");i.innerHTML="New",p.addClass(i,"button"),p.addClass(i,"save-as");var s=document.createElement("span");s.innerHTML="Revert",p.addClass(s,"button"),p.addClass(s,"revert");var o=e.__preset_select=document.createElement("select");e.load&&e.load.remembered?d.each(e.load.remembered,function(t,n){H(e,n,n==e.preset)}):H(e,y,!1),p.bind(o,"change",function(){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].innerHTML=e.__preset_select[t].value;e.preset=this.value}),t.appendChild(o),t.appendChild(n),t.appendChild(r),t.appendChild(i),t.appendChild(s);if(b){var u=document.getElementById("dg-save-locally"),a=document.getElementById("dg-local-explain");u.style.display="block";var f=document.getElementById("dg-local-storage");localStorage.getItem(O(e,"isLocal"))==="true"&&f.setAttribute("checked","checked");function l(){a.style.display=e.useLocalStorage?"block":"none"}l(),p.bind(f,"change",function(){e.useLocalStorage=!e.useLocalStorage,l()})}var c=document.getElementById("dg-new-constructor");p.bind(c,"keydown",function(e){e.metaKey&&(e.which===67||e.keyCode==67)&&w.hide()}),p.bind(n,"click",function(){c.innerHTML=JSON.stringify(e.getSaveObject(),undefined,2),w.show(),c.focus(),c.select()}),p.bind(r,"click",function(){e.save()}),p.bind(i,"click",function(){var t=prompt("Enter a new preset name.");t&&e.saveAs(t)}),p.bind(s,"click",function(){e.revert()})}function _(e){function n(n){return n.preventDefault(),t=n.clientX,p.addClass(e.__closeButton,N.CLASS_DRAG),p.bind(window,"mousemove",r),p.bind(window,"mouseup",i),!1}function r(n){return n.preventDefault(),e.width+=t-n.clientX,e.onResize(),t=n.clientX,!1}function i(){p.removeClass(e.__closeButton,N.CLASS_DRAG),p.unbind(window,"mousemove",r),p.unbind(window,"mouseup",i)}e.__resize_handle=document.createElement("div"),d.extend(e.__resize_handle.style,{width:"6px",marginLeft:"-3px",height:"200px",cursor:"ew-resize",position:"absolute"});var t;p.bind(e.__resize_handle,"mousedown",n),p.bind(e.__closeButton,"mousedown",n),e.domElement.insertBefore(e.__resize_handle,e.domElement.firstElementChild)}function D(e,t){e.domElement.style.width=t+"px",e.__save_row&&e.autoPlace&&(e.__save_row.style.width=t+"px"),e.__closeButton&&(e.__closeButton.style.width=t+"px")}function P(e,t){var n={};return d.each(e.__rememberedObjects,function(r,i){var s={},o=e.__rememberedObjectIndecesToControllers[i];d.each(o,function(e,n){s[n]=t?e.initialValue:e.getValue()}),n[i]=s}),n}function H(e,t,n){var r=document.createElement("option");r.innerHTML=t,r.value=t,e.__preset_select.appendChild(r),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function B(e){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].value==e.preset&&(e.__preset_select.selectedIndex=t)}function j(e,t){var n=e.__preset_select[e.__preset_select.selectedIndex];t?n.innerHTML=n.value+"*":n.innerHTML=n.value}function F(e){e.length!=0&&c(function(){F(e)}),d.each(e,function(e){e.updateDisplay()})}e.inject(n);var v="dg",m=72,g=20,y="Default",b=function(){try{return"localStorage"in window&&window.localStorage!==null}catch(e){return!1}}(),w,E=!0,S,x=!1,T=[],N=function(e){function u(){localStorage.setItem(O(t,"gui"),JSON.stringify(t.getSaveObject()))}function f(){var e=t.getRoot();e.width+=1,d.defer(function(){e.width-=1})}var t=this;this.domElement=document.createElement("div"),this.__ul=document.createElement("ul"),this.domElement.appendChild(this.__ul),p.addClass(this.domElement,v),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],e=e||{},e=d.defaults(e,{autoPlace:!0,width:N.DEFAULT_WIDTH}),e=d.defaults(e,{resizable:e.autoPlace,hideable:e.autoPlace}),d.isUndefined(e.load)?e.load={preset:y}:e.preset&&(e.load.preset=e.preset),d.isUndefined(e.parent)&&e.hideable&&T.push(this),e.resizable=d.isUndefined(e.parent)&&e.resizable,e.autoPlace&&d.isUndefined(e.scrollable)&&(e.scrollable=!0);var n=b&&localStorage.getItem(O(this,"isLocal"))==="true";Object.defineProperties(this,{parent:{get:function(){return e.parent}},scrollable:{get:function(){return e.scrollable}},autoPlace:{get:function(){return e.autoPlace}},preset:{get:function(){return t.parent?t.getRoot().preset:e.load.preset},set:function(n){t.parent?t.getRoot().preset=n:e.load.preset=n,B(this),t.revert()}},width:{get:function(){return e.width},set:function(n){e.width=n,D(t,n)}},name:{get:function(){return e.name},set:function(t){e.name=t,i&&(i.innerHTML=e.name)}},closed:{get:function(){return e.closed},set:function(n){e.closed=n,e.closed?p.addClass(t.__ul,N.CLASS_CLOSED):p.removeClass(t.__ul,N.CLASS_CLOSED),this.onResize(),t.__closeButton&&(t.__closeButton.innerHTML=n?N.TEXT_OPEN:N.TEXT_CLOSED)}},load:{get:function(){return e.load}},useLocalStorage:{get:function(){return n},set:function(e){b&&(n=e,e?p.bind(window,"unload",u):p.unbind(window,"unload",u),localStorage.setItem(O(t,"isLocal"),e))}}});if(d.isUndefined(e.parent)){e.closed=!1,p.addClass(this.domElement,N.CLASS_MAIN),p.makeSelectable(this.domElement,!1);if(b&&n){t.useLocalStorage=!0;var r=localStorage.getItem(O(this,"gui"));r&&(e.load=JSON.parse(r))}this.__closeButton=document.createElement("div"),this.__closeButton.innerHTML=N.TEXT_CLOSED,p.addClass(this.__closeButton,N.CLASS_CLOSE_BUTTON),this.domElement.appendChild(this.__closeButton),p.bind(this.__closeButton,"click",function(){t.closed=!t.closed})}else{e.closed===undefined&&(e.closed=!0);var i=document.createTextNode(e.name);p.addClass(i,"controller-name");var s=k(t,i),o=function(e){return e.preventDefault(),t.closed=!t.closed,!1};p.addClass(this.__ul,N.CLASS_CLOSED),p.addClass(s,"title"),p.bind(s,"click",o),e.closed||(this.closed=!1)}e.autoPlace&&(d.isUndefined(e.parent)&&(E&&(S=document.createElement("div"),p.addClass(S,v),p.addClass(S,N.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(S),E=!1),S.appendChild(this.domElement),p.addClass(this.domElement,N.CLASS_AUTO_PLACE)),this.parent||D(t,e.width)),p.bind(window,"resize",function(){t.onResize()}),p.bind(this.__ul,"webkitTransitionEnd",function(){t.onResize()}),p.bind(this.__ul,"transitionend",function(){t.onResize()}),p.bind(this.__ul,"oTransitionEnd",function(){t.onResize()}),this.onResize(),e.resizable&&_(this);var a=t.getRoot();e.parent||f()};return N.toggleHide=function(){x=!x,d.each(T,function(e){e.domElement.style.zIndex=x?-999:999,e.domElement.style.opacity=x?0:1})},N.CLASS_AUTO_PLACE="a",N.CLASS_AUTO_PLACE_CONTAINER="ac",N.CLASS_MAIN="main",N.CLASS_CONTROLLER_ROW="cr",N.CLASS_TOO_TALL="taller-than-window",N.CLASS_CLOSED="closed",N.CLASS_CLOSE_BUTTON="close-button",N.CLASS_DRAG="drag",N.DEFAULT_WIDTH=245,N.TEXT_CLOSED="Close Controls",N.TEXT_OPEN="Open Controls",p.bind(window,"keydown",function(e){document.activeElement.type!=="text"&&(e.which===m||e.keyCode==m)&&N.toggleHide()},!1),d.extend(N.prototype,{add:function(e,t){return C(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return C(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.slice(this.__controllers.indexOf(e),1);var t=this;d.defer(function(){t.onResize()})},destroy:function(){this.autoPlace&&S.removeChild(this.domElement)},addFolder:function(e){if(this.__folders[e]!==undefined)throw new Error('You already have a folder in this GUI by the name "'+e+'"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var n=new N(t);this.__folders[e]=n;var r=k(this,n.domElement);return p.addClass(r,"folder"),n},open:function(){this.closed=!1},close:function(){this.closed=!0},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=p.getOffset(e.__ul).top,n=0;d.each(e.__ul.childNodes,function(t){if(!e.autoPlace||t!==e.__save_row)n+=p.getHeight(t)}),window.innerHeight-t-g<n?(p.addClass(e.domElement,N.CLASS_TOO_TALL),e.__ul.style.height=window.innerHeight-t-g+"px"):(p.removeClass(e.domElement,N.CLASS_TOO_TALL),e.__ul.style.height="auto")}e.__resize_handle&&d.defer(function(){e.__resize_handle.style.height=e.__ul.offsetHeight+"px"}),e.__closeButton&&(e.__closeButton.style.width=e.width+"px")},remember:function(){d.isUndefined(w)&&(w=new h,w.domElement.innerHTML=t);if(this.parent)throw new Error("You can only call remember on a top level GUI.");var e=this;d.each(Array.prototype.slice.call(arguments),function(t){e.__rememberedObjects.length==0&&M(e),e.__rememberedObjects.indexOf(t)==-1&&e.__rememberedObjects.push(t)}),this.autoPlace&&D(this,this.width)},getRoot:function(){var e=this;while(e.parent)e=e.parent;return e},getSaveObject:function(){var e=this.load;return e.closed=this.closed,this.__rememberedObjects.length>0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=P(this)),e.folders={},d.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=P(this),j(this,!1)},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[y]=P(this,!0)),this.load.remembered[e]=P(this),this.preset=e,H(this,e,!0)},revert:function(e){d.each(this.__controllers,function(t){this.getRoot().load.remembered?A(e||this.getRoot(),t):t.setValue(t.initialValue)},this),d.each(this.__folders,function(e){e.revert(e)}),e||j(this.getRoot(),!1)},listen:function(e){var t=this.__listening.length==0;this.__listening.push(e),t&&F(this.__listening)}}),N}),define("hair/config/controllers",[],function(){return{}}),define("hair/config/options",["dat/gui/GUI","hair/config/controllers"],function(e,t){var n=new e,r={amount:15,length:50,thickness:20,type:"face",suction:!1,color:"#642222"};return n.close(),t.amount=n.add(r,"amount",5,40),t.length=n.add(r,"length",20,200),t.thickness=n.add(r,"thickness",4,30),t.type=n.add(r,"type",["face","circle","flat"]),t.suction=n.add(r,"suction").name("Inverse"),t.color=n.addColor(r,"color"),r}),define("hair/Joint",["suds/math/Point","suds/ui/Motion","hair/config/options"],function(e,t,n){var r=e.extend({predecessor:null,force:null,distance:null,motion:null,successor:null,initialize:function(r,i){var s,o;this.predecessor=r,this.index=i,this.distance=n.length,this.motion=new t(5,2,10),r?(s=r.x+this.distance,o=r.y):(s=0,o=0),this._super(s,o),this.top=(new e).set(this),this.bottom=(new e).set(this)},update:function(){var t=this.index*n.thickness;if(this.successor){var r=e.between(this,this.successor).normalize().multiply(t);this.top=r.clone().rotate(Math.PI/2),this.bottom=r.clone().rotate(-Math.PI/2);return}if(!this.predecessor)return;this.motion.update();var i=this.force.clone().add(this.motion.getPosition());this.add(i);var r=e.between(this.predecessor,this).normalize(),s=r.clone().multiply(n.length),o=this.predecessor.clone().add(s);this.x=o.x,this.y=o.y,this.top=this.clone().add(r.clone().multiply(t).rotate(Math.PI/2)),this.bottom=this.clone().add(r.clone().multiply(t).rotate(-Math.PI/2))}});return r}),define("hair/utils/bezier",[],function(){return function(e,t,n){var r,i,s,o;for(var u=1,a=e.length-2;u<a;u++)r=e[u][n],i=e[u+1][n],s=(r.x+i.x)*.5,o=(r.y+i.y)*.5,t.quadraticCurveTo(r.x,r.y,s,o);r=e[u][n],i=e[u+1][n],t.quadraticCurveTo(r.x,r.y,i.x,i.y)}}),define("hair/utils/reverse",[],function(){return function(e){var t=[];for(var n=0;n<e.length;n++)t.push(e[n]);return t.reverse(),t}}),define("hair/Hair",["suds/math/Point","hair/Joint","hair/utils/bezier","hair/utils/reverse","hair/config/options"],function(e,t,n,r,i){var s=function(s){function f(){var e,n=5;for(var r=0;r<n;r++)e=new t(e,(n-r)/n),e.force=a,o.push(e);o[0].successor=o[1]}var o=[],u=25,a=new e;this.draw=function(t){var u=o.length,a=o[0];t.save(),t.beginPath(),t.strokeStyle="rgb( 0, 0, 0 )",t.fillStyle=i.color,t.lineWidth=2,t.translate(s.x,s.y);for(var f=0;f<u;f++)o[f].update();t.moveTo(a.top.x,a.top.y),n(o,t,"top"),n(r(o),t,"bottom");var l=e.between(a,a.top),c=e.between(a,a.bottom);t.arc(a.x,a.y,i.thickness,Math.atan2(c.y,c.x),Math.atan2(l.y,l.x),!0),t.closePath(),t.fill(),t.stroke(),t.restore()},this.getOrigin=function(){return s},this.setOrigin=function(e){s.set(e)},this.setForce=function(e){a.set(e)},f()};return s}),define("hair/utils/polarToCartesian",["suds/math/Point"],function(e){return function(n,r){return new e(r*Math.cos(n),r*Math.sin(n))}}),define("hair/utils/circleOrder",[],function(){return function(e,t){function s(e){return(t+e)%n}var n=e.length,r=[],i=0;j=n-1;while(i<=j)r.unshift(e[s(i)]),i!=j&&r.unshift(e[s(j)]),i++,j--;return r}}),define("hair/utils/faceOrder",[],function(){return function(e,t){var n=e.length,r=[],i=1,s=1;r.unshift(e[t]);while(i>-1||s>-1)i>-1&&(t+i>n-1?i=-1:(r.unshift(e[t+i]),i++)),s>-1&&(t-s<0?s=-1:(r.unshift(e[t-s]),s++));return r}}),define("hair/utils/linear",[],function(){return function(e,t,n){return(e-t)/(n-t)}}),define("hair/App",["suds/events/Interval","suds/helpers/MouseHelper","suds/math/Point","hair/Hair","hair/utils/polarToCartesian","hair/utils/circleOrder","hair/utils/faceOrder","hair/utils/linear","hair/config/options","hair/config/controllers"],function(e,t,n,r,i,s,o,u,a,f){"use strict";var l=function(){function v(){e.addListener(e.FRAME,y),t.startTracking(),l=document.getElementById("canvas"),c=l.getContext("2d"),p=l.width=window.innerWidth,d=l.height=window.innerHeight,m(),f.amount.onFinishChange(m),f.type.onFinishChange(g),window.addEventListener("resize",function(){p=l.width=window.innerWidth,d=l.height=window.innerHeight,g()})}function m(){var e=a.amount,t,i;h=[];for(var s=0;s<e;s++)i=new r(new n),h.push(i);g()}function g(){var e=new n(p/2,d/2),t=h.length,r,s,o;switch(a.type){case"circle":for(var r=0;r<t;r++)s=h[r],o=i(Math.PI*2*(r/t),100).add(e),s.setOrigin(o);break;case"flat":var u=p*3*.25,f=(p-u)*.5,l=u/t,c=d*.5;for(var r=0;r<t;r++)s=h[r],o=new n(f+r*l,c),s.setOrigin(o);break;case"face":var v;for(var r=0;r<t;r++)s=h[r],v=-Math.PI*.1-Math.PI*.8*(r/(t-1)),o=i(v,100).add(e),s.setOrigin(o)}}function y(){l.width=p;var e=new n(p/2,d/2),r=n.between(t,e),i=Math.atan2(r.y,r.x),f=(Math.PI+i)/(Math.PI*2),v,m;a.type==="face"?(b(),f>.5&&f<1?(f=u(f,.5,1),v=~~((1-f)*(h.length-1))):(f=u(f,0,.5),v=~~(f*(h.length-1))),m=o(h,v)):(v=~~(f*(h.length-1)),m=s(h,v));var g,y;for(var w=0,E=m.length;w<E;w++)g=m[w],y=n.between(t,g.getOrigin()).normalize().multiply(20),a.suction&&y.flip(),g.setForce(y),g.draw(c)}function b(){c.beginPath(),c.strokeStyle="rgb( 0, 0, 0 )",c.fillStyle="rgb( 255, 255, 255 )",c.lineWidth=2,c.arc(p/2,d/2,100,0,Math.PI,!0),c.closePath(),c.fill(),c.stroke(),c.beginPath(),c.fillStyle="rgb( 0, 0, 0 )",c.arc(p/2-30,d/2-20,7,0,Math.PI*2),c.closePath(),c.fill(),c.beginPath(),c.fillStyle="rgb( 0, 0, 0 )",c.arc(p/2+30,d/2-20,7,0,Math.PI*2),c.closePath(),c.fill(),c.beginPath(),c.moveTo(0,d/2),c.lineTo(p,d/2),c.stroke(),c.fillStyle="rgb( 255, 255, 255 )",w(),E()}function w(){var e=p/2-200;S(e),S(e+15),S(e+30)}function E(){var e=p/2+200;S(e),S(e-15),S(e-30)}function S(e){c.beginPath(),c.arc(e,d/2,10,0,Math.PI*2),c.closePath(),c.fill(),c.stroke()}var l=null,c=null,h=null,p=0,d=0;v()};return l}),require.config({urlArgs:"bust="+Date.now(),paths:{suds:"libs/suds/source",dat:"libs/dat",text:"libs/require/plugin.text"}}),require(["hair/App"],function(e){function r(){t.className="before in",setTimeout(function(){t.className=""},300)}var t=document.getElementById("tag"),n=new e;r()}),define("main",function(){});
            
          
!
999px
Close

Asset uploading is a PRO feature.

As a PRO member, you can drag-and-drop upload files here to use as resources. Images, Libraries, JSON data... anything you want. You can even edit them anytime, like any other code on CodePen.

Go PRO

Loading ..................

Console