x_ite
Version:
X_ITE X3D Browser — View and Manipulate X3D, VRML, glTF and Other 3D Sources in HTML
2 lines • 1.37 MB
JavaScript
/* X_ITE v15.0.3 */
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.X3D=t():e.X3D=t()}(self,()=>(()=>{var t={447(e,t,i){"use strict";i.d(t,{A:()=>s});const n={};Object.defineProperty(n,"add",{value(e,t){if(n.hasOwnProperty(e))return console.error(new Error(`Namespace: "${e}" already exists.`)),t;const i=window[Symbol.for("X_ITE.X3D")];return i&&(i[e]=t),n[e]=t}});const s=n.add("Namespace",n)},143(e,t){var i,n,s;n=[],void 0===(s="function"==typeof(i=function(){var e=function(e){return e.reduce(function(e,t){return 2*e+t},0)},t=function(e){for(var t=[],i=7;i>=0;i--)t.push(!!(e&1<<i));return t},i=function(e){this.data=e,this.len=this.data.length,this.pos=0,this.readByte=function(){if(this.pos>=this.data.length)throw new Error("Attempted to read past end of stream.");return e instanceof Uint8Array?e[this.pos++]:255&e.charCodeAt(this.pos++)},this.readBytes=function(e){for(var t=[],i=0;i<e;i++)t.push(this.readByte());return t},this.read=function(e){for(var t="",i=0;i<e;i++)t+=String.fromCharCode(this.readByte());return t},this.readUnsigned=function(){var e=this.readBytes(2);return(e[1]<<8)+e[0]}},n=function(e,t){for(var i,n,s=0,r=function(e){for(var i=0,n=0;n<e;n++)t.charCodeAt(s>>3)&1<<(7&s)&&(i|=1<<n),s++;return i},o=[],a=1<<e,l=a+1,h=e+1,c=[],d=function(){c=[],h=e+1;for(var t=0;t<a;t++)c[t]=[t];c[a]=[],c[l]=null};;)if(n=i,(i=r(h))!==a){if(i===l)break;if(i<c.length)n!==a&&c.push(c[n].concat(c[i][0]));else{if(i!==c.length)throw new Error("Invalid LZW code.");c.push(c[n].concat(c[n][0]))}o.push.apply(o,c[i]),c.length===1<<h&&h<12&&h++}else d();return o},s=function(i,s){s||(s={});var r=function(e){for(var t=[],n=0;n<e;n++)t.push(i.readBytes(3));return t},o=function(){var e,t;t="";do{e=i.readByte(),t+=i.read(e)}while(0!==e);return t},a=function(){var n={};if(n.sig=i.read(3),n.ver=i.read(3),"GIF"!==n.sig)throw new Error("Not a GIF file.");n.width=i.readUnsigned(),n.height=i.readUnsigned();var o=t(i.readByte());n.gctFlag=o.shift(),n.colorRes=e(o.splice(0,3)),n.sorted=o.shift(),n.gctSize=e(o.splice(0,3)),n.bgColor=i.readByte(),n.pixelAspectRatio=i.readByte(),n.gctFlag&&(n.gct=r(1<<n.gctSize+1)),s.hdr&&s.hdr(n)},l=function(n){var r=function(n){i.readByte();var r=t(i.readByte());n.reserved=r.splice(0,3),n.disposalMethod=e(r.splice(0,3)),n.userInput=r.shift(),n.transparencyGiven=r.shift(),n.delayTime=i.readUnsigned(),n.transparencyIndex=i.readByte(),n.terminator=i.readByte(),s.gce&&s.gce(n)},a=function(e){e.comment=o(),s.com&&s.com(e)},l=function(e){i.readByte(),e.ptHeader=i.readBytes(12),e.ptData=o(),s.pte&&s.pte(e)},h=function(e){var t=function(e){i.readByte(),e.unknown=i.readByte(),e.iterations=i.readUnsigned(),e.terminator=i.readByte(),s.app&&s.app.NETSCAPE&&s.app.NETSCAPE(e)},n=function(e){e.appData=o(),s.app&&s.app[e.identifier]&&s.app[e.identifier](e)};i.readByte(),e.identifier=i.read(8),e.authCode=i.read(3),"NETSCAPE"===e.identifier?t(e):n(e)},c=function(e){e.data=o(),s.unknown&&s.unknown(e)};switch(n.label=i.readByte(),n.label){case 249:n.extType="gce",r(n);break;case 254:n.extType="com",a(n);break;case 1:n.extType="pte",l(n);break;case 255:n.extType="app",h(n);break;default:n.extType="unknown",c(n)}},h=function(a){var l=function(e,t){for(var i=new Array(e.length),n=e.length/t,s=function(n,s){var r=e.slice(s*t,(s+1)*t);i.splice.apply(i,[n*t,t].concat(r))},r=[0,4,2,1],o=[8,8,4,2],a=0,l=0;l<4;l++)for(var h=r[l];h<n;h+=o[l])s(h,a),a++;return i};a.leftPos=i.readUnsigned(),a.topPos=i.readUnsigned(),a.width=i.readUnsigned(),a.height=i.readUnsigned();var h=t(i.readByte());a.lctFlag=h.shift(),a.interlaced=h.shift(),a.sorted=h.shift(),a.reserved=h.splice(0,2),a.lctSize=e(h.splice(0,3)),a.lctFlag&&(a.lct=r(1<<a.lctSize+1)),a.lzwMinCodeSize=i.readByte();var c=o();a.pixels=n(a.lzwMinCodeSize,c),a.interlaced&&(a.pixels=l(a.pixels,a.width)),s.img&&s.img(a)},c=function(){var e={};switch(e.sentinel=i.readByte(),String.fromCharCode(e.sentinel)){case"!":e.type="ext",l(e);break;case",":e.type="img",h(e);break;case";":e.type="eof",s.eof&&s.eof(e);break;default:throw new Error("Unknown block: 0x"+e.sentinel.toString(16))}"eof"!==e.type&&setTimeout(c,0)};a(),setTimeout(c,0)};return function(e){var t,n,r={vp_l:0,vp_t:0,vp_w:null,vp_h:null,c_w:null,c_h:null};for(var o in e)r[o]=e[o];r.vp_w&&r.vp_h&&(r.is_vp=!0);var a=null,l=!1,h=null,c=null,d=null,u=null,p=null,g=null,f=null,m=!0,_=!0,y=!1,w=[],x=[],b=r.gif;void 0===r.auto_play&&(r.auto_play=!b.getAttribute("rel:auto_play")||"1"==b.getAttribute("rel:auto_play"));var S,T,O,v,E=r.hasOwnProperty("on_end")?r.on_end:null,N=r.hasOwnProperty("on_error")?r.on_error:null,A=r.hasOwnProperty("loop_delay")?r.loop_delay:0,C=r.hasOwnProperty("loop_mode")?r.loop_mode:"auto",I=!r.hasOwnProperty("draw_while_loading")||r.draw_while_loading,F=!!I&&(!r.hasOwnProperty("show_progress_bar")||r.show_progress_bar),M=r.hasOwnProperty("progressbar_height")?r.progressbar_height:25,R=r.hasOwnProperty("progressbar_background_color")?r.progressbar_background_color:"rgba(255,255,255,0.4)",P=r.hasOwnProperty("progressbar_foreground_color")?r.progressbar_foreground_color:"rgba(255,0,22,.8)",V=function(){h=null,c=null,p=d,d=null,g=null},D=function(){try{s(t,W)}catch(e){j("parse")}},L=function(e,t){S.width=e*Z(),S.height=t*Z(),O.style.minWidth=e*Z()+"px",v.width=e,v.height=t,v.style.width=e+"px",v.style.height=t+"px",v.getContext("2d",{willReadFrequently:!0}).setTransform(1,0,0,1,0,0)},B=function(e,t){x[e]?(void 0!==t.x&&(x[e].x=t.x),void 0!==t.y&&(x[e].y=t.y)):x[e]=t},k=function(e,t,i){if(i&&F){var n,s,o,a=M;r.is_vp?y?(s=(r.vp_t+r.vp_h-a)/Z(),a/=Z(),n=r.vp_l/Z()+e/t*(r.vp_w/Z()),o=S.width/Z()):(s=r.vp_t+r.vp_h-a,n=r.vp_l+e/t*r.vp_w,o=S.width):(s=(S.height-a)/(y?Z():1),n=e/t*S.width/(y?Z():1),o=S.width/(y?Z():1),a/=y?Z():1),T.fillStyle=R,T.fillRect(n,s,o-n,a),T.fillStyle=P,T.fillRect(0,s,n,a)}},j=function(e){var t=function(){T.fillStyle="black",T.fillRect(0,0,r.c_w?r.c_w:n.width,r.c_h?r.c_h:n.height),T.strokeStyle="red",T.lineWidth=3,T.moveTo(0,0),T.lineTo(r.c_w?r.c_w:n.width,r.c_h?r.c_h:n.height),T.moveTo(0,r.c_h?r.c_h:n.height),T.lineTo(r.c_w?r.c_w:n.width,0),T.stroke()};a=e,n={width:b.width,height:b.height},w=[],t(),e&&N?.(e)},U=function(e){L((n=e).width,n.height)},X=function(e){z(),V(),h=e.transparencyGiven?e.transparencyIndex:null,c=e.delayTime,d=e.disposalMethod},z=function(){g&&(w.push({data:g.getImageData(0,0,n.width,n.height),delay:c}),x.push({x:0,y:0}))},G=function(e){g||(g=v.getContext("2d",{willReadFrequently:!0}));var t=w.length,i=e.lctFlag?e.lct:n.gct;t>0&&(3===p?null!==u?g.putImageData(w[u].data,0,0):g.clearRect(f.leftPos,f.topPos,f.width,f.height):u=t-1,2===p&&g.clearRect(f.leftPos,f.topPos,f.width,f.height));var s=g.getImageData(e.leftPos,e.topPos,e.width,e.height);e.pixels.forEach(function(e,t){e!==h&&(s.data[4*t+0]=i[e][0],s.data[4*t+1]=i[e][1],s.data[4*t+2]=i[e][2],s.data[4*t+3]=255)}),g.putImageData(s,e.leftPos,e.topPos),y||(T.scale(Z(),Z()),y=!0),I&&(T.drawImage(v,0,0),I=r.auto_play),f=e},H=function(){var e,t,i,n=-1,s=0,o=function(){return(n+(_?1:-1)+w.length)%w.length},l=function(e){n+=e,c()},h=(e=!1,t=function(){null!==E&&E(b),s++,!1!==C||s<0?i():(e=!1,m=!1)},i=function(){if(e=m){l(1);var s=10*w[n].delay;s||(s=100),0===o()?(s+=A,setTimeout(t,s)):setTimeout(i,s)}},function(){e||setTimeout(i,0)}),c=function(){var e;(n=parseInt(n,10))>w.length-1&&(n=0),n<0&&(n=0),e=x[n],v.getContext("2d",{willReadFrequently:!0}).putImageData(w[n].data,e.x,e.y),T.globalCompositeOperation="copy",T.drawImage(v,0,0)},d=function(){m=!0,h()};return{init:function(){a||(r.c_w&&r.c_h||T.scale(Z(),Z()),r.auto_play?h():(n=0,c()))},step:h,play:d,pause:function(){m=!1},playing:m,move_relative:l,current_frame:function(){return n},length:function(){return w.length},move_to:function(e){n=e,c()}}}(),$=function(e){k(t.pos,t.data.length,e)},Y=function(){},q=function(e,t){return function(i){e(i),$(t)}},W={hdr:q(U),gce:q(X),com:q(Y),app:{NETSCAPE:q(Y)},img:q(G,!0),eof:function(e){z(),$(!1),r.c_w&&r.c_h||(S.width=n.width*Z(),S.height=n.height*Z()),H.init(),l=!1,J&&J(b)}},K=function(){var e=b.parentNode,t=document.createElement("div");S=document.createElement("canvas"),T=S.getContext("2d",{willReadFrequently:!0}),O=document.createElement("div"),v=document.createElement("canvas"),t.width=S.width=b.width,t.height=S.height=b.height,O.style.minWidth=b.width+"px",t.className="jsgif",O.className="jsgif_toolbar",t.appendChild(S),t.appendChild(O),e.insertBefore(t,b),e.removeChild(b),r.c_w&&r.c_h&&L(r.c_w,r.c_h),Q=!0},Z=function(){return r.max_width&&n&&n.width>r.max_width?r.max_width/n.width:1},Q=!1,J=!1,ee=function(e){return!l&&(J=e||!1,l=!0,w=[],V(),u=null,p=null,g=null,f=null,!0)},te=function(){return w.reduce(function(e,t){return e+t.delay},0)};return{play:H.play,pause:H.pause,move_relative:H.move_relative,move_to:H.move_to,get_playing:function(){return m},get_canvas:function(){return S},get_canvas_scale:function(){return Z()},get_loading:function(){return l},get_auto_play:function(){return r.auto_play},get_length:function(){return H.length()},get_frames:function(){return w},get_duration:function(){return te()},get_duration_ms:function(){return 10*te()},get_current_frame:function(){return H.current_frame()},load_url:function(e,n){if(ee(n)){var s=new XMLHttpRequest;s.open("GET",e,!0),"overrideMimeType"in s?s.overrideMimeType("text/plain; charset=x-user-defined"):"responseType"in s?s.responseType="arraybuffer":s.setRequestHeader("Accept-Charset","x-user-defined"),s.onloadstart=function(){Q||K()},s.onload=function(e){200!=this.status&&j("xhr - response"),"response"in this||(this.response=new VBArray(this.responseText).toArray().map(String.fromCharCode).join(""));var n=this.response;n.toString().indexOf("ArrayBuffer")>0&&(n=new Uint8Array(n)),t=new i(n),setTimeout(D,0)},s.onprogress=function(e){e.lengthComputable&&k(e.loaded,e.total,!0)},s.onerror=function(){j("xhr")},s.send()}},load:function(e){this.load_url(b.getAttribute("rel:animated_src")||b.src,e)},load_raw:function(e,n){ee(n)&&(Q||K(),t=new i(e),setTimeout(D,0))},set_frame_offset:B}}})?i.apply(t,n):i)||(e.exports=s)},949(e){var t;t=function(){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var s=t[n]={exports:{},id:n,loaded:!1};return e[n].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}return i.m=e,i.c=t,i.p="",i(0)}([function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isNotPNG=function(e){return e===a},t.isNotAPNG=function(e){return e===l},t.default=function(e){var t=new Uint8Array(e);if(Array.prototype.some.call(h,function(e,i){return e!==t[i]}))return a;var i=!1;if(c(t,function(e){return!(i="acTL"===e)}),!i)return l;var n=[],s=[],r=null,d=null,f=0,m=new o.APNG;if(c(t,function(e,t,i,a){var l=new DataView(t.buffer);switch(e){case"IHDR":r=t.subarray(i+8,i+8+a),m.width=l.getUint32(i+8),m.height=l.getUint32(i+12);break;case"acTL":m.numPlays=l.getUint32(i+8+4);break;case"fcTL":d&&(m.frames.push(d),f++),(d=new o.Frame).width=l.getUint32(i+8+4),d.height=l.getUint32(i+8+8),d.left=l.getUint32(i+8+12),d.top=l.getUint32(i+8+16);var h=l.getUint16(i+8+20),c=l.getUint16(i+8+22);0===c&&(c=100),d.delay=1e3*h/c,d.delay<=10&&(d.delay=100),m.playTime+=d.delay,d.disposeOp=l.getUint8(i+8+24),d.blendOp=l.getUint8(i+8+25),d.dataParts=[],0===f&&2===d.disposeOp&&(d.disposeOp=1);break;case"fdAT":d&&d.dataParts.push(t.subarray(i+8+4,i+8+a));break;case"IDAT":d&&d.dataParts.push(t.subarray(i+8,i+8+a));break;case"IEND":s.push(u(t,i,12+a));break;default:n.push(u(t,i,12+a))}}),d&&m.frames.push(d),0==m.frames.length)return l;var _=new Blob(n),y=new Blob(s);return m.frames.forEach(function(e){var t=[];t.push(h),r.set(g(e.width),0),r.set(g(e.height),4),t.push(p("IHDR",r)),t.push(_),e.dataParts.forEach(function(e){return t.push(p("IDAT",e))}),t.push(y),e.imageData=new Blob(t,{type:"image/png"}),delete e.dataParts,t=null}),m};var n,s=i(1),r=(n=s)&&n.__esModule?n:{default:n},o=i(2),a=new Error("Not a PNG"),l=new Error("Not an animated PNG"),h=new Uint8Array([137,80,78,71,13,10,26,10]);function c(e,t){var i=new DataView(e.buffer),n=8,s=void 0,r=void 0,o=void 0;do{r=i.getUint32(n),o=t(s=d(e,n+4,4),e,n,r),n+=12+r}while(!1!==o&&"IEND"!=s&&n<e.length)}function d(e,t,i){var n=Array.prototype.slice.call(e.subarray(t,t+i));return String.fromCharCode.apply(String,n)}function u(e,t,i){var n=new Uint8Array(i);return n.set(e.subarray(t,t+i)),n}var p=function(e,t){var i=e.length+t.length,n=new Uint8Array(i+8),s=new DataView(n.buffer);s.setUint32(0,t.length),n.set(function(e){for(var t=new Uint8Array(e.length),i=0;i<e.length;i++)t[i]=e.charCodeAt(i);return t}(e),4),n.set(t,8);var o=(0,r.default)(n,4,i);return s.setUint32(i+4,o),n},g=function(e){return new Uint8Array([e>>>24&255,e>>>16&255,e>>>8&255,255&e])}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=-1,s=t,r=t+(arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.length-t);s<r;s++)n=n>>>8^i[255&(n^e[s])];return-1^n};for(var i=new Uint32Array(256),n=0;n<256;n++){for(var s=n,r=0;r<8;r++)s=1&s?3988292384^s>>>1:s>>>1;i[n]=s}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Frame=t.APNG=void 0;var n,s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),r=i(3),o=(n=r)&&n.__esModule?n:{default:n};function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.APNG=function(){function e(){a(this,e),this.width=0,this.height=0,this.numPlays=0,this.playTime=0,this.frames=[]}return s(e,[{key:"createImages",value:function(){return Promise.all(this.frames.map(function(e){return e.createImage()}))}},{key:"getPlayer",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.createImages().then(function(){return new o.default(t,e,i)})}}]),e}(),t.Frame=function(){function e(){a(this,e),this.left=0,this.top=0,this.width=0,this.height=0,this.delay=0,this.disposeOp=0,this.blendOp=0,this.imageData=null,this.imageElement=null}return s(e,[{key:"createImage",value:function(){var e=this;return this.imageElement?Promise.resolve():new Promise(function(t,i){var n=URL.createObjectURL(e.imageData);e.imageElement=document.createElement("img"),e.imageElement.onload=function(){URL.revokeObjectURL(n),t()},e.imageElement.onerror=function(){URL.revokeObjectURL(n),e.imageElement=null,i(new Error("Image creation error"))},e.imageElement.src=n})}}]),e}()},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,s=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),r=i(4),o=function(e){function t(e,i,n){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var s=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return s.playbackRate=1,s._currentFrameNumber=0,s._ended=!1,s._paused=!0,s._numPlays=0,s._rafId=null,s._apng=e,s.context=i,s.stop(),n&&s.play(),s}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),s(t,[{key:"renderNextFrame",value:function(){this._currentFrameNumber=(this._currentFrameNumber+1)%this._apng.frames.length,this._currentFrameNumber===this._apng.frames.length-1&&(this._numPlays++,0!==this._apng.numPlays&&this._numPlays>=this._apng.numPlays&&(this._ended=!0,this._paused=!0)),this._prevFrame&&1==this._prevFrame.disposeOp?this.context.clearRect(this._prevFrame.left,this._prevFrame.top,this._prevFrame.width,this._prevFrame.height):this._prevFrame&&2==this._prevFrame.disposeOp&&this.context.putImageData(this._prevFrameData,this._prevFrame.left,this._prevFrame.top);var e=this.currentFrame;this._prevFrame=e,this._prevFrameData=null,2==e.disposeOp&&(this._prevFrameData=this.context.getImageData(e.left,e.top,e.width,e.height)),0==e.blendOp&&this.context.clearRect(e.left,e.top,e.width,e.height),this.context.drawImage(e.imageElement,e.left,e.top),this.emit("frame",this._currentFrameNumber),this._ended&&this.emit("end")}},{key:"play",value:function(){var e=this;this._rafId&&cancelAnimationFrame(this._rafId),this.emit("play"),this._ended&&this.stop(),this._paused=!1;var t=performance.now()+this.currentFrame.delay/this.playbackRate;this._rafId=requestAnimationFrame(function i(n){if(!e._ended&&!e._paused){if(n>=t){for(;n-t>=e._apng.playTime/e.playbackRate;)t+=e._apng.playTime/e.playbackRate,e._numPlays++;do{e.renderNextFrame(),t+=e.currentFrame.delay/e.playbackRate}while(!e._ended&&!e._paused&&n>t)}e._rafId=requestAnimationFrame(i)}})}},{key:"pause",value:function(){this._paused||(this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=null),this.emit("pause"),this._paused=!0)}},{key:"stop",value:function(){this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=null),this.emit("stop"),this._numPlays=0,this._ended=!1,this._paused=!0,this._currentFrameNumber=-1,this.context.clearRect(0,0,this._apng.width,this._apng.height),this.renderNextFrame()}},{key:"currentFrameNumber",get:function(){return this._currentFrameNumber}},{key:"currentFrame",get:function(){return this._apng.frames[this._currentFrameNumber]}},{key:"paused",get:function(){return this._paused}},{key:"ended",get:function(){return this._ended}}]),t}(((n=r)&&n.__esModule?n:{default:n}).default);t.default=o},function(e,t){function i(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function n(e){return"function"==typeof e}function s(e){return"object"==typeof e&&null!==e}function r(e){return void 0===e}e.exports=i,i.EventEmitter=i,i.prototype._events=void 0,i.prototype._maxListeners=void 0,i.defaultMaxListeners=10,i.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},i.prototype.emit=function(e){var t,i,o,a,l,h;if(this._events||(this._events={}),"error"===e&&(!this._events.error||s(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}if(r(i=this._events[e]))return!1;if(n(i))switch(arguments.length){case 1:i.call(this);break;case 2:i.call(this,arguments[1]);break;case 3:i.call(this,arguments[1],arguments[2]);break;default:a=Array.prototype.slice.call(arguments,1),i.apply(this,a)}else if(s(i))for(a=Array.prototype.slice.call(arguments,1),o=(h=i.slice()).length,l=0;l<o;l++)h[l].apply(this,a);return!0},i.prototype.addListener=function(e,t){var o;if(!n(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,n(t.listener)?t.listener:t),this._events[e]?s(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,s(this._events[e])&&!this._events[e].warned&&(o=r(this._maxListeners)?i.defaultMaxListeners:this._maxListeners)&&o>0&&this._events[e].length>o&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){if(!n(t))throw TypeError("listener must be a function");var i=!1;function s(){this.removeListener(e,s),i||(i=!0,t.apply(this,arguments))}return s.listener=t,this.on(e,s),this},i.prototype.removeListener=function(e,t){var i,r,o,a;if(!n(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(o=(i=this._events[e]).length,r=-1,i===t||n(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(i)){for(a=o;a-- >0;)if(i[a]===t||i[a].listener&&i[a].listener===t){r=a;break}if(r<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,i;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n(i=this._events[e]))this.removeListener(e,i);else if(i)for(;i.length;)this.removeListener(e,i[i.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?n(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(n(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}}])},e.exports=t()},862(e,t,i){var n,s,r;!function(){"use strict";s=[i(931)],n=function(e){var t,i,n=!!e.fn.on,s=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],r="onwheel"in window.document||window.document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],o=Array.prototype.slice;if(e.event.fixHooks)for(var a=s.length;a;)e.event.fixHooks[s[--a]]=e.event.mouseHooks;var l=e.event.special.mousewheel={version:"3.2.2",setup:function(){if(this.addEventListener)for(var t=r.length;t;)this.addEventListener(r[--t],h,!1);else this.onmousewheel=h;e.data(this,"mousewheel-line-height",l.getLineHeight(this)),e.data(this,"mousewheel-page-height",l.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var t=r.length;t;)this.removeEventListener(r[--t],h,!1);else this.onmousewheel=null;e.removeData(this,"mousewheel-line-height"),e.removeData(this,"mousewheel-page-height")},getLineHeight:function(t){var i=e(t),n=i["offsetParent"in e.fn?"offsetParent":"parent"]();return n.length||(n=e("body")),parseInt(n.css("fontSize"),10)||parseInt(i.css("fontSize"),10)||16},getPageHeight:function(t){return e(t).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function h(n){var s=n||window.event,r=o.call(arguments,1),a=0,h=0,d=0,u=0;if((n=e.event.fix(s)).type="mousewheel","detail"in s&&(d=-1*s.detail),"wheelDelta"in s&&(d=s.wheelDelta),"wheelDeltaY"in s&&(d=s.wheelDeltaY),"wheelDeltaX"in s&&(h=-1*s.wheelDeltaX),"axis"in s&&s.axis===s.HORIZONTAL_AXIS&&(h=-1*d,d=0),a=0===d?h:d,"deltaY"in s&&(a=d=-1*s.deltaY),"deltaX"in s&&(h=s.deltaX,0===d&&(a=-1*h)),0!==d||0!==h){if(1===s.deltaMode){var p=e.data(this,"mousewheel-line-height");a*=p,d*=p,h*=p}else if(2===s.deltaMode){var g=e.data(this,"mousewheel-page-height");a*=g,d*=g,h*=g}if(u=Math.max(Math.abs(d),Math.abs(h)),(!i||u<i)&&(i=u,c(s,u)&&(i/=40)),c(s,u)&&(a/=40,h/=40,d/=40),a=Math[a>=1?"floor":"ceil"](a/i),h=Math[h>=1?"floor":"ceil"](h/i),d=Math[d>=1?"floor":"ceil"](d/i),l.settings.normalizeOffset&&this.getBoundingClientRect){var f=this.getBoundingClientRect();n.offsetX=n.clientX-f.left,n.offsetY=n.clientY-f.top}return n.deltaX=h,n.deltaY=d,n.deltaFactor=i,n.deltaMode=0,r.unshift(n,a,h,d),t&&window.clearTimeout(t),t=window.setTimeout(function(){i=null},200),(e.event.dispatch||e.event.handle).apply(this,r)}}function c(e,t){return l.settings.adjustOldDeltas&&"mousewheel"===e.type&&t%120==0}e.fn.extend({mousewheel:function(e){return e?this[n?"on":"bind"]("mousewheel",e):this.trigger("mousewheel")},unmousewheel:function(e){return this[n?"off":"unbind"]("mousewheel",e)}})},void 0===(r="function"==typeof n?n.apply(t,s):n)||(e.exports=r)}()},285(e){var t={DEBUG:!1,assert:function(e,i){if(t.DEBUG&&!e)throw new Error("Assertion failed"+(i?": "+i:""))},GLU_TESS_MAX_COORD:1e150,TRUE_PROJECT:!1,GLU_TESS_DEFAULT_TOLERANCE:0,windingRule:{GLU_TESS_WINDING_ODD:100130,GLU_TESS_WINDING_NONZERO:100131,GLU_TESS_WINDING_POSITIVE:100132,GLU_TESS_WINDING_NEGATIVE:100133,GLU_TESS_WINDING_ABS_GEQ_TWO:100134},primitiveType:{GL_LINE_LOOP:2,GL_TRIANGLES:4,GL_TRIANGLE_STRIP:5,GL_TRIANGLE_FAN:6},errorType:{GLU_TESS_MISSING_BEGIN_POLYGON:100151,GLU_TESS_MISSING_END_POLYGON:100153,GLU_TESS_MISSING_BEGIN_CONTOUR:100152,GLU_TESS_MISSING_END_CONTOUR:100154,GLU_TESS_COORD_TOO_LARGE:100155,GLU_TESS_NEED_COMBINE_CALLBACK:100156},gluEnum:{GLU_TESS_BEGIN:100100,GLU_TESS_VERTEX:100101,GLU_TESS_END:100102,GLU_TESS_ERROR:100103,GLU_TESS_EDGE_FLAG:100104,GLU_TESS_COMBINE:100105,GLU_TESS_BEGIN_DATA:100106,GLU_TESS_VERTEX_DATA:100107,GLU_TESS_END_DATA:100108,GLU_TESS_ERROR_DATA:100109,GLU_TESS_EDGE_FLAG_DATA:100110,GLU_TESS_COMBINE_DATA:100111,GLU_TESS_MESH:100112,GLU_TESS_TOLERANCE:100142,GLU_TESS_WINDING_RULE:100140,GLU_TESS_BOUNDARY_ONLY:100141,GLU_INVALID_ENUM:100900,GLU_INVALID_VALUE:100901}};t.PQHandle,t.geom={},t.geom.vertEq=function(e,t){return e.s===t.s&&e.t===t.t},t.geom.vertLeq=function(e,t){return e.s<t.s||e.s===t.s&&e.t<=t.t},t.geom.edgeEval=function(e,t,i){var n=t.s-e.s,s=i.s-t.s;return n+s>0?n<s?t.t-e.t+(e.t-i.t)*(n/(n+s)):t.t-i.t+(i.t-e.t)*(s/(n+s)):0},t.geom.edgeSign=function(e,t,i){var n=t.s-e.s,s=i.s-t.s;return n+s>0?(t.t-i.t)*n+(t.t-e.t)*s:0},t.geom.transLeq=function(e,t){return e.t<t.t||e.t===t.t&&e.s<=t.s},t.geom.transEval=function(e,t,i){var n=t.t-e.t,s=i.t-t.t;return n+s>0?n<s?t.s-e.s+(e.s-i.s)*(n/(n+s)):t.s-i.s+(i.s-e.s)*(s/(n+s)):0},t.geom.transSign=function(e,t,i){var n=t.t-e.t,s=i.t-t.t;return n+s>0?(t.s-i.s)*n+(t.s-e.s)*s:0},t.geom.edgeGoesLeft=function(e){return t.geom.vertLeq(e.dst(),e.org)},t.geom.edgeGoesRight=function(e){return t.geom.vertLeq(e.org,e.dst())},t.geom.vertL1dist=function(e,t){return Math.abs(e.s-t.s)+Math.abs(e.t-t.t)},t.geom.vertCCW=function(e,t,i){return e.s*(t.t-i.t)+t.s*(i.t-e.t)+i.s*(e.t-t.t)>=0},t.geom.interpolate_=function(e,t,i,n){return(e=e<0?0:e)<=(i=i<0?0:i)?0===i?(t+n)/2:t+e/(e+i)*(n-t):n+i/(e+i)*(t-n)},t.geom.edgeIntersect=function(e,i,n,s,r){var o,a,l;t.geom.vertLeq(e,i)||(l=e,e=i,i=l),t.geom.vertLeq(n,s)||(l=n,n=s,s=l),t.geom.vertLeq(e,n)||(l=e,e=n,n=l,l=i,i=s,s=l),t.geom.vertLeq(n,i)?t.geom.vertLeq(i,s)?((o=t.geom.edgeEval(e,n,i))+(a=t.geom.edgeEval(n,i,s))<0&&(o=-o,a=-a),r.s=t.geom.interpolate_(o,n.s,a,i.s)):((o=t.geom.edgeSign(e,n,i))+(a=-t.geom.edgeSign(e,s,i))<0&&(o=-o,a=-a),r.s=t.geom.interpolate_(o,n.s,a,s.s)):r.s=(n.s+i.s)/2,t.geom.transLeq(e,i)||(l=e,e=i,i=l),t.geom.transLeq(n,s)||(l=n,n=s,s=l),t.geom.transLeq(e,n)||(l=e,e=n,n=l,l=i,i=s,s=l),t.geom.transLeq(n,i)?t.geom.transLeq(i,s)?((o=t.geom.transEval(e,n,i))+(a=t.geom.transEval(n,i,s))<0&&(o=-o,a=-a),r.t=t.geom.interpolate_(o,n.t,a,i.t)):((o=t.geom.transSign(e,n,i))+(a=-t.geom.transSign(e,s,i))<0&&(o=-o,a=-a),r.t=t.geom.interpolate_(o,n.t,a,s.t)):r.t=(n.t+i.t)/2},t.mesh={},t.mesh.makeEdge=function(e){var i=t.mesh.makeEdgePair_(e.eHead);return t.mesh.makeVertex_(i,e.vHead),t.mesh.makeVertex_(i.sym,e.vHead),t.mesh.makeFace_(i,e.fHead),i},t.mesh.meshSplice=function(e,i){var n=!1,s=!1;e!==i&&(i.org!==e.org&&(s=!0,t.mesh.killVertex_(i.org,e.org)),i.lFace!==e.lFace&&(n=!0,t.mesh.killFace_(i.lFace,e.lFace)),t.mesh.splice_(i,e),s||(t.mesh.makeVertex_(i,e.org),e.org.anEdge=e),n||(t.mesh.makeFace_(i,e.lFace),e.lFace.anEdge=e))},t.mesh.deleteEdge=function(e){var i=e.sym,n=!1;e.lFace!==e.rFace()&&(n=!0,t.mesh.killFace_(e.lFace,e.rFace())),e.oNext===e?t.mesh.killVertex_(e.org,null):(e.rFace().anEdge=e.oPrev(),e.org.anEdge=e.oNext,t.mesh.splice_(e,e.oPrev()),n||t.mesh.makeFace_(e,e.lFace)),i.oNext===i?(t.mesh.killVertex_(i.org,null),t.mesh.killFace_(i.lFace,null)):(e.lFace.anEdge=i.oPrev(),i.org.anEdge=i.oNext,t.mesh.splice_(i,i.oPrev())),t.mesh.killEdge_(e)},t.mesh.addEdgeVertex=function(e){var i=t.mesh.makeEdgePair_(e),n=i.sym;return t.mesh.splice_(i,e.lNext),i.org=e.dst(),t.mesh.makeVertex_(n,i.org),i.lFace=n.lFace=e.lFace,i},t.mesh.splitEdge=function(e){var i=t.mesh.addEdgeVertex(e).sym;return t.mesh.splice_(e.sym,e.sym.oPrev()),t.mesh.splice_(e.sym,i),e.sym.org=i.org,i.dst().anEdge=i.sym,i.sym.lFace=e.rFace(),i.winding=e.winding,i.sym.winding=e.sym.winding,i},t.mesh.connect=function(e,i){var n=!1,s=t.mesh.makeEdgePair_(e),r=s.sym;return i.lFace!==e.lFace&&(n=!0,t.mesh.killFace_(i.lFace,e.lFace)),t.mesh.splice_(s,e.lNext),t.mesh.splice_(r,i),s.org=e.dst(),r.org=i.org,s.lFace=r.lFace=e.lFace,e.lFace.anEdge=r,n||t.mesh.makeFace_(s,e.lFace),s},t.mesh.zapFace=function(e){var i,n=e.anEdge,s=n.lNext;do{if(s=(i=s).lNext,i.lFace=null,null===i.rFace()){i.oNext===i?t.mesh.killVertex_(i.org,null):(i.org.anEdge=i.oNext,t.mesh.splice_(i,i.oPrev()));var r=i.sym;r.oNext===r?t.mesh.killVertex_(r.org,null):(r.org.anEdge=r.oNext,t.mesh.splice_(r,r.oPrev())),t.mesh.killEdge_(i)}}while(i!==n);var o=e.prev,a=e.next;a.prev=o,o.next=a},t.mesh.meshUnion=function(e,t){var i=e.fHead,n=e.vHead,s=e.eHead,r=t.fHead,o=t.vHead,a=t.eHead;return r.next!==r&&(i.prev.next=r.next,r.next.prev=i.prev,r.prev.next=i,i.prev=r.prev),o.next!==o&&(n.prev.next=o.next,o.next.prev=n.prev,o.prev.next=n,n.prev=o.prev),a.next!==a&&(s.sym.next.sym.next=a.next,a.next.sym.next=s.sym.next,a.sym.next.sym.next=s,s.sym.next=a.sym.next),e},t.mesh.deleteMesh=function(e){},t.mesh.makeEdgePair_=function(e){var i=new t.GluHalfEdge,n=new t.GluHalfEdge,s=e.sym.next;return n.next=s,s.sym.next=i,i.next=e,e.sym.next=n,i.sym=n,i.oNext=i,i.lNext=n,n.sym=i,n.oNext=n,n.lNext=i,i},t.mesh.splice_=function(e,t){var i=e.oNext,n=t.oNext;i.sym.lNext=t,n.sym.lNext=e,e.oNext=n,t.oNext=i},t.mesh.makeVertex_=function(e,i){var n=i.prev,s=new t.GluVertex(i,n);n.next=s,i.prev=s,s.anEdge=e;var r=e;do{r.org=s,r=r.oNext}while(r!==e)},t.mesh.makeFace_=function(e,i){var n=i.prev,s=new t.GluFace(i,n);n.next=s,i.prev=s,s.anEdge=e,s.inside=i.inside;var r=e;do{r.lFace=s,r=r.lNext}while(r!==e)},t.mesh.killEdge_=function(e){var t=e.next,i=e.sym.next;t.sym.next=i,i.sym.next=t},t.mesh.killVertex_=function(e,t){var i=e.anEdge,n=i;do{n.org=t,n=n.oNext}while(n!==i);var s=e.prev,r=e.next;r.prev=s,s.next=r},t.mesh.killFace_=function(e,t){var i=e.anEdge,n=i;do{n.lFace=t,n=n.lNext}while(n!==i);var s=e.prev,r=e.next;r.prev=s,s.next=r},t.normal={},t.normal.S_UNIT_X_=1,t.normal.S_UNIT_Y_=0,t.normal.projectPolygon=function(e,i,n,s){var r=!1,o=[i,n,s];0===i&&0===n&&0===s&&(t.normal.computeNormal_(e,o),r=!0);var a,l=t.normal.longAxis_(o),h=e.mesh.vHead;if(t.TRUE_PROJECT){t.normal.normalize_(o);var c=[0,0,0],d=[0,0,0];c[l]=0,c[(l+1)%3]=t.normal.S_UNIT_X_,c[(l+2)%3]=t.normal.S_UNIT_Y_;var u=t.normal.dot_(c,o);for(c[0]-=u*o[0],c[1]-=u*o[1],c[2]-=u*o[2],t.normal.normalize_(c),d[0]=o[1]*c[2]-o[2]*c[1],d[1]=o[2]*c[0]-o[0]*c[2],d[2]=o[0]*c[1]-o[1]*c[0],t.normal.normalize_(d),a=h.next;a!==h;a=a.next)a.s=t.normal.dot_(a.coords,c),a.t=t.normal.dot_(a.coords,d)}else{var p=(l+1)%3,g=(l+2)%3,f=o[l]>0?1:-1;for(a=h.next;a!==h;a=a.next)a.s=a.coords[p],a.t=f*a.coords[g]}r&&t.normal.checkOrientation_(e)},t.normal.dot_=function(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]},t.normal.normalize_=function(e){var t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2];t=Math.sqrt(t),e[0]/=t,e[1]/=t,e[2]/=t},t.normal.longAxis_=function(e){var t=0;return Math.abs(e[1])>Math.abs(e[0])&&(t=1),Math.abs(e[2])>Math.abs(e[t])&&(t=2),t},t.normal.computeNormal_=function(e,i){var n,s=[-2*t.GLU_TESS_MAX_COORD,-2*t.GLU_TESS_MAX_COORD,-2*t.GLU_TESS_MAX_COORD],r=[2*t.GLU_TESS_MAX_COORD,2*t.GLU_TESS_MAX_COORD,2*t.GLU_TESS_MAX_COORD],o=[],a=[],l=e.mesh.vHead;for(n=l.next;n!==l;n=n.next)for(var h=0;h<3;++h){var c=n.coords[h];c<r[h]&&(r[h]=c,a[h]=n),c>s[h]&&(s[h]=c,o[h]=n)}var d=0;if(s[1]-r[1]>s[0]-r[0]&&(d=1),s[2]-r[2]>s[d]-r[d]&&(d=2),r[d]>=s[d])return i[0]=0,i[1]=0,void(i[2]=1);var u=0,p=a[d],g=o[d],f=[0,0,0],m=[p.coords[0]-g.coords[0],p.coords[1]-g.coords[1],p.coords[2]-g.coords[2]],_=[0,0,0];for(n=l.next;n!==l;n=n.next){_[0]=n.coords[0]-g.coords[0],_[1]=n.coords[1]-g.coords[1],_[2]=n.coords[2]-g.coords[2],f[0]=m[1]*_[2]-m[2]*_[1],f[1]=m[2]*_[0]-m[0]*_[2],f[2]=m[0]*_[1]-m[1]*_[0];var y=f[0]*f[0]+f[1]*f[1]+f[2]*f[2];y>u&&(u=y,i[0]=f[0],i[1]=f[1],i[2]=f[2])}u<=0&&(i[0]=i[1]=i[2]=0,i[t.normal.longAxis_(m)]=1)},t.normal.checkOrientation_=function(e){for(var t=0,i=e.mesh.fHead,n=i.next;n!==i;n=n.next){var s=n.anEdge;if(!(s.winding<=0))do{t+=(s.org.s-s.dst().s)*(s.org.t+s.dst().t),s=s.lNext}while(s!==n.anEdge)}if(t<0)for(var r=e.mesh.vHead,o=r.next;o!==r;o=o.next)o.t=-o.t},t.render={},t.render.renderMesh=function(e,i,n){for(var s=!1,r=-1,o=i.fHead.prev;o!==i.fHead;o=o.prev)if(o.inside){s||(e.callBeginCallback(t.primitiveType.GL_TRIANGLES),s=!0);var a=o.anEdge;do{if(n){var l=a.rFace().inside?0:1;r!==l&&(r=l,e.callEdgeFlagCallback(!!r))}e.callVertexCallback(a.org.data),a=a.lNext}while(a!==o.anEdge)}s&&e.callEndCallback()},t.render.renderBoundary=function(e,i){for(var n=i.fHead.next;n!==i.fHead;n=n.next)if(n.inside){e.callBeginCallback(t.primitiveType.GL_LINE_LOOP);var s=n.anEdge;do{e.callVertexCallback(s.org.data),s=s.lNext}while(s!==n.anEdge);e.callEndCallback()}},t.sweep={},t.sweep.SENTINEL_COORD_=4*t.GLU_TESS_MAX_COORD,t.sweep.TOLERANCE_NONZERO_=!1,t.sweep.computeInterior=function(e){var i;for(e.fatalError=!1,t.sweep.removeDegenerateEdges_(e),t.sweep.initPriorityQ_(e),t.sweep.initEdgeDict_(e);null!==(i=e.pq.extractMin());){for(;;){var n=e.pq.minimum();if(null===n||!t.geom.vertEq(n,i))break;n=e.pq.extractMin(),t.sweep.spliceMergeVertices_(e,i.anEdge,n.anEdge)}t.sweep.sweepEvent_(e,i)}var s=e.dict.getMin().getKey();e.event=s.eUp.org,t.sweep.doneEdgeDict_(e),t.sweep.donePriorityQ_(e),t.sweep.removeDegenerateFaces_(e.mesh),e.mesh.checkMesh()},t.sweep.addWinding_=function(e,t){e.winding+=t.winding,e.sym.winding+=t.sym.winding},t.sweep.edgeLeq_=function(e,i,n){var s=e.event,r=i.eUp,o=n.eUp;return r.dst()===s?o.dst()===s?t.geom.vertLeq(r.org,o.org)?t.geom.edgeSign(o.dst(),r.org,o.org)<=0:t.geom.edgeSign(r.dst(),o.org,r.org)>=0:t.geom.edgeSign(o.dst(),s,o.org)<=0:o.dst()===s?t.geom.edgeSign(r.dst(),s,r.org)>=0:t.geom.edgeEval(r.dst(),s,r.org)>=t.geom.edgeEval(o.dst(),s,o.org)},t.sweep.deleteRegion_=function(e,t){t.fixUpperEdge,t.eUp.activeRegion=null,e.dict.deleteNode(t.nodeUp),t.nodeUp=null},t.sweep.fixUpperEdge_=function(e,i){t.mesh.deleteEdge(e.eUp),e.fixUpperEdge=!1,e.eUp=i,i.activeRegion=e},t.sweep.topLeftRegion_=function(e){var i=e.eUp.org;do{e=e.regionAbove()}while(e.eUp.org===i);if(e.fixUpperEdge){var n=t.mesh.connect(e.regionBelow().eUp.sym,e.eUp.lNext);t.sweep.fixUpperEdge_(e,n),e=e.regionAbove()}return e},t.sweep.topRightRegion_=function(e){var t=e.eUp.dst();do{e=e.regionAbove()}while(e.eUp.dst()===t);return e},t.sweep.addRegionBelow_=function(e,i,n){var s=new t.ActiveRegion;return s.eUp=n,s.nodeUp=e.dict.insertBefore(i.nodeUp,s),n.activeRegion=s,s},t.sweep.isWindingInside_=function(e,i){switch(e.windingRule){case t.windingRule.GLU_TESS_WINDING_ODD:return!!(1&i);case t.windingRule.GLU_TESS_WINDING_NONZERO:return 0!==i;case t.windingRule.GLU_TESS_WINDING_POSITIVE:return i>0;case t.windingRule.GLU_TESS_WINDING_NEGATIVE:return i<0;case t.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO:return i>=2||i<=-2}return!1},t.sweep.computeWinding_=function(e,i){i.windingNumber=i.regionAbove().windingNumber+i.eUp.winding,i.inside=t.sweep.isWindingInside_(e,i.windingNumber)},t.sweep.finishRegion_=function(e,i){var n=i.eUp,s=n.lFace;s.inside=i.inside,s.anEdge=n,t.sweep.deleteRegion_(e,i)},t.sweep.finishLeftRegions_=function(e,i,n){for(var s=i,r=i.eUp;s!==n;){s.fixUpperEdge=!1;var o=s.regionBelow(),a=o.eUp;if(a.org!==r.org){if(!o.fixUpperEdge){t.sweep.finishRegion_(e,s);break}a=t.mesh.connect(r.lPrev(),a.sym),t.sweep.fixUpperEdge_(o,a)}r.oNext!==a&&(t.mesh.meshSplice(a.oPrev(),a),t.mesh.meshSplice(r,a)),t.sweep.finishRegion_(e,s),r=o.eUp,s=o}return r},t.sweep.addRightEdges_=function(e,i,n,s,r,o){var a=!0,l=n;do{t.sweep.addRegionBelow_(e,i,l.sym),l=l.oNext}while(l!==s);null===r&&(r=i.regionBelow().eUp.rPrev());for(var h,c=i,d=r;(l=(h=c.regionBelow()).eUp.sym).org===d.org;)l.oNext!==d&&(t.mesh.meshSplice(l.oPrev(),l),t.mesh.meshSplice(d.oPrev(),l)),h.windingNumber=c.windingNumber-l.winding,h.inside=t.sweep.isWindingInside_(e,h.windingNumber),c.dirty=!0,!a&&t.sweep.checkForRightSplice_(e,c)&&(t.sweep.addWinding_(l,d),t.sweep.deleteRegion_(e,c),t.mesh.deleteEdge(d)),a=!1,c=h,d=l;c.dirty=!0,o&&t.sweep.walkDirtyRegions_(e,c)},t.sweep.callCombine_=function(e,i,n,s,r){var o=[i.coords[0],i.coords[1],i.coords[2]];i.data=null,i.data=e.callCombineCallback(o,n,s),null===i.data&&(r?e.fatalError||(e.callErrorCallback(t.errorType.GLU_TESS_NEED_COMBINE_CALLBACK),e.fatalError=!0):i.data=n[0])},t.sweep.spliceMergeVertices_=function(e,i,n){var s=[null,null,null,null];s[0]=i.org.data,s[1]=n.org.data,t.sweep.callCombine_(e,i.org,s,[.5,.5,0,0],!1),t.mesh.meshSplice(i,n)},t.sweep.vertexWeights_=function(e,i,n,s,r){var o=t.geom.vertL1dist(i,e),a=t.geom.vertL1dist(n,e),l=r,h=r+1;s[l]=.5*a/(o+a),s[h]=.5*o/(o+a),e.coords[0]+=s[l]*i.coords[0]+s[h]*n.coords[0],e.coords[1]+=s[l]*i.coords[1]+s[h]*n.coords[1],e.coords[2]+=s[l]*i.coords[2]+s[h]*n.coords[2]},t.sweep.getIntersectData_=function(e,i,n,s,r,o){var a=[0,0,0,0],l=[n.data,s.data,r.data,o.data];i.coords[0]=i.coords[1]=i.coords[2]=0,t.sweep.vertexWeights_(i,n,s,a,0),t.sweep.vertexWeights_(i,r,o,a,2),t.sweep.callCombine_(e,i,l,a,!0)},t.sweep.checkForRightSplice_=function(e,i){var n=i.regionBelow(),s=i.eUp,r=n.eUp;if(t.geom.vertLeq(s.org,r.org)){if(t.geom.edgeSign(r.dst(),s.org,r.org)>0)return!1;t.geom.vertEq(s.org,r.org)?s.org!==r.org&&(e.pq.remove(s.org.pqHandle),t.sweep.spliceMergeVertices_(e,r.oPrev(),s)):(t.mesh.splitEdge(r.sym),t.mesh.meshSplice(s,r.oPrev()),i.dirty=n.dirty=!0)}else{if(t.geom.edgeSign(s.dst(),r.org,s.org)<0)return!1;i.regionAbove().dirty=i.dirty=!0,t.mesh.splitEdge(s.sym),t.mesh.meshSplice(r.oPrev(),s)}return!0},t.sweep.checkForLeftSplice_=function(e,i){var n,s=i.regionBelow(),r=i.eUp,o=s.eUp;if(t.geom.vertLeq(r.dst(),o.dst())){if(t.geom.edgeSign(r.dst(),o.dst(),r.org)<0)return!1;i.regionAbove().dirty=i.dirty=!0,n=t.mesh.splitEdge(r),t.mesh.meshSplice(o.sym,n),n.lFace.inside=i.inside}else{if(t.geom.edgeSign(o.dst(),r.dst(),o.org)>0)return!1;i.dirty=s.dirty=!0,n=t.mesh.splitEdge(o),t.mesh.meshSplice(r.lNext,o.sym),n.rFace().inside=i.inside}return!0},t.sweep.checkForIntersect_=function(e,i){var n=i.regionBelow(),s=i.eUp,r=n.eUp,o=s.org,a=r.org,l=s.dst(),h=r.dst(),c=new t.GluVertex;if(o===a)return!1;if(Math.min(o.t,l.t)>Math.max(a.t,h.t))return!1;if(t.geom.vertLeq(o,a)){if(t.geom.edgeSign(h,o,a)>0)return!1}else if(t.geom.edgeSign(l,a,o)<0)return!1;t.geom.edgeIntersect(l,o,h,a,c),t.geom.vertLeq(c,e.event)&&(c.s=e.event.s,c.t=e.event.t);var d=t.geom.vertLeq(o,a)?o:a;if(t.geom.vertLeq(d,c)&&(c.s=d.s,c.t=d.t),t.geom.vertEq(c,o)||t.geom.vertEq(c,a))return t.sweep.checkForRightSplice_(e,i),!1;if(!t.geom.vertEq(l,e.event)&&t.geom.edgeSign(l,e.event,c)>=0||!t.geom.vertEq(h,e.event)&&t.geom.edgeSign(h,e.event,c)<=0){if(h===e.event)return t.mesh.splitEdge(s.sym),t.mesh.meshSplice(r.sym,s),s=(i=t.sweep.topLeftRegion_(i)).regionBelow().eUp,t.sweep.finishLeftRegions_(e,i.regionBelow(),n),t.sweep.addRightEdges_(e,i,s.oPrev(),s,s,!0),!0;if(l===e.event){t.mesh.splitEdge(r.sym),t.mesh.meshSplice(s.lNext,r.oPrev()),n=i;var u=(i=t.sweep.topRightRegion_(i)).regionBelow().eUp.rPrev();return n.eUp=r.oPrev(),r=t.sweep.finishLeftRegions_(e,n,null),t.sweep.addRightEdges_(e,i,r.oNext,s.rPrev(),u,!0),!0}return t.geom.edgeSign(l,e.event,c)>=0&&(i.regionAbove().dirty=i.dirty=!0,t.mesh.splitEdge(s.sym),s.org.s=e.event.s,s.org.t=e.event.t),t.geom.edgeSign(h,e.event,c)<=0&&(i.dirty=n.dirty=!0,t.mesh.splitEdge(r.sym),r.org.s=e.event.s,r.org.t=e.event.t),!1}return t.mesh.splitEdge(s.sym),t.mesh.splitEdge(r.sym),t.mesh.meshSplice(r.oPrev(),s),s.org.s=c.s,s.org.t=c.t,s.org.pqHandle=e.pq.insert(s.org),t.sweep.getIntersectData_(e,s.org,o,l,a,h),i.regionAbove().dirty=i.dirty=n.dirty=!0,!1},t.sweep.walkDirtyRegions_=function(e,i){for(var n=i.regionBelow();;){for(;n.dirty;)i=n,n=n.regionBelow();if(!i.dirty&&(n=i,null===(i=i.regionAbove())||!i.dirty))return;i.dirty=!1;var s=i.eUp,r=n.eUp;if(s.dst()!==r.dst()&&t.sweep.checkForLeftSplice_(e,i)&&(n.fixUpperEdge?(t.sweep.deleteRegion_(e,n),t.mesh.deleteEdge(r),r=(n=i.regionBelow()).eUp):i.fixUpperEdge&&(t.sweep.deleteRegion_(e,i),t.mesh.deleteEdge(s),s=(i=n.regionAbove()).eUp)),s.org!==r.org)if(s.dst()===r.dst()||i.fixUpperEdge||n.fixUpperEdge||s.dst()!==e.event&&r.dst()!==e.event)t.sweep.checkForRightSplice_(e,i);else if(t.sweep.checkForIntersect_(e,i))return;s.org===r.org&&s.dst()===r.dst()&&(t.sweep.addWinding_(r,s),t.sweep.deleteRegion_(e,i),t.mesh.deleteEdge(s),i=n.regionAbove())}},t.sweep.connectRightVertex_=function(e,i,n){var s,r=n.oNext,o=i.regionBelow(),a=i.eUp,l=o.eUp,h=!1;(a.dst()!==l.dst()&&t.sweep.checkForIntersect_(e,i),t.geom.vertEq(a.org,e.event)&&(t.mesh.meshSplice(r.oPrev(),a),r=(i=t.sweep.topLeftRegion_(i)).regionBelow().eUp,t.sweep.finishLeftRegions_(e,i.regionBelow(),o),h=!0),t.geom.vertEq(l.org,e.event)&&(t.mesh.meshSplice(n,l.oPrev()),n=t.sweep.finishLeftRegions_(e,o,null),h=!0),h)?t.sweep.addRightEdges_(e,i,n.oNext,r,r,!0):(s=t.geom.vertLeq(l.org,a.org)?l.oPrev():a,s=t.mesh.connect(n.lPrev(),s),t.sweep.addRightEdges_(e,i,s,s.oNext,s.oNext,!1),s.sym.activeRegion.fixUpperEdge=!0,t.sweep.walkDirtyRegions_(e,i))},t.sweep.connectLeftDegenerate_=function(e,i,n){var s=i.eUp;if(t.geom.vertEq(s.org,n))t.sweep.TOLERANCE_NONZERO_&&t.sweep.spliceMergeVertices_(e,s,n.anEdge);else{if(!t.geom.vertEq(s.dst(),n))return t.mesh.splitEdge(s.sym),i.fixUpperEdge&&(t.mesh.deleteEdge(s.oNext),i.fixUpperEdge=!1),t.mesh.meshSplice(n.anEdge,s),void t.sweep.sweepEvent_(e,n);if(t.sweep.TOLERANCE_NONZERO_){var r=(i=t.sweep.topRightRegion_(i)).regionBelow(),o=r.eUp.sym,a=o.oNext,l=a;r.fixUpperEdge&&(t.sweep.deleteRegion_(e,r),t.mesh.deleteEdge(o),o=a.oPrev()),t.mesh.meshSplice(n.anEdge,o),t.geom.edgeGoesLeft(a)||(a=null),t.sweep.addRightEdges_(e,i,o.oNext,l,a,!0)}}},t.sweep.connectLeftVertex_=function(e,i){var n=new t.ActiveRegion;n.eUp=i.anEdge.sym;var s=e.dict.search(n).getKey(),r=s.regionBelow(),o=s.eUp,a=r.eUp;if(0!==t.geom.edgeSign(o.dst(),i,o.org)){var l,h=t.geom.vertLeq(a.dst(),o.dst())?s:r;if(s.inside||h.fixUpperEdge){if(h===s)l=t.mesh.connect(i.anEdge.sym,o.lNext);else l=t.mesh.connect(a.dNext(),i.anEdge).sym;h.fixUpperEdge?t.sweep.fixUpperEdge_(h,l):t.sweep.computeWinding_(e,t.sweep.addRegionBelow_(e,s,l)),t.sweep.sweepEvent_(e,i)}else t.sweep.addRightEdges_(e,s,i.anEdge,i.anEdge,null,!0)}else t.sweep.connectLeftDegenerate_(e,s,i)},t.sweep.sweepEvent_=function(e,i){e.event=i;for(var n=i.anEdge;null===n.activeRegion;)if((n=n.oNext)===i.anEdge)return void t.sweep.connectLeftVertex_(e,i);var s=t.sweep.topLeftRegion_(n.activeRegion),r=s.regionBelow(),o=r.eUp,a=t.sweep.finishLeftRegions_(e,r,null);a.oNext===o?t.sweep.connectRightVertex_(e,s,a):t.sweep.addRightEdges_(e,s,a.oNext,o,o,!0)},t.sweep.addSentinel_=function(e,i){var n=new t.ActiveRegion,s=t.mesh.makeEdge(e.mesh);s.org.s=t.sweep.SENTINEL_COORD_,s.org.t=i,s.dst().s=-t.sweep.SENTINEL_COORD_,s.dst().t=i,e.event=s.dst(),n.eUp=s,n.windingNumber=0,n.inside=!1,n.fixUpperEdge=!1,n.sentinel=!0,n.dirty=!1,n.nodeUp=e.dict.insert(n)},t.sweep.initEdgeDict_=function(e){e.dict=new t.Dict(e,t.sweep.edgeLeq_),t.sweep.addSentinel_(e,-t.sweep.SENTINEL_COORD_),t.sweep.addSentinel_(e,t.sweep.SENTINEL_COORD_)},t.sweep.doneEdgeDict_=function(e){for(var i;null!==(i=e.dict.getMin().getKey());)i.sentinel,t.sweep.deleteRegion_(e,i);e.dict=null},t.sweep.removeDegenerateEdges_=function(e){for(var i,n=e.mesh.eHead,s=n.next;s!==n;s=i){i=s.next;var r=s.lNext;t.geom.vertEq(s.org,s.dst())&&s.lNext.lNext!==s&&(t.sweep.spliceMergeVertices_(e,r,s),t.mesh.deleteEdge(s),r=(s=r).lNext),r.lNext===s&&(r!==s&&(r!==i&&r!==i.sym||(i=i.next),t.mesh.deleteEdge(r)),s!==i&&s!==i.sym||(i=i.next),t.mesh.deleteEdge(s))}},t.sweep.initPriorityQ_=function(e){var i=new t.PriorityQ;e.pq=i;var n,s=e.mesh.vHead;for(n=s.next;n!==s;n=n.next)n.pqHandle=i.insert(n);i.init()},t.sweep.donePriorityQ_=function(e){e.pq.deleteQ(),e.pq=null},t.sweep.removeDegenerateFaces_=function(e){for(var i,n=e.fHead.next;n!==e.fHead;n=i){i=n.next;var s=n.anEdge;s.lNext.lNext===s&&(t.sweep.addWinding_(s.oNext,s),t.mesh.deleteEdge(s))}},t.tessmono={},t.tessmono.tessellateMonoRegion_=function(e){for(var i=e.anEdge;t.geom.vertLeq(i.dst(),i.org);i=i.lPrev());for(;t.geom.vertLeq(i.org,i.dst());i=i.lNext);for(var n,s=i.lPrev();i.lNext!==s;)if(t.geom.vertLeq(i.dst(),s.org)){for(;s.lNext!==i&&(t.geom.edgeGoesLeft(s.lNext)||t.geom.edgeSign(s.org,s.dst(),s.lNext.dst())<=0);)s=(n=t.mesh.connect(s.lNext,s)).sym;s=s.lPrev()}else{for(;s.lNext!==i&&(t.geom.edgeGoesRight(i.lPrev())||t.geom.edgeSign(i.dst(),i.org,i.lPrev().org)>=0);)n=t.mesh.connect(i,i.lPrev()),i=n.sym;i=i.lNext}for(;s.lNext.lNext!==i;)s=(n=t.mesh.connect(s.lNext,s)).sym},t.tessmono.tessellateInterior=function(e){for(var i,n=e.fHead.next;n!==e.fHead;n=i)i=n.next,n.inside&&t.tessmono.tessellateMonoRegion_(n)},t.tessmono.discardExterior=function(e){for(var i,n=e.fHead.next;n!==e.fHead;n=i)i=n.next,n.inside||t.mesh.zapFace(n)},t.tessmono.setWindingNumber=function(e,i,n){for(var s,r=e.eHead.next;r!==e.eHead;r=s)s=r.next,r.rFace().inside!==r.lFace.inside?r.winding=r.lFace.inside?i:-i:n?t.mesh.deleteEdge(r):r.winding=0},t.Dict=function(e,i){this.head_=new t.DictNode,this.frame_=e,this.leq_=i},t.Dict.prototype.deleteDict_=function(){},t.Dict.prototype.insertBefore=function(e,i){do{e=e.prev}while(null!==e.key&&!this.leq_(this.frame_,e.key,i));var n=new t.DictNode(i,e.next,e);return e.next.prev=n,e.next=n,n},t.Dict.prototype.insert=function(e){return this.insertBefore(this.head_,e)},t.Dict.prototype.deleteNode=function(e){e.next.prev=e.prev,e.prev.next=e.next},t.Dict.prototype.search=function(e){var t=this.head_;do{t=t.next}while(null!==t.key&&!this.leq_(this.frame_,e,t.key));return t},t.Dict.prototype.getMin=function(){return this.head_.next},t.Dict.prototype.getMax=function(){return this.head_.prev},t.DictNode=function(e,t,i){this.key=e||null,this.next=t||this,this.prev=i||this},t.DictNode.prototype.getKey=function(){return this.key},t.DictNode.prototype.getSuccessor=function(){return this.next},t.DictNode.prototype.getPredecessor=function(){return this.prev},t.GluTesselator=function(){this.state_=t.GluTesselator.tessState_.T_DORMANT,this.lastEdge_=null,this.mesh=null,this.errorCallback_=null,this.normal_=[0,0,0],this.windingRule=t.windingRule.GLU_TESS_WINDING_ODD,this.fatalError=!1,this.dict=null,this.pq=null,this.event=null,this.combineCallback_=null,this.boundaryOnly_=!1,this.beginCallback_=null,this.edgeFlagCallback_=null,this.vertexCallback_=null,this.endCallback_=null,this.meshCallback_=null,this.polygonData_=null},t.GluTesselator.tessState_={T_DORMANT:0,T_IN_POLYGON:1,T_IN_CONTOUR:2},t.GluTesselator.prototype.gluDeleteTess=function(){this.requireState_(t.GluTesselator.tessState_.T_DORMANT)},t.GluTesselator.prototype.gluTessProperty=function(e,i){switch(e){case t.gluEnum.GLU_TESS_TOLERANCE:return;case t.gluEnum.GLU_TESS_WINDING_RULE:var n=i;switch(n){case t.windingRule.GLU_TESS_WINDING_ODD:case t.windingRule.GLU_TESS_WINDING_NONZERO:case t.windingRule.GLU_TESS_WINDING_POSITIVE:case t.windingRule.GLU_TESS_WINDING_NEGATIVE:case t.windingRule.GLU_TESS_WINDING_ABS_GEQ_TWO:return void(this.windingRule=n)}break;case t.gluEnum.GLU_TESS_BOUNDARY_ONLY:return void(this.boundaryOnly_=!!i);default:return void this.callErrorCallback(t.gluEnum.GLU_INVALID_ENUM)}this.callErrorCallback(t.gluEnum.GLU_INVALID_VALUE)},t.GluTesselator.prototype.gluGetTessProperty=function(e){switch(e){case t.gluEnum.GLU_TESS_TOLERANCE:return 0;case t.gluEnum.GLU_TESS_WINDING_RULE:return this.windingRule;case t.gluEnum.GLU_TESS_BOUNDARY_ONLY:return this.boundaryOnly_;default:this.callErrorCallback(t.gluEnum.GLU_INVALID_ENUM)}return!1},t.GluTesselator.prototype.gluTessNormal=function(e,t,i){this.normal_[0]=e,this.normal_[1]=t,this.normal_[2]=i},t.GluTesselator.prototype.gluTessCallback=function(e,i){var n=i||null;switch(e){case t.gluEnum.GLU_TESS_BEGIN:case t.gluEnum.GLU_TESS_BEGIN_DATA:return void(this.beginCallback_=n);case t.gluEnum.GLU_TESS_EDGE_FLAG:case t.gluEnum.GLU_TESS_EDGE_FLAG_DATA:return void(this.edgeFlagCallback_=n);case t.gluEnum.GLU_TESS_VERTEX:case t.gluEnum.GLU_TESS_VERTEX_DATA:return void(this.vertexCallback_=n);case t.gluEnum.GLU_TESS_END:case t.gluEnum.GLU_TESS_END_DATA:return void(this.endCallback_=n);case t.gluEnum.GLU_TESS_ERROR:case t.gluEnum.GLU_TESS_ERROR_DATA:return void(this.errorCallback_=n);case t.gluEnum.GLU_TESS_COMBINE:case t.gluEnum.GLU_TESS_COMBINE_DATA:return void(this.combineCallback_=n);case t.gluEnum.GLU_TESS_MESH:return void(this.meshCallback_=n);default:return void this.callErrorCallback(t.gluEnum.GLU_INVALID_ENUM)}},t.GluTesselator.prototype.gluTessVertex=function(e,i){var n=!1,s=[0,0,0];this.requireState_(t.GluTesselator.tessState_.T_IN_CONTOUR);for(var r=0;r<3;++r){var o=e[r];o<-t.GLU_TESS_MAX_COORD&&(o=-t.GLU_TESS_MAX_COORD,n=!0),o>t.GLU_TESS_MAX_COORD&&(o=t.GLU_TESS_MAX_COORD,n=!0),s[r]=o}n&&this.callErrorCallback(t.errorType.GLU_TESS_COORD_TOO_LARGE),this.addVertex_(s,i)},t.GluTesselator.prototype.gluTessBeginPolygon=function(e){this.requireState_(t.GluTesselator.tessState_.T_DORMANT),this.state_=t.GluTesselator.tessState_.T_IN_POLYGON,this.mesh=new t.GluMesh,this.polygonData_=e},t.GluTesselator.prototype.gluTessBeginContour=function(){this.requireState_(t.GluTesselator.tessState_.T_IN_POLYGON),this.state_=t.GluTesselator.tessState_.T_IN_CONTOUR,this.lastEdge_=null},t.GluTesselator.prototype.gluTess