(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.AFRAME=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;o0){this._tweensAddedDuringUpdate={};for(var i=0;i1?1:elapsed;value=this._easingFunction(elapsed);for(property in this._valuesEnd){if(this._valuesStart[property]===undefined){continue}var start=this._valuesStart[property]||0;var end=this._valuesEnd[property];if(end instanceof Array){this._object[property]=this._interpolationFunction(end,value)}else{if(typeof end==="string"){if(end.charAt(0)==="+"||end.charAt(0)==="-"){end=start+parseFloat(end)}else{end=parseFloat(end)}}if(typeof end==="number"){this._object[property]=start+(end-start)*value}}}if(this._onUpdateCallback!==null){this._onUpdateCallback.call(this._object,value)}if(elapsed===1){if(this._repeat>0){if(isFinite(this._repeat)){this._repeat--}for(property in this._valuesStartRepeat){if(typeof this._valuesEnd[property]==="string"){this._valuesStartRepeat[property]=this._valuesStartRepeat[property]+parseFloat(this._valuesEnd[property])}if(this._yoyo){var tmp=this._valuesStartRepeat[property];this._valuesStartRepeat[property]=this._valuesEnd[property];this._valuesEnd[property]=tmp}this._valuesStart[property]=this._valuesStartRepeat[property]}if(this._yoyo){this._reversed=!this._reversed}if(this._repeatDelayTime!==undefined){this._startTime=time+this._repeatDelayTime}else{this._startTime=time+this._delayTime}return true}else{if(this._onCompleteCallback!==null){this._onCompleteCallback.call(this._object,this._object)}for(var i=0,numChainedTweens=this._chainedTweens.length;i1){return fn(v[m],v[m-1],m-f)}return fn(v[i],v[i+1>m?m:i+1],f-i)},Bezier:function(v,k){var b=0;var n=v.length-1;var pw=Math.pow;var bn=TWEEN.Interpolation.Utils.Bernstein;for(var i=0;i<=n;i++){b+=pw(1-k,n-i)*pw(k,i)*v[i]*bn(n,i)}return b},CatmullRom:function(v,k){var m=v.length-1;var f=m*k;var i=Math.floor(f);var fn=TWEEN.Interpolation.Utils.CatmullRom;if(v[0]===v[m]){if(k<0){i=Math.floor(f=m*(1+k))}return fn(v[(i-1+m)%m],v[i],v[(i+1)%m],v[(i+2)%m],f-i)}else{if(k<0){return v[0]-(fn(v[0],v[0],v[1],v[1],-f)-v[0])}if(k>1){return v[m]-(fn(v[m],v[m],v[m-1],v[m-1],f-m)-v[m])}return fn(v[i?i-1:0],v[i],v[m1;i--){s*=i}a[n]=s;return s}}(),CatmullRom:function(p0,p1,p2,p3,t){var v0=(p2-p0)*.5;var v1=(p3-p1)*.5;var t2=t*t;var t3=t*t2;return(2*p1-2*p2+v0+v1)*t3+(-3*p1+3*p2-2*v0-v1)*t2+v0*t+p1}}};(function(root){if(typeof define==="function"&&define.amd){define([],function(){return TWEEN})}else if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=TWEEN}else if(root!==undefined){root.TWEEN=TWEEN}})(this)}).call(this,_dereq_("_process"))},{_process:6}],2:[function(_dereq_,module,exports){var str=Object.prototype.toString;module.exports=anArray;function anArray(arr){return arr.BYTES_PER_ELEMENT&&str.call(arr.buffer)==="[object ArrayBuffer]"||Array.isArray(arr)}},{}],3:[function(_dereq_,module,exports){module.exports=function numtype(num,def){return typeof num==="number"?num:typeof def==="number"?def:0}},{}],4:[function(_dereq_,module,exports){"use strict";exports.byteLength=byteLength;exports.toByteArray=toByteArray;exports.fromByteArray=fromByteArray;var lookup=[];var revLookup=[];var Arr=typeof Uint8Array!=="undefined"?Uint8Array:Array;var code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(var i=0,len=code.length;i0){throw new Error("Invalid string. Length must be a multiple of 4")}return b64[len-2]==="="?2:b64[len-1]==="="?1:0}function byteLength(b64){return b64.length*3/4-placeHoldersCount(b64)}function toByteArray(b64){var i,l,tmp,placeHolders,arr;var len=b64.length;placeHolders=placeHoldersCount(b64);arr=new Arr(len*3/4-placeHolders);l=placeHolders>0?len-4:len;var L=0;for(i=0;i>16&255;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}if(placeHolders===2){tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4;arr[L++]=tmp&255}else if(placeHolders===1){tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2;arr[L++]=tmp>>8&255;arr[L++]=tmp&255}return arr}function tripletToBase64(num){return lookup[num>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[num&63]}function encodeChunk(uint8,start,end){var tmp;var output=[];for(var i=start;ilen2?len2:i+maxChunkLength))}if(extraBytes===1){tmp=uint8[len-1];output+=lookup[tmp>>2];output+=lookup[tmp<<4&63];output+="=="}else if(extraBytes===2){tmp=(uint8[len-2]<<8)+uint8[len-1];output+=lookup[tmp>>10];output+=lookup[tmp>>4&63];output+=lookup[tmp<<2&63];output+="="}parts.push(output);return parts.join("")}},{}],5:[function(_dereq_,module,exports){"use strict";module.exports={createLink:function(href,attributes){var head=document.head||document.getElementsByTagName("head")[0];var link=document.createElement("link");link.href=href;link.rel="stylesheet";for(var key in attributes){if(!attributes.hasOwnProperty(key)){continue}var value=attributes[key];link.setAttribute("data-"+key,value)}head.appendChild(link)},createStyle:function(cssText,attributes){var head=document.head||document.getElementsByTagName("head")[0],style=document.createElement("style");style.type="text/css";for(var key in attributes){if(!attributes.hasOwnProperty(key)){continue}var value=attributes[key];style.setAttribute("data-"+key,value)}if(style.sheet){style.innerHTML=cssText;style.sheet.cssText=cssText;head.appendChild(style)}else if(style.styleSheet){head.appendChild(style);style.styleSheet.cssText=cssText}else{style.appendChild(document.createTextNode(cssText));head.appendChild(style)}}}},{}],6:[function(_dereq_,module,exports){var process=module.exports={};var cachedSetTimeout;var cachedClearTimeout;function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}(function(){try{if(typeof setTimeout==="function"){cachedSetTimeout=setTimeout}else{cachedSetTimeout=defaultSetTimout}}catch(e){cachedSetTimeout=defaultSetTimout}try{if(typeof clearTimeout==="function"){cachedClearTimeout=clearTimeout}else{cachedClearTimeout=defaultClearTimeout}}catch(e){cachedClearTimeout=defaultClearTimeout}})();function runTimeout(fun){if(cachedSetTimeout===setTimeout){return setTimeout(fun,0)}if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout){cachedSetTimeout=setTimeout;return setTimeout(fun,0)}try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}function runClearTimeout(marker){if(cachedClearTimeout===clearTimeout){return clearTimeout(marker)}if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout){cachedClearTimeout=clearTimeout;return clearTimeout(marker)}try{return cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}var queue=[];var draining=false;var currentQueue;var queueIndex=-1;function cleanUpNextTick(){if(!draining||!currentQueue){return}draining=false;if(currentQueue.length){queue=currentQueue.concat(queue)}else{queueIndex=-1}if(queue.length){drainQueue()}}function drainQueue(){if(draining){return}var timeout=runTimeout(cleanUpNextTick);draining=true;var len=queue.length;while(len){currentQueue=queue;queue=[];while(++queueIndex1){for(var i=1;i=kMaxLength()){throw new RangeError("Attempt to allocate Buffer larger than maximum "+"size: 0x"+kMaxLength().toString(16)+" bytes")}return length|0}function SlowBuffer(length){if(+length!=length){length=0}return Buffer.alloc(+length)}Buffer.isBuffer=function isBuffer(b){return!!(b!=null&&b._isBuffer)};Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b)){throw new TypeError("Arguments must be Buffers")}if(a===b)return 0;var x=a.length;var y=b.length;for(var i=0,len=Math.min(x,y);i>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase();loweredCase=true}}}Buffer.byteLength=byteLength;function slowToString(encoding,start,end){var loweredCase=false;if(start===undefined||start<0){start=0}if(start>this.length){return""}if(end===undefined||end>this.length){end=this.length}if(end<=0){return""}end>>>=0;start>>>=0;if(end<=start){return""}if(!encoding)encoding="utf8";while(true){switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase();loweredCase=true}}}Buffer.prototype._isBuffer=true;function swap(b,n,m){var i=b[n];b[n]=b[m];b[m]=i}Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!==0){throw new RangeError("Buffer size must be a multiple of 16-bits")}for(var i=0;i0){str=this.toString("hex",0,max).match(/.{2}/g).join(" ");if(this.length>max)str+=" ... "}return""};Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(!Buffer.isBuffer(target)){throw new TypeError("Argument must be a Buffer")}if(start===undefined){start=0}if(end===undefined){end=target?target.length:0}if(thisStart===undefined){thisStart=0}if(thisEnd===undefined){thisEnd=this.length}if(start<0||end>target.length||thisStart<0||thisEnd>this.length){throw new RangeError("out of range index")}if(thisStart>=thisEnd&&start>=end){return 0}if(thisStart>=thisEnd){return-1}if(start>=end){return 1}start>>>=0;end>>>=0;thisStart>>>=0;thisEnd>>>=0;if(this===target)return 0;var x=thisEnd-thisStart;var y=end-start;var len=Math.min(x,y);var thisCopy=this.slice(thisStart,thisEnd);var targetCopy=target.slice(start,end);for(var i=0;i2147483647){byteOffset=2147483647}else if(byteOffset<-2147483648){byteOffset=-2147483648}byteOffset=+byteOffset;if(isNaN(byteOffset)){byteOffset=dir?0:buffer.length-1}if(byteOffset<0)byteOffset=buffer.length+byteOffset;if(byteOffset>=buffer.length){if(dir)return-1;else byteOffset=buffer.length-1}else if(byteOffset<0){if(dir)byteOffset=0;else return-1}if(typeof val==="string"){val=Buffer.from(val,encoding)}if(Buffer.isBuffer(val)){if(val.length===0){return-1}return arrayIndexOf(buffer,val,byteOffset,encoding,dir)}else if(typeof val==="number"){val=val&255;if(Buffer.TYPED_ARRAY_SUPPORT&&typeof Uint8Array.prototype.indexOf==="function"){if(dir){return Uint8Array.prototype.indexOf.call(buffer,val,byteOffset)}else{return Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset)}}return arrayIndexOf(buffer,[val],byteOffset,encoding,dir)}throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){var indexSize=1;var arrLength=arr.length;var valLength=val.length;if(encoding!==undefined){encoding=String(encoding).toLowerCase();if(encoding==="ucs2"||encoding==="ucs-2"||encoding==="utf16le"||encoding==="utf-16le"){if(arr.length<2||val.length<2){return-1}indexSize=2;arrLength/=2;valLength/=2;byteOffset/=2}}function read(buf,i){if(indexSize===1){return buf[i]}else{return buf.readUInt16BE(i*indexSize)}}var i;if(dir){var foundIndex=-1;for(i=byteOffset;iarrLength)byteOffset=arrLength-valLength;for(i=byteOffset;i>=0;i--){var found=true;for(var j=0;jremaining){length=remaining}}var strLen=string.length;if(strLen%2!==0)throw new TypeError("Invalid hex string");if(length>strLen/2){length=strLen/2}for(var i=0;iremaining)length=remaining;if(string.length>0&&(length<0||offset<0)||offset>this.length){throw new RangeError("Attempt to write outside buffer bounds")}if(!encoding)encoding="utf8";var loweredCase=false;for(;;){switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"latin1":case"binary":return latin1Write(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length); default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase();loweredCase=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(buf,start,end){if(start===0&&end===buf.length){return base64.fromByteArray(buf)}else{return base64.fromByteArray(buf.slice(start,end))}}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);var res=[];var i=start;while(i239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end){var secondByte,thirdByte,fourthByte,tempCodePoint;switch(bytesPerSequence){case 1:if(firstByte<128){codePoint=firstByte}break;case 2:secondByte=buf[i+1];if((secondByte&192)===128){tempCodePoint=(firstByte&31)<<6|secondByte&63;if(tempCodePoint>127){codePoint=tempCodePoint}}break;case 3:secondByte=buf[i+1];thirdByte=buf[i+2];if((secondByte&192)===128&&(thirdByte&192)===128){tempCodePoint=(firstByte&15)<<12|(secondByte&63)<<6|thirdByte&63;if(tempCodePoint>2047&&(tempCodePoint<55296||tempCodePoint>57343)){codePoint=tempCodePoint}}break;case 4:secondByte=buf[i+1];thirdByte=buf[i+2];fourthByte=buf[i+3];if((secondByte&192)===128&&(thirdByte&192)===128&&(fourthByte&192)===128){tempCodePoint=(firstByte&15)<<18|(secondByte&63)<<12|(thirdByte&63)<<6|fourthByte&63;if(tempCodePoint>65535&&tempCodePoint<1114112){codePoint=tempCodePoint}}}}if(codePoint===null){codePoint=65533;bytesPerSequence=1}else if(codePoint>65535){codePoint-=65536;res.push(codePoint>>>10&1023|55296);codePoint=56320|codePoint&1023}res.push(codePoint);i+=bytesPerSequence}return decodeCodePointsArray(res)}var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH){return String.fromCharCode.apply(String,codePoints)}var res="";var i=0;while(ilen)end=len;var out="";for(var i=start;ilen){start=len}if(end<0){end+=len;if(end<0)end=0}else if(end>len){end=len}if(endlength)throw new RangeError("Trying to access beyond buffer length")}Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i0&&(mul*=256)){val+=this[offset+--byteLength]*mul}return val};Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);return this[offset]};Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]|this[offset+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);return this[offset]<<8|this[offset+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+this[offset+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]*16777216+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])};Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var val=this[offset];var mul=1;var i=0;while(++i=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset=offset|0;byteLength=byteLength|0;if(!noAssert)checkOffset(offset,byteLength,this.length);var i=byteLength;var mul=1;var val=this[offset+--i];while(i>0&&(mul*=256)){val+=this[offset+--i]*mul}mul*=128;if(val>=mul)val-=Math.pow(2,8*byteLength);return val};Buffer.prototype.readInt8=function readInt8(offset,noAssert){if(!noAssert)checkOffset(offset,1,this.length);if(!(this[offset]&128))return this[offset];return(255-this[offset]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){if(!noAssert)checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return val&32768?val|4294901760:val};Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]};Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){if(!noAssert)checkOffset(offset,4,this.length);return ieee754.read(this,offset,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){if(!noAssert)checkOffset(offset,8,this.length);return ieee754.read(this,offset,false,52,8)};function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||valuebuf.length)throw new RangeError("Index out of range")}Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;byteLength=byteLength|0;if(!noAssert){var maxBytes=Math.pow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var mul=1;var i=0;this[offset]=value&255;while(++i=0&&(mul*=256)){this[offset+i]=value/mul&255}return offset+byteLength};Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,255,0);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);this[offset]=value&255;return offset+1};function objectWriteUInt16(buf,value,offset,littleEndian){if(value<0)value=65535+value+1;for(var i=0,j=Math.min(buf.length-offset,2);i>>(littleEndian?i:1-i)*8}}Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,65535,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};function objectWriteUInt32(buf,value,offset,littleEndian){if(value<0)value=4294967295+value+1;for(var i=0,j=Math.min(buf.length-offset,4);i>>(littleEndian?i:3-i)*8&255}}Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset+3]=value>>>24;this[offset+2]=value>>>16;this[offset+1]=value>>>8;this[offset]=value&255}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,4294967295,0);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0;var mul=1;var sub=0;this[offset]=value&255;while(++i>0)-sub&255}return offset+byteLength};Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){value=+value;offset=offset|0;if(!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1;var mul=1;var sub=0;this[offset+i]=value&255;while(--i>=0&&(mul*=256)){if(value<0&&sub===0&&this[offset+i+1]!==0){sub=1}this[offset+i]=(value/mul>>0)-sub&255}return offset+byteLength};Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,1,127,-128);if(!Buffer.TYPED_ARRAY_SUPPORT)value=Math.floor(value);if(value<0)value=255+value+1;this[offset]=value&255;return offset+1};Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8}else{objectWriteUInt16(this,value,offset,true)}return offset+2};Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,2,32767,-32768);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>8;this[offset+1]=value&255}else{objectWriteUInt16(this,value,offset,false)}return offset+2};Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value&255;this[offset+1]=value>>>8;this[offset+2]=value>>>16;this[offset+3]=value>>>24}else{objectWriteUInt32(this,value,offset,true)}return offset+4};Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){value=+value;offset=offset|0;if(!noAssert)checkInt(this,value,offset,4,2147483647,-2147483648);if(value<0)value=4294967295+value+1;if(Buffer.TYPED_ARRAY_SUPPORT){this[offset]=value>>>24;this[offset+1]=value>>>16;this[offset+2]=value>>>8;this[offset+3]=value&255}else{objectWriteUInt32(this,value,offset,false)}return offset+4};function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(offset<0)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,4,3.4028234663852886e38,-3.4028234663852886e38)}ieee754.write(buf,value,offset,littleEndian,23,4);return offset+4}Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,true,noAssert)};Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,false,noAssert)};function writeDouble(buf,value,offset,littleEndian,noAssert){if(!noAssert){checkIEEE754(buf,value,offset,8,1.7976931348623157e308,-1.7976931348623157e308)}ieee754.write(buf,value,offset,littleEndian,52,8);return offset+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,true,noAssert)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,false,noAssert)};Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!start)start=0;if(!end&&end!==0)end=this.length;if(targetStart>=target.length)targetStart=target.length;if(!targetStart)targetStart=0;if(end>0&&end=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");if(end>this.length)end=this.length;if(target.length-targetStart=0;--i){target[i+targetStart]=this[i+start]}}else if(len<1e3||!Buffer.TYPED_ARRAY_SUPPORT){for(i=0;i>>0;end=end===undefined?this.length:end>>>0;if(!val)val=0;var i;if(typeof val==="number"){for(i=start;i55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){if((units-=3)>-1)bytes.push(239,191,189);continue}else if(i+1===length){if((units-=3)>-1)bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){if((units-=3)>-1)bytes.push(239,191,189);leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else if(leadSurrogate){if((units-=3)>-1)bytes.push(239,191,189)}leadSurrogate=null;if(codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,codePoint&63|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,codePoint&63|128)}else if(codePoint<1114112){if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,codePoint&63|128)}else{throw new Error("Invalid code point")}}return bytes}function asciiToBytes(str){var byteArray=[];for(var i=0;i>8;lo=c%256;byteArray.push(lo);byteArray.push(hi)}return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i=dst.length||i>=src.length)break;dst[i+offset]=src[i]}return i}function isnan(val){return val!==val}}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"base64-js":4,ieee754:18,isarray:9}],9:[function(_dereq_,module,exports){var toString={}.toString;module.exports=Array.isArray||function(arr){return toString.call(arr)=="[object Array]"}},{}],10:[function(_dereq_,module,exports){exports=module.exports=_dereq_("./debug");exports.log=log;exports.formatArgs=formatArgs;exports.save=save;exports.load=load;exports.useColors=useColors;exports.storage="undefined"!=typeof chrome&&"undefined"!=typeof chrome.storage?chrome.storage.local:localstorage();exports.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"];function useColors(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}exports.formatters.j=function(v){return JSON.stringify(v)};function formatArgs(){var args=arguments;var useColors=this.useColors;args[0]=(useColors?"%c":"")+this.namespace+(useColors?" %c":" ")+args[0]+(useColors?"%c ":" ");if(!useColors)return args;var c="color: "+this.color;args=[args[0],c,"color: inherit"].concat(Array.prototype.slice.call(args,1));var index=0;var lastC=0;args[0].replace(/%[a-z%]/g,function(match){if("%%"===match)return;index++;if("%c"===match){lastC=index}});args.splice(lastC,0,c);return args}function log(){return"object"===typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(namespaces){try{if(null==namespaces){exports.storage.removeItem("debug")}else{exports.storage.debug=namespaces}}catch(e){}}function load(){var r;try{r=exports.storage.debug}catch(e){}return r}exports.enable(load());function localstorage(){try{return window.localStorage}catch(e){}}},{"./debug":11}],11:[function(_dereq_,module,exports){exports=module.exports=debug;exports.coerce=coerce;exports.disable=disable;exports.enable=enable;exports.enabled=enabled;exports.names=[];exports.skips=[];exports.formatters={};var prevColor=0;function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(namespace){function disabled(){}disabled.enabled=false;function enabled(){var self=enabled;if(null==self.useColors)self.useColors=exports.useColors();if(null==self.color&&self.useColors)self.color=selectColor();var args=Array.prototype.slice.call(arguments);args[0]=exports.coerce(args[0]);if("string"!==typeof args[0]){args=["%o"].concat(args)}var index=0;args[0]=args[0].replace(/%([a-z%])/g,function(match,format){if(match==="%%")return match;index++;var formatter=exports.formatters[format];if("function"===typeof formatter){var val=args[index];match=formatter.call(self,val);args.splice(index,1);index--}return match});if("function"===typeof exports.formatArgs){args=exports.formatArgs.apply(self,args)}var logFn=enabled.log||exports.log||console.log.bind(console);logFn.apply(self,args)}enabled.enabled=true;var fn=exports.enabled(namespace)?enabled:disabled;fn.namespace=namespace;return fn}function enable(namespaces){exports.save(namespaces);var split=(namespaces||"").split(/[\s,]+/);var len=split.length;for(var i=0;i>0),o="attached",u="detached",a="extends",f="ADDITION",l="MODIFICATION",c="REMOVAL",h="DOMAttrModified",p="DOMContentLoaded",d="DOMSubtreeModified",v="<",m="=",g=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,y=["ANNOTATION-XML","COLOR-PROFILE","FONT-FACE","FONT-FACE-SRC","FONT-FACE-URI","FONT-FACE-FORMAT","FONT-FACE-NAME","MISSING-GLYPH"],b=[],w=[],E="",S=n.documentElement,x=b.indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},T=r.prototype,N=T.hasOwnProperty,C=T.isPrototypeOf,k=r.defineProperty,L=r.getOwnPropertyDescriptor,A=r.getOwnPropertyNames,O=r.getPrototypeOf,M=r.setPrototypeOf,_=!!r.__proto__,D=r.create||function yt(e){return e?(yt.prototype=e,new yt):this},P=M||(_?function(e,t){return e.__proto__=t,e}:A&&L?function(){function e(e,t){for(var n,r=A(t),i=0,s=r.length;i>1;var nBits=-7;var i=isLE?nBytes-1:0;var d=isLE?-1:1;var s=buffer[offset+i];i+=d;e=s&(1<<-nBits)-1;s>>=-nBits;nBits+=eLen;for(;nBits>0;e=e*256+buffer[offset+i],i+=d,nBits-=8){}m=e&(1<<-nBits)-1;e>>=-nBits;nBits+=mLen;for(;nBits>0;m=m*256+buffer[offset+i], i+=d,nBits-=8){}if(e===0){e=1-eBias}else if(e===eMax){return m?NaN:(s?-1:1)*Infinity}else{m=m+Math.pow(2,mLen);e=e-eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)};exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c;var eLen=nBytes*8-mLen-1;var eMax=(1<>1;var rt=mLen===23?Math.pow(2,-24)-Math.pow(2,-77):0;var i=isLE?0:nBytes-1;var d=isLE?1:-1;var s=value<0||value===0&&1/value<0?1:0;value=Math.abs(value);if(isNaN(value)||value===Infinity){m=isNaN(value)?1:0;e=eMax}else{e=Math.floor(Math.log(value)/Math.LN2);if(value*(c=Math.pow(2,-e))<1){e--;c*=2}if(e+eBias>=1){value+=rt/c}else{value+=rt*Math.pow(2,1-eBias)}if(value*c>=2){e++;c/=2}if(e+eBias>=eMax){m=0;e=eMax}else if(e+eBias>=1){m=(value*c-1)*Math.pow(2,mLen);e=e+eBias}else{m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen);e=0}}for(;mLen>=8;buffer[offset+i]=m&255,i+=d,m/=256,mLen-=8){}e=e<0;buffer[offset+i]=e&255,i+=d,e/=256,eLen-=8){}buffer[offset+i-d]|=s*128}},{}],19:[function(_dereq_,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],20:[function(_dereq_,module,exports){module.exports=function(obj){return obj!=null&&(isBuffer(obj)||isSlowBuffer(obj)||!!obj._isBuffer)};function isBuffer(obj){return!!obj.constructor&&typeof obj.constructor.isBuffer==="function"&&obj.constructor.isBuffer(obj)}function isSlowBuffer(obj){return typeof obj.readFloatLE==="function"&&typeof obj.slice==="function"&&isBuffer(obj.slice(0,0))}},{}],21:[function(_dereq_,module,exports){module.exports=isFunction;var toString=Object.prototype.toString;function isFunction(fn){var string=toString.call(fn);return string==="[object Function]"||typeof fn==="function"&&string!=="[object RegExp]"||typeof window!=="undefined"&&(fn===window.setTimeout||fn===window.alert||fn===window.confirm||fn===window.prompt)}},{}],22:[function(_dereq_,module,exports){"use strict";module.exports=function(x){var type=typeof x;return x!==null&&(type==="object"||type==="function")}},{}],23:[function(_dereq_,module,exports){var wordWrap=_dereq_("word-wrapper");var xtend=_dereq_("xtend");var number=_dereq_("as-number");var X_HEIGHTS=["x","e","a","o","n","s","r","c","u","m","v","w","z"];var M_WIDTHS=["m","w"];var CAP_HEIGHTS=["H","I","N","E","F","K","L","T","U","V","W","X","Y","Z"];var TAB_ID=" ".charCodeAt(0);var SPACE_ID=" ".charCodeAt(0);var ALIGN_LEFT=0,ALIGN_CENTER=1,ALIGN_RIGHT=2;module.exports=function createLayout(opt){return new TextLayout(opt)};function TextLayout(opt){this.glyphs=[];this._measure=this.computeMetrics.bind(this);this.update(opt)}TextLayout.prototype.update=function(opt){opt=xtend({measure:this._measure},opt);this._opt=opt;this._opt.tabSize=number(this._opt.tabSize,4);if(!opt.font)throw new Error("must provide a valid bitmap font");var glyphs=this.glyphs;var text=opt.text||"";var font=opt.font;this._setupSpaceGlyphs(font);var lines=wordWrap.lines(text,opt);var minWidth=opt.width||0;glyphs.length=0;var maxLineWidth=lines.reduce(function(prev,line){return Math.max(prev,line.width,minWidth)},0);var x=0;var y=0;var lineHeight=number(opt.lineHeight,font.common.lineHeight);var baseline=font.common.base;var descender=lineHeight-baseline;var letterSpacing=opt.letterSpacing||0;var height=lineHeight*lines.length-descender;var align=getAlignType(this._opt.align);y-=height;this._width=maxLineWidth;this._height=height;this._descender=lineHeight-baseline;this._baseline=baseline;this._xHeight=getXHeight(font);this._capHeight=getCapHeight(font);this._lineHeight=lineHeight;this._ascender=lineHeight-descender-this._xHeight;var self=this;lines.forEach(function(line,lineIndex){var start=line.start;var end=line.end;var lineWidth=line.width;var lastGlyph;for(var i=start;i=width||nextPen>=width)break;curPen=nextPen;curWidth=nextWidth;lastGlyph=glyph}count++}if(lastGlyph)curWidth+=lastGlyph.xoffset;return{start:start,end:start+count,width:curWidth}};["width","height","descender","ascender","xHeight","baseline","capHeight","lineHeight"].forEach(addGetter);function addGetter(name){Object.defineProperty(TextLayout.prototype,name,{get:wrapper(name),configurable:true})}function wrapper(name){return new Function(["return function "+name+"() {"," return this._"+name,"}"].join("\n"))()}function getGlyphById(font,id){if(!font.chars||font.chars.length===0)return null;var glyphIdx=findChar(font.chars,id);if(glyphIdx>=0)return font.chars[glyphIdx];return null}function getXHeight(font){for(var i=0;i=0)return font.chars[idx].height}return 0}function getMGlyph(font){for(var i=0;i=0)return font.chars[idx]}return 0}function getCapHeight(font){for(var i=0;i=0)return font.chars[idx].height}return 0}function getKerning(font,left,right){if(!font.kernings||font.kernings.length===0)return 0;var table=font.kernings;for(var i=0;i4&&equal(buf.slice(0,4),HEADER)}}).call(this,_dereq_("buffer").Buffer)},{buffer:8,"buffer-equal":7}],26:[function(_dereq_,module,exports){"use strict";var getOwnPropertySymbols=Object.getOwnPropertySymbols;var hasOwnProperty=Object.prototype.hasOwnProperty;var propIsEnumerable=Object.prototype.propertyIsEnumerable;function toObject(val){if(val===null||val===undefined){throw new TypeError("Object.assign cannot be called with null or undefined")}return Object(val)}function shouldUseNative(){try{if(!Object.assign){return false}var test1=new String("abc");test1[5]="de";if(Object.getOwnPropertyNames(test1)[0]==="5"){return false}var test2={};for(var i=0;i<10;i++){test2["_"+String.fromCharCode(i)]=i}var order2=Object.getOwnPropertyNames(test2).map(function(n){return test2[n]});if(order2.join("")!=="0123456789"){return false}var test3={};"abcdefghijklmnopqrst".split("").forEach(function(letter){test3[letter]=letter});if(Object.keys(Object.assign({},test3)).join("")!=="abcdefghijklmnopqrst"){return false}return true}catch(err){return false}}module.exports=shouldUseNative()?Object.assign:function(target,source){var from;var to=toObject(target);var symbols;for(var s=1;s3)throw new Error("Only supports BMFont Binary v3 (BMFont App v1.10)");var target={kernings:[],chars:[]};for(var b=0;b<5;b++)i+=readBlock(target,buf,i);return target};function readBlock(target,buf,i){if(i>buf.length-1)return 0;var blockID=buf.readUInt8(i++);var blockSize=buf.readInt32LE(i);i+=4;switch(blockID){case 1:target.info=readInfo(buf,i);break;case 2:target.common=readCommon(buf,i);break;case 3:target.pages=readPages(buf,i,blockSize);break;case 4:target.chars=readChars(buf,i,blockSize);break;case 5:target.kernings=readKernings(buf,i,blockSize);break}return 5+blockSize}function readInfo(buf,i){var info={};info.size=buf.readInt16LE(i);var bitField=buf.readUInt8(i+2);info.smooth=bitField>>7&1;info.unicode=bitField>>6&1;info.italic=bitField>>5&1;info.bold=bitField>>4&1;if(bitField>>3&1)info.fixedHeight=1;info.charset=buf.readUInt8(i+3)||"";info.stretchH=buf.readUInt16LE(i+4);info.aa=buf.readUInt8(i+6);info.padding=[buf.readInt8(i+7),buf.readInt8(i+8),buf.readInt8(i+9),buf.readInt8(i+10)];info.spacing=[buf.readInt8(i+11),buf.readInt8(i+12)];info.outline=buf.readUInt8(i+13);info.face=readStringNT(buf,i+14);return info}function readCommon(buf,i){var common={};common.lineHeight=buf.readUInt16LE(i);common.base=buf.readUInt16LE(i+2);common.scaleW=buf.readUInt16LE(i+4);common.scaleH=buf.readUInt16LE(i+6);common.pages=buf.readUInt16LE(i+8);var bitField=buf.readUInt8(i+10);common.packed=0;common.alphaChnl=buf.readUInt8(i+11);common.redChnl=buf.readUInt8(i+12);common.greenChnl=buf.readUInt8(i+13);common.blueChnl=buf.readUInt8(i+14);return common}function readPages(buf,i,size){var pages=[];var text=readNameNT(buf,i);var len=text.length+1;var count=size/len;for(var c=0;c element");var pages=pageRoot.getElementsByTagName("page");for(var i=0;i=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;var splitPath=function(filename){return splitPathRe.exec(filename).slice(1)};exports.resolve=function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:process.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=normalizeArray(filter(resolvedPath.split("/"),function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."};exports.normalize=function(path){var isAbsolute=exports.isAbsolute(path),trailingSlash=substr(path,-1)==="/";path=normalizeArray(filter(path.split("/"),function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path};exports.isAbsolute=function(path){return path.charAt(0)==="/"};exports.join=function(){var paths=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(paths,function(p,index){if(typeof p!=="string"){throw new TypeError("Arguments to path.join must be strings")}return p}).join("/"))};exports.relative=function(from,to){from=exports.resolve(from).substr(1);to=exports.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0});this.visibleGlyphs=glyphs;var positions=vertices.positions(glyphs);var uvs=vertices.uvs(glyphs,texWidth,texHeight,flipY);var indices=createIndices({clockwise:true,type:"uint16",count:glyphs.length});buffer.index(this,indices,1,"uint16");buffer.attr(this,"position",positions,2);buffer.attr(this,"uv",uvs,2);if(!opt.multipage&&"page"in this.attributes){this.removeAttribute("page")}else if(opt.multipage){var pages=vertices.pages(glyphs);buffer.attr(this,"page",pages,1)}};TextGeometry.prototype.computeBoundingSphere=function(){if(this.boundingSphere===null){this.boundingSphere=new THREE.Sphere}var positions=this.attributes.position.array;var itemSize=this.attributes.position.itemSize;if(!positions||!itemSize||positions.length<2){this.boundingSphere.radius=0;this.boundingSphere.center.set(0,0,0);return}utils.computeSphere(positions,this.boundingSphere);if(isNaN(this.boundingSphere.radius)){console.error("THREE.BufferGeometry.computeBoundingSphere(): "+"Computed radius is NaN. The "+'"position" attribute is likely to have NaN values.')}};TextGeometry.prototype.computeBoundingBox=function(){if(this.boundingBox===null){this.boundingBox=new THREE.Box3}var bbox=this.boundingBox;var positions=this.attributes.position.array;var itemSize=this.attributes.position.itemSize;if(!positions||!itemSize||positions.length<2){bbox.makeEmpty();return}utils.computeBox(positions,bbox)}},{"./lib/utils":38,"./lib/vertices":39,inherits:19,"layout-bmfont-text":23,"object-assign":26,"quad-indices":35,"three-buffer-vertex-data":40}],38:[function(_dereq_,module,exports){var itemSize=2;var box={min:[0,0],max:[0,0]};function bounds(positions){var count=positions.length/itemSize;box.min[0]=positions[0];box.min[1]=positions[1];box.max[0]=positions[0];box.max[1]=positions[1];for(var i=0;i0?1:+x}}if(Function.prototype.name===undefined){Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}})}if(Object.assign===undefined){(function(){Object.assign=function(target){"use strict";if(target===undefined||target===null){throw new TypeError("Cannot convert undefined or null to object")}var output=Object(target);for(var index=1;index>4;uuid[i]=chars[i===19?r&3|8:r]}}return uuid.join("")}}(),clamp:function(value,min,max){return Math.max(min,Math.min(max,value))},euclideanModulo:function(n,m){return(n%m+m)%m},mapLinear:function(x,a1,a2,b1,b2){return b1+(x-a1)*(b2-b1)/(a2-a1)},lerp:function(x,y,t){return(1-t)*x+t*y},smoothstep:function(x,min,max){if(x<=min)return 0;if(x>=max)return 1;x=(x-min)/(max-min);return x*x*(3-2*x)},smootherstep:function(x,min,max){if(x<=min)return 0;if(x>=max)return 1;x=(x-min)/(max-min);return x*x*x*(x*(x*6-15)+10)},randInt:function(low,high){return low+Math.floor(Math.random()*(high-low+1))},randFloat:function(low,high){return low+Math.random()*(high-low)},randFloatSpread:function(range){return range*(.5-Math.random())},degToRad:function(degrees){return degrees*_Math.DEG2RAD},radToDeg:function(radians){return radians*_Math.RAD2DEG},isPowerOfTwo:function(value){return(value&value-1)===0&&value!==0},nearestPowerOfTwo:function(value){return Math.pow(2,Math.round(Math.log(value)/Math.LN2))},nextPowerOfTwo:function(value){value--;value|=value>>1;value|=value>>2;value|=value>>4;value|=value>>8;value|=value>>16;value++;return value}};function Vector2(x,y){this.x=x||0;this.y=y||0}Object.defineProperties(Vector2.prototype,{width:{get:function(){return this.x},set:function(value){this.x=value}},height:{get:function(){return this.y},set:function(value){this.y=value}}});Object.assign(Vector2.prototype,{isVector2:true,set:function(x,y){this.x=x;this.y=y;return this},setScalar:function(scalar){this.x=scalar;this.y=scalar;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(v){this.x=v.x;this.y=v.y;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;return this},addScalar:function(s){this.x+=s;this.y+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;return this},subScalar:function(s){this.x-=s;this.y-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(v){this.x*=v.x;this.y*=v.y;return this},multiplyScalar:function(scalar){this.x*=scalar;this.y*=scalar;return this},divide:function(v){this.x/=v.x;this.y/=v.y;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));return this},clampScalar:function(){var min=new Vector2;var max=new Vector2;return function clampScalar(minVal,maxVal){min.set(minVal,minVal);max.set(maxVal,maxVal);return this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(v){return this.x*v.x+this.y*v.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var angle=Math.atan2(this.y,this.x);if(angle<0)angle+=2*Math.PI;return angle},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y;return dx*dx+dy*dy},distanceToManhattan:function(v){return Math.abs(this.x-v.x)+Math.abs(this.y-v.y)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;return this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},equals:function(v){return v.x===this.x&&v.y===this.y},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;return array},fromBufferAttribute:function(attribute,index,offset){if(offset!==undefined){console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().")}this.x=attribute.getX(index);this.y=attribute.getY(index);return this},rotateAround:function(center,angle){var c=Math.cos(angle),s=Math.sin(angle);var x=this.x-center.x;var y=this.y-center.y;this.x=x*c-y*s+center.x;this.y=x*s+y*c+center.y;return this}});var textureId=0;function Texture(image,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding){Object.defineProperty(this,"id",{value:textureId++});this.uuid=_Math.generateUUID();this.name="";this.image=image!==undefined?image:Texture.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=mapping!==undefined?mapping:Texture.DEFAULT_MAPPING;this.wrapS=wrapS!==undefined?wrapS:ClampToEdgeWrapping;this.wrapT=wrapT!==undefined?wrapT:ClampToEdgeWrapping;this.magFilter=magFilter!==undefined?magFilter:LinearFilter;this.minFilter=minFilter!==undefined?minFilter:LinearMipMapLinearFilter;this.anisotropy=anisotropy!==undefined?anisotropy:1;this.format=format!==undefined?format:RGBAFormat;this.type=type!==undefined?type:UnsignedByteType;this.offset=new Vector2(0,0);this.repeat=new Vector2(1,1);this.generateMipmaps=true;this.premultiplyAlpha=false;this.flipY=true;this.unpackAlignment=4;this.encoding=encoding!==undefined?encoding:LinearEncoding;this.version=0;this.onUpdate=null}Texture.DEFAULT_IMAGE=undefined;Texture.DEFAULT_MAPPING=UVMapping;Object.defineProperty(Texture.prototype,"needsUpdate",{set:function(value){if(value===true)this.version++}});Object.assign(Texture.prototype,EventDispatcher.prototype,{constructor:Texture,isTexture:true,clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.name=source.name;this.image=source.image;this.mipmaps=source.mipmaps.slice(0);this.mapping=source.mapping;this.wrapS=source.wrapS;this.wrapT=source.wrapT;this.magFilter=source.magFilter;this.minFilter=source.minFilter;this.anisotropy=source.anisotropy;this.format=source.format;this.type=source.type;this.offset.copy(source.offset);this.repeat.copy(source.repeat);this.generateMipmaps=source.generateMipmaps;this.premultiplyAlpha=source.premultiplyAlpha;this.flipY=source.flipY;this.unpackAlignment=source.unpackAlignment;this.encoding=source.encoding;return this},toJSON:function(meta){if(meta.textures[this.uuid]!==undefined){return meta.textures[this.uuid]}function getDataURL(image){var canvas;if(image.toDataURL!==undefined){canvas=image}else{canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=image.width;canvas.height=image.height;canvas.getContext("2d").drawImage(image,0,0,image.width,image.height)}if(canvas.width>2048||canvas.height>2048){return canvas.toDataURL("image/jpeg",.6)}else{return canvas.toDataURL("image/png")}}var output={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(this.image!==undefined){var image=this.image;if(image.uuid===undefined){image.uuid=_Math.generateUUID()}if(meta.images[image.uuid]===undefined){meta.images[image.uuid]={uuid:image.uuid,url:getDataURL(image)}}output.image=image.uuid}meta.textures[this.uuid]=output;return output},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(uv){if(this.mapping!==UVMapping)return;uv.multiply(this.repeat);uv.add(this.offset);if(uv.x<0||uv.x>1){switch(this.wrapS){case RepeatWrapping:uv.x=uv.x-Math.floor(uv.x);break;case ClampToEdgeWrapping:uv.x=uv.x<0?0:1;break;case MirroredRepeatWrapping:if(Math.abs(Math.floor(uv.x)%2)===1){uv.x=Math.ceil(uv.x)-uv.x}else{uv.x=uv.x-Math.floor(uv.x)}break}}if(uv.y<0||uv.y>1){switch(this.wrapT){case RepeatWrapping:uv.y=uv.y-Math.floor(uv.y);break;case ClampToEdgeWrapping:uv.y=uv.y<0?0:1;break;case MirroredRepeatWrapping:if(Math.abs(Math.floor(uv.y)%2)===1){uv.y=Math.ceil(uv.y)-uv.y}else{uv.y=uv.y-Math.floor(uv.y)}break}}if(this.flipY){uv.y=1-uv.y}}});function Vector4(x,y,z,w){this.x=x||0;this.y=y||0;this.z=z||0;this.w=w!==undefined?w:1}Object.assign(Vector4.prototype,{isVector4:true,set:function(x,y,z,w){this.x=x;this.y=y;this.z=z;this.w=w;return this},setScalar:function(scalar){this.x=scalar;this.y=scalar;this.z=scalar;this.w=scalar;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setZ:function(z){this.z=z;return this},setW:function(w){this.w=w;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;case 3:this.w=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(v){this.x=v.x;this.y=v.y;this.z=v.z;this.w=v.w!==undefined?v.w:1;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;this.z+=v.z;this.w+=v.w;return this},addScalar:function(s){this.x+=s;this.y+=s;this.z+=s;this.w+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;this.z+=v.z*s;this.w+=v.w*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;this.z-=v.z;this.w-=v.w;return this},subScalar:function(s){this.x-=s;this.y-=s;this.z-=s;this.w-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(scalar){this.x*=scalar;this.y*=scalar;this.z*=scalar;this.w*=scalar;return this},applyMatrix4:function(m){var x=this.x,y=this.y,z=this.z,w=this.w;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z+e[12]*w;this.y=e[1]*x+e[5]*y+e[9]*z+e[13]*w;this.z=e[2]*x+e[6]*y+e[10]*z+e[14]*w;this.w=e[3]*x+e[7]*y+e[11]*z+e[15]*w;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},setAxisAngleFromQuaternion:function(q){this.w=2*Math.acos(q.w);var s=Math.sqrt(1-q.w*q.w);if(s<1e-4){this.x=1;this.y=0;this.z=0}else{this.x=q.x/s;this.y=q.y/s;this.z=q.z/s}return this},setAxisAngleFromRotationMatrix:function(m){var angle,x,y,z,epsilon=.01,epsilon2=.1,te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10];if(Math.abs(m12-m21)yy&&xx>zz){if(xxzz){if(yy=0?1:-1,sqrSin=1-cos*cos;if(sqrSin>Number.EPSILON){var sin=Math.sqrt(sqrSin),len=Math.atan2(sin,cos*dir);s=Math.sin(s*len)/sin;t=Math.sin(t*len)/sin}var tDir=t*dir;x0=x0*s+x1*tDir;y0=y0*s+y1*tDir;z0=z0*s+z1*tDir;w0=w0*s+w1*tDir;if(s===1-t){var f=1/Math.sqrt(x0*x0+y0*y0+z0*z0+w0*w0);x0*=f;y0*=f;z0*=f;w0*=f}}dst[dstOffset]=x0;dst[dstOffset+1]=y0;dst[dstOffset+2]=z0;dst[dstOffset+3]=w0}});Object.defineProperties(Quaternion.prototype,{x:{get:function(){return this._x},set:function(value){this._x=value;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(value){this._y=value;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(value){this._z=value;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(value){this._w=value;this.onChangeCallback()}}});Object.assign(Quaternion.prototype,{set:function(x,y,z,w){this._x=x;this._y=y;this._z=z;this._w=w;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(quaternion){this._x=quaternion.x;this._y=quaternion.y;this._z=quaternion.z;this._w=quaternion.w;this.onChangeCallback();return this},setFromEuler:function(euler,update){if(!(euler&&euler.isEuler)){throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.")}var x=euler._x,y=euler._y,z=euler._z,order=euler.order;var cos=Math.cos;var sin=Math.sin;var c1=cos(x/2);var c2=cos(y/2);var c3=cos(z/2);var s1=sin(x/2);var s2=sin(y/2);var s3=sin(z/2);if(order==="XYZ"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="YXZ"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}else if(order==="ZXY"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="ZYX"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}else if(order==="YZX"){this._x=s1*c2*c3+c1*s2*s3;this._y=c1*s2*c3+s1*c2*s3;this._z=c1*c2*s3-s1*s2*c3;this._w=c1*c2*c3-s1*s2*s3}else if(order==="XZY"){this._x=s1*c2*c3-c1*s2*s3;this._y=c1*s2*c3-s1*c2*s3;this._z=c1*c2*s3+s1*s2*c3;this._w=c1*c2*c3+s1*s2*s3}if(update!==false)this.onChangeCallback();return this},setFromAxisAngle:function(axis,angle){var halfAngle=angle/2,s=Math.sin(halfAngle);this._x=axis.x*s;this._y=axis.y*s;this._z=axis.z*s;this._w=Math.cos(halfAngle);this.onChangeCallback();return this},setFromRotationMatrix:function(m){var te=m.elements,m11=te[0],m12=te[4],m13=te[8],m21=te[1],m22=te[5],m23=te[9],m31=te[2],m32=te[6],m33=te[10],trace=m11+m22+m33,s;if(trace>0){s=.5/Math.sqrt(trace+1);this._w=.25/s;this._x=(m32-m23)*s;this._y=(m13-m31)*s;this._z=(m21-m12)*s}else if(m11>m22&&m11>m33){s=2*Math.sqrt(1+m11-m22-m33);this._w=(m32-m23)/s;this._x=.25*s;this._y=(m12+m21)/s;this._z=(m13+m31)/s}else if(m22>m33){s=2*Math.sqrt(1+m22-m11-m33);this._w=(m13-m31)/s;this._x=(m12+m21)/s;this._y=.25*s;this._z=(m23+m32)/s}else{s=2*Math.sqrt(1+m33-m11-m22);this._w=(m21-m12)/s;this._x=(m13+m31)/s;this._y=(m23+m32)/s;this._z=.25*s}this.onChangeCallback();return this},setFromUnitVectors:function(){var v1=new Vector3;var r;var EPS=1e-6;return function setFromUnitVectors(vFrom,vTo){if(v1===undefined)v1=new Vector3;r=vFrom.dot(vTo)+1;if(rMath.abs(vFrom.z)){v1.set(-vFrom.y,vFrom.x,0)}else{v1.set(0,-vFrom.z,vFrom.y)}}else{v1.crossVectors(vFrom,vTo)}this._x=v1.x;this._y=v1.y;this._z=v1.z;this._w=r;return this.normalize()}}(),inverse:function(){return this.conjugate().normalize()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(v){return this._x*v._x+this._y*v._y+this._z*v._z+this._w*v._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var l=this.length();if(l===0){this._x=0;this._y=0;this._z=0;this._w=1}else{l=1/l;this._x=this._x*l;this._y=this._y*l;this._z=this._z*l;this._w=this._w*l}this.onChangeCallback();return this},multiply:function(q,p){if(p!==undefined){console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."); return this.multiplyQuaternions(q,p)}return this.multiplyQuaternions(this,q)},premultiply:function(q){return this.multiplyQuaternions(q,this)},multiplyQuaternions:function(a,b){var qax=a._x,qay=a._y,qaz=a._z,qaw=a._w;var qbx=b._x,qby=b._y,qbz=b._z,qbw=b._w;this._x=qax*qbw+qaw*qbx+qay*qbz-qaz*qby;this._y=qay*qbw+qaw*qby+qaz*qbx-qax*qbz;this._z=qaz*qbw+qaw*qbz+qax*qby-qay*qbx;this._w=qaw*qbw-qax*qbx-qay*qby-qaz*qbz;this.onChangeCallback();return this},slerp:function(qb,t){if(t===0)return this;if(t===1)return this.copy(qb);var x=this._x,y=this._y,z=this._z,w=this._w;var cosHalfTheta=w*qb._w+x*qb._x+y*qb._y+z*qb._z;if(cosHalfTheta<0){this._w=-qb._w;this._x=-qb._x;this._y=-qb._y;this._z=-qb._z;cosHalfTheta=-cosHalfTheta}else{this.copy(qb)}if(cosHalfTheta>=1){this._w=w;this._x=x;this._y=y;this._z=z;return this}var sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){this._w=.5*(w+this._w);this._x=.5*(x+this._x);this._y=.5*(y+this._y);this._z=.5*(z+this._z);return this}var halfTheta=Math.atan2(sinHalfTheta,cosHalfTheta);var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;this._w=w*ratioA+this._w*ratioB;this._x=x*ratioA+this._x*ratioB;this._y=y*ratioA+this._y*ratioB;this._z=z*ratioA+this._z*ratioB;this.onChangeCallback();return this},equals:function(quaternion){return quaternion._x===this._x&&quaternion._y===this._y&&quaternion._z===this._z&&quaternion._w===this._w},fromArray:function(array,offset){if(offset===undefined)offset=0;this._x=array[offset];this._y=array[offset+1];this._z=array[offset+2];this._w=array[offset+3];this.onChangeCallback();return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this._x;array[offset+1]=this._y;array[offset+2]=this._z;array[offset+3]=this._w;return array},onChange:function(callback){this.onChangeCallback=callback;return this},onChangeCallback:function(){}});function Vector3(x,y,z){this.x=x||0;this.y=y||0;this.z=z||0}Object.assign(Vector3.prototype,{isVector3:true,set:function(x,y,z){this.x=x;this.y=y;this.z=z;return this},setScalar:function(scalar){this.x=scalar;this.y=scalar;this.z=scalar;return this},setX:function(x){this.x=x;return this},setY:function(y){this.y=y;return this},setZ:function(z){this.z=z;return this},setComponent:function(index,value){switch(index){case 0:this.x=value;break;case 1:this.y=value;break;case 2:this.z=value;break;default:throw new Error("index is out of range: "+index)}return this},getComponent:function(index){switch(index){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+index)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(v){this.x=v.x;this.y=v.y;this.z=v.z;return this},add:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.");return this.addVectors(v,w)}this.x+=v.x;this.y+=v.y;this.z+=v.z;return this},addScalar:function(s){this.x+=s;this.y+=s;this.z+=s;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(v,s){this.x+=v.x*s;this.y+=v.y*s;this.z+=v.z*s;return this},sub:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.");return this.subVectors(v,w)}this.x-=v.x;this.y-=v.y;this.z-=v.z;return this},subScalar:function(s){this.x-=s;this.y-=s;this.z-=s;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.");return this.multiplyVectors(v,w)}this.x*=v.x;this.y*=v.y;this.z*=v.z;return this},multiplyScalar:function(scalar){this.x*=scalar;this.y*=scalar;this.z*=scalar;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(){var quaternion=new Quaternion;return function applyEuler(euler){if(!(euler&&euler.isEuler)){console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.")}return this.applyQuaternion(quaternion.setFromEuler(euler))}}(),applyAxisAngle:function(){var quaternion=new Quaternion;return function applyAxisAngle(axis,angle){return this.applyQuaternion(quaternion.setFromAxisAngle(axis,angle))}}(),applyMatrix3:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[3]*y+e[6]*z;this.y=e[1]*x+e[4]*y+e[7]*z;this.z=e[2]*x+e[5]*y+e[8]*z;return this},applyMatrix4:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;var w=1/(e[3]*x+e[7]*y+e[11]*z+e[15]);this.x=(e[0]*x+e[4]*y+e[8]*z+e[12])*w;this.y=(e[1]*x+e[5]*y+e[9]*z+e[13])*w;this.z=(e[2]*x+e[6]*y+e[10]*z+e[14])*w;return this},applyQuaternion:function(q){var x=this.x,y=this.y,z=this.z;var qx=q.x,qy=q.y,qz=q.z,qw=q.w;var ix=qw*x+qy*z-qz*y;var iy=qw*y+qz*x-qx*z;var iz=qw*z+qx*y-qy*x;var iw=-qx*x-qy*y-qz*z;this.x=ix*qw+iw*-qx+iy*-qz-iz*-qy;this.y=iy*qw+iw*-qy+iz*-qx-ix*-qz;this.z=iz*qw+iw*-qz+ix*-qy-iy*-qx;return this},project:function(){var matrix=new Matrix4;return function project(camera){matrix.multiplyMatrices(camera.projectionMatrix,matrix.getInverse(camera.matrixWorld));return this.applyMatrix4(matrix)}}(),unproject:function(){var matrix=new Matrix4;return function unproject(camera){matrix.multiplyMatrices(camera.matrixWorld,matrix.getInverse(camera.projectionMatrix));return this.applyMatrix4(matrix)}}(),transformDirection:function(m){var x=this.x,y=this.y,z=this.z;var e=m.elements;this.x=e[0]*x+e[4]*y+e[8]*z;this.y=e[1]*x+e[5]*y+e[9]*z;this.z=e[2]*x+e[6]*y+e[10]*z;return this.normalize()},divide:function(v){this.x/=v.x;this.y/=v.y;this.z/=v.z;return this},divideScalar:function(scalar){return this.multiplyScalar(1/scalar)},min:function(v){this.x=Math.min(this.x,v.x);this.y=Math.min(this.y,v.y);this.z=Math.min(this.z,v.z);return this},max:function(v){this.x=Math.max(this.x,v.x);this.y=Math.max(this.y,v.y);this.z=Math.max(this.z,v.z);return this},clamp:function(min,max){this.x=Math.max(min.x,Math.min(max.x,this.x));this.y=Math.max(min.y,Math.min(max.y,this.y));this.z=Math.max(min.z,Math.min(max.z,this.z));return this},clampScalar:function(){var min=new Vector3;var max=new Vector3;return function clampScalar(minVal,maxVal){min.set(minVal,minVal,minVal);max.set(maxVal,maxVal,maxVal);return this.clamp(min,max)}}(),clampLength:function(min,max){var length=this.length();return this.divideScalar(length||1).multiplyScalar(Math.max(min,Math.min(max,length)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x);this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y);this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(v){return this.x*v.x+this.y*v.y+this.z*v.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(length){return this.normalize().multiplyScalar(length)},lerp:function(v,alpha){this.x+=(v.x-this.x)*alpha;this.y+=(v.y-this.y)*alpha;this.z+=(v.z-this.z)*alpha;return this},lerpVectors:function(v1,v2,alpha){return this.subVectors(v2,v1).multiplyScalar(alpha).add(v1)},cross:function(v,w){if(w!==undefined){console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.");return this.crossVectors(v,w)}var x=this.x,y=this.y,z=this.z;this.x=y*v.z-z*v.y;this.y=z*v.x-x*v.z;this.z=x*v.y-y*v.x;return this},crossVectors:function(a,b){var ax=a.x,ay=a.y,az=a.z;var bx=b.x,by=b.y,bz=b.z;this.x=ay*bz-az*by;this.y=az*bx-ax*bz;this.z=ax*by-ay*bx;return this},projectOnVector:function(vector){var scalar=vector.dot(this)/vector.lengthSq();return this.copy(vector).multiplyScalar(scalar)},projectOnPlane:function(){var v1=new Vector3;return function projectOnPlane(planeNormal){v1.copy(this).projectOnVector(planeNormal);return this.sub(v1)}}(),reflect:function(){var v1=new Vector3;return function reflect(normal){return this.sub(v1.copy(normal).multiplyScalar(2*this.dot(normal)))}}(),angleTo:function(v){var theta=this.dot(v)/Math.sqrt(this.lengthSq()*v.lengthSq());return Math.acos(_Math.clamp(theta,-1,1))},distanceTo:function(v){return Math.sqrt(this.distanceToSquared(v))},distanceToSquared:function(v){var dx=this.x-v.x,dy=this.y-v.y,dz=this.z-v.z;return dx*dx+dy*dy+dz*dz},distanceToManhattan:function(v){return Math.abs(this.x-v.x)+Math.abs(this.y-v.y)+Math.abs(this.z-v.z)},setFromSpherical:function(s){var sinPhiRadius=Math.sin(s.phi)*s.radius;this.x=sinPhiRadius*Math.sin(s.theta);this.y=Math.cos(s.phi)*s.radius;this.z=sinPhiRadius*Math.cos(s.theta);return this},setFromCylindrical:function(c){this.x=c.radius*Math.sin(c.theta);this.y=c.y;this.z=c.radius*Math.cos(c.theta);return this},setFromMatrixPosition:function(m){var e=m.elements;this.x=e[12];this.y=e[13];this.z=e[14];return this},setFromMatrixScale:function(m){var sx=this.setFromMatrixColumn(m,0).length();var sy=this.setFromMatrixColumn(m,1).length();var sz=this.setFromMatrixColumn(m,2).length();this.x=sx;this.y=sy;this.z=sz;return this},setFromMatrixColumn:function(m,index){return this.fromArray(m.elements,index*4)},equals:function(v){return v.x===this.x&&v.y===this.y&&v.z===this.z},fromArray:function(array,offset){if(offset===undefined)offset=0;this.x=array[offset];this.y=array[offset+1];this.z=array[offset+2];return this},toArray:function(array,offset){if(array===undefined)array=[];if(offset===undefined)offset=0;array[offset]=this.x;array[offset+1]=this.y;array[offset+2]=this.z;return array},fromBufferAttribute:function(attribute,index,offset){if(offset!==undefined){console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().")}this.x=attribute.getX(index);this.y=attribute.getY(index);this.z=attribute.getZ(index);return this}});function Matrix4(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];if(arguments.length>0){console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}}Object.assign(Matrix4.prototype,{isMatrix4:true,set:function(n11,n12,n13,n14,n21,n22,n23,n24,n31,n32,n33,n34,n41,n42,n43,n44){var te=this.elements;te[0]=n11;te[4]=n12;te[8]=n13;te[12]=n14;te[1]=n21;te[5]=n22;te[9]=n23;te[13]=n24;te[2]=n31;te[6]=n32;te[10]=n33;te[14]=n34;te[3]=n41;te[7]=n42;te[11]=n43;te[15]=n44;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new Matrix4).fromArray(this.elements)},copy:function(m){var te=this.elements;var me=m.elements;te[0]=me[0];te[1]=me[1];te[2]=me[2];te[3]=me[3];te[4]=me[4];te[5]=me[5];te[6]=me[6];te[7]=me[7];te[8]=me[8];te[9]=me[9];te[10]=me[10];te[11]=me[11];te[12]=me[12];te[13]=me[13];te[14]=me[14];te[15]=me[15];return this},copyPosition:function(m){var te=this.elements,me=m.elements;te[12]=me[12];te[13]=me[13];te[14]=me[14];return this},extractBasis:function(xAxis,yAxis,zAxis){xAxis.setFromMatrixColumn(this,0);yAxis.setFromMatrixColumn(this,1);zAxis.setFromMatrixColumn(this,2);return this},makeBasis:function(xAxis,yAxis,zAxis){this.set(xAxis.x,yAxis.x,zAxis.x,0,xAxis.y,yAxis.y,zAxis.y,0,xAxis.z,yAxis.z,zAxis.z,0,0,0,0,1);return this},extractRotation:function(){var v1=new Vector3;return function extractRotation(m){var te=this.elements;var me=m.elements;var scaleX=1/v1.setFromMatrixColumn(m,0).length();var scaleY=1/v1.setFromMatrixColumn(m,1).length();var scaleZ=1/v1.setFromMatrixColumn(m,2).length();te[0]=me[0]*scaleX;te[1]=me[1]*scaleX;te[2]=me[2]*scaleX;te[4]=me[4]*scaleY;te[5]=me[5]*scaleY;te[6]=me[6]*scaleY;te[8]=me[8]*scaleZ;te[9]=me[9]*scaleZ;te[10]=me[10]*scaleZ;return this}}(),makeRotationFromEuler:function(euler){if(!(euler&&euler.isEuler)){console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.")}var te=this.elements;var x=euler.x,y=euler.y,z=euler.z;var a=Math.cos(x),b=Math.sin(x);var c=Math.cos(y),d=Math.sin(y);var e=Math.cos(z),f=Math.sin(z);if(euler.order==="XYZ"){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=-c*f;te[8]=d;te[1]=af+be*d;te[5]=ae-bf*d;te[9]=-b*c;te[2]=bf-ae*d;te[6]=be+af*d;te[10]=a*c}else if(euler.order==="YXZ"){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce+df*b;te[4]=de*b-cf;te[8]=a*d;te[1]=a*f;te[5]=a*e;te[9]=-b;te[2]=cf*b-de;te[6]=df+ce*b;te[10]=a*c}else if(euler.order==="ZXY"){var ce=c*e,cf=c*f,de=d*e,df=d*f;te[0]=ce-df*b;te[4]=-a*f;te[8]=de+cf*b;te[1]=cf+de*b;te[5]=a*e;te[9]=df-ce*b;te[2]=-a*d;te[6]=b;te[10]=a*c}else if(euler.order==="ZYX"){var ae=a*e,af=a*f,be=b*e,bf=b*f;te[0]=c*e;te[4]=be*d-af;te[8]=ae*d+bf;te[1]=c*f;te[5]=bf*d+ae;te[9]=af*d-be;te[2]=-d;te[6]=b*c;te[10]=a*c}else if(euler.order==="YZX"){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=bd-ac*f;te[8]=bc*f+ad;te[1]=f;te[5]=a*e;te[9]=-b*e;te[2]=-d*e;te[6]=ad*f+bc;te[10]=ac-bd*f}else if(euler.order==="XZY"){var ac=a*c,ad=a*d,bc=b*c,bd=b*d;te[0]=c*e;te[4]=-f;te[8]=d*e;te[1]=ac*f+bd;te[5]=a*e;te[9]=ad*f-bc;te[2]=bc*f-ad;te[6]=b*e;te[10]=bd*f+ac}te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this},makeRotationFromQuaternion:function(q){var te=this.elements;var x=q._x,y=q._y,z=q._z,w=q._w;var x2=x+x,y2=y+y,z2=z+z;var xx=x*x2,xy=x*y2,xz=x*z2;var yy=y*y2,yz=y*z2,zz=z*z2;var wx=w*x2,wy=w*y2,wz=w*z2;te[0]=1-(yy+zz);te[4]=xy-wz;te[8]=xz+wy;te[1]=xy+wz;te[5]=1-(xx+zz);te[9]=yz-wx;te[2]=xz-wy;te[6]=yz+wx;te[10]=1-(xx+yy);te[3]=0;te[7]=0;te[11]=0;te[12]=0;te[13]=0;te[14]=0;te[15]=1;return this},lookAt:function(){var x=new Vector3;var y=new Vector3;var z=new Vector3;return function lookAt(eye,target,up){var te=this.elements;z.subVectors(eye,target);if(z.lengthSq()===0){z.z=1}z.normalize();x.crossVectors(up,z);if(x.lengthSq()===0){if(Math.abs(up.z)===1){z.x+=1e-4}else{z.z+=1e-4}z.normalize();x.crossVectors(up,z)}x.normalize();y.crossVectors(z,x);te[0]=x.x;te[4]=y.x;te[8]=z.x;te[1]=x.y;te[5]=y.y;te[9]=z.y;te[2]=x.z;te[6]=y.z;te[10]=z.z;return this}}(),multiply:function(m,n){if(n!==undefined){console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.");return this.multiplyMatrices(m,n)}return this.multiplyMatrices(this,m)},premultiply:function(m){return this.multiplyMatrices(m,this)},multiplyMatrices:function(a,b){var ae=a.elements;var be=b.elements;var te=this.elements;var a11=ae[0],a12=ae[4],a13=ae[8],a14=ae[12];var a21=ae[1],a22=ae[5],a23=ae[9],a24=ae[13];var a31=ae[2],a32=ae[6],a33=ae[10],a34=ae[14];var a41=ae[3],a42=ae[7],a43=ae[11],a44=ae[15];var b11=be[0],b12=be[4],b13=be[8],b14=be[12];var b21=be[1],b22=be[5],b23=be[9],b24=be[13];var b31=be[2],b32=be[6],b33=be[10],b34=be[14];var b41=be[3],b42=be[7],b43=be[11],b44=be[15];te[0]=a11*b11+a12*b21+a13*b31+a14*b41;te[4]=a11*b12+a12*b22+a13*b32+a14*b42;te[8]=a11*b13+a12*b23+a13*b33+a14*b43;te[12]=a11*b14+a12*b24+a13*b34+a14*b44;te[1]=a21*b11+a22*b21+a23*b31+a24*b41;te[5]=a21*b12+a22*b22+a23*b32+a24*b42;te[9]=a21*b13+a22*b23+a23*b33+a24*b43;te[13]=a21*b14+a22*b24+a23*b34+a24*b44;te[2]=a31*b11+a32*b21+a33*b31+a34*b41;te[6]=a31*b12+a32*b22+a33*b32+a34*b42;te[10]=a31*b13+a32*b23+a33*b33+a34*b43;te[14]=a31*b14+a32*b24+a33*b34+a34*b44;te[3]=a41*b11+a42*b21+a43*b31+a44*b41;te[7]=a41*b12+a42*b22+a43*b32+a44*b42;te[11]=a41*b13+a42*b23+a43*b33+a44*b43;te[15]=a41*b14+a42*b24+a43*b34+a44*b44;return this},multiplyScalar:function(s){var te=this.elements;te[0]*=s;te[4]*=s;te[8]*=s;te[12]*=s;te[1]*=s;te[5]*=s;te[9]*=s;te[13]*=s;te[2]*=s;te[6]*=s;te[10]*=s;te[14]*=s;te[3]*=s;te[7]*=s;te[11]*=s;te[15]*=s;return this},applyToBufferAttribute:function(){var v1=new Vector3;return function applyToBufferAttribute(attribute){for(var i=0,l=attribute.count;i0)return array;var n=nBlocks*blockSize,r=arrayCacheF32[n];if(r===undefined){r=new Float32Array(n);arrayCacheF32[n]=r}if(nBlocks!==0){firstElem.toArray(r,0);for(var i=1,offset=0;i!==nBlocks;++i){offset+=blockSize;array[i].toArray(r,offset)}}return r}function allocTexUnits(renderer,n){var r=arrayCacheI32[n];if(r===undefined){r=new Int32Array(n);arrayCacheI32[n]=r}for(var i=0;i!==n;++i)r[i]=renderer.allocTextureUnit();return r}function setValue1f(gl,v){gl.uniform1f(this.addr,v)}function setValue1i(gl,v){gl.uniform1i(this.addr,v)}function setValue2fv(gl,v){if(v.x===undefined)gl.uniform2fv(this.addr,v);else gl.uniform2f(this.addr,v.x,v.y)}function setValue3fv(gl,v){if(v.x!==undefined)gl.uniform3f(this.addr,v.x,v.y,v.z);else if(v.r!==undefined)gl.uniform3f(this.addr,v.r,v.g,v.b);else gl.uniform3fv(this.addr,v)}function setValue4fv(gl,v){if(v.x===undefined)gl.uniform4fv(this.addr,v);else gl.uniform4f(this.addr,v.x,v.y,v.z,v.w)}function setValue2fm(gl,v){gl.uniformMatrix2fv(this.addr,false,v.elements||v)}function setValue3fm(gl,v){if(v.elements===undefined){gl.uniformMatrix3fv(this.addr,false,v)}else{mat3array.set(v.elements);gl.uniformMatrix3fv(this.addr,false,mat3array)}}function setValue4fm(gl,v){if(v.elements===undefined){gl.uniformMatrix4fv(this.addr,false,v)}else{mat4array.set(v.elements);gl.uniformMatrix4fv(this.addr,false,mat4array)}}function setValueT1(gl,v,renderer){var unit=renderer.allocTextureUnit();gl.uniform1i(this.addr,unit);renderer.setTexture2D(v||emptyTexture,unit)}function setValueT6(gl,v,renderer){var unit=renderer.allocTextureUnit();gl.uniform1i(this.addr,unit);renderer.setTextureCube(v||emptyCubeTexture,unit)}function setValue2iv(gl,v){gl.uniform2iv(this.addr,v)}function setValue3iv(gl,v){gl.uniform3iv(this.addr,v)}function setValue4iv(gl,v){gl.uniform4iv(this.addr,v)}function getSingularSetter(type){switch(type){case 5126:return setValue1f;case 35664:return setValue2fv;case 35665:return setValue3fv;case 35666:return setValue4fv;case 35674:return setValue2fm;case 35675:return setValue3fm;case 35676:return setValue4fm;case 35678:case 36198:return setValueT1;case 35680:return setValueT6;case 5124:case 35670:return setValue1i;case 35667:case 35671:return setValue2iv;case 35668:case 35672:return setValue3iv;case 35669:case 35673:return setValue4iv}}function setValue1fv(gl,v){gl.uniform1fv(this.addr,v)}function setValue1iv(gl,v){gl.uniform1iv(this.addr,v)}function setValueV2a(gl,v){gl.uniform2fv(this.addr,flatten(v,this.size,2))}function setValueV3a(gl,v){gl.uniform3fv(this.addr,flatten(v,this.size,3))}function setValueV4a(gl,v){gl.uniform4fv(this.addr,flatten(v,this.size,4))}function setValueM2a(gl,v){gl.uniformMatrix2fv(this.addr,false,flatten(v,this.size,4))}function setValueM3a(gl,v){gl.uniformMatrix3fv(this.addr,false,flatten(v,this.size,9))}function setValueM4a(gl,v){gl.uniformMatrix4fv(this.addr,false,flatten(v,this.size,16))}function setValueT1a(gl,v,renderer){var n=v.length,units=allocTexUnits(renderer,n);gl.uniform1iv(this.addr,units);for(var i=0;i!==n;++i){renderer.setTexture2D(v[i]||emptyTexture,units[i])}}function setValueT6a(gl,v,renderer){var n=v.length,units=allocTexUnits(renderer,n);gl.uniform1iv(this.addr,units);for(var i=0;i!==n;++i){renderer.setTextureCube(v[i]||emptyCubeTexture,units[i])}}function getPureArraySetter(type){switch(type){case 5126:return setValue1fv;case 35664:return setValueV2a;case 35665:return setValueV3a;case 35666:return setValueV4a;case 35674:return setValueM2a;case 35675:return setValueM3a;case 35676:return setValueM4a;case 35678:return setValueT1a;case 35680:return setValueT6a;case 5124:case 35670:return setValue1iv;case 35667:case 35671:return setValue2iv;case 35668:case 35672:return setValue3iv;case 35669:case 35673:return setValue4iv}}function SingleUniform(id,activeInfo,addr){this.id=id;this.addr=addr;this.setValue=getSingularSetter(activeInfo.type)}function PureArrayUniform(id,activeInfo,addr){this.id=id;this.addr=addr;this.size=activeInfo.size;this.setValue=getPureArraySetter(activeInfo.type)}function StructuredUniform(id){this.id=id;UniformContainer.call(this)}StructuredUniform.prototype.setValue=function(gl,value){var seq=this.seq;for(var i=0,n=seq.length;i!==n;++i){var u=seq[i];u.setValue(gl,value[u.id])}};var RePathPart=/([\w\d_]+)(\])?(\[|\.)?/g;function addUniform(container,uniformObject){container.seq.push(uniformObject);container.map[uniformObject.id]=uniformObject}function parseUniform(activeInfo,addr,container){var path=activeInfo.name,pathLength=path.length;RePathPart.lastIndex=0;for(;;){var match=RePathPart.exec(path),matchEnd=RePathPart.lastIndex,id=match[1],idIsIndex=match[2]==="]",subscript=match[3];if(idIsIndex)id=id|0;if(subscript===undefined||subscript==="["&&matchEnd+2===pathLength){addUniform(container,subscript===undefined?new SingleUniform(id,activeInfo,addr):new PureArrayUniform(id,activeInfo,addr));break}else{var map=container.map,next=map[id];if(next===undefined){next=new StructuredUniform(id);addUniform(container,next)}container=next}}}function WebGLUniforms(gl,program,renderer){UniformContainer.call(this);this.renderer=renderer;var n=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS);for(var i=0;i>16&255)/255;this.g=(hex>>8&255)/255;this.b=(hex&255)/255;return this},setRGB:function(r,g,b){this.r=r;this.g=g;this.b=b;return this},setHSL:function(){function hue2rgb(p,q,t){if(t<0)t+=1;if(t>1)t-=1;if(t<1/6)return p+(q-p)*6*t;if(t<1/2)return q;if(t<2/3)return p+(q-p)*6*(2/3-t);return p}return function setHSL(h,s,l){h=_Math.euclideanModulo(h,1);s=_Math.clamp(s,0,1);l=_Math.clamp(l,0,1);if(s===0){this.r=this.g=this.b=l}else{var p=l<=.5?l*(1+s):l+s-l*s;var q=2*l-p;this.r=hue2rgb(q,p,h+1/3);this.g=hue2rgb(q,p,h);this.b=hue2rgb(q,p,h-1/3)}return this}}(),setStyle:function(style){function handleAlpha(string){if(string===undefined)return;if(parseFloat(string)<1){console.warn("THREE.Color: Alpha component of "+style+" will be ignored.")}}var m;if(m=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(style)){var color;var name=m[1];var components=m[2];switch(name){case"rgb":case"rgba":if(color=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){this.r=Math.min(255,parseInt(color[1],10))/255;this.g=Math.min(255,parseInt(color[2],10))/255;this.b=Math.min(255,parseInt(color[3],10))/255;handleAlpha(color[5]);return this}if(color=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){this.r=Math.min(100,parseInt(color[1],10))/100;this.g=Math.min(100,parseInt(color[2],10))/100;this.b=Math.min(100,parseInt(color[3],10))/100;handleAlpha(color[5]);return this}break;case"hsl":case"hsla":if(color=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(components)){var h=parseFloat(color[1])/360;var s=parseInt(color[2],10)/100;var l=parseInt(color[3],10)/100;handleAlpha(color[5]);return this.setHSL(h,s,l)}break}}else if(m=/^\#([A-Fa-f0-9]+)$/.exec(style)){var hex=m[1];var size=hex.length;if(size===3){this.r=parseInt(hex.charAt(0)+hex.charAt(0),16)/255;this.g=parseInt(hex.charAt(1)+hex.charAt(1),16)/255;this.b=parseInt(hex.charAt(2)+hex.charAt(2),16)/255;return this}else if(size===6){this.r=parseInt(hex.charAt(0)+hex.charAt(1),16)/255;this.g=parseInt(hex.charAt(2)+hex.charAt(3),16)/255;this.b=parseInt(hex.charAt(4)+hex.charAt(5),16)/255;return this}}if(style&&style.length>0){var hex=ColorKeywords[style];if(hex!==undefined){this.setHex(hex)}else{console.warn("THREE.Color: Unknown color "+style)}}return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(color){this.r=color.r;this.g=color.g;this.b=color.b;return this},copyGammaToLinear:function(color,gammaFactor){if(gammaFactor===undefined)gammaFactor=2;this.r=Math.pow(color.r,gammaFactor);this.g=Math.pow(color.g,gammaFactor);this.b=Math.pow(color.b,gammaFactor);return this},copyLinearToGamma:function(color,gammaFactor){if(gammaFactor===undefined)gammaFactor=2;var safeInverse=gammaFactor>0?1/gammaFactor:1;this.r=Math.pow(color.r,safeInverse);this.g=Math.pow(color.g,safeInverse);this.b=Math.pow(color.b,safeInverse);return this},convertGammaToLinear:function(){var r=this.r,g=this.g,b=this.b;this.r=r*r;this.g=g*g;this.b=b*b;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return this.r*255<<16^this.g*255<<8^this.b*255<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(optionalTarget){var hsl=optionalTarget||{h:0,s:0,l:0};var r=this.r,g=this.g,b=this.b;var max=Math.max(r,g,b);var min=Math.min(r,g,b);var hue,saturation;var lightness=(min+max)/2;if(min===max){hue=0;saturation=0}else{var delta=max-min;saturation=lightness<=.5?delta/(max+min):delta/(2-max-min);switch(max){case r:hue=(g-b)/delta+(gthis.max.x||point.ythis.max.y?false:true},containsBox:function(box){return this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y},getParameter:function(point,optionalTarget){var result=optionalTarget||new Vector2;return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(box){return box.max.xthis.max.x||box.max.ythis.max.y?false:true},clampPoint:function(point,optionalTarget){var result=optionalTarget||new Vector2;return result.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new Vector2;return function distanceToPoint(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length()}}(),intersect:function(box){this.min.max(box.min);this.max.min(box.max);return this},union:function(box){this.min.min(box.min);this.max.max(box.max);return this},translate:function(offset){this.min.add(offset);this.max.add(offset);return this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}});function LensFlarePlugin(renderer,flares){var gl=renderer.context;var state=renderer.state;var vertexBuffer,elementBuffer;var shader,program,attributes,uniforms;var tempTexture,occlusionTexture;function init(){var vertices=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]);var faces=new Uint16Array([0,1,2,0,2,3]);vertexBuffer=gl.createBuffer();elementBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,faces,gl.STATIC_DRAW);tempTexture=gl.createTexture();occlusionTexture=gl.createTexture();state.bindTexture(gl.TEXTURE_2D,tempTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGB,16,16,0,gl.RGB,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);state.bindTexture(gl.TEXTURE_2D,occlusionTexture);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,16,16,0,gl.RGBA,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);shader={vertexShader:["uniform lowp int renderType;","uniform vec3 screenPosition;","uniform vec2 scale;","uniform float rotation;","uniform sampler2D occlusionMap;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","varying float vVisibility;","void main() {","vUV = uv;","vec2 pos = position;","if ( renderType == 2 ) {","vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );","visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );","visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );","vVisibility = visibility.r / 9.0;","vVisibility *= 1.0 - visibility.g / 9.0;","vVisibility *= visibility.b / 9.0;","vVisibility *= 1.0 - visibility.a / 9.0;","pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;","pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;","}","gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );","}"].join("\n"),fragmentShader:["uniform lowp int renderType;","uniform sampler2D map;","uniform float opacity;","uniform vec3 color;","varying vec2 vUV;","varying float vVisibility;","void main() {","if ( renderType == 0 ) {","gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );","} else if ( renderType == 1 ) {","gl_FragColor = texture2D( map, vUV );","} else {","vec4 texture = texture2D( map, vUV );","texture.a *= opacity * vVisibility;","gl_FragColor = texture;","gl_FragColor.rgb *= color;","}","}"].join("\n")};program=createProgram(shader);attributes={vertex:gl.getAttribLocation(program,"position"),uv:gl.getAttribLocation(program,"uv")};uniforms={renderType:gl.getUniformLocation(program,"renderType"),map:gl.getUniformLocation(program,"map"),occlusionMap:gl.getUniformLocation(program,"occlusionMap"),opacity:gl.getUniformLocation(program,"opacity"),color:gl.getUniformLocation(program,"color"),scale:gl.getUniformLocation(program,"scale"),rotation:gl.getUniformLocation(program,"rotation"),screenPosition:gl.getUniformLocation(program,"screenPosition")}}this.render=function(scene,camera,viewport){if(flares.length===0)return;var tempPosition=new Vector3;var invAspect=viewport.w/viewport.z,halfViewportWidth=viewport.z*.5,halfViewportHeight=viewport.w*.5;var size=16/viewport.w,scale=new Vector2(size*invAspect,size);var screenPosition=new Vector3(1,1,0),screenPositionPixels=new Vector2(1,1);var validArea=new Box2;validArea.min.set(viewport.x,viewport.y);validArea.max.set(viewport.x+(viewport.z-16),viewport.y+(viewport.w-16));if(program===undefined){init()}gl.useProgram(program);state.initAttributes();state.enableAttribute(attributes.vertex);state.enableAttribute(attributes.uv);state.disableUnusedAttributes();gl.uniform1i(uniforms.occlusionMap,0);gl.uniform1i(uniforms.map,1);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.vertex,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);state.disable(gl.CULL_FACE);state.buffers.depth.setMask(false);for(var i=0,l=flares.length;i.001&&sprite.scale>.001){screenPosition.x=sprite.x;screenPosition.y=sprite.y;screenPosition.z=sprite.z;size=sprite.size*sprite.scale/viewport.w;scale.x=size*invAspect;scale.y=size;gl.uniform3f(uniforms.screenPosition,screenPosition.x,screenPosition.y,screenPosition.z);gl.uniform2f(uniforms.scale,scale.x,scale.y);gl.uniform1f(uniforms.rotation,sprite.rotation);gl.uniform1f(uniforms.opacity,sprite.opacity);gl.uniform3f(uniforms.color,sprite.color.r,sprite.color.g,sprite.color.b);state.setBlending(sprite.blending,sprite.blendEquation,sprite.blendSrc,sprite.blendDst);renderer.setTexture2D(sprite.texture,1);gl.drawElements(gl.TRIANGLES,6,gl.UNSIGNED_SHORT,0)}}}}state.enable(gl.CULL_FACE);state.enable(gl.DEPTH_TEST);state.buffers.depth.setMask(true);renderer.resetGLState()};function createProgram(shader){var program=gl.createProgram();var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);var vertexShader=gl.createShader(gl.VERTEX_SHADER);var prefix="precision "+renderer.getPrecision()+" float;\n";gl.shaderSource(fragmentShader,prefix+shader.fragmentShader);gl.shaderSource(vertexShader,prefix+shader.vertexShader);gl.compileShader(fragmentShader);gl.compileShader(vertexShader);gl.attachShader(program,fragmentShader);gl.attachShader(program,vertexShader);gl.linkProgram(program);return program}}function SpritePlugin(renderer,sprites){var gl=renderer.context;var state=renderer.state;var vertexBuffer,elementBuffer;var program,attributes,uniforms;var texture;var spritePosition=new Vector3;var spriteRotation=new Quaternion;var spriteScale=new Vector3;function init(){var vertices=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]);var faces=new Uint16Array([0,1,2,0,2,3]);vertexBuffer=gl.createBuffer();elementBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,faces,gl.STATIC_DRAW);program=createProgram();attributes={position:gl.getAttribLocation(program,"position"),uv:gl.getAttribLocation(program,"uv")};uniforms={uvOffset:gl.getUniformLocation(program,"uvOffset"),uvScale:gl.getUniformLocation(program,"uvScale"),rotation:gl.getUniformLocation(program,"rotation"),scale:gl.getUniformLocation(program,"scale"),color:gl.getUniformLocation(program,"color"),map:gl.getUniformLocation(program,"map"),opacity:gl.getUniformLocation(program,"opacity"),modelViewMatrix:gl.getUniformLocation(program,"modelViewMatrix"),projectionMatrix:gl.getUniformLocation(program,"projectionMatrix"),fogType:gl.getUniformLocation(program,"fogType"),fogDensity:gl.getUniformLocation(program,"fogDensity"),fogNear:gl.getUniformLocation(program,"fogNear"),fogFar:gl.getUniformLocation(program,"fogFar"),fogColor:gl.getUniformLocation(program,"fogColor"),alphaTest:gl.getUniformLocation(program,"alphaTest")};var canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=8;canvas.height=8;var context=canvas.getContext("2d");context.fillStyle="white";context.fillRect(0,0,8,8);texture=new Texture(canvas);texture.needsUpdate=true}this.render=function(scene,camera){if(sprites.length===0)return;if(program===undefined){init()}gl.useProgram(program);state.initAttributes();state.enableAttribute(attributes.position);state.enableAttribute(attributes.uv);state.disableUnusedAttributes();state.disable(gl.CULL_FACE);state.enable(gl.BLEND);gl.bindBuffer(gl.ARRAY_BUFFER,vertexBuffer);gl.vertexAttribPointer(attributes.position,2,gl.FLOAT,false,2*8,0);gl.vertexAttribPointer(attributes.uv,2,gl.FLOAT,false,2*8,8);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,elementBuffer);gl.uniformMatrix4fv(uniforms.projectionMatrix,false,camera.projectionMatrix.elements);state.activeTexture(gl.TEXTURE0);gl.uniform1i(uniforms.map,0);var oldFogType=0;var sceneFogType=0;var fog=scene.fog;if(fog){gl.uniform3f(uniforms.fogColor,fog.color.r,fog.color.g,fog.color.b);if(fog.isFog){gl.uniform1f(uniforms.fogNear,fog.near);gl.uniform1f(uniforms.fogFar,fog.far);gl.uniform1i(uniforms.fogType,1);oldFogType=1;sceneFogType=1}else if(fog.isFogExp2){gl.uniform1f(uniforms.fogDensity,fog.density);gl.uniform1i(uniforms.fogType,2);oldFogType=2;sceneFogType=2}}else{gl.uniform1i(uniforms.fogType,0);oldFogType=0;sceneFogType=0}for(var i=0,l=sprites.length;i 0 ) {","float depth = gl_FragCoord.z / gl_FragCoord.w;","float fogFactor = 0.0;","if ( fogType == 1 ) {","fogFactor = smoothstep( fogNear, fogFar, depth );","} else {","const float LOG2 = 1.442695;","fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );","fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","}","gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );","}","}"].join("\n"));gl.compileShader(vertexShader);gl.compileShader(fragmentShader);gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);gl.linkProgram(program);return program}function painterSortStable(a,b){if(a.renderOrder!==b.renderOrder){return a.renderOrder-b.renderOrder}else if(a.z!==b.z){return b.z-a.z}else{return b.id-a.id}}}var materialId=0;function Material(){Object.defineProperty(this,"id",{value:materialId++});this.uuid=_Math.generateUUID();this.name="";this.type="Material";this.fog=true;this.lights=true;this.blending=NormalBlending;this.side=FrontSide;this.shading=SmoothShading;this.vertexColors=NoColors;this.opacity=1;this.transparent=false;this.blendSrc=SrcAlphaFactor;this.blendDst=OneMinusSrcAlphaFactor;this.blendEquation=AddEquation;this.blendSrcAlpha=null;this.blendDstAlpha=null;this.blendEquationAlpha=null;this.depthFunc=LessEqualDepth;this.depthTest=true;this.depthWrite=true;this.clippingPlanes=null;this.clipIntersection=false;this.clipShadows=false;this.colorWrite=true;this.precision=null;this.polygonOffset=false;this.polygonOffsetFactor=0;this.polygonOffsetUnits=0;this.dithering=false;this.alphaTest=0;this.premultipliedAlpha=false;this.overdraw=0;this.visible=true;this.needsUpdate=true}Object.assign(Material.prototype,EventDispatcher.prototype,{isMaterial:true,onBeforeCompile:function(){},setValues:function(values){if(values===undefined)return;for(var key in values){var newValue=values[key];if(newValue===undefined){console.warn("THREE.Material: '"+key+"' parameter is undefined.");continue}var currentValue=this[key];if(currentValue===undefined){console.warn("THREE."+this.type+": '"+key+"' is not a property of this material.");continue}if(currentValue&¤tValue.isColor){currentValue.set(newValue)}else if(currentValue&¤tValue.isVector3&&(newValue&&newValue.isVector3)){currentValue.copy(newValue)}else if(key==="overdraw"){this[key]=Number(newValue)}else{this[key]=newValue}}},toJSON:function(meta){var isRoot=meta===undefined;if(isRoot){meta={textures:{},images:{}}}var data={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};data.uuid=this.uuid;data.type=this.type;if(this.name!=="")data.name=this.name;if(this.color&&this.color.isColor)data.color=this.color.getHex();if(this.roughness!==undefined)data.roughness=this.roughness;if(this.metalness!==undefined)data.metalness=this.metalness;if(this.emissive&&this.emissive.isColor)data.emissive=this.emissive.getHex();if(this.specular&&this.specular.isColor)data.specular=this.specular.getHex();if(this.shininess!==undefined)data.shininess=this.shininess;if(this.clearCoat!==undefined)data.clearCoat=this.clearCoat;if(this.clearCoatRoughness!==undefined)data.clearCoatRoughness=this.clearCoatRoughness;if(this.map&&this.map.isTexture)data.map=this.map.toJSON(meta).uuid;if(this.alphaMap&&this.alphaMap.isTexture)data.alphaMap=this.alphaMap.toJSON(meta).uuid;if(this.lightMap&&this.lightMap.isTexture)data.lightMap=this.lightMap.toJSON(meta).uuid;if(this.bumpMap&&this.bumpMap.isTexture){data.bumpMap=this.bumpMap.toJSON(meta).uuid;data.bumpScale=this.bumpScale}if(this.normalMap&&this.normalMap.isTexture){data.normalMap=this.normalMap.toJSON(meta).uuid;data.normalScale=this.normalScale.toArray()}if(this.displacementMap&&this.displacementMap.isTexture){data.displacementMap=this.displacementMap.toJSON(meta).uuid;data.displacementScale=this.displacementScale;data.displacementBias=this.displacementBias}if(this.roughnessMap&&this.roughnessMap.isTexture)data.roughnessMap=this.roughnessMap.toJSON(meta).uuid;if(this.metalnessMap&&this.metalnessMap.isTexture)data.metalnessMap=this.metalnessMap.toJSON(meta).uuid;if(this.emissiveMap&&this.emissiveMap.isTexture)data.emissiveMap=this.emissiveMap.toJSON(meta).uuid;if(this.specularMap&&this.specularMap.isTexture)data.specularMap=this.specularMap.toJSON(meta).uuid;if(this.envMap&&this.envMap.isTexture){data.envMap=this.envMap.toJSON(meta).uuid;data.reflectivity=this.reflectivity}if(this.gradientMap&&this.gradientMap.isTexture){data.gradientMap=this.gradientMap.toJSON(meta).uuid}if(this.size!==undefined)data.size=this.size;if(this.sizeAttenuation!==undefined)data.sizeAttenuation=this.sizeAttenuation;if(this.blending!==NormalBlending)data.blending=this.blending;if(this.shading!==SmoothShading)data.shading=this.shading;if(this.side!==FrontSide)data.side=this.side;if(this.vertexColors!==NoColors)data.vertexColors=this.vertexColors;if(this.opacity<1)data.opacity=this.opacity;if(this.transparent===true)data.transparent=this.transparent;data.depthFunc=this.depthFunc;data.depthTest=this.depthTest;data.depthWrite=this.depthWrite;if(this.alphaTest>0)data.alphaTest=this.alphaTest;if(this.premultipliedAlpha===true)data.premultipliedAlpha=this.premultipliedAlpha;if(this.wireframe===true)data.wireframe=this.wireframe;if(this.wireframeLinewidth>1)data.wireframeLinewidth=this.wireframeLinewidth;if(this.wireframeLinecap!=="round")data.wireframeLinecap=this.wireframeLinecap;if(this.wireframeLinejoin!=="round")data.wireframeLinejoin=this.wireframeLinejoin;data.skinning=this.skinning;data.morphTargets=this.morphTargets;data.dithering=this.dithering;function extractFromCache(cache){var values=[];for(var key in cache){var data=cache[key];delete data.metadata;values.push(data)}return values}if(isRoot){var textures=extractFromCache(meta.textures);var images=extractFromCache(meta.images);if(textures.length>0)data.textures=textures;if(images.length>0)data.images=images}return data},clone:function(){return(new this.constructor).copy(this)},copy:function(source){this.name=source.name;this.fog=source.fog;this.lights=source.lights;this.blending=source.blending;this.side=source.side;this.shading=source.shading;this.vertexColors=source.vertexColors;this.opacity=source.opacity;this.transparent=source.transparent;this.blendSrc=source.blendSrc;this.blendDst=source.blendDst;this.blendEquation=source.blendEquation;this.blendSrcAlpha=source.blendSrcAlpha;this.blendDstAlpha=source.blendDstAlpha;this.blendEquationAlpha=source.blendEquationAlpha;this.depthFunc=source.depthFunc;this.depthTest=source.depthTest;this.depthWrite=source.depthWrite;this.colorWrite=source.colorWrite;this.precision=source.precision;this.polygonOffset=source.polygonOffset;this.polygonOffsetFactor=source.polygonOffsetFactor;this.polygonOffsetUnits=source.polygonOffsetUnits;this.dithering=source.dithering;this.alphaTest=source.alphaTest;this.premultipliedAlpha=source.premultipliedAlpha;this.overdraw=source.overdraw;this.visible=source.visible;this.clipShadows=source.clipShadows;this.clipIntersection=source.clipIntersection;var srcPlanes=source.clippingPlanes,dstPlanes=null;if(srcPlanes!==null){var n=srcPlanes.length;dstPlanes=new Array(n);for(var i=0;i!==n;++i)dstPlanes[i]=srcPlanes[i].clone()}this.clippingPlanes=dstPlanes;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});function ShaderMaterial(parameters){Material.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";this.fragmentShader="void main() {\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";this.linewidth=1;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.clipping=false;this.skinning=false;this.morphTargets=false;this.morphNormals=false;this.extensions={derivatives:false,fragDepth:false,drawBuffers:false,shaderTextureLOD:false};this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]};this.index0AttributeName=undefined;if(parameters!==undefined){if(parameters.attributes!==undefined){console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.")}this.setValues(parameters)}}ShaderMaterial.prototype=Object.create(Material.prototype);ShaderMaterial.prototype.constructor=ShaderMaterial;ShaderMaterial.prototype.isShaderMaterial=true;ShaderMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.fragmentShader=source.fragmentShader;this.vertexShader=source.vertexShader;this.uniforms=UniformsUtils.clone(source.uniforms);this.defines=source.defines;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;this.lights=source.lights;this.clipping=source.clipping;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.morphNormals=source.morphNormals;this.extensions=source.extensions;return this};ShaderMaterial.prototype.toJSON=function(meta){var data=Material.prototype.toJSON.call(this,meta);data.uniforms=this.uniforms;data.vertexShader=this.vertexShader;data.fragmentShader=this.fragmentShader;return data};function MeshDepthMaterial(parameters){Material.call(this);this.type="MeshDepthMaterial";this.depthPacking=BasicDepthPacking;this.skinning=false;this.morphTargets=false;this.map=null;this.alphaMap=null;this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=false;this.wireframeLinewidth=1;this.fog=false;this.lights=false;this.setValues(parameters)}MeshDepthMaterial.prototype=Object.create(Material.prototype);MeshDepthMaterial.prototype.constructor=MeshDepthMaterial;MeshDepthMaterial.prototype.isMeshDepthMaterial=true;MeshDepthMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.depthPacking=source.depthPacking;this.skinning=source.skinning;this.morphTargets=source.morphTargets;this.map=source.map;this.alphaMap=source.alphaMap;this.displacementMap=source.displacementMap;this.displacementScale=source.displacementScale;this.displacementBias=source.displacementBias;this.wireframe=source.wireframe;this.wireframeLinewidth=source.wireframeLinewidth;return this};function Box3(min,max){this.min=min!==undefined?min:new Vector3(+Infinity,+Infinity,+Infinity);this.max=max!==undefined?max:new Vector3(-Infinity,-Infinity,-Infinity)}Object.assign(Box3.prototype,{isBox3:true,set:function(min,max){this.min.copy(min);this.max.copy(max);return this},setFromArray:function(array){var minX=+Infinity;var minY=+Infinity;var minZ=+Infinity;var maxX=-Infinity;var maxY=-Infinity;var maxZ=-Infinity;for(var i=0,l=array.length;imaxX)maxX=x;if(y>maxY)maxY=y;if(z>maxZ)maxZ=z}this.min.set(minX,minY,minZ);this.max.set(maxX,maxY,maxZ);return this},setFromBufferAttribute:function(attribute){var minX=+Infinity;var minY=+Infinity;var minZ=+Infinity;var maxX=-Infinity;var maxY=-Infinity;var maxZ=-Infinity;for(var i=0,l=attribute.count;imaxX)maxX=x;if(y>maxY)maxY=y;if(z>maxZ)maxZ=z}this.min.set(minX,minY,minZ);this.max.set(maxX,maxY,maxZ);return this},setFromPoints:function(points){this.makeEmpty();for(var i=0,il=points.length;ithis.max.x||point.ythis.max.y||point.zthis.max.z?false:true},containsBox:function(box){return this.min.x<=box.min.x&&box.max.x<=this.max.x&&this.min.y<=box.min.y&&box.max.y<=this.max.y&&this.min.z<=box.min.z&&box.max.z<=this.max.z},getParameter:function(point,optionalTarget){var result=optionalTarget||new Vector3;return result.set((point.x-this.min.x)/(this.max.x-this.min.x),(point.y-this.min.y)/(this.max.y-this.min.y),(point.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(box){return box.max.xthis.max.x||box.max.ythis.max.y||box.max.zthis.max.z?false:true},intersectsSphere:function(){var closestPoint=new Vector3;return function intersectsSphere(sphere){this.clampPoint(sphere.center,closestPoint);return closestPoint.distanceToSquared(sphere.center)<=sphere.radius*sphere.radius}}(),intersectsPlane:function(plane){var min,max;if(plane.normal.x>0){min=plane.normal.x*this.min.x;max=plane.normal.x*this.max.x}else{min=plane.normal.x*this.max.x;max=plane.normal.x*this.min.x}if(plane.normal.y>0){min+=plane.normal.y*this.min.y;max+=plane.normal.y*this.max.y}else{min+=plane.normal.y*this.max.y;max+=plane.normal.y*this.min.y}if(plane.normal.z>0){min+=plane.normal.z*this.min.z;max+=plane.normal.z*this.max.z}else{min+=plane.normal.z*this.max.z;max+=plane.normal.z*this.min.z}return min<=plane.constant&&max>=plane.constant},clampPoint:function(point,optionalTarget){var result=optionalTarget||new Vector3;return result.copy(point).clamp(this.min,this.max)},distanceToPoint:function(){var v1=new Vector3;return function distanceToPoint(point){var clampedPoint=v1.copy(point).clamp(this.min,this.max);return clampedPoint.sub(point).length()}}(),getBoundingSphere:function(){var v1=new Vector3;return function getBoundingSphere(optionalTarget){var result=optionalTarget||new Sphere;this.getCenter(result.center);result.radius=this.getSize(v1).length()*.5;return result}}(),intersect:function(box){this.min.max(box.min);this.max.min(box.max);if(this.isEmpty())this.makeEmpty();return this},union:function(box){this.min.min(box.min);this.max.max(box.max);return this},applyMatrix4:function(){var points=[new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3,new Vector3];return function applyMatrix4(matrix){if(this.isEmpty())return this;points[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(matrix);points[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(matrix);points[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(matrix);points[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(matrix);points[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(matrix);points[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(matrix);points[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(matrix);points[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(matrix);this.setFromPoints(points);return this}}(),translate:function(offset){this.min.add(offset);this.max.add(offset);return this},equals:function(box){return box.min.equals(this.min)&&box.max.equals(this.max)}});function Sphere(center,radius){this.center=center!==undefined?center:new Vector3;this.radius=radius!==undefined?radius:0}Object.assign(Sphere.prototype,{set:function(center,radius){this.center.copy(center);this.radius=radius;return this},setFromPoints:function(){var box=new Box3;return function setFromPoints(points,optionalCenter){var center=this.center;if(optionalCenter!==undefined){center.copy(optionalCenter)}else{box.setFromPoints(points).getCenter(center)}var maxRadiusSq=0;for(var i=0,il=points.length;ithis.radius*this.radius){result.sub(this.center).normalize();result.multiplyScalar(this.radius).add(this.center)}return result},getBoundingBox:function(optionalTarget){var box=optionalTarget||new Box3;box.set(this.center,this.center);box.expandByScalar(this.radius);return box},applyMatrix4:function(matrix){this.center.applyMatrix4(matrix);this.radius=this.radius*matrix.getMaxScaleOnAxis();return this},translate:function(offset){this.center.add(offset);return this},equals:function(sphere){return sphere.center.equals(this.center)&&sphere.radius===this.radius}});function Matrix3(){this.elements=[1,0,0,0,1,0,0,0,1];if(arguments.length>0){console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}}Object.assign(Matrix3.prototype,{isMatrix3:true,set:function(n11,n12,n13,n21,n22,n23,n31,n32,n33){var te=this.elements;te[0]=n11;te[1]=n21;te[2]=n31;te[3]=n12;te[4]=n22;te[5]=n32;te[6]=n13;te[7]=n23;te[8]=n33;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(m){var te=this.elements;var me=m.elements;te[0]=me[0];te[1]=me[1];te[2]=me[2];te[3]=me[3];te[4]=me[4];te[5]=me[5];te[6]=me[6];te[7]=me[7];te[8]=me[8];return this},setFromMatrix4:function(m){var me=m.elements;this.set(me[0],me[4],me[8],me[1],me[5],me[9],me[2],me[6],me[10]);return this},applyToBufferAttribute:function(){var v1=new Vector3;return function applyToBufferAttribute(attribute){for(var i=0,l=attribute.count;i1){return undefined}return result.copy(direction).multiplyScalar(t).add(line.start)}}(),intersectsLine:function(line){var startSign=this.distanceToPoint(line.start);var endSign=this.distanceToPoint(line.end);return startSign<0&&endSign>0||endSign<0&&startSign>0},intersectsBox:function(box){return box.intersectsPlane(this)},intersectsSphere:function(sphere){return sphere.intersectsPlane(this)},coplanarPoint:function(optionalTarget){var result=optionalTarget||new Vector3;return result.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var v1=new Vector3;var m1=new Matrix3;return function applyMatrix4(matrix,optionalNormalMatrix){var referencePoint=this.coplanarPoint(v1).applyMatrix4(matrix);var normalMatrix=optionalNormalMatrix||m1.getNormalMatrix(matrix);var normal=this.normal.applyMatrix3(normalMatrix).normalize();this.constant=-referencePoint.dot(normal);return this}}(),translate:function(offset){this.constant=this.constant-offset.dot(this.normal);return this},equals:function(plane){return plane.normal.equals(this.normal)&&plane.constant===this.constant}});function Frustum(p0,p1,p2,p3,p4,p5){this.planes=[p0!==undefined?p0:new Plane,p1!==undefined?p1:new Plane,p2!==undefined?p2:new Plane,p3!==undefined?p3:new Plane,p4!==undefined?p4:new Plane,p5!==undefined?p5:new Plane]}Object.assign(Frustum.prototype,{set:function(p0,p1,p2,p3,p4,p5){var planes=this.planes;planes[0].copy(p0);planes[1].copy(p1);planes[2].copy(p2);planes[3].copy(p3);planes[4].copy(p4);planes[5].copy(p5);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(frustum){var planes=this.planes;for(var i=0;i<6;i++){planes[i].copy(frustum.planes[i])}return this},setFromMatrix:function(m){var planes=this.planes;var me=m.elements;var me0=me[0],me1=me[1],me2=me[2],me3=me[3];var me4=me[4],me5=me[5],me6=me[6],me7=me[7];var me8=me[8],me9=me[9],me10=me[10],me11=me[11];var me12=me[12],me13=me[13],me14=me[14],me15=me[15];planes[0].setComponents(me3-me0,me7-me4,me11-me8,me15-me12).normalize();planes[1].setComponents(me3+me0,me7+me4,me11+me8,me15+me12).normalize();planes[2].setComponents(me3+me1,me7+me5,me11+me9,me15+me13).normalize();planes[3].setComponents(me3-me1,me7-me5,me11-me9,me15-me13).normalize();planes[4].setComponents(me3-me2,me7-me6,me11-me10,me15-me14).normalize();planes[5].setComponents(me3+me2,me7+me6,me11+me10,me15+me14).normalize();return this},intersectsObject:function(){var sphere=new Sphere;return function intersectsObject(object){var geometry=object.geometry;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere).applyMatrix4(object.matrixWorld);return this.intersectsSphere(sphere)}}(),intersectsSprite:function(){var sphere=new Sphere;return function intersectsSprite(sprite){sphere.center.set(0,0,0);sphere.radius=.7071067811865476;sphere.applyMatrix4(sprite.matrixWorld);return this.intersectsSphere(sphere)}}(),intersectsSphere:function(sphere){var planes=this.planes;var center=sphere.center;var negRadius=-sphere.radius;for(var i=0;i<6;i++){var distance=planes[i].distanceToPoint(center);if(distance0?box.min.x:box.max.x;p2.x=plane.normal.x>0?box.max.x:box.min.x;p1.y=plane.normal.y>0?box.min.y:box.max.y;p2.y=plane.normal.y>0?box.max.y:box.min.y;p1.z=plane.normal.z>0?box.min.z:box.max.z;p2.z=plane.normal.z>0?box.max.z:box.min.z;var d1=plane.distanceToPoint(p1);var d2=plane.distanceToPoint(p2);if(d1<0&&d2<0){return false}}return true}}(),containsPoint:function(point){var planes=this.planes;for(var i=0;i<6;i++){if(planes[i].distanceToPoint(point)<0){return false}}return true}});function WebGLShadowMap(_renderer,_lights,_objects,capabilities){var _gl=_renderer.context,_state=_renderer.state,_frustum=new Frustum,_projScreenMatrix=new Matrix4,_lightShadows=_lights.shadows,_shadowMapSize=new Vector2,_maxShadowMapSize=new Vector2(capabilities.maxTextureSize,capabilities.maxTextureSize),_lookTarget=new Vector3,_lightPositionWorld=new Vector3,_MorphingFlag=1,_SkinningFlag=2,_NumberOfMaterialVariants=(_MorphingFlag|_SkinningFlag)+1,_depthMaterials=new Array(_NumberOfMaterialVariants),_distanceMaterials=new Array(_NumberOfMaterialVariants),_materialCache={};var cubeDirections=[new Vector3(1,0,0),new Vector3(-1,0,0),new Vector3(0,0,1),new Vector3(0,0,-1),new Vector3(0,1,0),new Vector3(0,-1,0)];var cubeUps=[new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,1,0),new Vector3(0,0,1),new Vector3(0,0,-1)];var cube2DViewPorts=[new Vector4,new Vector4,new Vector4,new Vector4,new Vector4,new Vector4];var depthMaterialTemplate=new MeshDepthMaterial;depthMaterialTemplate.depthPacking=RGBADepthPacking;depthMaterialTemplate.clipping=true;var distanceShader=ShaderLib["distanceRGBA"];var distanceUniforms=UniformsUtils.clone(distanceShader.uniforms);for(var i=0;i!==_NumberOfMaterialVariants;++i){var useMorphing=(i&_MorphingFlag)!==0;var useSkinning=(i&_SkinningFlag)!==0;var depthMaterial=depthMaterialTemplate.clone();depthMaterial.morphTargets=useMorphing;depthMaterial.skinning=useSkinning;_depthMaterials[i]=depthMaterial;var distanceMaterial=new ShaderMaterial({defines:{USE_SHADOWMAP:""},uniforms:distanceUniforms,vertexShader:distanceShader.vertexShader,fragmentShader:distanceShader.fragmentShader,morphTargets:useMorphing,skinning:useSkinning,clipping:true});_distanceMaterials[i]=distanceMaterial}var scope=this;this.enabled=false;this.autoUpdate=true;this.needsUpdate=false;this.type=PCFShadowMap;this.renderReverseSided=true;this.renderSingleSided=true;this.render=function(scene,camera){if(scope.enabled===false)return;if(scope.autoUpdate===false&&scope.needsUpdate===false)return;if(_lightShadows.length===0)return;_state.disable(_gl.BLEND);_state.buffers.color.setClear(1,1,1,1);_state.buffers.depth.setTest(true);_state.setScissorTest(false);var faceCount;for(var i=0,il=_lightShadows.length;i0}else if(geometry&&geometry.isGeometry){useMorphing=geometry.morphTargets&&geometry.morphTargets.length>0}}if(object.isSkinnedMesh&&material.skinning===false){console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",object)}var useSkinning=object.isSkinnedMesh&&material.skinning;var variantIndex=0;if(useMorphing)variantIndex|=_MorphingFlag;if(useSkinning)variantIndex|=_SkinningFlag;result=materialVariants[variantIndex]}else{result=customMaterial}if(_renderer.localClippingEnabled&&material.clipShadows===true&&material.clippingPlanes.length!==0){var keyA=result.uuid,keyB=material.uuid;var materialsForVariant=_materialCache[keyA];if(materialsForVariant===undefined){materialsForVariant={};_materialCache[keyA]=materialsForVariant}var cachedMaterial=materialsForVariant[keyB];if(cachedMaterial===undefined){cachedMaterial=result.clone();materialsForVariant[keyB]=cachedMaterial}result=cachedMaterial}result.visible=material.visible;result.wireframe=material.wireframe;var side=material.side;if(scope.renderSingleSided&&side==DoubleSide){side=FrontSide}if(scope.renderReverseSided){if(side===FrontSide)side=BackSide;else if(side===BackSide)side=FrontSide}result.side=side;result.clipShadows=material.clipShadows;result.clippingPlanes=material.clippingPlanes;result.wireframeLinewidth=material.wireframeLinewidth;result.linewidth=material.linewidth;if(isPointLight&&result.uniforms.lightPos!==undefined){result.uniforms.lightPos.value.copy(lightPositionWorld)}return result}function renderObject(object,camera,shadowCamera,isPointLight){if(object.visible===false)return;var visible=object.layers.test(camera.layers);if(visible&&(object.isMesh||object.isLine||object.isPoints)){if(object.castShadow&&(!object.frustumCulled||_frustum.intersectsObject(object))){object.modelViewMatrix.multiplyMatrices(shadowCamera.matrixWorldInverse,object.matrixWorld);var geometry=_objects.update(object);var material=object.material;if(Array.isArray(material)){var groups=geometry.groups;for(var k=0,kl=groups.length;k1){for(var i=0;i1){for(var i=0;i0){object.children=[];for(var i=0;i0)output.geometries=geometries;if(materials.length>0)output.materials=materials;if(textures.length>0)output.textures=textures;if(images.length>0)output.images=images}output.object=object;return output;function extractFromCache(cache){var values=[];for(var key in cache){var data=cache[key];delete data.metadata;values.push(data)}return values}},clone:function(recursive){return(new this.constructor).copy(this,recursive)},copy:function(source,recursive){if(recursive===undefined)recursive=true;this.name=source.name;this.up.copy(source.up);this.position.copy(source.position);this.quaternion.copy(source.quaternion);this.scale.copy(source.scale);this.matrix.copy(source.matrix);this.matrixWorld.copy(source.matrixWorld);this.matrixAutoUpdate=source.matrixAutoUpdate;this.matrixWorldNeedsUpdate=source.matrixWorldNeedsUpdate;this.layers.mask=source.layers.mask;this.visible=source.visible;this.castShadow=source.castShadow;this.receiveShadow=source.receiveShadow;this.frustumCulled=source.frustumCulled;this.renderOrder=source.renderOrder;this.userData=JSON.parse(JSON.stringify(source.userData));if(recursive===true){for(var i=0;i0){for(var i=0;i0){this.normalsNeedUpdate=true}},computeFlatVertexNormals:function(){var f,fl,face;this.computeFaceNormals();for(f=0,fl=this.faces.length;f0){this.normalsNeedUpdate=true}},computeMorphNormals:function(){var i,il,f,fl,face;for(f=0,fl=this.faces.length;f0){d+=vertices[i].distanceTo(vertices[i-1])}this.lineDistances[i]=d}},computeBoundingBox:function(){if(this.boundingBox===null){this.boundingBox=new Box3}this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){if(this.boundingSphere===null){this.boundingSphere=new Sphere}this.boundingSphere.setFromPoints(this.vertices)},merge:function(geometry,matrix,materialIndexOffset){if(!(geometry&&geometry.isGeometry)){console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",geometry);return}var normalMatrix,vertexOffset=this.vertices.length,vertices1=this.vertices,vertices2=geometry.vertices,faces1=this.faces,faces2=geometry.faces,uvs1=this.faceVertexUvs[0],uvs2=geometry.faceVertexUvs[0],colors1=this.colors,colors2=geometry.colors;if(materialIndexOffset===undefined)materialIndexOffset=0;if(matrix!==undefined){normalMatrix=(new Matrix3).getNormalMatrix(matrix)}for(var i=0,il=vertices2.length;i=0;i--){var idx=faceIndicesToRemove[i];this.faces.splice(idx,1);for(j=0,jl=this.faceVertexUvs.length;j0;var hasFaceVertexNormal=face.vertexNormals.length>0;var hasFaceColor=face.color.r!==1||face.color.g!==1||face.color.b!==1;var hasFaceVertexColor=face.vertexColors.length>0;var faceType=0;faceType=setBit(faceType,0,0);faceType=setBit(faceType,1,hasMaterial);faceType=setBit(faceType,2,hasFaceUv);faceType=setBit(faceType,3,hasFaceVertexUv);faceType=setBit(faceType,4,hasFaceNormal);faceType=setBit(faceType,5,hasFaceVertexNormal);faceType=setBit(faceType,6,hasFaceColor);faceType=setBit(faceType,7,hasFaceVertexColor);faces.push(faceType);faces.push(face.a,face.b,face.c);faces.push(face.materialIndex);if(hasFaceVertexUv){var faceVertexUvs=this.faceVertexUvs[0][i];faces.push(getUvIndex(faceVertexUvs[0]),getUvIndex(faceVertexUvs[1]),getUvIndex(faceVertexUvs[2]))}if(hasFaceNormal){faces.push(getNormalIndex(face.normal))}if(hasFaceVertexNormal){var vertexNormals=face.vertexNormals;faces.push(getNormalIndex(vertexNormals[0]),getNormalIndex(vertexNormals[1]),getNormalIndex(vertexNormals[2]))}if(hasFaceColor){faces.push(getColorIndex(face.color))}if(hasFaceVertexColor){var vertexColors=face.vertexColors;faces.push(getColorIndex(vertexColors[0]),getColorIndex(vertexColors[1]),getColorIndex(vertexColors[2]))}}function setBit(value,position,enabled){return enabled?value|1<0)data.data.colors=colors;if(uvs.length>0)data.data.uvs=[uvs];data.data.faces=faces;return data},clone:function(){return(new Geometry).copy(this)},copy:function(source){var i,il,j,jl,k,kl;this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingBox=null;this.boundingSphere=null;this.name=source.name;var vertices=source.vertices;for(i=0,il=vertices.length;i0;var hasFaceVertexUv2=faceVertexUvs[1]&&faceVertexUvs[1].length>0;var morphTargets=geometry.morphTargets;var morphTargetsLength=morphTargets.length;var morphTargetsPosition;if(morphTargetsLength>0){morphTargetsPosition=[];for(var i=0;i0){morphTargetsNormal=[];for(var i=0;imax)max=array[i]}return max}function BufferGeometry(){Object.defineProperty(this,"id",{value:GeometryIdCount()});this.uuid=_Math.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingBox=null;this.boundingSphere=null;this.drawRange={start:0,count:Infinity}}BufferGeometry.MaxIndex=65535;Object.assign(BufferGeometry.prototype,EventDispatcher.prototype,{isBufferGeometry:true,getIndex:function(){return this.index},setIndex:function(index){if(Array.isArray(index)){this.index=new(arrayMax(index)>65535?Uint32BufferAttribute:Uint16BufferAttribute)(index,1)}else{this.index=index}},addAttribute:function(name,attribute){if(!(attribute&&attribute.isBufferAttribute)&&!(attribute&&attribute.isInterleavedBufferAttribute)){console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).");this.addAttribute(name,new BufferAttribute(arguments[1],arguments[2]));return}if(name==="index"){console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.");this.setIndex(attribute);return}this.attributes[name]=attribute;return this},getAttribute:function(name){return this.attributes[name]},removeAttribute:function(name){delete this.attributes[name];return this},addGroup:function(start,count,materialIndex){this.groups.push({start:start,count:count,materialIndex:materialIndex!==undefined?materialIndex:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(start,count){this.drawRange.start=start;this.drawRange.count=count},applyMatrix:function(matrix){var position=this.attributes.position;if(position!==undefined){matrix.applyToBufferAttribute(position);position.needsUpdate=true}var normal=this.attributes.normal;if(normal!==undefined){var normalMatrix=(new Matrix3).getNormalMatrix(matrix);normalMatrix.applyToBufferAttribute(normal);normal.needsUpdate=true}if(this.boundingBox!==null){this.computeBoundingBox()}if(this.boundingSphere!==null){this.computeBoundingSphere()}return this},rotateX:function(){var m1=new Matrix4;return function rotateX(angle){m1.makeRotationX(angle);this.applyMatrix(m1);return this}}(),rotateY:function(){var m1=new Matrix4;return function rotateY(angle){m1.makeRotationY(angle);this.applyMatrix(m1);return this}}(),rotateZ:function(){var m1=new Matrix4;return function rotateZ(angle){m1.makeRotationZ(angle);this.applyMatrix(m1);return this}}(),translate:function(){var m1=new Matrix4;return function translate(x,y,z){m1.makeTranslation(x,y,z);this.applyMatrix(m1);return this}}(),scale:function(){var m1=new Matrix4;return function scale(x,y,z){m1.makeScale(x,y,z);this.applyMatrix(m1);return this}}(),lookAt:function(){var obj=new Object3D;return function lookAt(vector){obj.lookAt(vector);obj.updateMatrix();this.applyMatrix(obj.matrix)}}(),center:function(){this.computeBoundingBox();var offset=this.boundingBox.getCenter().negate();this.translate(offset.x,offset.y,offset.z);return offset},setFromObject:function(object){var geometry=object.geometry;if(object.isPoints||object.isLine){var positions=new Float32BufferAttribute(geometry.vertices.length*3,3);var colors=new Float32BufferAttribute(geometry.colors.length*3,3);this.addAttribute("position",positions.copyVector3sArray(geometry.vertices));this.addAttribute("color",colors.copyColorsArray(geometry.colors));if(geometry.lineDistances&&geometry.lineDistances.length===geometry.vertices.length){var lineDistances=new Float32BufferAttribute(geometry.lineDistances.length,1);this.addAttribute("lineDistance",lineDistances.copyArray(geometry.lineDistances))}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}}else if(object.isMesh){if(geometry&&geometry.isGeometry){this.fromGeometry(geometry)}}return this},updateFromObject:function(object){var geometry=object.geometry;if(object.isMesh){var direct=geometry.__directGeometry;if(geometry.elementsNeedUpdate===true){direct=undefined;geometry.elementsNeedUpdate=false}if(direct===undefined){return this.fromGeometry(geometry)}direct.verticesNeedUpdate=geometry.verticesNeedUpdate;direct.normalsNeedUpdate=geometry.normalsNeedUpdate;direct.colorsNeedUpdate=geometry.colorsNeedUpdate;direct.uvsNeedUpdate=geometry.uvsNeedUpdate;direct.groupsNeedUpdate=geometry.groupsNeedUpdate;geometry.verticesNeedUpdate=false;geometry.normalsNeedUpdate=false;geometry.colorsNeedUpdate=false;geometry.uvsNeedUpdate=false;geometry.groupsNeedUpdate=false;geometry=direct}var attribute;if(geometry.verticesNeedUpdate===true){attribute=this.attributes.position;if(attribute!==undefined){attribute.copyVector3sArray(geometry.vertices);attribute.needsUpdate=true}geometry.verticesNeedUpdate=false}if(geometry.normalsNeedUpdate===true){attribute=this.attributes.normal;if(attribute!==undefined){attribute.copyVector3sArray(geometry.normals);attribute.needsUpdate=true}geometry.normalsNeedUpdate=false}if(geometry.colorsNeedUpdate===true){attribute=this.attributes.color;if(attribute!==undefined){attribute.copyColorsArray(geometry.colors);attribute.needsUpdate=true}geometry.colorsNeedUpdate=false}if(geometry.uvsNeedUpdate){attribute=this.attributes.uv;if(attribute!==undefined){attribute.copyVector2sArray(geometry.uvs);attribute.needsUpdate=true}geometry.uvsNeedUpdate=false}if(geometry.lineDistancesNeedUpdate){attribute=this.attributes.lineDistance;if(attribute!==undefined){attribute.copyArray(geometry.lineDistances);attribute.needsUpdate=true}geometry.lineDistancesNeedUpdate=false}if(geometry.groupsNeedUpdate){geometry.computeGroups(object.geometry);this.groups=geometry.groups;geometry.groupsNeedUpdate=false}return this},fromGeometry:function(geometry){geometry.__directGeometry=(new DirectGeometry).fromGeometry(geometry);return this.fromDirectGeometry(geometry.__directGeometry)},fromDirectGeometry:function(geometry){var positions=new Float32Array(geometry.vertices.length*3);this.addAttribute("position",new BufferAttribute(positions,3).copyVector3sArray(geometry.vertices));if(geometry.normals.length>0){var normals=new Float32Array(geometry.normals.length*3);this.addAttribute("normal",new BufferAttribute(normals,3).copyVector3sArray(geometry.normals))}if(geometry.colors.length>0){var colors=new Float32Array(geometry.colors.length*3);this.addAttribute("color",new BufferAttribute(colors,3).copyColorsArray(geometry.colors))}if(geometry.uvs.length>0){var uvs=new Float32Array(geometry.uvs.length*2);this.addAttribute("uv",new BufferAttribute(uvs,2).copyVector2sArray(geometry.uvs))}if(geometry.uvs2.length>0){var uvs2=new Float32Array(geometry.uvs2.length*2);this.addAttribute("uv2",new BufferAttribute(uvs2,2).copyVector2sArray(geometry.uvs2))}if(geometry.indices.length>0){var TypeArray=arrayMax(geometry.indices)>65535?Uint32Array:Uint16Array;var indices=new TypeArray(geometry.indices.length*3);this.setIndex(new BufferAttribute(indices,1).copyIndicesArray(geometry.indices))}this.groups=geometry.groups;for(var name in geometry.morphTargets){var array=[];var morphTargets=geometry.morphTargets[name];for(var i=0,l=morphTargets.length;i0){var skinIndices=new Float32BufferAttribute(geometry.skinIndices.length*4,4);this.addAttribute("skinIndex",skinIndices.copyVector4sArray(geometry.skinIndices))}if(geometry.skinWeights.length>0){var skinWeights=new Float32BufferAttribute(geometry.skinWeights.length*4,4);this.addAttribute("skinWeight",skinWeights.copyVector4sArray(geometry.skinWeights))}if(geometry.boundingSphere!==null){this.boundingSphere=geometry.boundingSphere.clone()}if(geometry.boundingBox!==null){this.boundingBox=geometry.boundingBox.clone()}return this},computeBoundingBox:function(){if(this.boundingBox===null){this.boundingBox=new Box3}var position=this.attributes.position;if(position!==undefined){this.boundingBox.setFromBufferAttribute(position)}else{this.boundingBox.makeEmpty()}if(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z)){console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}},computeBoundingSphere:function(){var box=new Box3;var vector=new Vector3;return function computeBoundingSphere(){if(this.boundingSphere===null){this.boundingSphere=new Sphere}var position=this.attributes.position;if(position){var center=this.boundingSphere.center;box.setFromBufferAttribute(position);box.getCenter(center);var maxRadiusSq=0;for(var i=0,il=position.count;i0){data.data.groups=JSON.parse(JSON.stringify(groups))}var boundingSphere=this.boundingSphere;if(boundingSphere!==null){data.data.boundingSphere={center:boundingSphere.center.toArray(),radius:boundingSphere.radius}}return data},clone:function(){return(new BufferGeometry).copy(this)},copy:function(source){var name,i,l;this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingBox=null;this.boundingSphere=null;this.name=source.name;var index=source.index;if(index!==null){this.setIndex(index.clone())}var attributes=source.attributes;for(name in attributes){var attribute=attributes[name];this.addAttribute(name,attribute.clone())}var morphAttributes=source.morphAttributes;for(name in morphAttributes){var array=[];var morphAttribute=morphAttributes[name];for(i=0,l=morphAttribute.length;i0?1:-1;normals.push(vector.x,vector.y,vector.z);uvs.push(ix/gridX);uvs.push(1-iy/gridY);vertexCounter+=1}}for(iy=0;iy0){s0=a01*b1-b0;s1=a01*b0-b1;extDet=segExtent*det;if(s0>=0){if(s1>=-extDet){if(s1<=extDet){var invDet=1/det;s0*=invDet;s1*=invDet;sqrDist=s0*(s0+a01*s1+2*b0)+s1*(a01*s0+s1+2*b1)+c}else{s1=segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}}else{s1=-segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}}else{if(s1<=-extDet){s0=Math.max(0,-(-a01*segExtent+b0));s1=s0>0?-segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c}else if(s1<=extDet){s0=0;s1=Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=s1*(s1+2*b1)+c}else{s0=Math.max(0,-(a01*segExtent+b0));s1=s0>0?segExtent:Math.min(Math.max(-segExtent,-b1),segExtent);sqrDist=-s0*s0+s1*(s1+2*b1)+c}}}else{s1=a01>0?-segExtent:segExtent;s0=Math.max(0,-(a01*s1+b0));sqrDist=-s0*s0+s1*(s1+2*b1)+c}if(optionalPointOnRay){optionalPointOnRay.copy(this.direction).multiplyScalar(s0).add(this.origin)}if(optionalPointOnSegment){optionalPointOnSegment.copy(segDir).multiplyScalar(s1).add(segCenter)}return sqrDist}}(),intersectSphere:function(){var v1=new Vector3;return function intersectSphere(sphere,optionalTarget){v1.subVectors(sphere.center,this.origin);var tca=v1.dot(this.direction);var d2=v1.dot(v1)-tca*tca;var radius2=sphere.radius*sphere.radius;if(d2>radius2)return null;var thc=Math.sqrt(radius2-d2);var t0=tca-thc;var t1=tca+thc;if(t0<0&&t1<0)return null;if(t0<0)return this.at(t1,optionalTarget);return this.at(t0,optionalTarget)}}(),intersectsSphere:function(sphere){return this.distanceToPoint(sphere.center)<=sphere.radius},distanceToPlane:function(plane){var denominator=plane.normal.dot(this.direction);if(denominator===0){if(plane.distanceToPoint(this.origin)===0){return 0}return null}var t=-(this.origin.dot(plane.normal)+plane.constant)/denominator;return t>=0?t:null},intersectPlane:function(plane,optionalTarget){var t=this.distanceToPlane(plane);if(t===null){return null}return this.at(t,optionalTarget)},intersectsPlane:function(plane){var distToPoint=plane.distanceToPoint(this.origin);if(distToPoint===0){return true}var denominator=plane.normal.dot(this.direction);if(denominator*distToPoint<0){return true}return false},intersectBox:function(box,optionalTarget){var tmin,tmax,tymin,tymax,tzmin,tzmax;var invdirx=1/this.direction.x,invdiry=1/this.direction.y,invdirz=1/this.direction.z;var origin=this.origin;if(invdirx>=0){tmin=(box.min.x-origin.x)*invdirx;tmax=(box.max.x-origin.x)*invdirx}else{tmin=(box.max.x-origin.x)*invdirx;tmax=(box.min.x-origin.x)*invdirx}if(invdiry>=0){tymin=(box.min.y-origin.y)*invdiry;tymax=(box.max.y-origin.y)*invdiry}else{tymin=(box.max.y-origin.y)*invdiry;tymax=(box.min.y-origin.y)*invdiry}if(tmin>tymax||tymin>tmax)return null;if(tymin>tmin||tmin!==tmin)tmin=tymin;if(tymax=0){tzmin=(box.min.z-origin.z)*invdirz;tzmax=(box.max.z-origin.z)*invdirz}else{tzmin=(box.max.z-origin.z)*invdirz;tzmax=(box.min.z-origin.z)*invdirz}if(tmin>tzmax||tzmin>tmax)return null;if(tzmin>tmin||tmin!==tmin)tmin=tzmin;if(tzmax=0?tmin:tmax,optionalTarget)},intersectsBox:function(){var v=new Vector3;return function intersectsBox(box){return this.intersectBox(box,v)!==null}}(),intersectTriangle:function(){var diff=new Vector3;var edge1=new Vector3;var edge2=new Vector3;var normal=new Vector3;return function intersectTriangle(a,b,c,backfaceCulling,optionalTarget){edge1.subVectors(b,a);edge2.subVectors(c,a);normal.crossVectors(edge1,edge2);var DdN=this.direction.dot(normal);var sign;if(DdN>0){if(backfaceCulling)return null;sign=1}else if(DdN<0){sign=-1;DdN=-DdN}else{return null}diff.subVectors(this.origin,a);var DdQxE2=sign*this.direction.dot(edge2.crossVectors(diff,edge2));if(DdQxE2<0){return null}var DdE1xQ=sign*this.direction.dot(edge1.cross(diff));if(DdE1xQ<0){return null}if(DdQxE2+DdE1xQ>DdN){return null}var QdN=-sign*diff.dot(normal);if(QdN<0){return null}return this.at(QdN/DdN,optionalTarget)}}(),applyMatrix4:function(matrix4){this.origin.applyMatrix4(matrix4);this.direction.transformDirection(matrix4);return this},equals:function(ray){return ray.origin.equals(this.origin)&&ray.direction.equals(this.direction)}});function Line3(start,end){this.start=start!==undefined?start:new Vector3;this.end=end!==undefined?end:new Vector3}Object.assign(Line3.prototype,{set:function(start,end){this.start.copy(start);this.end.copy(end);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(line){this.start.copy(line.start);this.end.copy(line.end);return this},getCenter:function(optionalTarget){var result=optionalTarget||new Vector3;return result.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(optionalTarget){var result=optionalTarget||new Vector3;return result.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,optionalTarget){var result=optionalTarget||new Vector3;return this.delta(result).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var startP=new Vector3;var startEnd=new Vector3;return function closestPointToPointParameter(point,clampToLine){startP.subVectors(point,this.start);startEnd.subVectors(this.end,this.start);var startEnd2=startEnd.dot(startEnd);var startEnd_startP=startEnd.dot(startP);var t=startEnd_startP/startEnd2;if(clampToLine){t=_Math.clamp(t,0,1)}return t}}(),closestPointToPoint:function(point,clampToLine,optionalTarget){var t=this.closestPointToPointParameter(point,clampToLine);var result=optionalTarget||new Vector3;return this.delta(result).multiplyScalar(t).add(this.start)},applyMatrix4:function(matrix){this.start.applyMatrix4(matrix);this.end.applyMatrix4(matrix);return this},equals:function(line){return line.start.equals(this.start)&&line.end.equals(this.end)}});function Triangle(a,b,c){this.a=a!==undefined?a:new Vector3;this.b=b!==undefined?b:new Vector3;this.c=c!==undefined?c:new Vector3}Object.assign(Triangle,{normal:function(){var v0=new Vector3;return function normal(a,b,c,optionalTarget){var result=optionalTarget||new Vector3;result.subVectors(c,b);v0.subVectors(a,b);result.cross(v0);var resultLengthSq=result.lengthSq();if(resultLengthSq>0){return result.multiplyScalar(1/Math.sqrt(resultLengthSq))}return result.set(0,0,0)}}(),barycoordFromPoint:function(){var v0=new Vector3;var v1=new Vector3;var v2=new Vector3;return function barycoordFromPoint(point,a,b,c,optionalTarget){v0.subVectors(c,a);v1.subVectors(b,a);v2.subVectors(point,a);var dot00=v0.dot(v0);var dot01=v0.dot(v1);var dot02=v0.dot(v2);var dot11=v1.dot(v1);var dot12=v1.dot(v2);var denom=dot00*dot11-dot01*dot01;var result=optionalTarget||new Vector3;if(denom===0){return result.set(-2,-1,-1)}var invDenom=1/denom;var u=(dot11*dot02-dot01*dot12)*invDenom;var v=(dot00*dot12-dot01*dot02)*invDenom;return result.set(1-u-v,v,u)}}(),containsPoint:function(){var v1=new Vector3;return function containsPoint(point,a,b,c){var result=Triangle.barycoordFromPoint(point,a,b,c,v1);return result.x>=0&&result.y>=0&&result.x+result.y<=1}}()});Object.assign(Triangle.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(points,i0,i1,i2){this.a.copy(points[i0]);this.b.copy(points[i1]);this.c.copy(points[i2]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(triangle){this.a.copy(triangle.a);this.b.copy(triangle.b);this.c.copy(triangle.c);return this},area:function(){var v0=new Vector3;var v1=new Vector3;return function area(){v0.subVectors(this.c,this.b);v1.subVectors(this.a,this.b);return v0.cross(v1).length()*.5}}(),midpoint:function(optionalTarget){var result=optionalTarget||new Vector3;return result.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(optionalTarget){return Triangle.normal(this.a,this.b,this.c,optionalTarget)},plane:function(optionalTarget){var result=optionalTarget||new Plane;return result.setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(point,optionalTarget){return Triangle.barycoordFromPoint(point,this.a,this.b,this.c,optionalTarget)},containsPoint:function(point){return Triangle.containsPoint(point,this.a,this.b,this.c)},closestPointToPoint:function(){var plane=new Plane;var edgeList=[new Line3,new Line3,new Line3];var projectedPoint=new Vector3;var closestPoint=new Vector3;return function closestPointToPoint(point,optionalTarget){var result=optionalTarget||new Vector3;var minDistance=Infinity;plane.setFromCoplanarPoints(this.a,this.b,this.c);plane.projectPoint(point,projectedPoint);if(this.containsPoint(projectedPoint)===true){result.copy(projectedPoint)}else{edgeList[0].set(this.a,this.b);edgeList[1].set(this.b,this.c);edgeList[2].set(this.c,this.a);for(var i=0;i0){var morphAttribute=morphAttributes[keys[0]];if(morphAttribute!==undefined){this.morphTargetInfluences=[];this.morphTargetDictionary={};for(m=0,ml=morphAttribute.length;m0){this.morphTargetInfluences=[];this.morphTargetDictionary={};for(m=0,ml=morphTargets.length;mraycaster.far)return null;return{distance:distance,point:intersectionPointWorld.clone(),object:object}}function checkBufferGeometryIntersection(object,raycaster,ray,position,uv,a,b,c){vA.fromBufferAttribute(position,a);vB.fromBufferAttribute(position,b);vC.fromBufferAttribute(position,c);var intersection=checkIntersection(object,raycaster,ray,vA,vB,vC,intersectionPoint);if(intersection){if(uv){uvA.fromBufferAttribute(uv,a);uvB.fromBufferAttribute(uv,b);uvC.fromBufferAttribute(uv,c);intersection.uv=uvIntersection(intersectionPoint,vA,vB,vC,uvA,uvB,uvC)}intersection.face=new Face3(a,b,c,Triangle.normal(vA,vB,vC));intersection.faceIndex=a}return intersection}return function raycast(raycaster,intersects){var geometry=this.geometry;var material=this.material;var matrixWorld=this.matrixWorld;if(material===undefined)return;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(matrixWorld);if(raycaster.ray.intersectsSphere(sphere)===false)return;inverseMatrix.getInverse(matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);if(geometry.boundingBox!==null){if(ray.intersectsBox(geometry.boundingBox)===false)return}var intersection;if(geometry.isBufferGeometry){var a,b,c;var index=geometry.index;var position=geometry.attributes.position;var uv=geometry.attributes.uv;var i,l;if(index!==null){for(i=0,l=index.count;i0)uvs=faceVertexUvs;for(var f=0,fl=faces.length;f65535?Uint32BufferAttribute:Uint16BufferAttribute)(indices,1);attributes.update(attribute,gl.ELEMENT_ARRAY_BUFFER);wireframeAttributes[geometry.id]=attribute;return attribute}return{get:get,update:update,getWireframeAttribute:getWireframeAttribute}}function WebGLLights(){var lights={};return{get:function(light){if(lights[light.id]!==undefined){return lights[light.id]}var uniforms;switch(light.type){case"DirectionalLight":uniforms={direction:new Vector3,color:new Color,shadow:false,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"SpotLight":uniforms={position:new Vector3,direction:new Vector3,color:new Color,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:false,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"PointLight":uniforms={position:new Vector3,color:new Color,distance:0,decay:0,shadow:false,shadowBias:0,shadowRadius:1,shadowMapSize:new Vector2};break;case"HemisphereLight":uniforms={direction:new Vector3,skyColor:new Color,groundColor:new Color};break;case"RectAreaLight":uniforms={color:new Color,position:new Vector3,halfWidth:new Vector3,halfHeight:new Vector3};break}lights[light.id]=uniforms;return uniforms}}}function WebGLObjects(gl,geometries,infoRender){var updateList={};function update(object){var frame=infoRender.frame;var geometry=object.geometry;var buffergeometry=geometries.get(object,geometry);if(updateList[buffergeometry.id]!==frame){if(geometry.isGeometry){buffergeometry.updateFromObject(object)}geometries.update(buffergeometry);updateList[buffergeometry.id]=frame}return buffergeometry}function clear(){updateList={}}return{update:update,clear:clear}}function addLineNumbers(string){var lines=string.split("\n");for(var i=0;i/gm;function replace(match,include){var replace=ShaderChunk[include];if(replace===undefined){throw new Error("Can not resolve #include <"+include+">")}return parseIncludes(replace)}return string.replace(pattern,replace)}function unrollLoops(string){var pattern=/for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g;function replace(match,start,end,snippet){var unroll="";for(var i=parseInt(start);i0?renderer.gammaFactor:1;var customExtensions=generateExtensions(extensions,parameters,renderer.extensions);var customDefines=generateDefines(defines);var program=gl.createProgram();var prefixVertex,prefixFragment;if(material.isRawShaderMaterial){prefixVertex=[customDefines,"\n"].filter(filterEmptyLine).join("\n");prefixFragment=[customExtensions,customDefines,"\n"].filter(filterEmptyLine).join("\n")}else{prefixVertex=["precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+shader.name,customDefines,parameters.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+gammaFactorDefine,"#define MAX_BONES "+parameters.maxBones,parameters.useFog&¶meters.fog?"#define USE_FOG":"",parameters.useFog&¶meters.fogExp?"#define FOG_EXP2":"",parameters.map?"#define USE_MAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.displacementMap&¶meters.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.roughnessMap?"#define USE_ROUGHNESSMAP":"",parameters.metalnessMap?"#define USE_METALNESSMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.skinning?"#define USE_SKINNING":"",parameters.useVertexTexture?"#define BONE_TEXTURE":"",parameters.morphTargets?"#define USE_MORPHTARGETS":"",parameters.morphNormals&¶meters.flatShading===false?"#define USE_MORPHNORMALS":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+parameters.numClippingPlanes,parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.sizeAttenuation?"#define USE_SIZEATTENUATION":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&renderer.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR"," attribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS"," attribute vec3 morphTarget0;"," attribute vec3 morphTarget1;"," attribute vec3 morphTarget2;"," attribute vec3 morphTarget3;"," #ifdef USE_MORPHNORMALS"," attribute vec3 morphNormal0;"," attribute vec3 morphNormal1;"," attribute vec3 morphNormal2;"," attribute vec3 morphNormal3;"," #else"," attribute vec3 morphTarget4;"," attribute vec3 morphTarget5;"," attribute vec3 morphTarget6;"," attribute vec3 morphTarget7;"," #endif","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif","\n"].filter(filterEmptyLine).join("\n"); prefixFragment=[customExtensions,"precision "+parameters.precision+" float;","precision "+parameters.precision+" int;","#define SHADER_NAME "+shader.name,customDefines,parameters.alphaTest?"#define ALPHATEST "+parameters.alphaTest:"","#define GAMMA_FACTOR "+gammaFactorDefine,parameters.useFog&¶meters.fog?"#define USE_FOG":"",parameters.useFog&¶meters.fogExp?"#define FOG_EXP2":"",parameters.map?"#define USE_MAP":"",parameters.envMap?"#define USE_ENVMAP":"",parameters.envMap?"#define "+envMapTypeDefine:"",parameters.envMap?"#define "+envMapModeDefine:"",parameters.envMap?"#define "+envMapBlendingDefine:"",parameters.lightMap?"#define USE_LIGHTMAP":"",parameters.aoMap?"#define USE_AOMAP":"",parameters.emissiveMap?"#define USE_EMISSIVEMAP":"",parameters.bumpMap?"#define USE_BUMPMAP":"",parameters.normalMap?"#define USE_NORMALMAP":"",parameters.specularMap?"#define USE_SPECULARMAP":"",parameters.roughnessMap?"#define USE_ROUGHNESSMAP":"",parameters.metalnessMap?"#define USE_METALNESSMAP":"",parameters.alphaMap?"#define USE_ALPHAMAP":"",parameters.vertexColors?"#define USE_COLOR":"",parameters.gradientMap?"#define USE_GRADIENTMAP":"",parameters.flatShading?"#define FLAT_SHADED":"",parameters.doubleSided?"#define DOUBLE_SIDED":"",parameters.flipSided?"#define FLIP_SIDED":"","#define NUM_CLIPPING_PLANES "+parameters.numClippingPlanes,"#define UNION_CLIPPING_PLANES "+(parameters.numClippingPlanes-parameters.numClipIntersection),parameters.shadowMapEnabled?"#define USE_SHADOWMAP":"",parameters.shadowMapEnabled?"#define "+shadowMapTypeDefine:"",parameters.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",parameters.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",parameters.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",parameters.logarithmicDepthBuffer&&renderer.extensions.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",parameters.envMap&&renderer.extensions.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",parameters.toneMapping!==NoToneMapping?"#define TONE_MAPPING":"",parameters.toneMapping!==NoToneMapping?ShaderChunk["tonemapping_pars_fragment"]:"",parameters.toneMapping!==NoToneMapping?getToneMappingFunction("toneMapping",parameters.toneMapping):"",parameters.dithering?"#define DITHERING":"",parameters.outputEncoding||parameters.mapEncoding||parameters.envMapEncoding||parameters.emissiveMapEncoding?ShaderChunk["encodings_pars_fragment"]:"",parameters.mapEncoding?getTexelDecodingFunction("mapTexelToLinear",parameters.mapEncoding):"",parameters.envMapEncoding?getTexelDecodingFunction("envMapTexelToLinear",parameters.envMapEncoding):"",parameters.emissiveMapEncoding?getTexelDecodingFunction("emissiveMapTexelToLinear",parameters.emissiveMapEncoding):"",parameters.outputEncoding?getTexelEncodingFunction("linearToOutputTexel",parameters.outputEncoding):"",parameters.depthPacking?"#define DEPTH_PACKING "+material.depthPacking:"","\n"].filter(filterEmptyLine).join("\n")}vertexShader=parseIncludes(vertexShader);vertexShader=replaceLightNums(vertexShader,parameters);fragmentShader=parseIncludes(fragmentShader);fragmentShader=replaceLightNums(fragmentShader,parameters);if(!material.isShaderMaterial){vertexShader=unrollLoops(vertexShader);fragmentShader=unrollLoops(fragmentShader)}var vertexGlsl=prefixVertex+vertexShader;var fragmentGlsl=prefixFragment+fragmentShader;var glVertexShader=WebGLShader(gl,gl.VERTEX_SHADER,vertexGlsl);var glFragmentShader=WebGLShader(gl,gl.FRAGMENT_SHADER,fragmentGlsl);gl.attachShader(program,glVertexShader);gl.attachShader(program,glFragmentShader);if(material.index0AttributeName!==undefined){gl.bindAttribLocation(program,0,material.index0AttributeName)}else if(parameters.morphTargets===true){gl.bindAttribLocation(program,0,"position")}gl.linkProgram(program);var programLog=gl.getProgramInfoLog(program);var vertexLog=gl.getShaderInfoLog(glVertexShader);var fragmentLog=gl.getShaderInfoLog(glFragmentShader);var runnable=true;var haveDiagnostics=true;if(gl.getProgramParameter(program,gl.LINK_STATUS)===false){runnable=false;console.error("THREE.WebGLProgram: shader error: ",gl.getError(),"gl.VALIDATE_STATUS",gl.getProgramParameter(program,gl.VALIDATE_STATUS),"gl.getProgramInfoLog",programLog,vertexLog,fragmentLog)}else if(programLog!==""){console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",programLog)}else if(vertexLog===""||fragmentLog===""){haveDiagnostics=false}if(haveDiagnostics){this.diagnostics={runnable:runnable,material:material,programLog:programLog,vertexShader:{log:vertexLog,prefix:prefixVertex},fragmentShader:{log:fragmentLog,prefix:prefixFragment}}}gl.deleteShader(glVertexShader);gl.deleteShader(glFragmentShader);var cachedUniforms;this.getUniforms=function(){if(cachedUniforms===undefined){cachedUniforms=new WebGLUniforms(gl,program,renderer)}return cachedUniforms};var cachedAttributes;this.getAttributes=function(){if(cachedAttributes===undefined){cachedAttributes=fetchAttributeLocations(gl,program)}return cachedAttributes};this.destroy=function(){gl.deleteProgram(program);this.program=undefined};Object.defineProperties(this,{uniforms:{get:function(){console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms().");return this.getUniforms()}},attributes:{get:function(){console.warn("THREE.WebGLProgram: .attributes is now .getAttributes().");return this.getAttributes()}}});this.id=programIdCount++;this.code=code;this.usedTimes=1;this.program=program;this.vertexShader=glVertexShader;this.fragmentShader=glFragmentShader;return this}function WebGLPrograms(renderer,capabilities){var programs=[];var shaderIDs={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points"};var parameterNames=["precision","supportsVertexTextures","map","mapEncoding","envMap","envMapMode","envMapEncoding","lightMap","aoMap","emissiveMap","emissiveMapEncoding","bumpMap","normalMap","displacementMap","specularMap","roughnessMap","metalnessMap","gradientMap","alphaMap","combine","vertexColors","fog","useFog","fogExp","flatShading","sizeAttenuation","logarithmicDepthBuffer","skinning","maxBones","useVertexTexture","morphTargets","morphNormals","maxMorphTargets","maxMorphNormals","premultipliedAlpha","numDirLights","numPointLights","numSpotLights","numHemiLights","numRectAreaLights","shadowMapEnabled","shadowMapType","toneMapping","physicallyCorrectLights","alphaTest","doubleSided","flipSided","numClippingPlanes","numClipIntersection","depthPacking","dithering"];function allocateBones(object){var skeleton=object.skeleton;var bones=skeleton.bones;if(capabilities.floatVertexTextures){return 1024}else{var nVertexUniforms=capabilities.maxVertexUniforms;var nVertexMatrices=Math.floor((nVertexUniforms-20)/4);var maxBones=Math.min(nVertexMatrices,bones.length);if(maxBones0,maxBones:maxBones,useVertexTexture:capabilities.floatVertexTextures,morphTargets:material.morphTargets,morphNormals:material.morphNormals,maxMorphTargets:renderer.maxMorphTargets,maxMorphNormals:renderer.maxMorphNormals,numDirLights:lights.directional.length,numPointLights:lights.point.length,numSpotLights:lights.spot.length,numRectAreaLights:lights.rectArea.length,numHemiLights:lights.hemi.length,numClippingPlanes:nClipPlanes,numClipIntersection:nClipIntersection,dithering:material.dithering,shadowMapEnabled:renderer.shadowMap.enabled&&object.receiveShadow&&lights.shadows.length>0,shadowMapType:renderer.shadowMap.type,toneMapping:renderer.toneMapping,physicallyCorrectLights:renderer.physicallyCorrectLights,premultipliedAlpha:material.premultipliedAlpha,alphaTest:material.alphaTest,doubleSided:material.side===DoubleSide,flipSided:material.side===BackSide,depthPacking:material.depthPacking!==undefined?material.depthPacking:false};return parameters};this.getProgramCode=function(material,parameters){var array=[];if(parameters.shaderID){array.push(parameters.shaderID)}else{array.push(material.fragmentShader);array.push(material.vertexShader)}if(material.defines!==undefined){for(var name in material.defines){array.push(name);array.push(material.defines[name])}}for(var i=0;imaxSize||image.height>maxSize){var scale=maxSize/Math.max(image.width,image.height);var canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=Math.floor(image.width*scale);canvas.height=Math.floor(image.height*scale);var context=canvas.getContext("2d");context.drawImage(image,0,0,image.width,image.height,0,0,canvas.width,canvas.height);console.warn("THREE.WebGLRenderer: image is too big ("+image.width+"x"+image.height+"). Resized to "+canvas.width+"x"+canvas.height,image);return canvas}return image}function isPowerOfTwo(image){return _Math.isPowerOfTwo(image.width)&&_Math.isPowerOfTwo(image.height)}function makePowerOfTwo(image){if(image instanceof HTMLImageElement||image instanceof HTMLCanvasElement){var canvas=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");canvas.width=_Math.nearestPowerOfTwo(image.width);canvas.height=_Math.nearestPowerOfTwo(image.height);var context=canvas.getContext("2d");context.drawImage(image,0,0,canvas.width,canvas.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+image.width+"x"+image.height+"). Resized to "+canvas.width+"x"+canvas.height,image);return canvas}return image}function textureNeedsPowerOfTwo(texture){return texture.wrapS!==ClampToEdgeWrapping||texture.wrapT!==ClampToEdgeWrapping||texture.minFilter!==NearestFilter&&texture.minFilter!==LinearFilter}function textureNeedsGenerateMipmaps(texture,isPowerOfTwo){return texture.generateMipmaps&&isPowerOfTwo&&texture.minFilter!==NearestFilter&&texture.minFilter!==LinearFilter}function filterFallback(f){if(f===NearestFilter||f===NearestMipMapNearestFilter||f===NearestMipMapLinearFilter){return _gl.NEAREST}return _gl.LINEAR}function onTextureDispose(event){var texture=event.target;texture.removeEventListener("dispose",onTextureDispose);deallocateTexture(texture);infoMemory.textures--}function onRenderTargetDispose(event){var renderTarget=event.target;renderTarget.removeEventListener("dispose",onRenderTargetDispose);deallocateRenderTarget(renderTarget);infoMemory.textures--}function deallocateTexture(texture){var textureProperties=properties.get(texture);if(texture.image&&textureProperties.__image__webglTextureCube){_gl.deleteTexture(textureProperties.__image__webglTextureCube)}else{if(textureProperties.__webglInit===undefined)return;_gl.deleteTexture(textureProperties.__webglTexture)}properties.remove(texture)}function deallocateRenderTarget(renderTarget){var renderTargetProperties=properties.get(renderTarget);var textureProperties=properties.get(renderTarget.texture);if(!renderTarget)return;if(textureProperties.__webglTexture!==undefined){_gl.deleteTexture(textureProperties.__webglTexture)}if(renderTarget.depthTexture){renderTarget.depthTexture.dispose()}if(renderTarget.isWebGLRenderTargetCube){for(var i=0;i<6;i++){_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer[i]);if(renderTargetProperties.__webglDepthbuffer)_gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer[i])}}else{_gl.deleteFramebuffer(renderTargetProperties.__webglFramebuffer);if(renderTargetProperties.__webglDepthbuffer)_gl.deleteRenderbuffer(renderTargetProperties.__webglDepthbuffer)}properties.remove(renderTarget.texture);properties.remove(renderTarget)}function setTexture2D(texture,slot){var textureProperties=properties.get(texture);if(texture.version>0&&textureProperties.__version!==texture.version){var image=texture.image;if(image===undefined){console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",texture)}else if(image.complete===false){console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",texture)}else{uploadTexture(textureProperties,texture,slot);return}}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture)}function setTextureCube(texture,slot){var textureProperties=properties.get(texture);if(texture.image.length===6){if(texture.version>0&&textureProperties.__version!==texture.version){if(!textureProperties.__image__webglTextureCube){texture.addEventListener("dispose",onTextureDispose);textureProperties.__image__webglTextureCube=_gl.createTexture();infoMemory.textures++}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__image__webglTextureCube);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);var isCompressed=texture&&texture.isCompressedTexture;var isDataTexture=texture.image[0]&&texture.image[0].isDataTexture;var cubeImage=[];for(var i=0;i<6;i++){if(!isCompressed&&!isDataTexture){cubeImage[i]=clampToMaxSize(texture.image[i],capabilities.maxCubemapSize)}else{cubeImage[i]=isDataTexture?texture.image[i].image:texture.image[i]}}var image=cubeImage[0],isPowerOfTwoImage=isPowerOfTwo(image),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_CUBE_MAP,texture,isPowerOfTwoImage);for(var i=0;i<6;i++){if(!isCompressed){if(isDataTexture){state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,cubeImage[i].width,cubeImage[i].height,0,glFormat,glType,cubeImage[i].data)}else{state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,0,glFormat,glFormat,glType,cubeImage[i])}}else{var mipmap,mipmaps=cubeImage[i].mipmaps;for(var j=0,jl=mipmaps.length;j-1){state.compressedTexImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,mipmap.data)}else{console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()")}}else{state.texImage2D(_gl.TEXTURE_CUBE_MAP_POSITIVE_X+i,j,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}}}}if(textureNeedsGenerateMipmaps(texture,isPowerOfTwoImage)){_gl.generateMipmap(_gl.TEXTURE_CUBE_MAP)}textureProperties.__version=texture.version;if(texture.onUpdate)texture.onUpdate(texture)}else{state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,textureProperties.__image__webglTextureCube)}}}function setTextureCubeDynamic(texture,slot){state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_CUBE_MAP,properties.get(texture).__webglTexture)}function setTextureParameters(textureType,texture,isPowerOfTwoImage){var extension;if(isPowerOfTwoImage){_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_S,paramThreeToGL(texture.wrapS));_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_T,paramThreeToGL(texture.wrapT));_gl.texParameteri(textureType,_gl.TEXTURE_MAG_FILTER,paramThreeToGL(texture.magFilter));_gl.texParameteri(textureType,_gl.TEXTURE_MIN_FILTER,paramThreeToGL(texture.minFilter))}else{_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_S,_gl.CLAMP_TO_EDGE);_gl.texParameteri(textureType,_gl.TEXTURE_WRAP_T,_gl.CLAMP_TO_EDGE);if(texture.wrapS!==ClampToEdgeWrapping||texture.wrapT!==ClampToEdgeWrapping){console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",texture)}_gl.texParameteri(textureType,_gl.TEXTURE_MAG_FILTER,filterFallback(texture.magFilter));_gl.texParameteri(textureType,_gl.TEXTURE_MIN_FILTER,filterFallback(texture.minFilter));if(texture.minFilter!==NearestFilter&&texture.minFilter!==LinearFilter){console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",texture)}}extension=extensions.get("EXT_texture_filter_anisotropic");if(extension){if(texture.type===FloatType&&extensions.get("OES_texture_float_linear")===null)return;if(texture.type===HalfFloatType&&extensions.get("OES_texture_half_float_linear")===null)return;if(texture.anisotropy>1||properties.get(texture).__currentAnisotropy){_gl.texParameterf(textureType,extension.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(texture.anisotropy,capabilities.getMaxAnisotropy()));properties.get(texture).__currentAnisotropy=texture.anisotropy}}}function uploadTexture(textureProperties,texture,slot){if(textureProperties.__webglInit===undefined){textureProperties.__webglInit=true;texture.addEventListener("dispose",onTextureDispose);textureProperties.__webglTexture=_gl.createTexture();infoMemory.textures++}state.activeTexture(_gl.TEXTURE0+slot);state.bindTexture(_gl.TEXTURE_2D,textureProperties.__webglTexture);_gl.pixelStorei(_gl.UNPACK_FLIP_Y_WEBGL,texture.flipY);_gl.pixelStorei(_gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,texture.premultiplyAlpha);_gl.pixelStorei(_gl.UNPACK_ALIGNMENT,texture.unpackAlignment);var image=clampToMaxSize(texture.image,capabilities.maxTextureSize);if(textureNeedsPowerOfTwo(texture)&&isPowerOfTwo(image)===false){image=makePowerOfTwo(image)}var isPowerOfTwoImage=isPowerOfTwo(image),glFormat=paramThreeToGL(texture.format),glType=paramThreeToGL(texture.type);setTextureParameters(_gl.TEXTURE_2D,texture,isPowerOfTwoImage);var mipmap,mipmaps=texture.mipmaps;if(texture.isDepthTexture){var internalFormat=_gl.DEPTH_COMPONENT;if(texture.type===FloatType){if(!_isWebGL2)throw new Error("Float Depth Texture only supported in WebGL2.0");internalFormat=_gl.DEPTH_COMPONENT32F}else if(_isWebGL2){internalFormat=_gl.DEPTH_COMPONENT16}if(texture.format===DepthFormat&&internalFormat===_gl.DEPTH_COMPONENT){if(texture.type!==UnsignedShortType&&texture.type!==UnsignedIntType){console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.");texture.type=UnsignedShortType;glType=paramThreeToGL(texture.type)}}if(texture.format===DepthStencilFormat){internalFormat=_gl.DEPTH_STENCIL;if(texture.type!==UnsignedInt248Type){console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.");texture.type=UnsignedInt248Type;glType=paramThreeToGL(texture.type)}}state.texImage2D(_gl.TEXTURE_2D,0,internalFormat,image.width,image.height,0,glFormat,glType,null)}else if(texture.isDataTexture){if(mipmaps.length>0&&isPowerOfTwoImage){for(var i=0,il=mipmaps.length;i-1){state.compressedTexImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,mipmap.data)}else{console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()")}}else{state.texImage2D(_gl.TEXTURE_2D,i,glFormat,mipmap.width,mipmap.height,0,glFormat,glType,mipmap.data)}}}else{if(mipmaps.length>0&&isPowerOfTwoImage){for(var i=0,il=mipmaps.length;i=1;var currentTextureSlot=null;var currentBoundTextures={};var currentScissor=new Vector4;var currentViewport=new Vector4;function createTexture(type,target,count){var data=new Uint8Array(4);var texture=gl.createTexture();gl.bindTexture(type,texture);gl.texParameteri(type,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(type,gl.TEXTURE_MAG_FILTER,gl.NEAREST);for(var i=0;i0&&gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.HIGH_FLOAT).precision>0){return"highp"}precision="mediump"}if(precision==="mediump"){if(gl.getShaderPrecisionFormat(gl.VERTEX_SHADER,gl.MEDIUM_FLOAT).precision>0&&gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.MEDIUM_FLOAT).precision>0){return"mediump"}}return"lowp"}var precision=parameters.precision!==undefined?parameters.precision:"highp";var maxPrecision=getMaxPrecision(precision);if(maxPrecision!==precision){console.warn("THREE.WebGLRenderer:",precision,"not supported, using",maxPrecision,"instead.");precision=maxPrecision}var logarithmicDepthBuffer=parameters.logarithmicDepthBuffer===true&&!!extensions.get("EXT_frag_depth");var maxTextures=gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);var maxVertexTextures=gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS);var maxTextureSize=gl.getParameter(gl.MAX_TEXTURE_SIZE);var maxCubemapSize=gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);var maxAttributes=gl.getParameter(gl.MAX_VERTEX_ATTRIBS);var maxVertexUniforms=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);var maxVaryings=gl.getParameter(gl.MAX_VARYING_VECTORS);var maxFragmentUniforms=gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS);var vertexTextures=maxVertexTextures>0;var floatFragmentTextures=!!extensions.get("OES_texture_float");var floatVertexTextures=vertexTextures&&floatFragmentTextures;return{getMaxAnisotropy:getMaxAnisotropy,getMaxPrecision:getMaxPrecision,precision:precision,logarithmicDepthBuffer:logarithmicDepthBuffer,maxTextures:maxTextures,maxVertexTextures:maxVertexTextures,maxTextureSize:maxTextureSize,maxCubemapSize:maxCubemapSize,maxAttributes:maxAttributes,maxVertexUniforms:maxVertexUniforms,maxVaryings:maxVaryings,maxFragmentUniforms:maxFragmentUniforms,vertexTextures:vertexTextures,floatFragmentTextures:floatFragmentTextures,floatVertexTextures:floatVertexTextures}}function ArrayCamera(array){PerspectiveCamera.call(this);this.cameras=array||[]}ArrayCamera.prototype=Object.assign(Object.create(PerspectiveCamera.prototype),{constructor:ArrayCamera,isArrayCamera:true});function WebVRManager(renderer){var scope=this;var device=null;var frameData=null;if("VRFrameData"in window){frameData=new window.VRFrameData}var matrixWorldInverse=new Matrix4;var standingMatrix=new Matrix4;var standingMatrixInverse=new Matrix4;var cameraL=new PerspectiveCamera;cameraL.bounds=new Vector4(0,0,.5,1);cameraL.layers.enable(1);var cameraR=new PerspectiveCamera;cameraR.bounds=new Vector4(.5,0,.5,1);cameraR.layers.enable(2);var cameraVR=new ArrayCamera([cameraL,cameraR]);cameraVR.layers.enable(1);cameraVR.layers.enable(2);var currentSize,currentPixelRatio;function onVRDisplayPresentChange(){if(device.isPresenting){var eyeParameters=device.getEyeParameters("left");var renderWidth=eyeParameters.renderWidth;var renderHeight=eyeParameters.renderHeight;currentPixelRatio=renderer.getPixelRatio();currentSize=renderer.getSize();renderer.setDrawingBufferSize(renderWidth*2,renderHeight,1)}else if(scope.enabled){renderer.setDrawingBufferSize(currentSize.width,currentSize.height,currentPixelRatio)}}window.addEventListener("vrdisplaypresentchange",onVRDisplayPresentChange,false);this.enabled=false;this.standing=false;this.getDevice=function(){return device};this.setDevice=function(value){if(value!==undefined)device=value};this.getCamera=function(camera){if(device===null)return camera;device.depthNear=camera.near;device.depthFar=camera.far;device.getFrameData(frameData);var pose=frameData.pose;if(pose.position!==null){camera.position.fromArray(pose.position)}else{camera.position.set(0,0,0)}if(pose.orientation!==null){camera.quaternion.fromArray(pose.orientation)}camera.updateMatrixWorld();var stageParameters=device.stageParameters;if(this.standing&&stageParameters){standingMatrix.fromArray(stageParameters.sittingToStandingTransform);standingMatrixInverse.getInverse(standingMatrix);camera.matrixWorld.multiply(standingMatrix);camera.matrixWorldInverse.multiply(standingMatrixInverse)}if(device.isPresenting===false)return camera;cameraVR.matrixWorld.copy(camera.matrixWorld);cameraVR.matrixWorldInverse.copy(camera.matrixWorldInverse);cameraL.matrixWorldInverse.fromArray(frameData.leftViewMatrix);cameraR.matrixWorldInverse.fromArray(frameData.rightViewMatrix);if(this.standing&&stageParameters){cameraL.matrixWorldInverse.multiply(standingMatrixInverse);cameraR.matrixWorldInverse.multiply(standingMatrixInverse)}var parent=camera.parent;if(parent!==null){matrixWorldInverse.getInverse(parent.matrixWorld);cameraL.matrixWorldInverse.multiply(matrixWorldInverse);cameraR.matrixWorldInverse.multiply(matrixWorldInverse)}cameraL.matrixWorld.getInverse(cameraL.matrixWorldInverse);cameraR.matrixWorld.getInverse(cameraR.matrixWorldInverse);cameraL.projectionMatrix.fromArray(frameData.leftProjectionMatrix);cameraR.projectionMatrix.fromArray(frameData.rightProjectionMatrix);cameraVR.projectionMatrix.copy(cameraL.projectionMatrix);var layers=device.getLayers();if(layers.length){var layer=layers[0];if(layer.leftBounds!==null&&layer.leftBounds.length===4){cameraL.bounds.fromArray(layer.leftBounds)}if(layer.rightBounds!==null&&layer.rightBounds.length===4){cameraR.bounds.fromArray(layer.rightBounds)}}return cameraVR};this.getStandingMatrix=function(){return standingMatrix};this.submitFrame=function(){if(device&&device.isPresenting)device.submitFrame()}}function WebGLExtensions(gl){var extensions={};return{get:function(name){if(extensions[name]!==undefined){return extensions[name]}var extension;switch(name){case"WEBGL_depth_texture":extension=gl.getExtension("WEBGL_depth_texture")||gl.getExtension("MOZ_WEBGL_depth_texture")||gl.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":extension=gl.getExtension("EXT_texture_filter_anisotropic")||gl.getExtension("MOZ_EXT_texture_filter_anisotropic")||gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":extension=gl.getExtension("WEBGL_compressed_texture_s3tc")||gl.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":extension=gl.getExtension("WEBGL_compressed_texture_pvrtc")||gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case"WEBGL_compressed_texture_etc1":extension=gl.getExtension("WEBGL_compressed_texture_etc1");break;default:extension=gl.getExtension(name)}if(extension===null){console.warn("THREE.WebGLRenderer: "+name+" extension not supported.")}extensions[name]=extension;return extension}}}function WebGLClipping(){var scope=this,globalState=null,numGlobalPlanes=0,localClippingEnabled=false,renderingShadows=false,plane=new Plane,viewNormalMatrix=new Matrix3,uniform={value:null,needsUpdate:false};this.uniform=uniform;this.numPlanes=0;this.numIntersection=0;this.init=function(planes,enableLocalClipping,camera){var enabled=planes.length!==0||enableLocalClipping||numGlobalPlanes!==0||localClippingEnabled;localClippingEnabled=enableLocalClipping;globalState=projectPlanes(planes,camera,0);numGlobalPlanes=planes.length;return enabled};this.beginShadows=function(){renderingShadows=true;projectPlanes(null)};this.endShadows=function(){renderingShadows=false;resetGlobalState()};this.setState=function(planes,clipIntersection,clipShadows,camera,cache,fromCache){if(!localClippingEnabled||planes===null||planes.length===0||renderingShadows&&!clipShadows){if(renderingShadows){projectPlanes(null)}else{resetGlobalState()}}else{var nGlobal=renderingShadows?0:numGlobalPlanes,lGlobal=nGlobal*4,dstArray=cache.clippingState||null;uniform.value=dstArray;dstArray=projectPlanes(planes,camera,lGlobal,fromCache);for(var i=0;i!==lGlobal;++i){dstArray[i]=globalState[i]}cache.clippingState=dstArray;this.numIntersection=clipIntersection?this.numPlanes:0;this.numPlanes+=nGlobal}};function resetGlobalState(){if(uniform.value!==globalState){uniform.value=globalState;uniform.needsUpdate=numGlobalPlanes>0}scope.numPlanes=numGlobalPlanes;scope.numIntersection=0}function projectPlanes(planes,camera,dstOffset,skipTransform){var nPlanes=planes!==null?planes.length:0,dstArray=null;if(nPlanes!==0){dstArray=uniform.value;if(skipTransform!==true||dstArray===null){var flatSize=dstOffset+nPlanes*4,viewMatrix=camera.matrixWorldInverse;viewNormalMatrix.getNormalMatrix(viewMatrix);if(dstArray===null||dstArray.length8){activeInfluences.length=8}var morphAttributes=geometry.morphAttributes;for(var i=0,l=activeInfluences.length;i0){renderer.renderInstances(geometry,drawStart,drawCount)}}else{renderer.render(drawStart,drawCount)}};function setupVertexAttributes(material,program,geometry,startIndex){if(geometry&&geometry.isInstancedBufferGeometry){if(extensions.get("ANGLE_instanced_arrays")===null){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}}if(startIndex===undefined)startIndex=0;state.initAttributes();var geometryAttributes=geometry.attributes;var programAttributes=program.getAttributes();var materialDefaultAttributeValues=material.defaultAttributeValues;for(var name in programAttributes){var programAttribute=programAttributes[name];if(programAttribute>=0){var geometryAttribute=geometryAttributes[name];if(geometryAttribute!==undefined){var normalized=geometryAttribute.normalized;var size=geometryAttribute.itemSize;var attribute=attributes.get(geometryAttribute);var buffer=attribute.buffer;var type=attribute.type;var bytesPerElement=attribute.bytesPerElement;if(geometryAttribute.isInterleavedBufferAttribute){var data=geometryAttribute.data;var stride=data.stride;var offset=geometryAttribute.offset;if(data&&data.isInstancedInterleavedBuffer){state.enableAttributeAndDivisor(programAttribute,data.meshPerAttribute);if(geometry.maxInstancedCount===undefined){geometry.maxInstancedCount=data.meshPerAttribute*data.count}}else{state.enableAttribute(programAttribute)}_gl.bindBuffer(_gl.ARRAY_BUFFER,buffer);_gl.vertexAttribPointer(programAttribute,size,type,normalized,stride*bytesPerElement,(startIndex*stride+offset)*bytesPerElement)}else{if(geometryAttribute.isInstancedBufferAttribute){state.enableAttributeAndDivisor(programAttribute,geometryAttribute.meshPerAttribute);if(geometry.maxInstancedCount===undefined){geometry.maxInstancedCount=geometryAttribute.meshPerAttribute*geometryAttribute.count}}else{state.enableAttribute(programAttribute)}_gl.bindBuffer(_gl.ARRAY_BUFFER,buffer);_gl.vertexAttribPointer(programAttribute,size,type,normalized,0,startIndex*size*bytesPerElement)}}else if(materialDefaultAttributeValues!==undefined){var value=materialDefaultAttributeValues[name];if(value!==undefined){switch(value.length){case 2:_gl.vertexAttrib2fv(programAttribute,value);break;case 3:_gl.vertexAttrib3fv(programAttribute,value);break;case 4:_gl.vertexAttrib4fv(programAttribute,value);break;default:_gl.vertexAttrib1fv(programAttribute,value)}}}}}state.disableUnusedAttributes()}this.compile=function(scene,camera){lights=[];scene.traverse(function(object){if(object.isLight){lights.push(object)}});setupLights(lights,camera);scene.traverse(function(object){if(object.material){if(Array.isArray(object.material)){for(var i=0;i=0){material.numSupportedMorphTargets++}}}if(material.morphNormals){material.numSupportedMorphNormals=0;for(var i=0;i<_this.maxMorphNormals;i++){if(programAttributes["morphNormal"+i]>=0){material.numSupportedMorphNormals++}}}var uniforms=materialProperties.shader.uniforms;if(!material.isShaderMaterial&&!material.isRawShaderMaterial||material.clipping===true){materialProperties.numClippingPlanes=_clipping.numPlanes;materialProperties.numIntersection=_clipping.numIntersection;uniforms.clippingPlanes=_clipping.uniform}materialProperties.fog=fog;materialProperties.lightsHash=_lights.hash;if(material.lights){uniforms.ambientLightColor.value=_lights.ambient;uniforms.directionalLights.value=_lights.directional;uniforms.spotLights.value=_lights.spot;uniforms.rectAreaLights.value=_lights.rectArea;uniforms.pointLights.value=_lights.point;uniforms.hemisphereLights.value=_lights.hemi;uniforms.directionalShadowMap.value=_lights.directionalShadowMap;uniforms.directionalShadowMatrix.value=_lights.directionalShadowMatrix;uniforms.spotShadowMap.value=_lights.spotShadowMap;uniforms.spotShadowMatrix.value=_lights.spotShadowMatrix;uniforms.pointShadowMap.value=_lights.pointShadowMap;uniforms.pointShadowMatrix.value=_lights.pointShadowMatrix}var progUniforms=materialProperties.program.getUniforms(),uniformsList=WebGLUniforms.seqWithValue(progUniforms.seq,uniforms);materialProperties.uniformsList=uniformsList}function setProgram(camera,fog,material,object){_usedTextureUnits=0;var materialProperties=properties.get(material);if(_clippingEnabled){if(_localClippingEnabled||camera!==_currentCamera){var useCache=camera===_currentCamera&&material.id===_currentMaterialId;_clipping.setState(material.clippingPlanes,material.clipIntersection,material.clipShadows,camera,materialProperties,useCache)}}if(material.needsUpdate===false){if(materialProperties.program===undefined){material.needsUpdate=true}else if(material.fog&&materialProperties.fog!==fog){material.needsUpdate=true}else if(material.lights&&materialProperties.lightsHash!==_lights.hash){material.needsUpdate=true}else if(materialProperties.numClippingPlanes!==undefined&&(materialProperties.numClippingPlanes!==_clipping.numPlanes||materialProperties.numIntersection!==_clipping.numIntersection)){material.needsUpdate=true}}if(material.needsUpdate){initMaterial(material,fog,object);material.needsUpdate=false}var refreshProgram=false;var refreshMaterial=false;var refreshLights=false;var program=materialProperties.program,p_uniforms=program.getUniforms(),m_uniforms=materialProperties.shader.uniforms;if(program.id!==_currentProgram){_gl.useProgram(program.program);_currentProgram=program.id;refreshProgram=true;refreshMaterial=true;refreshLights=true}if(material.id!==_currentMaterialId){_currentMaterialId=material.id;refreshMaterial=true}if(refreshProgram||camera!==_currentCamera){p_uniforms.setValue(_gl,"projectionMatrix",camera.projectionMatrix);if(capabilities.logarithmicDepthBuffer){p_uniforms.setValue(_gl,"logDepthBufFC",2/(Math.log(camera.far+1)/Math.LN2))}if(_currentCamera!==(_currentArrayCamera||camera)){_currentCamera=_currentArrayCamera||camera;refreshMaterial=true;refreshLights=true}if(material.isShaderMaterial||material.isMeshPhongMaterial||material.isMeshStandardMaterial||material.envMap){var uCamPos=p_uniforms.map.cameraPosition;if(uCamPos!==undefined){uCamPos.setValue(_gl,_vector3.setFromMatrixPosition(camera.matrixWorld))}}if(material.isMeshPhongMaterial||material.isMeshLambertMaterial||material.isMeshBasicMaterial||material.isMeshStandardMaterial||material.isShaderMaterial||material.skinning){p_uniforms.setValue(_gl,"viewMatrix",camera.matrixWorldInverse)}}if(material.skinning){p_uniforms.setOptional(_gl,object,"bindMatrix");p_uniforms.setOptional(_gl,object,"bindMatrixInverse");var skeleton=object.skeleton;if(skeleton){var bones=skeleton.bones;if(capabilities.floatVertexTextures){if(skeleton.boneTexture===undefined){var size=Math.sqrt(bones.length*4);size=_Math.nextPowerOfTwo(Math.ceil(size));size=Math.max(size,4);var boneMatrices=new Float32Array(size*size*4);boneMatrices.set(skeleton.boneMatrices);var boneTexture=new DataTexture(boneMatrices,size,size,RGBAFormat,FloatType);skeleton.boneMatrices=boneMatrices;skeleton.boneTexture=boneTexture;skeleton.boneTextureSize=size}p_uniforms.setValue(_gl,"boneTexture",skeleton.boneTexture);p_uniforms.setValue(_gl,"boneTextureSize",skeleton.boneTextureSize)}else{p_uniforms.setOptional(_gl,skeleton,"boneMatrices")}}}if(refreshMaterial){p_uniforms.setValue(_gl,"toneMappingExposure",_this.toneMappingExposure);p_uniforms.setValue(_gl,"toneMappingWhitePoint",_this.toneMappingWhitePoint);if(material.lights){markUniformsLightsNeedsUpdate(m_uniforms,refreshLights)}if(fog&&material.fog){refreshUniformsFog(m_uniforms,fog)}if(material.isMeshBasicMaterial||material.isMeshLambertMaterial||material.isMeshPhongMaterial||material.isMeshStandardMaterial||material.isMeshNormalMaterial||material.isMeshDepthMaterial){refreshUniformsCommon(m_uniforms,material)}if(material.isLineBasicMaterial){refreshUniformsLine(m_uniforms,material)}else if(material.isLineDashedMaterial){refreshUniformsLine(m_uniforms,material);refreshUniformsDash(m_uniforms,material)}else if(material.isPointsMaterial){refreshUniformsPoints(m_uniforms,material)}else if(material.isMeshLambertMaterial){refreshUniformsLambert(m_uniforms,material)}else if(material.isMeshToonMaterial){refreshUniformsToon(m_uniforms,material)}else if(material.isMeshPhongMaterial){refreshUniformsPhong(m_uniforms,material)}else if(material.isMeshPhysicalMaterial){refreshUniformsPhysical(m_uniforms,material)}else if(material.isMeshStandardMaterial){refreshUniformsStandard(m_uniforms,material)}else if(material.isMeshDepthMaterial){if(material.displacementMap){m_uniforms.displacementMap.value=material.displacementMap;m_uniforms.displacementScale.value=material.displacementScale;m_uniforms.displacementBias.value=material.displacementBias}}else if(material.isMeshNormalMaterial){refreshUniformsNormal(m_uniforms,material)}if(m_uniforms.ltcMat!==undefined)m_uniforms.ltcMat.value=UniformsLib.LTC_MAT_TEXTURE;if(m_uniforms.ltcMag!==undefined)m_uniforms.ltcMag.value=UniformsLib.LTC_MAG_TEXTURE;WebGLUniforms.upload(_gl,materialProperties.uniformsList,m_uniforms,_this)}p_uniforms.setValue(_gl,"modelViewMatrix",object.modelViewMatrix);p_uniforms.setValue(_gl,"normalMatrix",object.normalMatrix);p_uniforms.setValue(_gl,"modelMatrix",object.matrixWorld);return program}function refreshUniformsCommon(uniforms,material){uniforms.opacity.value=material.opacity;uniforms.diffuse.value=material.color;if(material.emissive){uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity)}uniforms.map.value=material.map;uniforms.specularMap.value=material.specularMap;uniforms.alphaMap.value=material.alphaMap;if(material.lightMap){uniforms.lightMap.value=material.lightMap;uniforms.lightMapIntensity.value=material.lightMapIntensity}if(material.aoMap){uniforms.aoMap.value=material.aoMap;uniforms.aoMapIntensity.value=material.aoMapIntensity}var uvScaleMap;if(material.map){uvScaleMap=material.map}else if(material.specularMap){uvScaleMap=material.specularMap}else if(material.displacementMap){uvScaleMap=material.displacementMap}else if(material.normalMap){uvScaleMap=material.normalMap}else if(material.bumpMap){uvScaleMap=material.bumpMap}else if(material.roughnessMap){uvScaleMap=material.roughnessMap}else if(material.metalnessMap){uvScaleMap=material.metalnessMap}else if(material.alphaMap){uvScaleMap=material.alphaMap}else if(material.emissiveMap){uvScaleMap=material.emissiveMap}if(uvScaleMap!==undefined){if(uvScaleMap.isWebGLRenderTarget){uvScaleMap=uvScaleMap.texture}var offset=uvScaleMap.offset;var repeat=uvScaleMap.repeat;uniforms.offsetRepeat.value.set(offset.x,offset.y,repeat.x,repeat.y)}uniforms.envMap.value=material.envMap;uniforms.flipEnvMap.value=!(material.envMap&&material.envMap.isCubeTexture)?1:-1;uniforms.reflectivity.value=material.reflectivity;uniforms.refractionRatio.value=material.refractionRatio}function refreshUniformsLine(uniforms,material){uniforms.diffuse.value=material.color;uniforms.opacity.value=material.opacity}function refreshUniformsDash(uniforms,material){uniforms.dashSize.value=material.dashSize;uniforms.totalSize.value=material.dashSize+material.gapSize;uniforms.scale.value=material.scale}function refreshUniformsPoints(uniforms,material){uniforms.diffuse.value=material.color;uniforms.opacity.value=material.opacity;uniforms.size.value=material.size*_pixelRatio;uniforms.scale.value=_height*.5;uniforms.map.value=material.map;if(material.map!==null){var offset=material.map.offset;var repeat=material.map.repeat;uniforms.offsetRepeat.value.set(offset.x,offset.y,repeat.x,repeat.y)}}function refreshUniformsFog(uniforms,fog){uniforms.fogColor.value=fog.color;if(fog.isFog){uniforms.fogNear.value=fog.near;uniforms.fogFar.value=fog.far}else if(fog.isFogExp2){uniforms.fogDensity.value=fog.density}}function refreshUniformsLambert(uniforms,material){if(material.emissiveMap){uniforms.emissiveMap.value=material.emissiveMap}}function refreshUniformsPhong(uniforms,material){uniforms.specular.value=material.specular;uniforms.shininess.value=Math.max(material.shininess,1e-4);if(material.emissiveMap){uniforms.emissiveMap.value=material.emissiveMap}if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale)}if(material.displacementMap){uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias}}function refreshUniformsToon(uniforms,material){refreshUniformsPhong(uniforms,material);if(material.gradientMap){uniforms.gradientMap.value=material.gradientMap}}function refreshUniformsStandard(uniforms,material){uniforms.roughness.value=material.roughness;uniforms.metalness.value=material.metalness;if(material.roughnessMap){uniforms.roughnessMap.value=material.roughnessMap}if(material.metalnessMap){uniforms.metalnessMap.value=material.metalnessMap}if(material.emissiveMap){uniforms.emissiveMap.value=material.emissiveMap}if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale)}if(material.displacementMap){uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias}if(material.envMap){uniforms.envMapIntensity.value=material.envMapIntensity}}function refreshUniformsPhysical(uniforms,material){uniforms.clearCoat.value=material.clearCoat;uniforms.clearCoatRoughness.value=material.clearCoatRoughness;refreshUniformsStandard(uniforms,material)}function refreshUniformsNormal(uniforms,material){if(material.bumpMap){uniforms.bumpMap.value=material.bumpMap;uniforms.bumpScale.value=material.bumpScale}if(material.normalMap){uniforms.normalMap.value=material.normalMap;uniforms.normalScale.value.copy(material.normalScale)}if(material.displacementMap){uniforms.displacementMap.value=material.displacementMap;uniforms.displacementScale.value=material.displacementScale;uniforms.displacementBias.value=material.displacementBias}}function markUniformsLightsNeedsUpdate(uniforms,value){uniforms.ambientLightColor.needsUpdate=value;uniforms.directionalLights.needsUpdate=value;uniforms.pointLights.needsUpdate=value;uniforms.spotLights.needsUpdate=value;uniforms.rectAreaLights.needsUpdate=value;uniforms.hemisphereLights.needsUpdate=value}function setupShadows(lights){var lightShadowsLength=0;for(var i=0,l=lights.length;i=capabilities.maxTextures){console.warn("THREE.WebGLRenderer: Trying to use "+textureUnit+" texture units while this GPU supports only "+capabilities.maxTextures)}_usedTextureUnits+=1;return textureUnit}this.allocTextureUnit=allocTextureUnit;this.setTexture2D=function(){var warned=false;return function setTexture2D(texture,slot){if(texture&&texture.isWebGLRenderTarget){if(!warned){console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.");warned=true}texture=texture.texture}textures.setTexture2D(texture,slot)}}();this.setTexture=function(){var warned=false;return function setTexture(texture,slot){if(!warned){console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.");warned=true}textures.setTexture2D(texture,slot)}}();this.setTextureCube=function(){var warned=false;return function setTextureCube(texture,slot){if(texture&&texture.isWebGLRenderTargetCube){if(!warned){console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.");warned=true}texture=texture.texture}if(texture&&texture.isCubeTexture||Array.isArray(texture.image)&&texture.image.length===6){textures.setTextureCube(texture,slot)}else{textures.setTextureCubeDynamic(texture,slot)}}}();this.getRenderTarget=function(){return _currentRenderTarget};this.setRenderTarget=function(renderTarget){_currentRenderTarget=renderTarget;if(renderTarget&&properties.get(renderTarget).__webglFramebuffer===undefined){textures.setupRenderTarget(renderTarget)}var isCube=renderTarget&&renderTarget.isWebGLRenderTargetCube;var framebuffer;if(renderTarget){var renderTargetProperties=properties.get(renderTarget);if(isCube){framebuffer=renderTargetProperties.__webglFramebuffer[renderTarget.activeCubeFace]}else{framebuffer=renderTargetProperties.__webglFramebuffer}_currentScissor.copy(renderTarget.scissor);_currentScissorTest=renderTarget.scissorTest;_currentViewport.copy(renderTarget.viewport)}else{framebuffer=null;_currentScissor.copy(_scissor).multiplyScalar(_pixelRatio);_currentScissorTest=_scissorTest;_currentViewport.copy(_viewport).multiplyScalar(_pixelRatio)}if(_currentFramebuffer!==framebuffer){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);_currentFramebuffer=framebuffer}state.scissor(_currentScissor);state.setScissorTest(_currentScissorTest);state.viewport(_currentViewport);if(isCube){var textureProperties=properties.get(renderTarget.texture);_gl.framebufferTexture2D(_gl.FRAMEBUFFER,_gl.COLOR_ATTACHMENT0,_gl.TEXTURE_CUBE_MAP_POSITIVE_X+renderTarget.activeCubeFace,textureProperties.__webglTexture,renderTarget.activeMipMapLevel)}};this.readRenderTargetPixels=function(renderTarget,x,y,width,height,buffer){if(!(renderTarget&&renderTarget.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}var framebuffer=properties.get(renderTarget).__webglFramebuffer;if(framebuffer){var restore=false;if(framebuffer!==_currentFramebuffer){_gl.bindFramebuffer(_gl.FRAMEBUFFER,framebuffer);restore=true}try{var texture=renderTarget.texture;var textureFormat=texture.format;var textureType=texture.type;if(textureFormat!==RGBAFormat&¶mThreeToGL(textureFormat)!==_gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(textureType!==UnsignedByteType&¶mThreeToGL(textureType)!==_gl.getParameter(_gl.IMPLEMENTATION_COLOR_READ_TYPE)&&!(textureType===FloatType&&(extensions.get("OES_texture_float")||extensions.get("WEBGL_color_buffer_float")))&&!(textureType===HalfFloatType&&extensions.get("EXT_color_buffer_half_float"))){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}if(_gl.checkFramebufferStatus(_gl.FRAMEBUFFER)===_gl.FRAMEBUFFER_COMPLETE){if(x>=0&&x<=renderTarget.width-width&&(y>=0&&y<=renderTarget.height-height)){_gl.readPixels(x,y,width,height,paramThreeToGL(textureFormat),paramThreeToGL(textureType),buffer)}}else{console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}}finally{if(restore){_gl.bindFramebuffer(_gl.FRAMEBUFFER,_currentFramebuffer)}}}};function paramThreeToGL(p){var extension;if(p===RepeatWrapping)return _gl.REPEAT;if(p===ClampToEdgeWrapping)return _gl.CLAMP_TO_EDGE;if(p===MirroredRepeatWrapping)return _gl.MIRRORED_REPEAT;if(p===NearestFilter)return _gl.NEAREST;if(p===NearestMipMapNearestFilter)return _gl.NEAREST_MIPMAP_NEAREST;if(p===NearestMipMapLinearFilter)return _gl.NEAREST_MIPMAP_LINEAR;if(p===LinearFilter)return _gl.LINEAR;if(p===LinearMipMapNearestFilter)return _gl.LINEAR_MIPMAP_NEAREST;if(p===LinearMipMapLinearFilter)return _gl.LINEAR_MIPMAP_LINEAR;if(p===UnsignedByteType)return _gl.UNSIGNED_BYTE;if(p===UnsignedShort4444Type)return _gl.UNSIGNED_SHORT_4_4_4_4; if(p===UnsignedShort5551Type)return _gl.UNSIGNED_SHORT_5_5_5_1;if(p===UnsignedShort565Type)return _gl.UNSIGNED_SHORT_5_6_5;if(p===ByteType)return _gl.BYTE;if(p===ShortType)return _gl.SHORT;if(p===UnsignedShortType)return _gl.UNSIGNED_SHORT;if(p===IntType)return _gl.INT;if(p===UnsignedIntType)return _gl.UNSIGNED_INT;if(p===FloatType)return _gl.FLOAT;if(p===HalfFloatType){extension=extensions.get("OES_texture_half_float");if(extension!==null)return extension.HALF_FLOAT_OES}if(p===AlphaFormat)return _gl.ALPHA;if(p===RGBFormat)return _gl.RGB;if(p===RGBAFormat)return _gl.RGBA;if(p===LuminanceFormat)return _gl.LUMINANCE;if(p===LuminanceAlphaFormat)return _gl.LUMINANCE_ALPHA;if(p===DepthFormat)return _gl.DEPTH_COMPONENT;if(p===DepthStencilFormat)return _gl.DEPTH_STENCIL;if(p===AddEquation)return _gl.FUNC_ADD;if(p===SubtractEquation)return _gl.FUNC_SUBTRACT;if(p===ReverseSubtractEquation)return _gl.FUNC_REVERSE_SUBTRACT;if(p===ZeroFactor)return _gl.ZERO;if(p===OneFactor)return _gl.ONE;if(p===SrcColorFactor)return _gl.SRC_COLOR;if(p===OneMinusSrcColorFactor)return _gl.ONE_MINUS_SRC_COLOR;if(p===SrcAlphaFactor)return _gl.SRC_ALPHA;if(p===OneMinusSrcAlphaFactor)return _gl.ONE_MINUS_SRC_ALPHA;if(p===DstAlphaFactor)return _gl.DST_ALPHA;if(p===OneMinusDstAlphaFactor)return _gl.ONE_MINUS_DST_ALPHA;if(p===DstColorFactor)return _gl.DST_COLOR;if(p===OneMinusDstColorFactor)return _gl.ONE_MINUS_DST_COLOR;if(p===SrcAlphaSaturateFactor)return _gl.SRC_ALPHA_SATURATE;if(p===RGB_S3TC_DXT1_Format||p===RGBA_S3TC_DXT1_Format||p===RGBA_S3TC_DXT3_Format||p===RGBA_S3TC_DXT5_Format){extension=extensions.get("WEBGL_compressed_texture_s3tc");if(extension!==null){if(p===RGB_S3TC_DXT1_Format)return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;if(p===RGBA_S3TC_DXT1_Format)return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(p===RGBA_S3TC_DXT3_Format)return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(p===RGBA_S3TC_DXT5_Format)return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT}}if(p===RGB_PVRTC_4BPPV1_Format||p===RGB_PVRTC_2BPPV1_Format||p===RGBA_PVRTC_4BPPV1_Format||p===RGBA_PVRTC_2BPPV1_Format){extension=extensions.get("WEBGL_compressed_texture_pvrtc");if(extension!==null){if(p===RGB_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(p===RGB_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(p===RGBA_PVRTC_4BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(p===RGBA_PVRTC_2BPPV1_Format)return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}}if(p===RGB_ETC1_Format){extension=extensions.get("WEBGL_compressed_texture_etc1");if(extension!==null)return extension.COMPRESSED_RGB_ETC1_WEBGL}if(p===MinEquation||p===MaxEquation){extension=extensions.get("EXT_blend_minmax");if(extension!==null){if(p===MinEquation)return extension.MIN_EXT;if(p===MaxEquation)return extension.MAX_EXT}}if(p===UnsignedInt248Type){extension=extensions.get("WEBGL_depth_texture");if(extension!==null)return extension.UNSIGNED_INT_24_8_WEBGL}return 0}}function FogExp2(color,density){this.name="";this.color=new Color(color);this.density=density!==undefined?density:25e-5}FogExp2.prototype.isFogExp2=true;FogExp2.prototype.clone=function(){return new FogExp2(this.color.getHex(),this.density)};FogExp2.prototype.toJSON=function(meta){return{type:"FogExp2",color:this.color.getHex(),density:this.density}};function Fog(color,near,far){this.name="";this.color=new Color(color);this.near=near!==undefined?near:1;this.far=far!==undefined?far:1e3}Fog.prototype.isFog=true;Fog.prototype.clone=function(){return new Fog(this.color.getHex(),this.near,this.far)};Fog.prototype.toJSON=function(meta){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}};function Scene(){Object3D.call(this);this.type="Scene";this.background=null;this.fog=null;this.overrideMaterial=null;this.autoUpdate=true}Scene.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Scene,copy:function(source,recursive){Object3D.prototype.copy.call(this,source,recursive);if(source.background!==null)this.background=source.background.clone();if(source.fog!==null)this.fog=source.fog.clone();if(source.overrideMaterial!==null)this.overrideMaterial=source.overrideMaterial.clone();this.autoUpdate=source.autoUpdate;this.matrixAutoUpdate=source.matrixAutoUpdate;return this},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);if(this.background!==null)data.object.background=this.background.toJSON(meta);if(this.fog!==null)data.object.fog=this.fog.toJSON();return data}});function LensFlare(texture,size,distance,blending,color){Object3D.call(this);this.lensFlares=[];this.positionScreen=new Vector3;this.customUpdateCallback=undefined;if(texture!==undefined){this.add(texture,size,distance,blending,color)}}LensFlare.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:LensFlare,isLensFlare:true,copy:function(source){Object3D.prototype.copy.call(this,source);this.positionScreen.copy(source.positionScreen);this.customUpdateCallback=source.customUpdateCallback;for(var i=0,l=source.lensFlares.length;iguessSizeSq)return;var distance=raycaster.ray.origin.distanceTo(intersectPoint);if(distanceraycaster.far)return;intersects.push({distance:distance,point:intersectPoint.clone(),face:null,object:this})}}(),clone:function(){return new this.constructor(this.material).copy(this)}});function LOD(){Object3D.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:true,value:[]}})}LOD.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:LOD,copy:function(source){Object3D.prototype.copy.call(this,source,false);var levels=source.levels;for(var i=0,l=levels.length;i1){v1.setFromMatrixPosition(camera.matrixWorld);v2.setFromMatrixPosition(this.matrixWorld);var distance=v1.distanceTo(v2);levels[0].object.visible=true;for(var i=1,l=levels.length;i=levels[i].distance){levels[i-1].object.visible=false;levels[i].object.visible=true}else{break}}for(;iprecisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distanceraycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}else{for(var i=0,l=positions.length/3-1;iprecisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distanceraycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}else if(geometry.isGeometry){var vertices=geometry.vertices;var nbVertices=vertices.length;for(var i=0;iprecisionSq)continue;interRay.applyMatrix4(this.matrixWorld);var distance=raycaster.ray.origin.distanceTo(interRay);if(distanceraycaster.far)continue;intersects.push({distance:distance,point:interSegment.clone().applyMatrix4(this.matrixWorld),index:i,face:null,faceIndex:null,object:this})}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});function LineSegments(geometry,material){Line.call(this,geometry,material);this.type="LineSegments"}LineSegments.prototype=Object.assign(Object.create(Line.prototype),{constructor:LineSegments,isLineSegments:true});function LineLoop(geometry,material){Line.call(this,geometry,material);this.type="LineLoop"}LineLoop.prototype=Object.assign(Object.create(Line.prototype),{constructor:LineLoop,isLineLoop:true});function PointsMaterial(parameters){Material.call(this);this.type="PointsMaterial";this.color=new Color(16777215);this.map=null;this.size=1;this.sizeAttenuation=true;this.lights=false;this.setValues(parameters)}PointsMaterial.prototype=Object.create(Material.prototype);PointsMaterial.prototype.constructor=PointsMaterial;PointsMaterial.prototype.isPointsMaterial=true;PointsMaterial.prototype.copy=function(source){Material.prototype.copy.call(this,source);this.color.copy(source.color);this.map=source.map;this.size=source.size;this.sizeAttenuation=source.sizeAttenuation;return this};function Points(geometry,material){Object3D.call(this);this.type="Points";this.geometry=geometry!==undefined?geometry:new BufferGeometry;this.material=material!==undefined?material:new PointsMaterial({color:Math.random()*16777215})}Points.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Points,isPoints:true,raycast:function(){var inverseMatrix=new Matrix4;var ray=new Ray;var sphere=new Sphere;return function raycast(raycaster,intersects){var object=this;var geometry=this.geometry;var matrixWorld=this.matrixWorld;var threshold=raycaster.params.Points.threshold;if(geometry.boundingSphere===null)geometry.computeBoundingSphere();sphere.copy(geometry.boundingSphere);sphere.applyMatrix4(matrixWorld);sphere.radius+=threshold;if(raycaster.ray.intersectsSphere(sphere)===false)return;inverseMatrix.getInverse(matrixWorld);ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);var localThreshold=threshold/((this.scale.x+this.scale.y+this.scale.z)/3);var localThresholdSq=localThreshold*localThreshold;var position=new Vector3;function testPoint(point,index){var rayPointDistanceSq=ray.distanceSqToPoint(point);if(rayPointDistanceSqraycaster.far)return;intersects.push({distance:distance,distanceToRay:Math.sqrt(rayPointDistanceSq),point:intersectPoint.clone(),index:index,face:null,object:object})}}if(geometry.isBufferGeometry){var index=geometry.index;var attributes=geometry.attributes;var positions=attributes.position.array;if(index!==null){var indices=index.array;for(var i=0,il=indices.length;i=video.HAVE_CURRENT_DATA){scope.needsUpdate=true}}update()}VideoTexture.prototype=Object.create(Texture.prototype);VideoTexture.prototype.constructor=VideoTexture;function CompressedTexture(mipmaps,width,height,format,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,encoding){Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy,encoding);this.image={width:width,height:height};this.mipmaps=mipmaps;this.flipY=false;this.generateMipmaps=false}CompressedTexture.prototype=Object.create(Texture.prototype);CompressedTexture.prototype.constructor=CompressedTexture;CompressedTexture.prototype.isCompressedTexture=true;function CanvasTexture(canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy){Texture.call(this,canvas,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.needsUpdate=true}CanvasTexture.prototype=Object.create(Texture.prototype);CanvasTexture.prototype.constructor=CanvasTexture;function DepthTexture(width,height,type,mapping,wrapS,wrapT,magFilter,minFilter,anisotropy,format){format=format!==undefined?format:DepthFormat;if(format!==DepthFormat&&format!==DepthStencilFormat){throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat")}if(type===undefined&&format===DepthFormat)type=UnsignedShortType;if(type===undefined&&format===DepthStencilFormat)type=UnsignedInt248Type;Texture.call(this,null,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);this.image={width:width,height:height};this.magFilter=magFilter!==undefined?magFilter:NearestFilter;this.minFilter=minFilter!==undefined?minFilter:NearestFilter;this.flipY=false;this.generateMipmaps=false}DepthTexture.prototype=Object.create(Texture.prototype);DepthTexture.prototype.constructor=DepthTexture;DepthTexture.prototype.isDepthTexture=true;function WireframeGeometry(geometry){BufferGeometry.call(this);this.type="WireframeGeometry";var vertices=[];var i,j,l,o,ol;var edge=[0,0],edges={},e,edge1,edge2;var key,keys=["a","b","c"];var vertex;if(geometry&&geometry.isGeometry){var faces=geometry.faces;for(i=0,l=faces.length;i=0){p1=func(u-EPS,v,p1);pu.subVectors(p0,p1)}else{p1=func(u+EPS,v,p1);pu.subVectors(p1,p0)}if(v-EPS>=0){p1=func(u,v-EPS,p1);pv.subVectors(p0,p1)}else{p1=func(u,v+EPS,p1);pv.subVectors(p1,p0)}normal.crossVectors(pu,pv).normalize();normals.push(normal.x,normal.y,normal.z);uvs.push(u,v)}}for(i=0;i.9&&min<.1){if(x0<.2)uvBuffer[i+0]+=1;if(x1<.2)uvBuffer[i+2]+=1;if(x2<.2)uvBuffer[i+4]+=1}}}function pushVertex(vertex){vertexBuffer.push(vertex.x,vertex.y,vertex.z)}function getVertexByIndex(index,vertex){var stride=index*3;vertex.x=vertices[stride+0];vertex.y=vertices[stride+1];vertex.z=vertices[stride+2]}function correctUVs(){var a=new Vector3;var b=new Vector3;var c=new Vector3;var centroid=new Vector3;var uvA=new Vector2;var uvB=new Vector2;var uvC=new Vector2;for(var i=0,j=0;i=-Number.EPSILON&&bCROSScp>=-Number.EPSILON&&cCROSSap>=-Number.EPSILON)return false}return true}return function triangulate(contour,indices){var n=contour.length;if(n<3)return null;var result=[],verts=[],vertIndices=[];var u,v,w;if(ShapeUtils.area(contour)>0){for(v=0;v2;){if(count--<=0){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");if(indices)return vertIndices;return result}u=v;if(nv<=u)u=0;v=u+1;if(nv<=v)v=0;w=v+1;if(nv<=w)w=0;if(snip(contour,u,v,w,nv,verts)){var a,b,c,s,t;a=verts[u];b=verts[v];c=verts[w];result.push([contour[a],contour[b],contour[c]]);vertIndices.push([verts[u],verts[v],verts[w]]);for(s=v,t=v+1;t2&&points[l-1].equals(points[0])){points.pop()}}removeDupEndPts(contour);holes.forEach(removeDupEndPts);function point_in_segment_2D_colin(inSegPt1,inSegPt2,inOtherPt){if(inSegPt1.x!==inSegPt2.x){if(inSegPt1.xNumber.EPSILON){var perpSeg2;if(limit>0){if(perpSeg1<0||perpSeg1>limit)return[];perpSeg2=seg2dy*seg1seg2dx-seg2dx*seg1seg2dy;if(perpSeg2<0||perpSeg2>limit)return[]}else{if(perpSeg1>0||perpSeg10||perpSeg2seg2maxVal)return[];if(seg1minVal===seg2maxVal){if(inExcludeAdjacentSegs)return[];return[seg1min]}if(seg1maxVal<=seg2maxVal)return[seg1min,seg1max];return[seg1min,seg2max]}}}function isPointInsideAngle(inVertex,inLegFromPt,inLegToPt,inOtherPt){var legFromPtX=inLegFromPt.x-inVertex.x,legFromPtY=inLegFromPt.y-inVertex.y;var legToPtX=inLegToPt.x-inVertex.x,legToPtY=inLegToPt.y-inVertex.y;var otherPtX=inOtherPt.x-inVertex.x,otherPtY=inOtherPt.y-inVertex.y;var from2toAngle=legFromPtX*legToPtY-legFromPtY*legToPtX;var from2otherAngle=legFromPtX*otherPtY-legFromPtY*otherPtX;if(Math.abs(from2toAngle)>Number.EPSILON){var other2toAngle=otherPtX*legToPtY-otherPtY*legToPtX;if(from2toAngle>0){return from2otherAngle>=0&&other2toAngle>=0}else{return from2otherAngle>=0||other2toAngle>=0}}else{return from2otherAngle>0}}function removeHoles(contour,holes){var shape=contour.concat();var hole;function isCutLineInsideAngles(inShapeIdx,inHoleIdx){var lastShapeIdx=shape.length-1;var prevShapeIdx=inShapeIdx-1;if(prevShapeIdx<0)prevShapeIdx=lastShapeIdx;var nextShapeIdx=inShapeIdx+1;if(nextShapeIdx>lastShapeIdx)nextShapeIdx=0;var insideAngle=isPointInsideAngle(shape[inShapeIdx],shape[prevShapeIdx],shape[nextShapeIdx],hole[inHoleIdx]);if(!insideAngle){return false}var lastHoleIdx=hole.length-1;var prevHoleIdx=inHoleIdx-1;if(prevHoleIdx<0)prevHoleIdx=lastHoleIdx;var nextHoleIdx=inHoleIdx+1;if(nextHoleIdx>lastHoleIdx)nextHoleIdx=0;insideAngle=isPointInsideAngle(hole[inHoleIdx],hole[prevHoleIdx],hole[nextHoleIdx],shape[inShapeIdx]);if(!insideAngle){return false}return true}function intersectsShapeEdge(inShapePt,inHolePt){var sIdx,nextIdx,intersection;for(sIdx=0;sIdx0)return true}return false}var indepHoles=[];function intersectsHoleEdge(inShapePt,inHolePt){var ihIdx,chkHole,hIdx,nextIdx,intersection;for(ihIdx=0;ihIdx0)return true}}return false}var holeIndex,shapeIndex,shapePt,holePt,holeIdx,cutKey,failedCuts=[],tmpShape1,tmpShape2,tmpHole1,tmpHole2;for(var h=0,hl=holes.length;h0){counter--;if(counter<0){console.log("Infinite Loop! Holes left:"+indepHoles.length+", Probably Hole outside Shape!");break}for(shapeIndex=minShapeIndex;shapeIndex=0)break;failedCuts[cutKey]=true}if(holeIndex>=0)break}}return shape}var i,il,f,face,key,index,allPointsMap={};var allpoints=contour.concat();for(var h=0,hl=holes.length;hNumber.EPSILON){var v_prev_len=Math.sqrt(v_prev_lensq);var v_next_len=Math.sqrt(v_next_x*v_next_x+v_next_y*v_next_y);var ptPrevShift_x=inPrev.x-v_prev_y/v_prev_len;var ptPrevShift_y=inPrev.y+v_prev_x/v_prev_len;var ptNextShift_x=inNext.x-v_next_y/v_next_len;var ptNextShift_y=inNext.y+v_next_x/v_next_len;var sf=((ptNextShift_x-ptPrevShift_x)*v_next_y-(ptNextShift_y-ptPrevShift_y)*v_next_x)/(v_prev_x*v_next_y-v_prev_y*v_next_x);v_trans_x=ptPrevShift_x+v_prev_x*sf-inPt.x;v_trans_y=ptPrevShift_y+v_prev_y*sf-inPt.y;var v_trans_lensq=v_trans_x*v_trans_x+v_trans_y*v_trans_y;if(v_trans_lensq<=2){return new Vector2(v_trans_x,v_trans_y)}else{shrink_by=Math.sqrt(v_trans_lensq/2)}}else{var direction_eq=false;if(v_prev_x>Number.EPSILON){if(v_next_x>Number.EPSILON){direction_eq=true}}else{if(v_prev_x<-Number.EPSILON){if(v_next_x<-Number.EPSILON){direction_eq=true}}else{if(Math.sign(v_prev_y)===Math.sign(v_next_y)){direction_eq=true}}}if(direction_eq){v_trans_x=-v_prev_y;v_trans_y=v_prev_x;shrink_by=Math.sqrt(v_prev_lensq)}else{v_trans_x=v_prev_x;v_trans_y=v_prev_y;shrink_by=Math.sqrt(v_prev_lensq/2)}}return new Vector2(v_trans_x/shrink_by,v_trans_y/shrink_by)}var contourMovements=[];for(var i=0,il=contour.length,j=il-1,k=i+1;i=0;b--){t=b/bevelSegments;z=bevelThickness*Math.cos(t*Math.PI/2);bs=bevelSize*Math.sin(t*Math.PI/2);for(i=0,il=contour.length;i=0){j=i;k=i-1;if(k<0)k=contour.length-1;var s=0,sl=steps+bevelSegments*2;for(s=0;s0)indices.push(a,b,d);if(iy!==heightSegments-1||thetaEnd0)generateCap(true);if(radiusBottom>0)generateCap(false)}this.setIndex(indices);this.addAttribute("position",new Float32BufferAttribute(vertices,3));this.addAttribute("normal",new Float32BufferAttribute(normals,3));this.addAttribute("uv",new Float32BufferAttribute(uvs,2));function generateTorso(){var x,y;var normal=new Vector3;var vertex=new Vector3;var groupCount=0;var slope=(radiusBottom-radiusTop)/height;for(y=0;y<=heightSegments;y++){var indexRow=[];var v=y/heightSegments;var radius=v*(radiusBottom-radiusTop)+radiusTop;for(x=0;x<=radialSegments;x++){var u=x/radialSegments;var theta=u*thetaLength+thetaStart;var sinTheta=Math.sin(theta);var cosTheta=Math.cos(theta);vertex.x=radius*sinTheta;vertex.y=-v*height+halfHeight;vertex.z=radius*cosTheta;vertices.push(vertex.x,vertex.y,vertex.z);normal.set(sinTheta,slope,cosTheta).normalize();normals.push(normal.x,normal.y,normal.z);uvs.push(u,1-v);indexRow.push(index++)}indexArray.push(indexRow)}for(x=0;x0||url.search(/^data\:image\/jpeg/)===0;texture.format=isJPEG?RGBFormat:RGBAFormat;texture.needsUpdate=true;if(onLoad!==undefined){onLoad(texture)}},onProgress,onError);return texture},setCrossOrigin:function(value){this.crossOrigin=value;return this},setPath:function(value){this.path=value;return this}});function Light(color,intensity){Object3D.call(this);this.type="Light";this.color=new Color(color);this.intensity=intensity!==undefined?intensity:1;this.receiveShadow=undefined}Light.prototype=Object.assign(Object.create(Object3D.prototype),{constructor:Light,isLight:true,copy:function(source){Object3D.prototype.copy.call(this,source);this.color.copy(source.color);this.intensity=source.intensity;return this},toJSON:function(meta){var data=Object3D.prototype.toJSON.call(this,meta);data.object.color=this.color.getHex();data.object.intensity=this.intensity;if(this.groundColor!==undefined)data.object.groundColor=this.groundColor.getHex();if(this.distance!==undefined)data.object.distance=this.distance;if(this.angle!==undefined)data.object.angle=this.angle;if(this.decay!==undefined)data.object.decay=this.decay;if(this.penumbra!==undefined)data.object.penumbra=this.penumbra;if(this.shadow!==undefined)data.object.shadow=this.shadow.toJSON();return data}});function HemisphereLight(skyColor,groundColor,intensity){Light.call(this,skyColor,intensity);this.type="HemisphereLight";this.castShadow=undefined;this.position.copy(Object3D.DefaultUp);this.updateMatrix();this.groundColor=new Color(groundColor)}HemisphereLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:HemisphereLight,isHemisphereLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.groundColor.copy(source.groundColor);return this}});function LightShadow(camera){this.camera=camera;this.bias=0;this.radius=1;this.mapSize=new Vector2(512,512);this.map=null;this.matrix=new Matrix4}Object.assign(LightShadow.prototype,{copy:function(source){this.camera=source.camera.clone();this.bias=source.bias;this.radius=source.radius;this.mapSize.copy(source.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var object={};if(this.bias!==0)object.bias=this.bias;if(this.radius!==1)object.radius=this.radius;if(this.mapSize.x!==512||this.mapSize.y!==512)object.mapSize=this.mapSize.toArray();object.camera=this.camera.toJSON(false).object;delete object.camera.matrix;return object}});function SpotLightShadow(){LightShadow.call(this,new PerspectiveCamera(50,1,.5,500))}SpotLightShadow.prototype=Object.assign(Object.create(LightShadow.prototype),{constructor:SpotLightShadow,isSpotLightShadow:true,update:function(light){var camera=this.camera;var fov=_Math.RAD2DEG*2*light.angle;var aspect=this.mapSize.width/this.mapSize.height;var far=light.distance||camera.far;if(fov!==camera.fov||aspect!==camera.aspect||far!==camera.far){camera.fov=fov;camera.aspect=aspect;camera.far=far;camera.updateProjectionMatrix()}}});function SpotLight(color,intensity,distance,angle,penumbra,decay){Light.call(this,color,intensity);this.type="SpotLight";this.position.copy(Object3D.DefaultUp);this.updateMatrix();this.target=new Object3D;Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(power){this.intensity=power/Math.PI}});this.distance=distance!==undefined?distance:0;this.angle=angle!==undefined?angle:Math.PI/3;this.penumbra=penumbra!==undefined?penumbra:0;this.decay=decay!==undefined?decay:1;this.shadow=new SpotLightShadow}SpotLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:SpotLight,isSpotLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.distance=source.distance;this.angle=source.angle;this.penumbra=source.penumbra;this.decay=source.decay;this.target=source.target.clone();this.shadow=source.shadow.clone();return this}});function PointLight(color,intensity,distance,decay){Light.call(this,color,intensity);this.type="PointLight";Object.defineProperty(this,"power",{get:function(){return this.intensity*4*Math.PI},set:function(power){this.intensity=power/(4*Math.PI)}});this.distance=distance!==undefined?distance:0;this.decay=decay!==undefined?decay:1;this.shadow=new LightShadow(new PerspectiveCamera(90,1,.5,500))}PointLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:PointLight,isPointLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.distance=source.distance;this.decay=source.decay;this.shadow=source.shadow.clone();return this}});function DirectionalLightShadow(){LightShadow.call(this,new OrthographicCamera(-5,5,5,-5,.5,500))}DirectionalLightShadow.prototype=Object.assign(Object.create(LightShadow.prototype),{constructor:DirectionalLightShadow});function DirectionalLight(color,intensity){Light.call(this,color,intensity);this.type="DirectionalLight";this.position.copy(Object3D.DefaultUp);this.updateMatrix();this.target=new Object3D;this.shadow=new DirectionalLightShadow}DirectionalLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:DirectionalLight,isDirectionalLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.target=source.target.clone();this.shadow=source.shadow.clone();return this}});function AmbientLight(color,intensity){Light.call(this,color,intensity);this.type="AmbientLight";this.castShadow=undefined}AmbientLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:AmbientLight,isAmbientLight:true});function RectAreaLight(color,intensity,width,height){Light.call(this,color,intensity);this.type="RectAreaLight";this.position.set(0,1,0);this.updateMatrix();this.width=width!==undefined?width:10;this.height=height!==undefined?height:10}RectAreaLight.prototype=Object.assign(Object.create(Light.prototype),{constructor:RectAreaLight,isRectAreaLight:true,copy:function(source){Light.prototype.copy.call(this,source);this.width=source.width;this.height=source.height;return this},toJSON:function(meta){var data=Light.prototype.toJSON.call(this,meta);data.object.width=this.width;data.object.height=this.height;return data}});var AnimationUtils={arraySlice:function(array,from,to){if(AnimationUtils.isTypedArray(array)){return new array.constructor(array.subarray(from,to!==undefined?to:array.length))}return array.slice(from,to)},convertArray:function(array,type,forceClone){if(!array||!forceClone&&array.constructor===type)return array;if(typeof type.BYTES_PER_ELEMENT==="number"){return new type(array)}return Array.prototype.slice.call(array)},isTypedArray:function(object){return ArrayBuffer.isView(object)&&!(object instanceof DataView)},getKeyframeOrder:function(times){function compareTime(i,j){return times[i]-times[j]}var n=times.length;var result=new Array(n);for(var i=0;i!==n;++i)result[i]=i;result.sort(compareTime);return result},sortedArray:function(values,stride,order){var nValues=values.length;var result=new values.constructor(nValues);for(var i=0,dstOffset=0;dstOffset!==nValues;++i){var srcOffset=order[i]*stride;for(var j=0;j!==stride;++j){result[dstOffset++]=values[srcOffset+j]}}return result},flattenJSON:function(jsonKeys,times,values,valuePropertyName){var i=1,key=jsonKeys[0];while(key!==undefined&&key[valuePropertyName]===undefined){key=jsonKeys[i++]}if(key===undefined)return;var value=key[valuePropertyName];if(value===undefined)return;if(Array.isArray(value)){do{value=key[valuePropertyName];if(value!==undefined){times.push(key.time);values.push.apply(values,value)}key=jsonKeys[i++]}while(key!==undefined)}else if(value.toArray!==undefined){do{value=key[valuePropertyName];if(value!==undefined){times.push(key.time);value.toArray(values,values.length)}key=jsonKeys[i++]}while(key!==undefined)}else{do{value=key[valuePropertyName];if(value!==undefined){times.push(key.time);values.push(value)}key=jsonKeys[i++]}while(key!==undefined)}}};function Interpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){this.parameterPositions=parameterPositions;this._cachedIndex=0;this.resultBuffer=resultBuffer!==undefined?resultBuffer:new sampleValues.constructor(sampleSize);this.sampleValues=sampleValues;this.valueSize=sampleSize}Object.assign(Interpolant.prototype,{evaluate:function(t){var pp=this.parameterPositions,i1=this._cachedIndex,t1=pp[i1],t0=pp[i1-1];validate_interval:{seek:{var right;linear_scan:{forward_scan:if(!(t=t0)){var t1global=pp[1];if(t=t0){break seek}}right=i1;i1=0;break linear_scan}break validate_interval}while(i1>>1;if(tendTime)--to;++to;if(from!==0||to!==nKeys){if(from>=to)to=Math.max(to,1),from=to-1;var stride=this.getValueSize();this.times=AnimationUtils.arraySlice(times,from,to);this.values=AnimationUtils.arraySlice(this.values,from*stride,to*stride)}return this},validate:function(){var valid=true;var valueSize=this.getValueSize();if(valueSize-Math.floor(valueSize)!==0){console.error("THREE.KeyframeTrackPrototype: Invalid value size in track.",this);valid=false}var times=this.times,values=this.values,nKeys=times.length;if(nKeys===0){console.error("THREE.KeyframeTrackPrototype: Track is empty.",this);valid=false}var prevTime=null;for(var i=0;i!==nKeys;i++){var currTime=times[i];if(typeof currTime==="number"&&isNaN(currTime)){console.error("THREE.KeyframeTrackPrototype: Time is not a valid number.",this,i,currTime);valid=false;break}if(prevTime!==null&&prevTime>currTime){console.error("THREE.KeyframeTrackPrototype: Out of order keys.",this,i,currTime,prevTime);valid=false;break}prevTime=currTime}if(values!==undefined){if(AnimationUtils.isTypedArray(values)){for(var i=0,n=values.length;i!==n;++i){var value=values[i];if(isNaN(value)){console.error("THREE.KeyframeTrackPrototype: Value is not a valid number.",this,i,value);valid=false;break}}}}return valid},optimize:function(){var times=this.times,values=this.values,stride=this.getValueSize(),smoothInterpolation=this.getInterpolation()===InterpolateSmooth,writeIndex=1,lastIndex=times.length-1;for(var i=1;i0){times[writeIndex]=times[lastIndex];for(var readOffset=lastIndex*stride,writeOffset=writeIndex*stride,j=0;j!==stride;++j)values[writeOffset+j]=values[readOffset+j];++writeIndex}if(writeIndex!==times.length){this.times=AnimationUtils.arraySlice(times,0,writeIndex);this.values=AnimationUtils.arraySlice(values,0,writeIndex*stride)}return this}};function KeyframeTrackConstructor(name,times,values,interpolation){if(name===undefined)throw new Error("track name is undefined");if(times===undefined||times.length===0){throw new Error("no keyframes in track named "+name)}this.name=name;this.times=AnimationUtils.convertArray(times,this.TimeBufferType);this.values=AnimationUtils.convertArray(values,this.ValueBufferType);this.setInterpolation(interpolation||this.DefaultInterpolation);this.validate();this.optimize()}function VectorKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}VectorKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:VectorKeyframeTrack,ValueTypeName:"vector"});function QuaternionLinearInterpolant(parameterPositions,sampleValues,sampleSize,resultBuffer){Interpolant.call(this,parameterPositions,sampleValues,sampleSize,resultBuffer)}QuaternionLinearInterpolant.prototype=Object.assign(Object.create(Interpolant.prototype),{constructor:QuaternionLinearInterpolant,interpolate_:function(i1,t0,t,t1){var result=this.resultBuffer,values=this.sampleValues,stride=this.valueSize,offset=i1*stride,alpha=(t-t0)/(t1-t0);for(var end=offset+stride;offset!==end;offset+=4){Quaternion.slerpFlat(result,0,values,offset-stride,values,offset,alpha)}return result}});function QuaternionKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}QuaternionKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:QuaternionKeyframeTrack,ValueTypeName:"quaternion",DefaultInterpolation:InterpolateLinear,InterpolantFactoryMethodLinear:function(result){return new QuaternionLinearInterpolant(this.times,this.values,this.getValueSize(),result)},InterpolantFactoryMethodSmooth:undefined});function NumberKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}NumberKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:NumberKeyframeTrack,ValueTypeName:"number"});function StringKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}StringKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:StringKeyframeTrack,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:InterpolateDiscrete,InterpolantFactoryMethodLinear:undefined,InterpolantFactoryMethodSmooth:undefined});function BooleanKeyframeTrack(name,times,values){KeyframeTrackConstructor.call(this,name,times,values)}BooleanKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:BooleanKeyframeTrack,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:InterpolateDiscrete,InterpolantFactoryMethodLinear:undefined,InterpolantFactoryMethodSmooth:undefined});function ColorKeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.call(this,name,times,values,interpolation)}ColorKeyframeTrack.prototype=Object.assign(Object.create(KeyframeTrackPrototype),{constructor:ColorKeyframeTrack,ValueTypeName:"color"});function KeyframeTrack(name,times,values,interpolation){KeyframeTrackConstructor.apply(this,arguments)}KeyframeTrack.prototype=KeyframeTrackPrototype;KeyframeTrackPrototype.constructor=KeyframeTrack;Object.assign(KeyframeTrack,{parse:function(json){if(json.type===undefined){throw new Error("track type undefined, can not parse")}var trackType=KeyframeTrack._getTrackTypeForValueTypeName(json.type);if(json.times===undefined){var times=[],values=[];AnimationUtils.flattenJSON(json.keys,times,values,"value");json.times=times;json.values=values}if(trackType.parse!==undefined){return trackType.parse(json)}else{return new trackType(json.name,json.times,json.values,json.interpolation)}},toJSON:function(track){var trackType=track.constructor;var json;if(trackType.toJSON!==undefined){json=trackType.toJSON(track)}else{json={name:track.name,times:AnimationUtils.convertArray(track.times,Array),values:AnimationUtils.convertArray(track.values,Array)};var interpolation=track.getInterpolation();if(interpolation!==track.DefaultInterpolation){json.interpolation=interpolation}}json.type=track.ValueTypeName;return json},_getTrackTypeForValueTypeName:function(typeName){switch(typeName.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return NumberKeyframeTrack;case"vector":case"vector2":case"vector3":case"vector4":return VectorKeyframeTrack;case"color":return ColorKeyframeTrack;case"quaternion":return QuaternionKeyframeTrack;case"bool":case"boolean":return BooleanKeyframeTrack;case"string":return StringKeyframeTrack}throw new Error("Unsupported typeName: "+typeName)}});function AnimationClip(name,duration,tracks){this.name=name;this.tracks=tracks;this.duration=duration!==undefined?duration:-1;this.uuid=_Math.generateUUID();if(this.duration<0){this.resetDuration()}this.optimize()}Object.assign(AnimationClip,{parse:function(json){var tracks=[],jsonTracks=json.tracks,frameTime=1/(json.fps||1);for(var i=0,n=jsonTracks.length;i!==n;++i){tracks.push(KeyframeTrack.parse(jsonTracks[i]).scale(frameTime))}return new AnimationClip(json.name,json.duration,tracks)},toJSON:function(clip){var tracks=[],clipTracks=clip.tracks;var json={name:clip.name,duration:clip.duration,tracks:tracks};for(var i=0,n=clipTracks.length;i!==n;++i){tracks.push(KeyframeTrack.toJSON(clipTracks[i]))}return json},CreateFromMorphTargetSequence:function(name,morphTargetSequence,fps,noLoop){var numMorphTargets=morphTargetSequence.length;var tracks=[];for(var i=0;i1){var name=parts[1];var animationMorphTargets=animationToMorphTargets[name];if(!animationMorphTargets){animationToMorphTargets[name]=animationMorphTargets=[]}animationMorphTargets.push(morphTarget)}}var clips=[];for(var name in animationToMorphTargets){clips.push(AnimationClip.CreateFromMorphTargetSequence(name,animationToMorphTargets[name],fps,noLoop))}return clips},parseAnimation:function(animation,bones){if(!animation){console.error("THREE.AnimationClip: No animation in JSONLoader data.");return null}var addNonemptyTrack=function(trackType,trackName,animationKeys,propertyName,destTracks){if(animationKeys.length!==0){var times=[];var values=[];AnimationUtils.flattenJSON(animationKeys,times,values,propertyName);if(times.length!==0){destTracks.push(new trackType(trackName,times,values))}}};var tracks=[];var clipName=animation.name||"default";var duration=animation.length||-1;var fps=animation.fps||30;var hierarchyTracks=animation.hierarchy||[];for(var h=0;h1?json.skinWeights[i+1]:0;var z=influencesPerVertex>2?json.skinWeights[i+2]:0;var w=influencesPerVertex>3?json.skinWeights[i+3]:0;geometry.skinWeights.push(new Vector4(x,y,z,w))}}if(json.skinIndices){for(var i=0,l=json.skinIndices.length;i1?json.skinIndices[i+1]:0;var c=influencesPerVertex>2?json.skinIndices[i+2]:0;var d=influencesPerVertex>3?json.skinIndices[i+3]:0;geometry.skinIndices.push(new Vector4(a,b,c,d))}}geometry.bones=json.bones;if(geometry.bones&&geometry.bones.length>0&&(geometry.skinWeights.length!==geometry.skinIndices.length||geometry.skinIndices.length!==geometry.vertices.length)){console.warn("When skinning, number of vertices ("+geometry.vertices.length+"), skinIndices ("+geometry.skinIndices.length+"), and skinWeights ("+geometry.skinWeights.length+") should match.")}}function parseMorphing(json,geometry){var scale=json.scale;if(json.morphTargets!==undefined){for(var i=0,l=json.morphTargets.length;i0){console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.');var faces=geometry.faces;var morphColors=json.morphColors[0].colors;for(var i=0,l=faces.length;i0)geometry.animations=outputAnimations}return function(json,texturePath){if(json.data!==undefined){json=json.data}if(json.scale!==undefined){json.scale=1/json.scale}else{json.scale=1}var geometry=new Geometry;parseModel(json,geometry);parseSkin(json,geometry);parseMorphing(json,geometry);parseAnimations(json,geometry);geometry.computeFaceNormals();geometry.computeBoundingSphere();if(json.materials===undefined||json.materials.length===0){return{geometry:geometry}}else{var materials=Loader.prototype.initMaterials(json.materials,texturePath,this.crossOrigin);return{geometry:geometry,materials:materials}}}}()});function ObjectLoader(manager){this.manager=manager!==undefined?manager:DefaultLoadingManager;this.texturePath=""}Object.assign(ObjectLoader.prototype,{load:function(url,onLoad,onProgress,onError){if(this.texturePath===""){this.texturePath=url.substring(0,url.lastIndexOf("/")+1)}var scope=this;var loader=new FileLoader(scope.manager);loader.load(url,function(text){var json=null;try{json=JSON.parse(text)}catch(error){if(onError!==undefined)onError(error);console.error("THREE:ObjectLoader: Can't parse "+url+".",error.message);return}var metadata=json.metadata;if(metadata===undefined||metadata.type===undefined||metadata.type.toLowerCase()==="geometry"){console.error("THREE.ObjectLoader: Can't load "+url+". Use THREE.JSONLoader instead.");return}scope.parse(json,onLoad)},onProgress,onError)},setTexturePath:function(value){this.texturePath=value},setCrossOrigin:function(value){this.crossOrigin=value},parse:function(json,onLoad){var geometries=this.parseGeometries(json.geometries);var images=this.parseImages(json.images,function(){if(onLoad!==undefined)onLoad(object)});var textures=this.parseTextures(json.textures,images);var materials=this.parseMaterials(json.materials,textures);var object=this.parseObject(json.object,geometries,materials);if(json.animations){object.animations=this.parseAnimations(json.animations)}if(json.images===undefined||json.images.length===0){if(onLoad!==undefined)onLoad(object)}return object},parseGeometries:function(json){var geometries={};if(json!==undefined){var geometryLoader=new JSONLoader;var bufferGeometryLoader=new BufferGeometryLoader;for(var i=0,l=json.length;i0){var manager=new LoadingManager(onLoad);var loader=new ImageLoader(manager);loader.setCrossOrigin(this.crossOrigin);for(var i=0,l=json.length;i0){object=new SkinnedMesh(geometry,material)}else{object=new Mesh(geometry,material)}break;case"LOD":object=new LOD;break;case"Line":object=new Line(getGeometry(data.geometry),getMaterial(data.material),data.mode);break;case"LineLoop":object=new LineLoop(getGeometry(data.geometry),getMaterial(data.material));break;case"LineSegments":object=new LineSegments(getGeometry(data.geometry),getMaterial(data.material));break;case"PointCloud":case"Points":object=new Points(getGeometry(data.geometry),getMaterial(data.material));break;case"Sprite":object=new Sprite(getMaterial(data.material));break;case"Group":object=new Group;break;default:object=new Object3D}object.uuid=data.uuid;if(data.name!==undefined)object.name=data.name;if(data.matrix!==undefined){matrix.fromArray(data.matrix);matrix.decompose(object.position,object.quaternion,object.scale)}else{if(data.position!==undefined)object.position.fromArray(data.position);if(data.rotation!==undefined)object.rotation.fromArray(data.rotation);if(data.quaternion!==undefined)object.quaternion.fromArray(data.quaternion);if(data.scale!==undefined)object.scale.fromArray(data.scale)}if(data.castShadow!==undefined)object.castShadow=data.castShadow;if(data.receiveShadow!==undefined)object.receiveShadow=data.receiveShadow;if(data.shadow){if(data.shadow.bias!==undefined)object.shadow.bias=data.shadow.bias;if(data.shadow.radius!==undefined)object.shadow.radius=data.shadow.radius;if(data.shadow.mapSize!==undefined)object.shadow.mapSize.fromArray(data.shadow.mapSize);if(data.shadow.camera!==undefined)object.shadow.camera=this.parseObject(data.shadow.camera)}if(data.visible!==undefined)object.visible=data.visible;if(data.userData!==undefined)object.userData=data.userData;if(data.children!==undefined){for(var child in data.children){object.add(this.parseObject(data.children[child],geometries,materials))}}if(data.type==="LOD"){var levels=data.levels;for(var l=0;l0){high=i-1}else{high=i;break}}i=high;if(arcLengths[i]===targetArcLength){return i/(il-1)}var lengthBefore=arcLengths[i];var lengthAfter=arcLengths[i+1];var segmentLength=lengthAfter-lengthBefore;var segmentFraction=(targetArcLength-lengthBefore)/segmentLength;var t=(i+segmentFraction)/(il-1);return t},getTangent:function(t){var delta=1e-4;var t1=t-delta;var t2=t+delta;if(t1<0)t1=0;if(t2>1)t2=1;var pt1=this.getPoint(t1);var pt2=this.getPoint(t2);var vec=pt2.clone().sub(pt1);return vec.normalize()},getTangentAt:function(u){var t=this.getUtoTmapping(u);return this.getTangent(t)},computeFrenetFrames:function(segments,closed){var normal=new Vector3;var tangents=[];var normals=[];var binormals=[];var vec=new Vector3;var mat=new Matrix4;var i,u,theta;for(i=0;i<=segments;i++){u=i/segments;tangents[i]=this.getTangentAt(u);tangents[i].normalize()}normals[0]=new Vector3;binormals[0]=new Vector3;var min=Number.MAX_VALUE;var tx=Math.abs(tangents[0].x);var ty=Math.abs(tangents[0].y);var tz=Math.abs(tangents[0].z);if(tx<=min){min=tx;normal.set(1,0,0)}if(ty<=min){min=ty;normal.set(0,1,0)}if(tz<=min){normal.set(0,0,1)}vec.crossVectors(tangents[0],normal).normalize();normals[0].crossVectors(tangents[0],vec);binormals[0].crossVectors(tangents[0],normals[0]);for(i=1;i<=segments;i++){normals[i]=normals[i-1].clone();binormals[i]=binormals[i-1].clone();vec.crossVectors(tangents[i-1],tangents[i]);if(vec.length()>Number.EPSILON){vec.normalize();theta=Math.acos(_Math.clamp(tangents[i-1].dot(tangents[i]),-1,1));normals[i].applyMatrix4(mat.makeRotationAxis(vec,theta))}binormals[i].crossVectors(tangents[i],normals[i])}if(closed===true){theta=Math.acos(_Math.clamp(normals[0].dot(normals[segments]),-1,1));theta/=segments;if(tangents[0].dot(vec.crossVectors(normals[0],normals[segments]))>0){theta=-theta}for(i=1;i<=segments;i++){normals[i].applyMatrix4(mat.makeRotationAxis(tangents[i],theta*i));binormals[i].crossVectors(tangents[i],normals[i])}}return{tangents:tangents,normals:normals,binormals:binormals}}});function LineCurve(v1,v2){Curve.call(this);this.v1=v1;this.v2=v2}LineCurve.prototype=Object.create(Curve.prototype);LineCurve.prototype.constructor=LineCurve;LineCurve.prototype.isLineCurve=true;LineCurve.prototype.getPoint=function(t){if(t===1){return this.v2.clone()}var point=this.v2.clone().sub(this.v1);point.multiplyScalar(t).add(this.v1);return point};LineCurve.prototype.getPointAt=function(u){return this.getPoint(u)};LineCurve.prototype.getTangent=function(t){var tangent=this.v2.clone().sub(this.v1);return tangent.normalize()};function CurvePath(){Curve.call(this);this.curves=[];this.autoClose=false}CurvePath.prototype=Object.assign(Object.create(Curve.prototype),{constructor:CurvePath,add:function(curve){this.curves.push(curve)},closePath:function(){var startPoint=this.curves[0].getPoint(0);var endPoint=this.curves[this.curves.length-1].getPoint(1);if(!startPoint.equals(endPoint)){this.curves.push(new LineCurve(endPoint,startPoint))}},getPoint:function(t){var d=t*this.getLength();var curveLengths=this.getCurveLengths();var i=0;while(i=d){var diff=curveLengths[i]-d;var curve=this.curves[i];var segmentLength=curve.getLength();var u=segmentLength===0?0:1-diff/segmentLength;return curve.getPointAt(u)}i++}return null},getLength:function(){var lens=this.getCurveLengths();return lens[lens.length-1]},updateArcLengths:function(){this.needsUpdate=true;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length){return this.cacheLengths}var lengths=[],sums=0;for(var i=0,l=this.curves.length;i1&&!points[points.length-1].equals(points[0])){points.push(points[0])}return points},createPointsGeometry:function(divisions){var pts=this.getPoints(divisions);return this.createGeometry(pts)},createSpacedPointsGeometry:function(divisions){var pts=this.getSpacedPoints(divisions);return this.createGeometry(pts)},createGeometry:function(points){var geometry=new Geometry;for(var i=0,l=points.length;itwoPi)deltaAngle-=twoPi;if(deltaAnglepoints.length-2?points.length-1:intPoint+1];var point3=points[intPoint>points.length-3?points.length-1:intPoint+2];return new Vector2(CatmullRom(weight,point0.x,point1.x,point2.x,point3.x),CatmullRom(weight,point0.y,point1.y,point2.y,point3.y))};function CubicBezierCurve(v0,v1,v2,v3){Curve.call(this);this.v0=v0;this.v1=v1;this.v2=v2;this.v3=v3}CubicBezierCurve.prototype=Object.create(Curve.prototype);CubicBezierCurve.prototype.constructor=CubicBezierCurve;CubicBezierCurve.prototype.getPoint=function(t){var v0=this.v0,v1=this.v1,v2=this.v2,v3=this.v3;return new Vector2(CubicBezier(t,v0.x,v1.x,v2.x,v3.x),CubicBezier(t,v0.y,v1.y,v2.y,v3.y))};function QuadraticBezierCurve(v0,v1,v2){Curve.call(this);this.v0=v0;this.v1=v1;this.v2=v2}QuadraticBezierCurve.prototype=Object.create(Curve.prototype);QuadraticBezierCurve.prototype.constructor=QuadraticBezierCurve;QuadraticBezierCurve.prototype.getPoint=function(t){var v0=this.v0,v1=this.v1,v2=this.v2;return new Vector2(QuadraticBezier(t,v0.x,v1.x,v2.x),QuadraticBezier(t,v0.y,v1.y,v2.y))};var PathPrototype=Object.assign(Object.create(CurvePath.prototype),{fromPoints:function(vectors){this.moveTo(vectors[0].x,vectors[0].y);for(var i=1,l=vectors.length;i0){var firstPoint=curve.getPoint(0);if(!firstPoint.equals(this.currentPoint)){this.lineTo(firstPoint.x,firstPoint.y)}}this.curves.push(curve);var lastPoint=curve.getPoint(1);this.currentPoint.copy(lastPoint)}});function Path(points){CurvePath.call(this);this.currentPoint=new Vector2;if(points){this.fromPoints(points)}}Path.prototype=PathPrototype;PathPrototype.constructor=Path;function Shape(){Path.apply(this,arguments);this.holes=[]}Shape.prototype=Object.assign(Object.create(PathPrototype),{constructor:Shape,getPointsHoles:function(divisions){var holesPts=[];for(var i=0,l=this.holes.length;iNumber.EPSILON){if(edgeDy<0){edgeLowPt=inPolygon[q];edgeDx=-edgeDx;edgeHighPt=inPolygon[p];edgeDy=-edgeDy}if(inPt.yedgeHighPt.y)continue;if(inPt.y===edgeLowPt.y){if(inPt.x===edgeLowPt.x)return true}else{var perpEdge=edgeDy*(inPt.x-edgeLowPt.x)-edgeDx*(inPt.y-edgeLowPt.y);if(perpEdge===0)return true;if(perpEdge<0)continue;inside=!inside}}else{if(inPt.y!==edgeLowPt.y)continue;if(edgeHighPt.x<=inPt.x&&inPt.x<=edgeLowPt.x||edgeLowPt.x<=inPt.x&&inPt.x<=edgeHighPt.x)return true}}return inside}var isClockWise=ShapeUtils.isClockWise;var subPaths=this.subPaths;if(subPaths.length===0)return[];if(noHoles===true)return toShapesNoHoles(subPaths);var solid,tmpPath,tmpShape,shapes=[];if(subPaths.length===1){tmpPath=subPaths[0];tmpShape=new Shape;tmpShape.curves=tmpPath.curves;shapes.push(tmpShape);return shapes}var holesFirst=!isClockWise(subPaths[0].getPoints());holesFirst=isCCW?!holesFirst:holesFirst;var betterShapeHoles=[];var newShapes=[];var newShapeHoles=[];var mainIdx=0;var tmpPoints;newShapes[mainIdx]=undefined;newShapeHoles[mainIdx]=[];for(var i=0,l=subPaths.length;i1){var ambiguous=false;var toChange=[];for(var sIdx=0,sLen=newShapes.length;sIdx0){if(!ambiguous)newShapeHoles=betterShapeHoles}}var tmpHoles;for(var i=0,il=newShapes.length;i0){this.source.connect(this.filters[0]);for(var i=1,l=this.filters.length;i0){this.source.disconnect(this.filters[0]);for(var i=1,l=this.filters.length;i=.5){for(var i=0;i!==stride;++i){buffer[dstOffset+i]=buffer[srcOffset+i]}}},_slerp:function(buffer,dstOffset,srcOffset,t){Quaternion.slerpFlat(buffer,dstOffset,buffer,dstOffset,buffer,srcOffset,t)},_lerp:function(buffer,dstOffset,srcOffset,t,stride){var s=1-t;for(var i=0;i!==stride;++i){var j=dstOffset+i;buffer[j]=buffer[j]*s+buffer[srcOffset+i]*t}}});function Composite(targetGroup,path,optionalParsedPath){var parsedPath=optionalParsedPath||PropertyBinding.parseTrackName(path);this._targetGroup=targetGroup;this._bindings=targetGroup.subscribe_(path,parsedPath)}Object.assign(Composite.prototype,{getValue:function(array,offset){this.bind();var firstValidIndex=this._targetGroup.nCachedObjects_,binding=this._bindings[firstValidIndex];if(binding!==undefined)binding.getValue(array,offset)},setValue:function(array,offset){var bindings=this._bindings; for(var i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i){bindings[i].setValue(array,offset)}},bind:function(){var bindings=this._bindings;for(var i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i){bindings[i].bind()}},unbind:function(){var bindings=this._bindings;for(var i=this._targetGroup.nCachedObjects_,n=bindings.length;i!==n;++i){bindings[i].unbind()}}});function PropertyBinding(rootNode,path,parsedPath){this.path=path;this.parsedPath=parsedPath||PropertyBinding.parseTrackName(path);this.node=PropertyBinding.findNode(rootNode,this.parsedPath.nodeName)||rootNode;this.rootNode=rootNode}Object.assign(PropertyBinding,{Composite:Composite,create:function(root,path,parsedPath){if(!(root&&root.isAnimationObjectGroup)){return new PropertyBinding(root,path,parsedPath)}else{return new PropertyBinding.Composite(root,path,parsedPath)}},sanitizeNodeName:function(name){return name.replace(/\s/g,"_").replace(/[^\w-]/g,"")},parseTrackName:function(){var directoryRe=/((?:[\w-]+[\/:])*)/;var nodeRe=/([\w-\.]+)?/;var objectRe=/(?:\.([\w-]+)(?:\[(.+)\])?)?/;var propertyRe=/\.([\w-]+)(?:\[(.+)\])?/;var trackRe=new RegExp(""+"^"+directoryRe.source+nodeRe.source+objectRe.source+propertyRe.source+"$");var supportedObjectNames=["material","materials","bones"];return function(trackName){var matches=trackRe.exec(trackName);if(!matches){throw new Error("PropertyBinding: Cannot parse trackName: "+trackName)}var results={nodeName:matches[2],objectName:matches[3],objectIndex:matches[4],propertyName:matches[5],propertyIndex:matches[6]};var lastDot=results.nodeName&&results.nodeName.lastIndexOf(".");if(lastDot!==undefined&&lastDot!==-1){var objectName=results.nodeName.substring(lastDot+1);if(supportedObjectNames.indexOf(objectName)!==-1){results.nodeName=results.nodeName.substring(0,lastDot);results.objectName=objectName}}if(results.propertyName===null||results.propertyName.length===0){throw new Error("PropertyBinding: can not parse propertyName from trackName: "+trackName)}return results}}(),findNode:function(root,nodeName){if(!nodeName||nodeName===""||nodeName==="root"||nodeName==="."||nodeName===-1||nodeName===root.name||nodeName===root.uuid){return root}if(root.skeleton){var searchSkeleton=function(skeleton){for(var i=0;i=nCachedObjects){var lastCachedIndex=nCachedObjects++,firstActiveObject=objects[lastCachedIndex];indicesByUUID[firstActiveObject.uuid]=index;objects[index]=firstActiveObject;indicesByUUID[uuid]=lastCachedIndex;objects[lastCachedIndex]=object;for(var j=0,m=nBindings;j!==m;++j){var bindingsForPath=bindings[j],firstActive=bindingsForPath[lastCachedIndex],binding=bindingsForPath[index];bindingsForPath[index]=firstActive;bindingsForPath[lastCachedIndex]=binding}}}this.nCachedObjects_=nCachedObjects},uncache:function(var_args){var objects=this._objects,nObjects=objects.length,nCachedObjects=this.nCachedObjects_,indicesByUUID=this._indicesByUUID,bindings=this._bindings,nBindings=bindings.length;for(var i=0,n=arguments.length;i!==n;++i){var object=arguments[i],uuid=object.uuid,index=indicesByUUID[uuid];if(index!==undefined){delete indicesByUUID[uuid];if(index0){var interpolants=this._interpolants;var propertyMixers=this._propertyBindings;for(var j=0,m=interpolants.length;j!==m;++j){interpolants[j].evaluate(clipTime);propertyMixers[j].accumulate(accuIndex,weight)}}},_updateWeight:function(time){var weight=0;if(this.enabled){weight=this.weight;var interpolant=this._weightInterpolant;if(interpolant!==null){var interpolantValue=interpolant.evaluate(time)[0];weight*=interpolantValue;if(time>interpolant.parameterPositions[1]){this.stopFading();if(interpolantValue===0){this.enabled=false}}}}this._effectiveWeight=weight;return weight},_updateTimeScale:function(time){var timeScale=0;if(!this.paused){timeScale=this.timeScale;var interpolant=this._timeScaleInterpolant;if(interpolant!==null){var interpolantValue=interpolant.evaluate(time)[0];timeScale*=interpolantValue;if(time>interpolant.parameterPositions[1]){this.stopWarping();if(timeScale===0){this.paused=true}else{this.timeScale=timeScale}}}}this._effectiveTimeScale=timeScale;return timeScale},_updateTime:function(deltaTime){var time=this.time+deltaTime;if(deltaTime===0)return time;var duration=this._clip.duration,loop=this.loop,loopCount=this._loopCount;if(loop===LoopOnce){if(loopCount===-1){this._loopCount=0;this._setEndings(true,true,false)}handle_stop:{if(time>=duration){time=duration}else if(time<0){time=0}else break handle_stop;if(this.clampWhenFinished)this.paused=true;else this.enabled=false;this._mixer.dispatchEvent({type:"finished",action:this,direction:deltaTime<0?-1:1})}}else{var pingPong=loop===LoopPingPong;if(loopCount===-1){if(deltaTime>=0){loopCount=0;this._setEndings(true,this.repetitions===0,pingPong)}else{this._setEndings(this.repetitions===0,true,pingPong)}}if(time>=duration||time<0){var loopDelta=Math.floor(time/duration);time-=duration*loopDelta;loopCount+=Math.abs(loopDelta);var pending=this.repetitions-loopCount;if(pending<0){if(this.clampWhenFinished)this.paused=true;else this.enabled=false;time=deltaTime>0?duration:0;this._mixer.dispatchEvent({type:"finished",action:this,direction:deltaTime>0?1:-1})}else{if(pending===0){var atStart=deltaTime<0;this._setEndings(atStart,!atStart,pingPong)}else{this._setEndings(false,false,pingPong)}this._loopCount=loopCount;this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:loopDelta})}}if(pingPong&&(loopCount&1)===1){this.time=time;return duration-time}}this.time=time;return time},_setEndings:function(atStart,atEnd,pingPong){var settings=this._interpolantSettings;if(pingPong){settings.endingStart=ZeroSlopeEnding;settings.endingEnd=ZeroSlopeEnding}else{if(atStart){settings.endingStart=this.zeroSlopeAtStart?ZeroSlopeEnding:ZeroCurvatureEnding}else{settings.endingStart=WrapAroundEnding}if(atEnd){settings.endingEnd=this.zeroSlopeAtEnd?ZeroSlopeEnding:ZeroCurvatureEnding}else{settings.endingEnd=WrapAroundEnding}}},_scheduleFading:function(duration,weightNow,weightThen){var mixer=this._mixer,now=mixer.time,interpolant=this._weightInterpolant;if(interpolant===null){interpolant=mixer._lendControlInterpolant();this._weightInterpolant=interpolant}var times=interpolant.parameterPositions,values=interpolant.sampleValues;times[0]=now;values[0]=weightNow;times[1]=now+duration;values[1]=weightThen;return this}});function AnimationMixer(root){this._root=root;this._initMemoryManager();this._accuIndex=0;this.time=0;this.timeScale=1}Object.assign(AnimationMixer.prototype,EventDispatcher.prototype,{_bindAction:function(action,prototypeAction){var root=action._localRoot||this._root,tracks=action._clip.tracks,nTracks=tracks.length,bindings=action._propertyBindings,interpolants=action._interpolants,rootUuid=root.uuid,bindingsByRoot=this._bindingsByRootAndName,bindingsByName=bindingsByRoot[rootUuid];if(bindingsByName===undefined){bindingsByName={};bindingsByRoot[rootUuid]=bindingsByName}for(var i=0;i!==nTracks;++i){var track=tracks[i],trackName=track.name,binding=bindingsByName[trackName];if(binding!==undefined){bindings[i]=binding}else{binding=bindings[i];if(binding!==undefined){if(binding._cacheIndex===null){++binding.referenceCount;this._addInactiveBinding(binding,rootUuid,trackName)}continue}var path=prototypeAction&&prototypeAction._propertyBindings[i].binding.parsedPath;binding=new PropertyMixer(PropertyBinding.create(root,trackName,path),track.ValueTypeName,track.getValueSize());++binding.referenceCount;this._addInactiveBinding(binding,rootUuid,trackName);bindings[i]=binding}interpolants[i].resultBuffer=binding.buffer}},_activateAction:function(action){if(!this._isActiveAction(action)){if(action._cacheIndex===null){var rootUuid=(action._localRoot||this._root).uuid,clipUuid=action._clip.uuid,actionsForClip=this._actionsByClip[clipUuid];this._bindAction(action,actionsForClip&&actionsForClip.knownActions[0]);this._addInactiveAction(action,clipUuid,rootUuid)}var bindings=action._propertyBindings;for(var i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];if(binding.useCount++===0){this._lendBinding(binding);binding.saveOriginalState()}}this._lendAction(action)}},_deactivateAction:function(action){if(this._isActiveAction(action)){var bindings=action._propertyBindings;for(var i=0,n=bindings.length;i!==n;++i){var binding=bindings[i];if(--binding.useCount===0){binding.restoreOriginalState();this._takeBackBinding(binding)}}this._takeBackAction(action)}},_initMemoryManager:function(){this._actions=[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var scope=this;this.stats={actions:{get total(){return scope._actions.length},get inUse(){return scope._nActiveActions}},bindings:{get total(){return scope._bindings.length},get inUse(){return scope._nActiveBindings}},controlInterpolants:{get total(){return scope._controlInterpolants.length},get inUse(){return scope._nActiveControlInterpolants}}}},_isActiveAction:function(action){var index=action._cacheIndex;return index!==null&&index1){var name=chunks[1];if(!frameRanges[name])frameRanges[name]={start:Infinity,end:-Infinity};var range=frameRanges[name];if(irange.end)range.end=i;if(!firstAnimation)firstAnimation=name}}for(var name in frameRanges){var range=frameRanges[name];this.createAnimation(name,range.start,range.end,fps)}this.firstAnimation=firstAnimation};MorphBlendMesh.prototype.setAnimationDirectionForward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=1;animation.directionBackwards=false}};MorphBlendMesh.prototype.setAnimationDirectionBackward=function(name){var animation=this.animationsMap[name];if(animation){animation.direction=-1;animation.directionBackwards=true}};MorphBlendMesh.prototype.setAnimationFPS=function(name,fps){var animation=this.animationsMap[name];if(animation){animation.fps=fps;animation.duration=(animation.end-animation.start)/animation.fps}};MorphBlendMesh.prototype.setAnimationDuration=function(name,duration){var animation=this.animationsMap[name];if(animation){animation.duration=duration;animation.fps=(animation.end-animation.start)/animation.duration}};MorphBlendMesh.prototype.setAnimationWeight=function(name,weight){var animation=this.animationsMap[name];if(animation){animation.weight=weight}};MorphBlendMesh.prototype.setAnimationTime=function(name,time){var animation=this.animationsMap[name];if(animation){animation.time=time}};MorphBlendMesh.prototype.getAnimationTime=function(name){var time=0;var animation=this.animationsMap[name];if(animation){time=animation.time}return time};MorphBlendMesh.prototype.getAnimationDuration=function(name){var duration=-1;var animation=this.animationsMap[name];if(animation){duration=animation.duration}return duration};MorphBlendMesh.prototype.playAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.time=0;animation.active=true}else{console.warn("THREE.MorphBlendMesh: animation["+name+"] undefined in .playAnimation()")}};MorphBlendMesh.prototype.stopAnimation=function(name){var animation=this.animationsMap[name];if(animation){animation.active=false}};MorphBlendMesh.prototype.update=function(delta){for(var i=0,il=this.animationsList.length;ianimation.duration||animation.time<0){animation.direction*=-1;if(animation.time>animation.duration){animation.time=animation.duration;animation.directionBackwards=true}if(animation.time<0){animation.time=0;animation.directionBackwards=false}}}else{animation.time=animation.time%animation.duration;if(animation.time<0)animation.time+=animation.duration}var keyframe=animation.start+_Math.clamp(Math.floor(animation.time/frameTime),0,animation.length-1);var weight=animation.weight;if(keyframe!==animation.currentFrame){this.morphTargetInfluences[animation.lastFrame]=0;this.morphTargetInfluences[animation.currentFrame]=1*weight;this.morphTargetInfluences[keyframe]=0;animation.lastFrame=animation.currentFrame;animation.currentFrame=keyframe}var mix=animation.time%frameTime/frameTime;if(animation.directionBackwards)mix=1-mix;if(animation.currentFrame!==animation.lastFrame){this.morphTargetInfluences[animation.currentFrame]=mix*weight;this.morphTargetInfluences[animation.lastFrame]=(1-mix)*weight}else{this.morphTargetInfluences[animation.currentFrame]=weight}}};function ImmediateRenderObject(material){Object3D.call(this);this.material=material;this.render=function(renderCallback){}}ImmediateRenderObject.prototype=Object.create(Object3D.prototype);ImmediateRenderObject.prototype.constructor=ImmediateRenderObject;ImmediateRenderObject.prototype.isImmediateRenderObject=true;function VertexNormalsHelper(object,size,hex,linewidth){this.object=object;this.size=size!==undefined?size:1;var color=hex!==undefined?hex:16711680;var width=linewidth!==undefined?linewidth:1;var nNormals=0;var objGeometry=this.object.geometry;if(objGeometry&&objGeometry.isGeometry){nNormals=objGeometry.faces.length*3}else if(objGeometry&&objGeometry.isBufferGeometry){nNormals=objGeometry.attributes.normal.count}var geometry=new BufferGeometry;var positions=new Float32BufferAttribute(nNormals*2*3,3);geometry.addAttribute("position",positions);LineSegments.call(this,geometry,new LineBasicMaterial({color:color,linewidth:width}));this.matrixAutoUpdate=false;this.update()}VertexNormalsHelper.prototype=Object.create(LineSegments.prototype);VertexNormalsHelper.prototype.constructor=VertexNormalsHelper;VertexNormalsHelper.prototype.update=function(){var v1=new Vector3;var v2=new Vector3;var normalMatrix=new Matrix3;return function update(){var keys=["a","b","c"];this.object.updateMatrixWorld(true);normalMatrix.getNormalMatrix(this.object.matrixWorld);var matrixWorld=this.object.matrixWorld;var position=this.geometry.attributes.position;var objGeometry=this.object.geometry;if(objGeometry&&objGeometry.isGeometry){var vertices=objGeometry.vertices;var faces=objGeometry.faces;var idx=0;for(var i=0,l=faces.length;i.99999){this.quaternion.set(0,0,0,1)}else if(dir.y<-.99999){this.quaternion.set(1,0,0,0)}else{axis.set(dir.z,0,-dir.x).normalize();radians=Math.acos(dir.y);this.quaternion.setFromAxisAngle(axis,radians)}}}();ArrowHelper.prototype.setLength=function(length,headLength,headWidth){if(headLength===undefined)headLength=.2*length;if(headWidth===undefined)headWidth=.2*headLength;this.line.scale.set(1,Math.max(0,length-headLength),1);this.line.updateMatrix();this.cone.scale.set(headWidth,headLength,headWidth);this.cone.position.y=length;this.cone.updateMatrix()};ArrowHelper.prototype.setColor=function(color){this.line.material.color.copy(color);this.cone.material.color.copy(color)};function AxisHelper(size){size=size||1;var vertices=[0,0,0,size,0,0,0,0,0,0,size,0,0,0,0,0,0,size];var colors=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1];var geometry=new BufferGeometry;geometry.addAttribute("position",new Float32BufferAttribute(vertices,3));geometry.addAttribute("color",new Float32BufferAttribute(colors,3));var material=new LineBasicMaterial({vertexColors:VertexColors});LineSegments.call(this,geometry,material)}AxisHelper.prototype=Object.create(LineSegments.prototype);AxisHelper.prototype.constructor=AxisHelper;function CubicPoly(){var c0=0,c1=0,c2=0,c3=0;function init(x0,x1,t0,t1){c0=x0;c1=t0;c2=-3*x0+3*x1-2*t0-t1;c3=2*x0-2*x1+t0+t1}return{initCatmullRom:function(x0,x1,x2,x3,tension){init(x1,x2,tension*(x2-x0),tension*(x3-x1))},initNonuniformCatmullRom:function(x0,x1,x2,x3,dt0,dt1,dt2){var t1=(x1-x0)/dt0-(x2-x0)/(dt0+dt1)+(x2-x1)/dt1;var t2=(x2-x1)/dt1-(x3-x1)/(dt1+dt2)+(x3-x2)/dt2;t1*=dt1;t2*=dt1;init(x1,x2,t1,t2)},calc:function(t){var t2=t*t;var t3=t2*t;return c0+c1*t+c2*t2+c3*t3}}}var tmp=new Vector3;var px=new CubicPoly;var py=new CubicPoly;var pz=new CubicPoly;function CatmullRomCurve3(points){Curve.call(this);if(points.length<2)console.warn("THREE.CatmullRomCurve3: Points array needs at least two entries.");this.points=points||[];this.closed=false}CatmullRomCurve3.prototype=Object.create(Curve.prototype);CatmullRomCurve3.prototype.constructor=CatmullRomCurve3;CatmullRomCurve3.prototype.getPoint=function(t){var points=this.points;var l=points.length;var point=(l-(this.closed?0:1))*t;var intPoint=Math.floor(point);var weight=point-intPoint;if(this.closed){intPoint+=intPoint>0?0:(Math.floor(Math.abs(intPoint)/points.length)+1)*points.length}else if(weight===0&&intPoint===l-1){intPoint=l-2;weight=1}var p0,p1,p2,p3;if(this.closed||intPoint>0){p0=points[(intPoint-1)%l]}else{tmp.subVectors(points[0],points[1]).add(points[0]);p0=tmp}p1=points[intPoint%l];p2=points[(intPoint+1)%l];if(this.closed||intPoint+20?url:"visual_scene0"]}else{return null}}function parseKinematicsModel(){var kinematicsModelElement=COLLADA.querySelectorAll("instance_kinematics_model")[0];if(kinematicsModelElement){var url=kinematicsModelElement.getAttribute("url").replace(/^#/,"");return kinematicsModels[url.length>0?url:"kinematics_model0"]}else{return null}}function createAnimations(){animData=[];recurseHierarchy(scene)}function recurseHierarchy(node){var n=visualScene.getChildById(node.colladaId,true),newData=null;if(n&&n.keys){newData={fps:60,hierarchy:[{node:n,keys:n.keys,sids:n.sids}],node:node,name:"animation_"+node.name,length:0};animData.push(newData);for(var i=0,il=n.keys.length;i=0){var inv=skin.invBindMatrices[found];bone.invBindMatrix=inv;bone.skinningMatrix=new THREE.Matrix4;bone.skinningMatrix.multiplyMatrices(bone.world,inv);bone.animatrix=new THREE.Matrix4;bone.animatrix.copy(bone.localworld);bone.weights=[];for(var j=0;jjoint.limits.max||value1){material=new THREE.MultiMaterial(used_materials_array);for(j=0;j0){material.morphTargets=true;material.skinning=false}else{material.morphTargets=false;material.skinning=true}mesh=new THREE.SkinnedMesh(geom,material,false);mesh.name="skin_"+skins.length;skins.push(mesh)}else if(morphController!==undefined){createMorph(geom,morphController);material.morphTargets=true;mesh=new THREE.Mesh(geom,material);mesh.name="morph_"+morphs.length;morphs.push(mesh)}else{if(geom.isLineStrip===true){mesh=new THREE.Line(geom)}else{mesh=new THREE.Mesh(geom,material)}}obj.add(mesh)}}for(i=0;it){value=sampler.output[j];break}}if(value!==undefined){if(value instanceof THREE.Matrix4){matrix.multiplyMatrices(matrix,value)}else{matrix.multiplyMatrices(matrix,transform.matrix)}}else{matrix.multiplyMatrices(matrix,transform.matrix)}}else{matrix.multiplyMatrices(matrix,transform.matrix)}}return matrix}function bakeAnimations(node){if(node.channels&&node.channels.length){var keys=[],sids=[];for(var i=0,il=node.channels.length;itime){break}}return retVal}function findTimeNdx(keys,time){var ndx=-1;for(var i=0,il=keys.length;i=time){ndx=i}}return ndx}function interpolateKeys(keys,key,ndx,fullSid){var prevKey=getPrevKeyWith(keys,fullSid,ndx?ndx-1:0),nextKey=getNextKeyWith(keys,fullSid,ndx+1);if(prevKey&&nextKey){var scale=(key.time-prevKey.time)/(nextKey.time-prevKey.time),prevTarget=prevKey.getTarget(fullSid),nextData=nextKey.getTarget(fullSid).data,prevData=prevTarget.data,data;if(prevTarget.type==="matrix"){data=prevData}else if(prevData.length){data=[];for(var i=0;i=0?ndx:ndx+keys.length;for(;ndx>=0;ndx--){var key=keys[ndx];if(key.hasTarget(fullSid)){return key}}return null}function _Image(){this.id="";this.init_from=""}_Image.prototype.parse=function(element){this.id=element.getAttribute("id");for(var i=0;i=0;var arrSyntax=sid.indexOf("(")>=0;var arrIndices;if(dotSyntax){parts=sid.split(".");sid=parts.shift()}else if(arrSyntax){arrIndices=sid.split("(");sid=arrIndices.shift();for(var j=0;j4&&options.subdivideFaces){var clr=cs.length?cs:new THREE.Color,vec1,vec2,vec3,v1,v2,norm;for(k=1;k4){uvArr=[uv[0],uv[ndx+1],uv[ndx+2]]}else if(vcount===4){if(ndx===0){uvArr=[uv[0],uv[1],uv[3]]}else{uvArr=[uv[1].clone(),uv[2],uv[3].clone()]}}else{uvArr=[uv[0],uv[1],uv[2]]}if(geom.faceVertexUvs[k]===undefined){geom.faceVertexUvs[k]=[]}geom.faceVertexUvs[k].push(uvArr)}}}else{console.log("dropped face with vcount "+vcount+" for geometry with id: "+geom.id)}i+=maxOffset*vcount}}};function Polygons(){this.material="";this.count=0;this.inputs=[];this.vcount=null;this.p=[];this.geometry=new THREE.Geometry}Polygons.prototype.setVertices=function(vertices){for(var i=0;i0)this[child.nodeName]=parseFloat(f[0].textContent);break;default:break}}this.create();return this};Shader.prototype.create=function(){var props={};var transparent=false;if(this["transparency"]!==undefined&&this["transparent"]!==undefined){var transparentColor=this["transparent"];var transparencyLevel=(this.transparent.color.r+this.transparent.color.g+this.transparent.color.b)/3*this.transparency;if(transparencyLevel>0){transparent=true;props["transparent"]=true;props["opacity"]=1-transparencyLevel}}var keys={diffuse:"map",ambient:"lightMap",specular:"specularMap",emission:"emissionMap",bump:"bumpMap",normal:"normalMap"};for(var prop in this){switch(prop){case"ambient":case"emission":case"diffuse":case"specular":case"bump":case"normal":var cot=this[prop];if(cot instanceof ColorOrTexture){if(cot.isTexture()){var samplerId=cot.texture;var sampler=this.effect.sampler[samplerId];if(sampler!==undefined&&sampler.source!==undefined){var surface=this.effect.surface[sampler.source];if(surface!==undefined){var image=images[surface.init_from];if(image){var url=baseUrl+image.init_from;var texture;var loader=THREE.Loader.Handlers.get(url);if(loader!==null){texture=loader.load(url)}else{texture=new THREE.Texture;loadTextureImage(texture,url)}if(sampler.wrap_s==="MIRROR"){texture.wrapS=THREE.MirroredRepeatWrapping}else if(sampler.wrap_s==="WRAP"||cot.texOpts.wrapU){texture.wrapS=THREE.RepeatWrapping}else{texture.wrapS=THREE.ClampToEdgeWrapping}if(sampler.wrap_t==="MIRROR"){texture.wrapT=THREE.MirroredRepeatWrapping}else if(sampler.wrap_t==="WRAP"||cot.texOpts.wrapV){texture.wrapT=THREE.RepeatWrapping}else{texture.wrapT=THREE.ClampToEdgeWrapping}texture.offset.x=cot.texOpts.offsetU;texture.offset.y=cot.texOpts.offsetV;texture.repeat.x=cot.texOpts.repeatU;texture.repeat.y=cot.texOpts.repeatV;props[keys[prop]]=texture;if(prop==="emission")props["emissive"]=16777215}}}}else if(prop==="diffuse"||!transparent){if(prop==="emission"){props["emissive"]=cot.color.getHex()}else{props[prop]=cot.color.getHex()}}}break;case"shininess":props[prop]=this[prop];break;case"reflectivity":props[prop]=this[prop];if(props[prop]>0)props["envMap"]=options.defaultEnvMap;props["combine"]=THREE.MixOperation;break;case"index_of_refraction":props["refractionRatio"]=this[prop];if(this[prop]!==1)props["envMap"]=options.defaultEnvMap;break;case"transparency":break;default:break}}props["shading"]=preferredShading;props["side"]=this.effect.doubleSided?THREE.DoubleSide:THREE.FrontSide;if(props.diffuse!==undefined){props.color=props.diffuse;delete props.diffuse}switch(this.type){case"constant":if(props.emissive!=undefined)props.color=props.emissive;this.material=new THREE.MeshBasicMaterial(props);break;case"phong":case"blinn":this.material=new THREE.MeshPhongMaterial(props);break;case"lambert":default:this.material=new THREE.MeshLambertMaterial(props);break}return this.material};function Surface(effect){this.effect=effect;this.init_from=null;this.format=null}Surface.prototype.parse=function(element){for(var i=0;i=0;var arrSyntax=sid.indexOf("(")>=0;if(dotSyntax){parts=sid.split(".");this.sid=parts.shift();this.member=parts.shift()}else if(arrSyntax){var arrIndices=sid.split("(");this.sid=arrIndices.shift();for(var j=0;j1){data=[];ndx*=this.strideOut;for(var i=0;i1)scale=1;if(prevData.length){data=[];for(var j=0;j=this.limits.max){this.static=true}this.middlePosition=(this.limits.min+this.limits.max)/2;return this};function Link(){this.sid="";this.name="";this.transforms=[];this.attachments=[]}Link.prototype.parse=function(element){this.sid=element.getAttribute("sid");this.name=element.getAttribute("name");this.transforms=[];this.attachments=[];for(var i=0;i0?_trimString(str).split(/\s+/):[]}function _trimString(str){return str.replace(/^\s+/,"").replace(/\s+$/,"")}function _attr_as_float(element,name,defaultValue){if(element.hasAttribute(name)){return parseFloat(element.getAttribute(name))}else{return defaultValue}}function _attr_as_int(element,name,defaultValue){if(element.hasAttribute(name)){return parseInt(element.getAttribute(name),10)}else{return defaultValue}}function _attr_as_string(element,name,defaultValue){if(element.hasAttribute(name)){return element.getAttribute(name)}else{return defaultValue}}function _format_float(f,num){if(f===undefined){var s="0.";while(s.length1?parts[1].substr(0,num):"0";while(parts[1].length-1&&index<3){var members=["X","Y","Z"],indices={X:0,Y:1,Z:2};index=getConvertedMember(members[index]);index=indices[index]}return index}function getConvertedMember(member){if(options.convertUpAxis){switch(member){case"X":switch(upConversion){case"XtoY":case"XtoZ":case"YtoX":member="Y";break;case"ZtoX":member="Z";break}break;case"Y":switch(upConversion){case"XtoY":case"YtoX":case"ZtoX":member="X";break;case"XtoZ":case"YtoZ":case"ZtoY":member="Z";break}break;case"Z":switch(upConversion){case"XtoZ":member="X";break;case"YtoZ":case"ZtoX":case"ZtoY":member="Y";break}break}}return member}return{load:load,parse:parse,setPreferredShading:setPreferredShading,applySkin:applySkin,geometries:geometries,options:options}}},{}],43:[function(_dereq_,module,exports){THREE.GLTFLoader=function(){function GLTFLoader(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager}GLTFLoader.prototype={constructor:GLTFLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var path=this.path&&typeof this.path==="string"?this.path:THREE.Loader.prototype.extractUrlBase(url);var loader=new THREE.FileLoader(scope.manager);loader.setResponseType("arraybuffer");loader.load(url,function(data){scope.parse(data,onLoad,path)},onProgress,onError)},setCrossOrigin:function(value){this.crossOrigin=value},setPath:function(value){this.path=value},parse:function(data,callback,path){var content;var extensions={};var magic=convertUint8ArrayToString(new Uint8Array(data,0,4));if(magic===BINARY_EXTENSION_HEADER_DEFAULTS.magic){extensions[EXTENSIONS.KHR_BINARY_GLTF]=new GLTFBinaryExtension(data);content=extensions[EXTENSIONS.KHR_BINARY_GLTF].content}else{content=convertUint8ArrayToString(new Uint8Array(data))}var json=JSON.parse(content);if(json.extensionsUsed&&json.extensionsUsed.indexOf(EXTENSIONS.KHR_MATERIALS_COMMON)>=0){extensions[EXTENSIONS.KHR_MATERIALS_COMMON]=new GLTFMaterialsCommonExtension(json)}console.time("GLTFLoader");var parser=new GLTFParser(json,extensions,{path:path||this.path,crossOrigin:this.crossOrigin});parser.parse(function(scene,scenes,cameras,animations){console.timeEnd("GLTFLoader");var glTF={scene:scene,scenes:scenes,cameras:cameras,animations:animations};callback(glTF)})}};function GLTFRegistry(){var objects={};return{get:function(key){return objects[key]},add:function(key,object){objects[key]=object},remove:function(key){delete objects[key]},removeAll:function(){objects={}},update:function(scene,camera){for(var name in objects){var object=objects[name];if(object.update){object.update(scene,camera)}}}}}GLTFLoader.Shaders={update:function(){console.warn("THREE.GLTFLoader.Shaders has been deprecated, and now updates automatically.")}};function GLTFShader(targetNode,allNodes){var boundUniforms={};var uniforms=targetNode.material.uniforms;for(var uniformId in uniforms){var uniform=uniforms[uniformId];if(uniform.semantic){var sourceNodeRef=uniform.node;var sourceNode=targetNode;if(sourceNodeRef){sourceNode=allNodes[sourceNodeRef]}boundUniforms[uniformId]={semantic:uniform.semantic,sourceNode:sourceNode,targetNode:targetNode,uniform:uniform}}}this.boundUniforms=boundUniforms;this._m4=new THREE.Matrix4}GLTFShader.prototype.update=function(scene,camera){var boundUniforms=this.boundUniforms;for(var name in boundUniforms){var boundUniform=boundUniforms[name];switch(boundUniform.semantic){case"MODELVIEW":var m4=boundUniform.uniform.value;m4.multiplyMatrices(camera.matrixWorldInverse,boundUniform.sourceNode.matrixWorld);break;case"MODELVIEWINVERSETRANSPOSE":var m3=boundUniform.uniform.value;this._m4.multiplyMatrices(camera.matrixWorldInverse,boundUniform.sourceNode.matrixWorld);m3.getNormalMatrix(this._m4);break;case"PROJECTION":var m4=boundUniform.uniform.value;m4.copy(camera.projectionMatrix);break;case"JOINTMATRIX":var m4v=boundUniform.uniform.value;for(var mi=0;mi=0?line.substring(0,pos):line;key=key.toLowerCase();var value=pos>=0?line.substring(pos+1):"";value=value.trim();if(key==="newmtl"){info={name:value};materialsInfo[value]=info}else if(info){if(key==="ka"||key==="kd"||key==="ks"){var ss=value.split(delimiter_pattern,3);info[key]=[parseFloat(ss[0]),parseFloat(ss[1]),parseFloat(ss[2])]}else{info[key]=value}}}var materialCreator=new THREE.MTLLoader.MaterialCreator(this.texturePath||this.path,this.materialOptions);materialCreator.setCrossOrigin(this.crossOrigin);materialCreator.setManager(this.manager);materialCreator.setMaterials(materialsInfo);return materialCreator}};THREE.MTLLoader.MaterialCreator=function(baseUrl,options){this.baseUrl=baseUrl||"";this.options=options;this.materialsInfo={};this.materials={};this.materialsArray=[];this.nameLookup={};this.side=this.options&&this.options.side?this.options.side:THREE.FrontSide;this.wrap=this.options&&this.options.wrap?this.options.wrap:THREE.RepeatWrapping};THREE.MTLLoader.MaterialCreator.prototype={constructor:THREE.MTLLoader.MaterialCreator,setCrossOrigin:function(value){this.crossOrigin=value},setManager:function(value){this.manager=value},setMaterials:function(materialsInfo){this.materialsInfo=this.convert(materialsInfo);this.materials={};this.materialsArray=[];this.nameLookup={}},convert:function(materialsInfo){if(!this.options)return materialsInfo;var converted={};for(var mn in materialsInfo){var mat=materialsInfo[mn];var covmat={};converted[mn]=covmat;for(var prop in mat){var save=true;var value=mat[prop];var lprop=prop.toLowerCase();switch(lprop){case"kd":case"ka":case"ks":if(this.options&&this.options.normalizeRGB){value=[value[0]/255,value[1]/255,value[2]/255]}if(this.options&&this.options.ignoreZeroRGBs){if(value[0]===0&&value[1]===0&&value[2]===0){save=false}}break;default:break}if(save){covmat[lprop]=value}}}return converted},preload:function(){for(var mn in this.materialsInfo){this.create(mn)}},getIndex:function(materialName){return this.nameLookup[materialName]},getAsArray:function(){var index=0;for(var mn in this.materialsInfo){this.materialsArray[index]=this.create(mn);this.nameLookup[mn]=index;index++}return this.materialsArray},create:function(materialName){if(this.materials[materialName]===undefined){this.createMaterial_(materialName)}return this.materials[materialName]},createMaterial_:function(materialName){var scope=this;var mat=this.materialsInfo[materialName];var params={name:materialName,side:this.side};function resolveURL(baseUrl,url){if(typeof url!=="string"||url==="")return"";if(/^https?:\/\//i.test(url))return url;return baseUrl+url}function setMapForType(mapType,value){if(params[mapType])return;var texParams=scope.getTextureParams(value,params);var map=scope.loadTexture(resolveURL(scope.baseUrl,texParams.url));map.repeat.copy(texParams.scale);map.offset.copy(texParams.offset);map.wrapS=scope.wrap;map.wrapT=scope.wrap;params[mapType]=map}for(var prop in mat){var value=mat[prop];var n;if(value==="")continue;switch(prop.toLowerCase()){case"kd":params.color=(new THREE.Color).fromArray(value); break;case"ks":params.specular=(new THREE.Color).fromArray(value);break;case"map_kd":setMapForType("map",value);break;case"map_ks":setMapForType("specularMap",value);break;case"map_bump":case"bump":setMapForType("bumpMap",value);break;case"ns":params.shininess=parseFloat(value);break;case"d":n=parseFloat(value);if(n<1){params.opacity=n;params.transparent=true}break;case"tr":n=parseFloat(value);if(n>0){params.opacity=1-n;params.transparent=true}break;default:break}}this.materials[materialName]=new THREE.MeshPhongMaterial(params);return this.materials[materialName]},getTextureParams:function(value,matParams){var texParams={scale:new THREE.Vector2(1,1),offset:new THREE.Vector2(0,0)};var items=value.split(/\s+/);var pos;pos=items.indexOf("-bm");if(pos>=0){matParams.bumpScale=parseFloat(items[pos+1]);items.splice(pos,2)}pos=items.indexOf("-s");if(pos>=0){texParams.scale.set(parseFloat(items[pos+1]),parseFloat(items[pos+2]));items.splice(pos,4)}pos=items.indexOf("-o");if(pos>=0){texParams.offset.set(parseFloat(items[pos+1]),parseFloat(items[pos+2]));items.splice(pos,4)}texParams.url=items.join(" ").trim();return texParams},loadTexture:function(url,mapping,onLoad,onProgress,onError){var texture;var loader=THREE.Loader.Handlers.get(url);var manager=this.manager!==undefined?this.manager:THREE.DefaultLoadingManager;if(loader===null){loader=new THREE.TextureLoader(manager)}if(loader.setCrossOrigin)loader.setCrossOrigin(this.crossOrigin);texture=loader.load(url,onLoad,onProgress,onError);if(mapping!==undefined)texture.mapping=mapping;return texture}}},{}],45:[function(_dereq_,module,exports){THREE.OBJLoader=function(manager){this.manager=manager!==undefined?manager:THREE.DefaultLoadingManager;this.materials=null;this.regexp={vertex_pattern:/^v\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)/,normal_pattern:/^vn\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)/,uv_pattern:/^vt\s+([\d\.\+\-eE]+)\s+([\d\.\+\-eE]+)/,face_vertex:/^f\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)(?:\s+(-?\d+))?/,face_vertex_uv:/^f\s+(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)(?:\s+(-?\d+)\/(-?\d+))?/,face_vertex_uv_normal:/^f\s+(-?\d+)\/(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\/(-?\d+)(?:\s+(-?\d+)\/(-?\d+)\/(-?\d+))?/,face_vertex_normal:/^f\s+(-?\d+)\/\/(-?\d+)\s+(-?\d+)\/\/(-?\d+)\s+(-?\d+)\/\/(-?\d+)(?:\s+(-?\d+)\/\/(-?\d+))?/,object_pattern:/^[og]\s*(.+)?/,smoothing_pattern:/^s\s+(\d+|on|off)/,material_library_pattern:/^mtllib /,material_use_pattern:/^usemtl /}};THREE.OBJLoader.prototype={constructor:THREE.OBJLoader,load:function(url,onLoad,onProgress,onError){var scope=this;var loader=new THREE.FileLoader(scope.manager);loader.setPath(this.path);loader.load(url,function(text){onLoad(scope.parse(text))},onProgress,onError)},setPath:function(value){this.path=value},setMaterials:function(materials){this.materials=materials},_createParserState:function(){var state={objects:[],object:{},vertices:[],normals:[],uvs:[],materialLibraries:[],startObject:function(name,fromDeclaration){if(this.object&&this.object.fromDeclaration===false){this.object.name=name;this.object.fromDeclaration=fromDeclaration!==false;return}var previousMaterial=this.object&&typeof this.object.currentMaterial==="function"?this.object.currentMaterial():undefined;if(this.object&&typeof this.object._finalize==="function"){this.object._finalize(true)}this.object={name:name||"",fromDeclaration:fromDeclaration!==false,geometry:{vertices:[],normals:[],uvs:[]},materials:[],smooth:true,startMaterial:function(name,libraries){var previous=this._finalize(false);if(previous&&(previous.inherited||previous.groupCount<=0)){this.materials.splice(previous.index,1)}var material={index:this.materials.length,name:name||"",mtllib:Array.isArray(libraries)&&libraries.length>0?libraries[libraries.length-1]:"",smooth:previous!==undefined?previous.smooth:this.smooth,groupStart:previous!==undefined?previous.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:false,clone:function(index){var cloned={index:typeof index==="number"?index:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:false};cloned.clone=this.clone.bind(cloned);return cloned}};this.materials.push(material);return material},currentMaterial:function(){if(this.materials.length>0){return this.materials[this.materials.length-1]}return undefined},_finalize:function(end){var lastMultiMaterial=this.currentMaterial();if(lastMultiMaterial&&lastMultiMaterial.groupEnd===-1){lastMultiMaterial.groupEnd=this.geometry.vertices.length/3;lastMultiMaterial.groupCount=lastMultiMaterial.groupEnd-lastMultiMaterial.groupStart;lastMultiMaterial.inherited=false}if(end&&this.materials.length>1){for(var mi=this.materials.length-1;mi>=0;mi--){if(this.materials[mi].groupCount<=0){this.materials.splice(mi,1)}}}if(end&&this.materials.length===0){this.materials.push({name:"",smooth:this.smooth})}return lastMultiMaterial}};if(previousMaterial&&previousMaterial.name&&typeof previousMaterial.clone==="function"){var declared=previousMaterial.clone(0);declared.inherited=true;this.object.materials.push(declared)}this.objects.push(this.object)},finalize:function(){if(this.object&&typeof this.object._finalize==="function"){this.object._finalize(true)}},parseVertexIndex:function(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/3)*3},parseNormalIndex:function(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/3)*3},parseUVIndex:function(value,len){var index=parseInt(value,10);return(index>=0?index-1:index+len/2)*2},addVertex:function(a,b,c){var src=this.vertices;var dst=this.object.geometry.vertices;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[b+2]);dst.push(src[c+0]);dst.push(src[c+1]);dst.push(src[c+2])},addVertexLine:function(a){var src=this.vertices;var dst=this.object.geometry.vertices;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2])},addNormal:function(a,b,c){var src=this.normals;var dst=this.object.geometry.normals;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[a+2]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[b+2]);dst.push(src[c+0]);dst.push(src[c+1]);dst.push(src[c+2])},addUV:function(a,b,c){var src=this.uvs;var dst=this.object.geometry.uvs;dst.push(src[a+0]);dst.push(src[a+1]);dst.push(src[b+0]);dst.push(src[b+1]);dst.push(src[c+0]);dst.push(src[c+1])},addUVLine:function(a){var src=this.uvs;var dst=this.object.geometry.uvs;dst.push(src[a+0]);dst.push(src[a+1])},addFace:function(a,b,c,d,ua,ub,uc,ud,na,nb,nc,nd){var vLen=this.vertices.length;var ia=this.parseVertexIndex(a,vLen);var ib=this.parseVertexIndex(b,vLen);var ic=this.parseVertexIndex(c,vLen);var id;if(d===undefined){this.addVertex(ia,ib,ic)}else{id=this.parseVertexIndex(d,vLen);this.addVertex(ia,ib,id);this.addVertex(ib,ic,id)}if(ua!==undefined){var uvLen=this.uvs.length;ia=this.parseUVIndex(ua,uvLen);ib=this.parseUVIndex(ub,uvLen);ic=this.parseUVIndex(uc,uvLen);if(d===undefined){this.addUV(ia,ib,ic)}else{id=this.parseUVIndex(ud,uvLen);this.addUV(ia,ib,id);this.addUV(ib,ic,id)}}if(na!==undefined){var nLen=this.normals.length;ia=this.parseNormalIndex(na,nLen);ib=na===nb?ia:this.parseNormalIndex(nb,nLen);ic=na===nc?ia:this.parseNormalIndex(nc,nLen);if(d===undefined){this.addNormal(ia,ib,ic)}else{id=this.parseNormalIndex(nd,nLen);this.addNormal(ia,ib,id);this.addNormal(ib,ic,id)}}},addLineGeometry:function(vertices,uvs){this.object.geometry.type="Line";var vLen=this.vertices.length;var uvLen=this.uvs.length;for(var vi=0,l=vertices.length;vi0){buffergeometry.addAttribute("normal",new THREE.BufferAttribute(new Float32Array(geometry.normals),3))}else{buffergeometry.computeVertexNormals()}if(geometry.uvs.length>0){buffergeometry.addAttribute("uv",new THREE.BufferAttribute(new Float32Array(geometry.uvs),2))}var createdMaterials=[];for(var mi=0,miLen=materials.length;mi1){for(var mi=0,miLen=materials.length;mi=0.9.36 <0.10.0",type:"range"},"/Users/jerome/Downloads/tmp/aframe"]],_from:"webvr-polyfill@>=0.9.36 <0.10.0",_id:"webvr-polyfill@0.9.36",_inCache:true,_location:"/webvr-polyfill",_nodeVersion:"4.8.4",_npmOperationalInternal:{host:"s3://npm-registry-packages",tmp:"tmp/webvr-polyfill-0.9.36.tgz_1499892972378_0.10267087002284825"},_npmUser:{name:"jsantell",email:"jsantell@gmail.com"},_npmVersion:"2.15.11",_phantomChildren:{},_requested:{raw:"webvr-polyfill@^0.9.36",scope:null,escapedName:"webvr-polyfill",name:"webvr-polyfill",rawSpec:"^0.9.36",spec:">=0.9.36 <0.10.0",type:"range"},_requiredBy:["/"],_resolved:"https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.9.36.tgz",_shasum:"4b1e1556667e804beb0c8c2e67fdfcba3371e8c6",_shrinkwrap:null,_spec:"webvr-polyfill@^0.9.36",_where:"/Users/jerome/Downloads/tmp/aframe",authors:["Boris Smus ","Brandon Jones ","Jordan Santell "],bugs:{url:"https://github.com/googlevr/webvr-polyfill/issues"},dependencies:{},description:"Use WebVR today, on mobile or desktop, without requiring a special browser build.",devDependencies:{chai:"^3.5.0",jsdom:"^9.12.0",mocha:"^3.2.0",semver:"^5.3.0",webpack:"^2.6.1","webpack-dev-server":"^2.4.5"},directories:{},dist:{shasum:"4b1e1556667e804beb0c8c2e67fdfcba3371e8c6",tarball:"https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.9.36.tgz"},gitHead:"5f8693a9053ee1dea425e96d14cd1f2bef7a284c",homepage:"https://github.com/googlevr/webvr-polyfill",keywords:["vr","webvr"],license:"Apache-2.0",main:"src/node-entry",maintainers:[{name:"jsantell",email:"jsantell@gmail.com"},{name:"toji",email:"tojiro@gmail.com"},{name:"smus",email:"boris@smus.com"}],name:"webvr-polyfill",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+https://github.com/googlevr/webvr-polyfill.git"},scripts:{build:"webpack",start:"npm run watch",test:"mocha",watch:"webpack-dev-server"},version:"0.9.36"}},{}],48:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");var WakeLock=_dereq_("./wakelock.js");var nextDisplayId=1e3;var hasShowDeprecationWarning=false;var defaultLeftBounds=[0,0,.5,1];var defaultRightBounds=[.5,0,.5,1];function VRFrameData(){this.leftProjectionMatrix=new Float32Array(16);this.leftViewMatrix=new Float32Array(16);this.rightProjectionMatrix=new Float32Array(16);this.rightViewMatrix=new Float32Array(16);this.pose=null}function VRDisplay(){this.isPolyfilled=true;this.displayId=nextDisplayId++;this.displayName="webvr-polyfill displayName";this.depthNear=.01;this.depthFar=1e4;this.isConnected=true;this.isPresenting=false;this.capabilities={hasPosition:false,hasOrientation:false,hasExternalDisplay:false,canPresent:false,maxLayers:1};this.stageParameters=null;this.waitingForPresent_=false;this.layer_=null;this.fullscreenElement_=null;this.fullscreenWrapper_=null;this.fullscreenElementCachedStyle_=null;this.fullscreenEventTarget_=null;this.fullscreenChangeHandler_=null;this.fullscreenErrorHandler_=null;this.wakelock_=new WakeLock}VRDisplay.prototype.getFrameData=function(frameData){return Util.frameDataFromPose(frameData,this.getPose(),this)};VRDisplay.prototype.getPose=function(){return this.getImmediatePose()};VRDisplay.prototype.requestAnimationFrame=function(callback){return window.requestAnimationFrame(callback)};VRDisplay.prototype.cancelAnimationFrame=function(id){return window.cancelAnimationFrame(id)};VRDisplay.prototype.wrapForFullscreen=function(element){if(Util.isIOS()){return element}if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var cssProperties=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",cssProperties.join("; ")+";");this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==element){return this.fullscreenWrapper_}this.removeFullscreenWrapper();this.fullscreenElement_=element;var parent=this.fullscreenElement_.parentElement;parent.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_);parent.removeChild(this.fullscreenElement_);this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild);this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var self=this;function applyFullscreenElementStyle(){if(!self.fullscreenElement_){return}var cssProperties=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];self.fullscreenElement_.setAttribute("style",cssProperties.join("; ")+";")}applyFullscreenElementStyle();return this.fullscreenWrapper_};VRDisplay.prototype.removeFullscreenWrapper=function(){if(!this.fullscreenElement_){return}var element=this.fullscreenElement_;if(this.fullscreenElementCachedStyle_){element.setAttribute("style",this.fullscreenElementCachedStyle_)}else{element.removeAttribute("style")}this.fullscreenElement_=null;this.fullscreenElementCachedStyle_=null;var parent=this.fullscreenWrapper_.parentElement;this.fullscreenWrapper_.removeChild(element);parent.insertBefore(element,this.fullscreenWrapper_);parent.removeChild(this.fullscreenWrapper_);return element};VRDisplay.prototype.requestPresent=function(layers){var wasPresenting=this.isPresenting;var self=this;if(!(layers instanceof Array)){if(!hasShowDeprecationWarning){console.warn("Using a deprecated form of requestPresent. Should pass in an array of VRLayers.");hasShowDeprecationWarning=true}layers=[layers]}return new Promise(function(resolve,reject){if(!self.capabilities.canPresent){reject(new Error("VRDisplay is not capable of presenting."));return}if(layers.length==0||layers.length>self.capabilities.maxLayers){reject(new Error("Invalid number of layers."));return}var incomingLayer=layers[0];if(!incomingLayer.source){resolve();return}var leftBounds=incomingLayer.leftBounds||defaultLeftBounds;var rightBounds=incomingLayer.rightBounds||defaultRightBounds;if(wasPresenting){var layer=self.layer_;if(layer.source!==incomingLayer.source){layer.source=incomingLayer.source}for(var i=0;i<4;i++){layer.leftBounds[i]=leftBounds[i];layer.rightBounds[i]=rightBounds[i]}resolve();return}self.layer_={predistorted:incomingLayer.predistorted,source:incomingLayer.source,leftBounds:leftBounds.slice(0),rightBounds:rightBounds.slice(0)};self.waitingForPresent_=false;if(self.layer_&&self.layer_.source){var fullscreenElement=self.wrapForFullscreen(self.layer_.source);var onFullscreenChange=function(){var actualFullscreenElement=Util.getFullscreenElement();self.isPresenting=fullscreenElement===actualFullscreenElement;if(self.isPresenting){if(screen.orientation&&screen.orientation.lock){screen.orientation.lock("landscape-primary").catch(function(error){console.error("screen.orientation.lock() failed due to",error.message)})}self.waitingForPresent_=false;self.beginPresent_();resolve()}else{if(screen.orientation&&screen.orientation.unlock){screen.orientation.unlock()}self.removeFullscreenWrapper();self.wakelock_.release();self.endPresent_();self.removeFullscreenListeners_()}self.fireVRDisplayPresentChange_()};var onFullscreenError=function(){if(!self.waitingForPresent_){return}self.removeFullscreenWrapper();self.removeFullscreenListeners_();self.wakelock_.release();self.waitingForPresent_=false;self.isPresenting=false;reject(new Error("Unable to present."))};self.addFullscreenListeners_(fullscreenElement,onFullscreenChange,onFullscreenError);if(Util.requestFullscreen(fullscreenElement)){self.wakelock_.request();self.waitingForPresent_=true}else if(Util.isIOS()||Util.isWebViewAndroid()){self.wakelock_.request();self.isPresenting=true;self.beginPresent_();self.fireVRDisplayPresentChange_();resolve()}}if(!self.waitingForPresent_&&!Util.isIOS()){Util.exitFullscreen();reject(new Error("Unable to present."))}})};VRDisplay.prototype.exitPresent=function(){var wasPresenting=this.isPresenting;var self=this;this.isPresenting=false;this.layer_=null;this.wakelock_.release();return new Promise(function(resolve,reject){if(wasPresenting){if(!Util.exitFullscreen()&&Util.isIOS()){self.endPresent_();self.fireVRDisplayPresentChange_()}if(Util.isWebViewAndroid()){self.removeFullscreenWrapper();self.removeFullscreenListeners_();self.endPresent_();self.fireVRDisplayPresentChange_()}resolve()}else{reject(new Error("Was not presenting to VRDisplay."))}})};VRDisplay.prototype.getLayers=function(){if(this.layer_){return[this.layer_]}return[]};VRDisplay.prototype.fireVRDisplayPresentChange_=function(){var event=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(event)};VRDisplay.prototype.fireVRDisplayConnect_=function(){var event=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(event)};VRDisplay.prototype.addFullscreenListeners_=function(element,changeHandler,errorHandler){this.removeFullscreenListeners_();this.fullscreenEventTarget_=element;this.fullscreenChangeHandler_=changeHandler;this.fullscreenErrorHandler_=errorHandler;if(changeHandler){if(document.fullscreenEnabled){element.addEventListener("fullscreenchange",changeHandler,false)}else if(document.webkitFullscreenEnabled){element.addEventListener("webkitfullscreenchange",changeHandler,false)}else if(document.mozFullScreenEnabled){document.addEventListener("mozfullscreenchange",changeHandler,false)}else if(document.msFullscreenEnabled){element.addEventListener("msfullscreenchange",changeHandler,false)}}if(errorHandler){if(document.fullscreenEnabled){element.addEventListener("fullscreenerror",errorHandler,false)}else if(document.webkitFullscreenEnabled){element.addEventListener("webkitfullscreenerror",errorHandler,false)}else if(document.mozFullScreenEnabled){document.addEventListener("mozfullscreenerror",errorHandler,false)}else if(document.msFullscreenEnabled){element.addEventListener("msfullscreenerror",errorHandler,false)}}};VRDisplay.prototype.removeFullscreenListeners_=function(){if(!this.fullscreenEventTarget_)return;var element=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var changeHandler=this.fullscreenChangeHandler_;element.removeEventListener("fullscreenchange",changeHandler,false);element.removeEventListener("webkitfullscreenchange",changeHandler,false);document.removeEventListener("mozfullscreenchange",changeHandler,false);element.removeEventListener("msfullscreenchange",changeHandler,false)}if(this.fullscreenErrorHandler_){var errorHandler=this.fullscreenErrorHandler_;element.removeEventListener("fullscreenerror",errorHandler,false);element.removeEventListener("webkitfullscreenerror",errorHandler,false);document.removeEventListener("mozfullscreenerror",errorHandler,false);element.removeEventListener("msfullscreenerror",errorHandler,false)}this.fullscreenEventTarget_=null;this.fullscreenChangeHandler_=null;this.fullscreenErrorHandler_=null};VRDisplay.prototype.beginPresent_=function(){};VRDisplay.prototype.endPresent_=function(){};VRDisplay.prototype.submitFrame=function(pose){};VRDisplay.prototype.getEyeParameters=function(whichEye){return null};function VRDevice(){this.isPolyfilled=true;this.hardwareUnitId="webvr-polyfill hardwareUnitId";this.deviceId="webvr-polyfill deviceId";this.deviceName="webvr-polyfill deviceName"}function HMDVRDevice(){}HMDVRDevice.prototype=new VRDevice;function PositionSensorVRDevice(){}PositionSensorVRDevice.prototype=new VRDevice;module.exports.VRFrameData=VRFrameData;module.exports.VRDisplay=VRDisplay;module.exports.VRDevice=VRDevice;module.exports.HMDVRDevice=HMDVRDevice;module.exports.PositionSensorVRDevice=PositionSensorVRDevice},{"./util.js":68,"./wakelock.js":70}],49:[function(_dereq_,module,exports){var CardboardUI=_dereq_("./cardboard-ui.js");var Util=_dereq_("./util.js");var WGLUPreserveGLState=_dereq_("./deps/wglu-preserve-state.js");var distortionVS=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n");var distortionFS=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");function CardboardDistorter(gl){this.gl=gl;this.ctxAttribs=gl.getContextAttributes();this.meshWidth=20;this.meshHeight=20;this.bufferScale=window.WebVRConfig.BUFFER_SCALE;this.bufferWidth=gl.drawingBufferWidth;this.bufferHeight=gl.drawingBufferHeight;this.realBindFramebuffer=gl.bindFramebuffer;this.realEnable=gl.enable;this.realDisable=gl.disable;this.realColorMask=gl.colorMask;this.realClearColor=gl.clearColor;this.realViewport=gl.viewport;if(!Util.isIOS()){this.realCanvasWidth=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"width");this.realCanvasHeight=Object.getOwnPropertyDescriptor(gl.canvas.__proto__,"height")}this.isPatched=false;this.lastBoundFramebuffer=null;this.cullFace=false;this.depthTest=false;this.blend=false;this.scissorTest=false;this.stencilTest=false;this.viewport=[0,0,0,0];this.colorMask=[true,true,true,true];this.clearColor=[0,0,0,0];this.attribs={position:0,texCoord:1};this.program=Util.linkProgram(gl,distortionVS,distortionFS,this.attribs);this.uniforms=Util.getProgramUniforms(gl,this.program);this.viewportOffsetScale=new Float32Array(8);this.setTextureBounds();this.vertexBuffer=gl.createBuffer();this.indexBuffer=gl.createBuffer();this.indexCount=0;this.renderTarget=gl.createTexture();this.framebuffer=gl.createFramebuffer();this.depthStencilBuffer=null;this.depthBuffer=null;this.stencilBuffer=null;if(this.ctxAttribs.depth&&this.ctxAttribs.stencil){this.depthStencilBuffer=gl.createRenderbuffer()}else if(this.ctxAttribs.depth){this.depthBuffer=gl.createRenderbuffer()}else if(this.ctxAttribs.stencil){this.stencilBuffer=gl.createRenderbuffer()}this.patch();this.onResize();if(!window.WebVRConfig.CARDBOARD_UI_DISABLED){this.cardboardUI=new CardboardUI(gl)}}CardboardDistorter.prototype.destroy=function(){var gl=this.gl;this.unpatch();gl.deleteProgram(this.program);gl.deleteBuffer(this.vertexBuffer);gl.deleteBuffer(this.indexBuffer);gl.deleteTexture(this.renderTarget);gl.deleteFramebuffer(this.framebuffer);if(this.depthStencilBuffer){gl.deleteRenderbuffer(this.depthStencilBuffer)}if(this.depthBuffer){gl.deleteRenderbuffer(this.depthBuffer)}if(this.stencilBuffer){gl.deleteRenderbuffer(this.stencilBuffer)}if(this.cardboardUI){this.cardboardUI.destroy()}};CardboardDistorter.prototype.onResize=function(){var gl=this.gl;var self=this;var glState=[gl.RENDERBUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0];WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null);if(self.scissorTest){self.realDisable.call(gl,gl.SCISSOR_TEST)}self.realColorMask.call(gl,true,true,true,true);self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight);self.realClearColor.call(gl,0,0,0,1);gl.clear(gl.COLOR_BUFFER_BIT);self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.framebuffer);gl.bindTexture(gl.TEXTURE_2D,self.renderTarget);gl.texImage2D(gl.TEXTURE_2D,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,self.bufferWidth,self.bufferHeight,0,self.ctxAttribs.alpha?gl.RGBA:gl.RGB,gl.UNSIGNED_BYTE,null);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,self.renderTarget,0);if(self.ctxAttribs.depth&&self.ctxAttribs.stencil){gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthStencilBuffer);gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_STENCIL,self.bufferWidth,self.bufferHeight);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.depthStencilBuffer)}else if(self.ctxAttribs.depth){gl.bindRenderbuffer(gl.RENDERBUFFER,self.depthBuffer);gl.renderbufferStorage(gl.RENDERBUFFER,gl.DEPTH_COMPONENT16,self.bufferWidth,self.bufferHeight);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER,self.depthBuffer)}else if(self.ctxAttribs.stencil){gl.bindRenderbuffer(gl.RENDERBUFFER,self.stencilBuffer);gl.renderbufferStorage(gl.RENDERBUFFER,gl.STENCIL_INDEX8,self.bufferWidth,self.bufferHeight);gl.framebufferRenderbuffer(gl.FRAMEBUFFER,gl.STENCIL_ATTACHMENT,gl.RENDERBUFFER,self.stencilBuffer)}if(!gl.checkFramebufferStatus(gl.FRAMEBUFFER)===gl.FRAMEBUFFER_COMPLETE){console.error("Framebuffer incomplete!")}self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer);if(self.scissorTest){self.realEnable.call(gl,gl.SCISSOR_TEST)}self.realColorMask.apply(gl,self.colorMask);self.realViewport.apply(gl,self.viewport);self.realClearColor.apply(gl,self.clearColor)});if(this.cardboardUI){this.cardboardUI.onResize()}};CardboardDistorter.prototype.patch=function(){if(this.isPatched){return}var self=this;var canvas=this.gl.canvas;var gl=this.gl;if(!Util.isIOS()){canvas.width=Util.getScreenWidth()*this.bufferScale;canvas.height=Util.getScreenHeight()*this.bufferScale;Object.defineProperty(canvas,"width",{configurable:true,enumerable:true,get:function(){return self.bufferWidth},set:function(value){self.bufferWidth=value;self.realCanvasWidth.set.call(canvas,value);self.onResize()}});Object.defineProperty(canvas,"height",{configurable:true,enumerable:true,get:function(){return self.bufferHeight},set:function(value){self.bufferHeight=value;self.realCanvasHeight.set.call(canvas,value);self.onResize()}})}this.lastBoundFramebuffer=gl.getParameter(gl.FRAMEBUFFER_BINDING);if(this.lastBoundFramebuffer==null){this.lastBoundFramebuffer=this.framebuffer;this.gl.bindFramebuffer(gl.FRAMEBUFFER,this.framebuffer)}this.gl.bindFramebuffer=function(target,framebuffer){self.lastBoundFramebuffer=framebuffer?framebuffer:self.framebuffer;self.realBindFramebuffer.call(gl,target,self.lastBoundFramebuffer)};this.cullFace=gl.getParameter(gl.CULL_FACE);this.depthTest=gl.getParameter(gl.DEPTH_TEST);this.blend=gl.getParameter(gl.BLEND);this.scissorTest=gl.getParameter(gl.SCISSOR_TEST);this.stencilTest=gl.getParameter(gl.STENCIL_TEST);gl.enable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=true;break;case gl.DEPTH_TEST:self.depthTest=true;break;case gl.BLEND:self.blend=true;break;case gl.SCISSOR_TEST:self.scissorTest=true;break;case gl.STENCIL_TEST:self.stencilTest=true;break}self.realEnable.call(gl,pname)};gl.disable=function(pname){switch(pname){case gl.CULL_FACE:self.cullFace=false; break;case gl.DEPTH_TEST:self.depthTest=false;break;case gl.BLEND:self.blend=false;break;case gl.SCISSOR_TEST:self.scissorTest=false;break;case gl.STENCIL_TEST:self.stencilTest=false;break}self.realDisable.call(gl,pname)};this.colorMask=gl.getParameter(gl.COLOR_WRITEMASK);gl.colorMask=function(r,g,b,a){self.colorMask[0]=r;self.colorMask[1]=g;self.colorMask[2]=b;self.colorMask[3]=a;self.realColorMask.call(gl,r,g,b,a)};this.clearColor=gl.getParameter(gl.COLOR_CLEAR_VALUE);gl.clearColor=function(r,g,b,a){self.clearColor[0]=r;self.clearColor[1]=g;self.clearColor[2]=b;self.clearColor[3]=a;self.realClearColor.call(gl,r,g,b,a)};this.viewport=gl.getParameter(gl.VIEWPORT);gl.viewport=function(x,y,w,h){self.viewport[0]=x;self.viewport[1]=y;self.viewport[2]=w;self.viewport[3]=h;self.realViewport.call(gl,x,y,w,h)};this.isPatched=true;Util.safariCssSizeWorkaround(canvas)};CardboardDistorter.prototype.unpatch=function(){if(!this.isPatched){return}var gl=this.gl;var canvas=this.gl.canvas;if(!Util.isIOS()){Object.defineProperty(canvas,"width",this.realCanvasWidth);Object.defineProperty(canvas,"height",this.realCanvasHeight)}canvas.width=this.bufferWidth;canvas.height=this.bufferHeight;gl.bindFramebuffer=this.realBindFramebuffer;gl.enable=this.realEnable;gl.disable=this.realDisable;gl.colorMask=this.realColorMask;gl.clearColor=this.realClearColor;gl.viewport=this.realViewport;if(this.lastBoundFramebuffer==this.framebuffer){gl.bindFramebuffer(gl.FRAMEBUFFER,null)}this.isPatched=false;setTimeout(function(){Util.safariCssSizeWorkaround(canvas)},1)};CardboardDistorter.prototype.setTextureBounds=function(leftBounds,rightBounds){if(!leftBounds){leftBounds=[0,0,.5,1]}if(!rightBounds){rightBounds=[.5,0,.5,1]}this.viewportOffsetScale[0]=leftBounds[0];this.viewportOffsetScale[1]=leftBounds[1];this.viewportOffsetScale[2]=leftBounds[2];this.viewportOffsetScale[3]=leftBounds[3];this.viewportOffsetScale[4]=rightBounds[0];this.viewportOffsetScale[5]=rightBounds[1];this.viewportOffsetScale[6]=rightBounds[2];this.viewportOffsetScale[7]=rightBounds[3]};CardboardDistorter.prototype.submitFrame=function(){var gl=this.gl;var self=this;var glState=[];if(!window.WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS){glState.push(gl.CURRENT_PROGRAM,gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING,gl.TEXTURE_BINDING_2D,gl.TEXTURE0)}WGLUPreserveGLState(gl,glState,function(gl){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,null);if(self.cullFace){self.realDisable.call(gl,gl.CULL_FACE)}if(self.depthTest){self.realDisable.call(gl,gl.DEPTH_TEST)}if(self.blend){self.realDisable.call(gl,gl.BLEND)}if(self.scissorTest){self.realDisable.call(gl,gl.SCISSOR_TEST)}if(self.stencilTest){self.realDisable.call(gl,gl.STENCIL_TEST)}self.realColorMask.call(gl,true,true,true,true);self.realViewport.call(gl,0,0,gl.drawingBufferWidth,gl.drawingBufferHeight);if(self.ctxAttribs.alpha||Util.isIOS()){self.realClearColor.call(gl,0,0,0,1);gl.clear(gl.COLOR_BUFFER_BIT)}gl.useProgram(self.program);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer);gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer);gl.enableVertexAttribArray(self.attribs.position);gl.enableVertexAttribArray(self.attribs.texCoord);gl.vertexAttribPointer(self.attribs.position,2,gl.FLOAT,false,20,0);gl.vertexAttribPointer(self.attribs.texCoord,3,gl.FLOAT,false,20,8);gl.activeTexture(gl.TEXTURE0);gl.uniform1i(self.uniforms.diffuse,0);gl.bindTexture(gl.TEXTURE_2D,self.renderTarget);gl.uniform4fv(self.uniforms.viewportOffsetScale,self.viewportOffsetScale);gl.drawElements(gl.TRIANGLES,self.indexCount,gl.UNSIGNED_SHORT,0);if(self.cardboardUI){self.cardboardUI.renderNoState()}self.realBindFramebuffer.call(self.gl,gl.FRAMEBUFFER,self.framebuffer);if(!self.ctxAttribs.preserveDrawingBuffer){self.realClearColor.call(gl,0,0,0,0);gl.clear(gl.COLOR_BUFFER_BIT)}if(!window.WebVRConfig.DIRTY_SUBMIT_FRAME_BINDINGS){self.realBindFramebuffer.call(gl,gl.FRAMEBUFFER,self.lastBoundFramebuffer)}if(self.cullFace){self.realEnable.call(gl,gl.CULL_FACE)}if(self.depthTest){self.realEnable.call(gl,gl.DEPTH_TEST)}if(self.blend){self.realEnable.call(gl,gl.BLEND)}if(self.scissorTest){self.realEnable.call(gl,gl.SCISSOR_TEST)}if(self.stencilTest){self.realEnable.call(gl,gl.STENCIL_TEST)}self.realColorMask.apply(gl,self.colorMask);self.realViewport.apply(gl,self.viewport);if(self.ctxAttribs.alpha||!self.ctxAttribs.preserveDrawingBuffer){self.realClearColor.apply(gl,self.clearColor)}});if(Util.isIOS()){var canvas=gl.canvas;if(canvas.width!=self.bufferWidth||canvas.height!=self.bufferHeight){self.bufferWidth=canvas.width;self.bufferHeight=canvas.height;self.onResize()}}};CardboardDistorter.prototype.updateDeviceInfo=function(deviceInfo){var gl=this.gl;var self=this;var glState=[gl.ARRAY_BUFFER_BINDING,gl.ELEMENT_ARRAY_BUFFER_BINDING];WGLUPreserveGLState(gl,glState,function(gl){var vertices=self.computeMeshVertices_(self.meshWidth,self.meshHeight,deviceInfo);gl.bindBuffer(gl.ARRAY_BUFFER,self.vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertices,gl.STATIC_DRAW);if(!self.indexCount){var indices=self.computeMeshIndices_(self.meshWidth,self.meshHeight);gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,self.indexBuffer);gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,indices,gl.STATIC_DRAW);self.indexCount=indices.length}})};CardboardDistorter.prototype.computeMeshVertices_=function(width,height,deviceInfo){var vertices=new Float32Array(2*width*height*5);var lensFrustum=deviceInfo.getLeftEyeVisibleTanAngles();var noLensFrustum=deviceInfo.getLeftEyeNoLensTanAngles();var viewport=deviceInfo.getLeftEyeVisibleScreenRect(noLensFrustum);var vidx=0;var iidx=0;for(var e=0;e<2;e++){for(var j=0;jmidline-buttonSize&&event.clientXcanvas.clientHeight-buttonSize){optionsCallback(event)}else if(event.clientXgl.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit");boundValues.push(null,null);break}if(!activeTexture){activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE)}gl.activeTexture(textureUnit);boundValues.push(gl.getParameter(binding),null);break;case gl.ACTIVE_TEXTURE:activeTexture=gl.getParameter(gl.ACTIVE_TEXTURE);boundValues.push(null);break;default:boundValues.push(gl.getParameter(binding));break}}callback(gl);for(var i=0;igl.TEXTURE31)break;gl.activeTexture(textureUnit);gl.bindTexture(gl.TEXTURE_2D,boundValue);break;case gl.TEXTURE_BINDING_CUBE_MAP:var textureUnit=bindings[++i];if(textureUnitgl.TEXTURE31)break;gl.activeTexture(textureUnit);gl.bindTexture(gl.TEXTURE_CUBE_MAP,boundValue);break;case gl.VIEWPORT:gl.viewport(boundValue[0],boundValue[1],boundValue[2],boundValue[3]);break;case gl.BLEND:case gl.CULL_FACE:case gl.DEPTH_TEST:case gl.SCISSOR_TEST:case gl.STENCIL_TEST:if(boundValue){gl.enable(binding)}else{gl.disable(binding)}break;default:console.log("No GL restore behavior for 0x"+binding.toString(16));break}if(activeTexture){gl.activeTexture(activeTexture)}}}module.exports=WGLUPreserveGLState},{}],53:[function(_dereq_,module,exports){var Distortion=_dereq_("./distortion/distortion.js");var MathUtil=_dereq_("./math-util.js");var Util=_dereq_("./util.js");function Device(params){this.width=params.width||Util.getScreenWidth();this.height=params.height||Util.getScreenHeight();this.widthMeters=params.widthMeters;this.heightMeters=params.heightMeters;this.bevelMeters=params.bevelMeters}var DEFAULT_ANDROID=new Device({widthMeters:.11,heightMeters:.062,bevelMeters:.004});var DEFAULT_IOS=new Device({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004});var Viewers={CardboardV1:new CardboardViewer({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new CardboardViewer({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};var DEFAULT_LEFT_CENTER={x:.5,y:.5};var DEFAULT_RIGHT_CENTER={x:.5,y:.5};function DeviceInfo(deviceParams){this.viewer=Viewers.CardboardV2;this.updateDeviceParams(deviceParams);this.distortion=new Distortion(this.viewer.distortionCoefficients)}DeviceInfo.prototype.updateDeviceParams=function(deviceParams){this.device=this.determineDevice_(deviceParams)||this.device};DeviceInfo.prototype.getDevice=function(){return this.device};DeviceInfo.prototype.setViewer=function(viewer){this.viewer=viewer;this.distortion=new Distortion(this.viewer.distortionCoefficients)};DeviceInfo.prototype.determineDevice_=function(deviceParams){if(!deviceParams){if(Util.isIOS()){console.warn("Using fallback iOS device measurements.");return DEFAULT_IOS}else{console.warn("Using fallback Android device measurements.");return DEFAULT_ANDROID}}var METERS_PER_INCH=.0254;var metersPerPixelX=METERS_PER_INCH/deviceParams.xdpi;var metersPerPixelY=METERS_PER_INCH/deviceParams.ydpi;var width=Util.getScreenWidth();var height=Util.getScreenHeight();return new Device({widthMeters:metersPerPixelX*width,heightMeters:metersPerPixelY*height,bevelMeters:deviceParams.bevelMm*.001})};DeviceInfo.prototype.getDistortedFieldOfViewLeftEye=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var eyeToScreenDistance=viewer.screenLensDistance;var outerDist=(device.widthMeters-viewer.interLensDistance)/2;var innerDist=viewer.interLensDistance/2;var bottomDist=viewer.baselineLensDistance-device.bevelMeters;var topDist=device.heightMeters-bottomDist;var outerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(outerDist/eyeToScreenDistance));var innerAngle=MathUtil.radToDeg*Math.atan(distortion.distort(innerDist/eyeToScreenDistance));var bottomAngle=MathUtil.radToDeg*Math.atan(distortion.distort(bottomDist/eyeToScreenDistance));var topAngle=MathUtil.radToDeg*Math.atan(distortion.distort(topDist/eyeToScreenDistance));return{leftDegrees:Math.min(outerAngle,viewer.fov),rightDegrees:Math.min(innerAngle,viewer.fov),downDegrees:Math.min(bottomAngle,viewer.fov),upDegrees:Math.min(topAngle,viewer.fov)}};DeviceInfo.prototype.getLeftEyeVisibleTanAngles=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var fovLeft=Math.tan(-MathUtil.degToRad*viewer.fov);var fovTop=Math.tan(MathUtil.degToRad*viewer.fov);var fovRight=Math.tan(MathUtil.degToRad*viewer.fov);var fovBottom=Math.tan(-MathUtil.degToRad*viewer.fov);var halfWidth=device.widthMeters/4;var halfHeight=device.heightMeters/2;var verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight;var centerX=viewer.interLensDistance/2-halfWidth;var centerY=-verticalLensOffset;var centerZ=viewer.screenLensDistance;var screenLeft=distortion.distort((centerX-halfWidth)/centerZ);var screenTop=distortion.distort((centerY+halfHeight)/centerZ);var screenRight=distortion.distort((centerX+halfWidth)/centerZ);var screenBottom=distortion.distort((centerY-halfHeight)/centerZ);var result=new Float32Array(4);result[0]=Math.max(fovLeft,screenLeft);result[1]=Math.min(fovTop,screenTop);result[2]=Math.min(fovRight,screenRight);result[3]=Math.max(fovBottom,screenBottom);return result};DeviceInfo.prototype.getLeftEyeNoLensTanAngles=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var result=new Float32Array(4);var fovLeft=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov));var fovTop=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov));var fovRight=distortion.distortInverse(Math.tan(MathUtil.degToRad*viewer.fov));var fovBottom=distortion.distortInverse(Math.tan(-MathUtil.degToRad*viewer.fov));var halfWidth=device.widthMeters/4;var halfHeight=device.heightMeters/2;var verticalLensOffset=viewer.baselineLensDistance-device.bevelMeters-halfHeight;var centerX=viewer.interLensDistance/2-halfWidth;var centerY=-verticalLensOffset;var centerZ=viewer.screenLensDistance;var screenLeft=(centerX-halfWidth)/centerZ;var screenTop=(centerY+halfHeight)/centerZ;var screenRight=(centerX+halfWidth)/centerZ;var screenBottom=(centerY-halfHeight)/centerZ;result[0]=Math.max(fovLeft,screenLeft);result[1]=Math.min(fovTop,screenTop);result[2]=Math.min(fovRight,screenRight);result[3]=Math.max(fovBottom,screenBottom);return result};DeviceInfo.prototype.getLeftEyeVisibleScreenRect=function(undistortedFrustum){var viewer=this.viewer;var device=this.device;var dist=viewer.screenLensDistance;var eyeX=(device.widthMeters-viewer.interLensDistance)/2;var eyeY=viewer.baselineLensDistance-device.bevelMeters;var left=(undistortedFrustum[0]*dist+eyeX)/device.widthMeters;var top=(undistortedFrustum[1]*dist+eyeY)/device.heightMeters;var right=(undistortedFrustum[2]*dist+eyeX)/device.widthMeters;var bottom=(undistortedFrustum[3]*dist+eyeY)/device.heightMeters;return{x:left,y:bottom,width:right-left,height:top-bottom}};DeviceInfo.prototype.getFieldOfViewLeftEye=function(opt_isUndistorted){return opt_isUndistorted?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()};DeviceInfo.prototype.getFieldOfViewRightEye=function(opt_isUndistorted){var fov=this.getFieldOfViewLeftEye(opt_isUndistorted);return{leftDegrees:fov.rightDegrees,rightDegrees:fov.leftDegrees,upDegrees:fov.upDegrees,downDegrees:fov.downDegrees}};DeviceInfo.prototype.getUndistortedFieldOfViewLeftEye=function(){var p=this.getUndistortedParams_();return{leftDegrees:MathUtil.radToDeg*Math.atan(p.outerDist),rightDegrees:MathUtil.radToDeg*Math.atan(p.innerDist),downDegrees:MathUtil.radToDeg*Math.atan(p.bottomDist),upDegrees:MathUtil.radToDeg*Math.atan(p.topDist)}};DeviceInfo.prototype.getUndistortedViewportLeftEye=function(){var p=this.getUndistortedParams_();var viewer=this.viewer;var device=this.device;var eyeToScreenDistance=viewer.screenLensDistance;var screenWidth=device.widthMeters/eyeToScreenDistance;var screenHeight=device.heightMeters/eyeToScreenDistance;var xPxPerTanAngle=device.width/screenWidth;var yPxPerTanAngle=device.height/screenHeight;var x=Math.round((p.eyePosX-p.outerDist)*xPxPerTanAngle);var y=Math.round((p.eyePosY-p.bottomDist)*yPxPerTanAngle);return{x:x,y:y,width:Math.round((p.eyePosX+p.innerDist)*xPxPerTanAngle)-x,height:Math.round((p.eyePosY+p.topDist)*yPxPerTanAngle)-y}};DeviceInfo.prototype.getUndistortedParams_=function(){var viewer=this.viewer;var device=this.device;var distortion=this.distortion;var eyeToScreenDistance=viewer.screenLensDistance;var halfLensDistance=viewer.interLensDistance/2/eyeToScreenDistance;var screenWidth=device.widthMeters/eyeToScreenDistance;var screenHeight=device.heightMeters/eyeToScreenDistance;var eyePosX=screenWidth/2-halfLensDistance;var eyePosY=(viewer.baselineLensDistance-device.bevelMeters)/eyeToScreenDistance;var maxFov=viewer.fov;var viewerMax=distortion.distortInverse(Math.tan(MathUtil.degToRad*maxFov));var outerDist=Math.min(eyePosX,viewerMax);var innerDist=Math.min(halfLensDistance,viewerMax);var bottomDist=Math.min(eyePosY,viewerMax);var topDist=Math.min(screenHeight-eyePosY,viewerMax);return{outerDist:outerDist,innerDist:innerDist,topDist:topDist,bottomDist:bottomDist,eyePosX:eyePosX,eyePosY:eyePosY}};function CardboardViewer(params){this.id=params.id;this.label=params.label;this.fov=params.fov;this.interLensDistance=params.interLensDistance;this.baselineLensDistance=params.baselineLensDistance;this.screenLensDistance=params.screenLensDistance;this.distortionCoefficients=params.distortionCoefficients;this.inverseCoefficients=params.inverseCoefficients}DeviceInfo.Viewers=Viewers;module.exports=DeviceInfo},{"./distortion/distortion.js":55,"./math-util.js":59,"./util.js":68}],54:[function(_dereq_,module,exports){var VRDisplay=_dereq_("./base.js").VRDisplay;var HMDVRDevice=_dereq_("./base.js").HMDVRDevice;var PositionSensorVRDevice=_dereq_("./base.js").PositionSensorVRDevice;function VRDisplayHMDDevice(display){this.display=display;this.hardwareUnitId=display.displayId;this.deviceId="webvr-polyfill:HMD:"+display.displayId;this.deviceName=display.displayName+" (HMD)"}VRDisplayHMDDevice.prototype=new HMDVRDevice;VRDisplayHMDDevice.prototype.getEyeParameters=function(whichEye){var eyeParameters=this.display.getEyeParameters(whichEye);return{currentFieldOfView:eyeParameters.fieldOfView,maximumFieldOfView:eyeParameters.fieldOfView,minimumFieldOfView:eyeParameters.fieldOfView,recommendedFieldOfView:eyeParameters.fieldOfView,eyeTranslation:{x:eyeParameters.offset[0],y:eyeParameters.offset[1],z:eyeParameters.offset[2]},renderRect:{x:whichEye=="right"?eyeParameters.renderWidth:0,y:0,width:eyeParameters.renderWidth,height:eyeParameters.renderHeight}}};VRDisplayHMDDevice.prototype.setFieldOfView=function(opt_fovLeft,opt_fovRight,opt_zNear,opt_zFar){};function VRDisplayPositionSensorDevice(display){ this.display=display;this.hardwareUnitId=display.displayId;this.deviceId="webvr-polyfill:PositionSensor: "+display.displayId;this.deviceName=display.displayName+" (PositionSensor)"}VRDisplayPositionSensorDevice.prototype=new PositionSensorVRDevice;VRDisplayPositionSensorDevice.prototype.getState=function(){var pose=this.display.getPose();return{position:pose.position?{x:pose.position[0],y:pose.position[1],z:pose.position[2]}:null,orientation:pose.orientation?{x:pose.orientation[0],y:pose.orientation[1],z:pose.orientation[2],w:pose.orientation[3]}:null,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}};VRDisplayPositionSensorDevice.prototype.resetState=function(){return this.positionDevice.resetPose()};module.exports.VRDisplayHMDDevice=VRDisplayHMDDevice;module.exports.VRDisplayPositionSensorDevice=VRDisplayPositionSensorDevice},{"./base.js":48}],55:[function(_dereq_,module,exports){function Distortion(coefficients){this.coefficients=coefficients}Distortion.prototype.distortInverse=function(radius){var r0=0;var r1=1;var dr0=radius-this.distort(r0);while(Math.abs(r1-r0)>1e-4){var dr1=radius-this.distort(r1);var r2=r1-dr1*((r1-r0)/(dr1-dr0));r0=r1;r1=r2;dr0=dr1}return r1};Distortion.prototype.distort=function(radius){var r2=radius*radius;var ret=0;for(var i=0;i=200&&xhr.status<=299){obj.dpdb=JSON.parse(xhr.response);obj.recalculateDeviceParams_()}else{console.error("Error loading online DPDB!")}});xhr.send()}}Dpdb.prototype.getDeviceParams=function(){return this.deviceParams};Dpdb.prototype.recalculateDeviceParams_=function(){var newDeviceParams=this.calcDeviceParams_();if(newDeviceParams){this.deviceParams=newDeviceParams;if(this.onDeviceParamsUpdated){this.onDeviceParamsUpdated(this.deviceParams)}}else{console.error("Failed to recalculate device parameters.")}};Dpdb.prototype.calcDeviceParams_=function(){var db=this.dpdb;if(!db){console.error("DPDB not available.");return null}if(db.format!=1){console.error("DPDB has unexpected format version.");return null}if(!db.devices||!db.devices.length){console.error("DPDB does not have a devices section.");return null}var userAgent=navigator.userAgent||navigator.vendor||window.opera;var width=Util.getScreenWidth();var height=Util.getScreenHeight();if(!db.devices){console.error("DPDB has no devices section.");return null}for(var i=0;i=1){this.w=w;this.x=x;this.y=y;this.z=z;return this}var halfTheta=Math.acos(cosHalfTheta);var sinHalfTheta=Math.sqrt(1-cosHalfTheta*cosHalfTheta);if(Math.abs(sinHalfTheta)<.001){this.w=.5*(w+this.w);this.x=.5*(x+this.x);this.y=.5*(y+this.y);this.z=.5*(z+this.z);return this}var ratioA=Math.sin((1-t)*halfTheta)/sinHalfTheta,ratioB=Math.sin(t*halfTheta)/sinHalfTheta;this.w=w*ratioA+this.w*ratioB;this.x=x*ratioA+this.x*ratioB;this.y=y*ratioA+this.y*ratioB;this.z=z*ratioA+this.z*ratioB;return this},setFromUnitVectors:function(){var v1,r;var EPS=1e-6;return function(vFrom,vTo){if(v1===undefined)v1=new MathUtil.Vector3;r=vFrom.dot(vTo)+1;if(rMath.abs(vFrom.z)){v1.set(-vFrom.y,vFrom.x,0)}else{v1.set(0,-vFrom.z,vFrom.y)}}else{v1.crossVectors(vFrom,vTo)}this.x=v1.x;this.y=v1.y;this.z=v1.z;this.w=r;this.normalize();return this}}()};module.exports=MathUtil},{}],60:[function(_dereq_,module,exports){var VRDisplay=_dereq_("./base.js").VRDisplay;var MathUtil=_dereq_("./math-util.js");var Util=_dereq_("./util.js");var KEY_SPEED=.15;var KEY_ANIMATION_DURATION=80;var MOUSE_SPEED_X=.5;var MOUSE_SPEED_Y=.3;function MouseKeyboardVRDisplay(){this.displayName="Mouse and Keyboard VRDisplay (webvr-polyfill)";this.capabilities.hasOrientation=true;window.addEventListener("keydown",this.onKeyDown_.bind(this));window.addEventListener("mousemove",this.onMouseMove_.bind(this));window.addEventListener("mousedown",this.onMouseDown_.bind(this));window.addEventListener("mouseup",this.onMouseUp_.bind(this));this.phi_=0;this.theta_=0;this.targetAngle_=null;this.angleAnimation_=null;this.orientation_=new MathUtil.Quaternion;this.rotateStart_=new MathUtil.Vector2;this.rotateEnd_=new MathUtil.Vector2;this.rotateDelta_=new MathUtil.Vector2;this.isDragging_=false;this.orientationOut_=new Float32Array(4)}MouseKeyboardVRDisplay.prototype=new VRDisplay;MouseKeyboardVRDisplay.prototype.getImmediatePose=function(){this.orientation_.setFromEulerYXZ(this.phi_,this.theta_,0);this.orientationOut_[0]=this.orientation_.x;this.orientationOut_[1]=this.orientation_.y;this.orientationOut_[2]=this.orientation_.z;this.orientationOut_[3]=this.orientation_.w;return{position:null,orientation:this.orientationOut_,linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}};MouseKeyboardVRDisplay.prototype.onKeyDown_=function(e){if(e.keyCode==38){this.animatePhi_(this.phi_+KEY_SPEED)}else if(e.keyCode==39){this.animateTheta_(this.theta_-KEY_SPEED)}else if(e.keyCode==40){this.animatePhi_(this.phi_-KEY_SPEED)}else if(e.keyCode==37){this.animateTheta_(this.theta_+KEY_SPEED)}};MouseKeyboardVRDisplay.prototype.animateTheta_=function(targetAngle){this.animateKeyTransitions_("theta_",targetAngle)};MouseKeyboardVRDisplay.prototype.animatePhi_=function(targetAngle){targetAngle=Util.clamp(targetAngle,-Math.PI/2,Math.PI/2);this.animateKeyTransitions_("phi_",targetAngle)};MouseKeyboardVRDisplay.prototype.animateKeyTransitions_=function(angleName,targetAngle){if(this.angleAnimation_){cancelAnimationFrame(this.angleAnimation_)}var startAngle=this[angleName];var startTime=new Date;this.angleAnimation_=requestAnimationFrame(function animate(){var elapsed=new Date-startTime;if(elapsed>=KEY_ANIMATION_DURATION){this[angleName]=targetAngle;cancelAnimationFrame(this.angleAnimation_);return}this.angleAnimation_=requestAnimationFrame(animate.bind(this));var percent=elapsed/KEY_ANIMATION_DURATION;this[angleName]=startAngle+(targetAngle-startAngle)*percent}.bind(this))};MouseKeyboardVRDisplay.prototype.onMouseDown_=function(e){this.rotateStart_.set(e.clientX,e.clientY);this.isDragging_=true};MouseKeyboardVRDisplay.prototype.onMouseMove_=function(e){if(!this.isDragging_&&!this.isPointerLocked_()){return}if(this.isPointerLocked_()){var movementX=e.movementX||e.mozMovementX||0;var movementY=e.movementY||e.mozMovementY||0;this.rotateEnd_.set(this.rotateStart_.x-movementX,this.rotateStart_.y-movementY)}else{this.rotateEnd_.set(e.clientX,e.clientY)}this.rotateDelta_.subVectors(this.rotateEnd_,this.rotateStart_);this.rotateStart_.copy(this.rotateEnd_);this.phi_+=2*Math.PI*this.rotateDelta_.y/screen.height*MOUSE_SPEED_Y;this.theta_+=2*Math.PI*this.rotateDelta_.x/screen.width*MOUSE_SPEED_X;this.phi_=Util.clamp(this.phi_,-Math.PI/2,Math.PI/2)};MouseKeyboardVRDisplay.prototype.onMouseUp_=function(e){this.isDragging_=false};MouseKeyboardVRDisplay.prototype.isPointerLocked_=function(){var el=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement;return el!==undefined};MouseKeyboardVRDisplay.prototype.resetPose=function(){this.phi_=0;this.theta_=0};module.exports=MouseKeyboardVRDisplay},{"./base.js":48,"./math-util.js":59,"./util.js":68}],61:[function(_dereq_,module,exports){(function(global){if(typeof global!=="undefined"&&global.window){global.document=global.window.document;global.navigator=global.window.navigator}_dereq_("./main")}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./main":58}],62:[function(_dereq_,module,exports){var Util=_dereq_("./util.js");function RotateInstructions(){this.loadIcon_();var overlay=document.createElement("div");var s=overlay.style;s.position="fixed";s.top=0;s.right=0;s.bottom=0;s.left=0;s.backgroundColor="gray";s.fontFamily="sans-serif";s.zIndex=1e6;var img=document.createElement("img");img.src=this.icon;var s=img.style;s.marginLeft="25%";s.marginTop="25%";s.width="50%";overlay.appendChild(img);var text=document.createElement("div");var s=text.style;s.textAlign="center";s.fontSize="16px";s.lineHeight="24px";s.margin="24px 25%";s.width="50%";text.innerHTML="Place your phone into your Cardboard viewer.";overlay.appendChild(text);var snackbar=document.createElement("div");var s=snackbar.style;s.backgroundColor="#CFD8DC";s.position="fixed";s.bottom=0;s.width="100%";s.height="48px";s.padding="14px 24px";s.boxSizing="border-box";s.color="#656A6B";overlay.appendChild(snackbar);var snackbarText=document.createElement("div");snackbarText.style.float="left";snackbarText.innerHTML="No Cardboard viewer?";var snackbarButton=document.createElement("a");snackbarButton.href="https://www.google.com/get/cardboard/get-cardboard/";snackbarButton.innerHTML="get one";snackbarButton.target="_blank";var s=snackbarButton.style;s.float="right";s.fontWeight=600;s.textTransform="uppercase";s.borderLeft="1px solid gray";s.paddingLeft="24px";s.textDecoration="none";s.color="#656A6B";snackbar.appendChild(snackbarText);snackbar.appendChild(snackbarButton);this.overlay=overlay;this.text=text;this.hide()}RotateInstructions.prototype.show=function(parent){if(!parent&&!this.overlay.parentElement){document.body.appendChild(this.overlay)}else if(parent){if(this.overlay.parentElement&&this.overlay.parentElement!=parent)this.overlay.parentElement.removeChild(this.overlay);parent.appendChild(this.overlay)}this.overlay.style.display="block";var img=this.overlay.querySelector("img");var s=img.style;if(Util.isLandscapeMode()){s.width="20%";s.marginLeft="40%";s.marginTop="3%"}else{s.width="50%";s.marginLeft="25%";s.marginTop="25%"}};RotateInstructions.prototype.hide=function(){this.overlay.style.display="none"};RotateInstructions.prototype.showTemporarily=function(ms,parent){this.show(parent);this.timer=setTimeout(this.hide.bind(this),ms)};RotateInstructions.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)};RotateInstructions.prototype.update=function(){this.disableShowTemporarily();if(!Util.isLandscapeMode()&&Util.isMobile()){this.show()}else{this.hide()}};RotateInstructions.prototype.loadIcon_=function(){this.icon=Util.base64("image/svg+xml","PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjE5OHB4IiBoZWlnaHQ9IjI0MHB4IiB2aWV3Qm94PSIwIDAgMTk4IDI0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpza2V0Y2g9Imh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaC9ucyI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDMuMy4zICgxMjA4MSkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+dHJhbnNpdGlvbjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJQYWdlLTEiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHNrZXRjaDp0eXBlPSJNU1BhZ2UiPgogICAgICAgIDxnIGlkPSJ0cmFuc2l0aW9uIiBza2V0Y2g6dHlwZT0iTVNBcnRib2FyZEdyb3VwIj4KICAgICAgICAgICAgPGcgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTQtKy1JbXBvcnRlZC1MYXllcnMtQ29weS0rLUltcG9ydGVkLUxheWVycy1Db3B5LTItQ29weSIgc2tldGNoOnR5cGU9Ik1TTGF5ZXJHcm91cCI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHktNCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDEwNy4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjYyNSwyLjUyNyBDMTQ5LjYyNSwyLjUyNyAxNTUuODA1LDYuMDk2IDE1Ni4zNjIsNi40MTggTDE1Ni4zNjIsNy4zMDQgQzE1Ni4zNjIsNy40ODEgMTU2LjM3NSw3LjY2NCAxNTYuNCw3Ljg1MyBDMTU2LjQxLDcuOTM0IDE1Ni40Miw4LjAxNSAxNTYuNDI3LDguMDk1IEMxNTYuNTY3LDkuNTEgMTU3LjQwMSwxMS4wOTMgMTU4LjUzMiwxMi4wOTQgTDE2NC4yNTIsMTcuMTU2IEwxNjQuMzMzLDE3LjA2NiBDMTY0LjMzMywxNy4wNjYgMTY4LjcxNSwxNC41MzYgMTY5LjU2OCwxNC4wNDIgQzE3MS4wMjUsMTQuODgzIDE5NS41MzgsMjkuMDM1IDE5NS41MzgsMjkuMDM1IEwxOTUuNTM4LDgzLjAzNiBDMTk1LjUzOCw4My44MDcgMTk1LjE1Miw4NC4yNTMgMTk0LjU5LDg0LjI1MyBDMTk0LjM1Nyw4NC4yNTMgMTk0LjA5NSw4NC4xNzcgMTkzLjgxOCw4NC4wMTcgTDE2OS44NTEsNzAuMTc5IEwxNjkuODM3LDcwLjIwMyBMMTQyLjUxNSw4NS45NzggTDE0MS42NjUsODQuNjU1IEMxMzYuOTM0LDgzLjEyNiAxMzEuOTE3LDgxLjkxNSAxMjYuNzE0LDgxLjA0NSBDMTI2LjcwOSw4MS4wNiAxMjYuNzA3LDgxLjA2OSAxMjYuNzA3LDgxLjA2OSBMMTIxLjY0LDk4LjAzIEwxMTMuNzQ5LDEwMi41ODYgTDExMy43MTIsMTAyLjUyMyBMMTEzLjcxMiwxMzAuMTEzIEMxMTMuNzEyLDEzMC44ODUgMTEzLjMyNiwxMzEuMzMgMTEyLjc2NCwxMzEuMzMgQzExMi41MzIsMTMxLjMzIDExMi4yNjksMTMxLjI1NCAxMTEuOTkyLDEzMS4wOTQgTDY5LjUxOSwxMDYuNTcyIEM2OC41NjksMTA2LjAyMyA2Ny43OTksMTA0LjY5NSA2Ny43OTksMTAzLjYwNSBMNjcuNzk5LDEwMi41NyBMNjcuNzc4LDEwMi42MTcgQzY3LjI3LDEwMi4zOTMgNjYuNjQ4LDEwMi4yNDkgNjUuOTYyLDEwMi4yMTggQzY1Ljg3NSwxMDIuMjE0IDY1Ljc4OCwxMDIuMjEyIDY1LjcwMSwxMDIuMjEyIEM2NS42MDYsMTAyLjIxMiA2NS41MTEsMTAyLjIxNSA2NS40MTYsMTAyLjIxOSBDNjUuMTk1LDEwMi4yMjkgNjQuOTc0LDEwMi4yMzUgNjQuNzU0LDEwMi4yMzUgQzY0LjMzMSwxMDIuMjM1IDYzLjkxMSwxMDIuMjE2IDYzLjQ5OCwxMDIuMTc4IEM2MS44NDMsMTAyLjAyNSA2MC4yOTgsMTAxLjU3OCA1OS4wOTQsMTAwLjg4MiBMMTIuNTE4LDczLjk5MiBMMTIuNTIzLDc0LjAwNCBMMi4yNDUsNTUuMjU0IEMxLjI0NCw1My40MjcgMi4wMDQsNTEuMDM4IDMuOTQzLDQ5LjkxOCBMNTkuOTU0LDE3LjU3MyBDNjAuNjI2LDE3LjE4NSA2MS4zNSwxNy4wMDEgNjIuMDUzLDE3LjAwMSBDNjMuMzc5LDE3LjAwMSA2NC42MjUsMTcuNjYgNjUuMjgsMTguODU0IEw2NS4yODUsMTguODUxIEw2NS41MTIsMTkuMjY0IEw2NS41MDYsMTkuMjY4IEM2NS45MDksMjAuMDAzIDY2LjQwNSwyMC42OCA2Ni45ODMsMjEuMjg2IEw2Ny4yNiwyMS41NTYgQzY5LjE3NCwyMy40MDYgNzEuNzI4LDI0LjM1NyA3NC4zNzMsMjQuMzU3IEM3Ni4zMjIsMjQuMzU3IDc4LjMyMSwyMy44NCA4MC4xNDgsMjIuNzg1IEM4MC4xNjEsMjIuNzg1IDg3LjQ2NywxOC41NjYgODcuNDY3LDE4LjU2NiBDODguMTM5LDE4LjE3OCA4OC44NjMsMTcuOTk0IDg5LjU2NiwxNy45OTQgQzkwLjg5MiwxNy45OTQgOTIuMTM4LDE4LjY1MiA5Mi43OTIsMTkuODQ3IEw5Ni4wNDIsMjUuNzc1IEw5Ni4wNjQsMjUuNzU3IEwxMDIuODQ5LDI5LjY3NCBMMTAyLjc0NCwyOS40OTIgTDE0OS42MjUsMi41MjcgTTE0OS42MjUsMC44OTIgQzE0OS4zNDMsMC44OTIgMTQ5LjA2MiwwLjk2NSAxNDguODEsMS4xMSBMMTAyLjY0MSwyNy42NjYgTDk3LjIzMSwyNC41NDIgTDk0LjIyNiwxOS4wNjEgQzkzLjMxMywxNy4zOTQgOTEuNTI3LDE2LjM1OSA4OS41NjYsMTYuMzU4IEM4OC41NTUsMTYuMzU4IDg3LjU0NiwxNi42MzIgODYuNjQ5LDE3LjE1IEM4My44NzgsMTguNzUgNzkuNjg3LDIxLjE2OSA3OS4zNzQsMjEuMzQ1IEM3OS4zNTksMjEuMzUzIDc5LjM0NSwyMS4zNjEgNzkuMzMsMjEuMzY5IEM3Ny43OTgsMjIuMjU0IDc2LjA4NCwyMi43MjIgNzQuMzczLDIyLjcyMiBDNzIuMDgxLDIyLjcyMiA2OS45NTksMjEuODkgNjguMzk3LDIwLjM4IEw2OC4xNDUsMjAuMTM1IEM2Ny43MDYsMTkuNjcyIDY3LjMyMywxOS4xNTYgNjcuMDA2LDE4LjYwMSBDNjYuOTg4LDE4LjU1OSA2Ni45NjgsMTguNTE5IDY2Ljk0NiwxOC40NzkgTDY2LjcxOSwxOC4wNjUgQzY2LjY5LDE4LjAxMiA2Ni42NTgsMTcuOTYgNjYuNjI0LDE3LjkxMSBDNjUuNjg2LDE2LjMzNyA2My45NTEsMTUuMzY2IDYyLjA1MywxNS4zNjYgQzYxLjA0MiwxNS4zNjYgNjAuMDMzLDE1LjY0IDU5LjEzNiwxNi4xNTggTDMuMTI1LDQ4LjUwMiBDMC40MjYsNTAuMDYxIC0wLjYxMyw1My40NDIgMC44MTEsNTYuMDQgTDExLjA4OSw3NC43OSBDMTEuMjY2LDc1LjExMyAxMS41MzcsNzUuMzUzIDExLjg1LDc1LjQ5NCBMNTguMjc2LDEwMi4yOTggQzU5LjY3OSwxMDMuMTA4IDYxLjQzMywxMDMuNjMgNjMuMzQ4LDEwMy44MDYgQzYzLjgxMiwxMDMuODQ4IDY0LjI4NSwxMDMuODcgNjQuNzU0LDEwMy44NyBDNjUsMTAzLjg3IDY1LjI0OSwxMDMuODY0IDY1LjQ5NCwxMDMuODUyIEM2NS41NjMsMTAzLjg0OSA2NS42MzIsMTAzLjg0NyA2NS43MDEsMTAzLjg0NyBDNjUuNzY0LDEwMy44NDcgNjUuODI4LDEwMy44NDkgNjUuODksMTAzLjg1MiBDNjUuOTg2LDEwMy44NTYgNjYuMDgsMTAzLjg2MyA2Ni4xNzMsMTAzLjg3NCBDNjYuMjgyLDEwNS40NjcgNjcuMzMyLDEwNy4xOTcgNjguNzAyLDEwNy45ODggTDExMS4xNzQsMTMyLjUxIEMxMTEuNjk4LDEzMi44MTIgMTEyLjIzMiwxMzIuOTY1IDExMi43NjQsMTMyLjk2NSBDMTE0LjI2MSwxMzIuOTY1IDExNS4zNDcsMTMxLjc2NSAxMTUuMzQ3LDEzMC4xMTMgTDExNS4zNDcsMTAzLjU1MSBMMTIyLjQ1OCw5OS40NDYgQzEyMi44MTksOTkuMjM3IDEyMy4wODcsOTguODk4IDEyMy4yMDcsOTguNDk4IEwxMjcuODY1LDgyLjkwNSBDMTMyLjI3OSw4My43MDIgMTM2LjU1Nyw4NC43NTMgMTQwLjYwNyw4Ni4wMzMgTDE0MS4xNCw4Ni44NjIgQzE0MS40NTEsODcuMzQ2IDE0MS45NzcsODcuNjEzIDE0Mi41MTYsODcuNjEzIEMxNDIuNzk0LDg3LjYxMyAxNDMuMDc2LDg3LjU0MiAxNDMuMzMzLDg3LjM5MyBMMTY5Ljg2NSw3Mi4wNzYgTDE5Myw4NS40MzMgQzE5My41MjMsODUuNzM1IDE5NC4wNTgsODUuODg4IDE5NC41OSw4NS44ODggQzE5Ni4wODcsODUuODg4IDE5Ny4xNzMsODQuNjg5IDE5Ny4xNzMsODMuMDM2IEwxOTcuMTczLDI5LjAzNSBDMTk3LjE3MywyOC40NTEgMTk2Ljg2MSwyNy45MTEgMTk2LjM1NSwyNy42MTkgQzE5Ni4zNTUsMjcuNjE5IDE3MS44NDMsMTMuNDY3IDE3MC4zODUsMTIuNjI2IEMxNzAuMTMyLDEyLjQ4IDE2OS44NSwxMi40MDcgMTY5LjU2OCwxMi40MDcgQzE2OS4yODUsMTIuNDA3IDE2OS4wMDIsMTIuNDgxIDE2OC43NDksMTIuNjI3IEMxNjguMTQzLDEyLjk3OCAxNjUuNzU2LDE0LjM1NyAxNjQuNDI0LDE1LjEyNSBMMTU5LjYxNSwxMC44NyBDMTU4Ljc5NiwxMC4xNDUgMTU4LjE1NCw4LjkzNyAxNTguMDU0LDcuOTM0IEMxNTguMDQ1LDcuODM3IDE1OC4wMzQsNy43MzkgMTU4LjAyMSw3LjY0IEMxNTguMDA1LDcuNTIzIDE1Ny45OTgsNy40MSAxNTcuOTk4LDcuMzA0IEwxNTcuOTk4LDYuNDE4IEMxNTcuOTk4LDUuODM0IDE1Ny42ODYsNS4yOTUgMTU3LjE4MSw1LjAwMiBDMTU2LjYyNCw0LjY4IDE1MC40NDIsMS4xMTEgMTUwLjQ0MiwxLjExMSBDMTUwLjE4OSwwLjk2NSAxNDkuOTA3LDAuODkyIDE0OS42MjUsMC44OTIiIGlkPSJGaWxsLTEiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTYuMDI3LDI1LjYzNiBMMTQyLjYwMyw1Mi41MjcgQzE0My44MDcsNTMuMjIyIDE0NC41ODIsNTQuMTE0IDE0NC44NDUsNTUuMDY4IEwxNDQuODM1LDU1LjA3NSBMNjMuNDYxLDEwMi4wNTcgTDYzLjQ2LDEwMi4wNTcgQzYxLjgwNiwxMDEuOTA1IDYwLjI2MSwxMDEuNDU3IDU5LjA1NywxMDAuNzYyIEwxMi40ODEsNzMuODcxIEw5Ni4wMjcsMjUuNjM2IiBpZD0iRmlsbC0yIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYzLjQ2MSwxMDIuMTc0IEM2My40NTMsMTAyLjE3NCA2My40NDYsMTAyLjE3NCA2My40MzksMTAyLjE3MiBDNjEuNzQ2LDEwMi4wMTYgNjAuMjExLDEwMS41NjMgNTguOTk4LDEwMC44NjMgTDEyLjQyMiw3My45NzMgQzEyLjM4Niw3My45NTIgMTIuMzY0LDczLjkxNCAxMi4zNjQsNzMuODcxIEMxMi4zNjQsNzMuODMgMTIuMzg2LDczLjc5MSAxMi40MjIsNzMuNzcgTDk1Ljk2OCwyNS41MzUgQzk2LjAwNCwyNS41MTQgOTYuMDQ5LDI1LjUxNCA5Ni4wODUsMjUuNTM1IEwxNDIuNjYxLDUyLjQyNiBDMTQzLjg4OCw1My4xMzQgMTQ0LjY4Miw1NC4wMzggMTQ0Ljk1Nyw1NS4wMzcgQzE0NC45Nyw1NS4wODMgMTQ0Ljk1Myw1NS4xMzMgMTQ0LjkxNSw1NS4xNjEgQzE0NC45MTEsNTUuMTY1IDE0NC44OTgsNTUuMTc0IDE0NC44OTQsNTUuMTc3IEw2My41MTksMTAyLjE1OCBDNjMuNTAxLDEwMi4xNjkgNjMuNDgxLDEwMi4xNzQgNjMuNDYxLDEwMi4xNzQgTDYzLjQ2MSwxMDIuMTc0IFogTTEyLjcxNCw3My44NzEgTDU5LjExNSwxMDAuNjYxIEM2MC4yOTMsMTAxLjM0MSA2MS43ODYsMTAxLjc4MiA2My40MzUsMTAxLjkzNyBMMTQ0LjcwNyw1NS4wMTUgQzE0NC40MjgsNTQuMTA4IDE0My42ODIsNTMuMjg1IDE0Mi41NDQsNTIuNjI4IEw5Ni4wMjcsMjUuNzcxIEwxMi43MTQsNzMuODcxIEwxMi43MTQsNzMuODcxIFoiIGlkPSJGaWxsLTMiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ4LjMyNyw1OC40NzEgQzE0OC4xNDUsNTguNDggMTQ3Ljk2Miw1OC40OCAxNDcuNzgxLDU4LjQ3MiBDMTQ1Ljg4Nyw1OC4zODkgMTQ0LjQ3OSw1Ny40MzQgMTQ0LjYzNiw1Ni4zNCBDMTQ0LjY4OSw1NS45NjcgMTQ0LjY2NCw1NS41OTcgMTQ0LjU2NCw1NS4yMzUgTDYzLjQ2MSwxMDIuMDU3IEM2NC4wODksMTAyLjExNSA2NC43MzMsMTAyLjEzIDY1LjM3OSwxMDIuMDk5IEM2NS41NjEsMTAyLjA5IDY1Ljc0MywxMDIuMDkgNjUuOTI1LDEwMi4wOTggQzY3LjgxOSwxMDIuMTgxIDY5LjIyNywxMDMuMTM2IDY5LjA3LDEwNC4yMyBMMTQ4LjMyNyw1OC40NzEiIGlkPSJGaWxsLTQiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNjkuMDcsMTA0LjM0NyBDNjkuMDQ4LDEwNC4zNDcgNjkuMDI1LDEwNC4zNCA2OS4wMDUsMTA0LjMyNyBDNjguOTY4LDEwNC4zMDEgNjguOTQ4LDEwNC4yNTcgNjguOTU1LDEwNC4yMTMgQzY5LDEwMy44OTYgNjguODk4LDEwMy41NzYgNjguNjU4LDEwMy4yODggQzY4LjE1MywxMDIuNjc4IDY3LjEwMywxMDIuMjY2IDY1LjkyLDEwMi4yMTQgQzY1Ljc0MiwxMDIuMjA2IDY1LjU2MywxMDIuMjA3IDY1LjM4NSwxMDIuMjE1IEM2NC43NDIsMTAyLjI0NiA2NC4wODcsMTAyLjIzMiA2My40NSwxMDIuMTc0IEM2My4zOTksMTAyLjE2OSA2My4zNTgsMTAyLjEzMiA2My4zNDcsMTAyLjA4MiBDNjMuMzM2LDEwMi4wMzMgNjMuMzU4LDEwMS45ODEgNjMuNDAyLDEwMS45NTYgTDE0NC41MDYsNTUuMTM0IEMxNDQuNTM3LDU1LjExNiAxNDQuNTc1LDU1LjExMyAxNDQuNjA5LDU1LjEyNyBDMTQ0LjY0Miw1NS4xNDEgMTQ0LjY2OCw1NS4xNyAxNDQuNjc3LDU1LjIwNCBDMTQ0Ljc4MSw1NS41ODUgMTQ0LjgwNiw1NS45NzIgMTQ0Ljc1MSw1Ni4zNTcgQzE0NC43MDYsNTYuNjczIDE0NC44MDgsNTYuOTk0IDE0NS4wNDcsNTcuMjgyIEMxNDUuNTUzLDU3Ljg5MiAxNDYuNjAyLDU4LjMwMyAxNDcuNzg2LDU4LjM1NSBDMTQ3Ljk2NCw1OC4zNjMgMTQ4LjE0Myw1OC4zNjMgMTQ4LjMyMSw1OC4zNTQgQzE0OC4zNzcsNTguMzUyIDE0OC40MjQsNTguMzg3IDE0OC40MzksNTguNDM4IEMxNDguNDU0LDU4LjQ5IDE0OC40MzIsNTguNTQ1IDE0OC4zODUsNTguNTcyIEw2OS4xMjksMTA0LjMzMSBDNjkuMTExLDEwNC4zNDIgNjkuMDksMTA0LjM0NyA2OS4wNywxMDQuMzQ3IEw2OS4wNywxMDQuMzQ3IFogTTY1LjY2NSwxMDEuOTc1IEM2NS43NTQsMTAxLjk3NSA2NS44NDIsMTAxLjk3NyA2NS45MywxMDEuOTgxIEM2Ny4xOTYsMTAyLjAzNyA2OC4yODMsMTAyLjQ2OSA2OC44MzgsMTAzLjEzOSBDNjkuMDY1LDEwMy40MTMgNjkuMTg4LDEwMy43MTQgNjkuMTk4LDEwNC4wMjEgTDE0Ny44ODMsNTguNTkyIEMxNDcuODQ3LDU4LjU5MiAxNDcuODExLDU4LjU5MSAxNDcuNzc2LDU4LjU4OSBDMTQ2LjUwOSw1OC41MzMgMTQ1LjQyMiw1OC4xIDE0NC44NjcsNTcuNDMxIEMxNDQuNTg1LDU3LjA5MSAxNDQuNDY1LDU2LjcwNyAxNDQuNTIsNTYuMzI0IEMxNDQuNTYzLDU2LjAyMSAxNDQuNTUyLDU1LjcxNiAxNDQuNDg4LDU1LjQxNCBMNjMuODQ2LDEwMS45NyBDNjQuMzUzLDEwMi4wMDIgNjQuODY3LDEwMi4wMDYgNjUuMzc0LDEwMS45ODIgQzY1LjQ3MSwxMDEuOTc3IDY1LjU2OCwxMDEuOTc1IDY1LjY2NSwxMDEuOTc1IEw2NS42NjUsMTAxLjk3NSBaIiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIuMjA4LDU1LjEzNCBDMS4yMDcsNTMuMzA3IDEuOTY3LDUwLjkxNyAzLjkwNiw0OS43OTcgTDU5LjkxNywxNy40NTMgQzYxLjg1NiwxNi4zMzMgNjQuMjQxLDE2LjkwNyA2NS4yNDMsMTguNzM0IEw2NS40NzUsMTkuMTQ0IEM2NS44NzIsMTkuODgyIDY2LjM2OCwyMC41NiA2Ni45NDUsMjEuMTY1IEw2Ny4yMjMsMjEuNDM1IEM3MC41NDgsMjQuNjQ5IDc1LjgwNiwyNS4xNTEgODAuMTExLDIyLjY2NSBMODcuNDMsMTguNDQ1IEM4OS4zNywxNy4zMjYgOTEuNzU0LDE3Ljg5OSA5Mi43NTUsMTkuNzI3IEw5Ni4wMDUsMjUuNjU1IEwxMi40ODYsNzMuODg0IEwyLjIwOCw1NS4xMzQgWiIgaWQ9IkZpbGwtNiIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi40ODYsNzQuMDAxIEMxMi40NzYsNzQuMDAxIDEyLjQ2NSw3My45OTkgMTIuNDU1LDczLjk5NiBDMTIuNDI0LDczLjk4OCAxMi4zOTksNzMuOTY3IDEyLjM4NCw3My45NCBMMi4xMDYsNTUuMTkgQzEuMDc1LDUzLjMxIDEuODU3LDUwLjg0NSAzLjg0OCw0OS42OTYgTDU5Ljg1OCwxNy4zNTIgQzYwLjUyNSwxNi45NjcgNjEuMjcxLDE2Ljc2NCA2Mi4wMTYsMTYuNzY0IEM2My40MzEsMTYuNzY0IDY0LjY2NiwxNy40NjYgNjUuMzI3LDE4LjY0NiBDNjUuMzM3LDE4LjY1NCA2NS4zNDUsMTguNjYzIDY1LjM1MSwxOC42NzQgTDY1LjU3OCwxOS4wODggQzY1LjU4NCwxOS4xIDY1LjU4OSwxOS4xMTIgNjUuNTkxLDE5LjEyNiBDNjUuOTg1LDE5LjgzOCA2Ni40NjksMjAuNDk3IDY3LjAzLDIxLjA4NSBMNjcuMzA1LDIxLjM1MSBDNjkuMTUxLDIzLjEzNyA3MS42NDksMjQuMTIgNzQuMzM2LDI0LjEyIEM3Ni4zMTMsMjQuMTIgNzguMjksMjMuNTgyIDgwLjA1MywyMi41NjMgQzgwLjA2NCwyMi41NTcgODAuMDc2LDIyLjU1MyA4MC4wODgsMjIuNTUgTDg3LjM3MiwxOC4zNDQgQzg4LjAzOCwxNy45NTkgODguNzg0LDE3Ljc1NiA4OS41MjksMTcuNzU2IEM5MC45NTYsMTcuNzU2IDkyLjIwMSwxOC40NzIgOTIuODU4LDE5LjY3IEw5Ni4xMDcsMjUuNTk5IEM5Ni4xMzgsMjUuNjU0IDk2LjExOCwyNS43MjQgOTYuMDYzLDI1Ljc1NiBMMTIuNTQ1LDczLjk4NSBDMTIuNTI2LDczLjk5NiAxMi41MDYsNzQuMDAxIDEyLjQ4Niw3NC4wMDEgTDEyLjQ4Niw3NC4wMDEgWiBNNjIuMDE2LDE2Ljk5NyBDNjEuMzEyLDE2Ljk5NyA2MC42MDYsMTcuMTkgNTkuOTc1LDE3LjU1NCBMMy45NjUsNDkuODk5IEMyLjA4Myw1MC45ODUgMS4zNDEsNTMuMzA4IDIuMzEsNTUuMDc4IEwxMi41MzEsNzMuNzIzIEw5NS44NDgsMjUuNjExIEw5Mi42NTMsMTkuNzgyIEM5Mi4wMzgsMTguNjYgOTAuODcsMTcuOTkgODkuNTI5LDE3Ljk5IEM4OC44MjUsMTcuOTkgODguMTE5LDE4LjE4MiA4Ny40ODksMTguNTQ3IEw4MC4xNzIsMjIuNzcyIEM4MC4xNjEsMjIuNzc4IDgwLjE0OSwyMi43ODIgODAuMTM3LDIyLjc4NSBDNzguMzQ2LDIzLjgxMSA3Ni4zNDEsMjQuMzU0IDc0LjMzNiwyNC4zNTQgQzcxLjU4OCwyNC4zNTQgNjkuMDMzLDIzLjM0NyA2Ny4xNDIsMjEuNTE5IEw2Ni44NjQsMjEuMjQ5IEM2Ni4yNzcsMjAuNjM0IDY1Ljc3NCwxOS45NDcgNjUuMzY3LDE5LjIwMyBDNjUuMzYsMTkuMTkyIDY1LjM1NiwxOS4xNzkgNjUuMzU0LDE5LjE2NiBMNjUuMTYzLDE4LjgxOSBDNjUuMTU0LDE4LjgxMSA2NS4xNDYsMTguODAxIDY1LjE0LDE4Ljc5IEM2NC41MjUsMTcuNjY3IDYzLjM1NywxNi45OTcgNjIuMDE2LDE2Ljk5NyBMNjIuMDE2LDE2Ljk5NyBaIiBpZD0iRmlsbC03IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTQyLjQzNCw0OC44MDggTDQyLjQzNCw0OC44MDggQzM5LjkyNCw0OC44MDcgMzcuNzM3LDQ3LjU1IDM2LjU4Miw0NS40NDMgQzM0Ljc3MSw0Mi4xMzkgMzYuMTQ0LDM3LjgwOSAzOS42NDEsMzUuNzg5IEw1MS45MzIsMjguNjkxIEM1My4xMDMsMjguMDE1IDU0LjQxMywyNy42NTggNTUuNzIxLDI3LjY1OCBDNTguMjMxLDI3LjY1OCA2MC40MTgsMjguOTE2IDYxLjU3MywzMS4wMjMgQzYzLjM4NCwzNC4zMjcgNjIuMDEyLDM4LjY1NyA1OC41MTQsNDAuNjc3IEw0Ni4yMjMsNDcuNzc1IEM0NS4wNTMsNDguNDUgNDMuNzQyLDQ4LjgwOCA0Mi40MzQsNDguODA4IEw0Mi40MzQsNDguODA4IFogTTU1LjcyMSwyOC4xMjUgQzU0LjQ5NSwyOC4xMjUgNTMuMjY1LDI4LjQ2MSA1Mi4xNjYsMjkuMDk2IEwzOS44NzUsMzYuMTk0IEMzNi41OTYsMzguMDg3IDM1LjMwMiw0Mi4xMzYgMzYuOTkyLDQ1LjIxOCBDMzguMDYzLDQ3LjE3MyA0MC4wOTgsNDguMzQgNDIuNDM0LDQ4LjM0IEM0My42NjEsNDguMzQgNDQuODksNDguMDA1IDQ1Ljk5LDQ3LjM3IEw1OC4yODEsNDAuMjcyIEM2MS41NiwzOC4zNzkgNjIuODUzLDM0LjMzIDYxLjE2NCwzMS4yNDggQzYwLjA5MiwyOS4yOTMgNTguMDU4LDI4LjEyNSA1NS43MjEsMjguMTI1IEw1NS43MjEsMjguMTI1IFoiIGlkPSJGaWxsLTgiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQ5LjU4OCwyLjQwNyBDMTQ5LjU4OCwyLjQwNyAxNTUuNzY4LDUuOTc1IDE1Ni4zMjUsNi4yOTcgTDE1Ni4zMjUsNy4xODQgQzE1Ni4zMjUsNy4zNiAxNTYuMzM4LDcuNTQ0IDE1Ni4zNjIsNy43MzMgQzE1Ni4zNzMsNy44MTQgMTU2LjM4Miw3Ljg5NCAxNTYuMzksNy45NzUgQzE1Ni41Myw5LjM5IDE1Ny4zNjMsMTAuOTczIDE1OC40OTUsMTEuOTc0IEwxNjUuODkxLDE4LjUxOSBDMTY2LjA2OCwxOC42NzUgMTY2LjI0OSwxOC44MTQgMTY2LjQzMiwxOC45MzQgQzE2OC4wMTEsMTkuOTc0IDE2OS4zODIsMTkuNCAxNjkuNDk0LDE3LjY1MiBDMTY5LjU0MywxNi44NjggMTY5LjU1MSwxNi4wNTcgMTY5LjUxNywxNS4yMjMgTDE2OS41MTQsMTUuMDYzIEwxNjkuNTE0LDEzLjkxMiBDMTcwLjc4LDE0LjY0MiAxOTUuNTAxLDI4LjkxNSAxOTUuNTAxLDI4LjkxNSBMMTk1LjUwMSw4Mi45MTUgQzE5NS41MDEsODQuMDA1IDE5NC43MzEsODQuNDQ1IDE5My43ODEsODMuODk3IEwxNTEuMzA4LDU5LjM3NCBDMTUwLjM1OCw1OC44MjYgMTQ5LjU4OCw1Ny40OTcgMTQ5LjU4OCw1Ni40MDggTDE0OS41ODgsMjIuMzc1IiBpZD0iRmlsbC05IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE5NC41NTMsODQuMjUgQzE5NC4yOTYsODQuMjUgMTk0LjAxMyw4NC4xNjUgMTkzLjcyMiw4My45OTcgTDE1MS4yNSw1OS40NzYgQzE1MC4yNjksNTguOTA5IDE0OS40NzEsNTcuNTMzIDE0OS40NzEsNTYuNDA4IEwxNDkuNDcxLDIyLjM3NSBMMTQ5LjcwNSwyMi4zNzUgTDE0OS43MDUsNTYuNDA4IEMxNDkuNzA1LDU3LjQ1OSAxNTAuNDUsNTguNzQ0IDE1MS4zNjYsNTkuMjc0IEwxOTMuODM5LDgzLjc5NSBDMTk0LjI2Myw4NC4wNCAxOTQuNjU1LDg0LjA4MyAxOTQuOTQyLDgzLjkxNyBDMTk1LjIyNyw4My43NTMgMTk1LjM4NCw4My4zOTcgMTk1LjM4NCw4Mi45MTUgTDE5NS4zODQsMjguOTgyIEMxOTQuMTAyLDI4LjI0MiAxNzIuMTA0LDE1LjU0MiAxNjkuNjMxLDE0LjExNCBMMTY5LjYzNCwxNS4yMiBDMTY5LjY2OCwxNi4wNTIgMTY5LjY2LDE2Ljg3NCAxNjkuNjEsMTcuNjU5IEMxNjkuNTU2LDE4LjUwMyAxNjkuMjE0LDE5LjEyMyAxNjguNjQ3LDE5LjQwNSBDMTY4LjAyOCwxOS43MTQgMTY3LjE5NywxOS41NzggMTY2LjM2NywxOS4wMzIgQzE2Ni4xODEsMTguOTA5IDE2NS45OTUsMTguNzY2IDE2NS44MTQsMTguNjA2IEwxNTguNDE3LDEyLjA2MiBDMTU3LjI1OSwxMS4wMzYgMTU2LjQxOCw5LjQzNyAxNTYuMjc0LDcuOTg2IEMxNTYuMjY2LDcuOTA3IDE1Ni4yNTcsNy44MjcgMTU2LjI0Nyw3Ljc0OCBDMTU2LjIyMSw3LjU1NSAxNTYuMjA5LDcuMzY1IDE1Ni4yMDksNy4xODQgTDE1Ni4yMDksNi4zNjQgQzE1NS4zNzUsNS44ODMgMTQ5LjUyOSwyLjUwOCAxNDkuNTI5LDIuNTA4IEwxNDkuNjQ2LDIuMzA2IEMxNDkuNjQ2LDIuMzA2IDE1NS44MjcsNS44NzQgMTU2LjM4NCw2LjE5NiBMMTU2LjQ0Miw2LjIzIEwxNTYuNDQyLDcuMTg0IEMxNTYuNDQyLDcuMzU1IDE1Ni40NTQsNy41MzUgMTU2LjQ3OCw3LjcxNyBDMTU2LjQ4OSw3LjggMTU2LjQ5OSw3Ljg4MiAxNTYuNTA3LDcuOTYzIEMxNTYuNjQ1LDkuMzU4IDE1Ny40NTUsMTAuODk4IDE1OC41NzIsMTEuODg2IEwxNjUuOTY5LDE4LjQzMSBDMTY2LjE0MiwxOC41ODQgMTY2LjMxOSwxOC43MiAxNjYuNDk2LDE4LjgzNyBDMTY3LjI1NCwxOS4zMzYgMTY4LDE5LjQ2NyAxNjguNTQzLDE5LjE5NiBDMTY5LjAzMywxOC45NTMgMTY5LjMyOSwxOC40MDEgMTY5LjM3NywxNy42NDUgQzE2OS40MjcsMTYuODY3IDE2OS40MzQsMTYuMDU0IDE2OS40MDEsMTUuMjI4IEwxNjkuMzk3LDE1LjA2NSBMMTY5LjM5NywxMy43MSBMMTY5LjU3MiwxMy44MSBDMTcwLjgzOSwxNC41NDEgMTk1LjU1OSwyOC44MTQgMTk1LjU1OSwyOC44MTQgTDE5NS42MTgsMjguODQ3IEwxOTUuNjE4LDgyLjkxNSBDMTk1LjYxOCw4My40ODQgMTk1LjQyLDgzLjkxMSAxOTUuMDU5LDg0LjExOSBDMTk0LjkwOCw4NC4yMDYgMTk0LjczNyw4NC4yNSAxOTQuNTUzLDg0LjI1IiBpZD0iRmlsbC0xMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDUuNjg1LDU2LjE2MSBMMTY5LjgsNzAuMDgzIEwxNDMuODIyLDg1LjA4MSBMMTQyLjM2LDg0Ljc3NCBDMTM1LjgyNiw4Mi42MDQgMTI4LjczMiw4MS4wNDYgMTIxLjM0MSw4MC4xNTggQzExNi45NzYsNzkuNjM0IDExMi42NzgsODEuMjU0IDExMS43NDMsODMuNzc4IEMxMTEuNTA2LDg0LjQxNCAxMTEuNTAzLDg1LjA3MSAxMTEuNzMyLDg1LjcwNiBDMTEzLjI3LDg5Ljk3MyAxMTUuOTY4LDk0LjA2OSAxMTkuNzI3LDk3Ljg0MSBMMTIwLjI1OSw5OC42ODYgQzEyMC4yNiw5OC42ODUgOTQuMjgyLDExMy42ODMgOTQuMjgyLDExMy42ODMgTDcwLjE2Nyw5OS43NjEgTDE0NS42ODUsNTYuMTYxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik05NC4yODIsMTEzLjgxOCBMOTQuMjIzLDExMy43ODUgTDY5LjkzMyw5OS43NjEgTDcwLjEwOCw5OS42NiBMMTQ1LjY4NSw1Ni4wMjYgTDE0NS43NDMsNTYuMDU5IEwxNzAuMDMzLDcwLjA4MyBMMTQzLjg0Miw4NS4yMDUgTDE0My43OTcsODUuMTk1IEMxNDMuNzcyLDg1LjE5IDE0Mi4zMzYsODQuODg4IDE0Mi4zMzYsODQuODg4IEMxMzUuNzg3LDgyLjcxNCAxMjguNzIzLDgxLjE2MyAxMjEuMzI3LDgwLjI3NCBDMTIwLjc4OCw4MC4yMDkgMTIwLjIzNiw4MC4xNzcgMTE5LjY4OSw4MC4xNzcgQzExNS45MzEsODAuMTc3IDExMi42MzUsODEuNzA4IDExMS44NTIsODMuODE5IEMxMTEuNjI0LDg0LjQzMiAxMTEuNjIxLDg1LjA1MyAxMTEuODQyLDg1LjY2NyBDMTEzLjM3Nyw4OS45MjUgMTE2LjA1OCw5My45OTMgMTE5LjgxLDk3Ljc1OCBMMTE5LjgyNiw5Ny43NzkgTDEyMC4zNTIsOTguNjE0IEMxMjAuMzU0LDk4LjYxNyAxMjAuMzU2LDk4LjYyIDEyMC4zNTgsOTguNjI0IEwxMjAuNDIyLDk4LjcyNiBMMTIwLjMxNyw5OC43ODcgQzEyMC4yNjQsOTguODE4IDk0LjU5OSwxMTMuNjM1IDk0LjM0LDExMy43ODUgTDk0LjI4MiwxMTMuODE4IEw5NC4yODIsMTEzLjgxOCBaIE03MC40MDEsOTkuNzYxIEw5NC4yODIsMTEzLjU0OSBMMTE5LjA4NCw5OS4yMjkgQzExOS42Myw5OC45MTQgMTE5LjkzLDk4Ljc0IDEyMC4xMDEsOTguNjU0IEwxMTkuNjM1LDk3LjkxNCBDMTE1Ljg2NCw5NC4xMjcgMTEzLjE2OCw5MC4wMzMgMTExLjYyMiw4NS43NDYgQzExMS4zODIsODUuMDc5IDExMS4zODYsODQuNDA0IDExMS42MzMsODMuNzM4IEMxMTIuNDQ4LDgxLjUzOSAxMTUuODM2LDc5Ljk0MyAxMTkuNjg5LDc5Ljk0MyBDMTIwLjI0Niw3OS45NDMgMTIwLjgwNiw3OS45NzYgMTIxLjM1NSw4MC4wNDIgQzEyOC43NjcsODAuOTMzIDEzNS44NDYsODIuNDg3IDE0Mi4zOTYsODQuNjYzIEMxNDMuMjMyLDg0LjgzOCAxNDMuNjExLDg0LjkxNyAxNDMuNzg2LDg0Ljk2NyBMMTY5LjU2Niw3MC4wODMgTDE0NS42ODUsNTYuMjk1IEw3MC40MDEsOTkuNzYxIEw3MC40MDEsOTkuNzYxIFoiIGlkPSJGaWxsLTEyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2Ny4yMywxOC45NzkgTDE2Ny4yMyw2OS44NSBMMTM5LjkwOSw4NS42MjMgTDEzMy40NDgsNzEuNDU2IEMxMzIuNTM4LDY5LjQ2IDEzMC4wMiw2OS43MTggMTI3LjgyNCw3Mi4wMyBDMTI2Ljc2OSw3My4xNCAxMjUuOTMxLDc0LjU4NSAxMjUuNDk0LDc2LjA0OCBMMTE5LjAzNCw5Ny42NzYgTDkxLjcxMiwxMTMuNDUgTDkxLjcxMiw2Mi41NzkgTDE2Ny4yMywxOC45NzkiIGlkPSJGaWxsLTEzIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTkxLjcxMiwxMTMuNTY3IEM5MS42OTIsMTEzLjU2NyA5MS42NzIsMTEzLjU2MSA5MS42NTMsMTEzLjU1MSBDOTEuNjE4LDExMy41MyA5MS41OTUsMTEzLjQ5MiA5MS41OTUsMTEzLjQ1IEw5MS41OTUsNjIuNTc5IEM5MS41OTUsNjIuNTM3IDkxLjYxOCw2Mi40OTkgOTEuNjUzLDYyLjQ3OCBMMTY3LjE3MiwxOC44NzggQzE2Ny4yMDgsMTguODU3IDE2Ny4yNTIsMTguODU3IDE2Ny4yODgsMTguODc4IEMxNjcuMzI0LDE4Ljg5OSAxNjcuMzQ3LDE4LjkzNyAxNjcuMzQ3LDE4Ljk3OSBMMTY3LjM0Nyw2OS44NSBDMTY3LjM0Nyw2OS44OTEgMTY3LjMyNCw2OS45MyAxNjcuMjg4LDY5Ljk1IEwxMzkuOTY3LDg1LjcyNSBDMTM5LjkzOSw4NS43NDEgMTM5LjkwNSw4NS43NDUgMTM5Ljg3Myw4NS43MzUgQzEzOS44NDIsODUuNzI1IDEzOS44MTYsODUuNzAyIDEzOS44MDIsODUuNjcyIEwxMzMuMzQyLDcxLjUwNCBDMTMyLjk2Nyw3MC42ODIgMTMyLjI4LDcwLjIyOSAxMzEuNDA4LDcwLjIyOSBDMTMwLjMxOSw3MC4yMjkgMTI5LjA0NCw3MC45MTUgMTI3LjkwOCw3Mi4xMSBDMTI2Ljg3NCw3My4yIDEyNi4wMzQsNzQuNjQ3IDEyNS42MDYsNzYuMDgyIEwxMTkuMTQ2LDk3LjcwOSBDMTE5LjEzNyw5Ny43MzggMTE5LjExOCw5Ny43NjIgMTE5LjA5Miw5Ny43NzcgTDkxLjc3LDExMy41NTEgQzkxLjc1MiwxMTMuNTYxIDkxLjczMiwxMTMuNTY3IDkxLjcxMiwxMTMuNTY3IEw5MS43MTIsMTEzLjU2NyBaIE05MS44MjksNjIuNjQ3IEw5MS44MjksMTEzLjI0OCBMMTE4LjkzNSw5Ny41OTggTDEyNS4zODIsNzYuMDE1IEMxMjUuODI3LDc0LjUyNSAxMjYuNjY0LDczLjA4MSAxMjcuNzM5LDcxLjk1IEMxMjguOTE5LDcwLjcwOCAxMzAuMjU2LDY5Ljk5NiAxMzEuNDA4LDY5Ljk5NiBDMTMyLjM3Nyw2OS45OTYgMTMzLjEzOSw3MC40OTcgMTMzLjU1NCw3MS40MDcgTDEzOS45NjEsODUuNDU4IEwxNjcuMTEzLDY5Ljc4MiBMMTY3LjExMywxOS4xODEgTDkxLjgyOSw2Mi42NDcgTDkxLjgyOSw2Mi42NDcgWiIgaWQ9IkZpbGwtMTQiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTY4LjU0MywxOS4yMTMgTDE2OC41NDMsNzAuMDgzIEwxNDEuMjIxLDg1Ljg1NyBMMTM0Ljc2MSw3MS42ODkgQzEzMy44NTEsNjkuNjk0IDEzMS4zMzMsNjkuOTUxIDEyOS4xMzcsNzIuMjYzIEMxMjguMDgyLDczLjM3NCAxMjcuMjQ0LDc0LjgxOSAxMjYuODA3LDc2LjI4MiBMMTIwLjM0Niw5Ny45MDkgTDkzLjAyNSwxMTMuNjgzIEw5My4wMjUsNjIuODEzIEwxNjguNTQzLDE5LjIxMyIgaWQ9IkZpbGwtMTUiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTMuMDI1LDExMy44IEM5My4wMDUsMTEzLjggOTIuOTg0LDExMy43OTUgOTIuOTY2LDExMy43ODUgQzkyLjkzMSwxMTMuNzY0IDkyLjkwOCwxMTMuNzI1IDkyLjkwOCwxMTMuNjg0IEw5Mi45MDgsNjIuODEzIEM5Mi45MDgsNjIuNzcxIDkyLjkzMSw2Mi43MzMgOTIuOTY2LDYyLjcxMiBMMTY4LjQ4NCwxOS4xMTIgQzE2OC41MiwxOS4wOSAxNjguNTY1LDE5LjA5IDE2OC42MDEsMTkuMTEyIEMxNjguNjM3LDE5LjEzMiAxNjguNjYsMTkuMTcxIDE2OC42NiwxOS4yMTIgTDE2OC42Niw3MC4wODMgQzE2OC42Niw3MC4xMjUgMTY4LjYzNyw3MC4xNjQgMTY4LjYwMSw3MC4xODQgTDE0MS4yOCw4NS45NTggQzE0MS4yNTEsODUuOTc1IDE0MS4yMTcsODUuOTc5IDE0MS4xODYsODUuOTY4IEMxNDEuMTU0LDg1Ljk1OCAxNDEuMTI5LDg1LjkzNiAxNDEuMTE1LDg1LjkwNiBMMTM0LjY1NSw3MS43MzggQzEzNC4yOCw3MC45MTUgMTMzLjU5Myw3MC40NjMgMTMyLjcyLDcwLjQ2MyBDMTMxLjYzMiw3MC40NjMgMTMwLjM1Nyw3MS4xNDggMTI5LjIyMSw3Mi4zNDQgQzEyOC4xODYsNzMuNDMzIDEyNy4zNDcsNzQuODgxIDEyNi45MTksNzYuMzE1IEwxMjAuNDU4LDk3Ljk0MyBDMTIwLjQ1LDk3Ljk3MiAxMjAuNDMxLDk3Ljk5NiAxMjAuNDA1LDk4LjAxIEw5My4wODMsMTEzLjc4NSBDOTMuMDY1LDExMy43OTUgOTMuMDQ1LDExMy44IDkzLjAyNSwxMTMuOCBMOTMuMDI1LDExMy44IFogTTkzLjE0Miw2Mi44ODEgTDkzLjE0MiwxMTMuNDgxIEwxMjAuMjQ4LDk3LjgzMiBMMTI2LjY5NSw3Ni4yNDggQzEyNy4xNCw3NC43NTggMTI3Ljk3Nyw3My4zMTUgMTI5LjA1Miw3Mi4xODMgQzEzMC4yMzEsNzAuOTQyIDEzMS41NjgsNzAuMjI5IDEzMi43Miw3MC4yMjkgQzEzMy42ODksNzAuMjI5IDEzNC40NTIsNzAuNzMxIDEzNC44NjcsNzEuNjQxIEwxNDEuMjc0LDg1LjY5MiBMMTY4LjQyNiw3MC4wMTYgTDE2OC40MjYsMTkuNDE1IEw5My4xNDIsNjIuODgxIEw5My4xNDIsNjIuODgxIFoiIGlkPSJGaWxsLTE2IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS44LDcwLjA4MyBMMTQyLjQ3OCw4NS44NTcgTDEzNi4wMTgsNzEuNjg5IEMxMzUuMTA4LDY5LjY5NCAxMzIuNTksNjkuOTUxIDEzMC4zOTMsNzIuMjYzIEMxMjkuMzM5LDczLjM3NCAxMjguNSw3NC44MTkgMTI4LjA2NCw3Ni4yODIgTDEyMS42MDMsOTcuOTA5IEw5NC4yODIsMTEzLjY4MyBMOTQuMjgyLDYyLjgxMyBMMTY5LjgsMTkuMjEzIEwxNjkuOCw3MC4wODMgWiIgaWQ9IkZpbGwtMTciIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTQuMjgyLDExMy45MTcgQzk0LjI0MSwxMTMuOTE3IDk0LjIwMSwxMTMuOTA3IDk0LjE2NSwxMTMuODg2IEM5NC4wOTMsMTEzLjg0NSA5NC4wNDgsMTEzLjc2NyA5NC4wNDgsMTEzLjY4NCBMOTQuMDQ4LDYyLjgxMyBDOTQuMDQ4LDYyLjczIDk0LjA5Myw2Mi42NTIgOTQuMTY1LDYyLjYxMSBMMTY5LjY4MywxOS4wMSBDMTY5Ljc1NSwxOC45NjkgMTY5Ljg0NCwxOC45NjkgMTY5LjkxNywxOS4wMSBDMTY5Ljk4OSwxOS4wNTIgMTcwLjAzMywxOS4xMjkgMTcwLjAzMywxOS4yMTIgTDE3MC4wMzMsNzAuMDgzIEMxNzAuMDMzLDcwLjE2NiAxNjkuOTg5LDcwLjI0NCAxNjkuOTE3LDcwLjI4NSBMMTQyLjU5NSw4Ni4wNiBDMTQyLjUzOCw4Ni4wOTIgMTQyLjQ2OSw4Ni4xIDE0Mi40MDcsODYuMDggQzE0Mi4zNDQsODYuMDYgMTQyLjI5Myw4Ni4wMTQgMTQyLjI2Niw4NS45NTQgTDEzNS44MDUsNzEuNzg2IEMxMzUuNDQ1LDcwLjk5NyAxMzQuODEzLDcwLjU4IDEzMy45NzcsNzAuNTggQzEzMi45MjEsNzAuNTggMTMxLjY3Niw3MS4yNTIgMTMwLjU2Miw3Mi40MjQgQzEyOS41NCw3My41MDEgMTI4LjcxMSw3NC45MzEgMTI4LjI4Nyw3Ni4zNDggTDEyMS44MjcsOTcuOTc2IEMxMjEuODEsOTguMDM0IDEyMS43NzEsOTguMDgyIDEyMS43Miw5OC4xMTIgTDk0LjM5OCwxMTMuODg2IEM5NC4zNjIsMTEzLjkwNyA5NC4zMjIsMTEzLjkxNyA5NC4yODIsMTEzLjkxNyBMOTQuMjgyLDExMy45MTcgWiBNOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDExMy4yNzkgTDEyMS40MDYsOTcuNzU0IEwxMjcuODQsNzYuMjE1IEMxMjguMjksNzQuNzA4IDEyOS4xMzcsNzMuMjQ3IDEzMC4yMjQsNzIuMTAzIEMxMzEuNDI1LDcwLjgzOCAxMzIuNzkzLDcwLjExMiAxMzMuOTc3LDcwLjExMiBDMTM0Ljk5NSw3MC4xMTIgMTM1Ljc5NSw3MC42MzggMTM2LjIzLDcxLjU5MiBMMTQyLjU4NCw4NS41MjYgTDE2OS41NjYsNjkuOTQ4IEwxNjkuNTY2LDE5LjYxNyBMOTQuNTE1LDYyLjk0OCBMOTQuNTE1LDYyLjk0OCBaIiBpZD0iRmlsbC0xOCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMDkuODk0LDkyLjk0MyBMMTA5Ljg5NCw5Mi45NDMgQzEwOC4xMiw5Mi45NDMgMTA2LjY1Myw5Mi4yMTggMTA1LjY1LDkwLjgyMyBDMTA1LjU4Myw5MC43MzEgMTA1LjU5Myw5MC42MSAxMDUuNjczLDkwLjUyOSBDMTA1Ljc1Myw5MC40NDggMTA1Ljg4LDkwLjQ0IDEwNS45NzQsOTAuNTA2IEMxMDYuNzU0LDkxLjA1MyAxMDcuNjc5LDkxLjMzMyAxMDguNzI0LDkxLjMzMyBDMTEwLjA0Nyw5MS4zMzMgMTExLjQ3OCw5MC44OTQgMTEyLjk4LDkwLjAyNyBDMTE4LjI5MSw4Ni45NiAxMjIuNjExLDc5LjUwOSAxMjIuNjExLDczLjQxNiBDMTIyLjYxMSw3MS40ODkgMTIyLjE2OSw2OS44NTYgMTIxLjMzMyw2OC42OTIgQzEyMS4yNjYsNjguNiAxMjEuMjc2LDY4LjQ3MyAxMjEuMzU2LDY4LjM5MiBDMTIxLjQzNiw2OC4zMTEgMTIxLjU2Myw2OC4yOTkgMTIxLjY1Niw2OC4zNjUgQzEyMy4zMjcsNjkuNTM3IDEyNC4yNDcsNzEuNzQ2IDEyNC4yNDcsNzQuNTg0IEMxMjQuMjQ3LDgwLjgyNiAxMTkuODIxLDg4LjQ0NyAxMTQuMzgyLDkxLjU4NyBDMTEyLjgwOCw5Mi40OTUgMTExLjI5OCw5Mi45NDMgMTA5Ljg5NCw5Mi45NDMgTDEwOS44OTQsOTIuOTQzIFogTTEwNi45MjUsOTEuNDAxIEMxMDcuNzM4LDkyLjA1MiAxMDguNzQ1LDkyLjI3OCAxMDkuODkzLDkyLjI3OCBMMTA5Ljg5NCw5Mi4yNzggQzExMS4yMTUsOTIuMjc4IDExMi42NDcsOTEuOTUxIDExNC4xNDgsOTEuMDg0IEMxMTkuNDU5LDg4LjAxNyAxMjMuNzgsODAuNjIxIDEyMy43OCw3NC41MjggQzEyMy43OCw3Mi41NDkgMTIzLjMxNyw3MC45MjkgMTIyLjQ1NCw2OS43NjcgQzEyMi44NjUsNzAuODAyIDEyMy4wNzksNzIuMDQyIDEyMy4wNzksNzMuNDAyIEMxMjMuMDc5LDc5LjY0NSAxMTguNjUzLDg3LjI4NSAxMTMuMjE0LDkwLjQyNSBDMTExLjY0LDkxLjMzNCAxMTAuMTMsOTEuNzQyIDEwOC43MjQsOTEuNzQyIEMxMDguMDgzLDkxLjc0MiAxMDcuNDgxLDkxLjU5MyAxMDYuOTI1LDkxLjQwMSBMMTA2LjkyNSw5MS40MDEgWiIgaWQ9IkZpbGwtMTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjA5Nyw5MC4yMyBDMTE4LjQ4MSw4Ny4xMjIgMTIyLjg0NSw3OS41OTQgMTIyLjg0NSw3My40MTYgQzEyMi44NDUsNzEuMzY1IDEyMi4zNjIsNjkuNzI0IDEyMS41MjIsNjguNTU2IEMxMTkuNzM4LDY3LjMwNCAxMTcuMTQ4LDY3LjM2MiAxMTQuMjY1LDY5LjAyNiBDMTA4Ljg4MSw3Mi4xMzQgMTA0LjUxNyw3OS42NjIgMTA0LjUxNyw4NS44NCBDMTA0LjUxNyw4Ny44OTEgMTA1LDg5LjUzMiAxMDUuODQsOTAuNyBDMTA3LjYyNCw5MS45NTIgMTEwLjIxNCw5MS44OTQgMTEzLjA5Nyw5MC4yMyIgaWQ9IkZpbGwtMjAiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTA4LjcyNCw5MS42MTQgTDEwOC43MjQsOTEuNjE0IEMxMDcuNTgyLDkxLjYxNCAxMDYuNTY2LDkxLjQwMSAxMDUuNzA1LDkwLjc5NyBDMTA1LjY4NCw5MC43ODMgMTA1LjY2NSw5MC44MTEgMTA1LjY1LDkwLjc5IEMxMDQuNzU2LDg5LjU0NiAxMDQuMjgzLDg3Ljg0MiAxMDQuMjgzLDg1LjgxNyBDMTA0LjI4Myw3OS41NzUgMTA4LjcwOSw3MS45NTMgMTE0LjE0OCw2OC44MTIgQzExNS43MjIsNjcuOTA0IDExNy4yMzIsNjcuNDQ5IDExOC42MzgsNjcuNDQ5IEMxMTkuNzgsNjcuNDQ5IDEyMC43OTYsNjcuNzU4IDEyMS42NTYsNjguMzYyIEMxMjEuNjc4LDY4LjM3NyAxMjEuNjk3LDY4LjM5NyAxMjEuNzEyLDY4LjQxOCBDMTIyLjYwNiw2OS42NjIgMTIzLjA3OSw3MS4zOSAxMjMuMDc5LDczLjQxNSBDMTIzLjA3OSw3OS42NTggMTE4LjY1Myw4Ny4xOTggMTEzLjIxNCw5MC4zMzggQzExMS42NCw5MS4yNDcgMTEwLjEzLDkxLjYxNCAxMDguNzI0LDkxLjYxNCBMMTA4LjcyNCw5MS42MTQgWiBNMTA2LjAwNiw5MC41MDUgQzEwNi43OCw5MS4wMzcgMTA3LjY5NCw5MS4yODEgMTA4LjcyNCw5MS4yODEgQzExMC4wNDcsOTEuMjgxIDExMS40NzgsOTAuODY4IDExMi45OCw5MC4wMDEgQzExOC4yOTEsODYuOTM1IDEyMi42MTEsNzkuNDk2IDEyMi42MTEsNzMuNDAzIEMxMjIuNjExLDcxLjQ5NCAxMjIuMTc3LDY5Ljg4IDEyMS4zNTYsNjguNzE4IEMxMjAuNTgyLDY4LjE4NSAxMTkuNjY4LDY3LjkxOSAxMTguNjM4LDY3LjkxOSBDMTE3LjMxNSw2Ny45MTkgMTE1Ljg4Myw2OC4zNiAxMTQuMzgyLDY5LjIyNyBDMTA5LjA3MSw3Mi4yOTMgMTA0Ljc1MSw3OS43MzMgMTA0Ljc1MSw4NS44MjYgQzEwNC43NTEsODcuNzM1IDEwNS4xODUsODkuMzQzIDEwNi4wMDYsOTAuNTA1IEwxMDYuMDA2LDkwLjUwNSBaIiBpZD0iRmlsbC0yMSIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNDkuMzE4LDcuMjYyIEwxMzkuMzM0LDE2LjE0IEwxNTUuMjI3LDI3LjE3MSBMMTYwLjgxNiwyMS4wNTkgTDE0OS4zMTgsNy4yNjIiIGlkPSJGaWxsLTIyIiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2OS42NzYsMTMuODQgTDE1OS45MjgsMTkuNDY3IEMxNTYuMjg2LDIxLjU3IDE1MC40LDIxLjU4IDE0Ni43ODEsMTkuNDkxIEMxNDMuMTYxLDE3LjQwMiAxNDMuMTgsMTQuMDAzIDE0Ni44MjIsMTEuOSBMMTU2LjMxNyw2LjI5MiBMMTQ5LjU4OCwyLjQwNyBMNjcuNzUyLDQ5LjQ3OCBMMTEzLjY3NSw3NS45OTIgTDExNi43NTYsNzQuMjEzIEMxMTcuMzg3LDczLjg0OCAxMTcuNjI1LDczLjMxNSAxMTcuMzc0LDcyLjgyMyBDMTE1LjAxNyw2OC4xOTEgMTE0Ljc4MSw2My4yNzcgMTE2LjY5MSw1OC41NjEgQzEyMi4zMjksNDQuNjQxIDE0MS4yLDMzLjc0NiAxNjUuMzA5LDMwLjQ5MSBDMTczLjQ3OCwyOS4zODggMTgxLjk4OSwyOS41MjQgMTkwLjAxMywzMC44ODUgQzE5MC44NjUsMzEuMDMgMTkxLjc4OSwzMC44OTMgMTkyLjQyLDMwLjUyOCBMMTk1LjUwMSwyOC43NSBMMTY5LjY3NiwxMy44NCIgaWQ9IkZpbGwtMjMiIGZpbGw9IiNGQUZBRkEiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3Ni40NTkgQzExMy41OTQsNzYuNDU5IDExMy41MTQsNzYuNDM4IDExMy40NDIsNzYuMzk3IEw2Ny41MTgsNDkuODgyIEM2Ny4zNzQsNDkuNzk5IDY3LjI4NCw0OS42NDUgNjcuMjg1LDQ5LjQ3OCBDNjcuMjg1LDQ5LjMxMSA2Ny4zNzQsNDkuMTU3IDY3LjUxOSw0OS4wNzMgTDE0OS4zNTUsMi4wMDIgQzE0OS40OTksMS45MTkgMTQ5LjY3NywxLjkxOSAxNDkuODIxLDIuMDAyIEwxNTYuNTUsNS44ODcgQzE1Ni43NzQsNi4wMTcgMTU2Ljg1LDYuMzAyIDE1Ni43MjIsNi41MjYgQzE1Ni41OTIsNi43NDkgMTU2LjMwNyw2LjgyNiAxNTYuMDgzLDYuNjk2IEwxNDkuNTg3LDIuOTQ2IEw2OC42ODcsNDkuNDc5IEwxMTMuNjc1LDc1LjQ1MiBMMTE2LjUyMyw3My44MDggQzExNi43MTUsNzMuNjk3IDExNy4xNDMsNzMuMzk5IDExNi45NTgsNzMuMDM1IEMxMTQuNTQyLDY4LjI4NyAxMTQuMyw2My4yMjEgMTE2LjI1OCw1OC4zODUgQzExOS4wNjQsNTEuNDU4IDEyNS4xNDMsNDUuMTQzIDEzMy44NCw0MC4xMjIgQzE0Mi40OTcsMzUuMTI0IDE1My4zNTgsMzEuNjMzIDE2NS4yNDcsMzAuMDI4IEMxNzMuNDQ1LDI4LjkyMSAxODIuMDM3LDI5LjA1OCAxOTAuMDkxLDMwLjQyNSBDMTkwLjgzLDMwLjU1IDE5MS42NTIsMzAuNDMyIDE5Mi4xODYsMzAuMTI0IEwxOTQuNTY3LDI4Ljc1IEwxNjkuNDQyLDE0LjI0NCBDMTY5LjIxOSwxNC4xMTUgMTY5LjE0MiwxMy44MjkgMTY5LjI3MSwxMy42MDYgQzE2OS40LDEzLjM4MiAxNjkuNjg1LDEzLjMwNiAxNjkuOTA5LDEzLjQzNSBMMTk1LjczNCwyOC4zNDUgQzE5NS44NzksMjguNDI4IDE5NS45NjgsMjguNTgzIDE5NS45NjgsMjguNzUgQzE5NS45NjgsMjguOTE2IDE5NS44NzksMjkuMDcxIDE5NS43MzQsMjkuMTU0IEwxOTIuNjUzLDMwLjkzMyBDMTkxLjkzMiwzMS4zNSAxOTAuODksMzEuNTA4IDE4OS45MzUsMzEuMzQ2IEMxODEuOTcyLDI5Ljk5NSAxNzMuNDc4LDI5Ljg2IDE2NS4zNzIsMzAuOTU0IEMxNTMuNjAyLDMyLjU0MyAxNDIuODYsMzUuOTkzIDEzNC4zMDcsNDAuOTMxIEMxMjUuNzkzLDQ1Ljg0NyAxMTkuODUxLDUyLjAwNCAxMTcuMTI0LDU4LjczNiBDMTE1LjI3LDYzLjMxNCAxMTUuNTAxLDY4LjExMiAxMTcuNzksNzIuNjExIEMxMTguMTYsNzMuMzM2IDExNy44NDUsNzQuMTI0IDExNi45OSw3NC42MTcgTDExMy45MDksNzYuMzk3IEMxMTMuODM2LDc2LjQzOCAxMTMuNzU2LDc2LjQ1OSAxMTMuNjc1LDc2LjQ1OSIgaWQ9IkZpbGwtMjQiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUzLjMxNiwyMS4yNzkgQzE1MC45MDMsMjEuMjc5IDE0OC40OTUsMjAuNzUxIDE0Ni42NjQsMTkuNjkzIEMxNDQuODQ2LDE4LjY0NCAxNDMuODQ0LDE3LjIzMiAxNDMuODQ0LDE1LjcxOCBDMTQzLjg0NCwxNC4xOTEgMTQ0Ljg2LDEyLjc2MyAxNDYuNzA1LDExLjY5OCBMMTU2LjE5OCw2LjA5MSBDMTU2LjMwOSw2LjAyNSAxNTYuNDUyLDYuMDYyIDE1Ni41MTgsNi4xNzMgQzE1Ni41ODMsNi4yODQgMTU2LjU0Nyw2LjQyNyAxNTYuNDM2LDYuNDkzIEwxNDYuOTQsMTIuMTAyIEMxNDUuMjQ0LDEzLjA4MSAxNDQuMzEyLDE0LjM2NSAxNDQuMzEyLDE1LjcxOCBDMTQ0LjMxMiwxNy4wNTggMTQ1LjIzLDE4LjMyNiAxNDYuODk3LDE5LjI4OSBDMTUwLjQ0NiwyMS4zMzggMTU2LjI0LDIxLjMyNyAxNTkuODExLDE5LjI2NSBMMTY5LjU1OSwxMy42MzcgQzE2OS42NywxMy41NzMgMTY5LjgxMywxMy42MTEgMTY5Ljg3OCwxMy43MjMgQzE2OS45NDMsMTMuODM0IDE2OS45MDQsMTMuOTc3IDE2OS43OTMsMTQuMDQyIEwxNjAuMDQ1LDE5LjY3IEMxNTguMTg3LDIwLjc0MiAxNTUuNzQ5LDIxLjI3OSAxNTMuMzE2LDIxLjI3OSIgaWQ9IkZpbGwtMjUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzLjY3NSw3NS45OTIgTDY3Ljc2Miw0OS40ODQiIGlkPSJGaWxsLTI2IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMy42NzUsNzYuMzQyIEMxMTMuNjE1LDc2LjM0MiAxMTMuNTU1LDc2LjMyNyAxMTMuNSw3Ni4yOTUgTDY3LjU4Nyw0OS43ODcgQzY3LjQxOSw0OS42OSA2Ny4zNjIsNDkuNDc2IDY3LjQ1OSw0OS4zMDkgQzY3LjU1Niw0OS4xNDEgNjcuNzcsNDkuMDgzIDY3LjkzNyw0OS4xOCBMMTEzLjg1LDc1LjY4OCBDMTE0LjAxOCw3NS43ODUgMTE0LjA3NSw3NiAxMTMuOTc4LDc2LjE2NyBDMTEzLjkxNCw3Ni4yNzkgMTEzLjc5Niw3Ni4zNDIgMTEzLjY3NSw3Ni4zNDIiIGlkPSJGaWxsLTI3IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY3Ljc2Miw0OS40ODQgTDY3Ljc2MiwxMDMuNDg1IEM2Ny43NjIsMTA0LjU3NSA2OC41MzIsMTA1LjkwMyA2OS40ODIsMTA2LjQ1MiBMMTExLjk1NSwxMzAuOTczIEMxMTIuOTA1LDEzMS41MjIgMTEzLjY3NSwxMzEuMDgzIDExMy42NzUsMTI5Ljk5MyBMMTEzLjY3NSw3NS45OTIiIGlkPSJGaWxsLTI4IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTExMi43MjcsMTMxLjU2MSBDMTEyLjQzLDEzMS41NjEgMTEyLjEwNywxMzEuNDY2IDExMS43OCwxMzEuMjc2IEw2OS4zMDcsMTA2Ljc1NSBDNjguMjQ0LDEwNi4xNDIgNjcuNDEyLDEwNC43MDUgNjcuNDEyLDEwMy40ODUgTDY3LjQxMiw0OS40ODQgQzY3LjQxMiw0OS4yOSA2Ny41NjksNDkuMTM0IDY3Ljc2Miw0OS4xMzQgQzY3Ljk1Niw0OS4xMzQgNjguMTEzLDQ5LjI5IDY4LjExMyw0OS40ODQgTDY4LjExMywxMDMuNDg1IEM2OC4xMTMsMTA0LjQ0NSA2OC44MiwxMDUuNjY1IDY5LjY1NywxMDYuMTQ4IEwxMTIuMTMsMTMwLjY3IEMxMTIuNDc0LDEzMC44NjggMTEyLjc5MSwxMzAuOTEzIDExMywxMzAuNzkyIEMxMTMuMjA2LDEzMC42NzMgMTEzLjMyNSwxMzAuMzgxIDExMy4zMjUsMTI5Ljk5MyBMMTEzLjMyNSw3NS45OTIgQzExMy4zMjUsNzUuNzk4IDExMy40ODIsNzUuNjQxIDExMy42NzUsNzUuNjQxIEMxMTMuODY5LDc1LjY0MSAxMTQuMDI1LDc1Ljc5OCAxMTQuMDI1LDc1Ljk5MiBMMTE0LjAyNSwxMjkuOTkzIEMxMTQuMDI1LDEzMC42NDggMTEzLjc4NiwxMzEuMTQ3IDExMy4zNSwxMzEuMzk5IEMxMTMuMTYyLDEzMS41MDcgMTEyLjk1MiwxMzEuNTYxIDExMi43MjcsMTMxLjU2MSIgaWQ9IkZpbGwtMjkiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEyLjg2LDQwLjUxMiBDMTEyLjg2LDQwLjUxMiAxMTIuODYsNDAuNTEyIDExMi44NTksNDAuNTEyIEMxMTAuNTQxLDQwLjUxMiAxMDguMzYsMzkuOTkgMTA2LjcxNywzOS4wNDEgQzEwNS4wMTIsMzguMDU3IDEwNC4wNzQsMzYuNzI2IDEwNC4wNzQsMzUuMjkyIEMxMDQuMDc0LDMzLjg0NyAxMDUuMDI2LDMyLjUwMSAxMDYuNzU0LDMxLjUwNCBMMTE4Ljc5NSwyNC41NTEgQzEyMC40NjMsMjMuNTg5IDEyMi42NjksMjMuMDU4IDEyNS4wMDcsMjMuMDU4IEMxMjcuMzI1LDIzLjA1OCAxMjkuNTA2LDIzLjU4MSAxMzEuMTUsMjQuNTMgQzEzMi44NTQsMjUuNTE0IDEzMy43OTMsMjYuODQ1IDEzMy43OTMsMjguMjc4IEMxMzMuNzkzLDI5LjcyNCAxMzIuODQxLDMxLjA2OSAxMzEuMTEzLDMyLjA2NyBMMTE5LjA3MSwzOS4wMTkgQzExNy40MDMsMzkuOTgyIDExNS4xOTcsNDAuNTEyIDExMi44Niw0MC41MTIgTDExMi44Niw0MC41MTIgWiBNMTI1LjAwNywyMy43NTkgQzEyMi43OSwyMy43NTkgMTIwLjcwOSwyNC4yNTYgMTE5LjE0NiwyNS4xNTggTDEwNy4xMDQsMzIuMTEgQzEwNS42MDIsMzIuOTc4IDEwNC43NzQsMzQuMTA4IDEwNC43NzQsMzUuMjkyIEMxMDQuNzc0LDM2LjQ2NSAxMDUuNTg5LDM3LjU4MSAxMDcuMDY3LDM4LjQzNCBDMTA4LjYwNSwzOS4zMjMgMTEwLjY2MywzOS44MTIgMTEyLjg1OSwzOS44MTIgTDExMi44NiwzOS44MTIgQzExNS4wNzYsMzkuODEyIDExNy4xNTgsMzkuMzE1IDExOC43MjEsMzguNDEzIEwxMzAuNzYyLDMxLjQ2IEMxMzIuMjY0LDMwLjU5MyAxMzMuMDkyLDI5LjQ2MyAxMzMuMDkyLDI4LjI3OCBDMTMzLjA5MiwyNy4xMDYgMTMyLjI3OCwyNS45OSAxMzAuOCwyNS4xMzYgQzEyOS4yNjEsMjQuMjQ4IDEyNy4yMDQsMjMuNzU5IDEyNS4wMDcsMjMuNzU5IEwxMjUuMDA3LDIzLjc1OSBaIiBpZD0iRmlsbC0zMCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjUuNjMsMTYuMjE5IEwxNTkuODk2LDE5LjUzIEMxNTYuNzI5LDIxLjM1OCAxNTEuNjEsMjEuMzY3IDE0OC40NjMsMTkuNTUgQzE0NS4zMTYsMTcuNzMzIDE0NS4zMzIsMTQuNzc4IDE0OC40OTksMTIuOTQ5IEwxNTQuMjMzLDkuNjM5IEwxNjUuNjMsMTYuMjE5IiBpZD0iRmlsbC0zMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNTQuMjMzLDEwLjQ0OCBMMTY0LjIyOCwxNi4yMTkgTDE1OS41NDYsMTguOTIzIEMxNTguMTEyLDE5Ljc1IDE1Ni4xOTQsMjAuMjA2IDE1NC4xNDcsMjAuMjA2IEMxNTIuMTE4LDIwLjIwNiAxNTAuMjI0LDE5Ljc1NyAxNDguODE0LDE4Ljk0MyBDMTQ3LjUyNCwxOC4xOTkgMTQ2LjgxNCwxNy4yNDkgMTQ2LjgxNCwxNi4yNjkgQzE0Ni44MTQsMTUuMjc4IDE0Ny41MzcsMTQuMzE0IDE0OC44NSwxMy41NTYgTDE1NC4yMzMsMTAuNDQ4IE0xNTQuMjMzLDkuNjM5IEwxNDguNDk5LDEyLjk0OSBDMTQ1LjMzMiwxNC43NzggMTQ1LjMxNiwxNy43MzMgMTQ4LjQ2MywxOS41NSBDMTUwLjAzMSwyMC40NTUgMTUyLjA4NiwyMC45MDcgMTU0LjE0NywyMC45MDcgQzE1Ni4yMjQsMjAuOTA3IDE1OC4zMDYsMjAuNDQ3IDE1OS44OTYsMTkuNTMgTDE2NS42MywxNi4yMTkgTDE1NC4yMzMsOS42MzkiIGlkPSJGaWxsLTMyIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NS40NDUsNzIuNjY3IEwxNDUuNDQ1LDcyLjY2NyBDMTQzLjY3Miw3Mi42NjcgMTQyLjIwNCw3MS44MTcgMTQxLjIwMiw3MC40MjIgQzE0MS4xMzUsNzAuMzMgMTQxLjE0NSw3MC4xNDcgMTQxLjIyNSw3MC4wNjYgQzE0MS4zMDUsNjkuOTg1IDE0MS40MzIsNjkuOTQ2IDE0MS41MjUsNzAuMDExIEMxNDIuMzA2LDcwLjU1OSAxNDMuMjMxLDcwLjgyMyAxNDQuMjc2LDcwLjgyMiBDMTQ1LjU5OCw3MC44MjIgMTQ3LjAzLDcwLjM3NiAxNDguNTMyLDY5LjUwOSBDMTUzLjg0Miw2Ni40NDMgMTU4LjE2Myw1OC45ODcgMTU4LjE2Myw1Mi44OTQgQzE1OC4xNjMsNTAuOTY3IDE1Ny43MjEsNDkuMzMyIDE1Ni44ODQsNDguMTY4IEMxNTYuODE4LDQ4LjA3NiAxNTYuODI4LDQ3Ljk0OCAxNTYuOTA4LDQ3Ljg2NyBDMTU2Ljk4OCw0Ny43ODYgMTU3LjExNCw0Ny43NzQgMTU3LjIwOCw0Ny44NCBDMTU4Ljg3OCw0OS4wMTIgMTU5Ljc5OCw1MS4yMiAxNTkuNzk4LDU0LjA1OSBDMTU5Ljc5OCw2MC4zMDEgMTU1LjM3Myw2OC4wNDYgMTQ5LjkzMyw3MS4xODYgQzE0OC4zNiw3Mi4wOTQgMTQ2Ljg1LDcyLjY2NyAxNDUuNDQ1LDcyLjY2NyBMMTQ1LjQ0NSw3Mi42NjcgWiBNMTQyLjQ3Niw3MSBDMTQzLjI5LDcxLjY1MSAxNDQuMjk2LDcyLjAwMiAxNDUuNDQ1LDcyLjAwMiBDMTQ2Ljc2Nyw3Mi4wMDIgMTQ4LjE5OCw3MS41NSAxNDkuNyw3MC42ODIgQzE1NS4wMSw2Ny42MTcgMTU5LjMzMSw2MC4xNTkgMTU5LjMzMSw1NC4wNjUgQzE1OS4zMzEsNTIuMDg1IDE1OC44NjgsNTAuNDM1IDE1OC4wMDYsNDkuMjcyIEMxNTguNDE3LDUwLjMwNyAxNTguNjMsNTEuNTMyIDE1OC42Myw1Mi44OTIgQzE1OC42Myw1OS4xMzQgMTU0LjIwNSw2Ni43NjcgMTQ4Ljc2NSw2OS45MDcgQzE0Ny4xOTIsNzAuODE2IDE0NS42ODEsNzEuMjgzIDE0NC4yNzYsNzEuMjgzIEMxNDMuNjM0LDcxLjI4MyAxNDMuMDMzLDcxLjE5MiAxNDIuNDc2LDcxIEwxNDIuNDc2LDcxIFoiIGlkPSJGaWxsLTMzIiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0OC42NDgsNjkuNzA0IEMxNTQuMDMyLDY2LjU5NiAxNTguMzk2LDU5LjA2OCAxNTguMzk2LDUyLjg5MSBDMTU4LjM5Niw1MC44MzkgMTU3LjkxMyw0OS4xOTggMTU3LjA3NCw0OC4wMyBDMTU1LjI4OSw0Ni43NzggMTUyLjY5OSw0Ni44MzYgMTQ5LjgxNiw0OC41MDEgQzE0NC40MzMsNTEuNjA5IDE0MC4wNjgsNTkuMTM3IDE0MC4wNjgsNjUuMzE0IEMxNDAuMDY4LDY3LjM2NSAxNDAuNTUyLDY5LjAwNiAxNDEuMzkxLDcwLjE3NCBDMTQzLjE3Niw3MS40MjcgMTQ1Ljc2NSw3MS4zNjkgMTQ4LjY0OCw2OS43MDQiIGlkPSJGaWxsLTM0IiBmaWxsPSIjRkFGQUZBIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE0NC4yNzYsNzEuMjc2IEwxNDQuMjc2LDcxLjI3NiBDMTQzLjEzMyw3MS4yNzYgMTQyLjExOCw3MC45NjkgMTQxLjI1Nyw3MC4zNjUgQzE0MS4yMzYsNzAuMzUxIDE0MS4yMTcsNzAuMzMyIDE0MS4yMDIsNzAuMzExIEMxNDAuMzA3LDY5LjA2NyAxMzkuODM1LDY3LjMzOSAxMzkuODM1LDY1LjMxNCBDMTM5LjgzNSw1OS4wNzMgMTQ0LjI2LDUxLjQzOSAxNDkuNyw0OC4yOTggQzE1MS4yNzMsNDcuMzkgMTUyLjc4NCw0Ni45MjkgMTU0LjE4OSw0Ni45MjkgQzE1NS4zMzIsNDYuOTI5IDE1Ni4zNDcsNDcuMjM2IDE1Ny4yMDgsNDcuODM5IEMxNTcuMjI5LDQ3Ljg1NCAxNTcuMjQ4LDQ3Ljg3MyAxNTcuMjYzLDQ3Ljg5NCBDMTU4LjE1Nyw0OS4xMzggMTU4LjYzLDUwLjg2NSAxNTguNjMsNTIuODkxIEMxNTguNjMsNTkuMTMyIDE1NC4yMDUsNjYuNzY2IDE0OC43NjUsNjkuOTA3IEMxNDcuMTkyLDcwLjgxNSAxNDUuNjgxLDcxLjI3NiAxNDQuMjc2LDcxLjI3NiBMMTQ0LjI3Niw3MS4yNzYgWiBNMTQxLjU1OCw3MC4xMDQgQzE0Mi4zMzEsNzAuNjM3IDE0My4yNDUsNzEuMDA1IDE0NC4yNzYsNzEuMDA1IEMxNDUuNTk4LDcxLjAwNSAxNDcuMDMsNzAuNDY3IDE0OC41MzIsNjkuNiBDMTUzLjg0Miw2Ni41MzQgMTU4LjE2Myw1OS4wMzMgMTU4LjE2Myw1Mi45MzkgQzE1OC4xNjMsNTEuMDMxIDE1Ny43MjksNDkuMzg1IDE1Ni45MDcsNDguMjIzIEMxNTYuMTMzLDQ3LjY5MSAxNTUuMjE5LDQ3LjQwOSAxNTQuMTg5LDQ3LjQwOSBDMTUyLjg2Nyw0Ny40MDkgMTUxLjQzNSw0Ny44NDIgMTQ5LjkzMyw0OC43MDkgQzE0NC42MjMsNTEuNzc1IDE0MC4zMDIsNTkuMjczIDE0MC4zMDIsNjUuMzY2IEMxNDAuMzAyLDY3LjI3NiAxNDAuNzM2LDY4Ljk0MiAxNDEuNTU4LDcwLjEwNCBMMTQxLjU1OCw3MC4xMDQgWiIgaWQ9IkZpbGwtMzUiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTUwLjcyLDY1LjM2MSBMMTUwLjM1Nyw2NS4wNjYgQzE1MS4xNDcsNjQuMDkyIDE1MS44NjksNjMuMDQgMTUyLjUwNSw2MS45MzggQzE1My4zMTMsNjAuNTM5IDE1My45NzgsNTkuMDY3IDE1NC40ODIsNTcuNTYzIEwxNTQuOTI1LDU3LjcxMiBDMTU0LjQxMiw1OS4yNDUgMTUzLjczMyw2MC43NDUgMTUyLjkxLDYyLjE3MiBDMTUyLjI2Miw2My4yOTUgMTUxLjUyNSw2NC4zNjggMTUwLjcyLDY1LjM2MSIgaWQ9IkZpbGwtMzYiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE1LjkxNyw4NC41MTQgTDExNS41NTQsODQuMjIgQzExNi4zNDQsODMuMjQ1IDExNy4wNjYsODIuMTk0IDExNy43MDIsODEuMDkyIEMxMTguNTEsNzkuNjkyIDExOS4xNzUsNzguMjIgMTE5LjY3OCw3Ni43MTcgTDEyMC4xMjEsNzYuODY1IEMxMTkuNjA4LDc4LjM5OCAxMTguOTMsNzkuODk5IDExOC4xMDYsODEuMzI2IEMxMTcuNDU4LDgyLjQ0OCAxMTYuNzIyLDgzLjUyMSAxMTUuOTE3LDg0LjUxNCIgaWQ9IkZpbGwtMzciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE0LDEzMC40NzYgTDExNCwxMzAuMDA4IEwxMTQsNzYuMDUyIEwxMTQsNzUuNTg0IEwxMTQsNzYuMDUyIEwxMTQsMTMwLjAwOCBMMTE0LDEzMC40NzYiIGlkPSJGaWxsLTM4IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8ZyBpZD0iSW1wb3J0ZWQtTGF5ZXJzLUNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYyLjAwMDAwMCwgMC4wMDAwMDApIiBza2V0Y2g6dHlwZT0iTVNTaGFwZUdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTkuODIyLDM3LjQ3NCBDMTkuODM5LDM3LjMzOSAxOS43NDcsMzcuMTk0IDE5LjU1NSwzNy4wODIgQzE5LjIyOCwzNi44OTQgMTguNzI5LDM2Ljg3MiAxOC40NDYsMzcuMDM3IEwxMi40MzQsNDAuNTA4IEMxMi4zMDMsNDAuNTg0IDEyLjI0LDQwLjY4NiAxMi4yNDMsNDAuNzkzIEMxMi4yNDUsNDAuOTI1IDEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQxLjM3MSBMMTIuMjQ1LDQxLjQxNCBMMTIuMjM4LDQxLjU0MiBDOC4xNDgsNDMuODg3IDUuNjQ3LDQ1LjMyMSA1LjY0Nyw0NS4zMjEgQzUuNjQ2LDQ1LjMyMSAzLjU3LDQ2LjM2NyAyLjg2LDUwLjUxMyBDMi44Niw1MC41MTMgMS45NDgsNTcuNDc0IDEuOTYyLDcwLjI1OCBDMS45NzcsODIuODI4IDIuNTY4LDg3LjMyOCAzLjEyOSw5MS42MDkgQzMuMzQ5LDkzLjI5MyA2LjEzLDkzLjczNCA2LjEzLDkzLjczNCBDNi40NjEsOTMuNzc0IDYuODI4LDkzLjcwNyA3LjIxLDkzLjQ4NiBMODIuNDgzLDQ5LjkzNSBDODQuMjkxLDQ4Ljg2NiA4NS4xNSw0Ni4yMTYgODUuNTM5LDQzLjY1MSBDODYuNzUyLDM1LjY2MSA4Ny4yMTQsMTAuNjczIDg1LjI2NCwzLjc3MyBDODUuMDY4LDMuMDggODQuNzU0LDIuNjkgODQuMzk2LDIuNDkxIEw4Mi4zMSwxLjcwMSBDODEuNTgzLDEuNzI5IDgwLjg5NCwyLjE2OCA4MC43NzYsMi4yMzYgQzgwLjYzNiwyLjMxNyA0MS44MDcsMjQuNTg1IDIwLjAzMiwzNy4wNzIgTDE5LjgyMiwzNy40NzQiIGlkPSJGaWxsLTEiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNODIuMzExLDEuNzAxIEw4NC4zOTYsMi40OTEgQzg0Ljc1NCwyLjY5IDg1LjA2OCwzLjA4IDg1LjI2NCwzLjc3MyBDODcuMjEzLDEwLjY3MyA4Ni43NTEsMzUuNjYgODUuNTM5LDQzLjY1MSBDODUuMTQ5LDQ2LjIxNiA4NC4yOSw0OC44NjYgODIuNDgzLDQ5LjkzNSBMNy4yMSw5My40ODYgQzYuODk3LDkzLjY2NyA2LjU5NSw5My43NDQgNi4zMTQsOTMuNzQ0IEw2LjEzMSw5My43MzMgQzYuMTMxLDkzLjczNCAzLjM0OSw5My4yOTMgMy4xMjgsOTEuNjA5IEMyLjU2OCw4Ny4zMjcgMS45NzcsODIuODI4IDEuOTYzLDcwLjI1OCBDMS45NDgsNTcuNDc0IDIuODYsNTAuNTEzIDIuODYsNTAuNTEzIEMzLjU3LDQ2LjM2NyA1LjY0Nyw0NS4zMjEgNS42NDcsNDUuMzIxIEM1LjY0Nyw0NS4zMjEgOC4xNDgsNDMuODg3IDEyLjIzOCw0MS41NDIgTDEyLjI0NSw0MS40MTQgTDEyLjI0NSw0MS4zNzEgQzEyLjI0NSw0MS4yNTQgMTIuMjQ1LDQwLjkyNSAxMi4yNDMsNDAuNzkzIEMxMi4yNCw0MC42ODYgMTIuMzAyLDQwLjU4MyAxMi40MzQsNDAuNTA4IEwxOC40NDYsMzcuMDM2IEMxOC41NzQsMzYuOTYyIDE4Ljc0NiwzNi45MjYgMTguOTI3LDM2LjkyNiBDMTkuMTQ1LDM2LjkyNiAxOS4zNzYsMzYuOTc5IDE5LjU1NCwzNy4wODIgQzE5Ljc0NywzNy4xOTQgMTkuODM5LDM3LjM0IDE5LjgyMiwzNy40NzQgTDIwLjAzMywzNy4wNzIgQzQxLjgwNiwyNC41ODUgODAuNjM2LDIuMzE4IDgwLjc3NywyLjIzNiBDODAuODk0LDIuMTY4IDgxLjU4MywxLjcyOSA4Mi4zMTEsMS43MDEgTTgyLjMxMSwwLjcwNCBMODIuMjcyLDAuNzA1IEM4MS42NTQsMC43MjggODAuOTg5LDAuOTQ5IDgwLjI5OCwxLjM2MSBMODAuMjc3LDEuMzczIEM4MC4xMjksMS40NTggNTkuNzY4LDEzLjEzNSAxOS43NTgsMzYuMDc5IEMxOS41LDM1Ljk4MSAxOS4yMTQsMzUuOTI5IDE4LjkyNywzNS45MjkgQzE4LjU2MiwzNS45MjkgMTguMjIzLDM2LjAxMyAxNy45NDcsMzYuMTczIEwxMS45MzUsMzkuNjQ0IEMxMS40OTMsMzkuODk5IDExLjIzNiw0MC4zMzQgMTEuMjQ2LDQwLjgxIEwxMS4yNDcsNDAuOTYgTDUuMTY3LDQ0LjQ0NyBDNC43OTQsNDQuNjQ2IDIuNjI1LDQ1Ljk3OCAxLjg3Nyw1MC4zNDUgTDEuODcxLDUwLjM4NCBDMS44NjIsNTAuNDU0IDAuOTUxLDU3LjU1NyAwLjk2NSw3MC4yNTkgQzAuOTc5LDgyLjg3OSAxLjU2OCw4Ny4zNzUgMi4xMzcsOTEuNzI0IEwyLjEzOSw5MS43MzkgQzIuNDQ3LDk0LjA5NCA1LjYxNCw5NC42NjIgNS45NzUsOTQuNzE5IEw2LjAwOSw5NC43MjMgQzYuMTEsOTQuNzM2IDYuMjEzLDk0Ljc0MiA2LjMxNCw5NC43NDIgQzYuNzksOTQuNzQyIDcuMjYsOTQuNjEgNy43MSw5NC4zNSBMODIuOTgzLDUwLjc5OCBDODQuNzk0LDQ5LjcyNyA4NS45ODIsNDcuMzc1IDg2LjUyNSw0My44MDEgQzg3LjcxMSwzNS45ODcgODguMjU5LDEwLjcwNSA4Ni4yMjQsMy41MDIgQzg1Ljk3MSwyLjYwOSA4NS41MiwxLjk3NSA4NC44ODEsMS42MiBMODQuNzQ5LDEuNTU4IEw4Mi42NjQsMC43NjkgQzgyLjU1MSwwLjcyNSA4Mi40MzEsMC43MDQgODIuMzExLDAuNzA0IiBpZD0iRmlsbC0yIiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTY2LjI2NywxMS41NjUgTDY3Ljc2MiwxMS45OTkgTDExLjQyMyw0NC4zMjUiIGlkPSJGaWxsLTMiIGZpbGw9IiNGRkZGRkYiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMjAyLDkwLjU0NSBDMTIuMDI5LDkwLjU0NSAxMS44NjIsOTAuNDU1IDExLjc2OSw5MC4yOTUgQzExLjYzMiw5MC4wNTcgMTEuNzEzLDg5Ljc1MiAxMS45NTIsODkuNjE0IEwzMC4zODksNzguOTY5IEMzMC42MjgsNzguODMxIDMwLjkzMyw3OC45MTMgMzEuMDcxLDc5LjE1MiBDMzEuMjA4LDc5LjM5IDMxLjEyNyw3OS42OTYgMzAuODg4LDc5LjgzMyBMMTIuNDUxLDkwLjQ3OCBMMTIuMjAyLDkwLjU0NSIgaWQ9IkZpbGwtNCIgZmlsbD0iIzYwN0Q4QiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43NjQsNDIuNjU0IEwxMy42NTYsNDIuNTkyIEwxMy43MDIsNDIuNDIxIEwxOC44MzcsMzkuNDU3IEwxOS4wMDcsMzkuNTAyIEwxOC45NjIsMzkuNjczIEwxMy44MjcsNDIuNjM3IEwxMy43NjQsNDIuNjU0IiBpZD0iRmlsbC01IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTguNTIsOTAuMzc1IEw4LjUyLDQ2LjQyMSBMOC41ODMsNDYuMzg1IEw3NS44NCw3LjU1NCBMNzUuODQsNTEuNTA4IEw3NS43NzgsNTEuNTQ0IEw4LjUyLDkwLjM3NSBMOC41Miw5MC4zNzUgWiBNOC43Nyw0Ni41NjQgTDguNzcsODkuOTQ0IEw3NS41OTEsNTEuMzY1IEw3NS41OTEsNy45ODUgTDguNzcsNDYuNTY0IEw4Ljc3LDQ2LjU2NCBaIiBpZD0iRmlsbC02IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljk4Niw4My4xODIgQzI0Ljc1Niw4My4zMzEgMjQuMzc0LDgzLjU2NiAyNC4xMzcsODMuNzA1IEwxMi42MzIsOTAuNDA2IEMxMi4zOTUsOTAuNTQ1IDEyLjQyNiw5MC42NTggMTIuNyw5MC42NTggTDEzLjI2NSw5MC42NTggQzEzLjU0LDkwLjY1OCAxMy45NTgsOTAuNTQ1IDE0LjE5NSw5MC40MDYgTDI1LjcsODMuNzA1IEMyNS45MzcsODMuNTY2IDI2LjEyOCw4My40NTIgMjYuMTI1LDgzLjQ0OSBDMjYuMTIyLDgzLjQ0NyAyNi4xMTksODMuMjIgMjYuMTE5LDgyLjk0NiBDMjYuMTE5LDgyLjY3MiAyNS45MzEsODIuNTY5IDI1LjcwMSw4Mi43MTkgTDI0Ljk4Niw4My4xODIiIGlkPSJGaWxsLTciIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjY2LDkwLjc4MiBMMTIuNyw5MC43ODIgQzEyLjUsOTAuNzgyIDEyLjM4NCw5MC43MjYgMTIuMzU0LDkwLjYxNiBDMTIuMzI0LDkwLjUwNiAxMi4zOTcsOTAuMzk5IDEyLjU2OSw5MC4yOTkgTDI0LjA3NCw4My41OTcgQzI0LjMxLDgzLjQ1OSAyNC42ODksODMuMjI2IDI0LjkxOCw4My4wNzggTDI1LjYzMyw4Mi42MTQgQzI1LjcyMyw4Mi41NTUgMjUuODEzLDgyLjUyNSAyNS44OTksODIuNTI1IEMyNi4wNzEsODIuNTI1IDI2LjI0NCw4Mi42NTUgMjYuMjQ0LDgyLjk0NiBDMjYuMjQ0LDgzLjE2IDI2LjI0NSw4My4zMDkgMjYuMjQ3LDgzLjM4MyBMMjYuMjUzLDgzLjM4NyBMMjYuMjQ5LDgzLjQ1NiBDMjYuMjQ2LDgzLjUzMSAyNi4yNDYsODMuNTMxIDI1Ljc2Myw4My44MTIgTDE0LjI1OCw5MC41MTQgQzE0LDkwLjY2NSAxMy41NjQsOTAuNzgyIDEzLjI2Niw5MC43ODIgTDEzLjI2Niw5MC43ODIgWiBNMTIuNjY2LDkwLjUzMiBMMTIuNyw5MC41MzMgTDEzLjI2Niw5MC41MzMgQzEzLjUxOCw5MC41MzMgMTMuOTE1LDkwLjQyNSAxNC4xMzIsOTAuMjk5IEwyNS42MzcsODMuNTk3IEMyNS44MDUsODMuNDk5IDI1LjkzMSw4My40MjQgMjUuOTk4LDgzLjM4MyBDMjUuOTk0LDgzLjI5OSAyNS45OTQsODMuMTY1IDI1Ljk5NCw4Mi45NDYgTDI1Ljg5OSw4Mi43NzUgTDI1Ljc2OCw4Mi44MjQgTDI1LjA1NCw4My4yODcgQzI0LjgyMiw4My40MzcgMjQuNDM4LDgzLjY3MyAyNC4yLDgzLjgxMiBMMTIuNjk1LDkwLjUxNCBMMTIuNjY2LDkwLjUzMiBMMTIuNjY2LDkwLjUzMiBaIiBpZD0iRmlsbC04IiBmaWxsPSIjNjA3RDhCIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2Niw4OS44NzEgTDEyLjcsODkuODcxIEMxMi41LDg5Ljg3MSAxMi4zODQsODkuODE1IDEyLjM1NCw4OS43MDUgQzEyLjMyNCw4OS41OTUgMTIuMzk3LDg5LjQ4OCAxMi41NjksODkuMzg4IEwyNC4wNzQsODIuNjg2IEMyNC4zMzIsODIuNTM1IDI0Ljc2OCw4Mi40MTggMjUuMDY3LDgyLjQxOCBMMjUuNjMyLDgyLjQxOCBDMjUuODMyLDgyLjQxOCAyNS45NDgsODIuNDc0IDI1Ljk3OCw4Mi41ODQgQzI2LjAwOCw4Mi42OTQgMjUuOTM1LDgyLjgwMSAyNS43NjMsODIuOTAxIEwxNC4yNTgsODkuNjAzIEMxNCw4OS43NTQgMTMuNTY0LDg5Ljg3MSAxMy4yNjYsODkuODcxIEwxMy4yNjYsODkuODcxIFogTTEyLjY2Niw4OS42MjEgTDEyLjcsODkuNjIyIEwxMy4yNjYsODkuNjIyIEMxMy41MTgsODkuNjIyIDEzLjkxNSw4OS41MTUgMTQuMTMyLDg5LjM4OCBMMjUuNjM3LDgyLjY4NiBMMjUuNjY3LDgyLjY2OCBMMjUuNjMyLDgyLjY2NyBMMjUuMDY3LDgyLjY2NyBDMjQuODE1LDgyLjY2NyAyNC40MTgsODIuNzc1IDI0LjIsODIuOTAxIEwxMi42OTUsODkuNjAzIEwxMi42NjYsODkuNjIxIEwxMi42NjYsODkuNjIxIFoiIGlkPSJGaWxsLTkiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzcsOTAuODAxIEwxMi4zNyw4OS41NTQgTDEyLjM3LDkwLjgwMSIgaWQ9IkZpbGwtMTAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNi4xMyw5My45MDEgQzUuMzc5LDkzLjgwOCA0LjgxNiw5My4xNjQgNC42OTEsOTIuNTI1IEMzLjg2LDg4LjI4NyAzLjU0LDgzLjc0MyAzLjUyNiw3MS4xNzMgQzMuNTExLDU4LjM4OSA0LjQyMyw1MS40MjggNC40MjMsNTEuNDI4IEM1LjEzNCw0Ny4yODIgNy4yMSw0Ni4yMzYgNy4yMSw0Ni4yMzYgQzcuMjEsNDYuMjM2IDgxLjY2NywzLjI1IDgyLjA2OSwzLjAxNyBDODIuMjkyLDIuODg4IDg0LjU1NiwxLjQzMyA4NS4yNjQsMy45NCBDODcuMjE0LDEwLjg0IDg2Ljc1MiwzNS44MjcgODUuNTM5LDQzLjgxOCBDODUuMTUsNDYuMzgzIDg0LjI5MSw0OS4wMzMgODIuNDgzLDUwLjEwMSBMNy4yMSw5My42NTMgQzYuODI4LDkzLjg3NCA2LjQ2MSw5My45NDEgNi4xMyw5My45MDEgQzYuMTMsOTMuOTAxIDMuMzQ5LDkzLjQ2IDMuMTI5LDkxLjc3NiBDMi41NjgsODcuNDk1IDEuOTc3LDgyLjk5NSAxLjk2Miw3MC40MjUgQzEuOTQ4LDU3LjY0MSAyLjg2LDUwLjY4IDIuODYsNTAuNjggQzMuNTcsNDYuNTM0IDUuNjQ3LDQ1LjQ4OSA1LjY0Nyw0NS40ODkgQzUuNjQ2LDQ1LjQ4OSA4LjA2NSw0NC4wOTIgMTIuMjQ1LDQxLjY3OSBMMTMuMTE2LDQxLjU2IEwxOS43MTUsMzcuNzMgTDE5Ljc2MSwzNy4yNjkgTDYuMTMsOTMuOTAxIiBpZD0iRmlsbC0xMSIgZmlsbD0iI0ZBRkFGQSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjMxNyw5NC4xNjEgTDYuMTAyLDk0LjE0OCBMNi4xMDEsOTQuMTQ4IEw1Ljg1Nyw5NC4xMDEgQzUuMTM4LDkzLjk0NSAzLjA4NSw5My4zNjUgMi44ODEsOTEuODA5IEMyLjMxMyw4Ny40NjkgMS43MjcsODIuOTk2IDEuNzEzLDcwLjQyNSBDMS42OTksNTcuNzcxIDIuNjA0LDUwLjcxOCAyLjYxMyw1MC42NDggQzMuMzM4LDQ2LjQxNyA1LjQ0NSw0NS4zMSA1LjUzNSw0NS4yNjYgTDEyLjE2Myw0MS40MzkgTDEzLjAzMyw0MS4zMiBMMTkuNDc5LDM3LjU3OCBMMTkuNTEzLDM3LjI0NCBDMTkuNTI2LDM3LjEwNyAxOS42NDcsMzcuMDA4IDE5Ljc4NiwzNy4wMjEgQzE5LjkyMiwzNy4wMzQgMjAuMDIzLDM3LjE1NiAyMC4wMDksMzcuMjkzIEwxOS45NSwzNy44ODIgTDEzLjE5OCw0MS44MDEgTDEyLjMyOCw0MS45MTkgTDUuNzcyLDQ1LjcwNCBDNS43NDEsNDUuNzIgMy43ODIsNDYuNzcyIDMuMTA2LDUwLjcyMiBDMy4wOTksNTAuNzgyIDIuMTk4LDU3LjgwOCAyLjIxMiw3MC40MjQgQzIuMjI2LDgyLjk2MyAyLjgwOSw4Ny40MiAzLjM3Myw5MS43MjkgQzMuNDY0LDkyLjQyIDQuMDYyLDkyLjg4MyA0LjY4Miw5My4xODEgQzQuNTY2LDkyLjk4NCA0LjQ4Niw5Mi43NzYgNC40NDYsOTIuNTcyIEMzLjY2NSw4OC41ODggMy4yOTEsODQuMzcgMy4yNzYsNzEuMTczIEMzLjI2Miw1OC41MiA0LjE2Nyw1MS40NjYgNC4xNzYsNTEuMzk2IEM0LjkwMSw0Ny4xNjUgNy4wMDgsNDYuMDU5IDcuMDk4LDQ2LjAxNCBDNy4wOTQsNDYuMDE1IDgxLjU0MiwzLjAzNCA4MS45NDQsMi44MDIgTDgxLjk3MiwyLjc4NSBDODIuODc2LDIuMjQ3IDgzLjY5MiwyLjA5NyA4NC4zMzIsMi4zNTIgQzg0Ljg4NywyLjU3MyA4NS4yODEsMy4wODUgODUuNTA0LDMuODcyIEM4Ny41MTgsMTEgODYuOTY0LDM2LjA5MSA4NS43ODUsNDMuODU1IEM4NS4yNzgsNDcuMTk2IDg0LjIxLDQ5LjM3IDgyLjYxLDUwLjMxNyBMNy4zMzUsOTMuODY5IEM2Ljk5OSw5NC4wNjMgNi42NTgsOTQuMTYxIDYuMzE3LDk0LjE2MSBMNi4zMTcsOTQuMTYxIFogTTYuMTcsOTMuNjU0IEM2LjQ2Myw5My42OSA2Ljc3NCw5My42MTcgNy4wODUsOTMuNDM3IEw4Mi4zNTgsNDkuODg2IEM4NC4xODEsNDguODA4IDg0Ljk2LDQ1Ljk3MSA4NS4yOTIsNDMuNzggQzg2LjQ2NiwzNi4wNDkgODcuMDIzLDExLjA4NSA4NS4wMjQsNC4wMDggQzg0Ljg0NiwzLjM3NyA4NC41NTEsMi45NzYgODQuMTQ4LDIuODE2IEM4My42NjQsMi42MjMgODIuOTgyLDIuNzY0IDgyLjIyNywzLjIxMyBMODIuMTkzLDMuMjM0IEM4MS43OTEsMy40NjYgNy4zMzUsNDYuNDUyIDcuMzM1LDQ2LjQ1MiBDNy4zMDQsNDYuNDY5IDUuMzQ2LDQ3LjUyMSA0LjY2OSw1MS40NzEgQzQuNjYyLDUxLjUzIDMuNzYxLDU4LjU1NiAzLjc3NSw3MS4xNzMgQzMuNzksODQuMzI4IDQuMTYxLDg4LjUyNCA0LjkzNiw5Mi40NzYgQzUuMDI2LDkyLjkzNyA1LjQxMiw5My40NTkgNS45NzMsOTMuNjE1IEM2LjA4Nyw5My42NCA2LjE1OCw5My42NTIgNi4xNjksOTMuNjU0IEw2LjE3LDkzLjY1NCBMNi4xNyw5My42NTQgWiIgaWQ9IkZpbGwtMTIiIGZpbGw9IiM0NTVBNjQiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4zMTcsNjguOTgyIEM3LjgwNiw2OC43MDEgOC4yMDIsNjguOTI2IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNi44MjksNzEuMjk0IDYuNDMzLDcxLjA2OSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIiBpZD0iRmlsbC0xMyIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjkyLDcxLjEzMyBDNi42MzEsNzEuMTMzIDYuNDMzLDcwLjkwNSA2LjQzMyw3MC41MDggQzYuNDMzLDY5Ljk0OCA2LjgyOSw2OS4yNjUgNy4zMTcsNjguOTgyIEM3LjQ2LDY4LjkgNy41OTUsNjguODYxIDcuNzE0LDY4Ljg2MSBDOC4wMDMsNjguODYxIDguMjAyLDY5LjA5IDguMjAyLDY5LjQ4NyBDOC4yMDIsNzAuMDQ3IDcuODA2LDcwLjczIDcuMzE3LDcxLjAxMiBDNy4xNzQsNzEuMDk0IDcuMDM5LDcxLjEzMyA2LjkyLDcxLjEzMyBNNy43MTQsNjguNjc0IEM3LjU1Nyw2OC42NzQgNy4zOTIsNjguNzIzIDcuMjI0LDY4LjgyMSBDNi42NzYsNjkuMTM4IDYuMjQ2LDY5Ljg3OSA2LjI0Niw3MC41MDggQzYuMjQ2LDcwLjk5NCA2LjUxNyw3MS4zMiA2LjkyLDcxLjMyIEM3LjA3OCw3MS4zMiA3LjI0Myw3MS4yNzEgNy40MTEsNzEuMTc0IEM3Ljk1OSw3MC44NTcgOC4zODksNzAuMTE3IDguMzg5LDY5LjQ4NyBDOC4zODksNjkuMDAxIDguMTE3LDY4LjY3NCA3LjcxNCw2OC42NzQiIGlkPSJGaWxsLTE0IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTYuOTIsNzAuOTQ3IEM2LjY0OSw3MC45NDcgNi42MjEsNzAuNjQgNi42MjEsNzAuNTA4IEM2LjYyMSw3MC4wMTcgNi45ODIsNjkuMzkyIDcuNDExLDY5LjE0NSBDNy41MjEsNjkuMDgyIDcuNjI1LDY5LjA0OSA3LjcxNCw2OS4wNDkgQzcuOTg2LDY5LjA0OSA4LjAxNSw2OS4zNTUgOC4wMTUsNjkuNDg3IEM4LjAxNSw2OS45NzggNy42NTIsNzAuNjAzIDcuMjI0LDcwLjg1MSBDNy4xMTUsNzAuOTE0IDcuMDEsNzAuOTQ3IDYuOTIsNzAuOTQ3IE03LjcxNCw2OC44NjEgQzcuNTk1LDY4Ljg2MSA3LjQ2LDY4LjkgNy4zMTcsNjguOTgyIEM2LjgyOSw2OS4yNjUgNi40MzMsNjkuOTQ4IDYuNDMzLDcwLjUwOCBDNi40MzMsNzAuOTA1IDYuNjMxLDcxLjEzMyA2LjkyLDcxLjEzMyBDNy4wMzksNzEuMTMzIDcuMTc0LDcxLjA5NCA3LjMxNyw3MS4wMTIgQzcuODA2LDcwLjczIDguMjAyLDcwLjA0NyA4LjIwMiw2OS40ODcgQzguMjAyLDY5LjA5IDguMDAzLDY4Ljg2MSA3LjcxNCw2OC44NjEiIGlkPSJGaWxsLTE1IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTcuNDQ0LDg1LjM1IEM3LjcwOCw4NS4xOTggNy45MjEsODUuMzE5IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuOTI1IDcuNzA4LDg2LjI5MiA3LjQ0NCw4Ni40NDQgQzcuMTgxLDg2LjU5NyA2Ljk2Nyw4Ni40NzUgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IiBpZD0iRmlsbC0xNiIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjIzLDg2LjUxIEM3LjA3NCw4Ni41MSA2Ljk2Nyw4Ni4zODcgNi45NjcsODYuMTczIEM2Ljk2Nyw4NS44NzEgNy4xODEsODUuNTAyIDcuNDQ0LDg1LjM1IEM3LjUyMSw4NS4zMDUgNy41OTQsODUuMjg0IDcuNjU4LDg1LjI4NCBDNy44MTQsODUuMjg0IDcuOTIxLDg1LjQwOCA3LjkyMSw4NS42MjIgQzcuOTIxLDg1LjkyNSA3LjcwOCw4Ni4yOTIgNy40NDQsODYuNDQ0IEM3LjM2Nyw4Ni40ODkgNy4yOTQsODYuNTEgNy4yMyw4Ni41MSBNNy42NTgsODUuMDk4IEM3LjU1OCw4NS4wOTggNy40NTUsODUuMTI3IDcuMzUxLDg1LjE4OCBDNy4wMzEsODUuMzczIDYuNzgxLDg1LjgwNiA2Ljc4MSw4Ni4xNzMgQzYuNzgxLDg2LjQ4MiA2Ljk2Niw4Ni42OTcgNy4yMyw4Ni42OTcgQzcuMzMsODYuNjk3IDcuNDMzLDg2LjY2NiA3LjUzOCw4Ni42MDcgQzcuODU4LDg2LjQyMiA4LjEwOCw4NS45ODkgOC4xMDgsODUuNjIyIEM4LjEwOCw4NS4zMTMgNy45MjMsODUuMDk4IDcuNjU4LDg1LjA5OCIgaWQ9IkZpbGwtMTciIGZpbGw9IiM4MDk3QTIiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNy4yMyw4Ni4zMjIgTDcuMTU0LDg2LjE3MyBDNy4xNTQsODUuOTM4IDcuMzMzLDg1LjYyOSA3LjUzOCw4NS41MTIgTDcuNjU4LDg1LjQ3MSBMNy43MzQsODUuNjIyIEM3LjczNCw4NS44NTYgNy41NTUsODYuMTY0IDcuMzUxLDg2LjI4MiBMNy4yMyw4Ni4zMjIgTTcuNjU4LDg1LjI4NCBDNy41OTQsODUuMjg0IDcuNTIxLDg1LjMwNSA3LjQ0NCw4NS4zNSBDNy4xODEsODUuNTAyIDYuOTY3LDg1Ljg3MSA2Ljk2Nyw4Ni4xNzMgQzYuOTY3LDg2LjM4NyA3LjA3NCw4Ni41MSA3LjIzLDg2LjUxIEM3LjI5NCw4Ni41MSA3LjM2Nyw4Ni40ODkgNy40NDQsODYuNDQ0IEM3LjcwOCw4Ni4yOTIgNy45MjEsODUuOTI1IDcuOTIxLDg1LjYyMiBDNy45MjEsODUuNDA4IDcuODE0LDg1LjI4NCA3LjY1OCw4NS4yODQiIGlkPSJGaWxsLTE4IiBmaWxsPSIjODA5N0EyIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTc3LjI3OCw3Ljc2OSBMNzcuMjc4LDUxLjQzNiBMMTAuMjA4LDkwLjE2IEwxMC4yMDgsNDYuNDkzIEw3Ny4yNzgsNy43NjkiIGlkPSJGaWxsLTE5IiBmaWxsPSIjNDU1QTY0Ij48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA4Myw5MC4zNzUgTDEwLjA4Myw0Ni40MjEgTDEwLjE0Niw0Ni4zODUgTDc3LjQwMyw3LjU1NCBMNzcuNDAzLDUxLjUwOCBMNzcuMzQxLDUxLjU0NCBMMTAuMDgzLDkwLjM3NSBMMTAuMDgzLDkwLjM3NSBaIE0xMC4zMzMsNDYuNTY0IEwxMC4zMzMsODkuOTQ0IEw3Ny4xNTQsNTEuMzY1IEw3Ny4xNTQsNy45ODUgTDEwLjMzMyw0Ni41NjQgTDEwLjMzMyw0Ni41NjQgWiIgaWQ9IkZpbGwtMjAiIGZpbGw9IiM2MDdEOEIiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMjUuNzM3LDg4LjY0NyBMMTE4LjA5OCw5MS45ODEgTDExOC4wOTgsODQgTDEwNi42MzksODguNzEzIEwxMDYuNjM5LDk2Ljk4MiBMOTksMTAwLjMxNSBMMTEyLjM2OSwxMDMuOTYxIEwxMjUuNzM3LDg4LjY0NyIgaWQ9IkltcG9ydGVkLUxheWVycy1Db3B5LTIiIGZpbGw9IiM0NTVBNjQiIHNrZXRjaDp0eXBlPSJNU1NoYXBlR3JvdXAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+"); };module.exports=RotateInstructions},{"./util.js":68}],63:[function(_dereq_,module,exports){var SensorSample=_dereq_("./sensor-sample.js");var MathUtil=_dereq_("../math-util.js");var Util=_dereq_("../util.js");function ComplementaryFilter(kFilter){this.kFilter=kFilter;this.currentAccelMeasurement=new SensorSample;this.currentGyroMeasurement=new SensorSample;this.previousGyroMeasurement=new SensorSample;if(Util.isIOS()){this.filterQ=new MathUtil.Quaternion(-1,0,0,1)}else{this.filterQ=new MathUtil.Quaternion(1,0,0,1)}this.previousFilterQ=new MathUtil.Quaternion;this.previousFilterQ.copy(this.filterQ);this.accelQ=new MathUtil.Quaternion;this.isOrientationInitialized=false;this.estimatedGravity=new MathUtil.Vector3;this.measuredGravity=new MathUtil.Vector3;this.gyroIntegralQ=new MathUtil.Quaternion}ComplementaryFilter.prototype.addAccelMeasurement=function(vector,timestampS){this.currentAccelMeasurement.set(vector,timestampS)};ComplementaryFilter.prototype.addGyroMeasurement=function(vector,timestampS){this.currentGyroMeasurement.set(vector,timestampS);var deltaT=timestampS-this.previousGyroMeasurement.timestampS;if(Util.isTimestampDeltaValid(deltaT)){this.run_()}this.previousGyroMeasurement.copy(this.currentGyroMeasurement)};ComplementaryFilter.prototype.run_=function(){if(!this.isOrientationInitialized){this.accelQ=this.accelToQuaternion_(this.currentAccelMeasurement.sample);this.previousFilterQ.copy(this.accelQ);this.isOrientationInitialized=true;return}var deltaT=this.currentGyroMeasurement.timestampS-this.previousGyroMeasurement.timestampS;var gyroDeltaQ=this.gyroToQuaternionDelta_(this.currentGyroMeasurement.sample,deltaT);this.gyroIntegralQ.multiply(gyroDeltaQ);this.filterQ.copy(this.previousFilterQ);this.filterQ.multiply(gyroDeltaQ);var invFilterQ=new MathUtil.Quaternion;invFilterQ.copy(this.filterQ);invFilterQ.inverse();this.estimatedGravity.set(0,0,-1);this.estimatedGravity.applyQuaternion(invFilterQ);this.estimatedGravity.normalize();this.measuredGravity.copy(this.currentAccelMeasurement.sample);this.measuredGravity.normalize();var deltaQ=new MathUtil.Quaternion;deltaQ.setFromUnitVectors(this.estimatedGravity,this.measuredGravity);deltaQ.inverse();if(Util.isDebug()){console.log("Delta: %d deg, G_est: (%s, %s, %s), G_meas: (%s, %s, %s)",MathUtil.radToDeg*Util.getQuaternionAngle(deltaQ),this.estimatedGravity.x.toFixed(1),this.estimatedGravity.y.toFixed(1),this.estimatedGravity.z.toFixed(1),this.measuredGravity.x.toFixed(1),this.measuredGravity.y.toFixed(1),this.measuredGravity.z.toFixed(1))}var targetQ=new MathUtil.Quaternion;targetQ.copy(this.filterQ);targetQ.multiply(deltaQ);this.filterQ.slerp(targetQ,1-this.kFilter);this.previousFilterQ.copy(this.filterQ)};ComplementaryFilter.prototype.getOrientation=function(){return this.filterQ};ComplementaryFilter.prototype.accelToQuaternion_=function(accel){var normAccel=new MathUtil.Vector3;normAccel.copy(accel);normAccel.normalize();var quat=new MathUtil.Quaternion;quat.setFromUnitVectors(new MathUtil.Vector3(0,0,-1),normAccel);quat.inverse();return quat};ComplementaryFilter.prototype.gyroToQuaternionDelta_=function(gyro,dt){var quat=new MathUtil.Quaternion;var axis=new MathUtil.Vector3;axis.copy(gyro);axis.normalize();quat.setFromAxisAngle(axis,gyro.length()*dt);return quat};module.exports=ComplementaryFilter},{"../math-util.js":59,"../util.js":68,"./sensor-sample.js":66}],64:[function(_dereq_,module,exports){var ComplementaryFilter=_dereq_("./complementary-filter.js");var PosePredictor=_dereq_("./pose-predictor.js");var TouchPanner=_dereq_("../touch-panner.js");var MathUtil=_dereq_("../math-util.js");var Util=_dereq_("../util.js");function FusionPoseSensor(){this.deviceId="webvr-polyfill:fused";this.deviceName="VR Position Device (webvr-polyfill:fused)";this.accelerometer=new MathUtil.Vector3;this.gyroscope=new MathUtil.Vector3;this.start();this.filter=new ComplementaryFilter(window.WebVRConfig.K_FILTER);this.posePredictor=new PosePredictor(window.WebVRConfig.PREDICTION_TIME_S);this.touchPanner=new TouchPanner;this.filterToWorldQ=new MathUtil.Quaternion;if(Util.isIOS()){this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),Math.PI/2)}else{this.filterToWorldQ.setFromAxisAngle(new MathUtil.Vector3(1,0,0),-Math.PI/2)}this.inverseWorldToScreenQ=new MathUtil.Quaternion;this.worldToScreenQ=new MathUtil.Quaternion;this.originalPoseAdjustQ=new MathUtil.Quaternion;this.originalPoseAdjustQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-window.orientation*Math.PI/180);this.setScreenTransform_();if(Util.isLandscapeMode()){this.filterToWorldQ.multiply(this.inverseWorldToScreenQ)}this.resetQ=new MathUtil.Quaternion;this.isFirefoxAndroid=Util.isFirefoxAndroid();this.isIOS=Util.isIOS();this.orientationOut_=new Float32Array(4)}FusionPoseSensor.prototype.getPosition=function(){return null};FusionPoseSensor.prototype.getOrientation=function(){var orientation=this.filter.getOrientation();this.predictedQ=this.posePredictor.getPrediction(orientation,this.gyroscope,this.previousTimestampS);var out=new MathUtil.Quaternion;out.copy(this.filterToWorldQ);out.multiply(this.resetQ);if(!window.WebVRConfig.TOUCH_PANNER_DISABLED){out.multiply(this.touchPanner.getOrientation())}out.multiply(this.predictedQ);out.multiply(this.worldToScreenQ);if(window.WebVRConfig.YAW_ONLY){out.x=0;out.z=0;out.normalize()}this.orientationOut_[0]=out.x;this.orientationOut_[1]=out.y;this.orientationOut_[2]=out.z;this.orientationOut_[3]=out.w;return this.orientationOut_};FusionPoseSensor.prototype.resetPose=function(){this.resetQ.copy(this.filter.getOrientation());this.resetQ.x=0;this.resetQ.y=0;this.resetQ.z*=-1;this.resetQ.normalize();if(Util.isLandscapeMode()){this.resetQ.multiply(this.inverseWorldToScreenQ)}this.resetQ.multiply(this.originalPoseAdjustQ);if(!window.WebVRConfig.TOUCH_PANNER_DISABLED){this.touchPanner.resetSensor()}};FusionPoseSensor.prototype.onDeviceMotion_=function(deviceMotion){this.updateDeviceMotion_(deviceMotion)};FusionPoseSensor.prototype.updateDeviceMotion_=function(deviceMotion){var accGravity=deviceMotion.accelerationIncludingGravity;var rotRate=deviceMotion.rotationRate;var timestampS=deviceMotion.timeStamp/1e3;var deltaS=timestampS-this.previousTimestampS;if(deltaS<=Util.MIN_TIMESTEP||deltaS>Util.MAX_TIMESTEP){console.warn("Invalid timestamps detected. Time step between successive "+"gyroscope sensor samples is very small or not monotonic");this.previousTimestampS=timestampS;return}this.accelerometer.set(-accGravity.x,-accGravity.y,-accGravity.z);this.gyroscope.set(rotRate.alpha,rotRate.beta,rotRate.gamma);if(this.isIOS||this.isFirefoxAndroid){this.gyroscope.multiplyScalar(Math.PI/180)}this.filter.addAccelMeasurement(this.accelerometer,timestampS);this.filter.addGyroMeasurement(this.gyroscope,timestampS);this.previousTimestampS=timestampS};FusionPoseSensor.prototype.onOrientationChange_=function(screenOrientation){this.setScreenTransform_()};FusionPoseSensor.prototype.onMessage_=function(event){var message=event.data;if(!message||!message.type){return}var type=message.type.toLowerCase();if(type!=="devicemotion"){return}this.updateDeviceMotion_(message.deviceMotionEvent)};FusionPoseSensor.prototype.setScreenTransform_=function(){this.worldToScreenQ.set(0,0,0,1);switch(window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new MathUtil.Vector3(0,0,1),Math.PI/2);break;case 180:break}this.inverseWorldToScreenQ.copy(this.worldToScreenQ);this.inverseWorldToScreenQ.inverse()};FusionPoseSensor.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this);this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this);this.onMessageCallback_=this.onMessage_.bind(this);if(Util.isIOS()&&Util.isInsideCrossDomainIFrame()){window.addEventListener("message",this.onMessageCallback_)}window.addEventListener("orientationchange",this.onOrientationChangeCallback_);window.addEventListener("devicemotion",this.onDeviceMotionCallback_)};FusionPoseSensor.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_);window.removeEventListener("orientationchange",this.onOrientationChangeCallback_);window.removeEventListener("message",this.onMessageCallback_)};module.exports=FusionPoseSensor},{"../math-util.js":59,"../touch-panner.js":67,"../util.js":68,"./complementary-filter.js":63,"./pose-predictor.js":65}],65:[function(_dereq_,module,exports){var MathUtil=_dereq_("../math-util");var Util=_dereq_("../util");function PosePredictor(predictionTimeS){this.predictionTimeS=predictionTimeS;this.previousQ=new MathUtil.Quaternion;this.previousTimestampS=null;this.deltaQ=new MathUtil.Quaternion;this.outQ=new MathUtil.Quaternion}PosePredictor.prototype.getPrediction=function(currentQ,gyro,timestampS){if(!this.previousTimestampS){this.previousQ.copy(currentQ);this.previousTimestampS=timestampS;return currentQ}var axis=new MathUtil.Vector3;axis.copy(gyro);axis.normalize();var angularSpeed=gyro.length();if(angularSpeedUtil.MAX_TIMESTEP){return false}return true};Util.getScreenWidth=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio};Util.getScreenHeight=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio};Util.requestFullscreen=function(element){if(Util.isWebViewAndroid()){return false}if(element.requestFullscreen){element.requestFullscreen()}else if(element.webkitRequestFullscreen){element.webkitRequestFullscreen()}else if(element.mozRequestFullScreen){element.mozRequestFullScreen()}else if(element.msRequestFullscreen){element.msRequestFullscreen()}else{return false}return true};Util.exitFullscreen=function(){if(document.exitFullscreen){document.exitFullscreen()}else if(document.webkitExitFullscreen){document.webkitExitFullscreen()}else if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else if(document.msExitFullscreen){document.msExitFullscreen()}else{return false}return true};Util.getFullscreenElement=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement};Util.linkProgram=function(gl,vertexSource,fragmentSource,attribLocationMap){var vertexShader=gl.createShader(gl.VERTEX_SHADER);gl.shaderSource(vertexShader,vertexSource);gl.compileShader(vertexShader);var fragmentShader=gl.createShader(gl.FRAGMENT_SHADER);gl.shaderSource(fragmentShader,fragmentSource);gl.compileShader(fragmentShader);var program=gl.createProgram();gl.attachShader(program,vertexShader);gl.attachShader(program,fragmentShader);for(var attribName in attribLocationMap)gl.bindAttribLocation(program,attribLocationMap[attribName],attribName);gl.linkProgram(program);gl.deleteShader(vertexShader);gl.deleteShader(fragmentShader);return program};Util.getProgramUniforms=function(gl,program){var uniforms={};var uniformCount=gl.getProgramParameter(program,gl.ACTIVE_UNIFORMS);var uniformName="";for(var i=0;i-1){domain=url.split("/")[2]}else{domain=url.split("/")[0]}domain=domain.split(":")[0];return domain};module.exports=Util},{}],69:[function(_dereq_,module,exports){var DeviceInfo=_dereq_("./device-info.js");var Util=_dereq_("./util.js");var DEFAULT_VIEWER="CardboardV1";var VIEWER_KEY="WEBVR_CARDBOARD_VIEWER";var CLASS_NAME="webvr-polyfill-viewer-selector";function ViewerSelector(){try{this.selectedKey=localStorage.getItem(VIEWER_KEY)}catch(error){console.error("Failed to load viewer profile: %s",error)}if(!this.selectedKey){this.selectedKey=DEFAULT_VIEWER}this.dialog=this.createDialog_(DeviceInfo.Viewers);this.root=null;this.onChangeCallbacks_=[]}ViewerSelector.prototype.show=function(root){this.root=root;root.appendChild(this.dialog);var selected=this.dialog.querySelector("#"+this.selectedKey);selected.checked=true;this.dialog.style.display="block"};ViewerSelector.prototype.hide=function(){if(this.root&&this.root.contains(this.dialog)){this.root.removeChild(this.dialog)}this.dialog.style.display="none"};ViewerSelector.prototype.getCurrentViewer=function(){return DeviceInfo.Viewers[this.selectedKey]};ViewerSelector.prototype.getSelectedKey_=function(){var input=this.dialog.querySelector("input[name=field]:checked");if(input){return input.id}return null};ViewerSelector.prototype.onChange=function(cb){this.onChangeCallbacks_.push(cb)};ViewerSelector.prototype.fireOnChange_=function(viewer){for(var i=0;i0?nativeDisplays:polyfillDisplays}})};WebVRPolyfill.prototype.getVRDevices=function(){console.warn("getVRDevices is deprecated. Please update your code to use getVRDisplays instead.");var self=this;return new Promise(function(resolve,reject){try{if(!self.devicesPopulated){if(self.nativeWebVRAvailable){return navigator.getVRDisplays(function(displays){for(var i=0;iend)return end;return idx}function isWhitespace(chr){return whitespace.test(chr)}function pre(measure,text,start,end,width){var lines=[];var lineStart=start;for(var i=start;istart){if(isWhitespace(text.charAt(lineEnd)))break;lineEnd--}if(lineEnd===start){if(nextStart>start+newlineChar.length)nextStart--;lineEnd=nextStart}else{nextStart=lineEnd;while(lineEnd>start){if(!isWhitespace(text.charAt(lineEnd-newlineChar.length)))break;lineEnd--}}}if(lineEnd>=start){var result=measure(text,start,lineEnd,testWidth);lines.push(result)}start=nextStart}return lines}function monospace(text,start,end,width){var glyphs=Math.min(width,end-start);return{start:start,end:start+glyphs}}},{}],73:[function(_dereq_,module,exports){"use strict";var window=_dereq_("global/window");var isFunction=_dereq_("is-function");var parseHeaders=_dereq_("parse-headers");var xtend=_dereq_("xtend");module.exports=createXHR;createXHR.XMLHttpRequest=window.XMLHttpRequest||noop;createXHR.XDomainRequest="withCredentials"in new createXHR.XMLHttpRequest?createXHR.XMLHttpRequest:window.XDomainRequest;forEachArray(["get","put","post","patch","head","delete"],function(method){createXHR[method==="delete"?"del":method]=function(uri,options,callback){options=initParams(uri,options,callback);options.method=method.toUpperCase();return _createXHR(options)}});function forEachArray(array,iterator){for(var i=0;i0){timeoutTimer=setTimeout(function(){if(aborted)return;aborted=true;xhr.abort("timeout");var e=new Error("XMLHttpRequest timeout");e.code="ETIMEDOUT";errorFunc(e)},options.timeout)}if(xhr.setRequestHeader){for(key in headers){if(headers.hasOwnProperty(key)){xhr.setRequestHeader(key,headers[key])}}}else if(options.headers&&!isEmpty(options.headers)){throw new Error("Headers cannot be set on an XDomainRequest object")}if("responseType"in options){xhr.responseType=options.responseType}if("beforeSend"in options&&typeof options.beforeSend==="function"){options.beforeSend(xhr)}xhr.send(body||null);return xhr}function getXml(xhr){if(xhr.responseType==="document"){return xhr.responseXML}var firefoxBugTakenEffect=xhr.responseXML&&xhr.responseXML.documentElement.nodeName==="parsererror";if(xhr.responseType===""&&!firefoxBugTakenEffect){return xhr.responseXML}return null}function noop(){}},{"global/window":17,"is-function":21,"parse-headers":31,xtend:75}],74:[function(_dereq_,module,exports){module.exports=function xmlparser(){if(typeof self.DOMParser!=="undefined"){return function(str){var parser=new self.DOMParser;return parser.parseFromString(str,"application/xml")}}if(typeof self.ActiveXObject!=="undefined"&&new self.ActiveXObject("Microsoft.XMLDOM")){return function(str){var xmlDoc=new self.ActiveXObject("Microsoft.XMLDOM");xmlDoc.async="false";xmlDoc.loadXML(str);return xmlDoc}}return function(str){var div=document.createElement("div");div.innerHTML=str;return div}}()},{}],75:[function(_dereq_,module,exports){module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty;function extend(){var target={};for(var i=0;i dist/aframe-master.js","dist:min":"npm run browserify -s -- --debug -p [minifyify --map aframe-master.min.js.map --output dist/aframe-master.min.js.map] -o dist/aframe-master.min.js",docs:"markserv --dir docs --port 9001",preghpages:"node ./scripts/preghpages.js",ghpages:"ghpages -p gh-pages/",lint:"semistandard -v | snazzy","lint:fix":"semistandard --fix",precommit:"npm run lint",prerelease:"node scripts/release.js 0.6.0 0.6.1",start:"npm run dev",test:"karma start ./tests/karma.conf.js","test:docs":"node scripts/docsLint.js","test:firefox":"npm test -- --browsers Firefox","test:chrome":"npm test -- --browsers Chrome","test:node":"mocha --ui tdd tests/node"},repository:"aframevr/aframe",license:"MIT",dependencies:{"@tweenjs/tween.js":"^16.8.0","browserify-css":"^0.8.2",debug:"ngokevin/debug#noTimestamp","deep-assign":"^2.0.0","document-register-element":"dmarcos/document-register-element#8ccc532b7",envify:"^3.4.1","load-bmfont":"^1.2.3","object-assign":"^4.0.1",present:"0.0.6","promise-polyfill":"^3.1.0","style-attr":"^1.0.2",three:"^0.86.0","three-bmfont-text":"^2.1.0","webvr-polyfill":"^0.9.36"},devDependencies:{browserify:"^13.1.0","browserify-derequire":"^0.9.4","browserify-istanbul":"^2.0.0",budo:"^9.2.0",chai:"^3.5.0","chai-shallow-deep-equal":"^1.4.0",chalk:"^1.1.3",codecov:"^1.0.1","cross-env":"^5.0.1",exorcist:"^0.4.0",ghpages:"0.0.8","git-rev":"^0.2.1",glob:"^7.1.1",husky:"^0.11.7",istanbul:"^0.4.5",jsdom:"^9.11.0",karma:"1.4.1","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"1.2.4",lolex:"^1.5.1",markserv:"0.0.20",minifyify:"^7.3.3",mocha:"^3.0.2","mozilla-download":"^1.1.1","replace-in-file":"^2.5.3",semistandard:"^9.0.0",shelljs:"^0.7.7",shx:"^0.2.2",sinon:"^1.17.5","sinon-chai":"2.8.0",snazzy:"^5.0.0","too-wordy":"ngokevin/too-wordy",uglifyjs:"^2.4.10","write-good":"^0.9.1"},link:true,browserify:{transform:["browserify-css","envify"]},semistandard:{ignore:["build/**","dist/**","examples/**/shaders/*.js","**/vendor/**"]},keywords:["3d","aframe","cardboard","components","oculus","three","three.js","rift","vive","vr","web-components","webvr"],"browserify-css":{minify:true},engines:{node:">= 4.6.0",npm:"^2.15.9"}}},{}],77:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var bind=utils.bind;var checkHasPositionalTracking=utils.device.checkHasPositionalTracking;module.exports.Component=registerComponent("camera",{schema:{active:{"default":true},far:{"default":1e4},fov:{"default":80,min:0},near:{"default":.005,min:0},userHeight:{"default":0,min:0},zoom:{"default":1,min:0}},init:function(){var camera;var el=this.el;var sceneEl=el.sceneEl;this.savedPose=null;camera=this.camera=new THREE.PerspectiveCamera;el.setObject3D("camera",camera);this.onEnterVR=bind(this.onEnterVR,this);this.onExitVR=bind(this.onExitVR,this);sceneEl.addEventListener("enter-vr",this.onEnterVR);sceneEl.addEventListener("exit-vr",this.onExitVR)},update:function(oldData){var el=this.el;var data=this.data;var camera=this.camera;var system=this.system;this.addHeightOffset(oldData.userHeight);camera.aspect=data.aspect||window.innerWidth/window.innerHeight;camera.far=data.far;camera.fov=data.fov;camera.near=data.near;camera.zoom=data.zoom;camera.updateProjectionMatrix();if(oldData&&oldData.active===data.active){return}if(data.active&&system.activeCameraEl!==el){system.setActiveCamera(el)}else if(!data.active&&system.activeCameraEl===el){system.disableActiveCamera()}},remove:function(){var sceneEl=this.el.sceneEl;this.el.removeObject3D("camera");sceneEl.removeEventListener("enter-vr",this.onEnterVR);sceneEl.removeEventListener("exit-vr",this.onExitVR)},onEnterVR:function(){this.saveCameraPose();this.removeHeightOffset()},onExitVR:function(){this.restoreCameraPose()},addHeightOffset:function(oldOffset){var el=this.el;var currentPosition;var userHeightOffset=this.data.userHeight;oldOffset=oldOffset||0;currentPosition=el.getAttribute("position")||{x:0,y:0,z:0};el.setAttribute("position",{x:currentPosition.x,y:currentPosition.y-oldOffset+userHeightOffset,z:currentPosition.z})},removeHeightOffset:function(){var currentPosition;var el=this.el;var hasPositionalTracking;var userHeightOffset=this.data.userHeight;hasPositionalTracking=this.hasPositionalTracking!==undefined?this.hasPositionalTracking:checkHasPositionalTracking();if(!userHeightOffset||!hasPositionalTracking){return}currentPosition=el.getAttribute("position")||{x:0,y:0,z:0};el.setAttribute("position",{x:currentPosition.x,y:currentPosition.y-userHeightOffset,z:currentPosition.z})},saveCameraPose:function(){var el=this.el;var hasPositionalTracking=this.hasPositionalTracking!==undefined?this.hasPositionalTracking:checkHasPositionalTracking();if(this.savedPose||!hasPositionalTracking){return}this.savedPose={position:el.getAttribute("position"),rotation:el.getAttribute("rotation")}},restoreCameraPose:function(){var el=this.el;var savedPose=this.savedPose;var hasPositionalTracking=this.hasPositionalTracking!==undefined?this.hasPositionalTracking:checkHasPositionalTracking();if(!savedPose||!hasPositionalTracking){return}el.setAttribute("position",savedPose.position);el.setAttribute("rotation",savedPose.rotation);this.savedPose=null}})},{"../core/component":125,"../lib/three":173,"../utils/":196}],78:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");module.exports.Component=registerComponent("collada-model",{schema:{type:"asset"},init:function(){this.model=null;this.loader=new THREE.ColladaLoader;this.loader.options.convertUpAxis=true},update:function(){var self=this;var el=this.el;var src=this.data;if(!src){return}this.remove();this.loader.load(src,function(colladaModel){self.model=colladaModel.scene;el.setObject3D("mesh",self.model);el.emit("model-loaded",{format:"collada",model:self.model})})},remove:function(){if(!this.model){return}this.el.removeObject3D("mesh")}})},{"../core/component":125,"../lib/three":173}],79:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var utils=_dereq_("../utils/");var bind=utils.bind;var EVENTS={CLICK:"click",FUSING:"fusing",MOUSEENTER:"mouseenter",MOUSEDOWN:"mousedown",MOUSELEAVE:"mouseleave",MOUSEUP:"mouseup"};var STATES={FUSING:"cursor-fusing",HOVERING:"cursor-hovering",HOVERED:"cursor-hovered"};module.exports.Component=registerComponent("cursor",{dependencies:["raycaster"],schema:{downEvents:{"default":[]},fuse:{"default":utils.device.isMobile()},fuseTimeout:{"default":1500,min:0},upEvents:{"default":[]},rayOrigin:{"default":"entity",oneOf:["mouse","entity"]}},init:function(){this.fuseTimeout=undefined;this.cursorDownEl=null;this.intersection=null;this.intersectedEl=null;this.onCursorDown=bind(this.onCursorDown,this);this.onCursorUp=bind(this.onCursorUp,this);this.onIntersection=bind(this.onIntersection,this);this.onIntersectionCleared=bind(this.onIntersectionCleared,this);this.onMouseMove=bind(this.onMouseMove,this)},update:function(oldData){if(this.data.rayOrigin===oldData.rayOrigin){return}this.updateMouseEventListeners()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},remove:function(){var el=this.el;el.removeState(STATES.HOVERING);el.removeState(STATES.FUSING);clearTimeout(this.fuseTimeout);if(this.intersectedEl){this.intersectedEl.removeState(STATES.HOVERED)}this.removeEventListeners()},addEventListeners:function(){var canvas;var data=this.data;var el=this.el;var self=this;canvas=el.sceneEl.canvas;if(canvas){canvas.addEventListener("mousedown",this.onCursorDown);canvas.addEventListener("mouseup",this.onCursorUp)}else{el.sceneEl.addEventListener("render-target-loaded",function(){canvas=el.sceneEl.canvas;canvas.addEventListener("mousedown",self.onCursorDown);canvas.addEventListener("mouseup",self.onCursorUp)})}data.downEvents.forEach(function(downEvent){el.addEventListener(downEvent,self.onCursorDown)});data.upEvents.forEach(function(upEvent){el.addEventListener(upEvent,self.onCursorUp)});el.addEventListener("raycaster-intersection",this.onIntersection);el.addEventListener("raycaster-intersection-cleared",this.onIntersectionCleared)},removeEventListeners:function(){var canvas;var data=this.data;var el=this.el;var self=this;canvas=el.sceneEl.canvas;if(canvas){canvas.removeEventListener("mousedown",this.onCursorDown);canvas.removeEventListener("mouseup",this.onCursorUp)}data.downEvents.forEach(function(downEvent){el.removeEventListener(downEvent,self.onCursorDown)});data.upEvents.forEach(function(upEvent){el.removeEventListener(upEvent,self.onCursorUp)});el.removeEventListener("raycaster-intersection",this.onIntersection);el.removeEventListener("raycaster-intersection-cleared",this.onIntersectionCleared);window.removeEventListener("mousemove",this.onMouseMove)},updateMouseEventListeners:function(){var el=this.el;window.removeEventListener("mousemove",this.onMouseMove);el.setAttribute("raycaster","useWorldCoordinates",false);if(this.data.rayOrigin!=="mouse"){return}window.addEventListener("mousemove",this.onMouseMove,false);el.setAttribute("raycaster","useWorldCoordinates",true)},onMouseMove:function(){var mouse=new THREE.Vector2;var origin=new THREE.Vector3;var direction=new THREE.Vector3;var rayCasterConfig={origin:origin,direction:direction};return function(evt){var camera=this.el.sceneEl.camera;camera.parent.updateMatrixWorld();camera.updateMatrixWorld();mouse.x=evt.clientX/window.innerWidth*2-1;mouse.y=-(evt.clientY/window.innerHeight)*2+1;origin.setFromMatrixPosition(camera.matrixWorld);direction.set(mouse.x,mouse.y,.5).unproject(camera).sub(origin).normalize();this.el.setAttribute("raycaster",rayCasterConfig)}}(),onCursorDown:function(evt){this.twoWayEmit(EVENTS.MOUSEDOWN);this.cursorDownEl=this.intersectedEl},onCursorUp:function(evt){this.twoWayEmit(EVENTS.MOUSEUP);if(this.cursorDownEl&&this.cursorDownEl!==this.intersectedEl){this.cursorDownEl.emit(EVENTS.MOUSEUP,{cursorEl:this.el,intersection:null})}if(!this.data.fuse&&this.intersectedEl&&this.cursorDownEl===this.intersectedEl){this.twoWayEmit(EVENTS.CLICK)}this.cursorDownEl=null},onIntersection:function(evt){var self=this;var cursorEl=this.el;var data=this.data;var index;var intersectedEl;var intersection;index=evt.detail.els[0]===cursorEl?1:0;intersection=evt.detail.intersections[index];intersectedEl=evt.detail.els[index];if(!intersectedEl){return}if(this.intersectedEl===intersectedEl){this.intersection=intersection;return}if(this.intersectedEl){this.clearCurrentIntersection()}this.intersection=intersection;this.intersectedEl=intersectedEl;cursorEl.addState(STATES.HOVERING);intersectedEl.addState(STATES.HOVERED);self.twoWayEmit(EVENTS.MOUSEENTER);if(data.fuseTimeout===0||!data.fuse){return}cursorEl.addState(STATES.FUSING);this.twoWayEmit(EVENTS.FUSING);this.fuseTimeout=setTimeout(function fuse(){cursorEl.removeState(STATES.FUSING);self.twoWayEmit(EVENTS.CLICK)},data.fuseTimeout)},onIntersectionCleared:function(evt){var cursorEl=this.el;var intersectedEl=evt.detail.el;if(cursorEl===intersectedEl){return}if(intersectedEl!==this.intersectedEl){return}this.clearCurrentIntersection()},clearCurrentIntersection:function(){var cursorEl=this.el;this.intersectedEl.removeState(STATES.HOVERED);cursorEl.removeState(STATES.HOVERING);cursorEl.removeState(STATES.FUSING);this.twoWayEmit(EVENTS.MOUSELEAVE);this.intersection=null;this.intersectedEl=null;clearTimeout(this.fuseTimeout)},twoWayEmit:function(evtName){var el=this.el;var intersectedEl=this.intersectedEl;var intersection=this.intersection;el.emit(evtName,{intersectedEl:intersectedEl,intersection:intersection});if(!intersectedEl){return}intersectedEl.emit(evtName,{cursorEl:el,intersection:intersection})}})},{"../core/component":125,"../utils/":196}],80:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var bind=_dereq_("../utils/bind");var checkControllerPresentAndSetup=_dereq_("../utils/tracked-controls").checkControllerPresentAndSetup;var emitIfAxesChanged=_dereq_("../utils/tracked-controls").emitIfAxesChanged;var DAYDREAM_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/google/";var DAYDREAM_CONTROLLER_MODEL_OBJ_URL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.obj";var DAYDREAM_CONTROLLER_MODEL_OBJ_MTL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.mtl";var GAMEPAD_ID_PREFIX="Daydream Controller";module.exports.Component=registerComponent("daydream-controls",{schema:{hand:{"default":""},buttonColor:{type:"color","default":"#000000"},buttonTouchedColor:{type:"color","default":"#777777"},buttonHighlightColor:{type:"color","default":"#FFFFFF"},model:{"default":true},rotationOffset:{"default":0},armModel:{"default":true}},mapping:{axes:{trackpad:[0,1]},buttons:["trackpad","menu","system"]},axisLabels:["x","y","z","w"],bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this);this.onControllersUpdate=bind(this.onControllersUpdate,this);this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this);this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this);this.onAxisMoved=bind(this.onAxisMoved,this);this.onGamepadConnectionEvent=bind(this.onGamepadConnectionEvent,this)},init:function(){var self=this;this.animationActive="pointing";this.onButtonChanged=bind(this.onButtonChanged,this);this.onButtonDown=function(evt){self.onButtonEvent(evt.detail.id,"down")};this.onButtonUp=function(evt){self.onButtonEvent(evt.detail.id,"up")};this.onButtonTouchStart=function(evt){self.onButtonEvent(evt.detail.id,"touchstart")};this.onButtonTouchEnd=function(evt){self.onButtonEvent(evt.detail.id,"touchend")};this.onAxisMoved=bind(this.onAxisMoved,this);this.controllerPresent=false;this.everGotGamepadEvent=false;this.lastControllerCheck=0;this.bindMethods();this.checkControllerPresentAndSetup=checkControllerPresentAndSetup;this.emitIfAxesChanged=emitIfAxesChanged},addEventListeners:function(){var el=this.el;el.addEventListener("buttonchanged",this.onButtonChanged);el.addEventListener("buttondown",this.onButtonDown);el.addEventListener("buttonup",this.onButtonUp);el.addEventListener("touchstart",this.onButtonTouchStart);el.addEventListener("touchend",this.onButtonTouchEnd);el.addEventListener("model-loaded",this.onModelLoaded);el.addEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=true},removeEventListeners:function(){var el=this.el;el.removeEventListener("buttonchanged",this.onButtonChanged);el.removeEventListener("buttondown",this.onButtonDown);el.removeEventListener("buttonup",this.onButtonUp);el.removeEventListener("touchstart",this.onButtonTouchStart);el.removeEventListener("touchend",this.onButtonTouchEnd);el.removeEventListener("model-loaded",this.onModelLoaded);el.removeEventListener("axismove",this.onAxisMoved);this.controllerEventsActive=false},checkIfControllerPresent:function(){this.checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:this.data.hand})},onGamepadConnectionEvent:function(evt){this.everGotGamepadEvent=true;this.checkIfControllerPresent()},play:function(){this.checkIfControllerPresent();this.addControllersUpdateListener();window.addEventListener("gamepadconnected",this.onGamepadConnectionEvent,false);window.addEventListener("gamepaddisconnected",this.onGamepadConnectionEvent,false)},pause:function(){this.removeEventListeners();this.removeControllersUpdateListener();window.removeEventListener("gamepadconnected",this.onGamepadConnectionEvent,false);window.removeEventListener("gamepaddisconnected",this.onGamepadConnectionEvent,false)},injectTrackedControls:function(){var el=this.el;var data=this.data;el.setAttribute("tracked-controls",{idPrefix:GAMEPAD_ID_PREFIX,hand:data.hand,rotationOffset:data.rotationOffset,armModel:data.armModel});if(!this.data.model){return}this.el.setAttribute("obj-model",{obj:DAYDREAM_CONTROLLER_MODEL_OBJ_URL,mtl:DAYDREAM_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,false)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,false)},onControllersUpdate:function(){if(!this.everGotGamepadEvent){this.checkIfControllerPresent()}},onModelLoaded:function(evt){var controllerObject3D=evt.detail.model;var buttonMeshes;if(!this.data.model){return}buttonMeshes=this.buttonMeshes={};buttonMeshes.menu=controllerObject3D.getObjectByName("AppButton_AppButton_Cylinder.004");buttonMeshes.system=controllerObject3D.getObjectByName("HomeButton_HomeButton_Cylinder.005");buttonMeshes.trackpad=controllerObject3D.getObjectByName("TouchPad_TouchPad_Cylinder.003");controllerObject3D.position.set(0,0,-.04)},onAxisMoved:function(evt){this.emitIfAxesChanged(this,this.mapping.axes,evt)},onButtonChanged:function(evt){var button=this.mapping.buttons[evt.detail.id];if(!button)return;this.el.emit(button+"changed",evt.detail.state)},onButtonEvent:function(id,evtName){var buttonName=this.mapping.buttons[id];var i;if(Array.isArray(buttonName)){for(i=0;i20){object3D.lookAt(cameraWorldPosition)}else{cameraPortalOrientation=this.calculateCameraPortalOrientation();if(distance<.5){if(this.semiSphereEl.getAttribute("visible")===true){return}textEl.setAttribute("text","width",1.5);if(cameraPortalOrientation<=0){textEl.setAttribute("position","0 0 0.75");textEl.setAttribute("rotation","0 180 0");this.semiSphereEl.setAttribute("rotation","0 0 0")}else{textEl.setAttribute("position","0 0 -0.75");textEl.setAttribute("rotation","0 0 0");this.semiSphereEl.setAttribute("rotation","0 180 0")}el.getObject3D("mesh").visible=false;this.semiSphereEl.setAttribute("visible",true);this.peekCameraPortalOrientation=cameraPortalOrientation}else{if(cameraPortalOrientation<=0){textEl.setAttribute("rotation","0 180 0")}else{textEl.setAttribute("rotation","0 0 0")}textEl.setAttribute("text","width",5);textEl.setAttribute("position","0 1.5 0");el.getObject3D("mesh").visible=true;this.semiSphereEl.setAttribute("visible",false);this.peekCameraPortalOrientation=undefined}if(this.previousQuaternion){object3D.quaternion.copy(this.previousQuaternion);this.previousQuaternion=undefined}}}}(),hideAll:function(){var el=this.el;var hiddenEls=this.hiddenEls;var self=this;if(hiddenEls.length>0){return}el.sceneEl.object3D.traverse(function(object){if(object&&object.el&&object.el.hasAttribute("link-controls")){return}if(!object.el||object===el.sceneEl.object3D||object.el===el||object.el===self.sphereEl||object.el===el.sceneEl.cameraEl||object.el.getAttribute("visible")===false||object.el===self.textEl||object.el===self.semiSphereEl){return}object.el.setAttribute("visible",false);hiddenEls.push(object.el)})},showAll:function(){this.hiddenEls.forEach(function(el){el.setAttribute("visible",true)});this.hiddenEls=[]},calculateCameraPortalOrientation:function(){var mat4=new THREE.Matrix4;var cameraPosition=new THREE.Vector3;var portalNormal=new THREE.Vector3(0,0,1);var portalPosition=new THREE.Vector3(0,0,0);return function(){var el=this.el;var camera=el.sceneEl.camera;cameraPosition.set(0,0,0);portalNormal.set(0,0,1);portalPosition.set(0,0,0);el.object3D.matrixWorld.extractRotation(mat4);portalNormal.applyMatrix4(mat4);el.object3D.updateMatrixWorld();el.object3D.localToWorld(portalPosition);camera.parent.parent.updateMatrixWorld();camera.parent.updateMatrixWorld();camera.updateMatrixWorld();camera.localToWorld(cameraPosition);cameraPosition.sub(portalPosition).normalize();portalNormal.normalize();return Math.sign(portalNormal.dot(cameraPosition)); }}(),remove:function(){this.removeEventListener()}});registerShader("portal",{schema:{pano:{type:"map",is:"uniform"},borderEnabled:{"default":1,type:"int",is:"uniform"},strokeColor:{"default":"white",type:"color",is:"uniform"}},vertexShader:["vec3 portalPosition;","varying vec3 vWorldPosition;","varying float vDistanceToCenter;","varying float vDistance;","void main() {","vDistanceToCenter = clamp(length(position - vec3(0.0, 0.0, 0.0)), 0.0, 1.0);","portalPosition = (modelMatrix * vec4(0.0, 0.0, 0.0, 1.0)).xyz;","vDistance = length(portalPosition - cameraPosition);","vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;","gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),fragmentShader:["#define RECIPROCAL_PI2 0.15915494","uniform sampler2D pano;","uniform vec3 strokeColor;","uniform float borderEnabled;","varying float vDistanceToCenter;","varying float vDistance;","varying vec3 vWorldPosition;","void main() {","vec3 direction = normalize(vWorldPosition - cameraPosition);","vec2 sampleUV;","float borderThickness = clamp(exp(-vDistance / 50.0), 0.6, 0.95);","sampleUV.y = saturate(direction.y * 0.5 + 0.5);","sampleUV.x = atan(direction.z, direction.x) * -RECIPROCAL_PI2 + 0.5;","if (vDistanceToCenter > borderThickness && borderEnabled == 1.0) {","gl_FragColor = vec4(strokeColor, 1.0);","} else {","gl_FragColor = mix(texture2D(pano, sampleUV), vec4(0.93, 0.17, 0.36, 1.0), clamp(pow((vDistance / 15.0), 2.0), 0.0, 1.0));","}","}"].join("\n")})},{"../core/component":125,"../core/shader":134,"../lib/three":173}],90:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var bind=_dereq_("../utils/bind");var GRABBING_CLASS="a-grabbing";var PI_2=Math.PI/2;var radToDeg=THREE.Math.radToDeg;module.exports.Component=registerComponent("look-controls",{dependencies:["position","rotation"],schema:{enabled:{"default":true},hmdEnabled:{"default":true},reverseMouseDrag:{"default":false},standing:{"default":true}},init:function(){var sceneEl=this.el.sceneEl;this.previousHMDPosition=new THREE.Vector3;this.hmdQuaternion=new THREE.Quaternion;this.hmdEuler=new THREE.Euler;this.setupMouseControls();this.setupHMDControls();this.bindMethods();sceneEl.addEventListener("exit-vr",this.onExitVR)},update:function(oldData){var data=this.data;if(data.enabled!==oldData.enabled){this.updateGrabCursor(data.enabled)}if(oldData&&!data.hmdEnabled&&!oldData.hmdEnabled){this.pitchObject.rotation.set(0,0,0);this.yawObject.rotation.set(0,0,0)}},tick:function(t){var data=this.data;if(!data.enabled){return}this.controls.standing=data.standing;this.controls.update();this.updateOrientation();this.updatePosition()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},remove:function(){this.removeEventListeners()},bindMethods:function(){this.onMouseDown=bind(this.onMouseDown,this);this.onMouseMove=bind(this.onMouseMove,this);this.onMouseUp=bind(this.onMouseUp,this);this.onTouchStart=bind(this.onTouchStart,this);this.onTouchMove=bind(this.onTouchMove,this);this.onTouchEnd=bind(this.onTouchEnd,this);this.onExitVR=bind(this.onExitVR,this)},setupMouseControls:function(){this.mouseDown=false;this.pitchObject=new THREE.Object3D;this.yawObject=new THREE.Object3D;this.yawObject.position.y=10;this.yawObject.add(this.pitchObject)},setupHMDControls:function(){this.dolly=new THREE.Object3D;this.euler=new THREE.Euler;this.controls=new THREE.VRControls(this.dolly);this.controls.userHeight=0},addEventListeners:function(){var sceneEl=this.el.sceneEl;var canvasEl=sceneEl.canvas;if(!canvasEl){sceneEl.addEventListener("render-target-loaded",bind(this.addEventListeners,this));return}canvasEl.addEventListener("mousedown",this.onMouseDown,false);window.addEventListener("mousemove",this.onMouseMove,false);window.addEventListener("mouseup",this.onMouseUp,false);canvasEl.addEventListener("touchstart",this.onTouchStart);window.addEventListener("touchmove",this.onTouchMove);window.addEventListener("touchend",this.onTouchEnd)},removeEventListeners:function(){var sceneEl=this.el.sceneEl;var canvasEl=sceneEl&&sceneEl.canvas;if(!canvasEl){return}canvasEl.removeEventListener("mousedown",this.onMouseDown);canvasEl.removeEventListener("mousemove",this.onMouseMove);canvasEl.removeEventListener("mouseup",this.onMouseUp);canvasEl.removeEventListener("mouseout",this.onMouseUp);canvasEl.removeEventListener("touchstart",this.onTouchStart);canvasEl.removeEventListener("touchmove",this.onTouchMove);canvasEl.removeEventListener("touchend",this.onTouchEnd)},updateOrientation:function(){var currentRotation;var deltaRotation;var hmdEuler=this.hmdEuler;var hmdQuaternion=this.hmdQuaternion;var pitchObject=this.pitchObject;var yawObject=this.yawObject;var sceneEl=this.el.sceneEl;var rotation;hmdQuaternion=hmdQuaternion.copy(this.dolly.quaternion);hmdEuler.setFromQuaternion(hmdQuaternion,"YXZ");if(sceneEl.isMobile){rotation={x:radToDeg(hmdEuler.x)+radToDeg(pitchObject.rotation.x),y:radToDeg(hmdEuler.y)+radToDeg(yawObject.rotation.y),z:radToDeg(hmdEuler.z)}}else if(!sceneEl.is("vr-mode")||isNullVector(hmdEuler)||!this.data.hmdEnabled){currentRotation=this.el.getAttribute("rotation");deltaRotation=this.calculateDeltaRotation();if(this.data.reverseMouseDrag){rotation={x:currentRotation.x-deltaRotation.x,y:currentRotation.y-deltaRotation.y,z:currentRotation.z}}else{rotation={x:currentRotation.x+deltaRotation.x,y:currentRotation.y+deltaRotation.y,z:currentRotation.z}}}else{rotation={x:radToDeg(hmdEuler.x),y:radToDeg(hmdEuler.y),z:radToDeg(hmdEuler.z)}}this.el.setAttribute("rotation",rotation)},calculateDeltaRotation:function(){var currentRotationX=radToDeg(this.pitchObject.rotation.x);var currentRotationY=radToDeg(this.yawObject.rotation.y);var deltaRotation;deltaRotation={x:currentRotationX-(this.previousRotationX||0),y:currentRotationY-(this.previousRotationY||0)};this.previousRotationX=currentRotationX;this.previousRotationY=currentRotationY;return deltaRotation},updatePosition:function(){var deltaHMDPosition=new THREE.Vector3;return function(){var el=this.el;var currentPosition=el.getAttribute("position");var currentHMDPosition;var previousHMDPosition=this.previousHMDPosition;var sceneEl=this.el.sceneEl;if(!sceneEl.is("vr-mode")){return}currentHMDPosition=this.calculateHMDPosition();deltaHMDPosition.copy(currentHMDPosition).sub(previousHMDPosition);if(isNullVector(deltaHMDPosition)){return}previousHMDPosition.copy(currentHMDPosition);el.setAttribute("position",{x:currentPosition.x+deltaHMDPosition.x,y:currentPosition.y+deltaHMDPosition.y,z:currentPosition.z+deltaHMDPosition.z})}}(),calculateHMDPosition:function(){var position=new THREE.Vector3;return function(){this.dolly.updateMatrix();position.setFromMatrixPosition(this.dolly.matrix);return position}}(),onMouseMove:function(event){var pitchObject=this.pitchObject;var yawObject=this.yawObject;var previousMouseEvent=this.previousMouseEvent;var movementX;var movementY;if(!this.mouseDown||!this.data.enabled){return}movementX=event.movementX||event.mozMovementX;movementY=event.movementY||event.mozMovementY;if(movementX===undefined||movementY===undefined){movementX=event.screenX-previousMouseEvent.screenX;movementY=event.screenY-previousMouseEvent.screenY}this.previousMouseEvent=event;yawObject.rotation.y-=movementX*.002;pitchObject.rotation.x-=movementY*.002;pitchObject.rotation.x=Math.max(-PI_2,Math.min(PI_2,pitchObject.rotation.x))},onMouseDown:function(evt){if(!this.data.enabled){return}if(evt.button!==0){return}this.mouseDown=true;this.previousMouseEvent=evt;document.body.classList.add(GRABBING_CLASS)},onMouseUp:function(){this.mouseDown=false;document.body.classList.remove(GRABBING_CLASS)},onTouchStart:function(evt){if(evt.touches.length!==1){return}this.touchStart={x:evt.touches[0].pageX,y:evt.touches[0].pageY};this.touchStarted=true},onTouchMove:function(evt){var canvas=this.el.sceneEl.canvas;var deltaY;var yawObject=this.yawObject;if(!this.touchStarted){return}deltaY=2*Math.PI*(evt.touches[0].pageX-this.touchStart.x)/canvas.clientWidth;yawObject.rotation.y-=deltaY*.5;this.touchStart={x:evt.touches[0].pageX,y:evt.touches[0].pageY}},onTouchEnd:function(){this.touchStarted=false},onExitVR:function(){this.previousHMDPosition.set(0,0,0)},updateGrabCursor:function(enabled){var sceneEl=this.el.sceneEl;function enableGrabCursor(){sceneEl.canvas.classList.add("a-grab-cursor")}function disableGrabCursor(){sceneEl.canvas.classList.remove("a-grab-cursor")}if(!sceneEl.canvas){if(enabled){sceneEl.addEventListener("render-target-loaded",enableGrabCursor)}else{sceneEl.addEventListener("render-target-loaded",disableGrabCursor)}return}if(enabled){enableGrabCursor();return}disableGrabCursor()}});function isNullVector(vector){return vector.x===0&&vector.y===0&&vector.z===0}},{"../core/component":125,"../lib/three":173,"../utils/bind":190}],91:[function(_dereq_,module,exports){var utils=_dereq_("../utils/");var component=_dereq_("../core/component");var THREE=_dereq_("../lib/three");var shader=_dereq_("../core/shader");var error=utils.debug("components:material:error");var registerComponent=component.registerComponent;var shaders=shader.shaders;var shaderNames=shader.shaderNames;module.exports.Component=registerComponent("material",{schema:{alphaTest:{"default":0,min:0,max:1},depthTest:{"default":true},depthWrite:{"default":true},flatShading:{"default":false},npot:{"default":false},offset:{type:"vec2","default":{x:0,y:0}},opacity:{"default":1,min:0,max:1},repeat:{type:"vec2","default":{x:1,y:1}},shader:{"default":"standard",oneOf:shaderNames},side:{"default":"front",oneOf:["front","back","double"]},transparent:{"default":false},vertexColors:{type:"string","default":"none",oneOf:["face","vertex"]},visible:{"default":true}},init:function(){this.material=null},update:function(oldData){var data=this.data;if(!this.shader||data.shader!==oldData.shader){this.updateShader(data.shader)}this.shader.update(this.data);this.updateMaterial(oldData)},updateSchema:function(data){var newShader=data.shader;var currentShader=this.data&&this.data.shader;var shader=newShader||currentShader;var schema=shaders[shader]&&shaders[shader].schema;if(!schema){error("Unknown shader schema "+shader)}if(currentShader&&newShader===currentShader){return}this.extendSchema(schema);this.updateBehavior()},updateBehavior:function(){var schema=this.schema;var self=this;var sceneEl=this.el.sceneEl;var tickProperties={};var tick=function(time,delta){Object.keys(tickProperties).forEach(function update(key){tickProperties[key]=time});self.shader.update(tickProperties)};this.tick=undefined;Object.keys(schema).forEach(function(key){if(schema[key].type==="time"){self.tick=tick;tickProperties[key]=true}});if(!sceneEl){return}if(!this.tick){sceneEl.removeBehavior(this)}else{sceneEl.addBehavior(this)}},updateShader:function(shaderName){var data=this.data;var Shader=shaders[shaderName]&&shaders[shaderName].Shader;var shaderInstance;if(!Shader){throw new Error("Unknown shader "+shaderName)}shaderInstance=this.shader=new Shader;shaderInstance.el=this.el;shaderInstance.init(data);this.setMaterial(shaderInstance.material);this.updateSchema(data)},updateMaterial:function(oldData){var data=this.data;var material=this.material;material.alphaTest=data.alphaTest;material.depthTest=data.depthTest!==false;material.depthWrite=data.depthWrite!==false;material.opacity=data.opacity;material.shading=data.flatShading?THREE.FlatShading:THREE.SmoothShading;material.side=parseSide(data.side);material.transparent=data.transparent!==false||data.opacity<1;material.vertexColors=parseVertexColors(data.vertexColors);material.visible=data.visible;if(Object.keys(oldData).length&&(oldData.alphaTest!==data.alphaTest||oldData.side!==data.side||oldData.vertexColors!==data.vertexColors)){material.needsUpdate=true}},remove:function(){var defaultMaterial=new THREE.MeshBasicMaterial;var material=this.material;var object3D=this.el.getObject3D("mesh");if(object3D){object3D.material=defaultMaterial}disposeMaterial(material,this.system)},setMaterial:function(material){var mesh=this.el.getOrCreateObject3D("mesh",THREE.Mesh);var system=this.system;if(this.material){disposeMaterial(this.material,system)}this.material=mesh.material=material;system.registerMaterial(material)}});function parseSide(side){switch(side){case"back":{return THREE.BackSide}case"double":{return THREE.DoubleSide}default:{return THREE.FrontSide}}}function parseVertexColors(coloring){switch(coloring){case"face":{return THREE.FaceColors}case"vertex":{return THREE.VertexColors}default:{return THREE.NoColors}}}function disposeMaterial(material,system){material.dispose();system.unregisterMaterial(material)}},{"../core/component":125,"../core/shader":134,"../lib/three":173,"../utils/":196}],92:[function(_dereq_,module,exports){var debug=_dereq_("../utils/debug");var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var warn=debug("components:obj-model:warn");module.exports.Component=registerComponent("obj-model",{schema:{mtl:{type:"model"},obj:{type:"model"}},init:function(){this.model=null;this.objLoader=new THREE.OBJLoader;this.mtlLoader=new THREE.MTLLoader(this.objLoader.manager);this.mtlLoader.crossOrigin=""},update:function(){var data=this.data;if(!data.obj){return}this.remove();this.loadObj(data.obj,data.mtl)},remove:function(){if(!this.model){return}this.el.removeObject3D("mesh")},loadObj:function(objUrl,mtlUrl){var self=this;var el=this.el;var mtlLoader=this.mtlLoader;var objLoader=this.objLoader;if(mtlUrl){if(el.hasAttribute("material")){warn("Material component properties are ignored when a .MTL is provided")}mtlLoader.setTexturePath(mtlUrl.substr(0,mtlUrl.lastIndexOf("/")+1));mtlLoader.load(mtlUrl,function(materials){materials.preload();objLoader.setMaterials(materials);objLoader.load(objUrl,function(objModel){self.model=objModel;el.setObject3D("mesh",objModel);el.emit("model-loaded",{format:"obj",model:objModel})})});return}objLoader.load(objUrl,function loadObjOnly(objModel){var material=el.components.material;if(material){objModel.traverse(function(child){if(child instanceof THREE.Mesh){child.material=material.material}})}self.model=objModel;el.setObject3D("mesh",objModel);el.emit("model-loaded",{format:"obj",model:objModel})})}})},{"../core/component":125,"../lib/three":173,"../utils/debug":192}],93:[function(_dereq_,module,exports){var bind=_dereq_("../utils/bind");var registerComponent=_dereq_("../core/component").registerComponent;var controllerUtils=_dereq_("../utils/tracked-controls");var TOUCH_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/oculus/oculus-touch-controller-";var TOUCH_CONTROLLER_MODEL_OBJ_URL_L=TOUCH_CONTROLLER_MODEL_BASE_URL+"left.obj";var TOUCH_CONTROLLER_MODEL_OBJ_MTL_L=TOUCH_CONTROLLER_MODEL_BASE_URL+"left.mtl";var TOUCH_CONTROLLER_MODEL_OBJ_URL_R=TOUCH_CONTROLLER_MODEL_BASE_URL+"right.obj";var TOUCH_CONTROLLER_MODEL_OBJ_MTL_R=TOUCH_CONTROLLER_MODEL_BASE_URL+"right.mtl";var GAMEPAD_ID_PREFIX="Oculus Touch";var PIVOT_OFFSET={x:0,y:-.015,z:.04};module.exports.Component=registerComponent("oculus-touch-controls",{schema:{hand:{"default":"left"},buttonColor:{type:"color","default":"#999"},buttonTouchColor:{type:"color","default":"#8AB"},buttonHighlightColor:{type:"color","default":"#2DF"},model:{"default":true},rotationOffset:{"default":0}},mapping:{left:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","xbutton","ybutton","surface"]},right:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","abutton","bbutton","surface"]}},axisLabels:["x","y","z","w"],bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this);this.onControllersUpdate=bind(this.onControllersUpdate,this);this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this);this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var self=this;this.onButtonChanged=bind(this.onButtonChanged,this);this.onButtonDown=function(evt){self.onButtonEvent(evt.detail.id,"down")};this.onButtonUp=function(evt){self.onButtonEvent(evt.detail.id,"up")};this.onButtonTouchStart=function(evt){self.onButtonEvent(evt.detail.id,"touchstart")};this.onButtonTouchEnd=function(evt){self.onButtonEvent(evt.detail.id,"touchend")};this.controllerPresent=false;this.lastControllerCheck=0;this.previousButtonValues={};this.bindMethods();this.emitIfAxesChanged=controllerUtils.emitIfAxesChanged;this.checkControllerPresentAndSetup=controllerUtils.checkControllerPresentAndSetup},addEventListeners:function(){var el=this.el;el.addEventListener("buttonchanged",this.onButtonChanged);el.addEventListener("buttondown",this.onButtonDown);el.addEventListener("buttonup",this.onButtonUp);el.addEventListener("touchstart",this.onButtonTouchStart);el.addEventListener("touchend",this.onButtonTouchEnd);el.addEventListener("axismove",this.onAxisMoved);el.addEventListener("model-loaded",this.onModelLoaded);this.controllerEventsActive=true},removeEventListeners:function(){var el=this.el;el.removeEventListener("buttonchanged",this.onButtonChanged);el.removeEventListener("buttondown",this.onButtonDown);el.removeEventListener("buttonup",this.onButtonUp);el.removeEventListener("touchstart",this.onButtonTouchStart);el.removeEventListener("touchend",this.onButtonTouchEnd);el.removeEventListener("axismove",this.onAxisMoved);el.removeEventListener("model-loaded",this.onModelLoaded);this.controllerEventsActive=false},checkIfControllerPresent:function(){this.checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:this.data.hand})},play:function(){this.checkIfControllerPresent();this.addControllersUpdateListener();window.addEventListener("gamepaddisconnected",this.checkIfControllerPresent,false)},pause:function(){this.removeEventListeners();this.removeControllersUpdateListener();window.removeEventListener("gamepaddisconnected",this.checkIfControllerPresent,false)},updateControllerModel:function(){var objUrl,mtlUrl;if(!this.data.model){return}if(this.data.hand==="right"){objUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_URL_R+")";mtlUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_MTL_R+")"}else{objUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_URL_L+")";mtlUrl="url("+TOUCH_CONTROLLER_MODEL_OBJ_MTL_L+")"}this.el.setAttribute("obj-model",{obj:objUrl,mtl:mtlUrl})},injectTrackedControls:function(){var data=this.data;var offset=data.hand==="right"?-90:90;this.el.setAttribute("tracked-controls",{id:data.hand==="right"?"Oculus Touch (Right)":"Oculus Touch (Left)",controller:0,rotationOffset:data.rotationOffset!==-999?data.rotationOffset:offset});this.updateControllerModel()},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,false)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,false)},onControllersUpdate:function(){this.checkIfControllerPresent()},onButtonChanged:function(evt){var button=this.mapping[this.data.hand].buttons[evt.detail.id];var buttonMeshes=this.buttonMeshes;var analogValue;if(!button){return}if(button==="trigger"||button==="grip"){analogValue=evt.detail.state.value}if(buttonMeshes){if(button==="trigger"&&buttonMeshes.trigger){buttonMeshes.trigger.rotation.x=-analogValue*(Math.PI/24)}if(button==="grip"&&buttonMeshes.grip){buttonMeshes.grip.rotation.y=(this.data.hand==="left"?-1:1)*analogValue*(Math.PI/60)}}this.el.emit(button+"changed",evt.detail.state)},onModelLoaded:function(evt){var controllerObject3D=evt.detail.model;var buttonMeshes;if(!this.data.model){return}var leftHand=this.data.hand==="left";buttonMeshes=this.buttonMeshes={};buttonMeshes.grip=controllerObject3D.getObjectByName(leftHand?"buttonHand_oculus-touch-controller-left.004":"buttonHand_oculus-touch-controller-right.005");buttonMeshes.thumbstick=controllerObject3D.getObjectByName(leftHand?"stick_oculus-touch-controller-left.007":"stick_oculus-touch-controller-right.004");buttonMeshes.trigger=controllerObject3D.getObjectByName(leftHand?"buttonTrigger_oculus-touch-controller-left.005":"buttonTrigger_oculus-touch-controller-right.006");buttonMeshes.xbutton=controllerObject3D.getObjectByName("buttonX_oculus-touch-controller-left.002");buttonMeshes.abutton=controllerObject3D.getObjectByName("buttonA_oculus-touch-controller-right.002");buttonMeshes.ybutton=controllerObject3D.getObjectByName("buttonY_oculus-touch-controller-left.001");buttonMeshes.bbutton=controllerObject3D.getObjectByName("buttonB_oculus-touch-controller-right.003");controllerObject3D.position=PIVOT_OFFSET},onButtonEvent:function(id,evtName){var buttonName=this.mapping[this.data.hand].buttons[id];var i;if(Array.isArray(buttonName)){for(i=0;i");return}if(!fog||data.type!==fog.name){el.object3D.fog=getFog(data);el.systems.material.updateMaterials();return}Object.keys(this.schema).forEach(function(key){var value=data[key];if(key==="color"){value=new THREE.Color(value)}fog[key]=value})},remove:function(){var fog=this.el.object3D.fog;if(!fog){return}fog.far=0;fog.near=.1}});function getFog(data){var fog;if(data.type==="exponential"){fog=new THREE.FogExp2(data.color,data.density)}else{fog=new THREE.Fog(data.color,data.near,data.far)}fog.name=data.type;return fog}},{"../../core/component":125,"../../lib/three":173,"../../utils/debug":192}],102:[function(_dereq_,module,exports){(function(process){var AFRAME_INJECTED=_dereq_("../../constants").AFRAME_INJECTED;var bind=_dereq_("../../utils/bind");var pkg=_dereq_("../../../package");var registerComponent=_dereq_("../../core/component").registerComponent;function getFuzzyPatchVersion(version){var split=version.split(".");split[2]="x";return split.join(".")}var INSPECTOR_DEV_URL="https://aframe.io/aframe-inspector/dist/aframe-inspector.js";var INSPECTOR_RELEASE_URL="https://unpkg.com/aframe-inspector@"+getFuzzyPatchVersion(pkg.version)+"/dist/aframe-inspector.min.js";var INSPECTOR_URL=process.env.INSPECTOR_VERSION==="dev"?INSPECTOR_DEV_URL:INSPECTOR_RELEASE_URL;var LOADING_MESSAGE="Loading Inspector";var LOADING_ERROR_MESSAGE="Error loading Inspector";module.exports.Component=registerComponent("inspector",{schema:{url:{"default":INSPECTOR_URL}},init:function(){this.onKeydown=bind(this.onKeydown,this);this.onMessage=bind(this.onMessage,this);this.initOverlay(); window.addEventListener("keydown",this.onKeydown);window.addEventListener("message",this.onMessage)},initOverlay:function(){var dotsHTML='...';this.loadingMessageEl=document.createElement("div");this.loadingMessageEl.classList.add("a-inspector-loader");this.loadingMessageEl.innerHTML=LOADING_MESSAGE+dotsHTML},remove:function(){this.removeEventListeners()},onKeydown:function(evt){var shortcutPressed=evt.keyCode===73&&evt.ctrlKey&&evt.altKey;if(!this.data||!shortcutPressed){return}this.injectInspector()},showLoader:function(){document.body.appendChild(this.loadingMessageEl)},hideLoader:function(){document.body.removeChild(this.loadingMessageEl)},onMessage:function(evt){if(evt.data==="INJECT_AFRAME_INSPECTOR"){this.injectInspector()}},injectInspector:function(){var self=this;var script;if(AFRAME.INSPECTOR||AFRAME.inspectorInjected){return}this.showLoader();script=document.createElement("script");script.src=this.data.url;script.setAttribute("data-name","aframe-inspector");script.setAttribute(AFRAME_INJECTED,"");script.onload=function(){AFRAME.INSPECTOR.open();self.hideLoader();self.removeEventListeners()};script.onerror=function(){self.loadingMessageEl.innerHTML=LOADING_ERROR_MESSAGE};document.head.appendChild(script);AFRAME.inspectorInjected=true},removeEventListeners:function(){window.removeEventListener("keydown",this.onKeydown);window.removeEventListener("message",this.onMessage)}})}).call(this,_dereq_("_process"))},{"../../../package":76,"../../constants":116,"../../core/component":125,"../../utils/bind":190,_process:6}],103:[function(_dereq_,module,exports){var registerComponent=_dereq_("../../core/component").registerComponent;var shouldCaptureKeyEvent=_dereq_("../../utils/").shouldCaptureKeyEvent;module.exports.Component=registerComponent("keyboard-shortcuts",{schema:{enterVR:{"default":true},exitVR:{"default":true}},init:function(){var self=this;var scene=this.el;this.listener=window.addEventListener("keyup",function(event){if(!shouldCaptureKeyEvent(event)){return}if(self.enterVREnabled&&event.keyCode===70){scene.enterVR()}if(self.enterVREnabled&&event.keyCode===27){scene.exitVR()}},false)},update:function(oldData){var data=this.data;this.enterVREnabled=data.enterVR},remove:function(){window.removeEventListener("keyup",this.listener)}})},{"../../core/component":125,"../../utils/":196}],104:[function(_dereq_,module,exports){var debug=_dereq_("../../utils/debug");var registerComponent=_dereq_("../../core/component").registerComponent;var warn=debug("components:pool:warn");module.exports.Component=registerComponent("pool",{schema:{mixin:{"default":""},size:{"default":0},dynamic:{"default":false}},multiple:true,initPool:function(){var i;var mixin=this.data.mixin;if(!mixin){return}this.availableEls=[];this.usedEls=[];for(i=0;i0){this.stopSound();el.removeObject3D("sound")}var listener=this.listener=sceneEl.audioListener||new THREE.AudioListener;sceneEl.audioListener=listener;if(sceneEl.camera){sceneEl.camera.add(listener)}sceneEl.addEventListener("camera-set-active",function(evt){evt.detail.cameraEl.getObject3D("camera").add(listener)});this.pool=new THREE.Group;for(var i=0;i=0){shaderName="msdf"}else if(data.font in FONTS&&MSDF_FONTS.indexOf(data.font)===-1){shaderName="sdf"}hasChangedShader=(this.shaderObject&&this.shaderObject.name)!==shaderName;shaderData={alphaTest:data.alphaTest,color:data.color,map:this.texture,opacity:data.opacity,side:parseSide(data.side),transparent:data.transparent};if(!hasChangedShader){this.shaderObject.update(shaderData);material.transparent=shaderData.transparent;updateBaseMaterial(material,shaderData);return}NewShader=createShader(this.el,shaderName,shaderData);this.material=NewShader.material;this.shaderObject=NewShader.shader;updateBaseMaterial(this.material,shaderData);if(this.mesh){this.mesh.material=this.material}},updateFont:function(){var data=this.data;var el=this.el;var fontSrc;var geometry=this.geometry;var self=this;if(!data.font){warn("No font specified. Using the default font.")}this.mesh.visible=false;fontSrc=this.lookupFont(data.font||DEFAULT_FONT)||data.font;cache.get(fontSrc,function doLoadFont(){return loadFont(fontSrc,data.yOffset)}).then(function setFont(font){var coercedData;var fontImgSrc;if(font.pages.length!==1){throw new Error("Currently only single-page bitmap fonts are supported.")}if(!fontWidthFactors[fontSrc]){font.widthFactor=fontWidthFactors[font]=computeFontWidthFactor(font)}coercedData=coerceData(data);self.updateGeometry(geometry,self.data,font);self.currentFont=font;self.updateLayout(coercedData);fontImgSrc=data.fontImage||fontSrc.replace(/(\.fnt)|(\.json)/,".png")||path.dirname(data.font)+"/"+font.pages[0];cache.get(fontImgSrc,function(){return loadTexture(fontImgSrc)}).then(function(image){self.mesh.visible=true;self.texture.image=image;self.texture.needsUpdate=true;el.emit("textfontset",{font:data.font,fontObj:font})}).catch(function(err){error(err);throw err})}).catch(function(err){error(err);throw err})},updateLayout:function(data){var anchor;var baseline;var el=this.el;var geometry=this.geometry;var geometryComponent=el.getAttribute("geometry");var height;var layout=geometry.layout;var mesh=this.mesh;var textRenderWidth;var textScale;var width;var x;var y;geometryComponent=el.getAttribute("geometry");width=data.width||geometryComponent&&geometryComponent.width||DEFAULT_WIDTH;textRenderWidth=computeWidth(data.wrapPixels,data.wrapCount,this.currentFont.widthFactor);textScale=width/textRenderWidth;height=textScale*(layout.height+layout.descender);if(geometryComponent){if(!geometryComponent.width){el.setAttribute("geometry","width",width)}if(!geometryComponent.height){el.setAttribute("geometry","height",height)}}anchor=data.anchor==="align"?data.align:data.anchor;if(anchor==="left"){x=0}else if(anchor==="right"){x=-1*layout.width}else if(anchor==="center"){x=-1*layout.width/2}else{throw new TypeError("Invalid text.anchor property value",anchor)}baseline=data.baseline;if(baseline==="bottom"){y=0}else if(baseline==="top"){y=-1*layout.height+layout.ascender}else if(baseline==="center"){y=-1*layout.height/2}else{throw new TypeError("Invalid text.baseline property value",baseline)}mesh.position.x=x*textScale;mesh.position.y=y*textScale;mesh.position.z=data.zOffset;mesh.scale.set(textScale,-1*textScale,textScale);this.geometry.computeBoundingSphere()},lookupFont:function(key){return FONTS[key]},updateGeometry:function(geometry,data,font){geometry.update(utils.extend({},data,{font:font,width:computeWidth(data.wrapPixels,data.wrapCount,font.widthFactor),text:data.value.replace(/\\n/g,"\n").replace(/\\t/g," "),lineHeight:data.lineHeight||font.common.lineHeight}))}});function parseSide(side){switch(side){case"back":{return THREE.BackSide}case"double":{return THREE.DoubleSide}default:{return THREE.FrontSide}}}function coerceData(data){data=utils.clone(data);if(data.lineHeight!==undefined){data.lineHeight=parseFloat(data.lineHeight);if(!isFinite(data.lineHeight)){data.lineHeight=undefined}}if(data.width!==undefined){data.width=parseFloat(data.width);if(!isFinite(data.width)){data.width=undefined}}return data}function loadFont(src,yOffset){return new Promise(function(resolve,reject){loadBMFont(src,function(err,font){if(err){error("Error loading font",src);reject(err);return}if(src.indexOf("/Roboto-msdf.json")>=0){yOffset=30}if(yOffset){font.chars.map(function doOffset(ch){ch.yoffset+=yOffset})}resolve(font)})})}function loadTexture(src){return new Promise(function(resolve,reject){(new THREE.ImageLoader).load(src,function(image){resolve(image)},undefined,function(){error("Error loading font image",src);reject(null)})})}function createShader(el,shaderName,data){var shader;var shaderObject;shaderObject=new shaders[shaderName].Shader;shaderObject.el=el;shaderObject.init(data);shaderObject.update(data);shader=shaderObject.material;shader.transparent=data.transparent;return{material:shader,shader:shaderObject}}function updateBaseMaterial(material,data){material.side=data.side}function computeWidth(wrapPixels,wrapCount,widthFactor){return wrapPixels||(.5+wrapCount)*widthFactor}function computeFontWidthFactor(font){var sum=0;var digitsum=0;var digits=0;font.chars.map(function(ch){sum+=ch.xadvance;if(ch.id>=48&&ch.id<=57){digits++;digitsum+=ch.xadvance}});return digits?digitsum/digits:sum/font.chars.length}function PromiseCache(){var cache=this.cache={};this.get=function(key,promiseGenerator){if(key in cache){return cache[key]}cache[key]=promiseGenerator();return cache[key]}}},{"../core/component":125,"../core/shader":134,"../lib/three":173,"../utils/":196,"load-bmfont":24,path:32,"three-bmfont-text":37}],111:[function(_dereq_,module,exports){var registerComponent=_dereq_("../core/component").registerComponent;var THREE=_dereq_("../lib/three");var DEFAULT_USER_HEIGHT=_dereq_("../constants").DEFAULT_USER_HEIGHT;var DEFAULT_HANDEDNESS=_dereq_("../constants").DEFAULT_HANDEDNESS;var EYES_TO_ELBOW={x:.175,y:-.3,z:-.03};var FOREARM={x:0,y:0,z:-.175};module.exports.Component=registerComponent("tracked-controls",{schema:{controller:{"default":0},id:{type:"string","default":""},idPrefix:{type:"string","default":""},rotationOffset:{"default":0},armModel:{"default":true},headElement:{type:"selector"}},init:function(){this.axis=[0,0,0];this.buttonStates={};this.dolly=new THREE.Object3D;this.controllerEuler=new THREE.Euler;this.controllerEuler.order="YXZ";this.controllerPosition=new THREE.Vector3;this.controllerQuaternion=new THREE.Quaternion;this.deltaControllerPosition=new THREE.Vector3;this.standingMatrix=new THREE.Matrix4;this.previousControllerPosition=new THREE.Vector3;this.updateGamepad()},tick:function(time,delta){var mesh=this.el.getObject3D("mesh");if(mesh&&mesh.update){mesh.update(delta/1e3)}this.updateGamepad();this.updatePose();this.updateButtons()},defaultUserHeight:function(){return DEFAULT_USER_HEIGHT},getHeadElement:function(){return this.data.headElement||this.el.sceneEl.camera.el},updateGamepad:function(){var controllers=this.system.controllers;var data=this.data;var matchingControllers;matchingControllers=controllers.filter(function hasIdOrPrefix(controller){if(data.idPrefix){return controller.id.indexOf(data.idPrefix)===0}return controller.id===data.id});this.controller=matchingControllers[data.controller]},applyArmModel:function(controllerPosition){var controller=this.controller;var pose=controller.pose;var controllerQuaternion=this.controllerQuaternion;var controllerEuler=this.controllerEuler;var deltaControllerPosition=this.deltaControllerPosition;var hand=(controller?controller.hand:undefined)||DEFAULT_HANDEDNESS;var headEl=this.getHeadElement();var headObject3D=headEl.object3D;var headCamera=headEl.components.camera;var userHeight=(headCamera?headCamera.data.userHeight:0)||this.defaultUserHeight();controllerPosition.copy(headObject3D.position);deltaControllerPosition.set(EYES_TO_ELBOW.x*(hand==="left"?-1:hand==="right"?1:0),EYES_TO_ELBOW.y,EYES_TO_ELBOW.z);deltaControllerPosition.multiplyScalar(userHeight);deltaControllerPosition.applyAxisAngle(headObject3D.up,headObject3D.rotation.y);controllerPosition.add(deltaControllerPosition);deltaControllerPosition.set(FOREARM.x,FOREARM.y,FOREARM.z);deltaControllerPosition.multiplyScalar(userHeight);if(pose.orientation){controllerQuaternion.fromArray(pose.orientation)}else{controllerQuaternion.copy(headObject3D.quaternion)}controllerEuler.setFromQuaternion(controllerQuaternion);controllerEuler.set(controllerEuler.x,controllerEuler.y,0);deltaControllerPosition.applyEuler(controllerEuler);controllerPosition.add(deltaControllerPosition)},updatePose:function(){var controller=this.controller;var controllerEuler=this.controllerEuler;var controllerPosition=this.controllerPosition;var currentPosition;var deltaControllerPosition=this.deltaControllerPosition;var dolly=this.dolly;var el=this.el;var pose;var standingMatrix=this.standingMatrix;var vrDisplay=this.system.vrDisplay;var headEl=this.getHeadElement();var headObject3D=headEl.object3D;var headCamera=headEl.components.camera;var userHeight=(headCamera?headCamera.data.userHeight:0)||this.defaultUserHeight();if(!controller){return}pose=controller.pose;if(pose.orientation){dolly.quaternion.fromArray(pose.orientation)}else{dolly.quaternion.copy(headObject3D.quaternion)}if(pose.position){dolly.position.fromArray(pose.position)}else{if(this.data.armModel){this.applyArmModel(controllerPosition)}dolly.position.copy(controllerPosition); }dolly.updateMatrix();if(pose.position&&vrDisplay){if(vrDisplay.stageParameters){standingMatrix.fromArray(vrDisplay.stageParameters.sittingToStandingTransform);dolly.applyMatrix(standingMatrix)}else{dolly.position.y+=userHeight;dolly.updateMatrix()}}controllerEuler.setFromRotationMatrix(dolly.matrix);controllerPosition.setFromMatrixPosition(dolly.matrix);el.setAttribute("rotation",{x:THREE.Math.radToDeg(controllerEuler.x),y:THREE.Math.radToDeg(controllerEuler.y),z:THREE.Math.radToDeg(controllerEuler.z)+this.data.rotationOffset});deltaControllerPosition.copy(controllerPosition).sub(this.previousControllerPosition);this.previousControllerPosition.copy(controllerPosition);currentPosition=el.getAttribute("position");el.setAttribute("position",{x:currentPosition.x+deltaControllerPosition.x,y:currentPosition.y+deltaControllerPosition.y,z:currentPosition.z+deltaControllerPosition.z})},updateButtons:function(){var buttonState;var controller=this.controller;var id;if(!controller){return}for(id=0;idMAX_DELTA){velocity[adAxis]=0;velocity[wsAxis]=0;return}if(velocity[adAxis]!==0){velocity[adAxis]-=velocity[adAxis]*data.easing*delta}if(velocity[wsAxis]!==0){velocity[wsAxis]-=velocity[wsAxis]*data.easing*delta}if(Math.abs(velocity[adAxis])1){el.setAttribute(attributeSplit[0],attributeSplit[1],rgbVectorToHex(value))}el.setAttribute(attribute,rgbVectorToHex(value))}}function getForNumber(){if(dataFrom===undefined){from[attribute]=parseFloat(el.getAttribute(attribute))}else{from[attribute]=parseFloat(dataFrom)}to[attribute]=parseFloat(dataTo);partialSetAttribute=function(value){el.setAttribute(attribute,value[attribute])}}}module.exports.getAnimationValues=getAnimationValues;function strToBool(str){if(str==="true"){return true}return false}function boolToNum(bool){return bool?1:0}function componentToHex(color){var hex=color.toString(16);return hex.length===1?"0"+hex:hex}function convertToIntegerColor(color){return Math.floor(Math.min(Math.abs(color),1)*255)}function rgbVectorToHex(color){return"#"+["r","g","b"].map(function(prop){return componentToHex(convertToIntegerColor(color[prop]))}).join("")}},{"../constants/animation":115,"../lib/three":173,"../utils/":196,"./a-node":123,"./a-register-element":124,"./schema":133,"@tweenjs/tween.js":1}],119:[function(_dereq_,module,exports){var ANode=_dereq_("./a-node");var bind=_dereq_("../utils/bind");var debug=_dereq_("../utils/debug");var registerElement=_dereq_("./a-register-element").registerElement;var THREE=_dereq_("../lib/three");var fileLoader=new THREE.FileLoader;var warn=debug("core:a-assets:warn");module.exports=registerElement("a-assets",{prototype:Object.create(ANode.prototype,{createdCallback:{value:function(){this.isAssets=true;this.fileLoader=fileLoader;this.timeout=null}},attachedCallback:{value:function(){var self=this;var i;var loaded=[];var mediaEl;var mediaEls;var imgEl;var imgEls;var timeout;if(!this.parentNode.isScene){throw new Error(" must be a child of a .")}imgEls=this.querySelectorAll("img");for(i=0;i=el.duration){THREE.Cache.files[el.getAttribute("src")]=el;resolve()}}})}function fixUpMediaElement(mediaEl){var newMediaEl=setCrossOrigin(mediaEl);if(newMediaEl.tagName&&newMediaEl.tagName.toLowerCase()==="video"){newMediaEl.setAttribute("playsinline","");newMediaEl.setAttribute("webkit-playsinline","")}if(newMediaEl!==mediaEl){mediaEl.parentNode.appendChild(newMediaEl);mediaEl.parentNode.removeChild(mediaEl)}return newMediaEl}function setCrossOrigin(mediaEl){var newMediaEl;var src;if(mediaEl.hasAttribute("crossorigin")){return mediaEl}src=mediaEl.getAttribute("src");if(src!==null){if(src.indexOf("://")===-1){return mediaEl}if(extractDomain(src)===window.location.host){return mediaEl}}warn("Cross-origin element (e.g., ) was requested without `crossorigin` set. "+"A-Frame will re-request the asset with `crossorigin` attribute set. "+'Please set `crossorigin` on the element (e.g., )',src);mediaEl.crossOrigin="anonymous";newMediaEl=mediaEl.cloneNode(true);return newMediaEl}function extractDomain(url){var domain=url.indexOf("://")>-1?url.split("/")[2]:url.split("/")[0];return domain.split(":")[0]}function inferResponseType(src){var dotLastIndex=src.lastIndexOf(".");if(dotLastIndex>=0){var extension=src.slice(dotLastIndex,src.length);if(extension===".gltf"||extension===".glb"){return"arraybuffer"}}return"text"}module.exports.inferResponseType=inferResponseType},{"../lib/three":173,"../utils/bind":190,"../utils/debug":192,"./a-node":123,"./a-register-element":124}],120:[function(_dereq_,module,exports){var debug=_dereq_("../utils/debug");var registerElement=_dereq_("./a-register-element").registerElement;var warn=debug("core:cubemap:warn");module.exports=registerElement("a-cubemap",{prototype:Object.create(window.HTMLElement.prototype,{attachedCallback:{value:function(){this.srcs=this.validate()},writable:window.debug},validate:{value:function(){var elements=this.querySelectorAll("[src]");var i;var srcs=[];if(elements.length===6){for(i=0;i did not contain exactly six elements each with a "+"`src` attribute.")},writable:window.debug}})})},{"../utils/debug":192,"./a-register-element":124}],121:[function(_dereq_,module,exports){var ANode=_dereq_("./a-node");var COMPONENTS=_dereq_("./component").components;var registerElement=_dereq_("./a-register-element").registerElement;var THREE=_dereq_("../lib/three");var utils=_dereq_("../utils/");var AEntity;var bind=utils.bind;var debug=utils.debug("core:a-entity:debug");var warn=utils.debug("core:a-entity:warn");var MULTIPLE_COMPONENT_DELIMITER="__";var proto=Object.create(ANode.prototype,{defaultComponents:{value:{position:"",rotation:"",scale:"",visible:""}},createdCallback:{value:function(){this.components={};this.initializingComponents={};this.isEntity=true;this.isPlaying=false;this.object3D=new THREE.Group;this.object3D.el=this;this.object3DMap={};this.parentEl=null;this.states=[]}},attributeChangedCallback:{value:function(attr,oldVal,newVal){var component=this.components[attr];if(component&&component.justInitialized&&newVal===""){delete component.justInitialized;return}if(!component&&newVal===null){return}this.setEntityAttribute(attr,oldVal,newVal)}},attachedCallback:{value:function(){var assetsEl;var sceneEl=this.sceneEl;var self=this;this.addToParent();if(this.isScene){return}if(!sceneEl){this.load();return}assetsEl=sceneEl.querySelector("a-assets");if(assetsEl&&!assetsEl.hasLoaded){assetsEl.addEventListener("loaded",function(){self.load()});return}this.load()}},detachedCallback:{value:function(){if(!this.parentEl){return}Object.keys(this.components).forEach(bind(this.removeComponent,this)); if(this.isScene){return}this.removeFromParent();ANode.prototype.detachedCallback.call(this)}},handleMixinUpdate:{value:function(attrName){if(!attrName){this.updateComponents();return}this.updateComponent(attrName,this.getDOMAttribute(attrName))}},mapStateMixins:{value:function(state,op){var mixins=this.getAttribute("mixin");var mixinIds;if(!mixins){return}mixinIds=mixins.split(" ");mixinIds.forEach(function(id){var mixinId=id+"-"+state;op(mixinId)});this.updateComponents()}},updateStateMixins:{value:function(newMixins,oldMixins){var diff;var newMixinsIds=newMixins.split(" ");var oldMixinsIds=oldMixins||""?oldMixins.split(" "):[];var self=this;diff=oldMixinsIds.filter(function(i){return newMixinsIds.indexOf(i)<0});diff.forEach(function(mixinId){var stateMixinsEls=document.querySelectorAll("[id^="+mixinId+"-]");Array.prototype.forEach.call(stateMixinsEls,function(el){self.unregisterMixin(el.id)})});this.states.forEach(function(state){newMixinsIds.forEach(function(id){var mixinId=id+"-"+state;self.registerMixin(mixinId)})})}},getObject3D:{value:function(type){return this.object3DMap[type]}},setObject3D:{value:function(type,obj){var oldObj;var self=this;if(!(obj instanceof THREE.Object3D)){throw new Error("`Entity.setObject3D` was called with an object that was not an instance of "+"THREE.Object3D.")}oldObj=this.getObject3D(type);if(oldObj){this.object3D.remove(oldObj)}obj.el=this;if(obj.children.length){obj.traverse(function bindEl(child){child.el=self})}this.object3D.add(obj);this.object3DMap[type]=obj;this.emit("object3dset",{object:obj,type:type})}},removeObject3D:{value:function(type){var obj=this.getObject3D(type);if(!obj){warn("Tried to remove `Object3D` of type:",type,"which was not defined.");return}this.object3D.remove(obj);delete this.object3DMap[type];this.emit("object3dremove",{type:type})}},getOrCreateObject3D:{value:function(type,Constructor){var object3D=this.getObject3D(type);if(!object3D&&Constructor){object3D=new Constructor;this.setObject3D(type,object3D)}return object3D}},add:{value:function(el){if(!el.object3D){throw new Error("Trying to add an element that doesn't have an `object3D`")}this.object3D.add(el.object3D);this.emit("child-attached",{el:el})}},addToParent:{value:function(){var parentNode=this.parentEl=this.parentNode;if(!parentNode||!parentNode.add||this.attachedToParent){return}parentNode.add(this);this.attachedToParent=true}},removeFromParent:{value:function(){var parentEl=this.parentEl;this.parentEl.remove(this);this.attachedToParent=false;this.parentEl=this.parentNode=null;parentEl.emit("child-detached",{el:this})}},load:{value:function(){var self=this;if(this.hasLoaded||!this.parentEl){return}ANode.prototype.load.call(this,function entityLoadCallback(){if(!self.parentEl){return}self.updateComponents();if(self.isScene||self.parentEl.isPlaying){self.play()}})},writable:window.debug},remove:{value:function(el){this.object3D.remove(el.object3D)}},getChildEntities:{value:function(){var children=this.children;var childEntities=[];for(var i=0;i0?attrName.substring(0,delimiterIndex):attrName;if(!COMPONENTS[componentName]){normalSetAttribute(this,attrName,arg1);return}if(!this.components[attrName]&&this.hasAttribute(attrName)){this.updateComponent(attrName,window.HTMLElement.prototype.getAttribute.call(this,attrName))}if(typeof arg2!=="undefined"&&typeof arg1==="string"&&arg1.length>0&&typeof utils.styleParser.parse(arg1)==="string"){newAttrValue={};newAttrValue[arg1]=arg2;clobber=false}else{newAttrValue=arg1;clobber=arg2===true}this.updateComponent(attrName,newAttrValue,clobber);isDebugMode=this.sceneEl&&this.sceneEl.getAttribute("debug");if(isDebugMode){this.components[attrName].flushToDOM()}function normalSetAttribute(el,attrName,value){ANode.prototype.setAttribute.call(el,attrName,value);if(attrName==="mixin"){el.mixinUpdate(value)}}},writable:window.debug},flushToDOM:{value:function(recursive){var components=this.components;var defaultComponents=this.defaultComponents;var child;var children=this.children;var i;Object.keys(components).forEach(function flushComponent(componentName){components[componentName].flushToDOM(componentName in defaultComponents)});if(!recursive){return}for(i=0;i outside of an A-Frame "+"scene. Append this element to `` instead.")}this.hasLoaded=false;this.emit("nodeready",{},false);mixins=this.getAttribute("mixin");if(mixins){this.updateMixins(mixins)}},writable:window.debug},attributeChangedCallback:{value:function(attr,oldVal,newVal){if(attr==="mixin"){this.updateMixins(newVal,oldVal)}}},closestScene:{value:function closest(){var element=this;while(element){if(element.isScene){break}element=element.parentElement}return element}},closest:{value:function closest(selector){var matches=this.matches||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector;var element=this;while(element){if(matches.call(element,selector)){break}element=element.parentElement}return element}},detachedCallback:{value:function(){this.hasLoaded=false}},load:{value:function(cb,childFilter){var children;var childrenLoaded;var self=this;if(this.hasLoaded){return}childFilter=childFilter||isNode;children=this.getChildren();childrenLoaded=children.filter(childFilter).map(function(child){return new Promise(function waitForLoaded(resolve){if(child.hasLoaded){return resolve()}child.addEventListener("loaded",resolve)})});Promise.all(childrenLoaded).then(function emitLoaded(){self.hasLoaded=true;if(cb){cb()}self.emit("loaded",{},false)})},writable:true},getChildren:{value:function(){return Array.prototype.slice.call(this.children,0)}},updateMixins:{value:function(newMixins,oldMixins){var newMixinIds=newMixins?newMixins.trim().split(/\s+/):[];var oldMixinIds=oldMixins?oldMixins.trim().split(/\s+/):[];oldMixinIds.filter(function(i){return newMixinIds.indexOf(i)<0}).forEach(bind(this.unregisterMixin,this));this.mixinEls=[];newMixinIds.forEach(bind(this.registerMixin,this))}},registerMixin:{value:function(mixinId){if(!this.sceneEl){return}var mixinEl=this.sceneEl.querySelector("a-mixin#"+mixinId);if(!mixinEl){return}this.attachMixinListener(mixinEl);this.mixinEls.push(mixinEl)}},setAttribute:{value:function(attr,newValue){if(attr==="mixin"){this.updateMixins(newValue)}window.HTMLElement.prototype.setAttribute.call(this,attr,newValue)}},unregisterMixin:{value:function(mixinId){var mixinEls=this.mixinEls;var mixinEl;var i;for(i=0;i tag after the scene. "+"Component