X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/d0dd5302acbc21db028abb05c319d753594fba31..d41737c6a0e4a639545268e09e438575f92e7709:/vendor/assets/iD/iD/mapillary-js/mapillary.js diff --git a/vendor/assets/iD/iD/mapillary-js/mapillary.js b/vendor/assets/iD/iD/mapillary-js/mapillary.js index daaeeec55..2f5ed5351 100644 --- a/vendor/assets/iD/iD/mapillary-js/mapillary.js +++ b/vendor/assets/iD/iD/mapillary-js/mapillary.js @@ -156,7 +156,7 @@ function getSegDistSq(px, py, a, b) { return dx * dx + dy * dy; } -},{"tinyqueue":226}],2:[function(require,module,exports){ +},{"tinyqueue":243}],2:[function(require,module,exports){ /* * Copyright (C) 2008 Apple Inc. All Rights Reserved. * @@ -490,192 +490,6 @@ module.exports = (function split(undef) { })(); },{}],6:[function(require,module,exports){ -// shim for using process in browser -var process = module.exports = {}; - -// cached from whatever global is present so that test runners that stub it -// don't break things. But we need to wrap it in a try catch in case it is -// wrapped in strict mode code which doesn't define any globals. It's inside a -// function because try/catches deoptimize in certain engines. - -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) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - -} -function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - 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 (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); -} - -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } -}; - -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; - -function noop() {} - -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; -process.prependListener = noop; -process.prependOnceListener = noop; - -process.listeners = function (name) { return [] } - -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; - -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; - -},{}],7:[function(require,module,exports){ /*! * The buffer module from node.js, for the browser. * @@ -724,16 +538,32 @@ function typedArraySupport () { // Can typed array instances can be augmented? try { var arr = new Uint8Array(1) - arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} + arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } } return arr.foo() === 42 } catch (e) { return false } } +Object.defineProperty(Buffer.prototype, 'parent', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.buffer + } +}) + +Object.defineProperty(Buffer.prototype, 'offset', { + enumerable: true, + get: function () { + if (!Buffer.isBuffer(this)) return undefined + return this.byteOffset + } +}) + function createBuffer (length) { if (length > K_MAX_LENGTH) { - throw new RangeError('Invalid typed array length') + throw new RangeError('The value "' + length + '" is invalid for option "size"') } // Return an augmented `Uint8Array` instance var buf = new Uint8Array(length) @@ -755,8 +585,8 @@ function Buffer (arg, encodingOrOffset, length) { // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { - throw new Error( - 'If encoding is specified then the first argument must be a string' + throw new TypeError( + 'The "string" argument must be of type string. Received type number' ) } return allocUnsafe(arg) @@ -765,7 +595,7 @@ function Buffer (arg, encodingOrOffset, length) { } // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 -if (typeof Symbol !== 'undefined' && Symbol.species && +if (typeof Symbol !== 'undefined' && Symbol.species != null && Buffer[Symbol.species] === Buffer) { Object.defineProperty(Buffer, Symbol.species, { value: null, @@ -778,19 +608,51 @@ if (typeof Symbol !== 'undefined' && Symbol.species && Buffer.poolSize = 8192 // not used by this implementation function from (value, encodingOrOffset, length) { - if (typeof value === 'number') { - throw new TypeError('"value" argument must not be a number') + if (typeof value === 'string') { + return fromString(value, encodingOrOffset) + } + + if (ArrayBuffer.isView(value)) { + return fromArrayLike(value) + } + + if (value == null) { + throw TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) } - if (isArrayBuffer(value)) { + if (isInstance(value, ArrayBuffer) || + (value && isInstance(value.buffer, ArrayBuffer))) { return fromArrayBuffer(value, encodingOrOffset, length) } - if (typeof value === 'string') { - return fromString(value, encodingOrOffset) + if (typeof value === 'number') { + throw new TypeError( + 'The "value" argument must not be of type number. Received type number' + ) } - return fromObject(value) + var valueOf = value.valueOf && value.valueOf() + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length) + } + + var b = fromObject(value) + if (b) return b + + if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && + typeof value[Symbol.toPrimitive] === 'function') { + return Buffer.from( + value[Symbol.toPrimitive]('string'), encodingOrOffset, length + ) + } + + throw new TypeError( + 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + + 'or Array-like Object. Received type ' + (typeof value) + ) } /** @@ -812,9 +674,9 @@ Buffer.__proto__ = Uint8Array function assertSize (size) { if (typeof size !== 'number') { - throw new TypeError('"size" argument must be a number') + throw new TypeError('"size" argument must be of type number') } else if (size < 0) { - throw new RangeError('"size" argument must not be negative') + throw new RangeError('The value "' + size + '" is invalid for option "size"') } } @@ -866,7 +728,7 @@ function fromString (string, encoding) { } if (!Buffer.isEncoding(encoding)) { - throw new TypeError('"encoding" must be a valid string encoding') + throw new TypeError('Unknown encoding: ' + encoding) } var length = byteLength(string, encoding) | 0 @@ -895,11 +757,11 @@ function fromArrayLike (array) { function fromArrayBuffer (array, byteOffset, length) { if (byteOffset < 0 || array.byteLength < byteOffset) { - throw new RangeError('\'offset\' is out of bounds') + throw new RangeError('"offset" is outside of buffer bounds') } if (array.byteLength < byteOffset + (length || 0)) { - throw new RangeError('\'length\' is out of bounds') + throw new RangeError('"length" is outside of buffer bounds') } var buf @@ -929,20 +791,16 @@ function fromObject (obj) { return buf } - if (obj) { - if (isArrayBufferView(obj) || 'length' in obj) { - if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { - return createBuffer(0) - } - return fromArrayLike(obj) - } - - if (obj.type === 'Buffer' && Array.isArray(obj.data)) { - return fromArrayLike(obj.data) + if (obj.length !== undefined) { + if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { + return createBuffer(0) } + return fromArrayLike(obj) } - throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') + if (obj.type === 'Buffer' && Array.isArray(obj.data)) { + return fromArrayLike(obj.data) + } } function checked (length) { @@ -963,12 +821,17 @@ function SlowBuffer (length) { } Buffer.isBuffer = function isBuffer (b) { - return b != null && b._isBuffer === true + return b != null && b._isBuffer === true && + b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false } Buffer.compare = function compare (a, b) { + if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) + if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') + throw new TypeError( + 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' + ) } if (a === b) return 0 @@ -1029,6 +892,9 @@ Buffer.concat = function concat (list, length) { var pos = 0 for (i = 0; i < list.length; ++i) { var buf = list[i] + if (isInstance(buf, Uint8Array)) { + buf = Buffer.from(buf) + } if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers') } @@ -1042,15 +908,19 @@ function byteLength (string, encoding) { if (Buffer.isBuffer(string)) { return string.length } - if (isArrayBufferView(string) || isArrayBuffer(string)) { + if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { return string.byteLength } if (typeof string !== 'string') { - string = '' + string + throw new TypeError( + 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + + 'Received type ' + typeof string + ) } var len = string.length - if (len === 0) return 0 + var mustMatch = (arguments.length > 2 && arguments[2] === true) + if (!mustMatch && len === 0) return 0 // Use a for loop to avoid recursion var loweredCase = false @@ -1062,7 +932,6 @@ function byteLength (string, encoding) { return len case 'utf8': case 'utf-8': - case undefined: return utf8ToBytes(string).length case 'ucs2': case 'ucs-2': @@ -1074,7 +943,9 @@ function byteLength (string, encoding) { case 'base64': return base64ToBytes(string).length default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 + if (loweredCase) { + return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 + } encoding = ('' + encoding).toLowerCase() loweredCase = true } @@ -1210,6 +1081,8 @@ Buffer.prototype.toString = function toString () { return slowToString.apply(this, arguments) } +Buffer.prototype.toLocaleString = Buffer.prototype.toString + Buffer.prototype.equals = function equals (b) { if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') if (this === b) return true @@ -1219,16 +1092,20 @@ Buffer.prototype.equals = function equals (b) { Buffer.prototype.inspect = function inspect () { var str = '' var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' - } + str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() + if (this.length > max) str += ' ... ' return '' } Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (isInstance(target, Uint8Array)) { + target = Buffer.from(target, target.offset, target.byteLength) + } if (!Buffer.isBuffer(target)) { - throw new TypeError('Argument must be a Buffer') + throw new TypeError( + 'The "target" argument must be one of type Buffer or Uint8Array. ' + + 'Received type ' + (typeof target) + ) } if (start === undefined) { @@ -1307,7 +1184,7 @@ function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000 } - byteOffset = +byteOffset // Coerce to Number. + byteOffset = +byteOffset // Coerce to Number. if (numberIsNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : (buffer.length - 1) @@ -1430,9 +1307,7 @@ function hexWrite (buf, string, offset, length) { } } - // must be an even number of digits var strLen = string.length - if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') if (length > strLen / 2) { length = strLen / 2 @@ -1561,8 +1436,8 @@ function utf8Slice (buf, start, end) { var codePoint = null var bytesPerSequence = (firstByte > 0xEF) ? 4 : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 + : (firstByte > 0xBF) ? 2 + : 1 if (i + bytesPerSequence <= end) { var secondByte, thirdByte, fourthByte, tempCodePoint @@ -2125,6 +2000,7 @@ Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') if (!start) start = 0 if (!end && end !== 0) end = this.length if (targetStart >= target.length) targetStart = target.length @@ -2139,7 +2015,7 @@ Buffer.prototype.copy = function copy (target, targetStart, start, end) { if (targetStart < 0) { throw new RangeError('targetStart out of bounds') } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (start < 0 || start >= this.length) throw new RangeError('Index out of range') if (end < 0) throw new RangeError('sourceEnd out of bounds') // Are we oob? @@ -2149,22 +2025,19 @@ Buffer.prototype.copy = function copy (target, targetStart, start, end) { } var len = end - start - var i - if (this === target && start < targetStart && targetStart < end) { + if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { + // Use built-in when available, missing from IE11 + this.copyWithin(targetStart, start, end) + } else if (this === target && start < targetStart && targetStart < end) { // descending copy from end - for (i = len - 1; i >= 0; --i) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000) { - // ascending copy from start - for (i = 0; i < len; ++i) { + for (var i = len - 1; i >= 0; --i) { target[i + targetStart] = this[i + start] } } else { Uint8Array.prototype.set.call( target, - this.subarray(start, start + len), + this.subarray(start, end), targetStart ) } @@ -2187,18 +2060,20 @@ Buffer.prototype.fill = function fill (val, start, end, encoding) { encoding = end end = this.length } - if (val.length === 1) { - var code = val.charCodeAt(0) - if (code < 256) { - val = code - } - } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string') } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } + if (val.length === 1) { + var code = val.charCodeAt(0) + if ((encoding === 'utf8' && code < 128) || + encoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code + } + } } else if (typeof val === 'number') { val = val & 255 } @@ -2225,8 +2100,12 @@ Buffer.prototype.fill = function fill (val, start, end, encoding) { } else { var bytes = Buffer.isBuffer(val) ? val - : new Buffer(val, encoding) + : Buffer.from(val, encoding) var len = bytes.length + if (len === 0) { + throw new TypeError('The value "' + val + + '" is invalid for argument "value"') + } for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len] } @@ -2241,6 +2120,8 @@ Buffer.prototype.fill = function fill (val, start, end, encoding) { var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g function base64clean (str) { + // Node takes equal signs as end of the Base64 encoding + str = str.split('=')[0] // Node strips out invalid characters like \n and \t from the string, base64-js does not str = str.trim().replace(INVALID_BASE64_RE, '') // Node converts strings with length < 2 to '' @@ -2374,24 +2255,206 @@ function blitBuffer (src, dst, offset, length) { return i } -// ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check -// but they should be treated as valid. See: https://github.com/feross/buffer/issues/166 -function isArrayBuffer (obj) { - return obj instanceof ArrayBuffer || - (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' && - typeof obj.byteLength === 'number') +// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass +// the `instanceof` check but they should be treated as of that type. +// See: https://github.com/feross/buffer/issues/166 +function isInstance (obj, type) { + return obj instanceof type || + (obj != null && obj.constructor != null && obj.constructor.name != null && + obj.constructor.name === type.name) +} +function numberIsNaN (obj) { + // For IE11 support + return obj !== obj // eslint-disable-line no-self-compare } -// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView` -function isArrayBufferView (obj) { - return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj) +},{"base64-js":3,"ieee754":17}],7:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +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) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } -function numberIsNaN (obj) { - return obj !== obj // eslint-disable-line no-self-compare + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + 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 (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); } -},{"base64-js":3,"ieee754":17}],8:[function(require,module,exports){ +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],8:[function(require,module,exports){ 'use strict'; module.exports = earcut; @@ -2406,7 +2469,7 @@ function earcut(data, holeIndices, dim) { outerNode = linkedList(data, 0, outerLen, dim, true), triangles = []; - if (!outerNode) return triangles; + if (!outerNode || outerNode.next === outerNode.prev) return triangles; var minX, minY, maxX, maxY, x, y, invSize; @@ -2501,7 +2564,7 @@ function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { removeNode(ear); - // skipping the next vertice leads to less sliver triangles + // skipping the next vertex leads to less sliver triangles ear = next.next; stop = next.next; @@ -2518,7 +2581,7 @@ function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { // if this didn't work, try curing all small self-intersections locally } else if (pass === 1) { - ear = cureLocalIntersections(ear, triangles, dim); + ear = cureLocalIntersections(filterPoints(ear), triangles, dim); earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); // as a last resort, try splitting the remaining polygon into two @@ -2625,7 +2688,7 @@ function cureLocalIntersections(start, triangles, dim) { p = p.next; } while (p !== start); - return p; + return filterPoints(p); } // try splitting polygon into two and triangulate them independently @@ -2687,6 +2750,9 @@ function eliminateHole(hole, outerNode) { outerNode = findHoleBridge(hole, outerNode); if (outerNode) { var b = splitPolygon(outerNode, hole); + + // filter collinear points around the cuts + filterPoints(outerNode, outerNode.next); filterPoints(b, b.next); } } @@ -2718,7 +2784,7 @@ function findHoleBridge(hole, outerNode) { if (!m) return null; - if (hx === qx) return m.prev; // hole touches outer segment; pick lower endpoint + if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint // look for points inside the triangle of hole point, segment intersection and endpoint; // if there are no points found, we have a valid connection; @@ -2730,26 +2796,32 @@ function findHoleBridge(hole, outerNode) { tanMin = Infinity, tan; - p = m.next; + p = m; - while (p !== stop) { + do { if (hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { tan = Math.abs(hy - p.y) / (hx - p.x); // tangential - if ((tan < tanMin || (tan === tanMin && p.x > m.x)) && locallyInside(p, hole)) { + if (locallyInside(p, hole) && + (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) { m = p; tanMin = tan; } } p = p.next; - } + } while (p !== stop); return m; } +// whether sector in vertex m contains sector in vertex p in the same coordinates +function sectorContainsSector(m, p) { + return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; +} + // interlink polygon nodes in z-order function indexCurve(start, minX, minY, invSize) { var p = start; @@ -2843,7 +2915,7 @@ function getLeftmost(start) { var p = start, leftmost = start; do { - if (p.x < leftmost.x) leftmost = p; + if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p; p = p.next; } while (p !== start); @@ -2859,8 +2931,10 @@ function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) { // check if a diagonal between two polygon nodes is valid (lies in polygon interior) function isValidDiagonal(a, b) { - return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && - locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b); + return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges + (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible + (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors + equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case } // signed area of a triangle @@ -2875,10 +2949,28 @@ function equals(p1, p2) { // check if two segments intersect function intersects(p1, q1, p2, q2) { - if ((equals(p1, q1) && equals(p2, q2)) || - (equals(p1, q2) && equals(p2, q1))) return true; - return area(p1, q1, p2) > 0 !== area(p1, q1, q2) > 0 && - area(p2, q2, p1) > 0 !== area(p2, q2, q1) > 0; + var o1 = sign(area(p1, q1, p2)); + var o2 = sign(area(p1, q1, q2)); + var o3 = sign(area(p2, q2, p1)); + var o4 = sign(area(p2, q2, q1)); + + if (o1 !== o2 && o3 !== o4) return true; // general case + + if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 + if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 + if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 + if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 + + return false; +} + +// for collinear points p, q, r, check if point q lies on segment pr +function onSegment(p, q, r) { + return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); +} + +function sign(num) { + return num > 0 ? 1 : num < 0 ? -1 : 0; } // check if a polygon diagonal intersects any polygon segments @@ -2965,14 +3057,14 @@ function removeNode(p) { } function Node(i, x, y) { - // vertice index in coordinates array + // vertex index in coordinates array this.i = i; // vertex coordinates this.x = x; this.y = y; - // previous and next vertice nodes in a polygon ring + // previous and next vertex nodes in a polygon ring this.prev = null; this.next = null; @@ -3883,462 +3975,9381 @@ Geohash.neighbours = function(geohash) { if (typeof module != 'undefined' && module.exports) module.exports = Geohash; // CommonJS, node.js },{}],22:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +/** + * martinez v0.7.0 + * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor + * + * @author Alex Milevski + * @license MIT + * @preserve + */ -// resolves . and .. elements in a path array with directory names there -// must be no slashes, empty elements, or device names (c:\) in the array -// (so also no leading and trailing slashes - it does not distinguish -// relative and absolute paths) -function normalizeArray(parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; 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--; +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = global || self, factory(global.martinez = {})); +}(this, (function (exports) { 'use strict'; + + function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; } + + var SplayTree = function SplayTree(compare, noDuplicates) { + if ( compare === void 0 ) compare = DEFAULT_COMPARE; + if ( noDuplicates === void 0 ) noDuplicates = false; + + this._compare = compare; + this._root = null; + this._size = 0; + this._noDuplicates = !!noDuplicates; + }; + + var prototypeAccessors = { size: { configurable: true } }; + + + SplayTree.prototype.rotateLeft = function rotateLeft (x) { + var y = x.right; + if (y) { + x.right = y.left; + if (y.left) { y.left.parent = x; } + y.parent = x.parent; } - } - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); + if (!x.parent) { this._root = y; } + else if (x === x.parent.left) { x.parent.left = y; } + else { x.parent.right = y; } + if (y) { y.left = x; } + x.parent = y; + }; + + + SplayTree.prototype.rotateRight = function rotateRight (x) { + var y = x.left; + if (y) { + x.left = y.right; + if (y.right) { y.right.parent = x; } + y.parent = x.parent; } - } - return parts; -} + if (!x.parent) { this._root = y; } + else if(x === x.parent.left) { x.parent.left = y; } + else { x.parent.right = y; } + if (y) { y.right = x; } + x.parent = y; + }; -// Split a filename into [root, dir, basename, ext], unix version -// 'root' is just a slash, or nothing. -var splitPathRe = - /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; -var splitPath = function(filename) { - return splitPathRe.exec(filename).slice(1); -}; -// path.resolve([from ...], to) -// posix version -exports.resolve = function() { - var resolvedPath = '', - resolvedAbsolute = false; + SplayTree.prototype._splay = function _splay (x) { + while (x.parent) { + var p = x.parent; + if (!p.parent) { + if (p.left === x) { this.rotateRight(p); } + else { this.rotateLeft(p); } + } else if (p.left === x && p.parent.left === p) { + this.rotateRight(p.parent); + this.rotateRight(p); + } else if (p.right === x && p.parent.right === p) { + this.rotateLeft(p.parent); + this.rotateLeft(p); + } else if (p.left === x && p.parent.right === p) { + this.rotateRight(p); + this.rotateLeft(p); + } else { + this.rotateLeft(p); + this.rotateRight(p); + } + } + }; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : process.cwd(); - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; + SplayTree.prototype.splay = function splay (x) { + var p, gp, ggp, l, r; + + while (x.parent) { + p = x.parent; + gp = p.parent; + + if (gp && gp.parent) { + ggp = gp.parent; + if (ggp.left === gp) { ggp.left= x; } + else { ggp.right = x; } + x.parent = ggp; + } else { + x.parent = null; + this._root = x; + } + + l = x.left; r = x.right; + + if (x === p.left) { // left + if (gp) { + if (gp.left === p) { + /* zig-zig */ + if (p.right) { + gp.left = p.right; + gp.left.parent = gp; + } else { gp.left = null; } + + p.right = gp; + gp.parent = p; + } else { + /* zig-zag */ + if (l) { + gp.right = l; + l.parent = gp; + } else { gp.right = null; } + + x.left = gp; + gp.parent = x; + } + } + if (r) { + p.left = r; + r.parent = p; + } else { p.left = null; } + + x.right= p; + p.parent = x; + } else { // right + if (gp) { + if (gp.right === p) { + /* zig-zig */ + if (p.left) { + gp.right = p.left; + gp.right.parent = gp; + } else { gp.right = null; } + + p.left = gp; + gp.parent = p; + } else { + /* zig-zag */ + if (r) { + gp.left = r; + r.parent = gp; + } else { gp.left = null; } + + x.right = gp; + gp.parent = x; + } + } + if (l) { + p.right = l; + l.parent = p; + } else { p.right = null; } + + x.left = p; + p.parent = x; + } } + }; - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) + SplayTree.prototype.replace = function replace (u, v) { + if (!u.parent) { this._root = v; } + else if (u === u.parent.left) { u.parent.left = v; } + else { u.parent.right = v; } + if (v) { v.parent = u.parent; } + }; - // Normalize the path - resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; -}; + SplayTree.prototype.minNode = function minNode (u) { + if ( u === void 0 ) u = this._root; -// path.normalize(path) -// posix version -exports.normalize = function(path) { - var isAbsolute = exports.isAbsolute(path), - trailingSlash = substr(path, -1) === '/'; + if (u) { while (u.left) { u = u.left; } } + return u; + }; - // Normalize the path - path = normalizeArray(filter(path.split('/'), function(p) { - return !!p; - }), !isAbsolute).join('/'); - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } + SplayTree.prototype.maxNode = function maxNode (u) { + if ( u === void 0 ) u = this._root; - return (isAbsolute ? '/' : '') + path; -}; + if (u) { while (u.right) { u = u.right; } } + return u; + }; -// posix version -exports.isAbsolute = function(path) { - return path.charAt(0) === '/'; -}; -// posix version -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'); + SplayTree.prototype.insert = function insert (key, data) { + var z = this._root; + var p = null; + var comp = this._compare; + var cmp; + + if (this._noDuplicates) { + while (z) { + p = z; + cmp = comp(z.key, key); + if (cmp === 0) { return; } + else if (comp(z.key, key) < 0) { z = z.right; } + else { z = z.left; } + } + } else { + while (z) { + p = z; + if (comp(z.key, key) < 0) { z = z.right; } + else { z = z.left; } + } } - return p; - }).join('/')); -}; + z = { key: key, data: data, left: null, right: null, parent: p }; -// path.relative(from, to) -// posix version -exports.relative = function(from, to) { - from = exports.resolve(from).substr(1); - to = exports.resolve(to).substr(1); + if (!p) { this._root = z; } + else if (comp(p.key, z.key) < 0) { p.right = z; } + else { p.left= z; } - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; + this.splay(z); + this._size++; + return z; + }; + + + SplayTree.prototype.find = function find (key) { + var z = this._root; + var comp = this._compare; + while (z) { + var cmp = comp(z.key, key); + if (cmp < 0) { z = z.right; } + else if (cmp > 0) { z = z.left; } + else { return z; } } + return null; + }; - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; + /** + * Whether the tree contains a node with the given key + * @param{Key} key + * @return {boolean} true/false + */ + SplayTree.prototype.contains = function contains (key) { + var node = this._root; + var comparator = this._compare; + while (node){ + var cmp = comparator(key, node.key); + if (cmp === 0) { return true; } + else if (cmp < 0) { node = node.left; } + else { node = node.right; } } - if (start > end) return []; - return arr.slice(start, end - start + 1); - } + return false; + }; - 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; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } + SplayTree.prototype.remove = function remove (key) { + var z = this.find(key); - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } + if (!z) { return false; } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); + this.splay(z); - return outputParts.join('/'); -}; + if (!z.left) { this.replace(z, z.right); } + else if (!z.right) { this.replace(z, z.left); } + else { + var y = this.minNode(z.right); + if (y.parent !== z) { + this.replace(y, y.right); + y.right = z.right; + y.right.parent = y; + } + this.replace(z, y); + y.left = z.left; + y.left.parent = y; + } -exports.sep = '/'; -exports.delimiter = ':'; + this._size--; + return true; + }; -exports.dirname = function(path) { - var result = splitPath(path), - root = result[0], - dir = result[1]; - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } + SplayTree.prototype.removeNode = function removeNode (z) { + if (!z) { return false; } - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } + this.splay(z); - return root + dir; -}; + if (!z.left) { this.replace(z, z.right); } + else if (!z.right) { this.replace(z, z.left); } + else { + var y = this.minNode(z.right); + if (y.parent !== z) { + this.replace(y, y.right); + y.right = z.right; + y.right.parent = y; + } + this.replace(z, y); + y.left = z.left; + y.left.parent = y; + } + this._size--; + return true; + }; -exports.basename = function(path, ext) { - var f = splitPath(path)[2]; - // TODO: make this comparison case-insensitive on windows? - if (ext && f.substr(-1 * ext.length) === ext) { - f = f.substr(0, f.length - ext.length); - } - return f; -}; + SplayTree.prototype.erase = function erase (key) { + var z = this.find(key); + if (!z) { return; } -exports.extname = function(path) { - return splitPath(path)[3]; -}; + this.splay(z); -function filter (xs, f) { - if (xs.filter) return xs.filter(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - if (f(xs[i], i, xs)) res.push(xs[i]); - } - return res; -} + var s = z.left; + var t = z.right; -// String.prototype.substr - negative index don't work in IE8 -var substr = 'ab'.substr(-1) === 'b' - ? function (str, start, len) { return str.substr(start, len) } - : function (str, start, len) { - if (start < 0) start = str.length + start; - return str.substr(start, len); + var sMax = null; + if (s) { + s.parent = null; + sMax = this.maxNode(s); + this.splay(sMax); + this._root = sMax; + } + if (t) { + if (s) { sMax.right = t; } + else { this._root = t; } + t.parent = sMax; } -; -}).call(this,require('_process')) + this._size--; + }; -},{"_process":6}],23:[function(require,module,exports){ -'use strict'; + /** + * Removes and returns the node with smallest key + * @return {?Node} + */ + SplayTree.prototype.pop = function pop () { + var node = this._root, returnValue = null; + if (node) { + while (node.left) { node = node.left; } + returnValue = { key: node.key, data: node.data }; + this.remove(node.key); + } + return returnValue; + }; -module.exports = Pbf; -var ieee754 = require('ieee754'); + /* eslint-disable class-methods-use-this */ -function Pbf(buf) { - this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0); - this.pos = 0; - this.type = 0; - this.length = this.buf.length; -} + /** + * Successor node + * @param{Node} node + * @return {?Node} + */ + SplayTree.prototype.next = function next (node) { + var successor = node; + if (successor) { + if (successor.right) { + successor = successor.right; + while (successor && successor.left) { successor = successor.left; } + } else { + successor = node.parent; + while (successor && successor.right === node) { + node = successor; successor = successor.parent; + } + } + } + return successor; + }; -Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum -Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64 -Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields -Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32 -var SHIFT_LEFT_32 = (1 << 16) * (1 << 16), - SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32; + /** + * Predecessor node + * @param{Node} node + * @return {?Node} + */ + SplayTree.prototype.prev = function prev (node) { + var predecessor = node; + if (predecessor) { + if (predecessor.left) { + predecessor = predecessor.left; + while (predecessor && predecessor.right) { predecessor = predecessor.right; } + } else { + predecessor = node.parent; + while (predecessor && predecessor.left === node) { + node = predecessor; + predecessor = predecessor.parent; + } + } + } + return predecessor; + }; + /* eslint-enable class-methods-use-this */ -Pbf.prototype = { - destroy: function() { - this.buf = null; - }, + /** + * @param{forEachCallback} callback + * @return {SplayTree} + */ + SplayTree.prototype.forEach = function forEach (callback) { + var current = this._root; + var s = [], done = false, i = 0; + + while (!done) { + // Reach the left most Node of the current Node + if (current) { + // Place pointer to a tree node on the stack + // before traversing the node's left subtree + s.push(current); + current = current.left; + } else { + // BackTrack from the empty subtree and visit the Node + // at the top of the stack; however, if the stack is + // empty you are done + if (s.length > 0) { + current = s.pop(); + callback(current, i++); + + // We have visited the node and its left + // subtree. Now, it's right subtree's turn + current = current.right; + } else { done = true; } + } + } + return this; + }; - // === READING ================================================================= - readFields: function(readField, result, end) { - end = end || this.length; + /** + * Walk key range from `low` to `high`. Stops if `fn` returns a value. + * @param{Key} low + * @param{Key} high + * @param{Function} fn + * @param{*?} ctx + * @return {SplayTree} + */ + SplayTree.prototype.range = function range (low, high, fn, ctx) { + var Q = []; + var compare = this._compare; + var node = this._root, cmp; + + while (Q.length !== 0 || node) { + if (node) { + Q.push(node); + node = node.left; + } else { + node = Q.pop(); + cmp = compare(node.key, high); + if (cmp > 0) { + break; + } else if (compare(node.key, low) >= 0) { + if (fn.call(ctx, node)) { return this; } // stop if smth is returned + } + node = node.right; + } + } + return this; + }; - while (this.pos < end) { - var val = this.readVarint(), - tag = val >> 3, - startPos = this.pos; + /** + * Returns all keys in order + * @return {Array} + */ + SplayTree.prototype.keys = function keys () { + var current = this._root; + var s = [], r = [], done = false; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + r.push(current.key); + current = current.right; + } else { done = true; } + } + } + return r; + }; - this.type = val & 0x7; - readField(tag, result, this); - if (this.pos === startPos) this.skip(val); - } - return result; - }, + /** + * Returns `data` fields of all nodes in order. + * @return {Array} + */ + SplayTree.prototype.values = function values () { + var current = this._root; + var s = [], r = [], done = false; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + r.push(current.data); + current = current.right; + } else { done = true; } + } + } + return r; + }; - readMessage: function(readField, result) { - return this.readFields(readField, result, this.readVarint() + this.pos); - }, - readFixed32: function() { - var val = readUInt32(this.buf, this.pos); - this.pos += 4; - return val; - }, + /** + * Returns node at given index + * @param{number} index + * @return {?Node} + */ + SplayTree.prototype.at = function at (index) { + // removed after a consideration, more misleading than useful + // index = index % this.size; + // if (index < 0) index = this.size - index; + + var current = this._root; + var s = [], done = false, i = 0; + + while (!done) { + if (current) { + s.push(current); + current = current.left; + } else { + if (s.length > 0) { + current = s.pop(); + if (i === index) { return current; } + i++; + current = current.right; + } else { done = true; } + } + } + return null; + }; - readSFixed32: function() { - var val = readInt32(this.buf, this.pos); - this.pos += 4; - return val; - }, + /** + * Bulk-load items. Both array have to be same size + * @param{Array} keys + * @param{Array}[values] + * @param{Boolean} [presort=false] Pre-sort keys and values, using + * tree's comparator. Sorting is done + * in-place + * @return {AVLTree} + */ + SplayTree.prototype.load = function load (keys, values, presort) { + if ( keys === void 0 ) keys = []; + if ( values === void 0 ) values = []; + if ( presort === void 0 ) presort = false; + + if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); } + var size = keys.length; + if (presort) { sort(keys, values, 0, size - 1, this._compare); } + this._root = loadRecursive(null, keys, values, 0, size); + this._size = size; + return this; + }; - // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed) - readFixed64: function() { - var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; - this.pos += 8; - return val; - }, + SplayTree.prototype.min = function min () { + var node = this.minNode(this._root); + if (node) { return node.key; } + else { return null; } + }; - readSFixed64: function() { - var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; - this.pos += 8; - return val; - }, - readFloat: function() { - var val = ieee754.read(this.buf, this.pos, true, 23, 4); - this.pos += 4; - return val; - }, + SplayTree.prototype.max = function max () { + var node = this.maxNode(this._root); + if (node) { return node.key; } + else { return null; } + }; - readDouble: function() { - var val = ieee754.read(this.buf, this.pos, true, 52, 8); - this.pos += 8; - return val; - }, + SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; }; + prototypeAccessors.size.get = function () { return this._size; }; - readVarint: function(isSigned) { - var buf = this.buf, - val, b; - b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val; - b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val; - b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val; - b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val; - b = buf[this.pos]; val |= (b & 0x0f) << 28; + /** + * Create a tree and load it with items + * @param{Array} keys + * @param{Array?} [values] + + * @param{Function?} [comparator] + * @param{Boolean?} [presort=false] Pre-sort keys and values, using + * tree's comparator. Sorting is done + * in-place + * @param{Boolean?} [noDuplicates=false] Allow duplicates + * @return {SplayTree} + */ + SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) { + return new SplayTree(comparator, noDuplicates).load(keys, values, presort); + }; - return readVarintRemainder(val, isSigned, this); - }, + Object.defineProperties( SplayTree.prototype, prototypeAccessors ); - readVarint64: function() { // for compatibility with v2.0.1 - return this.readVarint(true); - }, - readSVarint: function() { - var num = this.readVarint(); - return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding - }, + function loadRecursive (parent, keys, values, start, end) { + var size = end - start; + if (size > 0) { + var middle = start + Math.floor(size / 2); + var key = keys[middle]; + var data = values[middle]; + var node = { key: key, data: data, parent: parent }; + node.left = loadRecursive(node, keys, values, start, middle); + node.right = loadRecursive(node, keys, values, middle + 1, end); + return node; + } + return null; + } - readBoolean: function() { - return Boolean(this.readVarint()); - }, - readString: function() { - var end = this.readVarint() + this.pos, - str = readUtf8(this.buf, this.pos, end); - this.pos = end; - return str; - }, + function sort(keys, values, left, right, compare) { + if (left >= right) { return; } - readBytes: function() { - var end = this.readVarint() + this.pos, - buffer = this.buf.subarray(this.pos, end); - this.pos = end; - return buffer; - }, + var pivot = keys[(left + right) >> 1]; + var i = left - 1; + var j = right + 1; - // verbose for performance reasons; doesn't affect gzipped size + while (true) { + do { i++; } while (compare(keys[i], pivot) < 0); + do { j--; } while (compare(keys[j], pivot) > 0); + if (i >= j) { break; } - readPackedVarint: function(arr, isSigned) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readVarint(isSigned)); - return arr; - }, - readPackedSVarint: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readSVarint()); - return arr; - }, - readPackedBoolean: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readBoolean()); - return arr; - }, - readPackedFloat: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readFloat()); - return arr; - }, - readPackedDouble: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readDouble()); - return arr; - }, - readPackedFixed32: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readFixed32()); - return arr; - }, - readPackedSFixed32: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readSFixed32()); - return arr; - }, - readPackedFixed64: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readFixed64()); - return arr; - }, - readPackedSFixed64: function(arr) { - var end = readPackedEnd(this); - arr = arr || []; - while (this.pos < end) arr.push(this.readSFixed64()); - return arr; - }, + var tmp = keys[i]; + keys[i] = keys[j]; + keys[j] = tmp; - skip: function(val) { - var type = val & 0x7; - if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {} - else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos; - else if (type === Pbf.Fixed32) this.pos += 4; - else if (type === Pbf.Fixed64) this.pos += 8; - else throw new Error('Unimplemented type: ' + type); - }, + tmp = values[i]; + values[i] = values[j]; + values[j] = tmp; + } - // === WRITING ================================================================= + sort(keys, values, left, j, compare); + sort(keys, values, j + 1, right, compare); + } - writeTag: function(tag, type) { - this.writeVarint((tag << 3) | type); - }, + var NORMAL = 0; + var NON_CONTRIBUTING = 1; + var SAME_TRANSITION = 2; + var DIFFERENT_TRANSITION = 3; - realloc: function(min) { - var length = this.length || 16; + var INTERSECTION = 0; + var UNION = 1; + var DIFFERENCE = 2; + var XOR = 3; - while (length < this.pos + min) length *= 2; + /** + * @param {SweepEvent} event + * @param {SweepEvent} prev + * @param {Operation} operation + */ + function computeFields (event, prev, operation) { + // compute inOut and otherInOut fields + if (prev === null) { + event.inOut = false; + event.otherInOut = true; - if (length !== this.length) { - var buf = new Uint8Array(length); - buf.set(this.buf); - this.buf = buf; - this.length = length; - } - }, + // previous line segment in sweepline belongs to the same polygon + } else { + if (event.isSubject === prev.isSubject) { + event.inOut = !prev.inOut; + event.otherInOut = prev.otherInOut; - finish: function() { - this.length = this.pos; - this.pos = 0; - return this.buf.subarray(0, this.length); - }, + // previous line segment in sweepline belongs to the clipping polygon + } else { + event.inOut = !prev.otherInOut; + event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; + } - writeFixed32: function(val) { - this.realloc(4); - writeInt32(this.buf, val, this.pos); - this.pos += 4; - }, + // compute prevInResult field + if (prev) { + event.prevInResult = (!inResult(prev, operation) || prev.isVertical()) + ? prev.prevInResult : prev; + } + } - writeSFixed32: function(val) { - this.realloc(4); - writeInt32(this.buf, val, this.pos); + // check if the line segment belongs to the Boolean operation + var isInResult = inResult(event, operation); + if (isInResult) { + event.resultTransition = determineResultTransition(event, operation); + } else { + event.resultTransition = 0; + } + } + + + /* eslint-disable indent */ + function inResult(event, operation) { + switch (event.type) { + case NORMAL: + switch (operation) { + case INTERSECTION: + return !event.otherInOut; + case UNION: + return event.otherInOut; + case DIFFERENCE: + // return (event.isSubject && !event.otherInOut) || + // (!event.isSubject && event.otherInOut); + return (event.isSubject && event.otherInOut) || + (!event.isSubject && !event.otherInOut); + case XOR: + return true; + } + break; + case SAME_TRANSITION: + return operation === INTERSECTION || operation === UNION; + case DIFFERENT_TRANSITION: + return operation === DIFFERENCE; + case NON_CONTRIBUTING: + return false; + } + return false; + } + /* eslint-enable indent */ + + + function determineResultTransition(event, operation) { + var thisIn = !event.inOut; + var thatIn = !event.otherInOut; + + var isIn; + switch (operation) { + case INTERSECTION: + isIn = thisIn && thatIn; break; + case UNION: + isIn = thisIn || thatIn; break; + case XOR: + isIn = thisIn ^ thatIn; break; + case DIFFERENCE: + if (event.isSubject) { + isIn = thisIn && !thatIn; + } else { + isIn = thatIn && !thisIn; + } + break; + } + return isIn ? +1 : -1; + } + + var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) { + + /** + * Is left endpoint? + * @type {Boolean} + */ + this.left = left; + + /** + * @type {Array.} + */ + this.point = point; + + /** + * Other edge reference + * @type {SweepEvent} + */ + this.otherEvent = otherEvent; + + /** + * Belongs to source or clipping polygon + * @type {Boolean} + */ + this.isSubject = isSubject; + + /** + * Edge contribution type + * @type {Number} + */ + this.type = edgeType || NORMAL; + + + /** + * In-out transition for the sweepline crossing polygon + * @type {Boolean} + */ + this.inOut = false; + + + /** + * @type {Boolean} + */ + this.otherInOut = false; + + /** + * Previous event in result? + * @type {SweepEvent} + */ + this.prevInResult = null; + + /** + * Type of result transition (0 = not in result, +1 = out-in, -1, in-out) + * @type {Number} + */ + this.resultTransition = 0; + + // connection step + + /** + * @type {Number} + */ + this.otherPos = -1; + + /** + * @type {Number} + */ + this.outputContourId = -1; + + this.isExteriorRing = true; // TODO: Looks unused, remove? + }; + + var prototypeAccessors$1 = { inResult: { configurable: true } }; + + + /** + * @param{Array.}p + * @return {Boolean} + */ + SweepEvent.prototype.isBelow = function isBelow (p) { + var p0 = this.point, p1 = this.otherEvent.point; + return this.left + ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 + // signedArea(this.point, this.otherEvent.point, p) > 0 : + : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; + //signedArea(this.otherEvent.point, this.point, p) > 0; + }; + + + /** + * @param{Array.}p + * @return {Boolean} + */ + SweepEvent.prototype.isAbove = function isAbove (p) { + return !this.isBelow(p); + }; + + + /** + * @return {Boolean} + */ + SweepEvent.prototype.isVertical = function isVertical () { + return this.point[0] === this.otherEvent.point[0]; + }; + + + /** + * Does event belong to result? + * @return {Boolean} + */ + prototypeAccessors$1.inResult.get = function () { + return this.resultTransition !== 0; + }; + + + SweepEvent.prototype.clone = function clone () { + var copy = new SweepEvent( + this.point, this.left, this.otherEvent, this.isSubject, this.type); + + copy.contourId = this.contourId; + copy.resultTransition = this.resultTransition; + copy.prevInResult = this.prevInResult; + copy.isExteriorRing = this.isExteriorRing; + copy.inOut = this.inOut; + copy.otherInOut = this.otherInOut; + + return copy; + }; + + Object.defineProperties( SweepEvent.prototype, prototypeAccessors$1 ); + + function equals(p1, p2) { + if (p1[0] === p2[0]) { + if (p1[1] === p2[1]) { + return true; + } else { + return false; + } + } + return false; + } + + // const EPSILON = 1e-9; + // const abs = Math.abs; + // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164 + // Precision problem. + // + // module.exports = function equals(p1, p2) { + // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON; + // }; + + var epsilon = 1.1102230246251565e-16; + var splitter = 134217729; + var resulterrbound = (3 + 8 * epsilon) * epsilon; + + // fast_expansion_sum_zeroelim routine from oritinal code + function sum(elen, e, flen, f, h) { + var Q, Qnew, hh, bvirt; + var enow = e[0]; + var fnow = f[0]; + var eindex = 0; + var findex = 0; + if ((fnow > enow) === (fnow > -enow)) { + Q = enow; + enow = e[++eindex]; + } else { + Q = fnow; + fnow = f[++findex]; + } + var hindex = 0; + if (eindex < elen && findex < flen) { + if ((fnow > enow) === (fnow > -enow)) { + Qnew = enow + Q; + hh = Q - (Qnew - enow); + enow = e[++eindex]; + } else { + Qnew = fnow + Q; + hh = Q - (Qnew - fnow); + fnow = f[++findex]; + } + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + while (eindex < elen && findex < flen) { + if ((fnow > enow) === (fnow > -enow)) { + Qnew = Q + enow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (enow - bvirt); + enow = e[++eindex]; + } else { + Qnew = Q + fnow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (fnow - bvirt); + fnow = f[++findex]; + } + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + } + while (eindex < elen) { + Qnew = Q + enow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (enow - bvirt); + enow = e[++eindex]; + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + while (findex < flen) { + Qnew = Q + fnow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (fnow - bvirt); + fnow = f[++findex]; + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + if (Q !== 0 || hindex === 0) { + h[hindex++] = Q; + } + return hindex; + } + + function estimate(elen, e) { + var Q = e[0]; + for (var i = 1; i < elen; i++) { Q += e[i]; } + return Q; + } + + function vec(n) { + return new Float64Array(n); + } + + var ccwerrboundA = (3 + 16 * epsilon) * epsilon; + var ccwerrboundB = (2 + 12 * epsilon) * epsilon; + var ccwerrboundC = (9 + 64 * epsilon) * epsilon * epsilon; + + var B = vec(4); + var C1 = vec(8); + var C2 = vec(12); + var D = vec(16); + var u = vec(4); + + function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) { + var acxtail, acytail, bcxtail, bcytail; + var bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3; + + var acx = ax - cx; + var bcx = bx - cx; + var acy = ay - cy; + var bcy = by - cy; + + s1 = acx * bcy; + c = splitter * acx; + ahi = c - (c - acx); + alo = acx - ahi; + c = splitter * bcy; + bhi = c - (c - bcy); + blo = bcy - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acy * bcx; + c = splitter * acy; + ahi = c - (c - acy); + alo = acy - ahi; + c = splitter * bcx; + bhi = c - (c - bcx); + blo = bcx - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + B[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + B[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + B[2] = _j - (u3 - bvirt) + (_i - bvirt); + B[3] = u3; + + var det = estimate(4, B); + var errbound = ccwerrboundB * detsum; + if (det >= errbound || -det >= errbound) { + return det; + } + + bvirt = ax - acx; + acxtail = ax - (acx + bvirt) + (bvirt - cx); + bvirt = bx - bcx; + bcxtail = bx - (bcx + bvirt) + (bvirt - cx); + bvirt = ay - acy; + acytail = ay - (acy + bvirt) + (bvirt - cy); + bvirt = by - bcy; + bcytail = by - (bcy + bvirt) + (bvirt - cy); + + if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) { + return det; + } + + errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det); + det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail); + if (det >= errbound || -det >= errbound) { return det; } + + s1 = acxtail * bcy; + c = splitter * acxtail; + ahi = c - (c - acxtail); + alo = acxtail - ahi; + c = splitter * bcy; + bhi = c - (c - bcy); + blo = bcy - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acytail * bcx; + c = splitter * acytail; + ahi = c - (c - acytail); + alo = acytail - ahi; + c = splitter * bcx; + bhi = c - (c - bcx); + blo = bcx - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + var C1len = sum(4, B, 4, u, C1); + + s1 = acx * bcytail; + c = splitter * acx; + ahi = c - (c - acx); + alo = acx - ahi; + c = splitter * bcytail; + bhi = c - (c - bcytail); + blo = bcytail - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acy * bcxtail; + c = splitter * acy; + ahi = c - (c - acy); + alo = acy - ahi; + c = splitter * bcxtail; + bhi = c - (c - bcxtail); + blo = bcxtail - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + var C2len = sum(C1len, C1, 4, u, C2); + + s1 = acxtail * bcytail; + c = splitter * acxtail; + ahi = c - (c - acxtail); + alo = acxtail - ahi; + c = splitter * bcytail; + bhi = c - (c - bcytail); + blo = bcytail - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acytail * bcxtail; + c = splitter * acytail; + ahi = c - (c - acytail); + alo = acytail - ahi; + c = splitter * bcxtail; + bhi = c - (c - bcxtail); + blo = bcxtail - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + var Dlen = sum(C2len, C2, 4, u, D); + + return D[Dlen - 1]; + } + + function orient2d(ax, ay, bx, by, cx, cy) { + var detleft = (ay - cy) * (bx - cx); + var detright = (ax - cx) * (by - cy); + var det = detleft - detright; + + if (detleft === 0 || detright === 0 || (detleft > 0) !== (detright > 0)) { return det; } + + var detsum = Math.abs(detleft + detright); + if (Math.abs(det) >= ccwerrboundA * detsum) { return det; } + + return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum); + } + + /** + * Signed area of the triangle (p0, p1, p2) + * @param {Array.} p0 + * @param {Array.} p1 + * @param {Array.} p2 + * @return {Number} + */ + function signedArea(p0, p1, p2) { + var res = orient2d(p0[0], p0[1], p1[0], p1[1], p2[0], p2[1]); + if (res > 0) { return -1; } + if (res < 0) { return 1; } + return 0; + } + + /** + * @param {SweepEvent} e1 + * @param {SweepEvent} e2 + * @return {Number} + */ + function compareEvents(e1, e2) { + var p1 = e1.point; + var p2 = e2.point; + + // Different x-coordinate + if (p1[0] > p2[0]) { return 1; } + if (p1[0] < p2[0]) { return -1; } + + // Different points, but same x-coordinate + // Event with lower y-coordinate is processed first + if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; } + + return specialCases(e1, e2, p1); + } + + + /* eslint-disable no-unused-vars */ + function specialCases(e1, e2, p1, p2) { + // Same coordinates, but one is a left endpoint and the other is + // a right endpoint. The right endpoint is processed first + if (e1.left !== e2.left) + { return e1.left ? 1 : -1; } + + // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; + // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) + // Same coordinates, both events + // are left endpoints or right endpoints. + // not collinear + if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { + // the event associate to the bottom segment is processed first + return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1; + } + + return (!e1.isSubject && e2.isSubject) ? 1 : -1; + } + /* eslint-enable no-unused-vars */ + + /** + * @param {SweepEvent} se + * @param {Array.} p + * @param {Queue} queue + * @return {Queue} + */ + function divideSegment(se, p, queue) { + var r = new SweepEvent(p, false, se, se.isSubject); + var l = new SweepEvent(p, true, se.otherEvent, se.isSubject); + + /* eslint-disable no-console */ + if (equals(se.point, se.otherEvent.point)) { + console.warn('what is that, a collapsed segment?', se); + } + /* eslint-enable no-console */ + + r.contourId = l.contourId = se.contourId; + + // avoid a rounding error. The left event would be processed after the right event + if (compareEvents(l, se.otherEvent) > 0) { + se.otherEvent.left = true; + l.left = false; + } + + // avoid a rounding error. The left event would be processed after the right event + // if (compareEvents(se, r) > 0) {} + + se.otherEvent.otherEvent = l; + se.otherEvent = r; + + queue.push(l); + queue.push(r); + + return queue; + } + + //const EPS = 1e-9; + + /** + * Finds the magnitude of the cross product of two vectors (if we pretend + * they're in three dimensions) + * + * @param {Object} a First vector + * @param {Object} b Second vector + * @private + * @returns {Number} The magnitude of the cross product + */ + function crossProduct(a, b) { + return (a[0] * b[1]) - (a[1] * b[0]); + } + + /** + * Finds the dot product of two vectors. + * + * @param {Object} a First vector + * @param {Object} b Second vector + * @private + * @returns {Number} The dot product + */ + function dotProduct(a, b) { + return (a[0] * b[0]) + (a[1] * b[1]); + } + + /** + * Finds the intersection (if any) between two line segments a and b, given the + * line segments' end points a1, a2 and b1, b2. + * + * This algorithm is based on Schneider and Eberly. + * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf + * Page 244. + * + * @param {Array.} a1 point of first line + * @param {Array.} a2 point of first line + * @param {Array.} b1 point of second line + * @param {Array.} b2 point of second line + * @param {Boolean=} noEndpointTouch whether to skip single touchpoints + * (meaning connected segments) as + * intersections + * @returns {Array.>|Null} If the lines intersect, the point of + * intersection. If they overlap, the two end points of the overlapping segment. + * Otherwise, null. + */ + function intersection (a1, a2, b1, b2, noEndpointTouch) { + // The algorithm expects our lines in the form P + sd, where P is a point, + // s is on the interval [0, 1], and d is a vector. + // We are passed two points. P can be the first point of each pair. The + // vector, then, could be thought of as the distance (in x and y components) + // from the first point to the second point. + // So first, let's make our vectors: + var va = [a2[0] - a1[0], a2[1] - a1[1]]; + var vb = [b2[0] - b1[0], b2[1] - b1[1]]; + // We also define a function to convert back to regular point form: + + /* eslint-disable arrow-body-style */ + + function toPoint(p, s, d) { + return [ + p[0] + s * d[0], + p[1] + s * d[1] + ]; + } + + /* eslint-enable arrow-body-style */ + + // The rest is pretty much a straight port of the algorithm. + var e = [b1[0] - a1[0], b1[1] - a1[1]]; + var kross = crossProduct(va, vb); + var sqrKross = kross * kross; + var sqrLenA = dotProduct(va, va); + //const sqrLenB = dotProduct(vb, vb); + + // Check for line intersection. This works because of the properties of the + // cross product -- specifically, two vectors are parallel if and only if the + // cross product is the 0 vector. The full calculation involves relative error + // to account for possible very small line segments. See Schneider & Eberly + // for details. + if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) { + // If they're not parallel, then (because these are line segments) they + // still might not actually intersect. This code checks that the + // intersection point of the lines is actually on both line segments. + var s = crossProduct(e, vb) / kross; + if (s < 0 || s > 1) { + // not on line segment a + return null; + } + var t = crossProduct(e, va) / kross; + if (t < 0 || t > 1) { + // not on line segment b + return null; + } + if (s === 0 || s === 1) { + // on an endpoint of line segment a + return noEndpointTouch ? null : [toPoint(a1, s, va)]; + } + if (t === 0 || t === 1) { + // on an endpoint of line segment b + return noEndpointTouch ? null : [toPoint(b1, t, vb)]; + } + return [toPoint(a1, s, va)]; + } + + // If we've reached this point, then the lines are either parallel or the + // same, but the segments could overlap partially or fully, or not at all. + // So we need to find the overlap, if any. To do that, we can use e, which is + // the (vector) difference between the two initial points. If this is parallel + // with the line itself, then the two lines are the same line, and there will + // be overlap. + //const sqrLenE = dotProduct(e, e); + kross = crossProduct(e, va); + sqrKross = kross * kross; + + if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { + // Lines are just parallel, not the same. No overlap. + return null; + } + + var sa = dotProduct(va, e) / sqrLenA; + var sb = sa + dotProduct(va, vb) / sqrLenA; + var smin = Math.min(sa, sb); + var smax = Math.max(sa, sb); + + // this is, essentially, the FindIntersection acting on floats from + // Schneider & Eberly, just inlined into this function. + if (smin <= 1 && smax >= 0) { + + // overlap on an end point + if (smin === 1) { + return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)]; + } + + if (smax === 0) { + return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)]; + } + + if (noEndpointTouch && smin === 0 && smax === 1) { return null; } + + // There's overlap on a segment -- two points of intersection. Return both. + return [ + toPoint(a1, smin > 0 ? smin : 0, va), + toPoint(a1, smax < 1 ? smax : 1, va) + ]; + } + + return null; + } + + /** + * @param {SweepEvent} se1 + * @param {SweepEvent} se2 + * @param {Queue} queue + * @return {Number} + */ + function possibleIntersection (se1, se2, queue) { + // that disallows self-intersecting polygons, + // did cost us half a day, so I'll leave it + // out of respect + // if (se1.isSubject === se2.isSubject) return; + var inter = intersection( + se1.point, se1.otherEvent.point, + se2.point, se2.otherEvent.point + ); + + var nintersections = inter ? inter.length : 0; + if (nintersections === 0) { return 0; } // no intersection + + // the line segments intersect at an endpoint of both line segments + if ((nintersections === 1) && + (equals(se1.point, se2.point) || + equals(se1.otherEvent.point, se2.otherEvent.point))) { + return 0; + } + + if (nintersections === 2 && se1.isSubject === se2.isSubject) { + // if(se1.contourId === se2.contourId){ + // console.warn('Edges of the same polygon overlap', + // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point); + // } + //throw new Error('Edges of the same polygon overlap'); + return 0; + } + + // The line segments associated to se1 and se2 intersect + if (nintersections === 1) { + + // if the intersection point is not an endpoint of se1 + if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) { + divideSegment(se1, inter[0], queue); + } + + // if the intersection point is not an endpoint of se2 + if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) { + divideSegment(se2, inter[0], queue); + } + return 1; + } + + // The line segments associated to se1 and se2 overlap + var events = []; + var leftCoincide = false; + var rightCoincide = false; + + if (equals(se1.point, se2.point)) { + leftCoincide = true; // linked + } else if (compareEvents(se1, se2) === 1) { + events.push(se2, se1); + } else { + events.push(se1, se2); + } + + if (equals(se1.otherEvent.point, se2.otherEvent.point)) { + rightCoincide = true; + } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { + events.push(se2.otherEvent, se1.otherEvent); + } else { + events.push(se1.otherEvent, se2.otherEvent); + } + + if ((leftCoincide && rightCoincide) || leftCoincide) { + // both line segments are equal or share the left endpoint + se2.type = NON_CONTRIBUTING; + se1.type = (se2.inOut === se1.inOut) + ? SAME_TRANSITION : DIFFERENT_TRANSITION; + + if (leftCoincide && !rightCoincide) { + // honestly no idea, but changing events selection from [2, 1] + // to [0, 1] fixes the overlapping self-intersecting polygons issue + divideSegment(events[1].otherEvent, events[0].point, queue); + } + return 2; + } + + // the line segments share the right endpoint + if (rightCoincide) { + divideSegment(events[0], events[1].point, queue); + return 3; + } + + // no line segment includes totally the other one + if (events[0] !== events[3].otherEvent) { + divideSegment(events[0], events[1].point, queue); + divideSegment(events[1], events[2].point, queue); + return 3; + } + + // one line segment includes the other one + divideSegment(events[0], events[1].point, queue); + divideSegment(events[3].otherEvent, events[2].point, queue); + + return 3; + } + + /** + * @param {SweepEvent} le1 + * @param {SweepEvent} le2 + * @return {Number} + */ + function compareSegments(le1, le2) { + if (le1 === le2) { return 0; } + + // Segments are not collinear + if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || + signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { + + // If they share their left endpoint use the right endpoint to sort + if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; } + + // Different left endpoint: use the left endpoint to sort + if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; } + + // has the line segment associated to e1 been inserted + // into S after the line segment associated to e2 ? + if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; } + + // The line segment associated to e2 has been inserted + // into S after the line segment associated to e1 + return le1.isBelow(le2.point) ? -1 : 1; + } + + if (le1.isSubject === le2.isSubject) { // same polygon + var p1 = le1.point, p2 = le2.point; + if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) { + p1 = le1.otherEvent.point; p2 = le2.otherEvent.point; + if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; } + else { return le1.contourId > le2.contourId ? 1 : -1; } + } + } else { // Segments are collinear, but belong to separate polygons + return le1.isSubject ? -1 : 1; + } + + return compareEvents(le1, le2) === 1 ? 1 : -1; + } + + function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) { + var sweepLine = new SplayTree(compareSegments); + var sortedEvents = []; + + var rightbound = Math.min(sbbox[2], cbbox[2]); + + var prev, next, begin; + + while (eventQueue.length !== 0) { + var event = eventQueue.pop(); + sortedEvents.push(event); + + // optimization by bboxes for intersection and difference goes here + if ((operation === INTERSECTION && event.point[0] > rightbound) || + (operation === DIFFERENCE && event.point[0] > sbbox[2])) { + break; + } + + if (event.left) { + next = prev = sweepLine.insert(event); + begin = sweepLine.minNode(); + + if (prev !== begin) { prev = sweepLine.prev(prev); } + else { prev = null; } + + next = sweepLine.next(next); + + var prevEvent = prev ? prev.key : null; + var prevprevEvent = (void 0); + computeFields(event, prevEvent, operation); + if (next) { + if (possibleIntersection(event, next.key, eventQueue) === 2) { + computeFields(event, prevEvent, operation); + computeFields(event, next.key, operation); + } + } + + if (prev) { + if (possibleIntersection(prev.key, event, eventQueue) === 2) { + var prevprev = prev; + if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); } + else { prevprev = null; } + + prevprevEvent = prevprev ? prevprev.key : null; + computeFields(prevEvent, prevprevEvent, operation); + computeFields(event, prevEvent, operation); + } + } + } else { + event = event.otherEvent; + next = prev = sweepLine.find(event); + + if (prev && next) { + + if (prev !== begin) { prev = sweepLine.prev(prev); } + else { prev = null; } + + next = sweepLine.next(next); + sweepLine.remove(event); + + if (next && prev) { + possibleIntersection(prev.key, next.key, eventQueue); + } + } + } + } + return sortedEvents; + } + + var Contour = function Contour() { + this.points = []; + this.holeIds = []; + this.holeOf = null; + this.depth = null; + }; + + Contour.prototype.isExterior = function isExterior () { + return this.holeOf == null; + }; + + /** + * @param {Array.} sortedEvents + * @return {Array.} + */ + function orderEvents(sortedEvents) { + var event, i, len, tmp; + var resultEvents = []; + for (i = 0, len = sortedEvents.length; i < len; i++) { + event = sortedEvents[i]; + if ((event.left && event.inResult) || + (!event.left && event.otherEvent.inResult)) { + resultEvents.push(event); + } + } + // Due to overlapping edges the resultEvents array can be not wholly sorted + var sorted = false; + while (!sorted) { + sorted = true; + for (i = 0, len = resultEvents.length; i < len; i++) { + if ((i + 1) < len && + compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { + tmp = resultEvents[i]; + resultEvents[i] = resultEvents[i + 1]; + resultEvents[i + 1] = tmp; + sorted = false; + } + } + } + + + for (i = 0, len = resultEvents.length; i < len; i++) { + event = resultEvents[i]; + event.otherPos = i; + } + + // imagine, the right event is found in the beginning of the queue, + // when his left counterpart is not marked yet + for (i = 0, len = resultEvents.length; i < len; i++) { + event = resultEvents[i]; + if (!event.left) { + tmp = event.otherPos; + event.otherPos = event.otherEvent.otherPos; + event.otherEvent.otherPos = tmp; + } + } + + return resultEvents; + } + + + /** + * @param {Number} pos + * @param {Array.} resultEvents + * @param {Object>} processed + * @return {Number} + */ + function nextPos(pos, resultEvents, processed, origPos) { + var newPos = pos + 1, + p = resultEvents[pos].point, + p1; + var length = resultEvents.length; + + if (newPos < length) + { p1 = resultEvents[newPos].point; } + + while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { + if (!processed[newPos]) { + return newPos; + } else { + newPos++; + } + p1 = resultEvents[newPos].point; + } + + newPos = pos - 1; + + while (processed[newPos] && newPos > origPos) { + newPos--; + } + + return newPos; + } + + + function initializeContourFromContext(event, contours, contourId) { + var contour = new Contour(); + if (event.prevInResult != null) { + var prevInResult = event.prevInResult; + // Note that it is valid to query the "previous in result" for its output contour id, + // because we must have already processed it (i.e., assigned an output contour id) + // in an earlier iteration, otherwise it wouldn't be possible that it is "previous in + // result". + var lowerContourId = prevInResult.outputContourId; + var lowerResultTransition = prevInResult.resultTransition; + if (lowerResultTransition > 0) { + // We are inside. Now we have to check if the thing below us is another hole or + // an exterior contour. + var lowerContour = contours[lowerContourId]; + if (lowerContour.holeOf != null) { + // The lower contour is a hole => Connect the new contour as a hole to its parent, + // and use same depth. + var parentContourId = lowerContour.holeOf; + contours[parentContourId].holeIds.push(contourId); + contour.holeOf = parentContourId; + contour.depth = contours[lowerContourId].depth; + } else { + // The lower contour is an exterior contour => Connect the new contour as a hole, + // and increment depth. + contours[lowerContourId].holeIds.push(contourId); + contour.holeOf = lowerContourId; + contour.depth = contours[lowerContourId].depth + 1; + } + } else { + // We are outside => this contour is an exterior contour of same depth. + contour.holeOf = null; + contour.depth = contours[lowerContourId].depth; + } + } else { + // There is no lower/previous contour => this contour is an exterior contour of depth 0. + contour.holeOf = null; + contour.depth = 0; + } + return contour; + } + + /** + * @param {Array.} sortedEvents + * @return {Array.<*>} polygons + */ + function connectEdges(sortedEvents) { + var i, len; + var resultEvents = orderEvents(sortedEvents); + + // "false"-filled array + var processed = {}; + var contours = []; + + var loop = function ( ) { + + if (processed[i]) { + return; + } + + var contourId = contours.length; + var contour = initializeContourFromContext(resultEvents[i], contours, contourId); + + // Helper function that combines marking an event as processed with assigning its output contour ID + var markAsProcessed = function (pos) { + processed[pos] = true; + resultEvents[pos].outputContourId = contourId; + }; + + var pos = i; + var origPos = i; + + var initial = resultEvents[i].point; + contour.points.push(initial); + + /* eslint no-constant-condition: "off" */ + while (true) { + markAsProcessed(pos); + + pos = resultEvents[pos].otherPos; + + markAsProcessed(pos); + contour.points.push(resultEvents[pos].point); + + pos = nextPos(pos, resultEvents, processed, origPos); + + if (pos == origPos) { + break; + } + } + + contours.push(contour); + }; + + for (i = 0, len = resultEvents.length; i < len; i++) loop( ); + + return contours; + } + + var tinyqueue = TinyQueue; + var default_1 = TinyQueue; + + function TinyQueue(data, compare) { + if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); } + + this.data = data || []; + this.length = this.data.length; + this.compare = compare || defaultCompare; + + if (this.length > 0) { + for (var i = (this.length >> 1) - 1; i >= 0; i--) { this._down(i); } + } + } + + function defaultCompare(a, b) { + return a < b ? -1 : a > b ? 1 : 0; + } + + TinyQueue.prototype = { + + push: function (item) { + this.data.push(item); + this.length++; + this._up(this.length - 1); + }, + + pop: function () { + if (this.length === 0) { return undefined; } + + var top = this.data[0]; + this.length--; + + if (this.length > 0) { + this.data[0] = this.data[this.length]; + this._down(0); + } + this.data.pop(); + + return top; + }, + + peek: function () { + return this.data[0]; + }, + + _up: function (pos) { + var data = this.data; + var compare = this.compare; + var item = data[pos]; + + while (pos > 0) { + var parent = (pos - 1) >> 1; + var current = data[parent]; + if (compare(item, current) >= 0) { break; } + data[pos] = current; + pos = parent; + } + + data[pos] = item; + }, + + _down: function (pos) { + var data = this.data; + var compare = this.compare; + var halfLength = this.length >> 1; + var item = data[pos]; + + while (pos < halfLength) { + var left = (pos << 1) + 1; + var right = left + 1; + var best = data[left]; + + if (right < this.length && compare(data[right], best) < 0) { + left = right; + best = data[right]; + } + if (compare(best, item) >= 0) { break; } + + data[pos] = best; + pos = left; + } + + data[pos] = item; + } + }; + tinyqueue.default = default_1; + + var max = Math.max; + var min = Math.min; + + var contourId = 0; + + + function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { + var i, len, s1, s2, e1, e2; + for (i = 0, len = contourOrHole.length - 1; i < len; i++) { + s1 = contourOrHole[i]; + s2 = contourOrHole[i + 1]; + e1 = new SweepEvent(s1, false, undefined, isSubject); + e2 = new SweepEvent(s2, false, e1, isSubject); + e1.otherEvent = e2; + + if (s1[0] === s2[0] && s1[1] === s2[1]) { + continue; // skip collapsed edges, or it breaks + } + + e1.contourId = e2.contourId = depth; + if (!isExteriorRing) { + e1.isExteriorRing = false; + e2.isExteriorRing = false; + } + if (compareEvents(e1, e2) > 0) { + e2.left = true; + } else { + e1.left = true; + } + + var x = s1[0], y = s1[1]; + bbox[0] = min(bbox[0], x); + bbox[1] = min(bbox[1], y); + bbox[2] = max(bbox[2], x); + bbox[3] = max(bbox[3], y); + + // Pushing it so the queue is sorted from left to right, + // with object on the left having the highest priority. + Q.push(e1); + Q.push(e2); + } + } + + + function fillQueue(subject, clipping, sbbox, cbbox, operation) { + var eventQueue = new tinyqueue(null, compareEvents); + var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk; + + for (i = 0, ii = subject.length; i < ii; i++) { + polygonSet = subject[i]; + for (j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (isExteriorRing) { contourId++; } + processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); + } + } + + for (i = 0, ii = clipping.length; i < ii; i++) { + polygonSet = clipping[i]; + for (j = 0, jj = polygonSet.length; j < jj; j++) { + isExteriorRing = j === 0; + if (operation === DIFFERENCE) { isExteriorRing = false; } + if (isExteriorRing) { contourId++; } + processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); + } + } + + return eventQueue; + } + + var EMPTY = []; + + + function trivialOperation(subject, clipping, operation) { + var result = null; + if (subject.length * clipping.length === 0) { + if (operation === INTERSECTION) { + result = EMPTY; + } else if (operation === DIFFERENCE) { + result = subject; + } else if (operation === UNION || + operation === XOR) { + result = (subject.length === 0) ? clipping : subject; + } + } + return result; + } + + + function compareBBoxes(subject, clipping, sbbox, cbbox, operation) { + var result = null; + if (sbbox[0] > cbbox[2] || + cbbox[0] > sbbox[2] || + sbbox[1] > cbbox[3] || + cbbox[1] > sbbox[3]) { + if (operation === INTERSECTION) { + result = EMPTY; + } else if (operation === DIFFERENCE) { + result = subject; + } else if (operation === UNION || + operation === XOR) { + result = subject.concat(clipping); + } + } + return result; + } + + + function boolean(subject, clipping, operation) { + if (typeof subject[0][0][0] === 'number') { + subject = [subject]; + } + if (typeof clipping[0][0][0] === 'number') { + clipping = [clipping]; + } + var trivial = trivialOperation(subject, clipping, operation); + if (trivial) { + return trivial === EMPTY ? null : trivial; + } + var sbbox = [Infinity, Infinity, -Infinity, -Infinity]; + var cbbox = [Infinity, Infinity, -Infinity, -Infinity]; + + // console.time('fill queue'); + var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation); + //console.timeEnd('fill queue'); + + trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation); + if (trivial) { + return trivial === EMPTY ? null : trivial; + } + // console.time('subdivide edges'); + var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation); + //console.timeEnd('subdivide edges'); + + // console.time('connect vertices'); + var contours = connectEdges(sortedEvents); + //console.timeEnd('connect vertices'); + + // Convert contours to polygons + var polygons = []; + for (var i = 0; i < contours.length; i++) { + var contour = contours[i]; + if (contour.isExterior()) { + // The exterior ring goes first + var rings = [contour.points]; + // Followed by holes if any + for (var j = 0; j < contour.holeIds.length; j++) { + var holeId = contour.holeIds[j]; + rings.push(contours[holeId].points); + } + polygons.push(rings); + } + } + + return polygons; + } + + function union (subject, clipping) { + return boolean(subject, clipping, UNION); + } + + function diff (subject, clipping) { + return boolean(subject, clipping, DIFFERENCE); + } + + function xor (subject, clipping) { + return boolean(subject, clipping, XOR); + } + + function intersection$1 (subject, clipping) { + return boolean(subject, clipping, INTERSECTION); + } + + /** + * @enum {Number} + */ + var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR }; + + exports.diff = diff; + exports.intersection = intersection$1; + exports.operations = operations; + exports.union = union; + exports.xor = xor; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + + +},{}],23:[function(require,module,exports){ +// Top level file is just a mixin of submodules & constants +'use strict'; + +var assign = require('./lib/utils/common').assign; + +var deflate = require('./lib/deflate'); +var inflate = require('./lib/inflate'); +var constants = require('./lib/zlib/constants'); + +var pako = {}; + +assign(pako, deflate, inflate, constants); + +module.exports = pako; + +},{"./lib/deflate":24,"./lib/inflate":25,"./lib/utils/common":26,"./lib/zlib/constants":29}],24:[function(require,module,exports){ +'use strict'; + + +var zlib_deflate = require('./zlib/deflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); + +var toString = Object.prototype.toString; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + +var Z_NO_FLUSH = 0; +var Z_FINISH = 4; + +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_SYNC_FLUSH = 2; + +var Z_DEFAULT_COMPRESSION = -1; + +var Z_DEFAULT_STRATEGY = 0; + +var Z_DEFLATED = 8; + +/* ===========================================================================*/ + + +/** + * class Deflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[deflate]], + * [[deflateRaw]] and [[gzip]]. + **/ + +/* internal + * Deflate.chunks -> Array + * + * Chunks of output data, if [[Deflate#onData]] not overridden. + **/ + +/** + * Deflate.result -> Uint8Array|Array + * + * Compressed result, generated by default [[Deflate#onData]] + * and [[Deflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Deflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Deflate.err -> Number + * + * Error code after deflate finished. 0 (Z_OK) on success. + * You will not need it in real life, because deflate errors + * are possible only on wrong options or bad `onData` / `onEnd` + * custom handlers. + **/ + +/** + * Deflate.msg -> String + * + * Error message, if [[Deflate.err]] != 0 + **/ + + +/** + * new Deflate(options) + * - options (Object): zlib deflate options. + * + * Creates new deflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `level` + * - `windowBits` + * - `memLevel` + * - `strategy` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw deflate + * - `gzip` (Boolean) - create gzip wrapper + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * - `header` (Object) - custom header for gzip + * - `text` (Boolean) - true if compressed data believed to be text + * - `time` (Number) - modification time, unix timestamp + * - `os` (Number) - operation system code + * - `extra` (Array) - array of bytes with extra data (max 65536) + * - `name` (String) - file name (binary string) + * - `comment` (String) - comment (binary string) + * - `hcrc` (Boolean) - true if header crc should be added + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var deflate = new pako.Deflate({ level: 3}); + * + * deflate.push(chunk1, false); + * deflate.push(chunk2, true); // true -> last chunk + * + * if (deflate.err) { throw new Error(deflate.err); } + * + * console.log(deflate.result); + * ``` + **/ +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + + if (opt.dictionary) { + var dict; + // Convert data if needed + if (typeof opt.dictionary === 'string') { + // If we need to compress text, change encoding to utf8. + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} + +/** + * Deflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be + * converted to utf8 byte sequence. + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. + * + * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with + * new compressed chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the compression context. + * + * On fail call [[Deflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * array format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + + if (this.ended) { return false; } + + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // If we need to compress text, change encoding to utf8. + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + + // Finalize on the last chunk. + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Deflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): output data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Deflate#onEnd(status) -> Void + * - status (Number): deflate status. 0 (Z_OK) on success, + * other if not. + * + * Called once after you tell deflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * deflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * Compress `data` with deflate algorithm and `options`. + * + * Supported options are: + * + * - level + * - windowBits + * - memLevel + * - strategy + * - dictionary + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); + * + * console.log(pako.deflate(data)); + * ``` + **/ +function deflate(input, options) { + var deflator = new Deflate(options); + + deflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (deflator.err) { throw deflator.msg || msg[deflator.err]; } + + return deflator.result; +} + + +/** + * deflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + + +/** + * gzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but create gzip wrapper instead of + * deflate one. + **/ +function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); +} + + +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +},{"./utils/common":26,"./utils/strings":27,"./zlib/deflate":31,"./zlib/messages":36,"./zlib/zstream":38}],25:[function(require,module,exports){ +'use strict'; + + +var zlib_inflate = require('./zlib/inflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var c = require('./zlib/constants'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); +var GZheader = require('./zlib/gzheader'); + +var toString = Object.prototype.toString; + +/** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + +/* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overridden. + **/ + +/** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + +/** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + + +/** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ +function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: '' + }, options || {}); + + var opt = this.options; + + // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { opt.windowBits = -15; } + } + + // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + if ((opt.windowBits >= 0) && (opt.windowBits < 16) && + !(options && options.windowBits)) { + opt.windowBits += 32; + } + + // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + if ((opt.windowBits > 15) && (opt.windowBits < 48)) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + + this.header = new GZheader(); + + zlib_inflate.inflateGetHeader(this.strm, this.header); + + // Setup dictionary + if (opt.dictionary) { + // Convert data if needed + if (typeof opt.dictionary === 'string') { + opt.dictionary = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + opt.dictionary = new Uint8Array(opt.dictionary); + } + if (opt.raw) { //In raw mode we need to set the dictionary early + status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary); + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + } + } +} + +/** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Inflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + + // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + var allowBufError = false; + + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ + + if (status === c.Z_NEED_DICT && dictionary) { + status = zlib_inflate.inflateSetDictionary(this.strm, dictionary); + } + + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { + + if (this.options.to === 'string') { + + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + + // move tail + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } + + this.onData(utf8str); + + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + + // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + + // Finalize on the last chunk. + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): output data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Inflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Inflate.prototype.onEnd = function (status) { + // On success - join + if (status === c.Z_OK) { + if (this.options.to === 'string') { + // Glue & convert here, until we teach pako to send + // utf8 aligned strings to onData + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ +function inflate(input, options) { + var inflator = new Inflate(options); + + inflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (inflator.err) { throw inflator.msg || msg[inflator.err]; } + + return inflator.result; +} + + +/** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); +} + + +/** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + +exports.Inflate = Inflate; +exports.inflate = inflate; +exports.inflateRaw = inflateRaw; +exports.ungzip = inflate; + +},{"./utils/common":26,"./utils/strings":27,"./zlib/constants":29,"./zlib/gzheader":32,"./zlib/inflate":34,"./zlib/messages":36,"./zlib/zstream":38}],26:[function(require,module,exports){ +'use strict'; + + +var TYPED_OK = (typeof Uint8Array !== 'undefined') && + (typeof Uint16Array !== 'undefined') && + (typeof Int32Array !== 'undefined'); + +function _has(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +exports.assign = function (obj /*from1, from2, from3, ...*/) { + var sources = Array.prototype.slice.call(arguments, 1); + while (sources.length) { + var source = sources.shift(); + if (!source) { continue; } + + if (typeof source !== 'object') { + throw new TypeError(source + 'must be non-object'); + } + + for (var p in source) { + if (_has(source, p)) { + obj[p] = source[p]; + } + } + } + + return obj; +}; + + +// reduce buffer size, avoiding mem copy +exports.shrinkBuf = function (buf, size) { + if (buf.length === size) { return buf; } + if (buf.subarray) { return buf.subarray(0, size); } + buf.length = size; + return buf; +}; + + +var fnTyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } + // Fallback to ordinary array + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + var i, l, len, pos, chunk, result; + + // calculate data length + len = 0; + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } + + // join chunks + result = new Uint8Array(len); + pos = 0; + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + + return result; + } +}; + +var fnUntyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + return [].concat.apply([], chunks); + } +}; + + +// Enable/Disable typed arrays use, for testing +// +exports.setTyped = function (on) { + if (on) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign(exports, fnTyped); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign(exports, fnUntyped); + } +}; + +exports.setTyped(TYPED_OK); + +},{}],27:[function(require,module,exports){ +// String encode/decode helpers +'use strict'; + + +var utils = require('./common'); + + +// Quick check if we can use fast array to bin string conversion +// +// - apply(Array) can fail on Android 2.2 +// - apply(Uint8Array) can fail on iOS 5.1 Safari +// +var STR_APPLY_OK = true; +var STR_APPLY_UIA_OK = true; + +try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } +try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } + + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new utils.Buf8(256); +for (var q = 0; q < 256; q++) { + _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start + + +// convert string to array (typed, when possible) +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + buf = new utils.Buf8(buf_len); + + // convert + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Helper (used in 2 places) +function buf2binstring(buf, len) { + // On Chrome, the arguments in a function call that are allowed is `65534`. + // If the length of the buffer is smaller than that, we can use this optimization, + // otherwise we will take a slower path. + if (len < 65534) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} + + +// Convert byte array to binary string +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; + + +// Convert binary string (typed, when possible) +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; + + +// convert array to string +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + // quick process ascii + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + // skip 5 & 6 byte codes + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; + + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means buffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{"./common":26}],28:[function(require,module,exports){ +'use strict'; + +// Note: adler32 takes 12% for level 0 and 2% for level 6. +// It isn't worth it to make additional optimizations as in original. +// Small size is preferable. + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} + + +module.exports = adler32; + +},{}],29:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + + + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type +}; + +},{}],30:[function(require,module,exports){ +'use strict'; + +// Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],31:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +//var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +//var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +//var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + + +/* compression levels */ +//var Z_NO_COMPRESSION = 0; +//var Z_BEST_SPEED = 1; +//var Z_BEST_COMPRESSION = 9; +var Z_DEFAULT_COMPRESSION = -1; + + +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +//var Z_BINARY = 0; +//var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + + +/* The deflate compression method */ +var Z_DEFLATED = 8; + +/*============================================================================*/ + + +var MAX_MEM_LEVEL = 9; +/* Maximum value for memLevel in deflateInit2 */ +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_MEM_LEVEL = 8; + + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ +var LITERALS = 256; +/* number of literal bytes 0..255 */ +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ +var D_CODES = 30; +/* number of distance codes */ +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ +var BS_BLOCK_DONE = 2; /* block flush performed */ +var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ +var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ + +var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->output buffer and copying into it. + * (See also read_buf()). + */ +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} + + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +function putShortMSB(s, b) { +// put_byte(s, (Byte)(b >> 8)); +// put_byte(s, (Byte)(b & 0xff)); + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} + + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->input buffer and copying from it. + * (See also flush_pending()). + */ +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + + strm.avail_in -= len; + + // zmemcpy(buf, strm->next_in, len); + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} + + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; /* max hash chain length */ + var scan = s.strstart; /* current string */ + var match; /* matched string */ + var len; /* length of current match */ + var best_len = s.prev_length; /* best match length so far */ + var nice_match = s.nice_match; /* stop if match long enough */ + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + + var _win = s.window; // shortcut + + var wmask = s.w_mask; + var prev = s.prev; + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + + // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + // Assert(cur_match < s->strstart, "no future"); + match = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ + + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2; + match++; + // Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + /*jshint noempty:false*/ + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + + // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} + + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + + //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = s.window_size - s.lookahead - s.strstart; + + // JS ints have 32 bit, block below not needed + /* Deal with !@#$% 64K limit: */ + //if (sizeof(int) <= 2) { + // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + // more = wsize; + // + // } else if (more == (unsigned)(-1)) { + // /* Very unlikely, but possible on 16 bit machine if + // * strstart == 0 && lookahead == 1 (input done a byte at time) + // */ + // more--; + // } + //} + + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + /* we now have strstart >= MAX_DIST */ + s.block_start -= _w_size; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); + + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + //Assert(more >= 2, "more < 2"); + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + + /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; +//#if MIN_MATCH != 3 +// Call update_hash() MIN_MATCH-3 more times +//#endif + while (s.insert) { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ +// if (s.high_water < s.window_size) { +// var curr = s.strstart + s.lookahead; +// var init = 0; +// +// if (s.high_water < curr) { +// /* Previous high water mark below current data -- zero WIN_INIT +// * bytes or up to end of window, whichever is less. +// */ +// init = s.window_size - curr; +// if (init > WIN_INIT) +// init = WIN_INIT; +// zmemzero(s->window + curr, (unsigned)init); +// s->high_water = curr + init; +// } +// else if (s->high_water < (ulg)curr + WIN_INIT) { +// /* High water mark at or above current data, but below current data +// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +// * to end of window, whichever is less. +// */ +// init = (ulg)curr + WIN_INIT - s->high_water; +// if (init > s->window_size - s->high_water) +// init = s->window_size - s->high_water; +// zmemzero(s->window + s->high_water, (unsigned)init); +// s->high_water += init; +// } +// } +// +// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +// "not enough room for search"); +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +function deflate_stored(s, flush) { + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s.lookahead <= 1) { + + //Assert(s->strstart < s->w_size+MAX_DIST(s) || + // s->block_start >= (long)s->w_size, "slide too late"); +// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || +// s.block_start >= s.w_size)) { +// throw new Error("slide too late"); +// } + + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + } + //Assert(s->block_start >= 0L, "block gone"); +// if (s.block_start < 0) throw new Error("block gone"); + + s.strstart += s.lookahead; + s.lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + var max_start = s.block_start + max_block_size; + + if (s.strstart === 0 || s.strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_NEED_MORE; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +function deflate_fast(s, flush) { + var hash_head; /* head of the hash chain */ + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; /* flush the current block */ + } + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + } + if (s.match_length >= MIN_MATCH) { + // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only + + /*** _tr_tally_dist(s, s.strstart - s.match_start, + s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { + s.match_length--; /* string at strstart already in table */ + do { + s.strstart++; + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + +//#if MIN_MATCH != 3 +// Call UPDATE_HASH() MIN_MATCH-3 more times +//#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s.window[s.strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +function deflate_slow(s, flush) { + var hash_head; /* head of hash chain */ + var bflush; /* set if current block must be flushed */ + + var max_insert; + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + */ + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s.match_length = MIN_MATCH - 1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + //check_match(s, s.strstart-1, s.prev_match, s.prev_length); + + /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, + s.prev_length - MIN_MATCH, bflush);***/ + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + } else if (s.match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + if (bflush) { + /*** FLUSH_BLOCK_ONLY(s, 0) ***/ + flush_block_only(s, false); + /***/ + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + //Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s.match_available) { + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, "bug2"); + //if (strm.avail_out <= 0) { throw new Error("bug2");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +},{"../utils/common":26,"./adler32":28,"./crc32":30,"./messages":36,"./trees":37}],32:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + this.xflags = 0; + /* operating system */ + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + /* pointer to zero-terminated file name or Z_NULL */ + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + /* pointer to zero-terminated comment or Z_NULL */ + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + /* true if there was or will be a header crc */ + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + this.done = false; +} + +module.exports = GZheader; + +},{}],33:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +// See state defs from inflate.js +var BAD = 30; /* got a data error -- remain here until reset */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ +module.exports = function inflate_fast(strm, start) { + var state; + var _in; /* local strm.input */ + var last; /* have enough input while in < last */ + var _out; /* local strm.output */ + var beg; /* inflate()'s initial strm.output */ + var end; /* while out < end, enough space available */ +//#ifdef INFLATE_STRICT + var dmax; /* maximum distance from zlib header */ +//#endif + var wsize; /* window size or zero if not using window */ + var whave; /* valid bytes in the window */ + var wnext; /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + var s_window; /* allocated sliding window, if wsize != 0 */ + var hold; /* local strm.hold */ + var bits; /* local strm.bits */ + var lcode; /* local strm.lencode */ + var dcode; /* local strm.distcode */ + var lmask; /* mask for first level of length codes */ + var dmask; /* mask for first level of distance codes */ + var here; /* retrieved table entry */ + var op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + var len; /* match length, unused bytes */ + var dist; /* match distance */ + var from; /* where to copy match from */ + var from_source; + + + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + state = strm.state; + //here = state.here; + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); +//#ifdef INFLATE_STRICT + dmax = state.dmax; +//#endif + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = lcode[hold & lmask]; + + dolen: + for (;;) { // Goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + if (op === 0) { /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[_out++] = here & 0xffff/*here.val*/; + } + else if (op & 16) { /* length base */ + len = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & ((1 << op) - 1); + hold >>>= op; + bits -= op; + } + //Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + + dodist: + for (;;) { // goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + + if (op & 16) { /* distance base */ + dist = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & ((1 << op) - 1); +//#ifdef INFLATE_STRICT + if (dist > dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } +//#endif + hold >>>= op; + bits -= op; + //Tracevv((stderr, "inflate: distance %u\n", dist)); + op = _out - beg; /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } + +// (!) This block is disabled in zlib defaults, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// if (len <= op - whave) { +// do { +// output[_out++] = 0; +// } while (--len); +// continue top; +// } +// len -= op - whave; +// do { +// output[_out++] = 0; +// } while (--op > whave); +// if (op === 0) { +// from = _out - dist; +// do { +// output[_out++] = output[from++]; +// } while (--len); +// continue top; +// } +//#endif + } + from = 0; // window index + from_source = s_window; + if (wnext === 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } + else { + from = _out - dist; /* copy direct from output */ + do { /* minimum length is three */ + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } + else if ((op & 64) === 0) { /* 2nd level distance code */ + here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dodist; + } + else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } + else if ((op & 64) === 0) { /* 2nd level length code */ + here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dolen; + } + else if (op & 32) { /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } + else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while (_in < last && _out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + + /* update state and return */ + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); + strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); + state.hold = hold; + state.bits = bits; + return; +}; + +},{}],34:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var inflate_fast = require('./inffast'); +var inflate_table = require('./inftrees'); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +//var Z_NO_FLUSH = 0; +//var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +//var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + +/* The deflate compression method */ +var Z_DEFLATED = 8; + + +/* STATES ====================================================================*/ +/* ===========================================================================*/ + + +var HEAD = 1; /* i: waiting for magic header */ +var FLAGS = 2; /* i: waiting for method and flags (gzip) */ +var TIME = 3; /* i: waiting for modification time (gzip) */ +var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ +var EXLEN = 5; /* i: waiting for extra length (gzip) */ +var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ +var NAME = 7; /* i: waiting for end of file name (gzip) */ +var COMMENT = 8; /* i: waiting for end of comment (gzip) */ +var HCRC = 9; /* i: waiting for header crc (gzip) */ +var DICTID = 10; /* i: waiting for dictionary check value */ +var DICT = 11; /* waiting for inflateSetDictionary() call */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ +var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ +var STORED = 14; /* i: waiting for stored size (length and complement) */ +var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ +var COPY = 16; /* i/o: waiting for input or output to copy stored block */ +var TABLE = 17; /* i: waiting for dynamic block table lengths */ +var LENLENS = 18; /* i: waiting for code length code lengths */ +var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ +var LEN_ = 20; /* i: same as LEN below, but only first time in */ +var LEN = 21; /* i: waiting for length/lit/eob code */ +var LENEXT = 22; /* i: waiting for length extra bits */ +var DIST = 23; /* i: waiting for distance code */ +var DISTEXT = 24; /* i: waiting for distance extra bits */ +var MATCH = 25; /* o: waiting for output space to copy string */ +var LIT = 26; /* o: waiting for output space to write literal */ +var CHECK = 27; /* i: waiting for 32-bit check value */ +var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ +var DONE = 29; /* finished check, done -- remain here until reset */ +var BAD = 30; /* got a data error -- remain here until reset */ +var MEM = 31; /* got an inflate() memory error -- remain here until reset */ +var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ + +/* ===========================================================================*/ + + + +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_WBITS = MAX_WBITS; + + +function zswap32(q) { + return (((q >>> 24) & 0xff) + + ((q >>> 8) & 0xff00) + + ((q & 0xff00) << 8) + + ((q & 0xff) << 24)); +} + + +function InflateState() { + this.mode = 0; /* current inflate mode */ + this.last = false; /* true if processing last block */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.havedict = false; /* true if dictionary provided */ + this.flags = 0; /* gzip header method and flags (0 if zlib) */ + this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ + this.check = 0; /* protected copy of check value */ + this.total = 0; /* protected copy of output count */ + // TODO: may be {} + this.head = null; /* where to save gzip header information */ + + /* sliding window */ + this.wbits = 0; /* log base 2 of requested window size */ + this.wsize = 0; /* window size or zero if not using window */ + this.whave = 0; /* valid bytes in the window */ + this.wnext = 0; /* window write index */ + this.window = null; /* allocated sliding window, if needed */ + + /* bit accumulator */ + this.hold = 0; /* input bit accumulator */ + this.bits = 0; /* number of bits in "in" */ + + /* for string and stored block copying */ + this.length = 0; /* literal or length of data to copy */ + this.offset = 0; /* distance back to copy string from */ + + /* for table and code decoding */ + this.extra = 0; /* extra bits needed */ + + /* fixed and dynamic code tables */ + this.lencode = null; /* starting table for length/literal codes */ + this.distcode = null; /* starting table for distance codes */ + this.lenbits = 0; /* index bits for lencode */ + this.distbits = 0; /* index bits for distcode */ + + /* dynamic table building */ + this.ncode = 0; /* number of code length code lengths */ + this.nlen = 0; /* number of length code lengths */ + this.ndist = 0; /* number of distance code lengths */ + this.have = 0; /* number of code lengths in lens[] */ + this.next = null; /* next available space in codes[] */ + + this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ + this.work = new utils.Buf16(288); /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ + this.distdyn = null; /* dynamic table for distance codes (JS specific) */ + this.sane = 0; /* if false, allow invalid distance too far */ + this.back = 0; /* bits back of last unprocessed length/lit */ + this.was = 0; /* initial length of match */ +} + +function inflateResetKeep(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; /*Z_NULL*/ + if (state.wrap) { /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null/*Z_NULL*/; + state.hold = 0; + state.bits = 0; + //state.lencode = state.distcode = state.next = state.codes; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + + state.sane = 1; + state.back = -1; + //Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +function inflateReset(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + +} + +function inflateReset2(strm, windowBits) { + var wrap; + var state; + + /* get the state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + + /* update state and reset the rest of it */ + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); +} + +function inflateInit2(strm, windowBits) { + var ret; + var state; + + if (!strm) { return Z_STREAM_ERROR; } + //strm.msg = Z_NULL; /* in case we return an error */ + + state = new InflateState(); + + //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + strm.state = state; + state.window = null/*Z_NULL*/; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null/*Z_NULL*/; + } + return ret; +} + +function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); +} + + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +var virgin = true; + +var lenfix, distfix; // We have no pointers in JS, so keep tables separate + +function fixedtables(state) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + var sym; + + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + + /* literal/length table */ + sym = 0; + while (sym < 144) { state.lens[sym++] = 8; } + while (sym < 256) { state.lens[sym++] = 9; } + while (sym < 280) { state.lens[sym++] = 7; } + while (sym < 288) { state.lens[sym++] = 8; } + + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + + /* distance table */ + sym = 0; + while (sym < 32) { state.lens[sym++] = 5; } + + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + + /* do this just once */ + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; +} + + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + + /* if it hasn't been done already, allocate space for the window */ + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + + state.window = new utils.Buf8(state.wsize); + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } + else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + //zmemcpy(state->window + state->wnext, end - copy, dist); + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + if (copy) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } + else { + state.wnext += dist; + if (state.wnext === state.wsize) { state.wnext = 0; } + if (state.whave < state.wsize) { state.whave += dist; } + } + } + return 0; +} + +function inflate(strm, flush) { + var state; + var input, output; // input/output buffers + var next; /* next input INDEX */ + var put; /* next output INDEX */ + var have, left; /* available input and output */ + var hold; /* bit buffer */ + var bits; /* bits in bit buffer */ + var _in, _out; /* save starting available input and output */ + var copy; /* number of stored or match bytes to copy */ + var from; /* where to copy match bytes from */ + var from_source; + var here = 0; /* current decoding table entry */ + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + var len; /* length to copy for repeats, bits to drop */ + var ret; /* return code */ + var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ + var opts; + + var n; // temporary var for NEED_BITS + + var order = /* permutation of code lengths */ + [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + + if (!strm || !strm.state || !strm.output || + (!strm.input && strm.avail_in !== 0)) { + return Z_STREAM_ERROR; + } + + state = strm.state; + if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ + + + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + _in = have; + _out = left; + ret = Z_OK; + + inf_leave: // goto emulation + for (;;) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + //=== NEEDBITS(16); + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ + state.check = 0/*crc32(0L, Z_NULL, 0)*/; + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = FLAGS; + break; + } + state.flags = 0; /* expect zlib header */ + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + len = (hold & 0x0f)/*BITS(4)*/ + 8; + if (state.wbits === 0) { + state.wbits = len; + } + else if (len > state.wbits) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + //Tracev((stderr, "inflate: zlib header ok\n")); + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = hold & 0x200 ? DICTID : TYPE; + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + break; + case FLAGS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.flags = hold; + if ((state.flags & 0xff) !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + if (state.flags & 0xe000) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = ((hold >> 8) & 1); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = TIME; + /* falls through */ + case TIME: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.time = hold; + } + if (state.flags & 0x0200) { + //=== CRC4(state.check, hold) + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + hbuf[2] = (hold >>> 16) & 0xff; + hbuf[3] = (hold >>> 24) & 0xff; + state.check = crc32(state.check, hbuf, 4, 0); + //=== + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = OS; + /* falls through */ + case OS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.xflags = (hold & 0xff); + state.head.os = (hold >> 8); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if (state.flags & 0x0400) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + else if (state.head) { + state.head.extra = null/*Z_NULL*/; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if (state.flags & 0x0400) { + copy = state.length; + if (copy > have) { copy = have; } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + // Use untyped array for more convenient processing later + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { break inf_leave; } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if (state.flags & 0x0800) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + // TODO: 2 or 1 bytes? + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.name_max*/)) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if (state.flags & 0x1000) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.comm_max*/)) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if (state.flags & 0x0200) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.check & 0xffff)) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + if (state.head) { + state.head.hcrc = ((state.flags >> 9) & 1); + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + strm.adler = state.check = zswap32(hold); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = DICT; + /* falls through */ + case DICT: + if (state.havedict === 0) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + return Z_NEED_DICT; + } + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = TYPE; + /* falls through */ + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } + /* falls through */ + case TYPEDO: + if (state.last) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; + //---// + state.mode = CHECK; + break; + } + //=== NEEDBITS(3); */ + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.last = (hold & 0x01)/*BITS(1)*/; + //--- DROPBITS(1) ---// + hold >>>= 1; + bits -= 1; + //---// + + switch ((hold & 0x03)/*BITS(2)*/) { + case 0: /* stored block */ + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = LEN_; /* decode codes */ + if (flush === Z_TREES) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break inf_leave; + } + break; + case 2: /* dynamic block */ + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break; + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; + //---// + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { + strm.msg = 'invalid stored block lengths'; + state.mode = BAD; + break; + } + state.length = hold & 0xffff; + //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = COPY_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { copy = have; } + if (copy > left) { copy = left; } + if (copy === 0) { break inf_leave; } + //--- zmemcpy(put, next, copy); --- + utils.arraySet(output, input, next, copy, put); + //---// + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + //Tracev((stderr, "inflate: stored end\n")); + state.mode = TYPE; + break; + case TABLE: + //=== NEEDBITS(14); */ + while (bits < 14) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// +//#ifndef PKZIP_BUG_WORKAROUND + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = 'too many length or distance symbols'; + state.mode = BAD; + break; + } +//#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while (state.have < state.ncode) { + //=== NEEDBITS(3); + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + state.lencode = state.lendyn; + state.lenbits = 7; + + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + + if (ret) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } + //Tracev((stderr, "inflate: code lengths ok\n")); + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_val < 16) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.lens[state.have++] = here_val; + } + else { + if (here_val === 16) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + if (state.have === 0) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 0x03);//BITS(2); + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + } + else if (here_val === 17) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 3 + (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 11 + (hold & 0x7f);//BITS(7); + //--- DROPBITS(7) ---// + hold >>>= 7; + bits -= 7; + //---// + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + + /* handle error breaks in while */ + if (state.mode === BAD) { break; } + + /* check for end-of-block code (better have one) */ + if (state.lens[256] === 0) { + strm.msg = 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state.lenbits = 9; + + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.lenbits = opts.bits; + // state.lencode = state.next; + + if (ret) { + strm.msg = 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; + //state.distcode.copy(state.codes); + // Switch to use dynamic table + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.distbits = opts.bits; + // state.distcode = state.next; + + if (ret) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } + //Tracev((stderr, 'inflate: codes ok\n')); + state.mode = LEN_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if (have >= 6 && left >= 258) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + inflate_fast(strm, _out); + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_op && (here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.lencode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + if (here_op & 32) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //Tracevv((stderr, "inflate: length %u\n", state.length)); + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (;;) { + here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if ((here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.distcode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + if (here_op & 64) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = (here_op) & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } +//#ifdef INFLATE_STRICT + if (state.offset > state.dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +//#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + state.mode = MATCH; + /* falls through */ + case MATCH: + if (left === 0) { break inf_leave; } + copy = _out - left; + if (state.offset > copy) { /* copy from window */ + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +// (!) This block is disabled in zlib defaults, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// Trace((stderr, "inflate.c too far\n")); +// copy -= state.whave; +// if (copy > state.length) { copy = state.length; } +// if (copy > left) { copy = left; } +// left -= copy; +// state.length -= copy; +// do { +// output[put++] = 0; +// } while (--copy); +// if (state.length === 0) { state.mode = LEN; } +// break; +//#endif + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } + else { + from = state.wnext - copy; + } + if (copy > state.length) { copy = state.length; } + from_source = state.window; + } + else { /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { copy = left; } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { state.mode = LEN; } + break; + case LIT: + if (left === 0) { break inf_leave; } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + // Use '|' instead of '+' to make sure that result is signed + hold |= input[next++] << bits; + bits += 8; + } + //===// + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); + + } + _out = left; + // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if (state.wrap && state.flags) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.total & 0xffffffff)) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + + // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + + if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && + (state.mode < CHECK || flush !== Z_FINISH))) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + + (state.mode === TYPE ? 128 : 0) + + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; +} + +function inflateEnd(strm) { + + if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; +} + +function inflateGetHeader(strm, head) { + var state; + + /* check state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } + + /* save header structure */ + state.head = head; + head.done = false; + return Z_OK; +} + +function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var state; + var dictid; + var ret; + + /* check state */ + if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } + state = strm.state; + + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + + /* check for correct dictionary identifier */ + if (state.mode === DICT) { + dictid = 1; /* adler32(0, null, 0)*/ + /* dictid = adler32(dictid, dictionary, dictLength); */ + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + // Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +exports.inflateReset = inflateReset; +exports.inflateReset2 = inflateReset2; +exports.inflateResetKeep = inflateResetKeep; +exports.inflateInit = inflateInit; +exports.inflateInit2 = inflateInit2; +exports.inflate = inflate; +exports.inflateEnd = inflateEnd; +exports.inflateGetHeader = inflateGetHeader; +exports.inflateSetDictionary = inflateSetDictionary; +exports.inflateInfo = 'pako inflate (from Nodeca project)'; + +/* Not implemented +exports.inflateCopy = inflateCopy; +exports.inflateGetDictionary = inflateGetDictionary; +exports.inflateMark = inflateMark; +exports.inflatePrime = inflatePrime; +exports.inflateSync = inflateSync; +exports.inflateSyncPoint = inflateSyncPoint; +exports.inflateUndermine = inflateUndermine; +*/ + +},{"../utils/common":26,"./adler32":28,"./crc32":30,"./inffast":33,"./inftrees":35}],35:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +var utils = require('../utils/common'); + +var MAXBITS = 15; +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +var lbase = [ /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 +]; + +var lext = [ /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 +]; + +var dbase = [ /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0 +]; + +var dext = [ /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64 +]; + +module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) +{ + var bits = opts.bits; + //here = opts.here; /* table entry for duplication */ + + var len = 0; /* a code's length in bits */ + var sym = 0; /* index of code symbols */ + var min = 0, max = 0; /* minimum and maximum code lengths */ + var root = 0; /* number of index bits for root table */ + var curr = 0; /* number of index bits for current table */ + var drop = 0; /* code bits to drop for sub-table */ + var left = 0; /* number of prefix codes available */ + var used = 0; /* code entries in table used */ + var huff = 0; /* Huffman code */ + var incr; /* for incrementing code, index */ + var fill; /* index for replicating entries */ + var low; /* low bits for current root entry */ + var mask; /* mask for low root bits */ + var next; /* next available space in table */ + var base = null; /* base value table to use */ + var base_index = 0; +// var shoextra; /* extra bits table to use */ + var end; /* use base and extra for symbol > end */ + var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ + var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ + var extra = null; + var extra_index = 0; + + var here_bits, here_op, here_val; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + + /* bound code lengths, force root to be within code lengths */ + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { break; } + } + if (root > max) { + root = max; + } + if (max === 0) { /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + + //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + opts.bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { break; } + } + if (root < min) { + root = min; + } + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } /* over-subscribed */ + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; /* incomplete set */ + } + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + if (type === CODES) { + base = extra = work; /* dummy value--not used */ + end = 19; + + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + + } else { /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize opts for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = table_index; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = -1; /* trigger new sub-table when len > root */ + used = 1 << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } + else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } + else { + here_op = 32 + 64; /* end of block */ + here_val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1 << (len - drop); + fill = 1 << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; + } while (fill !== 0); + + /* backwards increment the len-bit code huff */ + incr = 1 << (len - 1); + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + + /* go to next symbol, update count, len */ + sym++; + if (--count[len] === 0) { + if (len === max) { break; } + len = lens[lens_index + work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) !== low) { + /* if first time, transition to sub-tables */ + if (drop === 0) { + drop = root; + } + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { break; } + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1 << curr; + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* point entry in root table to sub-table */ + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff !== 0) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; + } + + /* set return parameters */ + //opts.table_index += used; + opts.bits = root; + return 0; +}; + +},{"../utils/common":26}],36:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],37:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +/* eslint-disable space-unary-ops */ + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, "tr_static_init: length != 256"); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: dist != 256"); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // "pendingBuf overflow"); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // "too many codes"); + //Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual ("white-listed") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + /* lc is the unmatched char */ + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + //Assert((ush)dist < (ush)MAX_DIST(s) && + // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + +// (!) This block is disabled in zlib defaults, +// don't enable it for binary compatibility + +//#ifdef TRUNCATE_BLOCK +// /* Try to guess if it is profitable to stop the current block here */ +// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { +// /* Compute an upper bound for the compressed length */ +// out_length = s.last_lit*8; +// in_length = s.strstart - s.block_start; +// +// for (dcode = 0; dcode < D_CODES; dcode++) { +// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); +// } +// out_length >>>= 3; +// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +// // s->last_lit, in_length, out_length, +// // 100L - out_length*100L/in_length)); +// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { +// return true; +// } +// } +//#endif + + return (s.last_lit === s.lit_bufsize - 1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +},{"../utils/common":26}],38:[function(require,module,exports){ +'use strict'; + +// (C) 1995-2013 Jean-loup Gailly and Mark Adler +// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = ''/*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2/*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; +} + +module.exports = ZStream; + +},{}],39:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; 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 the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +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(); + + // Skip empty and invalid entries + 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) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +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('/')); +}; + + +// path.relative(from, to) +// posix version +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 < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 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; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) + +},{"_process":7}],40:[function(require,module,exports){ +'use strict'; + +module.exports = Pbf; + +var ieee754 = require('ieee754'); + +function Pbf(buf) { + this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0); + this.pos = 0; + this.type = 0; + this.length = this.buf.length; +} + +Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum +Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64 +Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields +Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32 + +var SHIFT_LEFT_32 = (1 << 16) * (1 << 16), + SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32; + +// Threshold chosen based on both benchmarking and knowledge about browser string +// data structures (which currently switch structure types at 12 bytes or more) +var TEXT_DECODER_MIN_LENGTH = 12; +var utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf8'); + +Pbf.prototype = { + + destroy: function() { + this.buf = null; + }, + + // === READING ================================================================= + + readFields: function(readField, result, end) { + end = end || this.length; + + while (this.pos < end) { + var val = this.readVarint(), + tag = val >> 3, + startPos = this.pos; + + this.type = val & 0x7; + readField(tag, result, this); + + if (this.pos === startPos) this.skip(val); + } + return result; + }, + + readMessage: function(readField, result) { + return this.readFields(readField, result, this.readVarint() + this.pos); + }, + + readFixed32: function() { + var val = readUInt32(this.buf, this.pos); + this.pos += 4; + return val; + }, + + readSFixed32: function() { + var val = readInt32(this.buf, this.pos); + this.pos += 4; + return val; + }, + + // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed) + + readFixed64: function() { + var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; + this.pos += 8; + return val; + }, + + readSFixed64: function() { + var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; + this.pos += 8; + return val; + }, + + readFloat: function() { + var val = ieee754.read(this.buf, this.pos, true, 23, 4); + this.pos += 4; + return val; + }, + + readDouble: function() { + var val = ieee754.read(this.buf, this.pos, true, 52, 8); + this.pos += 8; + return val; + }, + + readVarint: function(isSigned) { + var buf = this.buf, + val, b; + + b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val; + b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val; + b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val; + b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val; + b = buf[this.pos]; val |= (b & 0x0f) << 28; + + return readVarintRemainder(val, isSigned, this); + }, + + readVarint64: function() { // for compatibility with v2.0.1 + return this.readVarint(true); + }, + + readSVarint: function() { + var num = this.readVarint(); + return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding + }, + + readBoolean: function() { + return Boolean(this.readVarint()); + }, + + readString: function() { + var end = this.readVarint() + this.pos; + var pos = this.pos; + this.pos = end; + + if (end - pos >= TEXT_DECODER_MIN_LENGTH && utf8TextDecoder) { + // longer strings are fast with the built-in browser TextDecoder API + return readUtf8TextDecoder(this.buf, pos, end); + } + // short strings are fast with our custom implementation + return readUtf8(this.buf, pos, end); + }, + + readBytes: function() { + var end = this.readVarint() + this.pos, + buffer = this.buf.subarray(this.pos, end); + this.pos = end; + return buffer; + }, + + // verbose for performance reasons; doesn't affect gzipped size + + readPackedVarint: function(arr, isSigned) { + if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned)); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readVarint(isSigned)); + return arr; + }, + readPackedSVarint: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readSVarint()); + return arr; + }, + readPackedBoolean: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readBoolean()); + return arr; + }, + readPackedFloat: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readFloat()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readFloat()); + return arr; + }, + readPackedDouble: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readDouble()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readDouble()); + return arr; + }, + readPackedFixed32: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readFixed32()); + return arr; + }, + readPackedSFixed32: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readSFixed32()); + return arr; + }, + readPackedFixed64: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readFixed64()); + return arr; + }, + readPackedSFixed64: function(arr) { + if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64()); + var end = readPackedEnd(this); + arr = arr || []; + while (this.pos < end) arr.push(this.readSFixed64()); + return arr; + }, + + skip: function(val) { + var type = val & 0x7; + if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {} + else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos; + else if (type === Pbf.Fixed32) this.pos += 4; + else if (type === Pbf.Fixed64) this.pos += 8; + else throw new Error('Unimplemented type: ' + type); + }, + + // === WRITING ================================================================= + + writeTag: function(tag, type) { + this.writeVarint((tag << 3) | type); + }, + + realloc: function(min) { + var length = this.length || 16; + + while (length < this.pos + min) length *= 2; + + if (length !== this.length) { + var buf = new Uint8Array(length); + buf.set(this.buf); + this.buf = buf; + this.length = length; + } + }, + + finish: function() { + this.length = this.pos; + this.pos = 0; + return this.buf.subarray(0, this.length); + }, + + writeFixed32: function(val) { + this.realloc(4); + writeInt32(this.buf, val, this.pos); + this.pos += 4; + }, + + writeSFixed32: function(val) { + this.realloc(4); + writeInt32(this.buf, val, this.pos); this.pos += 4; }, @@ -4439,15 +13450,15 @@ Pbf.prototype = { this.writeRawMessage(fn, obj); }, - writePackedVarint: function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr); }, - writePackedSVarint: function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr); }, - writePackedBoolean: function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr); }, - writePackedFloat: function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr); }, - writePackedDouble: function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr); }, - writePackedFixed32: function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr); }, - writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); }, - writePackedFixed64: function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr); }, - writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); }, + writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); }, + writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); }, + writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); }, + writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); }, + writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); }, + writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); }, + writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); }, + writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); }, + writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); }, writeBytesField: function(tag, buffer) { this.writeTag(tag, Pbf.Bytes); @@ -4572,7 +13583,7 @@ function makeRoomForExtraLength(startPos, len, pbf) { var extraLen = len <= 0x3fff ? 1 : len <= 0x1fffff ? 2 : - len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7)); + len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7)); // if 1 byte isn't enough for encoding message length, shift the data to the right pbf.realloc(extraLen); @@ -4678,6 +13689,10 @@ function readUtf8(buf, pos, end) { return str; } +function readUtf8TextDecoder(buf, pos, end) { + return utf8TextDecoder.decode(buf.subarray(pos, end)); +} + function writeUtf8(buf, str, pos) { for (var i = 0, c, lead; i < str.length; i++) { c = str.charCodeAt(i); // code point @@ -4731,636 +13746,96 @@ function writeUtf8(buf, str, pos) { return pos; } -},{"ieee754":17}],24:[function(require,module,exports){ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - (global.quickselect = factory()); -}(this, (function () { 'use strict'; - -function quickselect(arr, k, left, right, compare) { - quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare); -} - -function quickselectStep(arr, k, left, right, compare) { - - while (right > left) { - if (right - left > 600) { - var n = right - left + 1; - var m = k - left + 1; - var z = Math.log(n); - var s = 0.5 * Math.exp(2 * z / 3); - var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); - var newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); - var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); - quickselectStep(arr, k, newLeft, newRight, compare); - } - - var t = arr[k]; - var i = left; - var j = right; - - swap(arr, left, k); - if (compare(arr[right], t) > 0) swap(arr, left, right); - - while (i < j) { - swap(arr, i, j); - i++; - j--; - while (compare(arr[i], t) < 0) i++; - while (compare(arr[j], t) > 0) j--; - } +},{"ieee754":41}],41:[function(require,module,exports){ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] - if (compare(arr[left], t) === 0) swap(arr, left, j); - else { - j++; - swap(arr, j, right); - } + i += d - if (j <= k) left = j + 1; - if (k <= j) right = j - 1; - } -} + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} -function swap(arr, i, j) { - var tmp = arr[i]; - arr[i] = arr[j]; - arr[j] = tmp; -} + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} -function defaultCompare(a, b) { - return a < b ? -1 : a > b ? 1 : 0; + 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) } -return quickselect; - -}))); - -},{}],25:[function(require,module,exports){ -'use strict'; - -module.exports = rbush; -module.exports.default = rbush; - -var quickselect = require('quickselect'); - -function rbush(maxEntries, format) { - if (!(this instanceof rbush)) return new rbush(maxEntries, format); +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 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 - // max entries in a node is 9 by default; min node fill is 40% for best performance - this._maxEntries = Math.max(4, maxEntries || 9); - this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); + value = Math.abs(value) - if (format) { - this._initFormat(format); + 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 } - - this.clear(); -} - -rbush.prototype = { - - all: function () { - return this._all(this.data, []); - }, - - search: function (bbox) { - - var node = this.data, - result = [], - toBBox = this.toBBox; - - if (!intersects(bbox, node)) return result; - - var nodesToSearch = [], - i, len, child, childBBox; - - while (node) { - for (i = 0, len = node.children.length; i < len; i++) { - - child = node.children[i]; - childBBox = node.leaf ? toBBox(child) : child; - - if (intersects(bbox, childBBox)) { - if (node.leaf) result.push(child); - else if (contains(bbox, childBBox)) this._all(child, result); - else nodesToSearch.push(child); - } - } - node = nodesToSearch.pop(); - } - - return result; - }, - - collides: function (bbox) { - - var node = this.data, - toBBox = this.toBBox; - - if (!intersects(bbox, node)) return false; - - var nodesToSearch = [], - i, len, child, childBBox; - - while (node) { - for (i = 0, len = node.children.length; i < len; i++) { - - child = node.children[i]; - childBBox = node.leaf ? toBBox(child) : child; - - if (intersects(bbox, childBBox)) { - if (node.leaf || contains(bbox, childBBox)) return true; - nodesToSearch.push(child); - } - } - node = nodesToSearch.pop(); - } - - return false; - }, - - load: function (data) { - if (!(data && data.length)) return this; - - if (data.length < this._minEntries) { - for (var i = 0, len = data.length; i < len; i++) { - this.insert(data[i]); - } - return this; - } - - // recursively build the tree with the given data from scratch using OMT algorithm - var node = this._build(data.slice(), 0, data.length - 1, 0); - - if (!this.data.children.length) { - // save as is if tree is empty - this.data = node; - - } else if (this.data.height === node.height) { - // split root if trees have the same height - this._splitRoot(this.data, node); - - } else { - if (this.data.height < node.height) { - // swap trees if inserted one is bigger - var tmpNode = this.data; - this.data = node; - node = tmpNode; - } - - // insert the small tree into the large tree at appropriate level - this._insert(node, this.data.height - node.height - 1, true); - } - - return this; - }, - - insert: function (item) { - if (item) this._insert(item, this.data.height - 1); - return this; - }, - - clear: function () { - this.data = createNode([]); - return this; - }, - - remove: function (item, equalsFn) { - if (!item) return this; - - var node = this.data, - bbox = this.toBBox(item), - path = [], - indexes = [], - i, parent, index, goingUp; - - // depth-first iterative tree traversal - while (node || path.length) { - - if (!node) { // go up - node = path.pop(); - parent = path[path.length - 1]; - i = indexes.pop(); - goingUp = true; - } - - if (node.leaf) { // check current node - index = findItem(item, node.children, equalsFn); - - if (index !== -1) { - // item found, remove the item and condense tree upwards - node.children.splice(index, 1); - path.push(node); - this._condense(path); - return this; - } - } - - if (!goingUp && !node.leaf && contains(node, bbox)) { // go down - path.push(node); - indexes.push(i); - i = 0; - parent = node; - node = node.children[0]; - - } else if (parent) { // go right - i++; - node = parent.children[i]; - goingUp = false; - - } else node = null; // nothing found - } - - return this; - }, - - toBBox: function (item) { return item; }, - - compareMinX: compareNodeMinX, - compareMinY: compareNodeMinY, - - toJSON: function () { return this.data; }, - - fromJSON: function (data) { - this.data = data; - return this; - }, - - _all: function (node, result) { - var nodesToSearch = []; - while (node) { - if (node.leaf) result.push.apply(result, node.children); - else nodesToSearch.push.apply(nodesToSearch, node.children); - - node = nodesToSearch.pop(); - } - return result; - }, - - _build: function (items, left, right, height) { - - var N = right - left + 1, - M = this._maxEntries, - node; - - if (N <= M) { - // reached leaf level; return leaf - node = createNode(items.slice(left, right + 1)); - calcBBox(node, this.toBBox); - return node; - } - - if (!height) { - // target height of the bulk-loaded tree - height = Math.ceil(Math.log(N) / Math.log(M)); - - // target number of root entries to maximize storage utilization - M = Math.ceil(N / Math.pow(M, height - 1)); - } - - node = createNode([]); - node.leaf = false; - node.height = height; - - // split the items into M mostly square tiles - - var N2 = Math.ceil(N / M), - N1 = N2 * Math.ceil(Math.sqrt(M)), - i, j, right2, right3; - - multiSelect(items, left, right, N1, this.compareMinX); - - for (i = left; i <= right; i += N1) { - - right2 = Math.min(i + N1 - 1, right); - - multiSelect(items, i, right2, N2, this.compareMinY); - - for (j = i; j <= right2; j += N2) { - - right3 = Math.min(j + N2 - 1, right2); - - // pack each entry recursively - node.children.push(this._build(items, j, right3, height - 1)); - } - } - - calcBBox(node, this.toBBox); - - return node; - }, - - _chooseSubtree: function (bbox, node, level, path) { - - var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; - - while (true) { - path.push(node); - - if (node.leaf || path.length - 1 === level) break; - - minArea = minEnlargement = Infinity; - - for (i = 0, len = node.children.length; i < len; i++) { - child = node.children[i]; - area = bboxArea(child); - enlargement = enlargedArea(bbox, child) - area; - - // choose entry with the least area enlargement - if (enlargement < minEnlargement) { - minEnlargement = enlargement; - minArea = area < minArea ? area : minArea; - targetNode = child; - - } else if (enlargement === minEnlargement) { - // otherwise choose one with the smallest area - if (area < minArea) { - minArea = area; - targetNode = child; - } - } - } - - node = targetNode || node.children[0]; - } - - return node; - }, - - _insert: function (item, level, isNode) { - - var toBBox = this.toBBox, - bbox = isNode ? item : toBBox(item), - insertPath = []; - - // find the best node for accommodating the item, saving all nodes along the path too - var node = this._chooseSubtree(bbox, this.data, level, insertPath); - - // put the item into the node - node.children.push(item); - extend(node, bbox); - - // split on node overflow; propagate upwards if necessary - while (level >= 0) { - if (insertPath[level].children.length > this._maxEntries) { - this._split(insertPath, level); - level--; - } else break; - } - - // adjust bboxes along the insertion path - this._adjustParentBBoxes(bbox, insertPath, level); - }, - - // split overflowed node into two - _split: function (insertPath, level) { - - var node = insertPath[level], - M = node.children.length, - m = this._minEntries; - - this._chooseSplitAxis(node, m, M); - - var splitIndex = this._chooseSplitIndex(node, m, M); - - var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex)); - newNode.height = node.height; - newNode.leaf = node.leaf; - - calcBBox(node, this.toBBox); - calcBBox(newNode, this.toBBox); - - if (level) insertPath[level - 1].children.push(newNode); - else this._splitRoot(node, newNode); - }, - - _splitRoot: function (node, newNode) { - // split root node - this.data = createNode([node, newNode]); - this.data.height = node.height + 1; - this.data.leaf = false; - calcBBox(this.data, this.toBBox); - }, - - _chooseSplitIndex: function (node, m, M) { - - var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; - - minOverlap = minArea = Infinity; - - for (i = m; i <= M - m; i++) { - bbox1 = distBBox(node, 0, i, this.toBBox); - bbox2 = distBBox(node, i, M, this.toBBox); - - overlap = intersectionArea(bbox1, bbox2); - area = bboxArea(bbox1) + bboxArea(bbox2); - - // choose distribution with minimum overlap - if (overlap < minOverlap) { - minOverlap = overlap; - index = i; - - minArea = area < minArea ? area : minArea; - - } else if (overlap === minOverlap) { - // otherwise choose distribution with minimum area - if (area < minArea) { - minArea = area; - index = i; - } - } - } - - return index; - }, - - // sorts node children by the best axis for split - _chooseSplitAxis: function (node, m, M) { - - var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX, - compareMinY = node.leaf ? this.compareMinY : compareNodeMinY, - xMargin = this._allDistMargin(node, m, M, compareMinX), - yMargin = this._allDistMargin(node, m, M, compareMinY); - - // if total distributions margin value is minimal for x, sort by minX, - // otherwise it's already sorted by minY - if (xMargin < yMargin) node.children.sort(compareMinX); - }, - - // total margin of all possible split distributions where each node is at least m full - _allDistMargin: function (node, m, M, compare) { - - node.children.sort(compare); - - var toBBox = this.toBBox, - leftBBox = distBBox(node, 0, m, toBBox), - rightBBox = distBBox(node, M - m, M, toBBox), - margin = bboxMargin(leftBBox) + bboxMargin(rightBBox), - i, child; - - for (i = m; i < M - m; i++) { - child = node.children[i]; - extend(leftBBox, node.leaf ? toBBox(child) : child); - margin += bboxMargin(leftBBox); - } - - for (i = M - m - 1; i >= m; i--) { - child = node.children[i]; - extend(rightBBox, node.leaf ? toBBox(child) : child); - margin += bboxMargin(rightBBox); - } - - return margin; - }, - - _adjustParentBBoxes: function (bbox, path, level) { - // adjust bboxes along the given tree path - for (var i = level; i >= 0; i--) { - extend(path[i], bbox); - } - }, - - _condense: function (path) { - // go through the path, removing empty nodes and updating bboxes - for (var i = path.length - 1, siblings; i >= 0; i--) { - if (path[i].children.length === 0) { - if (i > 0) { - siblings = path[i - 1].children; - siblings.splice(siblings.indexOf(path[i]), 1); - - } else this.clear(); - - } else calcBBox(path[i], this.toBBox); - } - }, - - _initFormat: function (format) { - // data format (minX, minY, maxX, maxY accessors) - - // uses eval-type function compilation instead of just accepting a toBBox function - // because the algorithms are very sensitive to sorting functions performance, - // so they should be dead simple and without inner calls - - var compareArr = ['return a', ' - b', ';']; - - this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); - this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); - - this.toBBox = new Function('a', - 'return {minX: a' + format[0] + - ', minY: a' + format[1] + - ', maxX: a' + format[2] + - ', maxY: a' + format[3] + '};'); + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) } -}; - -function findItem(item, items, equalsFn) { - if (!equalsFn) return items.indexOf(item); - - for (var i = 0; i < items.length; i++) { - if (equalsFn(item, items[i])) return i; + if (value * c >= 2) { + e++ + c /= 2 } - return -1; -} -// calculate node's bbox from bboxes of its children -function calcBBox(node, toBBox) { - distBBox(node, 0, node.children.length, toBBox, node); -} - -// min bounding rectangle of node children from k to p-1 -function distBBox(node, k, p, toBBox, destNode) { - if (!destNode) destNode = createNode(null); - destNode.minX = Infinity; - destNode.minY = Infinity; - destNode.maxX = -Infinity; - destNode.maxY = -Infinity; - - for (var i = k, child; i < p; i++) { - child = node.children[i]; - extend(destNode, node.leaf ? toBBox(child) : child); + 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 } + } - return destNode; -} - -function extend(a, b) { - a.minX = Math.min(a.minX, b.minX); - a.minY = Math.min(a.minY, b.minY); - a.maxX = Math.max(a.maxX, b.maxX); - a.maxY = Math.max(a.maxY, b.maxY); - return a; -} - -function compareNodeMinX(a, b) { return a.minX - b.minX; } -function compareNodeMinY(a, b) { return a.minY - b.minY; } - -function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); } -function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); } - -function enlargedArea(a, b) { - return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) * - (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY)); -} - -function intersectionArea(a, b) { - var minX = Math.max(a.minX, b.minX), - minY = Math.max(a.minY, b.minY), - maxX = Math.min(a.maxX, b.maxX), - maxY = Math.min(a.maxY, b.maxY); - - return Math.max(0, maxX - minX) * - Math.max(0, maxY - minY); -} - -function contains(a, b) { - return a.minX <= b.minX && - a.minY <= b.minY && - b.maxX <= a.maxX && - b.maxY <= a.maxY; -} + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} -function intersects(a, b) { - return b.minX <= a.maxX && - b.minY <= a.maxY && - b.maxX >= a.minX && - b.maxY >= a.minY; -} + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} -function createNode(children) { - return { - children: children, - height: 1, - leaf: true, - minX: Infinity, - minY: Infinity, - maxX: -Infinity, - maxY: -Infinity - }; + buffer[offset + i - d] |= s * 128 } -// sort an array so that items come in groups of n unsorted items, with groups sorted between each other; -// combines selection algorithm with binary divide & conquer approach - -function multiSelect(arr, left, right, n, compare) { - var stack = [left, right], - mid; - - while (stack.length) { - right = stack.pop(); - left = stack.pop(); - - if (right - left <= n) continue; +},{}],42:[function(require,module,exports){ +!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?module.exports=i():"function"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){"use strict";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return ti?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r}); - mid = left + Math.ceil((right - left) / n / 2) * n; - quickselect(arr, mid, left, right, compare); - - stack.push(left, mid, mid, right); - } -} - -},{"quickselect":24}],26:[function(require,module,exports){ +},{}],43:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("./internal/Observable"); @@ -5398,6 +13873,7 @@ var Subscriber_1 = require("./internal/Subscriber"); exports.Subscriber = Subscriber_1.Subscriber; var Notification_1 = require("./internal/Notification"); exports.Notification = Notification_1.Notification; +exports.NotificationKind = Notification_1.NotificationKind; var pipe_1 = require("./internal/util/pipe"); exports.pipe = pipe_1.pipe; var noop_1 = require("./internal/util/noop"); @@ -5452,6 +13928,8 @@ var onErrorResumeNext_1 = require("./internal/observable/onErrorResumeNext"); exports.onErrorResumeNext = onErrorResumeNext_1.onErrorResumeNext; var pairs_1 = require("./internal/observable/pairs"); exports.pairs = pairs_1.pairs; +var partition_1 = require("./internal/observable/partition"); +exports.partition = partition_1.partition; var race_1 = require("./internal/observable/race"); exports.race = race_1.race; var range_1 = require("./internal/observable/range"); @@ -5464,6 +13942,8 @@ var using_1 = require("./internal/observable/using"); exports.using = using_1.using; var zip_1 = require("./internal/observable/zip"); exports.zip = zip_1.zip; +var scheduled_1 = require("./internal/scheduled/scheduled"); +exports.scheduled = scheduled_1.scheduled; var empty_2 = require("./internal/observable/empty"); exports.EMPTY = empty_2.EMPTY; var never_2 = require("./internal/observable/never"); @@ -5471,7 +13951,7 @@ exports.NEVER = never_2.NEVER; var config_1 = require("./internal/config"); exports.config = config_1.config; -},{"./internal/AsyncSubject":27,"./internal/BehaviorSubject":28,"./internal/Notification":30,"./internal/Observable":31,"./internal/ReplaySubject":34,"./internal/Scheduler":35,"./internal/Subject":36,"./internal/Subscriber":38,"./internal/Subscription":39,"./internal/config":40,"./internal/observable/ConnectableObservable":41,"./internal/observable/bindCallback":43,"./internal/observable/bindNodeCallback":44,"./internal/observable/combineLatest":45,"./internal/observable/concat":46,"./internal/observable/defer":47,"./internal/observable/empty":48,"./internal/observable/forkJoin":49,"./internal/observable/from":50,"./internal/observable/fromEvent":52,"./internal/observable/fromEventPattern":53,"./internal/observable/generate":57,"./internal/observable/iif":58,"./internal/observable/interval":59,"./internal/observable/merge":60,"./internal/observable/never":61,"./internal/observable/of":62,"./internal/observable/onErrorResumeNext":63,"./internal/observable/pairs":64,"./internal/observable/race":65,"./internal/observable/range":66,"./internal/observable/throwError":68,"./internal/observable/timer":69,"./internal/observable/using":70,"./internal/observable/zip":71,"./internal/operators/groupBy":107,"./internal/scheduler/VirtualTimeScheduler":184,"./internal/scheduler/animationFrame":185,"./internal/scheduler/asap":186,"./internal/scheduler/async":187,"./internal/scheduler/queue":188,"./internal/symbol/observable":190,"./internal/util/ArgumentOutOfRangeError":192,"./internal/util/EmptyError":193,"./internal/util/ObjectUnsubscribedError":195,"./internal/util/TimeoutError":196,"./internal/util/UnsubscriptionError":197,"./internal/util/identity":201,"./internal/util/isObservable":210,"./internal/util/noop":213,"./internal/util/pipe":215}],27:[function(require,module,exports){ +},{"./internal/AsyncSubject":44,"./internal/BehaviorSubject":45,"./internal/Notification":47,"./internal/Observable":48,"./internal/ReplaySubject":51,"./internal/Scheduler":52,"./internal/Subject":53,"./internal/Subscriber":55,"./internal/Subscription":56,"./internal/config":57,"./internal/observable/ConnectableObservable":58,"./internal/observable/bindCallback":60,"./internal/observable/bindNodeCallback":61,"./internal/observable/combineLatest":62,"./internal/observable/concat":63,"./internal/observable/defer":64,"./internal/observable/empty":65,"./internal/observable/forkJoin":66,"./internal/observable/from":67,"./internal/observable/fromEvent":69,"./internal/observable/fromEventPattern":70,"./internal/observable/generate":71,"./internal/observable/iif":72,"./internal/observable/interval":73,"./internal/observable/merge":74,"./internal/observable/never":75,"./internal/observable/of":76,"./internal/observable/onErrorResumeNext":77,"./internal/observable/pairs":78,"./internal/observable/partition":79,"./internal/observable/race":80,"./internal/observable/range":81,"./internal/observable/throwError":82,"./internal/observable/timer":83,"./internal/observable/using":84,"./internal/observable/zip":85,"./internal/operators/groupBy":121,"./internal/scheduled/scheduled":193,"./internal/scheduler/VirtualTimeScheduler":203,"./internal/scheduler/animationFrame":204,"./internal/scheduler/asap":205,"./internal/scheduler/async":206,"./internal/scheduler/queue":207,"./internal/symbol/observable":209,"./internal/util/ArgumentOutOfRangeError":211,"./internal/util/EmptyError":212,"./internal/util/ObjectUnsubscribedError":214,"./internal/util/TimeoutError":215,"./internal/util/UnsubscriptionError":216,"./internal/util/identity":219,"./internal/util/isObservable":228,"./internal/util/noop":231,"./internal/util/pipe":233}],44:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -5532,7 +14012,7 @@ var AsyncSubject = (function (_super) { }(Subject_1.Subject)); exports.AsyncSubject = AsyncSubject; -},{"./Subject":36,"./Subscription":39}],28:[function(require,module,exports){ +},{"./Subject":53,"./Subscription":56}],45:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -5589,7 +14069,7 @@ var BehaviorSubject = (function (_super) { }(Subject_1.Subject)); exports.BehaviorSubject = BehaviorSubject; -},{"./Subject":36,"./util/ObjectUnsubscribedError":195}],29:[function(require,module,exports){ +},{"./Subject":53,"./util/ObjectUnsubscribedError":214}],46:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -5631,12 +14111,18 @@ var InnerSubscriber = (function (_super) { }(Subscriber_1.Subscriber)); exports.InnerSubscriber = InnerSubscriber; -},{"./Subscriber":38}],30:[function(require,module,exports){ +},{"./Subscriber":55}],47:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var empty_1 = require("./observable/empty"); var of_1 = require("./observable/of"); var throwError_1 = require("./observable/throwError"); +var NotificationKind; +(function (NotificationKind) { + NotificationKind["NEXT"] = "N"; + NotificationKind["ERROR"] = "E"; + NotificationKind["COMPLETE"] = "C"; +})(NotificationKind = exports.NotificationKind || (exports.NotificationKind = {})); var Notification = (function () { function Notification(kind, value, error) { this.kind = kind; @@ -5703,12 +14189,12 @@ var Notification = (function () { }()); exports.Notification = Notification; -},{"./observable/empty":48,"./observable/of":62,"./observable/throwError":68}],31:[function(require,module,exports){ +},{"./observable/empty":65,"./observable/of":76,"./observable/throwError":82}],48:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var canReportError_1 = require("./util/canReportError"); var toSubscriber_1 = require("./util/toSubscriber"); -var observable_1 = require("../internal/symbol/observable"); +var observable_1 = require("./symbol/observable"); var pipe_1 = require("./util/pipe"); var config_1 = require("./config"); var Observable = (function () { @@ -5728,7 +14214,7 @@ var Observable = (function () { var operator = this.operator; var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete); if (operator) { - operator.call(sink, this.source); + sink.add(operator.call(sink, this.source)); } else { sink.add(this.source || (config_1.config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ? @@ -5821,7 +14307,7 @@ function getPromiseCtor(promiseCtor) { return promiseCtor; } -},{"../internal/symbol/observable":190,"./config":40,"./util/canReportError":198,"./util/pipe":215,"./util/toSubscriber":222}],32:[function(require,module,exports){ +},{"./config":57,"./symbol/observable":209,"./util/canReportError":217,"./util/pipe":233,"./util/toSubscriber":240}],49:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var config_1 = require("./config"); @@ -5840,7 +14326,7 @@ exports.empty = { complete: function () { } }; -},{"./config":40,"./util/hostReportError":200}],33:[function(require,module,exports){ +},{"./config":57,"./util/hostReportError":218}],50:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -5875,7 +14361,7 @@ var OuterSubscriber = (function (_super) { }(Subscriber_1.Subscriber)); exports.OuterSubscriber = OuterSubscriber; -},{"./Subscriber":38}],34:[function(require,module,exports){ +},{"./Subscriber":55}],51:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -6002,7 +14488,7 @@ var ReplayEvent = (function () { return ReplayEvent; }()); -},{"./Subject":36,"./SubjectSubscription":37,"./Subscription":39,"./operators/observeOn":122,"./scheduler/queue":188,"./util/ObjectUnsubscribedError":195}],35:[function(require,module,exports){ +},{"./Subject":53,"./SubjectSubscription":54,"./Subscription":56,"./operators/observeOn":136,"./scheduler/queue":207,"./util/ObjectUnsubscribedError":214}],52:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Scheduler = (function () { @@ -6020,7 +14506,7 @@ var Scheduler = (function () { }()); exports.Scheduler = Scheduler; -},{}],36:[function(require,module,exports){ +},{}],53:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -6192,7 +14678,7 @@ var AnonymousSubject = (function (_super) { }(Subject)); exports.AnonymousSubject = AnonymousSubject; -},{"../internal/symbol/rxSubscriber":191,"./Observable":31,"./SubjectSubscription":37,"./Subscriber":38,"./Subscription":39,"./util/ObjectUnsubscribedError":195}],37:[function(require,module,exports){ +},{"../internal/symbol/rxSubscriber":210,"./Observable":48,"./SubjectSubscription":54,"./Subscriber":55,"./Subscription":56,"./util/ObjectUnsubscribedError":214}],54:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -6238,7 +14724,7 @@ var SubjectSubscription = (function (_super) { }(Subscription_1.Subscription)); exports.SubjectSubscription = SubjectSubscription; -},{"./Subscription":39}],38:[function(require,module,exports){ +},{"./Subscription":56}],55:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -6268,7 +14754,6 @@ var Subscriber = (function (_super) { _this.syncErrorThrown = false; _this.syncErrorThrowable = false; _this.isStopped = false; - _this._parentSubscription = null; switch (arguments.length) { case 0: _this.destination = Observer_1.empty; @@ -6339,15 +14824,12 @@ var Subscriber = (function (_super) { this.unsubscribe(); }; Subscriber.prototype._unsubscribeAndRecycle = function () { - var _a = this, _parent = _a._parent, _parents = _a._parents; - this._parent = null; - this._parents = null; + var _parentOrParents = this._parentOrParents; + this._parentOrParents = null; this.unsubscribe(); this.closed = false; this.isStopped = false; - this._parent = _parent; - this._parents = _parents; - this._parentSubscription = null; + this._parentOrParents = _parentOrParents; return this; }; return Subscriber; @@ -6489,106 +14971,122 @@ var SafeSubscriber = (function (_super) { }(Subscriber)); exports.SafeSubscriber = SafeSubscriber; -},{"../internal/symbol/rxSubscriber":191,"./Observer":32,"./Subscription":39,"./config":40,"./util/hostReportError":200,"./util/isFunction":205}],39:[function(require,module,exports){ +},{"../internal/symbol/rxSubscriber":210,"./Observer":49,"./Subscription":56,"./config":57,"./util/hostReportError":218,"./util/isFunction":223}],56:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var isArray_1 = require("./util/isArray"); var isObject_1 = require("./util/isObject"); var isFunction_1 = require("./util/isFunction"); -var tryCatch_1 = require("./util/tryCatch"); -var errorObject_1 = require("./util/errorObject"); var UnsubscriptionError_1 = require("./util/UnsubscriptionError"); var Subscription = (function () { function Subscription(unsubscribe) { this.closed = false; - this._parent = null; - this._parents = null; + this._parentOrParents = null; this._subscriptions = null; if (unsubscribe) { this._unsubscribe = unsubscribe; } } Subscription.prototype.unsubscribe = function () { - var hasErrors = false; var errors; if (this.closed) { return; } - var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions; + var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions; this.closed = true; - this._parent = null; - this._parents = null; + this._parentOrParents = null; this._subscriptions = null; - var index = -1; - var len = _parents ? _parents.length : 0; - while (_parent) { - _parent.remove(this); - _parent = ++index < len && _parents[index] || null; + if (_parentOrParents instanceof Subscription) { + _parentOrParents.remove(this); + } + else if (_parentOrParents !== null) { + for (var index = 0; index < _parentOrParents.length; ++index) { + var parent_1 = _parentOrParents[index]; + parent_1.remove(this); + } } if (isFunction_1.isFunction(_unsubscribe)) { - var trial = tryCatch_1.tryCatch(_unsubscribe).call(this); - if (trial === errorObject_1.errorObject) { - hasErrors = true; - errors = errors || (errorObject_1.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ? - flattenUnsubscriptionErrors(errorObject_1.errorObject.e.errors) : [errorObject_1.errorObject.e]); + try { + _unsubscribe.call(this); + } + catch (e) { + errors = e instanceof UnsubscriptionError_1.UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e]; } } if (isArray_1.isArray(_subscriptions)) { - index = -1; - len = _subscriptions.length; + var index = -1; + var len = _subscriptions.length; while (++index < len) { var sub = _subscriptions[index]; if (isObject_1.isObject(sub)) { - var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub); - if (trial === errorObject_1.errorObject) { - hasErrors = true; + try { + sub.unsubscribe(); + } + catch (e) { errors = errors || []; - var err = errorObject_1.errorObject.e; - if (err instanceof UnsubscriptionError_1.UnsubscriptionError) { - errors = errors.concat(flattenUnsubscriptionErrors(err.errors)); + if (e instanceof UnsubscriptionError_1.UnsubscriptionError) { + errors = errors.concat(flattenUnsubscriptionErrors(e.errors)); } else { - errors.push(err); + errors.push(e); } } } } } - if (hasErrors) { + if (errors) { throw new UnsubscriptionError_1.UnsubscriptionError(errors); } }; Subscription.prototype.add = function (teardown) { - if (!teardown || (teardown === Subscription.EMPTY)) { + var subscription = teardown; + if (!teardown) { return Subscription.EMPTY; } - if (teardown === this) { - return this; - } - var subscription = teardown; switch (typeof teardown) { case 'function': subscription = new Subscription(teardown); case 'object': - if (subscription.closed || typeof subscription.unsubscribe !== 'function') { + if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') { return subscription; } else if (this.closed) { subscription.unsubscribe(); return subscription; } - else if (typeof subscription._addParent !== 'function') { + else if (!(subscription instanceof Subscription)) { var tmp = subscription; subscription = new Subscription(); subscription._subscriptions = [tmp]; } break; - default: + default: { throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.'); + } + } + var _parentOrParents = subscription._parentOrParents; + if (_parentOrParents === null) { + subscription._parentOrParents = this; + } + else if (_parentOrParents instanceof Subscription) { + if (_parentOrParents === this) { + return subscription; + } + subscription._parentOrParents = [_parentOrParents, this]; + } + else if (_parentOrParents.indexOf(this) === -1) { + _parentOrParents.push(this); + } + else { + return subscription; + } + var subscriptions = this._subscriptions; + if (subscriptions === null) { + this._subscriptions = [subscription]; + } + else { + subscriptions.push(subscription); } - var subscriptions = this._subscriptions || (this._subscriptions = []); - subscriptions.push(subscription); - subscription._addParent(this); return subscription; }; Subscription.prototype.remove = function (subscription) { @@ -6600,18 +15098,6 @@ var Subscription = (function () { } } }; - Subscription.prototype._addParent = function (parent) { - var _a = this, _parent = _a._parent, _parents = _a._parents; - if (!_parent || _parent === parent) { - this._parent = parent; - } - else if (!_parents) { - this._parents = [parent]; - } - else if (_parents.indexOf(parent) === -1) { - _parents.push(parent); - } - }; Subscription.EMPTY = (function (empty) { empty.closed = true; return empty; @@ -6623,7 +15109,7 @@ function flattenUnsubscriptionErrors(errors) { return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []); } -},{"./util/UnsubscriptionError":197,"./util/errorObject":199,"./util/isArray":202,"./util/isFunction":205,"./util/isObject":209,"./util/tryCatch":223}],40:[function(require,module,exports){ +},{"./util/UnsubscriptionError":216,"./util/isArray":220,"./util/isFunction":223,"./util/isObject":227}],57:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _enable_super_gross_mode_that_will_cause_bad_things = false; @@ -6644,7 +15130,7 @@ exports.config = { }, }; -},{}],41:[function(require,module,exports){ +},{}],58:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -6696,9 +15182,6 @@ var ConnectableObservable = (function (_super) { this._connection = null; connection = Subscription_1.Subscription.EMPTY; } - else { - this._connection = connection; - } } return connection; }; @@ -6708,18 +15191,20 @@ var ConnectableObservable = (function (_super) { return ConnectableObservable; }(Observable_1.Observable)); exports.ConnectableObservable = ConnectableObservable; -var connectableProto = ConnectableObservable.prototype; -exports.connectableObservableDescriptor = { - operator: { value: null }, - _refCount: { value: 0, writable: true }, - _subject: { value: null, writable: true }, - _connection: { value: null, writable: true }, - _subscribe: { value: connectableProto._subscribe }, - _isComplete: { value: connectableProto._isComplete, writable: true }, - getSubject: { value: connectableProto.getSubject }, - connect: { value: connectableProto.connect }, - refCount: { value: connectableProto.refCount } -}; +exports.connectableObservableDescriptor = (function () { + var connectableProto = ConnectableObservable.prototype; + return { + operator: { value: null }, + _refCount: { value: 0, writable: true }, + _subject: { value: null, writable: true }, + _connection: { value: null, writable: true }, + _subscribe: { value: connectableProto._subscribe }, + _isComplete: { value: connectableProto._isComplete, writable: true }, + getSubject: { value: connectableProto.getSubject }, + connect: { value: connectableProto.connect }, + refCount: { value: connectableProto.refCount } + }; +})(); var ConnectableSubscriber = (function (_super) { __extends(ConnectableSubscriber, _super); function ConnectableSubscriber(destination, connectable) { @@ -6801,7 +15286,7 @@ var RefCountSubscriber = (function (_super) { return RefCountSubscriber; }(Subscriber_1.Subscriber)); -},{"../Observable":31,"../Subject":36,"../Subscriber":38,"../Subscription":39,"../operators/refCount":133}],42:[function(require,module,exports){ +},{"../Observable":48,"../Subject":53,"../Subscriber":55,"../Subscription":56,"../operators/refCount":147}],59:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -6858,7 +15343,7 @@ var SubscribeOnObservable = (function (_super) { }(Observable_1.Observable)); exports.SubscribeOnObservable = SubscribeOnObservable; -},{"../Observable":31,"../scheduler/asap":186,"../util/isNumeric":208}],43:[function(require,module,exports){ +},{"../Observable":48,"../scheduler/asap":205,"../util/isNumeric":226}],60:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -6966,7 +15451,7 @@ function dispatchError(state) { subject.error(err); } -},{"../AsyncSubject":27,"../Observable":31,"../operators/map":111,"../util/canReportError":198,"../util/isArray":202,"../util/isScheduler":212}],44:[function(require,module,exports){ +},{"../AsyncSubject":44,"../Observable":48,"../operators/map":125,"../util/canReportError":217,"../util/isArray":220,"../util/isScheduler":230}],61:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7082,7 +15567,7 @@ function dispatchError(arg) { subject.error(err); } -},{"../AsyncSubject":27,"../Observable":31,"../operators/map":111,"../util/canReportError":198,"../util/isArray":202,"../util/isScheduler":212}],45:[function(require,module,exports){ +},{"../AsyncSubject":44,"../Observable":48,"../operators/map":125,"../util/canReportError":217,"../util/isArray":220,"../util/isScheduler":230}],62:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -7198,26 +15683,21 @@ var CombineLatestSubscriber = (function (_super) { }(OuterSubscriber_1.OuterSubscriber)); exports.CombineLatestSubscriber = CombineLatestSubscriber; -},{"../OuterSubscriber":33,"../util/isArray":202,"../util/isScheduler":212,"../util/subscribeToResult":221,"./fromArray":51}],46:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/isArray":220,"../util/isScheduler":230,"../util/subscribeToResult":239,"./fromArray":68}],63:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var isScheduler_1 = require("../util/isScheduler"); var of_1 = require("./of"); -var from_1 = require("./from"); var concatAll_1 = require("../operators/concatAll"); function concat() { var observables = []; for (var _i = 0; _i < arguments.length; _i++) { observables[_i] = arguments[_i]; } - if (observables.length === 1 || (observables.length === 2 && isScheduler_1.isScheduler(observables[1]))) { - return from_1.from(observables[0]); - } return concatAll_1.concatAll()(of_1.of.apply(void 0, observables)); } exports.concat = concat; -},{"../operators/concatAll":83,"../util/isScheduler":212,"./from":50,"./of":62}],47:[function(require,module,exports){ +},{"../operators/concatAll":97,"./of":76}],64:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7239,7 +15719,7 @@ function defer(observableFactory) { } exports.defer = defer; -},{"../Observable":31,"./empty":48,"./from":50}],48:[function(require,module,exports){ +},{"../Observable":48,"./empty":65,"./from":67}],65:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7251,110 +15731,85 @@ exports.empty = empty; function emptyScheduled(scheduler) { return new Observable_1.Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); }); } -exports.emptyScheduled = emptyScheduled; -},{"../Observable":31}],49:[function(require,module,exports){ +},{"../Observable":48}],66:[function(require,module,exports){ "use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); var isArray_1 = require("../util/isArray"); -var empty_1 = require("./empty"); -var subscribeToResult_1 = require("../util/subscribeToResult"); -var OuterSubscriber_1 = require("../OuterSubscriber"); var map_1 = require("../operators/map"); +var isObject_1 = require("../util/isObject"); +var from_1 = require("./from"); function forkJoin() { var sources = []; for (var _i = 0; _i < arguments.length; _i++) { sources[_i] = arguments[_i]; } - var resultSelector; - if (typeof sources[sources.length - 1] === 'function') { - resultSelector = sources.pop(); - } - if (sources.length === 1 && isArray_1.isArray(sources[0])) { - sources = sources[0]; - } - if (sources.length === 0) { - return empty_1.EMPTY; + if (sources.length === 1) { + var first_1 = sources[0]; + if (isArray_1.isArray(first_1)) { + return forkJoinInternal(first_1, null); + } + if (isObject_1.isObject(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) { + var keys = Object.keys(first_1); + return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys); + } } - if (resultSelector) { - return forkJoin(sources).pipe(map_1.map(function (args) { return resultSelector.apply(void 0, args); })); + if (typeof sources[sources.length - 1] === 'function') { + var resultSelector_1 = sources.pop(); + sources = (sources.length === 1 && isArray_1.isArray(sources[0])) ? sources[0] : sources; + return forkJoinInternal(sources, null).pipe(map_1.map(function (args) { return resultSelector_1.apply(void 0, args); })); } - return new Observable_1.Observable(function (subscriber) { - return new ForkJoinSubscriber(subscriber, sources); - }); + return forkJoinInternal(sources, null); } exports.forkJoin = forkJoin; -var ForkJoinSubscriber = (function (_super) { - __extends(ForkJoinSubscriber, _super); - function ForkJoinSubscriber(destination, sources) { - var _this = _super.call(this, destination) || this; - _this.sources = sources; - _this.completed = 0; - _this.haveValues = 0; +function forkJoinInternal(sources, keys) { + return new Observable_1.Observable(function (subscriber) { var len = sources.length; - _this.values = new Array(len); - for (var i = 0; i < len; i++) { - var source = sources[i]; - var innerSubscription = subscribeToResult_1.subscribeToResult(_this, source, null, i); - if (innerSubscription) { - _this.add(innerSubscription); - } - } - return _this; - } - ForkJoinSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { - this.values[outerIndex] = innerValue; - if (!innerSub._hasValue) { - innerSub._hasValue = true; - this.haveValues++; - } - }; - ForkJoinSubscriber.prototype.notifyComplete = function (innerSub) { - var _a = this, destination = _a.destination, haveValues = _a.haveValues, values = _a.values; - var len = values.length; - if (!innerSub._hasValue) { - destination.complete(); - return; - } - this.completed++; - if (this.completed !== len) { + if (len === 0) { + subscriber.complete(); return; } - if (haveValues === len) { - destination.next(values); + var values = new Array(len); + var completed = 0; + var emitted = 0; + var _loop_1 = function (i) { + var source = from_1.from(sources[i]); + var hasValue = false; + subscriber.add(source.subscribe({ + next: function (value) { + if (!hasValue) { + hasValue = true; + emitted++; + } + values[i] = value; + }, + error: function (err) { return subscriber.error(err); }, + complete: function () { + completed++; + if (completed === len || !hasValue) { + if (emitted === len) { + subscriber.next(keys ? + keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) : + values); + } + subscriber.complete(); + } + } + })); + }; + for (var i = 0; i < len; i++) { + _loop_1(i); } - destination.complete(); - }; - return ForkJoinSubscriber; -}(OuterSubscriber_1.OuterSubscriber)); + }); +} -},{"../Observable":31,"../OuterSubscriber":33,"../operators/map":111,"../util/isArray":202,"../util/subscribeToResult":221,"./empty":48}],50:[function(require,module,exports){ +},{"../Observable":48,"../operators/map":125,"../util/isArray":220,"../util/isObject":227,"./from":67}],67:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); -var isPromise_1 = require("../util/isPromise"); -var isArrayLike_1 = require("../util/isArrayLike"); -var isInteropObservable_1 = require("../util/isInteropObservable"); -var isIterable_1 = require("../util/isIterable"); -var fromArray_1 = require("./fromArray"); -var fromPromise_1 = require("./fromPromise"); -var fromIterable_1 = require("./fromIterable"); -var fromObservable_1 = require("./fromObservable"); var subscribeTo_1 = require("../util/subscribeTo"); +var scheduled_1 = require("../scheduled/scheduled"); function from(input, scheduler) { if (!scheduler) { if (input instanceof Observable_1.Observable) { @@ -7362,62 +15817,36 @@ function from(input, scheduler) { } return new Observable_1.Observable(subscribeTo_1.subscribeTo(input)); } - if (input != null) { - if (isInteropObservable_1.isInteropObservable(input)) { - return fromObservable_1.fromObservable(input, scheduler); - } - else if (isPromise_1.isPromise(input)) { - return fromPromise_1.fromPromise(input, scheduler); - } - else if (isArrayLike_1.isArrayLike(input)) { - return fromArray_1.fromArray(input, scheduler); - } - else if (isIterable_1.isIterable(input) || typeof input === 'string') { - return fromIterable_1.fromIterable(input, scheduler); - } + else { + return scheduled_1.scheduled(input, scheduler); } - throw new TypeError((input !== null && typeof input || input) + ' is not observable'); } exports.from = from; -},{"../Observable":31,"../util/isArrayLike":203,"../util/isInteropObservable":206,"../util/isIterable":207,"../util/isPromise":211,"../util/subscribeTo":216,"./fromArray":51,"./fromIterable":54,"./fromObservable":55,"./fromPromise":56}],51:[function(require,module,exports){ +},{"../Observable":48,"../scheduled/scheduled":193,"../util/subscribeTo":234}],68:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); var subscribeToArray_1 = require("../util/subscribeToArray"); +var scheduleArray_1 = require("../scheduled/scheduleArray"); function fromArray(input, scheduler) { if (!scheduler) { return new Observable_1.Observable(subscribeToArray_1.subscribeToArray(input)); } else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - var i = 0; - sub.add(scheduler.schedule(function () { - if (i === input.length) { - subscriber.complete(); - return; - } - subscriber.next(input[i++]); - if (!subscriber.closed) { - sub.add(this.schedule()); - } - })); - return sub; - }); + return scheduleArray_1.scheduleArray(input, scheduler); } } exports.fromArray = fromArray; -},{"../Observable":31,"../Subscription":39,"../util/subscribeToArray":217}],52:[function(require,module,exports){ +},{"../Observable":48,"../scheduled/scheduleArray":189,"../util/subscribeToArray":235}],69:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); var isArray_1 = require("../util/isArray"); var isFunction_1 = require("../util/isFunction"); var map_1 = require("../operators/map"); -var toString = Object.prototype.toString; +var toString = (function () { return Object.prototype.toString; })(); function fromEvent(target, eventName, options, resultSelector) { if (isFunction_1.isFunction(options)) { resultSelector = options; @@ -7476,7 +15905,7 @@ function isEventTarget(sourceObj) { return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function'; } -},{"../Observable":31,"../operators/map":111,"../util/isArray":202,"../util/isFunction":205}],53:[function(require,module,exports){ +},{"../Observable":48,"../operators/map":125,"../util/isArray":220,"../util/isFunction":223}],70:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7511,117 +15940,7 @@ function fromEventPattern(addHandler, removeHandler, resultSelector) { } exports.fromEventPattern = fromEventPattern; -},{"../Observable":31,"../operators/map":111,"../util/isArray":202,"../util/isFunction":205}],54:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -var iterator_1 = require("../symbol/iterator"); -var subscribeToIterable_1 = require("../util/subscribeToIterable"); -function fromIterable(input, scheduler) { - if (!input) { - throw new Error('Iterable cannot be null'); - } - if (!scheduler) { - return new Observable_1.Observable(subscribeToIterable_1.subscribeToIterable(input)); - } - else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - var iterator; - sub.add(function () { - if (iterator && typeof iterator.return === 'function') { - iterator.return(); - } - }); - sub.add(scheduler.schedule(function () { - iterator = input[iterator_1.iterator](); - sub.add(scheduler.schedule(function () { - if (subscriber.closed) { - return; - } - var value; - var done; - try { - var result = iterator.next(); - value = result.value; - done = result.done; - } - catch (err) { - subscriber.error(err); - return; - } - if (done) { - subscriber.complete(); - } - else { - subscriber.next(value); - this.schedule(); - } - })); - })); - return sub; - }); - } -} -exports.fromIterable = fromIterable; - -},{"../Observable":31,"../Subscription":39,"../symbol/iterator":189,"../util/subscribeToIterable":218}],55:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -var observable_1 = require("../symbol/observable"); -var subscribeToObservable_1 = require("../util/subscribeToObservable"); -function fromObservable(input, scheduler) { - if (!scheduler) { - return new Observable_1.Observable(subscribeToObservable_1.subscribeToObservable(input)); - } - else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - sub.add(scheduler.schedule(function () { - var observable = input[observable_1.observable](); - sub.add(observable.subscribe({ - next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); }, - error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); }, - complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); }, - })); - })); - return sub; - }); - } -} -exports.fromObservable = fromObservable; - -},{"../Observable":31,"../Subscription":39,"../symbol/observable":190,"../util/subscribeToObservable":219}],56:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -var Subscription_1 = require("../Subscription"); -var subscribeToPromise_1 = require("../util/subscribeToPromise"); -function fromPromise(input, scheduler) { - if (!scheduler) { - return new Observable_1.Observable(subscribeToPromise_1.subscribeToPromise(input)); - } - else { - return new Observable_1.Observable(function (subscriber) { - var sub = new Subscription_1.Subscription(); - sub.add(scheduler.schedule(function () { return input.then(function (value) { - sub.add(scheduler.schedule(function () { - subscriber.next(value); - sub.add(scheduler.schedule(function () { return subscriber.complete(); })); - })); - }, function (err) { - sub.add(scheduler.schedule(function () { return subscriber.error(err); })); - }); })); - return sub; - }); - } -} -exports.fromPromise = fromPromise; - -},{"../Observable":31,"../Subscription":39,"../util/subscribeToPromise":220}],57:[function(require,module,exports){ +},{"../Observable":48,"../operators/map":125,"../util/isArray":220,"../util/isFunction":223}],71:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7749,7 +16068,7 @@ function dispatch(state) { return this.schedule(state); } -},{"../Observable":31,"../util/identity":201,"../util/isScheduler":212}],58:[function(require,module,exports){ +},{"../Observable":48,"../util/identity":219,"../util/isScheduler":230}],72:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var defer_1 = require("./defer"); @@ -7761,7 +16080,7 @@ function iif(condition, trueResult, falseResult) { } exports.iif = iif; -},{"./defer":47,"./empty":48}],59:[function(require,module,exports){ +},{"./defer":64,"./empty":65}],73:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7788,7 +16107,7 @@ function dispatch(state) { this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period); } -},{"../Observable":31,"../scheduler/async":187,"../util/isNumeric":208}],60:[function(require,module,exports){ +},{"../Observable":48,"../scheduler/async":206,"../util/isNumeric":226}],74:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7819,7 +16138,7 @@ function merge() { } exports.merge = merge; -},{"../Observable":31,"../operators/mergeAll":116,"../util/isScheduler":212,"./fromArray":51}],61:[function(require,module,exports){ +},{"../Observable":48,"../operators/mergeAll":130,"../util/isScheduler":230,"./fromArray":68}],75:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7830,13 +16149,12 @@ function never() { } exports.never = never; -},{"../Observable":31,"../util/noop":213}],62:[function(require,module,exports){ +},{"../Observable":48,"../util/noop":231}],76:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var isScheduler_1 = require("../util/isScheduler"); var fromArray_1 = require("./fromArray"); -var empty_1 = require("./empty"); -var scalar_1 = require("./scalar"); +var scheduleArray_1 = require("../scheduled/scheduleArray"); function of() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -7845,22 +16163,15 @@ function of() { var scheduler = args[args.length - 1]; if (isScheduler_1.isScheduler(scheduler)) { args.pop(); + return scheduleArray_1.scheduleArray(args, scheduler); } else { - scheduler = undefined; - } - switch (args.length) { - case 0: - return empty_1.empty(scheduler); - case 1: - return scheduler ? fromArray_1.fromArray(args, scheduler) : scalar_1.scalar(args[0]); - default: - return fromArray_1.fromArray(args, scheduler); + return fromArray_1.fromArray(args); } } exports.of = of; -},{"../util/isScheduler":212,"./empty":48,"./fromArray":51,"./scalar":67}],63:[function(require,module,exports){ +},{"../scheduled/scheduleArray":189,"../util/isScheduler":230,"./fromArray":68}],77:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7890,7 +16201,7 @@ function onErrorResumeNext() { } exports.onErrorResumeNext = onErrorResumeNext; -},{"../Observable":31,"../util/isArray":202,"./empty":48,"./from":50}],64:[function(require,module,exports){ +},{"../Observable":48,"../util/isArray":220,"./empty":65,"./from":67}],78:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -7933,7 +16244,22 @@ function dispatch(state) { } exports.dispatch = dispatch; -},{"../Observable":31,"../Subscription":39}],65:[function(require,module,exports){ +},{"../Observable":48,"../Subscription":56}],79:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var not_1 = require("../util/not"); +var subscribeTo_1 = require("../util/subscribeTo"); +var filter_1 = require("../operators/filter"); +var Observable_1 = require("../Observable"); +function partition(source, predicate, thisArg) { + return [ + filter_1.filter(predicate, thisArg)(new Observable_1.Observable(subscribeTo_1.subscribeTo(source))), + filter_1.filter(not_1.not(predicate, thisArg))(new Observable_1.Observable(subscribeTo_1.subscribeTo(source))) + ]; +} +exports.partition = partition; + +},{"../Observable":48,"../operators/filter":116,"../util/not":232,"../util/subscribeTo":234}],80:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8026,14 +16352,17 @@ var RaceSubscriber = (function (_super) { }(OuterSubscriber_1.OuterSubscriber)); exports.RaceSubscriber = RaceSubscriber; -},{"../OuterSubscriber":33,"../util/isArray":202,"../util/subscribeToResult":221,"./fromArray":51}],66:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/isArray":220,"../util/subscribeToResult":239,"./fromArray":68}],81:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); function range(start, count, scheduler) { if (start === void 0) { start = 0; } - if (count === void 0) { count = 0; } return new Observable_1.Observable(function (subscriber) { + if (count === undefined) { + count = start; + start = 0; + } var index = 0; var current = start; if (scheduler) { @@ -8073,22 +16402,7 @@ function dispatch(state) { } exports.dispatch = dispatch; -},{"../Observable":31}],67:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); -function scalar(value) { - var result = new Observable_1.Observable(function (subscriber) { - subscriber.next(value); - subscriber.complete(); - }); - result._isScalar = true; - result.value = value; - return result; -} -exports.scalar = scalar; - -},{"../Observable":31}],68:[function(require,module,exports){ +},{"../Observable":48}],82:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -8106,7 +16420,7 @@ function dispatch(_a) { subscriber.error(error); } -},{"../Observable":31}],69:[function(require,module,exports){ +},{"../Observable":48}],83:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -8148,7 +16462,7 @@ function dispatch(state) { this.schedule(state, period); } -},{"../Observable":31,"../scheduler/async":187,"../util/isNumeric":208,"../util/isScheduler":212}],70:[function(require,module,exports){ +},{"../Observable":48,"../scheduler/async":206,"../util/isNumeric":226,"../util/isScheduler":230}],84:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -8184,7 +16498,7 @@ function using(resourceFactory, observableFactory) { } exports.using = using; -},{"../Observable":31,"./empty":48,"./from":50}],71:[function(require,module,exports){ +},{"../Observable":48,"./empty":65,"./from":67}],85:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8415,7 +16729,7 @@ var ZipBufferIterator = (function (_super) { return ZipBufferIterator; }(OuterSubscriber_1.OuterSubscriber)); -},{"../../internal/symbol/iterator":189,"../OuterSubscriber":33,"../Subscriber":38,"../util/isArray":202,"../util/subscribeToResult":221,"./fromArray":51}],72:[function(require,module,exports){ +},{"../../internal/symbol/iterator":208,"../OuterSubscriber":50,"../Subscriber":55,"../util/isArray":220,"../util/subscribeToResult":239,"./fromArray":68}],86:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8431,8 +16745,6 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var OuterSubscriber_1 = require("../OuterSubscriber"); var subscribeToResult_1 = require("../util/subscribeToResult"); function audit(durationSelector) { @@ -8462,18 +16774,20 @@ var AuditSubscriber = (function (_super) { this.value = value; this.hasValue = true; if (!this.throttled) { - var duration = tryCatch_1.tryCatch(this.durationSelector)(value); - if (duration === errorObject_1.errorObject) { - this.destination.error(errorObject_1.errorObject.e); + var duration = void 0; + try { + var durationSelector = this.durationSelector; + duration = durationSelector(value); + } + catch (err) { + return this.destination.error(err); + } + var innerSubscription = subscribeToResult_1.subscribeToResult(this, duration); + if (!innerSubscription || innerSubscription.closed) { + this.clearThrottle(); } else { - var innerSubscription = subscribeToResult_1.subscribeToResult(this, duration); - if (!innerSubscription || innerSubscription.closed) { - this.clearThrottle(); - } - else { - this.add(this.throttled = innerSubscription); - } + this.add(this.throttled = innerSubscription); } } }; @@ -8499,7 +16813,7 @@ var AuditSubscriber = (function (_super) { return AuditSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],73:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],87:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var async_1 = require("../scheduler/async"); @@ -8511,7 +16825,7 @@ function auditTime(duration, scheduler) { } exports.auditTime = auditTime; -},{"../observable/timer":69,"../scheduler/async":187,"./audit":72}],74:[function(require,module,exports){ +},{"../observable/timer":83,"../scheduler/async":206,"./audit":86}],88:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8563,7 +16877,7 @@ var BufferSubscriber = (function (_super) { return BufferSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],75:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],89:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8666,7 +16980,7 @@ var BufferSkipCountSubscriber = (function (_super) { return BufferSkipCountSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],76:[function(require,module,exports){ +},{"../Subscriber":55}],90:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8829,7 +17143,7 @@ function dispatchBufferClose(arg) { subscriber.closeContext(context); } -},{"../Subscriber":38,"../scheduler/async":187,"../util/isScheduler":212}],77:[function(require,module,exports){ +},{"../Subscriber":55,"../scheduler/async":206,"../util/isScheduler":230}],91:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8951,7 +17265,7 @@ var BufferToggleSubscriber = (function (_super) { return BufferToggleSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../Subscription":39,"../util/subscribeToResult":221}],78:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../Subscription":56,"../util/subscribeToResult":239}],92:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -8968,8 +17282,6 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var Subscription_1 = require("../Subscription"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var OuterSubscriber_1 = require("../OuterSubscriber"); var subscribeToResult_1 = require("../util/subscribeToResult"); function bufferWhen(closingSelector) { @@ -9032,23 +17344,25 @@ var BufferWhenSubscriber = (function (_super) { this.destination.next(buffer); } this.buffer = []; - var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)(); - if (closingNotifier === errorObject_1.errorObject) { - this.error(errorObject_1.errorObject.e); + var closingNotifier; + try { + var closingSelector = this.closingSelector; + closingNotifier = closingSelector(); } - else { - closingSubscription = new Subscription_1.Subscription(); - this.closingSubscription = closingSubscription; - this.add(closingSubscription); - this.subscribing = true; - closingSubscription.add(subscribeToResult_1.subscribeToResult(this, closingNotifier)); - this.subscribing = false; + catch (err) { + return this.error(err); } + closingSubscription = new Subscription_1.Subscription(); + this.closingSubscription = closingSubscription; + this.add(closingSubscription); + this.subscribing = true; + closingSubscription.add(subscribeToResult_1.subscribeToResult(this, closingNotifier)); + this.subscribing = false; }; return BufferWhenSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../Subscription":39,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],79:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../Subscription":56,"../util/subscribeToResult":239}],93:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9105,13 +17419,16 @@ var CatchSubscriber = (function (_super) { this._unsubscribeAndRecycle(); var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); this.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, result, undefined, undefined, innerSubscriber); + var innerSubscription = subscribeToResult_1.subscribeToResult(this, result, undefined, undefined, innerSubscriber); + if (innerSubscription !== innerSubscriber) { + this.add(innerSubscription); + } } }; return CatchSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../InnerSubscriber":29,"../OuterSubscriber":33,"../util/subscribeToResult":221}],80:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../OuterSubscriber":50,"../util/subscribeToResult":239}],94:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var combineLatest_1 = require("../observable/combineLatest"); @@ -9120,7 +17437,7 @@ function combineAll(project) { } exports.combineAll = combineAll; -},{"../observable/combineLatest":45}],81:[function(require,module,exports){ +},{"../observable/combineLatest":62}],95:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var isArray_1 = require("../util/isArray"); @@ -9143,7 +17460,7 @@ function combineLatest() { } exports.combineLatest = combineLatest; -},{"../observable/combineLatest":45,"../observable/from":50,"../util/isArray":202}],82:[function(require,module,exports){ +},{"../observable/combineLatest":62,"../observable/from":67,"../util/isArray":220}],96:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var concat_1 = require("../observable/concat"); @@ -9156,7 +17473,7 @@ function concat() { } exports.concat = concat; -},{"../observable/concat":46}],83:[function(require,module,exports){ +},{"../observable/concat":63}],97:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var mergeAll_1 = require("./mergeAll"); @@ -9165,7 +17482,7 @@ function concatAll() { } exports.concatAll = concatAll; -},{"./mergeAll":116}],84:[function(require,module,exports){ +},{"./mergeAll":130}],98:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var mergeMap_1 = require("./mergeMap"); @@ -9174,7 +17491,7 @@ function concatMap(project, resultSelector) { } exports.concatMap = concatMap; -},{"./mergeMap":117}],85:[function(require,module,exports){ +},{"./mergeMap":131}],99:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var concatMap_1 = require("./concatMap"); @@ -9183,7 +17500,7 @@ function concatMapTo(innerObservable, resultSelector) { } exports.concatMapTo = concatMapTo; -},{"./concatMap":84}],86:[function(require,module,exports){ +},{"./concatMap":98}],100:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9252,7 +17569,7 @@ var CountSubscriber = (function (_super) { return CountSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],87:[function(require,module,exports){ +},{"../Subscriber":55}],101:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9343,7 +17660,7 @@ var DebounceSubscriber = (function (_super) { return DebounceSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],88:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],102:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9420,7 +17737,7 @@ function dispatchNext(subscriber) { subscriber.debouncedNext(); } -},{"../Subscriber":38,"../scheduler/async":187}],89:[function(require,module,exports){ +},{"../Subscriber":55,"../scheduler/async":206}],103:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9472,7 +17789,7 @@ var DefaultIfEmptySubscriber = (function (_super) { return DefaultIfEmptySubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],90:[function(require,module,exports){ +},{"../Subscriber":55}],104:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9578,7 +17895,7 @@ var DelayMessage = (function () { return DelayMessage; }()); -},{"../Notification":30,"../Subscriber":38,"../scheduler/async":187,"../util/isDate":204}],91:[function(require,module,exports){ +},{"../Notification":47,"../Subscriber":55,"../scheduler/async":206,"../util/isDate":222}],105:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9725,7 +18042,7 @@ var SubscriptionDelaySubscriber = (function (_super) { return SubscriptionDelaySubscriber; }(Subscriber_1.Subscriber)); -},{"../Observable":31,"../OuterSubscriber":33,"../Subscriber":38,"../util/subscribeToResult":221}],92:[function(require,module,exports){ +},{"../Observable":48,"../OuterSubscriber":50,"../Subscriber":55,"../util/subscribeToResult":239}],106:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9767,7 +18084,7 @@ var DeMaterializeSubscriber = (function (_super) { return DeMaterializeSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],93:[function(require,module,exports){ +},{"../Subscriber":55}],107:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9847,7 +18164,7 @@ var DistinctSubscriber = (function (_super) { }(OuterSubscriber_1.OuterSubscriber)); exports.DistinctSubscriber = DistinctSubscriber; -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],94:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],108:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -9864,8 +18181,6 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var Subscriber_1 = require("../Subscriber"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); function distinctUntilChanged(compare, keySelector) { return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); }; } @@ -9895,25 +18210,28 @@ var DistinctUntilChangedSubscriber = (function (_super) { return x === y; }; DistinctUntilChangedSubscriber.prototype._next = function (value) { - var keySelector = this.keySelector; - var key = value; - if (keySelector) { - key = tryCatch_1.tryCatch(this.keySelector)(value); - if (key === errorObject_1.errorObject) { - return this.destination.error(errorObject_1.errorObject.e); - } + var key; + try { + var keySelector = this.keySelector; + key = keySelector ? keySelector(value) : value; + } + catch (err) { + return this.destination.error(err); } var result = false; if (this.hasKey) { - result = tryCatch_1.tryCatch(this.compare)(this.key, key); - if (result === errorObject_1.errorObject) { - return this.destination.error(errorObject_1.errorObject.e); + try { + var compare = this.compare; + result = compare(this.key, key); + } + catch (err) { + return this.destination.error(err); } } else { this.hasKey = true; } - if (Boolean(result) === false) { + if (!result) { this.key = key; this.destination.next(value); } @@ -9921,7 +18239,7 @@ var DistinctUntilChangedSubscriber = (function (_super) { return DistinctUntilChangedSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../util/errorObject":199,"../util/tryCatch":223}],95:[function(require,module,exports){ +},{"../Subscriber":55}],109:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var distinctUntilChanged_1 = require("./distinctUntilChanged"); @@ -9930,7 +18248,7 @@ function distinctUntilKeyChanged(key, compare) { } exports.distinctUntilKeyChanged = distinctUntilKeyChanged; -},{"./distinctUntilChanged":94}],96:[function(require,module,exports){ +},{"./distinctUntilChanged":108}],110:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ArgumentOutOfRangeError_1 = require("../util/ArgumentOutOfRangeError"); @@ -9949,42 +18267,21 @@ function elementAt(index, defaultValue) { } exports.elementAt = elementAt; -},{"../util/ArgumentOutOfRangeError":192,"./defaultIfEmpty":89,"./filter":102,"./take":154,"./throwIfEmpty":161}],97:[function(require,module,exports){ +},{"../util/ArgumentOutOfRangeError":211,"./defaultIfEmpty":103,"./filter":116,"./take":168,"./throwIfEmpty":175}],111:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var fromArray_1 = require("../observable/fromArray"); -var scalar_1 = require("../observable/scalar"); -var empty_1 = require("../observable/empty"); var concat_1 = require("../observable/concat"); -var isScheduler_1 = require("../util/isScheduler"); +var of_1 = require("../observable/of"); function endWith() { var array = []; for (var _i = 0; _i < arguments.length; _i++) { array[_i] = arguments[_i]; } - return function (source) { - var scheduler = array[array.length - 1]; - if (isScheduler_1.isScheduler(scheduler)) { - array.pop(); - } - else { - scheduler = null; - } - var len = array.length; - if (len === 1 && !scheduler) { - return concat_1.concat(source, scalar_1.scalar(array[0])); - } - else if (len > 0) { - return concat_1.concat(source, fromArray_1.fromArray(array, scheduler)); - } - else { - return concat_1.concat(source, empty_1.empty(scheduler)); - } - }; + return function (source) { return concat_1.concat(source, of_1.of.apply(void 0, array)); }; } exports.endWith = endWith; -},{"../observable/concat":46,"../observable/empty":48,"../observable/fromArray":51,"../observable/scalar":67,"../util/isScheduler":212}],98:[function(require,module,exports){ +},{"../observable/concat":63,"../observable/of":76}],112:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10050,7 +18347,7 @@ var EverySubscriber = (function (_super) { return EverySubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],99:[function(require,module,exports){ +},{"../Subscriber":55}],113:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10110,7 +18407,7 @@ var SwitchFirstSubscriber = (function (_super) { return SwitchFirstSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],100:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],114:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10136,18 +18433,18 @@ function exhaustMap(project, resultSelector) { return function (source) { return source.pipe(exhaustMap(function (a, i) { return from_1.from(project(a, i)).pipe(map_1.map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); }; } return function (source) { - return source.lift(new ExhauseMapOperator(project)); + return source.lift(new ExhaustMapOperator(project)); }; } exports.exhaustMap = exhaustMap; -var ExhauseMapOperator = (function () { - function ExhauseMapOperator(project) { +var ExhaustMapOperator = (function () { + function ExhaustMapOperator(project) { this.project = project; } - ExhauseMapOperator.prototype.call = function (subscriber, source) { + ExhaustMapOperator.prototype.call = function (subscriber, source) { return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project)); }; - return ExhauseMapOperator; + return ExhaustMapOperator; }()); var ExhaustMapSubscriber = (function (_super) { __extends(ExhaustMapSubscriber, _super); @@ -10178,10 +18475,13 @@ var ExhaustMapSubscriber = (function (_super) { this._innerSub(result, value, index); }; ExhaustMapSubscriber.prototype._innerSub = function (result, value, index) { - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); + var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, value, index); var destination = this.destination; destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, result, value, index, innerSubscriber); + var innerSubscription = subscribeToResult_1.subscribeToResult(this, result, undefined, undefined, innerSubscriber); + if (innerSubscription !== innerSubscriber) { + destination.add(innerSubscription); + } }; ExhaustMapSubscriber.prototype._complete = function () { this.hasCompleted = true; @@ -10207,7 +18507,7 @@ var ExhaustMapSubscriber = (function (_super) { return ExhaustMapSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../InnerSubscriber":29,"../OuterSubscriber":33,"../observable/from":50,"../util/subscribeToResult":221,"./map":111}],101:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../OuterSubscriber":50,"../observable/from":67,"../util/subscribeToResult":239,"./map":125}],115:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10223,8 +18523,6 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var OuterSubscriber_1 = require("../OuterSubscriber"); var subscribeToResult_1 = require("../util/subscribeToResult"); function expand(project, concurrent, scheduler) { @@ -10274,17 +18572,20 @@ var ExpandSubscriber = (function (_super) { var index = this.index++; if (this.active < this.concurrent) { destination.next(value); - var result = tryCatch_1.tryCatch(this.project)(value, index); - if (result === errorObject_1.errorObject) { - destination.error(errorObject_1.errorObject.e); - } - else if (!this.scheduler) { - this.subscribeToProjection(result, value, index); + try { + var project = this.project; + var result = project(value, index); + if (!this.scheduler) { + this.subscribeToProjection(result, value, index); + } + else { + var state = { subscriber: this, result: result, value: value, index: index }; + var destination_1 = this.destination; + destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state)); + } } - else { - var state = { subscriber: this, result: result, value: value, index: index }; - var destination_1 = this.destination; - destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state)); + catch (e) { + destination.error(e); } } else { @@ -10322,7 +18623,7 @@ var ExpandSubscriber = (function (_super) { }(OuterSubscriber_1.OuterSubscriber)); exports.ExpandSubscriber = ExpandSubscriber; -},{"../OuterSubscriber":33,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],102:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],116:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10380,7 +18681,7 @@ var FilterSubscriber = (function (_super) { return FilterSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],103:[function(require,module,exports){ +},{"../Subscriber":55}],117:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10421,7 +18722,7 @@ var FinallySubscriber = (function (_super) { return FinallySubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../Subscription":39}],104:[function(require,module,exports){ +},{"../Subscriber":55,"../Subscription":56}],118:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10495,7 +18796,7 @@ var FindValueSubscriber = (function (_super) { }(Subscriber_1.Subscriber)); exports.FindValueSubscriber = FindValueSubscriber; -},{"../Subscriber":38}],105:[function(require,module,exports){ +},{"../Subscriber":55}],119:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var find_1 = require("../operators/find"); @@ -10504,7 +18805,7 @@ function findIndex(predicate, thisArg) { } exports.findIndex = findIndex; -},{"../operators/find":104}],106:[function(require,module,exports){ +},{"../operators/find":118}],120:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var EmptyError_1 = require("../util/EmptyError"); @@ -10519,7 +18820,7 @@ function first(predicate, defaultValue) { } exports.first = first; -},{"../util/EmptyError":193,"../util/identity":201,"./defaultIfEmpty":89,"./filter":102,"./take":154,"./throwIfEmpty":161}],107:[function(require,module,exports){ +},{"../util/EmptyError":212,"../util/identity":219,"./defaultIfEmpty":103,"./filter":116,"./take":168,"./throwIfEmpty":175}],121:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10716,7 +19017,7 @@ var InnerRefCountSubscription = (function (_super) { return InnerRefCountSubscription; }(Subscription_1.Subscription)); -},{"../Observable":31,"../Subject":36,"../Subscriber":38,"../Subscription":39}],108:[function(require,module,exports){ +},{"../Observable":48,"../Subject":53,"../Subscriber":55,"../Subscription":56}],122:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10757,7 +19058,7 @@ var IgnoreElementsSubscriber = (function (_super) { return IgnoreElementsSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],109:[function(require,module,exports){ +},{"../Subscriber":55}],123:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10805,7 +19106,7 @@ var IsEmptySubscriber = (function (_super) { return IsEmptySubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],110:[function(require,module,exports){ +},{"../Subscriber":55}],124:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var EmptyError_1 = require("../util/EmptyError"); @@ -10820,7 +19121,7 @@ function last(predicate, defaultValue) { } exports.last = last; -},{"../util/EmptyError":193,"../util/identity":201,"./defaultIfEmpty":89,"./filter":102,"./takeLast":155,"./throwIfEmpty":161}],111:[function(require,module,exports){ +},{"../util/EmptyError":212,"../util/identity":219,"./defaultIfEmpty":103,"./filter":116,"./takeLast":169,"./throwIfEmpty":175}],125:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10880,7 +19181,7 @@ var MapSubscriber = (function (_super) { return MapSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],112:[function(require,module,exports){ +},{"../Subscriber":55}],126:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10923,7 +19224,7 @@ var MapToSubscriber = (function (_super) { return MapToSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],113:[function(require,module,exports){ +},{"../Subscriber":55}],127:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -10976,7 +19277,7 @@ var MaterializeSubscriber = (function (_super) { return MaterializeSubscriber; }(Subscriber_1.Subscriber)); -},{"../Notification":30,"../Subscriber":38}],114:[function(require,module,exports){ +},{"../Notification":47,"../Subscriber":55}],128:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var reduce_1 = require("./reduce"); @@ -10988,7 +19289,7 @@ function max(comparer) { } exports.max = max; -},{"./reduce":132}],115:[function(require,module,exports){ +},{"./reduce":146}],129:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var merge_1 = require("../observable/merge"); @@ -11001,7 +19302,7 @@ function merge() { } exports.merge = merge; -},{"../observable/merge":60}],116:[function(require,module,exports){ +},{"../observable/merge":74}],130:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var mergeMap_1 = require("./mergeMap"); @@ -11012,7 +19313,7 @@ function mergeAll(concurrent) { } exports.mergeAll = mergeAll; -},{"../util/identity":201,"./mergeMap":117}],117:[function(require,module,exports){ +},{"../util/identity":219,"./mergeMap":131}],131:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11091,10 +19392,13 @@ var MergeMapSubscriber = (function (_super) { this._innerSub(result, value, index); }; MergeMapSubscriber.prototype._innerSub = function (ish, value, index) { - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); + var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, value, index); var destination = this.destination; destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, ish, value, index, innerSubscriber); + var innerSubscription = subscribeToResult_1.subscribeToResult(this, ish, undefined, undefined, innerSubscriber); + if (innerSubscription !== innerSubscriber) { + destination.add(innerSubscription); + } }; MergeMapSubscriber.prototype._complete = function () { this.hasCompleted = true; @@ -11121,7 +19425,7 @@ var MergeMapSubscriber = (function (_super) { }(OuterSubscriber_1.OuterSubscriber)); exports.MergeMapSubscriber = MergeMapSubscriber; -},{"../InnerSubscriber":29,"../OuterSubscriber":33,"../observable/from":50,"../util/subscribeToResult":221,"./map":111}],118:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../OuterSubscriber":50,"../observable/from":67,"../util/subscribeToResult":239,"./map":125}],132:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var mergeMap_1 = require("./mergeMap"); @@ -11137,7 +19441,7 @@ function mergeMapTo(innerObservable, resultSelector, concurrent) { } exports.mergeMapTo = mergeMapTo; -},{"./mergeMap":117}],119:[function(require,module,exports){ +},{"./mergeMap":131}],133:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11153,8 +19457,6 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var subscribeToResult_1 = require("../util/subscribeToResult"); var OuterSubscriber_1 = require("../OuterSubscriber"); var InnerSubscriber_1 = require("../InnerSubscriber"); @@ -11192,25 +19494,30 @@ var MergeScanSubscriber = (function (_super) { MergeScanSubscriber.prototype._next = function (value) { if (this.active < this.concurrent) { var index = this.index++; - var ish = tryCatch_1.tryCatch(this.accumulator)(this.acc, value); var destination = this.destination; - if (ish === errorObject_1.errorObject) { - destination.error(errorObject_1.errorObject.e); + var ish = void 0; + try { + var accumulator = this.accumulator; + ish = accumulator(this.acc, value, index); } - else { - this.active++; - this._innerSub(ish, value, index); + catch (e) { + return destination.error(e); } + this.active++; + this._innerSub(ish, value, index); } else { this.buffer.push(value); } }; MergeScanSubscriber.prototype._innerSub = function (ish, value, index) { - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); + var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, value, index); var destination = this.destination; destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, ish, value, index, innerSubscriber); + var innerSubscription = subscribeToResult_1.subscribeToResult(this, ish, undefined, undefined, innerSubscriber); + if (innerSubscription !== innerSubscriber) { + destination.add(innerSubscription); + } }; MergeScanSubscriber.prototype._complete = function () { this.hasCompleted = true; @@ -11247,7 +19554,7 @@ var MergeScanSubscriber = (function (_super) { }(OuterSubscriber_1.OuterSubscriber)); exports.MergeScanSubscriber = MergeScanSubscriber; -},{"../InnerSubscriber":29,"../OuterSubscriber":33,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],120:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../OuterSubscriber":50,"../util/subscribeToResult":239}],134:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var reduce_1 = require("./reduce"); @@ -11259,7 +19566,7 @@ function min(comparer) { } exports.min = min; -},{"./reduce":132}],121:[function(require,module,exports){ +},{"./reduce":146}],135:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ConnectableObservable_1 = require("../observable/ConnectableObservable"); @@ -11300,7 +19607,7 @@ var MulticastOperator = (function () { }()); exports.MulticastOperator = MulticastOperator; -},{"../observable/ConnectableObservable":41}],122:[function(require,module,exports){ +},{"../observable/ConnectableObservable":58}],136:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11378,7 +19685,7 @@ var ObserveOnMessage = (function () { }()); exports.ObserveOnMessage = ObserveOnMessage; -},{"../Notification":30,"../Subscriber":38}],123:[function(require,module,exports){ +},{"../Notification":47,"../Subscriber":55}],137:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11456,11 +19763,14 @@ var OnErrorResumeNextSubscriber = (function (_super) { }; OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () { var next = this.nextSources.shift(); - if (next) { + if (!!next) { var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); var destination = this.destination; destination.add(innerSubscriber); - subscribeToResult_1.subscribeToResult(this, next, undefined, undefined, innerSubscriber); + var innerSubscription = subscribeToResult_1.subscribeToResult(this, next, undefined, undefined, innerSubscriber); + if (innerSubscription !== innerSubscriber) { + destination.add(innerSubscription); + } } else { this.destination.complete(); @@ -11469,7 +19779,7 @@ var OnErrorResumeNextSubscriber = (function (_super) { return OnErrorResumeNextSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../InnerSubscriber":29,"../OuterSubscriber":33,"../observable/from":50,"../util/isArray":202,"../util/subscribeToResult":221}],124:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../OuterSubscriber":50,"../observable/from":67,"../util/isArray":220,"../util/subscribeToResult":239}],138:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11506,18 +19816,22 @@ var PairwiseSubscriber = (function (_super) { return _this; } PairwiseSubscriber.prototype._next = function (value) { + var pair; if (this.hasPrev) { - this.destination.next([this.prev, value]); + pair = [this.prev, value]; } else { this.hasPrev = true; } this.prev = value; + if (pair) { + this.destination.next(pair); + } }; return PairwiseSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],125:[function(require,module,exports){ +},{"../Subscriber":55}],139:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var not_1 = require("../util/not"); @@ -11530,7 +19844,7 @@ function partition(predicate, thisArg) { } exports.partition = partition; -},{"../util/not":214,"./filter":102}],126:[function(require,module,exports){ +},{"../util/not":232,"./filter":116}],140:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var map_1 = require("./map"); @@ -11563,7 +19877,7 @@ function plucker(props, length) { return mapper; } -},{"./map":111}],127:[function(require,module,exports){ +},{"./map":125}],141:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Subject_1 = require("../Subject"); @@ -11575,7 +19889,7 @@ function publish(selector) { } exports.publish = publish; -},{"../Subject":36,"./multicast":121}],128:[function(require,module,exports){ +},{"../Subject":53,"./multicast":135}],142:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var BehaviorSubject_1 = require("../BehaviorSubject"); @@ -11585,7 +19899,7 @@ function publishBehavior(value) { } exports.publishBehavior = publishBehavior; -},{"../BehaviorSubject":28,"./multicast":121}],129:[function(require,module,exports){ +},{"../BehaviorSubject":45,"./multicast":135}],143:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var AsyncSubject_1 = require("../AsyncSubject"); @@ -11595,7 +19909,7 @@ function publishLast() { } exports.publishLast = publishLast; -},{"../AsyncSubject":27,"./multicast":121}],130:[function(require,module,exports){ +},{"../AsyncSubject":44,"./multicast":135}],144:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ReplaySubject_1 = require("../ReplaySubject"); @@ -11610,7 +19924,7 @@ function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) { } exports.publishReplay = publishReplay; -},{"../ReplaySubject":34,"./multicast":121}],131:[function(require,module,exports){ +},{"../ReplaySubject":51,"./multicast":135}],145:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var isArray_1 = require("../util/isArray"); @@ -11629,7 +19943,7 @@ function race() { } exports.race = race; -},{"../observable/race":65,"../util/isArray":202}],132:[function(require,module,exports){ +},{"../observable/race":80,"../util/isArray":220}],146:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var scan_1 = require("./scan"); @@ -11648,7 +19962,7 @@ function reduce(accumulator, seed) { } exports.reduce = reduce; -},{"../util/pipe":215,"./defaultIfEmpty":89,"./scan":140,"./takeLast":155}],133:[function(require,module,exports){ +},{"../util/pipe":233,"./defaultIfEmpty":103,"./scan":154,"./takeLast":169}],147:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11721,7 +20035,7 @@ var RefCountSubscriber = (function (_super) { return RefCountSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],134:[function(require,module,exports){ +},{"../Subscriber":55}],148:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11787,7 +20101,7 @@ var RepeatSubscriber = (function (_super) { return RepeatSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../observable/empty":48}],135:[function(require,module,exports){ +},{"../Subscriber":55,"../observable/empty":65}],149:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11804,8 +20118,6 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var Subject_1 = require("../Subject"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var OuterSubscriber_1 = require("../OuterSubscriber"); var subscribeToResult_1 = require("../util/subscribeToResult"); function repeatWhen(notifier) { @@ -11873,8 +20185,12 @@ var RepeatWhenSubscriber = (function (_super) { }; RepeatWhenSubscriber.prototype.subscribeToRetries = function () { this.notifications = new Subject_1.Subject(); - var retries = tryCatch_1.tryCatch(this.notifier)(this.notifications); - if (retries === errorObject_1.errorObject) { + var retries; + try { + var notifier = this.notifier; + retries = notifier(this.notifications); + } + catch (e) { return _super.prototype.complete.call(this); } this.retries = retries; @@ -11883,7 +20199,7 @@ var RepeatWhenSubscriber = (function (_super) { return RepeatWhenSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../Subject":36,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],136:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../Subject":53,"../util/subscribeToResult":239}],150:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11938,7 +20254,7 @@ var RetrySubscriber = (function (_super) { return RetrySubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],137:[function(require,module,exports){ +},{"../Subscriber":55}],151:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -11955,8 +20271,6 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var Subject_1 = require("../Subject"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var OuterSubscriber_1 = require("../OuterSubscriber"); var subscribeToResult_1 = require("../util/subscribeToResult"); function retryWhen(notifier) { @@ -11988,9 +20302,12 @@ var RetryWhenSubscriber = (function (_super) { var retriesSubscription = this.retriesSubscription; if (!retries) { errors = new Subject_1.Subject(); - retries = tryCatch_1.tryCatch(this.notifier)(errors); - if (retries === errorObject_1.errorObject) { - return _super.prototype.error.call(this, errorObject_1.errorObject.e); + try { + var notifier = this.notifier; + retries = notifier(errors); + } + catch (e) { + return _super.prototype.error.call(this, e); } retriesSubscription = subscribeToResult_1.subscribeToResult(this, retries); } @@ -12027,7 +20344,7 @@ var RetryWhenSubscriber = (function (_super) { return RetryWhenSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../Subject":36,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],138:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../Subject":53,"../util/subscribeToResult":239}],152:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12087,7 +20404,7 @@ var SampleSubscriber = (function (_super) { return SampleSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],139:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],153:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12148,7 +20465,7 @@ function dispatchNotification(state) { this.schedule(state, period); } -},{"../Subscriber":38,"../scheduler/async":187}],140:[function(require,module,exports){ +},{"../Subscriber":55,"../scheduler/async":206}],154:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12232,7 +20549,7 @@ var ScanSubscriber = (function (_super) { return ScanSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],141:[function(require,module,exports){ +},{"../Subscriber":55}],155:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12249,29 +20566,27 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var Subscriber_1 = require("../Subscriber"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); -function sequenceEqual(compareTo, comparor) { - return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparor)); }; +function sequenceEqual(compareTo, comparator) { + return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparator)); }; } exports.sequenceEqual = sequenceEqual; var SequenceEqualOperator = (function () { - function SequenceEqualOperator(compareTo, comparor) { + function SequenceEqualOperator(compareTo, comparator) { this.compareTo = compareTo; - this.comparor = comparor; + this.comparator = comparator; } SequenceEqualOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparor)); + return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator)); }; return SequenceEqualOperator; }()); exports.SequenceEqualOperator = SequenceEqualOperator; var SequenceEqualSubscriber = (function (_super) { __extends(SequenceEqualSubscriber, _super); - function SequenceEqualSubscriber(destination, compareTo, comparor) { + function SequenceEqualSubscriber(destination, compareTo, comparator) { var _this = _super.call(this, destination) || this; _this.compareTo = compareTo; - _this.comparor = comparor; + _this.comparator = comparator; _this._a = []; _this._b = []; _this._oneComplete = false; @@ -12297,19 +20612,16 @@ var SequenceEqualSubscriber = (function (_super) { this.unsubscribe(); }; SequenceEqualSubscriber.prototype.checkValues = function () { - var _c = this, _a = _c._a, _b = _c._b, comparor = _c.comparor; + var _c = this, _a = _c._a, _b = _c._b, comparator = _c.comparator; while (_a.length > 0 && _b.length > 0) { var a = _a.shift(); var b = _b.shift(); var areEqual = false; - if (comparor) { - areEqual = tryCatch_1.tryCatch(comparor)(a, b); - if (areEqual === errorObject_1.errorObject) { - this.destination.error(errorObject_1.errorObject.e); - } + try { + areEqual = comparator ? comparator(a, b) : a === b; } - else { - areEqual = a === b; + catch (e) { + this.destination.error(e); } if (!areEqual) { this.emit(false); @@ -12362,7 +20674,7 @@ var SequenceEqualCompareToSubscriber = (function (_super) { return SequenceEqualCompareToSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../util/errorObject":199,"../util/tryCatch":223}],142:[function(require,module,exports){ +},{"../Subscriber":55}],156:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var multicast_1 = require("./multicast"); @@ -12376,17 +20688,28 @@ function share() { } exports.share = share; -},{"../Subject":36,"./multicast":121,"./refCount":133}],143:[function(require,module,exports){ +},{"../Subject":53,"./multicast":135,"./refCount":147}],157:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ReplaySubject_1 = require("../ReplaySubject"); -function shareReplay(bufferSize, windowTime, scheduler) { - if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; } - if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; } - return function (source) { return source.lift(shareReplayOperator(bufferSize, windowTime, scheduler)); }; +function shareReplay(configOrBufferSize, windowTime, scheduler) { + var config; + if (configOrBufferSize && typeof configOrBufferSize === 'object') { + config = configOrBufferSize; + } + else { + config = { + bufferSize: configOrBufferSize, + windowTime: windowTime, + refCount: false, + scheduler: scheduler + }; + } + return function (source) { return source.lift(shareReplayOperator(config)); }; } exports.shareReplay = shareReplay; -function shareReplayOperator(bufferSize, windowTime, scheduler) { +function shareReplayOperator(_a) { + var _b = _a.bufferSize, bufferSize = _b === void 0 ? Number.POSITIVE_INFINITY : _b, _c = _a.windowTime, windowTime = _c === void 0 ? Number.POSITIVE_INFINITY : _c, useRefCount = _a.refCount, scheduler = _a.scheduler; var subject; var refCount = 0; var subscription; @@ -12405,22 +20728,25 @@ function shareReplayOperator(bufferSize, windowTime, scheduler) { }, complete: function () { isComplete = true; + subscription = undefined; subject.complete(); }, }); } var innerSub = subject.subscribe(this); - return function () { + this.add(function () { refCount--; innerSub.unsubscribe(); - if (subscription && refCount === 0 && isComplete) { + if (subscription && !isComplete && useRefCount && refCount === 0) { subscription.unsubscribe(); + subscription = undefined; + subject = undefined; } - }; + }); }; } -},{"../ReplaySubject":34}],144:[function(require,module,exports){ +},{"../ReplaySubject":51}],158:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12503,7 +20829,7 @@ var SingleSubscriber = (function (_super) { return SingleSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../util/EmptyError":193}],145:[function(require,module,exports){ +},{"../Subscriber":55,"../util/EmptyError":212}],159:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12549,7 +20875,7 @@ var SkipSubscriber = (function (_super) { return SkipSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],146:[function(require,module,exports){ +},{"../Subscriber":55}],160:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12614,7 +20940,7 @@ var SkipLastSubscriber = (function (_super) { return SkipLastSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../util/ArgumentOutOfRangeError":192}],147:[function(require,module,exports){ +},{"../Subscriber":55,"../util/ArgumentOutOfRangeError":211}],161:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12654,7 +20980,11 @@ var SkipUntilSubscriber = (function (_super) { var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(_this, undefined, undefined); _this.add(innerSubscriber); _this.innerSubscription = innerSubscriber; - subscribeToResult_1.subscribeToResult(_this, notifier, undefined, undefined, innerSubscriber); + var innerSubscription = subscribeToResult_1.subscribeToResult(_this, notifier, undefined, undefined, innerSubscriber); + if (innerSubscription !== innerSubscriber) { + _this.add(innerSubscription); + _this.innerSubscription = innerSubscription; + } return _this; } SkipUntilSubscriber.prototype._next = function (value) { @@ -12673,7 +21003,7 @@ var SkipUntilSubscriber = (function (_super) { return SkipUntilSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../InnerSubscriber":29,"../OuterSubscriber":33,"../util/subscribeToResult":221}],148:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../OuterSubscriber":50,"../util/subscribeToResult":239}],162:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12733,12 +21063,9 @@ var SkipWhileSubscriber = (function (_super) { return SkipWhileSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],149:[function(require,module,exports){ +},{"../Subscriber":55}],163:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var fromArray_1 = require("../observable/fromArray"); -var scalar_1 = require("../observable/scalar"); -var empty_1 = require("../observable/empty"); var concat_1 = require("../observable/concat"); var isScheduler_1 = require("../util/isScheduler"); function startWith() { @@ -12746,29 +21073,18 @@ function startWith() { for (var _i = 0; _i < arguments.length; _i++) { array[_i] = arguments[_i]; } - return function (source) { - var scheduler = array[array.length - 1]; - if (isScheduler_1.isScheduler(scheduler)) { - array.pop(); - } - else { - scheduler = null; - } - var len = array.length; - if (len === 1 && !scheduler) { - return concat_1.concat(scalar_1.scalar(array[0]), source); - } - else if (len > 0) { - return concat_1.concat(fromArray_1.fromArray(array, scheduler), source); - } - else { - return concat_1.concat(empty_1.empty(scheduler), source); - } - }; + var scheduler = array[array.length - 1]; + if (isScheduler_1.isScheduler(scheduler)) { + array.pop(); + return function (source) { return concat_1.concat(array, source, scheduler); }; + } + else { + return function (source) { return concat_1.concat(array, source); }; + } } exports.startWith = startWith; -},{"../observable/concat":46,"../observable/empty":48,"../observable/fromArray":51,"../observable/scalar":67,"../util/isScheduler":212}],150:[function(require,module,exports){ +},{"../observable/concat":63,"../util/isScheduler":230}],164:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var SubscribeOnObservable_1 = require("../observable/SubscribeOnObservable"); @@ -12790,7 +21106,7 @@ var SubscribeOnOperator = (function () { return SubscribeOnOperator; }()); -},{"../observable/SubscribeOnObservable":42}],151:[function(require,module,exports){ +},{"../observable/SubscribeOnObservable":59}],165:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var switchMap_1 = require("./switchMap"); @@ -12800,7 +21116,7 @@ function switchAll() { } exports.switchAll = switchAll; -},{"../util/identity":201,"./switchMap":152}],152:[function(require,module,exports){ +},{"../util/identity":219,"./switchMap":166}],166:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12862,10 +21178,13 @@ var SwitchMapSubscriber = (function (_super) { if (innerSubscription) { innerSubscription.unsubscribe(); } - var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, undefined, undefined); + var innerSubscriber = new InnerSubscriber_1.InnerSubscriber(this, value, index); var destination = this.destination; destination.add(innerSubscriber); - this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, value, index, innerSubscriber); + this.innerSubscription = subscribeToResult_1.subscribeToResult(this, result, undefined, undefined, innerSubscriber); + if (this.innerSubscription !== innerSubscriber) { + destination.add(this.innerSubscription); + } }; SwitchMapSubscriber.prototype._complete = function () { var innerSubscription = this.innerSubscription; @@ -12891,7 +21210,7 @@ var SwitchMapSubscriber = (function (_super) { return SwitchMapSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../InnerSubscriber":29,"../OuterSubscriber":33,"../observable/from":50,"../util/subscribeToResult":221,"./map":111}],153:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../OuterSubscriber":50,"../observable/from":67,"../util/subscribeToResult":239,"./map":125}],167:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var switchMap_1 = require("./switchMap"); @@ -12900,7 +21219,7 @@ function switchMapTo(innerObservable, resultSelector) { } exports.switchMapTo = switchMapTo; -},{"./switchMap":152}],154:[function(require,module,exports){ +},{"./switchMap":166}],168:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -12964,7 +21283,7 @@ var TakeSubscriber = (function (_super) { return TakeSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../observable/empty":48,"../util/ArgumentOutOfRangeError":192}],155:[function(require,module,exports){ +},{"../Subscriber":55,"../observable/empty":65,"../util/ArgumentOutOfRangeError":211}],169:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13043,7 +21362,7 @@ var TakeLastSubscriber = (function (_super) { return TakeLastSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../observable/empty":48,"../util/ArgumentOutOfRangeError":192}],156:[function(require,module,exports){ +},{"../Subscriber":55,"../observable/empty":65,"../util/ArgumentOutOfRangeError":211}],170:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13096,7 +21415,7 @@ var TakeUntilSubscriber = (function (_super) { return TakeUntilSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],157:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],171:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13113,24 +21432,29 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var Subscriber_1 = require("../Subscriber"); -function takeWhile(predicate) { - return function (source) { return source.lift(new TakeWhileOperator(predicate)); }; +function takeWhile(predicate, inclusive) { + if (inclusive === void 0) { inclusive = false; } + return function (source) { + return source.lift(new TakeWhileOperator(predicate, inclusive)); + }; } exports.takeWhile = takeWhile; var TakeWhileOperator = (function () { - function TakeWhileOperator(predicate) { + function TakeWhileOperator(predicate, inclusive) { this.predicate = predicate; + this.inclusive = inclusive; } TakeWhileOperator.prototype.call = function (subscriber, source) { - return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate)); + return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive)); }; return TakeWhileOperator; }()); var TakeWhileSubscriber = (function (_super) { __extends(TakeWhileSubscriber, _super); - function TakeWhileSubscriber(destination, predicate) { + function TakeWhileSubscriber(destination, predicate, inclusive) { var _this = _super.call(this, destination) || this; _this.predicate = predicate; + _this.inclusive = inclusive; _this.index = 0; return _this; } @@ -13152,13 +21476,16 @@ var TakeWhileSubscriber = (function (_super) { destination.next(value); } else { + if (this.inclusive) { + destination.next(value); + } destination.complete(); } }; return TakeWhileSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38}],158:[function(require,module,exports){ +},{"../Subscriber":55}],172:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13248,7 +21575,7 @@ var TapSubscriber = (function (_super) { return TapSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subscriber":38,"../util/isFunction":205,"../util/noop":213}],159:[function(require,module,exports){ +},{"../Subscriber":55,"../util/isFunction":223,"../util/noop":231}],173:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13320,7 +21647,7 @@ var ThrottleSubscriber = (function (_super) { }; ThrottleSubscriber.prototype.throttle = function (value) { var duration = this.tryDurationSelector(value); - if (duration) { + if (!!duration) { this.add(this._throttled = subscribeToResult_1.subscribeToResult(this, duration)); } }; @@ -13352,7 +21679,7 @@ var ThrottleSubscriber = (function (_super) { return ThrottleSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],160:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],174:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13413,6 +21740,10 @@ var ThrottleTimeSubscriber = (function (_super) { if (this.leading) { this.destination.next(value); } + else if (this.trailing) { + this._trailingValue = value; + this._hasTrailingValue = true; + } } }; ThrottleTimeSubscriber.prototype._complete = function () { @@ -13444,28 +21775,74 @@ function dispatchNext(arg) { subscriber.clearThrottle(); } -},{"../Subscriber":38,"../scheduler/async":187,"./throttle":159}],161:[function(require,module,exports){ +},{"../Subscriber":55,"../scheduler/async":206,"./throttle":173}],175:[function(require,module,exports){ "use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + } + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); Object.defineProperty(exports, "__esModule", { value: true }); -var tap_1 = require("./tap"); var EmptyError_1 = require("../util/EmptyError"); -exports.throwIfEmpty = function (errorFactory) { +var Subscriber_1 = require("../Subscriber"); +function throwIfEmpty(errorFactory) { if (errorFactory === void 0) { errorFactory = defaultErrorFactory; } - return tap_1.tap({ - hasValue: false, - next: function () { this.hasValue = true; }, - complete: function () { - if (!this.hasValue) { - throw errorFactory(); + return function (source) { + return source.lift(new ThrowIfEmptyOperator(errorFactory)); + }; +} +exports.throwIfEmpty = throwIfEmpty; +var ThrowIfEmptyOperator = (function () { + function ThrowIfEmptyOperator(errorFactory) { + this.errorFactory = errorFactory; + } + ThrowIfEmptyOperator.prototype.call = function (subscriber, source) { + return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory)); + }; + return ThrowIfEmptyOperator; +}()); +var ThrowIfEmptySubscriber = (function (_super) { + __extends(ThrowIfEmptySubscriber, _super); + function ThrowIfEmptySubscriber(destination, errorFactory) { + var _this = _super.call(this, destination) || this; + _this.errorFactory = errorFactory; + _this.hasValue = false; + return _this; + } + ThrowIfEmptySubscriber.prototype._next = function (value) { + this.hasValue = true; + this.destination.next(value); + }; + ThrowIfEmptySubscriber.prototype._complete = function () { + if (!this.hasValue) { + var err = void 0; + try { + err = this.errorFactory(); } + catch (e) { + err = e; + } + this.destination.error(err); } - }); -}; + else { + return this.destination.complete(); + } + }; + return ThrowIfEmptySubscriber; +}(Subscriber_1.Subscriber)); function defaultErrorFactory() { return new EmptyError_1.EmptyError(); } -},{"../util/EmptyError":193,"./tap":158}],162:[function(require,module,exports){ +},{"../Subscriber":55,"../util/EmptyError":212}],176:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var async_1 = require("../scheduler/async"); @@ -13494,7 +21871,7 @@ var TimeInterval = (function () { }()); exports.TimeInterval = TimeInterval; -},{"../observable/defer":47,"../scheduler/async":187,"./map":111,"./scan":140}],163:[function(require,module,exports){ +},{"../observable/defer":64,"../scheduler/async":206,"./map":125,"./scan":154}],177:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var async_1 = require("../scheduler/async"); @@ -13507,7 +21884,7 @@ function timeout(due, scheduler) { } exports.timeout = timeout; -},{"../observable/throwError":68,"../scheduler/async":187,"../util/TimeoutError":196,"./timeoutWith":164}],164:[function(require,module,exports){ +},{"../observable/throwError":82,"../scheduler/async":206,"../util/TimeoutError":215,"./timeoutWith":178}],178:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13588,7 +21965,7 @@ var TimeoutWithSubscriber = (function (_super) { return TimeoutWithSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../scheduler/async":187,"../util/isDate":204,"../util/subscribeToResult":221}],165:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../scheduler/async":206,"../util/isDate":222,"../util/subscribeToResult":239}],179:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var async_1 = require("../scheduler/async"); @@ -13607,7 +21984,7 @@ var Timestamp = (function () { }()); exports.Timestamp = Timestamp; -},{"../scheduler/async":187,"./map":111}],166:[function(require,module,exports){ +},{"../scheduler/async":206,"./map":125}],180:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var reduce_1 = require("./reduce"); @@ -13623,7 +22000,7 @@ function toArray() { } exports.toArray = toArray; -},{"./reduce":132}],167:[function(require,module,exports){ +},{"./reduce":146}],181:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13705,7 +22082,7 @@ var WindowSubscriber = (function (_super) { return WindowSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../Subject":36,"../util/subscribeToResult":221}],168:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../Subject":53,"../util/subscribeToResult":239}],182:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13796,7 +22173,7 @@ var WindowCountSubscriber = (function (_super) { return WindowCountSubscriber; }(Subscriber_1.Subscriber)); -},{"../Subject":36,"../Subscriber":38}],169:[function(require,module,exports){ +},{"../Subject":53,"../Subscriber":55}],183:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13966,7 +22343,7 @@ function dispatchWindowClose(state) { subscriber.closeWindow(window); } -},{"../Subject":36,"../Subscriber":38,"../scheduler/async":187,"../util/isNumeric":208,"../util/isScheduler":212}],170:[function(require,module,exports){ +},{"../Subject":53,"../Subscriber":55,"../scheduler/async":206,"../util/isNumeric":226,"../util/isScheduler":230}],184:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -13984,8 +22361,6 @@ var __extends = (this && this.__extends) || (function () { Object.defineProperty(exports, "__esModule", { value: true }); var Subject_1 = require("../Subject"); var Subscription_1 = require("../Subscription"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var OuterSubscriber_1 = require("../OuterSubscriber"); var subscribeToResult_1 = require("../util/subscribeToResult"); function windowToggle(openings, closingSelector) { @@ -14064,26 +22439,27 @@ var WindowToggleSubscriber = (function (_super) { }; WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) { if (outerValue === this.openings) { - var closingSelector = this.closingSelector; - var closingNotifier = tryCatch_1.tryCatch(closingSelector)(innerValue); - if (closingNotifier === errorObject_1.errorObject) { - return this.error(errorObject_1.errorObject.e); + var closingNotifier = void 0; + try { + var closingSelector = this.closingSelector; + closingNotifier = closingSelector(innerValue); + } + catch (e) { + return this.error(e); + } + var window_1 = new Subject_1.Subject(); + var subscription = new Subscription_1.Subscription(); + var context_4 = { window: window_1, subscription: subscription }; + this.contexts.push(context_4); + var innerSubscription = subscribeToResult_1.subscribeToResult(this, closingNotifier, context_4); + if (innerSubscription.closed) { + this.closeWindow(this.contexts.length - 1); } else { - var window_1 = new Subject_1.Subject(); - var subscription = new Subscription_1.Subscription(); - var context_4 = { window: window_1, subscription: subscription }; - this.contexts.push(context_4); - var innerSubscription = subscribeToResult_1.subscribeToResult(this, closingNotifier, context_4); - if (innerSubscription.closed) { - this.closeWindow(this.contexts.length - 1); - } - else { - innerSubscription.context = context_4; - subscription.add(innerSubscription); - } - this.destination.next(window_1); + innerSubscription.context = context_4; + subscription.add(innerSubscription); } + this.destination.next(window_1); } else { this.closeWindow(this.contexts.indexOf(outerValue)); @@ -14111,7 +22487,7 @@ var WindowToggleSubscriber = (function (_super) { return WindowToggleSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../Subject":36,"../Subscription":39,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],171:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../Subject":53,"../Subscription":56,"../util/subscribeToResult":239}],185:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14128,8 +22504,6 @@ var __extends = (this && this.__extends) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); var Subject_1 = require("../Subject"); -var tryCatch_1 = require("../util/tryCatch"); -var errorObject_1 = require("../util/errorObject"); var OuterSubscriber_1 = require("../OuterSubscriber"); var subscribeToResult_1 = require("../util/subscribeToResult"); function windowWhen(closingSelector) { @@ -14195,20 +22569,22 @@ var WindowSubscriber = (function (_super) { } var window = this.window = new Subject_1.Subject(); this.destination.next(window); - var closingNotifier = tryCatch_1.tryCatch(this.closingSelector)(); - if (closingNotifier === errorObject_1.errorObject) { - var err = errorObject_1.errorObject.e; - this.destination.error(err); - this.window.error(err); + var closingNotifier; + try { + var closingSelector = this.closingSelector; + closingNotifier = closingSelector(); } - else { - this.add(this.closingNotification = subscribeToResult_1.subscribeToResult(this, closingNotifier)); + catch (e) { + this.destination.error(e); + this.window.error(e); + return; } + this.add(this.closingNotification = subscribeToResult_1.subscribeToResult(this, closingNotifier)); }; return WindowSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../Subject":36,"../util/errorObject":199,"../util/subscribeToResult":221,"../util/tryCatch":223}],172:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../Subject":53,"../util/subscribeToResult":239}],186:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14306,7 +22682,7 @@ var WithLatestFromSubscriber = (function (_super) { return WithLatestFromSubscriber; }(OuterSubscriber_1.OuterSubscriber)); -},{"../OuterSubscriber":33,"../util/subscribeToResult":221}],173:[function(require,module,exports){ +},{"../OuterSubscriber":50,"../util/subscribeToResult":239}],187:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var zip_1 = require("../observable/zip"); @@ -14321,7 +22697,7 @@ function zip() { } exports.zip = zip; -},{"../observable/zip":71}],174:[function(require,module,exports){ +},{"../observable/zip":85}],188:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var zip_1 = require("../observable/zip"); @@ -14330,7 +22706,153 @@ function zipAll(project) { } exports.zipAll = zipAll; -},{"../observable/zip":71}],175:[function(require,module,exports){ +},{"../observable/zip":85}],189:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Observable_1 = require("../Observable"); +var Subscription_1 = require("../Subscription"); +function scheduleArray(input, scheduler) { + return new Observable_1.Observable(function (subscriber) { + var sub = new Subscription_1.Subscription(); + var i = 0; + sub.add(scheduler.schedule(function () { + if (i === input.length) { + subscriber.complete(); + return; + } + subscriber.next(input[i++]); + if (!subscriber.closed) { + sub.add(this.schedule()); + } + })); + return sub; + }); +} +exports.scheduleArray = scheduleArray; + +},{"../Observable":48,"../Subscription":56}],190:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Observable_1 = require("../Observable"); +var Subscription_1 = require("../Subscription"); +var iterator_1 = require("../symbol/iterator"); +function scheduleIterable(input, scheduler) { + if (!input) { + throw new Error('Iterable cannot be null'); + } + return new Observable_1.Observable(function (subscriber) { + var sub = new Subscription_1.Subscription(); + var iterator; + sub.add(function () { + if (iterator && typeof iterator.return === 'function') { + iterator.return(); + } + }); + sub.add(scheduler.schedule(function () { + iterator = input[iterator_1.iterator](); + sub.add(scheduler.schedule(function () { + if (subscriber.closed) { + return; + } + var value; + var done; + try { + var result = iterator.next(); + value = result.value; + done = result.done; + } + catch (err) { + subscriber.error(err); + return; + } + if (done) { + subscriber.complete(); + } + else { + subscriber.next(value); + this.schedule(); + } + })); + })); + return sub; + }); +} +exports.scheduleIterable = scheduleIterable; + +},{"../Observable":48,"../Subscription":56,"../symbol/iterator":208}],191:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Observable_1 = require("../Observable"); +var Subscription_1 = require("../Subscription"); +var observable_1 = require("../symbol/observable"); +function scheduleObservable(input, scheduler) { + return new Observable_1.Observable(function (subscriber) { + var sub = new Subscription_1.Subscription(); + sub.add(scheduler.schedule(function () { + var observable = input[observable_1.observable](); + sub.add(observable.subscribe({ + next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); }, + error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); }, + complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); }, + })); + })); + return sub; + }); +} +exports.scheduleObservable = scheduleObservable; + +},{"../Observable":48,"../Subscription":56,"../symbol/observable":209}],192:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Observable_1 = require("../Observable"); +var Subscription_1 = require("../Subscription"); +function schedulePromise(input, scheduler) { + return new Observable_1.Observable(function (subscriber) { + var sub = new Subscription_1.Subscription(); + sub.add(scheduler.schedule(function () { return input.then(function (value) { + sub.add(scheduler.schedule(function () { + subscriber.next(value); + sub.add(scheduler.schedule(function () { return subscriber.complete(); })); + })); + }, function (err) { + sub.add(scheduler.schedule(function () { return subscriber.error(err); })); + }); })); + return sub; + }); +} +exports.schedulePromise = schedulePromise; + +},{"../Observable":48,"../Subscription":56}],193:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var scheduleObservable_1 = require("./scheduleObservable"); +var schedulePromise_1 = require("./schedulePromise"); +var scheduleArray_1 = require("./scheduleArray"); +var scheduleIterable_1 = require("./scheduleIterable"); +var isInteropObservable_1 = require("../util/isInteropObservable"); +var isPromise_1 = require("../util/isPromise"); +var isArrayLike_1 = require("../util/isArrayLike"); +var isIterable_1 = require("../util/isIterable"); +function scheduled(input, scheduler) { + if (input != null) { + if (isInteropObservable_1.isInteropObservable(input)) { + return scheduleObservable_1.scheduleObservable(input, scheduler); + } + else if (isPromise_1.isPromise(input)) { + return schedulePromise_1.schedulePromise(input, scheduler); + } + else if (isArrayLike_1.isArrayLike(input)) { + return scheduleArray_1.scheduleArray(input, scheduler); + } + else if (isIterable_1.isIterable(input) || typeof input === 'string') { + return scheduleIterable_1.scheduleIterable(input, scheduler); + } + } + throw new TypeError((input !== null && typeof input || input) + ' is not observable'); +} +exports.scheduled = scheduled; + +},{"../util/isArrayLike":221,"../util/isInteropObservable":224,"../util/isIterable":225,"../util/isPromise":229,"./scheduleArray":189,"./scheduleIterable":190,"./scheduleObservable":191,"./schedulePromise":192}],194:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14360,7 +22882,7 @@ var Action = (function (_super) { }(Subscription_1.Subscription)); exports.Action = Action; -},{"../Subscription":39}],176:[function(require,module,exports){ +},{"../Subscription":56}],195:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14408,7 +22930,7 @@ var AnimationFrameAction = (function (_super) { }(AsyncAction_1.AsyncAction)); exports.AnimationFrameAction = AnimationFrameAction; -},{"./AsyncAction":180}],177:[function(require,module,exports){ +},{"./AsyncAction":199}],196:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14455,7 +22977,7 @@ var AnimationFrameScheduler = (function (_super) { }(AsyncScheduler_1.AsyncScheduler)); exports.AnimationFrameScheduler = AnimationFrameScheduler; -},{"./AsyncScheduler":181}],178:[function(require,module,exports){ +},{"./AsyncScheduler":200}],197:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14504,7 +23026,7 @@ var AsapAction = (function (_super) { }(AsyncAction_1.AsyncAction)); exports.AsapAction = AsapAction; -},{"../util/Immediate":194,"./AsyncAction":180}],179:[function(require,module,exports){ +},{"../util/Immediate":213,"./AsyncAction":199}],198:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14551,7 +23073,7 @@ var AsapScheduler = (function (_super) { }(AsyncScheduler_1.AsyncScheduler)); exports.AsapScheduler = AsapScheduler; -},{"./AsyncScheduler":181}],180:[function(require,module,exports){ +},{"./AsyncScheduler":200}],199:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14603,6 +23125,7 @@ var AsyncAction = (function (_super) { return id; } clearInterval(id); + return undefined; }; AsyncAction.prototype.execute = function (state, delay) { if (this.closed) { @@ -14653,7 +23176,7 @@ var AsyncAction = (function (_super) { }(Action_1.Action)); exports.AsyncAction = AsyncAction; -},{"./Action":175}],181:[function(require,module,exports){ +},{"./Action":194}],200:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14721,7 +23244,7 @@ var AsyncScheduler = (function (_super) { }(Scheduler_1.Scheduler)); exports.AsyncScheduler = AsyncScheduler; -},{"../Scheduler":35}],182:[function(require,module,exports){ +},{"../Scheduler":52}],201:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14772,7 +23295,7 @@ var QueueAction = (function (_super) { }(AsyncAction_1.AsyncAction)); exports.QueueAction = QueueAction; -},{"./AsyncAction":180}],183:[function(require,module,exports){ +},{"./AsyncAction":199}],202:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14798,7 +23321,7 @@ var QueueScheduler = (function (_super) { }(AsyncScheduler_1.AsyncScheduler)); exports.QueueScheduler = QueueScheduler; -},{"./AsyncScheduler":181}],184:[function(require,module,exports){ +},{"./AsyncScheduler":200}],203:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -14830,7 +23353,9 @@ var VirtualTimeScheduler = (function (_super) { VirtualTimeScheduler.prototype.flush = function () { var _a = this, actions = _a.actions, maxFrames = _a.maxFrames; var error, action; - while ((action = actions.shift()) && (this.frame = action.delay) <= maxFrames) { + while ((action = actions[0]) && action.delay <= maxFrames) { + actions.shift(); + this.frame = action.delay; if (error = action.execute(action.state, action.delay)) { break; } @@ -14908,35 +23433,35 @@ var VirtualAction = (function (_super) { }(AsyncAction_1.AsyncAction)); exports.VirtualAction = VirtualAction; -},{"./AsyncAction":180,"./AsyncScheduler":181}],185:[function(require,module,exports){ +},{"./AsyncAction":199,"./AsyncScheduler":200}],204:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var AnimationFrameAction_1 = require("./AnimationFrameAction"); var AnimationFrameScheduler_1 = require("./AnimationFrameScheduler"); exports.animationFrame = new AnimationFrameScheduler_1.AnimationFrameScheduler(AnimationFrameAction_1.AnimationFrameAction); -},{"./AnimationFrameAction":176,"./AnimationFrameScheduler":177}],186:[function(require,module,exports){ +},{"./AnimationFrameAction":195,"./AnimationFrameScheduler":196}],205:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var AsapAction_1 = require("./AsapAction"); var AsapScheduler_1 = require("./AsapScheduler"); exports.asap = new AsapScheduler_1.AsapScheduler(AsapAction_1.AsapAction); -},{"./AsapAction":178,"./AsapScheduler":179}],187:[function(require,module,exports){ +},{"./AsapAction":197,"./AsapScheduler":198}],206:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var AsyncAction_1 = require("./AsyncAction"); var AsyncScheduler_1 = require("./AsyncScheduler"); exports.async = new AsyncScheduler_1.AsyncScheduler(AsyncAction_1.AsyncAction); -},{"./AsyncAction":180,"./AsyncScheduler":181}],188:[function(require,module,exports){ +},{"./AsyncAction":199,"./AsyncScheduler":200}],207:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var QueueAction_1 = require("./QueueAction"); var QueueScheduler_1 = require("./QueueScheduler"); exports.queue = new QueueScheduler_1.QueueScheduler(QueueAction_1.QueueAction); -},{"./QueueAction":182,"./QueueScheduler":183}],189:[function(require,module,exports){ +},{"./QueueAction":201,"./QueueScheduler":202}],208:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function getSymbolIterator() { @@ -14949,105 +23474,129 @@ exports.getSymbolIterator = getSymbolIterator; exports.iterator = getSymbolIterator(); exports.$$iterator = exports.iterator; -},{}],190:[function(require,module,exports){ +},{}],209:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.observable = typeof Symbol === 'function' && Symbol.observable || '@@observable'; +exports.observable = (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })(); -},{}],191:[function(require,module,exports){ +},{}],210:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.rxSubscriber = typeof Symbol === 'function' - ? Symbol('rxSubscriber') - : '@@rxSubscriber_' + Math.random(); +exports.rxSubscriber = (function () { + return typeof Symbol === 'function' + ? Symbol('rxSubscriber') + : '@@rxSubscriber_' + Math.random(); +})(); exports.$$rxSubscriber = exports.rxSubscriber; -},{}],192:[function(require,module,exports){ +},{}],211:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -function ArgumentOutOfRangeErrorImpl() { - Error.call(this); - this.message = 'argument out of range'; - this.name = 'ArgumentOutOfRangeError'; - return this; -} -ArgumentOutOfRangeErrorImpl.prototype = Object.create(Error.prototype); +var ArgumentOutOfRangeErrorImpl = (function () { + function ArgumentOutOfRangeErrorImpl() { + Error.call(this); + this.message = 'argument out of range'; + this.name = 'ArgumentOutOfRangeError'; + return this; + } + ArgumentOutOfRangeErrorImpl.prototype = Object.create(Error.prototype); + return ArgumentOutOfRangeErrorImpl; +})(); exports.ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl; -},{}],193:[function(require,module,exports){ +},{}],212:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -function EmptyErrorImpl() { - Error.call(this); - this.message = 'no elements in sequence'; - this.name = 'EmptyError'; - return this; -} -EmptyErrorImpl.prototype = Object.create(Error.prototype); +var EmptyErrorImpl = (function () { + function EmptyErrorImpl() { + Error.call(this); + this.message = 'no elements in sequence'; + this.name = 'EmptyError'; + return this; + } + EmptyErrorImpl.prototype = Object.create(Error.prototype); + return EmptyErrorImpl; +})(); exports.EmptyError = EmptyErrorImpl; -},{}],194:[function(require,module,exports){ +},{}],213:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var nextHandle = 1; -var tasksByHandle = {}; -function runIfPresent(handle) { - var cb = tasksByHandle[handle]; - if (cb) { - cb(); +var RESOLVED = (function () { return Promise.resolve(); })(); +var activeHandles = {}; +function findAndClearHandle(handle) { + if (handle in activeHandles) { + delete activeHandles[handle]; + return true; } + return false; } exports.Immediate = { setImmediate: function (cb) { var handle = nextHandle++; - tasksByHandle[handle] = cb; - Promise.resolve().then(function () { return runIfPresent(handle); }); + activeHandles[handle] = true; + RESOLVED.then(function () { return findAndClearHandle(handle) && cb(); }); return handle; }, clearImmediate: function (handle) { - delete tasksByHandle[handle]; + findAndClearHandle(handle); }, }; +exports.TestTools = { + pending: function () { + return Object.keys(activeHandles).length; + } +}; -},{}],195:[function(require,module,exports){ +},{}],214:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -function ObjectUnsubscribedErrorImpl() { - Error.call(this); - this.message = 'object unsubscribed'; - this.name = 'ObjectUnsubscribedError'; - return this; -} -ObjectUnsubscribedErrorImpl.prototype = Object.create(Error.prototype); +var ObjectUnsubscribedErrorImpl = (function () { + function ObjectUnsubscribedErrorImpl() { + Error.call(this); + this.message = 'object unsubscribed'; + this.name = 'ObjectUnsubscribedError'; + return this; + } + ObjectUnsubscribedErrorImpl.prototype = Object.create(Error.prototype); + return ObjectUnsubscribedErrorImpl; +})(); exports.ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl; -},{}],196:[function(require,module,exports){ +},{}],215:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -function TimeoutErrorImpl() { - Error.call(this); - this.message = 'Timeout has occurred'; - this.name = 'TimeoutError'; - return this; -} -TimeoutErrorImpl.prototype = Object.create(Error.prototype); +var TimeoutErrorImpl = (function () { + function TimeoutErrorImpl() { + Error.call(this); + this.message = 'Timeout has occurred'; + this.name = 'TimeoutError'; + return this; + } + TimeoutErrorImpl.prototype = Object.create(Error.prototype); + return TimeoutErrorImpl; +})(); exports.TimeoutError = TimeoutErrorImpl; -},{}],197:[function(require,module,exports){ +},{}],216:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -function UnsubscriptionErrorImpl(errors) { - Error.call(this); - this.message = errors ? - errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : ''; - this.name = 'UnsubscriptionError'; - this.errors = errors; - return this; -} -UnsubscriptionErrorImpl.prototype = Object.create(Error.prototype); +var UnsubscriptionErrorImpl = (function () { + function UnsubscriptionErrorImpl(errors) { + Error.call(this); + this.message = errors ? + errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : ''; + this.name = 'UnsubscriptionError'; + this.errors = errors; + return this; + } + UnsubscriptionErrorImpl.prototype = Object.create(Error.prototype); + return UnsubscriptionErrorImpl; +})(); exports.UnsubscriptionError = UnsubscriptionErrorImpl; -},{}],198:[function(require,module,exports){ +},{}],217:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Subscriber_1 = require("../Subscriber"); @@ -15068,20 +23617,15 @@ function canReportError(observer) { } exports.canReportError = canReportError; -},{"../Subscriber":38}],199:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.errorObject = { e: {} }; - -},{}],200:[function(require,module,exports){ +},{"../Subscriber":55}],218:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function hostReportError(err) { - setTimeout(function () { throw err; }); + setTimeout(function () { throw err; }, 0); } exports.hostReportError = hostReportError; -},{}],201:[function(require,module,exports){ +},{}],219:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function identity(x) { @@ -15089,17 +23633,17 @@ function identity(x) { } exports.identity = identity; -},{}],202:[function(require,module,exports){ +},{}],220:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); +exports.isArray = (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })(); -},{}],203:[function(require,module,exports){ +},{}],221:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; }); -},{}],204:[function(require,module,exports){ +},{}],222:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function isDate(value) { @@ -15107,7 +23651,7 @@ function isDate(value) { } exports.isDate = isDate; -},{}],205:[function(require,module,exports){ +},{}],223:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function isFunction(x) { @@ -15115,7 +23659,7 @@ function isFunction(x) { } exports.isFunction = isFunction; -},{}],206:[function(require,module,exports){ +},{}],224:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var observable_1 = require("../symbol/observable"); @@ -15124,7 +23668,7 @@ function isInteropObservable(input) { } exports.isInteropObservable = isInteropObservable; -},{"../symbol/observable":190}],207:[function(require,module,exports){ +},{"../symbol/observable":209}],225:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var iterator_1 = require("../symbol/iterator"); @@ -15133,7 +23677,7 @@ function isIterable(input) { } exports.isIterable = isIterable; -},{"../symbol/iterator":189}],208:[function(require,module,exports){ +},{"../symbol/iterator":208}],226:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var isArray_1 = require("./isArray"); @@ -15142,15 +23686,15 @@ function isNumeric(val) { } exports.isNumeric = isNumeric; -},{"./isArray":202}],209:[function(require,module,exports){ +},{"./isArray":220}],227:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function isObject(x) { - return x != null && typeof x === 'object'; + return x !== null && typeof x === 'object'; } exports.isObject = isObject; -},{}],210:[function(require,module,exports){ +},{}],228:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); @@ -15159,15 +23703,15 @@ function isObservable(obj) { } exports.isObservable = isObservable; -},{"../Observable":31}],211:[function(require,module,exports){ +},{"../Observable":48}],229:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function isPromise(value) { - return value && typeof value.subscribe !== 'function' && typeof value.then === 'function'; + return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function'; } exports.isPromise = isPromise; -},{}],212:[function(require,module,exports){ +},{}],230:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function isScheduler(value) { @@ -15175,13 +23719,13 @@ function isScheduler(value) { } exports.isScheduler = isScheduler; -},{}],213:[function(require,module,exports){ +},{}],231:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function noop() { } exports.noop = noop; -},{}],214:[function(require,module,exports){ +},{}],232:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function not(pred, thisArg) { @@ -15194,10 +23738,10 @@ function not(pred, thisArg) { } exports.not = not; -},{}],215:[function(require,module,exports){ +},{}],233:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var noop_1 = require("./noop"); +var identity_1 = require("./identity"); function pipe() { var fns = []; for (var _i = 0; _i < arguments.length; _i++) { @@ -15207,8 +23751,8 @@ function pipe() { } exports.pipe = pipe; function pipeFromArray(fns) { - if (!fns) { - return noop_1.noop; + if (fns.length === 0) { + return identity_1.identity; } if (fns.length === 1) { return fns[0]; @@ -15219,10 +23763,9 @@ function pipeFromArray(fns) { } exports.pipeFromArray = pipeFromArray; -},{"./noop":213}],216:[function(require,module,exports){ +},{"./identity":219}],234:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var Observable_1 = require("../Observable"); var subscribeToArray_1 = require("./subscribeToArray"); var subscribeToPromise_1 = require("./subscribeToPromise"); var subscribeToIterable_1 = require("./subscribeToIterable"); @@ -15233,19 +23776,7 @@ var isObject_1 = require("./isObject"); var iterator_1 = require("../symbol/iterator"); var observable_1 = require("../symbol/observable"); exports.subscribeTo = function (result) { - if (result instanceof Observable_1.Observable) { - return function (subscriber) { - if (result._isScalar) { - subscriber.next(result.value); - subscriber.complete(); - return undefined; - } - else { - return result.subscribe(subscriber); - } - }; - } - else if (result && typeof result[observable_1.observable] === 'function') { + if (!!result && typeof result[observable_1.observable] === 'function') { return subscribeToObservable_1.subscribeToObservable(result); } else if (isArrayLike_1.isArrayLike(result)) { @@ -15254,7 +23785,7 @@ exports.subscribeTo = function (result) { else if (isPromise_1.isPromise(result)) { return subscribeToPromise_1.subscribeToPromise(result); } - else if (result && typeof result[iterator_1.iterator] === 'function') { + else if (!!result && typeof result[iterator_1.iterator] === 'function') { return subscribeToIterable_1.subscribeToIterable(result); } else { @@ -15265,19 +23796,17 @@ exports.subscribeTo = function (result) { } }; -},{"../Observable":31,"../symbol/iterator":189,"../symbol/observable":190,"./isArrayLike":203,"./isObject":209,"./isPromise":211,"./subscribeToArray":217,"./subscribeToIterable":218,"./subscribeToObservable":219,"./subscribeToPromise":220}],217:[function(require,module,exports){ +},{"../symbol/iterator":208,"../symbol/observable":209,"./isArrayLike":221,"./isObject":227,"./isPromise":229,"./subscribeToArray":235,"./subscribeToIterable":236,"./subscribeToObservable":237,"./subscribeToPromise":238}],235:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.subscribeToArray = function (array) { return function (subscriber) { for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) { subscriber.next(array[i]); } - if (!subscriber.closed) { - subscriber.complete(); - } + subscriber.complete(); }; }; -},{}],218:[function(require,module,exports){ +},{}],236:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var iterator_1 = require("../symbol/iterator"); @@ -15304,7 +23833,7 @@ exports.subscribeToIterable = function (iterable) { return function (subscriber) return subscriber; }; }; -},{"../symbol/iterator":189}],219:[function(require,module,exports){ +},{"../symbol/iterator":208}],237:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var observable_1 = require("../symbol/observable"); @@ -15318,7 +23847,7 @@ exports.subscribeToObservable = function (obj) { return function (subscriber) { } }; }; -},{"../symbol/observable":190}],220:[function(require,module,exports){ +},{"../symbol/observable":209}],238:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var hostReportError_1 = require("./hostReportError"); @@ -15333,21 +23862,25 @@ exports.subscribeToPromise = function (promise) { return function (subscriber) { return subscriber; }; }; -},{"./hostReportError":200}],221:[function(require,module,exports){ +},{"./hostReportError":218}],239:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var InnerSubscriber_1 = require("../InnerSubscriber"); var subscribeTo_1 = require("./subscribeTo"); -function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, destination) { - if (destination === void 0) { destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex); } - if (destination.closed) { - return; +var Observable_1 = require("../Observable"); +function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber) { + if (innerSubscriber === void 0) { innerSubscriber = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex); } + if (innerSubscriber.closed) { + return undefined; + } + if (result instanceof Observable_1.Observable) { + return result.subscribe(innerSubscriber); } - return subscribeTo_1.subscribeTo(result)(destination); + return subscribeTo_1.subscribeTo(result)(innerSubscriber); } exports.subscribeToResult = subscribeToResult; -},{"../InnerSubscriber":29,"./subscribeTo":216}],222:[function(require,module,exports){ +},{"../InnerSubscriber":46,"../Observable":48,"./subscribeTo":234}],240:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Subscriber_1 = require("../Subscriber"); @@ -15369,27 +23902,7 @@ function toSubscriber(nextOrObserver, error, complete) { } exports.toSubscriber = toSubscriber; -},{"../Observer":32,"../Subscriber":38,"../symbol/rxSubscriber":191}],223:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -var errorObject_1 = require("./errorObject"); -var tryCatchTarget; -function tryCatcher() { - try { - return tryCatchTarget.apply(this, arguments); - } - catch (e) { - errorObject_1.errorObject.e = e; - return errorObject_1.errorObject; - } -} -function tryCatch(fn) { - tryCatchTarget = fn; - return tryCatcher; -} -exports.tryCatch = tryCatch; - -},{"./errorObject":199}],224:[function(require,module,exports){ +},{"../Observer":49,"../Subscriber":55,"../symbol/rxSubscriber":210}],241:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var audit_1 = require("../internal/operators/audit"); @@ -15601,958 +24114,1063 @@ exports.zip = zip_1.zip; var zipAll_1 = require("../internal/operators/zipAll"); exports.zipAll = zipAll_1.zipAll; -},{"../internal/operators/audit":72,"../internal/operators/auditTime":73,"../internal/operators/buffer":74,"../internal/operators/bufferCount":75,"../internal/operators/bufferTime":76,"../internal/operators/bufferToggle":77,"../internal/operators/bufferWhen":78,"../internal/operators/catchError":79,"../internal/operators/combineAll":80,"../internal/operators/combineLatest":81,"../internal/operators/concat":82,"../internal/operators/concatAll":83,"../internal/operators/concatMap":84,"../internal/operators/concatMapTo":85,"../internal/operators/count":86,"../internal/operators/debounce":87,"../internal/operators/debounceTime":88,"../internal/operators/defaultIfEmpty":89,"../internal/operators/delay":90,"../internal/operators/delayWhen":91,"../internal/operators/dematerialize":92,"../internal/operators/distinct":93,"../internal/operators/distinctUntilChanged":94,"../internal/operators/distinctUntilKeyChanged":95,"../internal/operators/elementAt":96,"../internal/operators/endWith":97,"../internal/operators/every":98,"../internal/operators/exhaust":99,"../internal/operators/exhaustMap":100,"../internal/operators/expand":101,"../internal/operators/filter":102,"../internal/operators/finalize":103,"../internal/operators/find":104,"../internal/operators/findIndex":105,"../internal/operators/first":106,"../internal/operators/groupBy":107,"../internal/operators/ignoreElements":108,"../internal/operators/isEmpty":109,"../internal/operators/last":110,"../internal/operators/map":111,"../internal/operators/mapTo":112,"../internal/operators/materialize":113,"../internal/operators/max":114,"../internal/operators/merge":115,"../internal/operators/mergeAll":116,"../internal/operators/mergeMap":117,"../internal/operators/mergeMapTo":118,"../internal/operators/mergeScan":119,"../internal/operators/min":120,"../internal/operators/multicast":121,"../internal/operators/observeOn":122,"../internal/operators/onErrorResumeNext":123,"../internal/operators/pairwise":124,"../internal/operators/partition":125,"../internal/operators/pluck":126,"../internal/operators/publish":127,"../internal/operators/publishBehavior":128,"../internal/operators/publishLast":129,"../internal/operators/publishReplay":130,"../internal/operators/race":131,"../internal/operators/reduce":132,"../internal/operators/refCount":133,"../internal/operators/repeat":134,"../internal/operators/repeatWhen":135,"../internal/operators/retry":136,"../internal/operators/retryWhen":137,"../internal/operators/sample":138,"../internal/operators/sampleTime":139,"../internal/operators/scan":140,"../internal/operators/sequenceEqual":141,"../internal/operators/share":142,"../internal/operators/shareReplay":143,"../internal/operators/single":144,"../internal/operators/skip":145,"../internal/operators/skipLast":146,"../internal/operators/skipUntil":147,"../internal/operators/skipWhile":148,"../internal/operators/startWith":149,"../internal/operators/subscribeOn":150,"../internal/operators/switchAll":151,"../internal/operators/switchMap":152,"../internal/operators/switchMapTo":153,"../internal/operators/take":154,"../internal/operators/takeLast":155,"../internal/operators/takeUntil":156,"../internal/operators/takeWhile":157,"../internal/operators/tap":158,"../internal/operators/throttle":159,"../internal/operators/throttleTime":160,"../internal/operators/throwIfEmpty":161,"../internal/operators/timeInterval":162,"../internal/operators/timeout":163,"../internal/operators/timeoutWith":164,"../internal/operators/timestamp":165,"../internal/operators/toArray":166,"../internal/operators/window":167,"../internal/operators/windowCount":168,"../internal/operators/windowTime":169,"../internal/operators/windowToggle":170,"../internal/operators/windowWhen":171,"../internal/operators/withLatestFrom":172,"../internal/operators/zip":173,"../internal/operators/zipAll":174}],225:[function(require,module,exports){ +},{"../internal/operators/audit":86,"../internal/operators/auditTime":87,"../internal/operators/buffer":88,"../internal/operators/bufferCount":89,"../internal/operators/bufferTime":90,"../internal/operators/bufferToggle":91,"../internal/operators/bufferWhen":92,"../internal/operators/catchError":93,"../internal/operators/combineAll":94,"../internal/operators/combineLatest":95,"../internal/operators/concat":96,"../internal/operators/concatAll":97,"../internal/operators/concatMap":98,"../internal/operators/concatMapTo":99,"../internal/operators/count":100,"../internal/operators/debounce":101,"../internal/operators/debounceTime":102,"../internal/operators/defaultIfEmpty":103,"../internal/operators/delay":104,"../internal/operators/delayWhen":105,"../internal/operators/dematerialize":106,"../internal/operators/distinct":107,"../internal/operators/distinctUntilChanged":108,"../internal/operators/distinctUntilKeyChanged":109,"../internal/operators/elementAt":110,"../internal/operators/endWith":111,"../internal/operators/every":112,"../internal/operators/exhaust":113,"../internal/operators/exhaustMap":114,"../internal/operators/expand":115,"../internal/operators/filter":116,"../internal/operators/finalize":117,"../internal/operators/find":118,"../internal/operators/findIndex":119,"../internal/operators/first":120,"../internal/operators/groupBy":121,"../internal/operators/ignoreElements":122,"../internal/operators/isEmpty":123,"../internal/operators/last":124,"../internal/operators/map":125,"../internal/operators/mapTo":126,"../internal/operators/materialize":127,"../internal/operators/max":128,"../internal/operators/merge":129,"../internal/operators/mergeAll":130,"../internal/operators/mergeMap":131,"../internal/operators/mergeMapTo":132,"../internal/operators/mergeScan":133,"../internal/operators/min":134,"../internal/operators/multicast":135,"../internal/operators/observeOn":136,"../internal/operators/onErrorResumeNext":137,"../internal/operators/pairwise":138,"../internal/operators/partition":139,"../internal/operators/pluck":140,"../internal/operators/publish":141,"../internal/operators/publishBehavior":142,"../internal/operators/publishLast":143,"../internal/operators/publishReplay":144,"../internal/operators/race":145,"../internal/operators/reduce":146,"../internal/operators/refCount":147,"../internal/operators/repeat":148,"../internal/operators/repeatWhen":149,"../internal/operators/retry":150,"../internal/operators/retryWhen":151,"../internal/operators/sample":152,"../internal/operators/sampleTime":153,"../internal/operators/scan":154,"../internal/operators/sequenceEqual":155,"../internal/operators/share":156,"../internal/operators/shareReplay":157,"../internal/operators/single":158,"../internal/operators/skip":159,"../internal/operators/skipLast":160,"../internal/operators/skipUntil":161,"../internal/operators/skipWhile":162,"../internal/operators/startWith":163,"../internal/operators/subscribeOn":164,"../internal/operators/switchAll":165,"../internal/operators/switchMap":166,"../internal/operators/switchMapTo":167,"../internal/operators/take":168,"../internal/operators/takeLast":169,"../internal/operators/takeUntil":170,"../internal/operators/takeWhile":171,"../internal/operators/tap":172,"../internal/operators/throttle":173,"../internal/operators/throttleTime":174,"../internal/operators/throwIfEmpty":175,"../internal/operators/timeInterval":176,"../internal/operators/timeout":177,"../internal/operators/timeoutWith":178,"../internal/operators/timestamp":179,"../internal/operators/toArray":180,"../internal/operators/window":181,"../internal/operators/windowCount":182,"../internal/operators/windowTime":183,"../internal/operators/windowToggle":184,"../internal/operators/windowWhen":185,"../internal/operators/withLatestFrom":186,"../internal/operators/zip":187,"../internal/operators/zipAll":188}],242:[function(require,module,exports){ // threejs.org/license -(function(l,ya){"object"===typeof exports&&"undefined"!==typeof module?ya(exports):"function"===typeof define&&define.amd?define(["exports"],ya):ya(l.THREE={})})(this,function(l){function ya(){}function z(a,b){this.x=a||0;this.y=b||0}function I(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];0b&&(b=a[c]);return b}function C(){Object.defineProperty(this,"id",{value:If+=2});this.uuid=H.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}function Ib(a,b,c,d,e,f){R.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e, -depthSegments:f};this.fromBufferGeometry(new kb(a,b,c,d,e,f));this.mergeVertices()}function kb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,l,N,O,Jf){var r=f/N,v=g/O,P=f/2,y=g/2,w=l/2;g=N+1;var E=O+1,x=f=0,B,z,A=new p;for(z=0;zm;m++){if(n=d[m])if(h=n[0],k=n[1]){q&&e.addAttribute("morphTarget"+m,q[h]);f&&e.addAttribute("morphNormal"+ -m,f[h]);c[m]=k;continue}c[m]=0}g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function Vf(a,b){var c={};return{update:function(d){var e=b.render.frame,f=d.geometry,g=a.get(d,f);c[g.id]!==e&&(f.isGeometry&&g.updateFromObject(d),a.update(g),c[g.id]=e);return g},dispose:function(){c={}}}}function Ua(a,b,c,d,e,f,g,h,k,m){a=void 0!==a?a:[];T.call(this,a,void 0!==b?b:301,c,d,e,f,g,h,k,m);this.flipY=!1}function Jb(a,b,c){var d=a[0];if(0>=d||0/gm, -function(a,c){a=S[c];if(void 0===a)throw Error("Can not resolve #include <"+c+">");return Xd(a)})}function Xe(a){return a.replace(/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(a,c,d,e){a="";for(c=parseInt(c);cb||a.height>b){if("data"in a){console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+a.width+"x"+a.height+")."); -return}b/=Math.max(a.width,a.height);var c=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");c.width=Math.floor(a.width*b);c.height=Math.floor(a.height*b);c.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,c.width,c.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+c.width+"x"+c.height);return c}return a}function k(a){return H.isPowerOfTwo(a.width)&&H.isPowerOfTwo(a.height)}function m(a,b){return a.generateMipmaps&&b&&1003!== -a.minFilter&&1006!==a.minFilter}function q(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function n(b,c){if(!e.isWebGL2)return b;if(b===a.RGB){if(c===a.FLOAT)return a.RGB32F;if(c===a.HALF_FLOAT)return a.RGB16F;if(c===a.UNSIGNED_BYTE)return a.RGB8}if(b===a.RGBA){if(c===a.FLOAT)return a.RGBA32F;if(c===a.HALF_FLOAT)return a.RGBA16F;if(c===a.UNSIGNED_BYTE)return a.RGBA8}return b}function t(b){return 1003===b||1004===b||1005===b?a.NEAREST:a.LINEAR}function u(b){b= -b.target;b.removeEventListener("dispose",u);a:{var c=d.get(b);if(b.image&&c.__image__webglTextureCube)a.deleteTexture(c.__image__webglTextureCube);else{if(void 0===c.__webglInit)break a;a.deleteTexture(c.__webglTexture)}d.remove(b)}b.isVideoTexture&&delete B[b.id];g.memory.textures--}function r(b){b=b.target;b.removeEventListener("dispose",r);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLRenderTargetCube)for(e= -0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function l(b,t){var r=d.get(b);if(b.isVideoTexture){var l=b.id,v=g.render.frame;B[l]!==v&&(B[l]=v,b.update())}if(0w;w++)v[w]=t||l?l?b.image[w].image:b.image[w]:h(b.image[w],e.maxCubemapSize);var y=v[0],E=k(y),P=f.convert(b.format),x=f.convert(b.type),N=n(P,x);p(a.TEXTURE_CUBE_MAP,b,E);for(w=0;6>w;w++)if(t)for(var B,z=v[w].mipmaps,A=0,D=z.length;At;t++)e.__webglFramebuffer[t]=a.createFramebuffer()}else e.__webglFramebuffer= -a.createFramebuffer();if(h){c.bindTexture(a.TEXTURE_CUBE_MAP,f.__webglTexture);p(a.TEXTURE_CUBE_MAP,b.texture,n);for(t=0;6>t;t++)x(e.__webglFramebuffer[t],b,a.COLOR_ATTACHMENT0,a.TEXTURE_CUBE_MAP_POSITIVE_X+t);m(b.texture,n)&&q(a.TEXTURE_CUBE_MAP,b.texture,b.width,b.height);c.bindTexture(a.TEXTURE_CUBE_MAP,null)}else c.bindTexture(a.TEXTURE_2D,f.__webglTexture),p(a.TEXTURE_2D,b.texture,n),x(e.__webglFramebuffer,b,a.COLOR_ATTACHMENT0,a.TEXTURE_2D),m(b.texture,n)&&q(a.TEXTURE_2D,b.texture,b.width,b.height), -c.bindTexture(a.TEXTURE_2D,null);if(b.depthBuffer){e=d.get(b);f=!0===b.isWebGLRenderTargetCube;if(b.depthTexture){if(f)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&& -b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);l(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_ATTACHMENT,a.TEXTURE_2D,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(a.FRAMEBUFFER,a.DEPTH_STENCIL_ATTACHMENT,a.TEXTURE_2D,e,0);else throw Error("Unknown depthTexture format"); -}else if(f)for(e.__webglDepthbuffer=[],f=0;6>f;f++)a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer[f]),e.__webglDepthbuffer[f]=a.createRenderbuffer(),w(e.__webglDepthbuffer[f],b);else a.bindFramebuffer(a.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),w(e.__webglDepthbuffer,b);a.bindFramebuffer(a.FRAMEBUFFER,null)}};this.updateRenderTargetMipmap=function(b){var e=b.texture,f=k(b);if(m(e,f)){f=b.isWebGLRenderTargetCube?a.TEXTURE_CUBE_MAP:a.TEXTURE_2D;var g=d.get(e).__webglTexture; -c.bindTexture(f,g);q(f,e,b.width,b.height);c.bindTexture(f,null)}}}function $e(a,b,c){return{convert:function(d){if(1E3===d)return a.REPEAT;if(1001===d)return a.CLAMP_TO_EDGE;if(1002===d)return a.MIRRORED_REPEAT;if(1003===d)return a.NEAREST;if(1004===d)return a.NEAREST_MIPMAP_NEAREST;if(1005===d)return a.NEAREST_MIPMAP_LINEAR;if(1006===d)return a.LINEAR;if(1007===d)return a.LINEAR_MIPMAP_NEAREST;if(1008===d)return a.LINEAR_MIPMAP_LINEAR;if(1009===d)return a.UNSIGNED_BYTE;if(1017===d)return a.UNSIGNED_SHORT_4_4_4_4; -if(1018===d)return a.UNSIGNED_SHORT_5_5_5_1;if(1019===d)return a.UNSIGNED_SHORT_5_6_5;if(1010===d)return a.BYTE;if(1011===d)return a.SHORT;if(1012===d)return a.UNSIGNED_SHORT;if(1013===d)return a.INT;if(1014===d)return a.UNSIGNED_INT;if(1015===d)return a.FLOAT;if(1016===d){if(c.isWebGL2)return a.HALF_FLOAT;var e=b.get("OES_texture_half_float");if(null!==e)return e.HALF_FLOAT_OES}if(1021===d)return a.ALPHA;if(1022===d)return a.RGB;if(1023===d)return a.RGBA;if(1024===d)return a.LUMINANCE;if(1025=== -d)return a.LUMINANCE_ALPHA;if(1026===d)return a.DEPTH_COMPONENT;if(1027===d)return a.DEPTH_STENCIL;if(100===d)return a.FUNC_ADD;if(101===d)return a.FUNC_SUBTRACT;if(102===d)return a.FUNC_REVERSE_SUBTRACT;if(200===d)return a.ZERO;if(201===d)return a.ONE;if(202===d)return a.SRC_COLOR;if(203===d)return a.ONE_MINUS_SRC_COLOR;if(204===d)return a.SRC_ALPHA;if(205===d)return a.ONE_MINUS_SRC_ALPHA;if(206===d)return a.DST_ALPHA;if(207===d)return a.ONE_MINUS_DST_ALPHA;if(208===d)return a.DST_COLOR;if(209=== -d)return a.ONE_MINUS_DST_COLOR;if(210===d)return a.SRC_ALPHA_SATURATE;if(33776===d||33777===d||33778===d||33779===d)if(e=b.get("WEBGL_compressed_texture_s3tc"),null!==e){if(33776===d)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===d)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===d)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===d)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===d||35841===d||35842===d||35843===d)if(e=b.get("WEBGL_compressed_texture_pvrtc"),null!==e){if(35840===d)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; -if(35841===d)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===d)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===d)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===d&&(e=b.get("WEBGL_compressed_texture_etc1"),null!==e))return e.COMPRESSED_RGB_ETC1_WEBGL;if(37808===d||37809===d||37810===d||37811===d||37812===d||37813===d||37814===d||37815===d||37816===d||37817===d||37818===d||37819===d||37820===d||37821===d)if(e=b.get("WEBGL_compressed_texture_astc"),null!==e)return d;if(103===d||104=== -d){if(c.isWebGL2){if(103===d)return a.MIN;if(104===d)return a.MAX}e=b.get("EXT_blend_minmax");if(null!==e){if(103===d)return e.MIN_EXT;if(104===d)return e.MAX_EXT}}if(1020===d){if(c.isWebGL2)return a.UNSIGNED_INT_24_8;e=b.get("WEBGL_depth_texture");if(null!==e)return e.UNSIGNED_INT_24_8_WEBGL}return 0}}}function Kb(){D.call(this);this.type="Group"}function Z(a,b,c,d){Na.call(this);this.type="PerspectiveCamera";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3; -this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function yc(a){Z.call(this);this.cameras=a||[]}function af(a){function b(){return null!==e&&!0===e.isPresenting}function c(){if(b()){var c=e.getEyeParameters("left"),f=c.renderWidth;c=c.renderHeight;x=a.getPixelRatio();y=a.getSize();a.setDrawingBufferSize(2*f,c,1);B.start()}else d.enabled&&(a.setDrawingBufferSize(y.width,y.height,x),B.stop())}var d=this,e=null,f=null,g=null,h= -[],k=new I,m=new I;"undefined"!==typeof window&&"VRFrameData"in window&&(f=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",c,!1));var q=new I,n=new fa,t=new p,u=new Z;u.bounds=new V(0,0,.5,1);u.layers.enable(1);var r=new Z;r.bounds=new V(.5,0,.5,1);r.layers.enable(2);var l=new yc([u,r]);l.layers.enable(1);l.layers.enable(2);var y,x,w=[];this.enabled=!1;this.userHeight=1.6;this.getController=function(a){var b=h[a];void 0===b&&(b=new Kb,b.matrixAutoUpdate=!1,b.visible=!1,h[a]= -b);return b};this.getDevice=function(){return e};this.setDevice=function(a){void 0!==a&&(e=a);B.setContext(a)};this.setPoseTarget=function(a){void 0!==a&&(g=a)};this.getCamera=function(a){if(null===e)return a.position.set(0,d.userHeight,0),a;e.depthNear=a.near;e.depthFar=a.far;e.getFrameData(f);var b=e.stageParameters;b?k.fromArray(b.sittingToStandingTransform):k.makeTranslation(0,d.userHeight,0);b=f.pose;var c=null!==g?g:a;c.matrix.copy(k);c.matrix.decompose(c.position,c.quaternion,c.scale);null!== -b.orientation&&(n.fromArray(b.orientation),c.quaternion.multiply(n));null!==b.position&&(n.setFromRotationMatrix(k),t.fromArray(b.position),t.applyQuaternion(n),c.position.add(t));c.updateMatrixWorld();if(!1===e.isPresenting)return a;u.near=a.near;r.near=a.near;u.far=a.far;r.far=a.far;l.matrixWorld.copy(a.matrixWorld);l.matrixWorldInverse.copy(a.matrixWorldInverse);u.matrixWorldInverse.fromArray(f.leftViewMatrix);r.matrixWorldInverse.fromArray(f.rightViewMatrix);m.getInverse(k);u.matrixWorldInverse.multiply(m); -r.matrixWorldInverse.multiply(m);a=c.parent;null!==a&&(q.getInverse(a.matrixWorld),u.matrixWorldInverse.multiply(q),r.matrixWorldInverse.multiply(q));u.matrixWorld.getInverse(u.matrixWorldInverse);r.matrixWorld.getInverse(r.matrixWorldInverse);u.projectionMatrix.fromArray(f.leftProjectionMatrix);r.projectionMatrix.fromArray(f.rightProjectionMatrix);l.projectionMatrix.copy(u.projectionMatrix);a=e.getLayers();a.length&&(a=a[0],null!==a.leftBounds&&4===a.leftBounds.length&&u.bounds.fromArray(a.leftBounds), -null!==a.rightBounds&&4===a.rightBounds.length&&r.bounds.fromArray(a.rightBounds));a:for(a=0;af.normalMatrix.determinant();ba.setMaterial(e,h);var k=t(a,c,e,f),m=!1;if(b!==d.id||S!==k.id||nd!==(!0===e.wireframe))b=d.id,S=k.id,nd=!0===e.wireframe,m=!0;f.morphTargetInfluences&&(va.update(f,d,e,k),m=!0);h=d.index;var q=d.attributes.position;c=1;!0===e.wireframe&& -(h=ra.getWireframeAttribute(d),c=2);a=xa;if(null!==h){var n=pa.get(h);a=ya;a.setIndex(n)}if(m){if(d&&d.isInstancedBufferGeometry&!ua.isWebGL2&&null===ha.get("ANGLE_instanced_arrays"))console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{ba.initAttributes();m=d.attributes;k=k.getAttributes();var u=e.defaultAttributeValues;for(N in k){var l=k[N];if(0<=l){var r=m[N];if(void 0!==r){var v=r.normalized, -p=r.itemSize,w=pa.get(r);if(void 0!==w){var y=w.buffer,E=w.type;w=w.bytesPerElement;if(r.isInterleavedBufferAttribute){var x=r.data,B=x.stride;r=r.offset;x&&x.isInstancedInterleavedBuffer?(ba.enableAttributeAndDivisor(l,x.meshPerAttribute),void 0===d.maxInstancedCount&&(d.maxInstancedCount=x.meshPerAttribute*x.count)):ba.enableAttribute(l);F.bindBuffer(F.ARRAY_BUFFER,y);F.vertexAttribPointer(l,p,E,v,B*w,r*w)}else r.isInstancedBufferAttribute?(ba.enableAttributeAndDivisor(l,r.meshPerAttribute),void 0=== -d.maxInstancedCount&&(d.maxInstancedCount=r.meshPerAttribute*r.count)):ba.enableAttribute(l),F.bindBuffer(F.ARRAY_BUFFER,y),F.vertexAttribPointer(l,p,E,v,0,0)}}else if(void 0!==u&&(v=u[N],void 0!==v))switch(v.length){case 2:F.vertexAttrib2fv(l,v);break;case 3:F.vertexAttrib3fv(l,v);break;case 4:F.vertexAttrib4fv(l,v);break;default:F.vertexAttrib1fv(l,v)}}}ba.disableUnusedAttributes()}null!==h&&F.bindBuffer(F.ELEMENT_ARRAY_BUFFER,n.buffer)}n=Infinity;null!==h?n=h.count:void 0!==q&&(n=q.count);h=d.drawRange.start* -c;q=null!==g?g.start*c:0;var N=Math.max(h,q);g=Math.max(0,Math.min(n,h+d.drawRange.count*c,q+(null!==g?g.count*c:Infinity))-1-N+1);if(0!==g){if(f.isMesh)if(!0===e.wireframe)ba.setLineWidth(e.wireframeLinewidth*(null===R?U:1)),a.setMode(F.LINES);else switch(f.drawMode){case 0:a.setMode(F.TRIANGLES);break;case 1:a.setMode(F.TRIANGLE_STRIP);break;case 2:a.setMode(F.TRIANGLE_FAN)}else f.isLine?(e=e.linewidth,void 0===e&&(e=1),ba.setLineWidth(e*(null===R?U:1)),f.isLineSegments?a.setMode(F.LINES):f.isLineLoop? -a.setMode(F.LINE_LOOP):a.setMode(F.LINE_STRIP)):f.isPoints?a.setMode(F.POINTS):f.isSprite&&a.setMode(F.TRIANGLES);d&&d.isInstancedBufferGeometry?0=ua.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+a+" texture units while this GPU supports only "+ua.maxTextures);X+=1;return a}; -this.setTexture2D=function(){var a=!1;return function(b,c){b&&b.isWebGLRenderTarget&&(a||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);ia.setTexture2D(b,c)}}();this.setTexture=function(){var a=!1;return function(b,c){a||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),a=!0);ia.setTexture2D(b,c)}}();this.setTextureCube=function(){var a=!1;return function(b,c){b&& -b.isWebGLRenderTargetCube&&(a||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),a=!0),b=b.texture);b&&b.isCubeTexture||Array.isArray(b.image)&&6===b.image.length?ia.setTextureCube(b,c):ia.setTextureCubeDynamic(b,c)}}();this.setFramebuffer=function(a){L=a};this.getRenderTarget=function(){return R};this.setRenderTarget=function(a){(R=a)&&void 0===Ba.get(a).__webglFramebuffer&&ia.setupRenderTarget(a);var b=L,c=!1;a?(b= -Ba.get(a).__webglFramebuffer,a.isWebGLRenderTargetCube&&(b=b[a.activeCubeFace],c=!0),T.copy(a.viewport),wc.copy(a.scissor),ea=a.scissorTest):(T.copy(od).multiplyScalar(U),wc.copy(fa).multiplyScalar(U),ea=qa);Q!==b&&(F.bindFramebuffer(F.FRAMEBUFFER,b),Q=b);ba.viewport(T);ba.scissor(wc);ba.setScissorTest(ea);c&&(c=Ba.get(a.texture),F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,c.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels= -function(a,b,c,d,e,f){if(a&&a.isWebGLRenderTarget){var g=Ba.get(a).__webglFramebuffer;if(g){var h=!1;g!==Q&&(F.bindFramebuffer(F.FRAMEBUFFER,g),h=!0);try{var k=a.texture,m=k.format,q=k.type;1023!==m&&da.convert(m)!==F.getParameter(F.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===q||da.convert(q)===F.getParameter(F.IMPLEMENTATION_COLOR_READ_TYPE)||1015===q&&(ua.isWebGL2||ha.get("OES_texture_float")|| -ha.get("WEBGL_color_buffer_float"))||1016===q&&(ua.isWebGL2?ha.get("EXT_color_buffer_float"):ha.get("EXT_color_buffer_half_float"))?F.checkFramebufferStatus(F.FRAMEBUFFER)===F.FRAMEBUFFER_COMPLETE?0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&F.readPixels(b,c,d,e,da.convert(m),da.convert(q),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&& -F.bindFramebuffer(F.FRAMEBUFFER,Q)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")};this.copyFramebufferToTexture=function(a,b,c){var d=b.image.width,e=b.image.height,f=da.convert(b.format);this.setTexture2D(b,0);F.copyTexImage2D(F.TEXTURE_2D,c||0,f,a.x,a.y,d,e,0)};this.copyTextureToTexture=function(a,b,c,d){var e=b.image.width,f=b.image.height,g=da.convert(c.format),h=da.convert(c.type);this.setTexture2D(c,0);b.isDataTexture?F.texSubImage2D(F.TEXTURE_2D, -d||0,a.x,a.y,e,f,g,h,b.image.data):F.texSubImage2D(F.TEXTURE_2D,d||0,a.x,a.y,g,h,b.image)}}function Lb(a,b){this.name="";this.color=new G(a);this.density=void 0!==b?b:2.5E-4}function Mb(a,b,c){this.name="";this.color=new G(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function qd(){D.call(this);this.type="Scene";this.overrideMaterial=this.fog=this.background=null;this.autoUpdate=!0}function ob(a,b){this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.dynamic=!1;this.updateRange= -{offset:0,count:-1};this.version=0}function zc(a,b,c,d){this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function cb(a){J.call(this);this.type="SpriteMaterial";this.color=new G(16777215);this.map=null;this.rotation=0;this.lights=!1;this.transparent=!0;this.setValues(a)}function Ac(a){D.call(this);this.type="Sprite";if(void 0===Nb){Nb=new C;var b=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]);b=new ob(b,5);Nb.setIndex([0,1,2,0,2,3]);Nb.addAttribute("position", -new zc(b,3,0,!1));Nb.addAttribute("uv",new zc(b,2,3,!1))}this.geometry=Nb;this.material=void 0!==a?a:new cb;this.center=new z(.5,.5)}function Bc(){D.call(this);this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Cc(a,b){a=a||[];this.bones=a.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."), -this.boneInverses=[],a=0,b=this.bones.length;ac;c++){var n=q[h[c]];var t=q[h[(c+1)%3]];f[0]=Math.min(n,t);f[1]=Math.max(n,t);n=f[0]+","+f[1];void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]})}}for(n in g)m=g[n],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new p,null!==a.index){k=a.attributes.position;q=a.index;var u=a.groups;0===u.length&&(u=[{start:0, -count:q.count,materialIndex:0}]);a=0;for(e=u.length;ac;c++)n=q.getX(m+c),t=q.getX(m+(c+1)%3),f[0]=Math.min(n,t),f[1]=Math.max(n,t),n=f[0]+","+f[1],void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]});for(n in g)m=g[n],h.fromBufferAttribute(k,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(k,m.index2),b.push(h.x,h.y,h.z)}else for(k=a.attributes.position,m=0,d=k.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(k,g),b.push(h.x, -h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(k,g),b.push(h.x,h.y,h.z);this.addAttribute("position",new A(b,3))}function Fc(a,b,c){R.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Rb(a,b,c));this.mergeVertices()}function Rb(a,b,c){C.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new p,k=new p,m=new p,q=new p,n=new p,t,u;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); -var r=b+1;for(t=0;t<=c;t++){var l=t/c;for(u=0;u<=b;u++){var y=u/b;a(y,l,k);e.push(k.x,k.y,k.z);0<=y-1E-5?(a(y-1E-5,l,m),q.subVectors(k,m)):(a(y+1E-5,l,m),q.subVectors(m,k));0<=l-1E-5?(a(y,l-1E-5,m),n.subVectors(k,m)):(a(y,l+1E-5,m),n.subVectors(m,k));h.crossVectors(q,n).normalize();f.push(h.x,h.y,h.z);g.push(y,l)}}for(t=0;td&&1===a.x&&(k[b]=a.x-1);0===c.x&&0===c.z&&(k[b]=d/2/Math.PI+.5)}C.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a, -indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],k=[];(function(a){for(var c=new p,d=new p,g=new p,h=0;he&&(.2>b&&(k[a+0]+=1),.2>c&&(k[a+2]+=1),.2>d&&(k[a+4]+=1))})();this.addAttribute("position",new A(h,3));this.addAttribute("normal",new A(h.slice(),3));this.addAttribute("uv",new A(k,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Hc(a, -b){R.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sb(a,b));this.mergeVertices()}function Sb(a,b){na.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ic(a,b){R.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new pb(a,b));this.mergeVertices()}function pb(a,b){na.call(this,[1,0,0, --1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Jc(a,b){R.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tb(a,b));this.mergeVertices()}function Tb(a,b){var c=(1+Math.sqrt(5))/2;na.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5, -11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Kc(a,b){R.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Ub(a,b));this.mergeVertices()}function Ub(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;na.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c, -0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Lc(a,b,c,d,e,f){R.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, -closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new Vb(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function Vb(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];e=g.binormals[e];for(t=0;t<=d;t++){var m=t/d*Math.PI*2,n=Math.sin(m);m=-Math.cos(m);k.x=m*f.x+n*e.x;k.y=m*f.y+n*e.y;k.z=m*f.z+n*e.z;k.normalize();r.push(k.x,k.y,k.z);h.x=q.x+c*k.x;h.y=q.y+c*k.y;h.z= -q.z+c*k.z;l.push(h.x,h.y,h.z)}}C.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new p,k=new p,m=new z,q=new p,n,t,l=[],r=[],v=[],y=[];for(n=0;n=b;e-=d)f=cf(e,a[e],a[e+1],f);f&&qb(f,f.next)&&(Oc(f),f=f.next);return f}function Pc(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!qb(a,a.next)&&0!==ma(a.prev,a,a.next))a=a.next;else{Oc(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b} -function Qc(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,k=h;do null===k.z&&(k.z=ae(k.x,k.y,d,e,f)),k.prevZ=k.prev,k=k.nextZ=k.next;while(k!==h);k.prevZ.nextZ=null;k.prevZ=null;h=k;var m,q,n,t,l=1;do{k=h;var r=h=null;for(q=0;k;){q++;var v=k;for(m=n=0;mn.x?q.x>l.x?q.x:l.x:n.x>l.x?n.x:l.x,B=q.y>n.y?q.y>l.y?q.y:l.y:n.y>l.y?n.y:l.y;m=ae(q.x=m;){if(p!==r.prev&&p!==r.next&&ud(q.x,q.y,n.x,n.y,l.x,l.y,p.x,p.y)&&0<=ma(p.prev,p,p.next)){r=!1;break a}p= -p.prevZ}r=!0}}else a:if(r=a,q=r.prev,n=r,l=r.next,0<=ma(q,n,l))r=!1;else{for(m=r.next.next;m!==r.prev;){if(ud(q.x,q.y,n.x,n.y,l.x,l.y,m.x,m.y)&&0<=ma(m.prev,m,m.next)){r=!1;break a}m=m.next}r=!0}if(r)b.push(k.i/c),b.push(a.i/c),b.push(v.i/c),Oc(a),h=a=v.next;else if(a=v,a===h){if(!g)Qc(Pc(a),b,c,d,e,f,1);else if(1===g){g=b;h=c;k=a;do v=k.prev,r=k.next.next,!qb(v,r)&&df(v,k,k.next,r)&&Rc(v,r)&&Rc(r,v)&&(g.push(v.i/h),g.push(k.i/h),g.push(r.i/h),Oc(k),Oc(k.next),k=a=r),k=k.next;while(k!==a);a=k;Qc(a, -b,c,d,e,f,2)}else if(2===g)a:{g=a;do{for(h=g.next.next;h!==g.prev;){if(k=g.i!==h.i){k=g;v=h;if(r=k.next.i!==v.i&&k.prev.i!==v.i){b:{r=k;do{if(r.i!==k.i&&r.next.i!==k.i&&r.i!==v.i&&r.next.i!==v.i&&df(r,r.next,k,v)){r=!0;break b}r=r.next}while(r!==k);r=!1}r=!r}if(r=r&&Rc(k,v)&&Rc(v,k)){r=k;q=!1;n=(k.x+v.x)/2;v=(k.y+v.y)/2;do r.y>v!==r.next.y>v&&r.next.y!==r.y&&n<(r.next.x-r.x)*(v-r.y)/(r.next.y-r.y)+r.x&&(q=!q),r=r.next;while(r!==k);r=q}k=r}if(k){a=ef(g,h);g=Pc(g,g.next);a=Pc(a,a.next);Qc(g,b,c,d,e, -f);Qc(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function Ng(a,b){return a.x-b.x}function Og(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&ud(eh.x)&&Rc(c,a)&&(h=c,m=q)}c=c.next}return h}function ae(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Pg(a){var b=a,c=a;do b.xma(a.prev,a,a.next)?0<=ma(a,b,a.next)&&0<=ma(a,a.prev,b):0>ma(a,b,a.prev)||0>ma(a,a.next,b)}function ef(a,b){var c=new be(a.i,a.x,a.y),d=new be(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev= -c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function cf(a,b,c,d){a=new be(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Oc(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function be(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function ff(a){var b=a.length;2Number.EPSILON){var k=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/k;b=b.y+d/k; -g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new z(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new z(f/e,d/e)}function h(a,b){for(M=a.length;0<=--M;){var c=M;var f=M-1;0>f&&(f=a.length-1);var g,h=w+2*O;for(g=0;gq;q++){var n=m[f[q]];var l=m[f[(q+1)%3]];d[0]=Math.min(n,l);d[1]=Math.max(n,l);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2], -c.push(f.x,f.y,f.z);this.addAttribute("position",new A(c,3))}function vb(a,b,c,d,e,f,g,h){R.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new Wa(a,b,c,d,e,f,g,h));this.mergeVertices()}function Wa(a,b,c,d,e,f,g,h){function k(c){var e,f=new z,k=new p,t=0,v=!0===c?a:b,w=!0===c?1:-1;var A=r;for(e=1;e<=d;e++)n.push(0,y*w,0),l.push(0,w,0),u.push(.5,.5),r++;var C= -r;for(e=0;e<=d;e++){var D=e/d*h+g,H=Math.cos(D);D=Math.sin(D);k.x=v*D;k.y=y*w;k.z=v*H;n.push(k.x,k.y,k.z);l.push(0,w,0);f.x=.5*H+.5;f.y=.5*D*w+.5;u.push(f.x,f.y);r++}for(e=0;ethis.duration&&this.resetDuration()}function Rg(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return ec;case "vector":case "vector2":case "vector3":case "vector4":return fc; -case "color":return Hd;case "quaternion":return cd;case "bool":case "boolean":return Gd;case "string":return Jd}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Sg(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Rg(a.type);if(void 0===a.times){var c=[],d=[];ia.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)}function Kd(a){this.manager=void 0!== -a?a:ka;this.textures={}}function ge(a){this.manager=void 0!==a?a:ka}function gc(){}function he(a){"boolean"===typeof a&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),a=void 0);this.manager=void 0!==a?a:ka;this.withCredentials=!1}function mf(a){this.manager=void 0!==a?a:ka;this.texturePath=""}function ie(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."); -this.manager=void 0!==a?a:ka;this.options=void 0}function je(){this.type="ShapePath";this.color=new G;this.subPaths=[];this.currentPath=null}function ke(a){this.type="Font";this.data=a}function nf(a){this.manager=void 0!==a?a:ka}function le(a){this.manager=void 0!==a?a:ka}function of(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new Z;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new Z;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate= -!1}function dd(a,b,c){D.call(this);this.type="CubeCamera";var d=new Z(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new p(1,0,0));this.add(d);var e=new Z(90,1,a,b);e.up.set(0,-1,0);e.lookAt(new p(-1,0,0));this.add(e);var f=new Z(90,1,a,b);f.up.set(0,0,1);f.lookAt(new p(0,1,0));this.add(f);var g=new Z(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new p(0,-1,0));this.add(g);var h=new Z(90,1,a,b);h.up.set(0,-1,0);h.lookAt(new p(0,0,1));this.add(h);var k=new Z(90,1,a,b);k.up.set(0,-1,0);k.lookAt(new p(0,0,-1));this.add(k); -this.renderTarget=new Gb(c,c,{format:1022,magFilter:1006,minFilter:1006});this.renderTarget.texture.name="CubeCamera";this.update=function(a,b){null===this.parent&&this.updateMatrixWorld();var c=this.renderTarget,m=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;c.activeCubeFace=0;a.render(b,d,c);c.activeCubeFace=1;a.render(b,e,c);c.activeCubeFace=2;a.render(b,f,c);c.activeCubeFace=3;a.render(b,g,c);c.activeCubeFace=4;a.render(b,h,c);c.texture.generateMipmaps=m;c.activeCubeFace=5;a.render(b, -k,c);a.setRenderTarget(null)};this.clear=function(a,b,c,d){for(var e=this.renderTarget,f=0;6>f;f++)e.activeCubeFace=f,a.setRenderTarget(e),a.clear(b,c,d);a.setRenderTarget(null)}}function me(){D.call(this);this.type="AudioListener";this.context=ne.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null}function hc(a){D.call(this);this.type="Audio";this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay= -!1;this.buffer=null;this.loop=!1;this.offset=this.startTime=0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this.filters=[]}function oe(a){hc.call(this,a);this.panner=this.context.createPanner();this.panner.connect(this.gain)}function pe(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function qe(a,b,c){this.binding=a;this.valueSize= -c;a=Float64Array;switch(b){case "quaternion":b=this._slerp;break;case "string":case "bool":a=Array;b=this._select;break;default:b=this._lerp}this.buffer=new a(4*c);this._mixBufferRegion=b;this.referenceCount=this.useCount=this.cumulativeWeight=0}function pf(a,b,c){c=c||pa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function pa(a,b,c){this.path=b;this.parsedPath=c||pa.parseTrackName(b);this.node=pa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function qf(){this.uuid= -H.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function rf(a,b,c){this._mixer=a;this._clip=b;this._localRoot= -c||null;a=b.tracks;b=a.length;c=Array(b);for(var d={endingStart:2400,endingEnd:2400},e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity; -this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function re(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function Ld(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function se(){C.call(this);this.type="InstancedBufferGeometry";this.maxInstancedCount=void 0}function te(a,b,c){ob.call(this,a,b);this.meshPerAttribute=c||1}function ue(a,b,c){Q.call(this, -a,b);this.meshPerAttribute=c||1}function sf(a,b,c,d){this.ray=new mb(a,b);this.near=c||0;this.far=d||Infinity;this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function tf(a,b){return a.distance-b.distance}function ve(a,b,c,d){if(!1!==a.visible&&(a.raycast(b,c),!0===d)){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.addAttribute("position",new A(b,3));b=new Y({fog:!1});this.cone=new W(a,b);this.add(this.cone);this.update()}function xf(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;ca?-1:0b;b++)a[b]=(16>b?"0":"")+b.toString(16);return function(){var b=4294967295*Math.random()|0,d=4294967295*Math.random()|0,e=4294967295*Math.random()|0,f=4294967295*Math.random()|0;return(a[b&255]+a[b>>8&255]+a[b>>16&255]+a[b>>24&255]+"-"+a[d&255]+a[d>>8&255]+"-"+a[d>> -16&15|64]+a[d>>24&255]+"-"+a[e&63|128]+a[e>>8&255]+"-"+a[e>>16&255]+a[e>>24&255]+a[f&255]+a[f>>8&255]+a[f>>16&255]+a[f>>24&255]).toUpperCase()}}(),clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1; -a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*H.DEG2RAD},radToDeg:function(a){return a*H.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/ -Math.LN2))}};Object.defineProperties(z.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(z.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+ -a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this}, -addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*= -a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a, -b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(){var a=new z,b=new z;return function(c,d){a.set(c,c);b.set(d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},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=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+ -Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var a=Math.atan2(this.y,this.x);0>a&&(a+=2*Math.PI);return a},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+= -(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b); -return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this}});Object.assign(I.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,k,m,q,n,l,u,r,p){var t=this.elements;t[0]=a;t[4]=b;t[8]=c;t[12]=d;t[1]=e;t[5]=f;t[9]=g;t[13]=h;t[2]=k;t[6]=m;t[10]=q;t[14]=n;t[3]=l;t[7]=u;t[11]=r;t[15]=p;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 I).fromArray(this.elements)}, +(function(k,ua){"object"===typeof exports&&"undefined"!==typeof module?ua(exports):"function"===typeof define&&define.amd?define(["exports"],ua):(k=k||self,ua(k.THREE={}))})(this,function(k){function ua(){}function v(a,b){this.x=a||0;this.y=b||0}function ya(){this.elements=[1,0,0,0,1,0,0,0,1];0h)return!1}return!0}function eb(a,b){this.center=void 0!==a?a:new p;this.radius=void 0!==b?b:-1}function Wb(a,b){this.origin=void 0!==a?a:new p;this.direction=void 0!==b?b:new p(0,0,-1)}function Wa(a,b){this.normal=void 0!==a?a:new p(1, +0,0);this.constant=void 0!==b?b:0}function pa(a,b,c){this.a=void 0!==a?a:new p;this.b=void 0!==b?b:new p;this.c=void 0!==c?c:new p}function D(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function Zf(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function $f(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function ag(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function Ac(a,b,c,d,e,f){this.a=a;this.b= +b;this.c=c;this.normal=d&&d.isVector3?d:new p;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new D;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function K(){Object.defineProperty(this,"id",{value:gj++});this.uuid=O.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha= +this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite=!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha= +!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Pa(a){K.call(this);this.type="MeshBasicMaterial";this.color=new D(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)} +function G(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange={offset:0,count:-1};this.version=0}function yd(a,b,c){G.call(this,new Int8Array(a),b,c)}function zd(a,b,c){G.call(this,new Uint8Array(a),b,c)}function Ad(a,b,c){G.call(this,new Uint8ClampedArray(a),b,c)}function Bd(a,b,c){G.call(this,new Int16Array(a), +b,c)}function Xb(a,b,c){G.call(this,new Uint16Array(a),b,c)}function Cd(a,b,c){G.call(this,new Int32Array(a),b,c)}function Yb(a,b,c){G.call(this,new Uint32Array(a),b,c)}function B(a,b,c){G.call(this,new Float32Array(a),b,c)}function Dd(a,b,c){G.call(this,new Float64Array(a),b,c)}function rh(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate= +this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function sh(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;cb&&(b=a[c]);return b}function F(){Object.defineProperty(this,"id",{value:hj+=2});this.uuid=O.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity}; +this.userData={}}function ea(a,b){y.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new F;this.material=void 0!==b?b:new Pa;this.updateMorphTargets()}function th(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,f,g,2!==b.side,h)))return null;Ee.copy(h);Ee.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(Ee);return bc.far?null:{distance:b,point:Ee.clone(),object:a}}function Fe(a,b,c,d,e,f,g,h,l,m,z,n){Db.fromBufferAttribute(e,m);Eb.fromBufferAttribute(e, +z);Fb.fromBufferAttribute(e,n);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Ge.set(0,0,0);He.set(0,0,0);Ie.set(0,0,0);for(var t=0,r=f.length;tg;g++)a.setRenderTarget(c,g),a.clear(b,d,e);a.setRenderTarget(f)}}}function Zb(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c);Ba.call(this,a,a,b)}function $b(a,b,c,d,e,f,g,h,l,m,z,n){W.call(this,null,f,g,h,l,m,d,e,z,n);this.image={data:a||null,width:b||1,height:c||1};this.magFilter= +void 0!==l?l:1003;this.minFilter=void 0!==m?m:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function Gc(a,b,c,d,e,f){this.planes=[void 0!==a?a:new Wa,void 0!==b?b:new Wa,void 0!==c?c:new Wa,void 0!==d?d:new Wa,void 0!==e?e:new Wa,void 0!==f?f:new Wa]}function uh(){function a(e,f){!1!==c&&(d(e,f),b.requestAnimationFrame(a))}var b=null,c=!1,d=null;return{start:function(){!0!==c&&null!==d&&(b.requestAnimationFrame(a),c=!0)},stop:function(){c=!1},setAnimationLoop:function(a){d= +a},setContext:function(a){b=a}}}function jj(a,b){function c(b,c){var d=b.array,e=b.usage,f=a.createBuffer();a.bindBuffer(c,f);a.bufferData(c,d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof Int8Array?c=5120:d instanceof Uint8Array&&(c= +5121);return{buffer:f,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var d=b.isWebGL2,e=new WeakMap;return{get:function(a){a.isInterleavedBufferAttribute&&(a=a.data);return e.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var c=e.get(b);c&&(a.deleteBuffer(c.buffer),e.delete(b))},update:function(b,g){b.isInterleavedBufferAttribute&&(b=b.data);var f=e.get(b);if(void 0===f)e.set(b,c(b,g));else if(f.versionm;m++){if(n=d[m])if(l=n[0],n=n[1]){z&&e.setAttribute("morphTarget"+m,z[l]);f&&e.setAttribute("morphNormal"+m,f[l]);c[m]=n;h+=n;continue}c[m]=0}e=e.morphTargetsRelative?1:1-h;g.getUniforms().setValue(a,"morphTargetBaseInfluence",e);g.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function uj(a,b,c,d){var e=new WeakMap;return{update:function(a){var f=d.render.frame,h=a.geometry,l=b.get(a,h);e.get(l)!==f&&(h.isGeometry&&l.updateFromObject(a),b.update(l),e.set(l, +f));a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return l},dispose:function(){e=new WeakMap}}}function qb(a,b,c,d,e,f,g,h,l,m){a=void 0!==a?a:[];W.call(this,a,void 0!==b?b:301,c,d,e,f,void 0!==g?g:1022,h,l,m);this.flipY=!1}function Hc(a,b,c,d){W.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Ic(a,b,c,d){W.call(this,null);this.image={data:a||null,width:b|| +1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Jc(a,b,c){var d=a[0];if(0>=d||0");return a.replace(gg,fg)}function Kh(a,b,c,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return hg(a,b,c,d)}function hg(a,b,c,d){a="";for(b=parseInt(b);b< +parseInt(c);b++)a+=d.replace(/\[ i \]/g,"[ "+b+" ]").replace(/UNROLLED_LOOP_INDEX/g,b);return a}function Lh(a){var b="precision "+a.precision+" float;\nprecision "+a.precision+" int;";"highp"===a.precision?b+="\n#define HIGH_PRECISION":"mediump"===a.precision?b+="\n#define MEDIUM_PRECISION":"lowp"===a.precision&&(b+="\n#define LOW_PRECISION");return b}function gk(a){var b="SHADOWMAP_TYPE_BASIC";1===a.shadowMapType?b="SHADOWMAP_TYPE_PCF":2===a.shadowMapType?b="SHADOWMAP_TYPE_PCF_SOFT":3===a.shadowMapType&& +(b="SHADOWMAP_TYPE_VSM");return b}function hk(a){var b="ENVMAP_TYPE_CUBE";if(a.envMap)switch(a.envMapMode){case 301:case 302:b="ENVMAP_TYPE_CUBE";break;case 306:case 307:b="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:b="ENVMAP_TYPE_EQUIREC";break;case 305:b="ENVMAP_TYPE_SPHERE"}return b}function ik(a){var b="ENVMAP_MODE_REFLECTION";if(a.envMap)switch(a.envMapMode){case 302:case 304:b="ENVMAP_MODE_REFRACTION"}return b}function jk(a){var b="ENVMAP_BLENDING_NONE";if(a.envMap)switch(a.combine){case 0:b= +"ENVMAP_BLENDING_MULTIPLY";break;case 1:b="ENVMAP_BLENDING_MIX";break;case 2:b="ENVMAP_BLENDING_ADD"}return b}function kk(a,b,c){var d=a.getContext(),e=c.defines,f=c.vertexShader,g=c.fragmentShader,h=gk(c),l=hk(c),m=ik(c),z=jk(c),n=0d;d++)c.probe.push(new p);var e=new p,f=new N,g=new N;return{setup:function(d,l,m){for(var h=0,n=0,k=0,r=0;9>r;r++)c.probe[r].set(0,0,0);var q=l=0,u=0,p=0,x=0,w=0,ja=0,T=0;m=m.matrixWorldInverse;d.sort(tk);r=0;for(var Z=d.length;rKa;Ka++)c.probe[Ka].addScaledVector(C.sh.coefficients[Ka],Q);else if(C.isDirectionalLight){var U=a.get(C);U.color.copy(C.color).multiplyScalar(C.intensity);U.direction.setFromMatrixPosition(C.matrixWorld);e.setFromMatrixPosition(C.target.matrixWorld);U.direction.sub(e);U.direction.transformDirection(m);C.castShadow&&(Q=C.shadow,v=b.get(C),v.shadowBias=Q.bias,v.shadowRadius=Q.radius,v.shadowMapSize=Q.mapSize,c.directionalShadow[l]= +v,c.directionalShadowMap[l]=Ka,c.directionalShadowMatrix[l]=C.shadow.matrix,w++);c.directional[l]=U;l++}else C.isSpotLight?(U=a.get(C),U.position.setFromMatrixPosition(C.matrixWorld),U.position.applyMatrix4(m),U.color.copy(v).multiplyScalar(Q),U.distance=Da,U.direction.setFromMatrixPosition(C.matrixWorld),e.setFromMatrixPosition(C.target.matrixWorld),U.direction.sub(e),U.direction.transformDirection(m),U.coneCos=Math.cos(C.angle),U.penumbraCos=Math.cos(C.angle*(1-C.penumbra)),U.decay=C.decay,C.castShadow&& +(Q=C.shadow,v=b.get(C),v.shadowBias=Q.bias,v.shadowRadius=Q.radius,v.shadowMapSize=Q.mapSize,c.spotShadow[u]=v,c.spotShadowMap[u]=Ka,c.spotShadowMatrix[u]=C.shadow.matrix,T++),c.spot[u]=U,u++):C.isRectAreaLight?(U=a.get(C),U.color.copy(v).multiplyScalar(Q),U.position.setFromMatrixPosition(C.matrixWorld),U.position.applyMatrix4(m),g.identity(),f.copy(C.matrixWorld),f.premultiply(m),g.extractRotation(f),U.halfWidth.set(.5*C.width,0,0),U.halfHeight.set(0,.5*C.height,0),U.halfWidth.applyMatrix4(g),U.halfHeight.applyMatrix4(g), +c.rectArea[p]=U,p++):C.isPointLight?(U=a.get(C),U.position.setFromMatrixPosition(C.matrixWorld),U.position.applyMatrix4(m),U.color.copy(C.color).multiplyScalar(C.intensity),U.distance=C.distance,U.decay=C.decay,C.castShadow&&(Q=C.shadow,v=b.get(C),v.shadowBias=Q.bias,v.shadowRadius=Q.radius,v.shadowMapSize=Q.mapSize,v.shadowCameraNear=Q.camera.near,v.shadowCameraFar=Q.camera.far,c.pointShadow[q]=v,c.pointShadowMap[q]=Ka,c.pointShadowMatrix[q]=C.shadow.matrix,ja++),c.point[q]=U,q++):C.isHemisphereLight&& +(U=a.get(C),U.direction.setFromMatrixPosition(C.matrixWorld),U.direction.transformDirection(m),U.direction.normalize(),U.skyColor.copy(C.color).multiplyScalar(Q),U.groundColor.copy(C.groundColor).multiplyScalar(Q),c.hemi[x]=U,x++)}c.ambient[0]=h;c.ambient[1]=n;c.ambient[2]=k;d=c.hash;if(d.directionalLength!==l||d.pointLength!==q||d.spotLength!==u||d.rectAreaLength!==p||d.hemiLength!==x||d.numDirectionalShadows!==w||d.numPointShadows!==ja||d.numSpotShadows!==T)c.directional.length=l,c.spot.length= +u,c.rectArea.length=p,c.point.length=q,c.hemi.length=x,c.directionalShadow.length=w,c.directionalShadowMap.length=w,c.pointShadow.length=ja,c.pointShadowMap.length=ja,c.spotShadow.length=T,c.spotShadowMap.length=T,c.directionalShadowMatrix.length=w,c.pointShadowMatrix.length=ja,c.spotShadowMatrix.length=T,d.directionalLength=l,d.pointLength=q,d.spotLength=u,d.rectAreaLength=p,d.hemiLength=x,d.numDirectionalShadows=w,d.numPointShadows=ja,d.numSpotShadows=T,c.version=vk++},state:c}}function Qh(){var a= +new uk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function wk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,d){if(!1===b.has(c)){var e=new Qh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose",a)}else!1===b.get(c).has(d)?(e=new Qh,b.get(c).set(d,e)): +e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Hb(a){K.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}function Ib(a){K.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new p;this.nearDistance=1;this.farDistance=1E3;this.morphTargets=this.skinning= +!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Rh(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=n[c];void 0===d&&(d=new Hb({depthPacking:3201,morphTargets:a,skinning:b}),n[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=k[c];void 0===d&&(d=new Ib({morphTargets:a,skinning:b}),k[c]=d);return d}function f(b,c,f,g,h,l,m){var n=d,k=b.customDepthMaterial;!0===g.isPointLight&&(n=e,k=b.customDistanceMaterial); +void 0===k?(k=!1,!0===f.morphTargets&&(k=c.morphAttributes&&c.morphAttributes.position&&0\nvoid main() {\n float mean = 0.0;\n float squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n #ifdef HORIZONAL_PASS\n vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n mean += distribution.x;\n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n #else\n float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n mean += depth;\n squared_mean += depth * depth;\n #endif\n }\n mean = mean * HALF_SAMPLE_RATE;\n squared_mean = squared_mean * HALF_SAMPLE_RATE;\n float std_dev = sqrt( squared_mean - mean * mean );\n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"}), +p=u.clone();p.defines.HORIZONAL_PASS=1;var x=new F;x.setAttribute("position",new G(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var w=new ea(x,u),ja=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==ja.enabled&&(!1!==ja.autoUpdate||!1!==ja.needsUpdate)&&0!==d.length){var n=a.getRenderTarget(),k=a.getActiveCubeFace(),t=a.getActiveMipmapLevel(),q=a.state;q.setBlending(0);q.buffers.color.setClear(1,1,1,1);q.buffers.depth.setTest(!0);q.setScissorTest(!1); +for(var r=0,E=d.length;rc||l.y>c)l.x>c&&(m.x=Math.floor(c/v.x),l.x=m.x*v.x,C.mapSize.x=m.x),l.y>c&&(m.y=Math.floor(c/v.y),l.y=m.y*v.y,C.mapSize.y=m.y);null!==C.map||C.isPointLightShadow||3!==this.type||(v={minFilter:1006,magFilter:1006,format:1023},C.map=new Ba(l.x,l.y,v),C.map.texture.name=x.name+".shadowMap", +C.mapPass=new Ba(l.x,l.y,v),C.camera.updateProjectionMatrix());null===C.map&&(v={minFilter:1003,magFilter:1003,format:1023},C.map=new Ba(l.x,l.y,v),C.map.texture.name=x.name+".shadowMap",C.camera.updateProjectionMatrix());a.setRenderTarget(C.map);a.clear();v=C.getViewportCount();for(var Z=0;Zd||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?O.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===H&&(H=h(b,e)),c=c?h(b,e):H,c.width=b,c.height=e, +c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function m(a){return O.isPowerOfTwo(a.width)&&O.isPowerOfTwo(a.height)}function k(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function n(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e, +f))*Math.LOG2E}function t(c,d,e){if(!1===Da)return d;if(null!==c){if(void 0!==a[c])return a[c];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+c+"'")}c=d;6403===d&&(5126===e&&(c=33326),5131===e&&(c=33325),5121===e&&(c=33321));6407===d&&(5126===e&&(c=34837),5131===e&&(c=34843),5121===e&&(c=32849));6408===d&&(5126===e&&(c=34836),5131===e&&(c=34842),5121===e&&(c=32856));33325!==c&&33326!==c&&34842!==c&&34836!==c||b.get("EXT_color_buffer_float");return c}function r(a){return 1003=== +a||1004===a||1005===a?9728:9729}function q(b){b=b.target;b.removeEventListener("dispose",q);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),d.remove(b));b.isVideoTexture&&F.delete(b);g.memory.textures--}function u(b){b=b.target;b.removeEventListener("dispose",u);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLCubeRenderTarget)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]), +c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer),c.__webglMultisampledFramebuffer&&a.deleteFramebuffer(c.__webglMultisampledFramebuffer),c.__webglColorRenderbuffer&&a.deleteRenderbuffer(c.__webglColorRenderbuffer),c.__webglDepthRenderbuffer&&a.deleteRenderbuffer(c.__webglDepthRenderbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function p(a,b){var e=d.get(a); +if(a.isVideoTexture){var f=g.render.frame;F.get(a)!==f&&(F.set(a,f),a.update())}if(0q;q++)z[q]=h||e?e?b.image[q].image:b.image[q]:l(b.image[q],!1,!0,U);var r=z[0],u=m(r)||Da,p=f.convert(b.format),E=f.convert(b.type),w=t(b.internalFormat,p,E);v(34067,b,u);if(h){for(q=0;6>q;q++){var x=z[q].mipmaps;for(h=0;hq;q++)if(e)for(c.texImage2D(34069+q,0,w,z[q].width,z[q].height,0,p,E,z[q].data),h=0;h=A&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+A);K+=1;return a};this.resetTextureUnits=function(){K=0};this.setTexture2D=p;this.setTexture2DArray=function(a,b){var e=d.get(a);0z;z++)e.__webglFramebuffer[z]=a.createFramebuffer();else if(e.__webglFramebuffer=a.createFramebuffer(),z)if(Da){e.__webglMultisampledFramebuffer=a.createFramebuffer();e.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,e.__webglColorRenderbuffer); +z=f.convert(b.texture.format);var r=f.convert(b.texture.type);z=t(b.texture.internalFormat,z,r);r=Q(b);a.renderbufferStorageMultisample(36161,r,z,b.width,b.height);a.bindFramebuffer(36160,e.__webglMultisampledFramebuffer);a.framebufferRenderbuffer(36160,36064,36161,e.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(e.__webglDepthRenderbuffer=a.createRenderbuffer(),B(e.__webglDepthRenderbuffer,b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2."); +if(l){c.bindTexture(34067,h.__webglTexture);v(34067,b.texture,q);for(z=0;6>z;z++)C(e.__webglFramebuffer[z],b,36064,34069+z);k(b.texture,q)&&n(34067,b.texture,b.width,b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,h.__webglTexture),v(3553,b.texture,q),C(e.__webglFramebuffer,b,36064,3553),k(b.texture,q)&&n(3553,b.texture,b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);h=!0===b.isWebGLCubeRenderTarget;if(b.depthTexture){if(h)throw Error("target.depthTexture not supported in Cube render targets"); +if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,e.__webglFramebuffer);if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0); +p(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,e,0);else if(1027===b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(h)for(e.__webglDepthbuffer=[],h=0;6>h;h++)a.bindFramebuffer(36160,e.__webglFramebuffer[h]),e.__webglDepthbuffer[h]=a.createRenderbuffer(),B(e.__webglDepthbuffer[h],b,!1);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer= +a.createRenderbuffer(),B(e.__webglDepthbuffer,b,!1);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(a){var b=a.texture,e=m(a)||Da;if(k(b,e)){e=a.isWebGLCubeRenderTarget?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);n(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget=function(b){if(b.isWebGLMultisampleRenderTarget)if(Da){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer); +var e=b.width,f=b.height,g=16384;b.depthBuffer&&(g|=256);b.stencilBuffer&&(g|=1024);a.blitFramebuffer(0,0,e,f,0,0,e,f,g,9728);a.bindFramebuffer(36160,c.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===M&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),M=!0),a=a.texture); +p(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===R&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),R=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?x(a,b):w(a,b)}}function Th(a,b,c){var d=c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120; +if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES:null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032=== +a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; +if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"),null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===a||37496===a)if(c=b.get("WEBGL_compressed_texture_etc"),null!==c){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}if(37808===a||37809===a||37810===a||37811===a||37812=== +a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852===a||37853===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(36492===a)return c=b.get("EXT_texture_compression_bptc"),null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}} +function Le(a){P.call(this);this.cameras=a||[]}function Kc(){y.call(this);this.type="Group"}function Me(){this._grip=this._targetRay=null}function Uh(a,b){function c(a){var b=q.get(a.inputSource);b&&b.dispatchEvent({type:a.type})}function d(){q.forEach(function(a,b){a.disconnect(b)});q.clear();a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());Q.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(a){k=a;Q.setContext(l);Q.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})} +function f(a){for(var b=l.inputSources,c=0;cf.matrixWorld.determinant(),l=t(a,c,e,f);X.setMaterial(e,h);var m=!1;if(b!==d.id||V!==l.id||Ke!==(!0===e.wireframe))b=d.id,V=l.id,Ke=!0===e.wireframe,m=!0;if(e.morphTargets||e.morphNormals)Aa.update(f,d,e,l),m=!0;!0===f.isInstancedMesh&&(m=!0);a=d.index;c=d.attributes.position;if(null===a){if(void 0===c||0===c.count)return}else if(0===a.count)return;var n=1;!0===e.wireframe&&(a=va.getWireframeAttribute(d),n=2);h=Ca;if(null!==a){var k=oa.get(a); +h=Ea;h.setIndex(k)}if(m){if(!1!==Ha.isWebGL2||!f.isInstancedMesh&&!d.isInstancedBufferGeometry||null!==sa.get("ANGLE_instanced_arrays")){X.initAttributes();m=d.attributes;l=l.getAttributes();var z=e.defaultAttributeValues;for(ja in l){var q=l[ja];if(0<=q){var r=m[ja];if(void 0!==r){var u=r.normalized,p=r.itemSize,w=oa.get(r);if(void 0!==w){var E=w.buffer,x=w.type;w=w.bytesPerElement;if(r.isInterleavedBufferAttribute){var v=r.data,C=v.stride;r=r.offset;v&&v.isInstancedInterleavedBuffer?(X.enableAttributeAndDivisor(q, +v.meshPerAttribute),void 0===d._maxInstanceCount&&(d._maxInstanceCount=v.meshPerAttribute*v.count)):X.enableAttribute(q);I.bindBuffer(34962,E);X.vertexAttribPointer(q,p,x,u,C*w,r*w)}else r.isInstancedBufferAttribute?(X.enableAttributeAndDivisor(q,r.meshPerAttribute),void 0===d._maxInstanceCount&&(d._maxInstanceCount=r.meshPerAttribute*r.count)):X.enableAttribute(q),I.bindBuffer(34962,E),X.vertexAttribPointer(q,p,x,u,0,0)}}else if("instanceMatrix"===ja)w=oa.get(f.instanceMatrix),void 0!==w&&(E=w.buffer, +x=w.type,X.enableAttributeAndDivisor(q+0,1),X.enableAttributeAndDivisor(q+1,1),X.enableAttributeAndDivisor(q+2,1),X.enableAttributeAndDivisor(q+3,1),I.bindBuffer(34962,E),I.vertexAttribPointer(q+0,4,x,!1,64,0),I.vertexAttribPointer(q+1,4,x,!1,64,16),I.vertexAttribPointer(q+2,4,x,!1,64,32),I.vertexAttribPointer(q+3,4,x,!1,64,48));else if(void 0!==z&&(u=z[ja],void 0!==u))switch(u.length){case 2:I.vertexAttrib2fv(q,u);break;case 3:I.vertexAttrib3fv(q,u);break;case 4:I.vertexAttrib4fv(q,u);break;default:I.vertexAttrib1fv(q, +u)}}}X.disableUnusedAttributes()}null!==a&&I.bindBuffer(34963,k.buffer)}var ja=d.drawRange.start*n;m=null!==g?g.start*n:0;k=Math.max(ja,m);g=Math.max(0,Math.min(null!==a?a.count:c.count,ja+d.drawRange.count*n,m+(null!==g?g.count*n:Infinity))-1-k+1);0!==g&&(f.isMesh?!0===e.wireframe?(X.setLineWidth(e.wireframeLinewidth*(null===G?xa:1)),h.setMode(1)):h.setMode(4):f.isLine?(e=e.linewidth,void 0===e&&(e=1),X.setLineWidth(e*(null===G?xa:1)),f.isLineSegments?h.setMode(1):f.isLineLoop?h.setMode(2):h.setMode(3)): +f.isPoints?h.setMode(0):f.isSprite&&h.setMode(4),f.isInstancedMesh?h.renderInstances(d,k,g,f.count):d.isInstancedBufferGeometry?h.renderInstances(d,k,g,Math.min(d.instanceCount,d._maxInstanceCount)):h.render(k,g))};this.compile=function(a,b){Q=wa.get(a,b);Q.init();a.traverse(function(a){a.isLight&&(Q.pushLight(a),a.castShadow&&Q.pushShadow(a))});Q.setupLights(b);var c={};a.traverse(function(b){var d=b.material;if(d)if(Array.isArray(d))for(var e=0;ee.far|| +f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function ng(a,b,c,d,e,f,g,h,l){W.call(this,a,b,c,d,e,f,g,h,l);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1}function Oc(a,b,c,d,e,f,g,h,l,m,k,n){W.call(this,null,f,g,h,l,m,d,e,k,n);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Od(a,b,c,d,e,f,g,h,l){W.call(this,a,b,c,d,e,f,g,h,l);this.needsUpdate=!0} +function Pd(a,b,c,d,e,f,g,h,l,m){m=void 0!==m?m:1026;if(1026!==m&&1027!==m)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===m&&(c=1012);void 0===c&&1027===m&&(c=1020);W.call(this,null,d,e,f,g,h,m,c,l);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Pc(a){F.call(this);this.type="WireframeGeometry";var b=[],c,d,e,f=[0,0],g={},h=["a","b","c"];if(a&& +a.isGeometry){var l=a.faces;var m=0;for(d=l.length;mc;c++){var n=k[h[c]];var t=k[h[(c+1)%3]];f[0]=Math.min(n,t);f[1]=Math.max(n,t);n=f[0]+","+f[1];void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]})}}for(n in g)m=g[n],h=a.vertices[m.index1],b.push(h.x,h.y,h.z),h=a.vertices[m.index2],b.push(h.x,h.y,h.z)}else if(a&&a.isBufferGeometry)if(h=new p,null!==a.index){l=a.attributes.position;k=a.index;var r=a.groups;0===r.length&&(r=[{start:0,count:k.count,materialIndex:0}]);a=0;for(e= +r.length;ac;c++)n=k.getX(m+c),t=k.getX(m+(c+1)%3),f[0]=Math.min(n,t),f[1]=Math.max(n,t),n=f[0]+","+f[1],void 0===g[n]&&(g[n]={index1:f[0],index2:f[1]});for(n in g)m=g[n],h.fromBufferAttribute(l,m.index1),b.push(h.x,h.y,h.z),h.fromBufferAttribute(l,m.index2),b.push(h.x,h.y,h.z)}else for(l=a.attributes.position,m=0,d=l.count/3;mc;c++)g=3*m+c,h.fromBufferAttribute(l,g),b.push(h.x,h.y,h.z),g=3*m+(c+1)%3,h.fromBufferAttribute(l, +g),b.push(h.x,h.y,h.z);this.setAttribute("position",new B(b,3))}function Qd(a,b,c){L.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Qc(a,b,c));this.mergeVertices()}function Qc(a,b,c){F.call(this);this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new p,l=new p,m=new p,k=new p,n=new p,t,r;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter."); +var q=b+1;for(t=0;t<=c;t++){var u=t/c;for(r=0;r<=b;r++){var E=r/b;a(E,u,l);e.push(l.x,l.y,l.z);0<=E-1E-5?(a(E-1E-5,u,m),k.subVectors(l,m)):(a(E+1E-5,u,m),k.subVectors(m,l));0<=u-1E-5?(a(E,u-1E-5,m),n.subVectors(l,m)):(a(E,u+1E-5,m),n.subVectors(m,l));h.crossVectors(k,n).normalize();f.push(h.x,h.y,h.z);g.push(E,u)}}for(t=0;td&&1===a.x&&(l[b]=a.x-1);0===c.x&&0===c.z&&(l[b]=d/2/Math.PI+.5)}F.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a, +indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],l=[];(function(a){for(var c=new p,d=new p,g=new p,h=0;he&&(.2>b&&(l[a+0]+=1),.2>c&&(l[a+2]+=1),.2>d&&(l[a+4]+=1))})();this.setAttribute("position",new B(h,3));this.setAttribute("normal",new B(h.slice(),3));this.setAttribute("uv",new B(l,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Sd(a, +b){L.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Rc(a,b));this.mergeVertices()}function Rc(a,b){Ga.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Td(a,b){L.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new bc(a,b));this.mergeVertices()}function bc(a,b){Ga.call(this,[1,0,0, +-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Ud(a,b){L.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Sc(a,b));this.mergeVertices()}function Sc(a,b){var c=(1+Math.sqrt(5))/2;Ga.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5, +11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Vd(a,b){L.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tc(a,b));this.mergeVertices()}function Tc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;Ga.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c, +0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],a,b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Wd(a,b,c,d,e,f){L.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d, +closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new cc(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function cc(a,b,c,d,e){function f(e){k=a.getPointAt(e/b,k);var f=g.normals[e];e=g.binormals[e];for(t=0;t<=d;t++){var m=t/d*Math.PI*2,n=Math.sin(m);m=-Math.cos(m);l.x=m*f.x+n*e.x;l.y=m*f.y+n*e.y;l.z=m*f.z+n*e.z;l.normalize();q.push(l.x,l.y,l.z);h.x=k.x+c*l.x;h.y=k.y+c*l.y;h.z= +k.z+c*l.z;r.push(h.x,h.y,h.z)}}F.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new p,l=new p,m=new v,k=new p,n,t,r=[],q=[],u=[],E=[];for(n=0;n=b;e-=d)f=Yh(e,a[e],a[e+1],f);f&&Ue(f,f.next)&&(Zd(f),f=f.next);return f}function Lb(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!Ue(a,a.next)&&0!==na(a.prev,a,a.next))a=a.next;else{Zd(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b} +function $d(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,l=h;do null===l.z&&(l.z=og(l.x,l.y,d,e,f)),l.prevZ=l.prev,l=l.nextZ=l.next;while(l!==h);l.prevZ.nextZ=null;l.prevZ=null;h=l;var m,k,n,t,r=1;do{l=h;var q=h=null;for(k=0;l;){k++;var p=l;for(m=n=0;mr!==q.next.y>r&&q.next.y!==q.y&&n<(q.next.x-q.x)*(r-q.y)/(q.next.y-q.y)+q.x&&(k=!k),q=q.next;while(q!==l);q=k}q=q&&(na(l.prev,l,p.prev)||na(l,p.prev,p))||Ue(l,p)&&0a.x?e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,l=og(e.x=l&&d&&d.z<=b;){if(c!==a.prev&&c!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x, +f.y,c.x,c.y)&&0<=na(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=na(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=l;){if(c!==a.prev&&c!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=na(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!==a.prev&&d!==a.next&&Wc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=na(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Bk(a,b){return a.x-b.x}function Ck(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<= +c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x=c.x&&c.x>=g&&d!==c.x&&Wc(eh.x)&&(n=c.x===h.x)){n=h;var t=c;n=0>na(n.prev,n,t.prev)&&0>na(t.next, +n,n.next)}n&&(h=c,m=k)}c=c.next}while(c!==b);return h}function og(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Dk(a){var b=a,c=a;do{if(b.x=Math.min(a.x,c.x)&&b.y<=Math.max(a.y,c.y)&&b.y>=Math.min(a.y,c.y)}function Ve(a){return 0a?-1:0}function ae(a,b){return 0>na(a.prev,a,a.next)?0<=na(a,b,a.next)&& +0<=na(a,a.prev,b):0>na(a,b,a.prev)||0>na(a,a.next,b)}function $h(a,b){var c=new pg(a.i,a.x,a.y),d=new pg(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function Yh(a,b,c,d){a=new pg(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,a.next=a);return a}function Zd(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function pg(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ= +this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function ai(a){var b=a.length;2Number.EPSILON){var l=Math.sqrt(h),m=Math.sqrt(f*f+g*g);h=b.x-e/l;b=b.y+d/l;g=((c.x-g/m-h)*g-(c.y+f/m-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new v(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new v(f/e,d/ +e)}function h(a,b){for(J=a.length;0<=--J;){var c=J;var f=J-1;0>f&&(f=a.length-1);var g,h=w+2*B;for(g=0;gk;k++){var n=m[f[k]];var t=m[f[(k+1)%3]];d[0]=Math.min(n,t);d[1]=Math.max(n,t);n=d[0]+","+d[1];void 0===e[n]?e[n]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[n].face2=h}for(n in e)if(d=e[n],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new B(c,3))}function hc(a,b,c,d,e,f,g,h){L.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a, +radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new tb(a,b,c,d,e,f,g,h));this.mergeVertices()}function tb(a,b,c,d,e,f,g,h){function l(c){var e,f=new v,l=new p,z=0,u=!0===c?a:b,w=!0===c?1:-1;var y=q;for(e=1;e<=d;e++)n.push(0,E*w,0),t.push(0,w,0),r.push(.5,.5),q++;var B=q;for(e=0;e<=d;e++){var A=e/d*h+g,D=Math.cos(A);A=Math.sin(A);l.x=u*A;l.y=E*w;l.z=u*D;n.push(l.x,l.y,l.z);t.push(0,w,0);f.x=.5*D+.5;f.y=.5*A*w+.5;r.push(f.x,f.y); +q++}for(e=0;ethis.duration&&this.resetDuration()}function Fk(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return bd; +case "vector":case "vector2":case "vector3":case "vector4":return cd;case "color":return $e;case "quaternion":return je;case "bool":case "boolean":return Ze;case "string":return bf}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Gk(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Fk(a.type);if(void 0===a.times){var c=[],d=[];ka.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name, +a.times,a.values,a.interpolation)}function qg(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,l=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h= +a;return this};this.addHandler=function(a,b){l.push(a,b);return this};this.removeHandler=function(a){a=l.indexOf(a);-1!==a&&l.splice(a,2);return this};this.getHandler=function(a){for(var b=0,c=l.length;ba;a++)this.coefficients.push(new p)}function Ua(a,b){S.call(this,void 0,b);this.type="LightProbe";this.sh=void 0!==a?a:new of}function pf(a){V.call(this,a);this.textures={}}function me(){F.call(this);this.type="InstancedBufferGeometry";this.instanceCount=Infinity}function qf(a,b,c,d){"number"===typeof c&&(d=c,c=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument."));G.call(this,a,b,c);this.meshPerAttribute= +d||1}function rf(a){V.call(this,a)}function sf(a){V.call(this,a)}function vg(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");V.call(this,a);this.options=void 0}function wg(){this.type="ShapePath";this.color=new D;this.subPaths=[];this.currentPath=null}function xg(a){this.type="Font";this.data=a}function yg(a){V.call(this,a)}function tf(a){V.call(this, +a)}function zg(a,b,c){Ua.call(this,void 0,c);a=(new D).set(a);c=(new D).set(b);b=new p(a.r,a.g,a.b);a=new p(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)}function Ag(a,b){Ua.call(this,void 0,b);a=(new D).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))}function gi(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new P; +this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new P;this.cameraR.layers.enable(2);this.cameraR.matrixAutoUpdate=!1;this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}function Bg(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Cg(){y.call(this);this.type="AudioListener";this.context=Dg.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination); +this.filter=null;this.timeDelta=0;this._clock=new Bg}function gd(a){y.call(this);this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._progress=this._startedAt=0;this.filters=[]}function Eg(a){gd.call(this,a);this.panner= +this.context.createPanner();this.panner.panningModel="HRTF";this.panner.connect(this.gain)}function Fg(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}function Gg(a,b,c){this.binding=a;this.valueSize=c;switch(b){case "quaternion":a=this._slerp;b=this._slerpAdditive;var d=this._setAdditiveIdentityQuaternion;this.buffer=new Float64Array(6*c);this._workIndex=5;break;case "string":case "bool":b= +a=this._select;d=this._setAdditiveIdentityOther;this.buffer=Array(5*c);break;default:a=this._lerp,b=this._lerpAdditive,d=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*c)}this._mixBufferRegion=a;this._mixBufferRegionAdditive=b;this._setIdentity=d;this._origIndex=3;this._addIndex=4;this.referenceCount=this.useCount=this.cumulativeWeightAdditive=this.cumulativeWeight=0}function hi(a,b,c){c=c||Aa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function Aa(a,b, +c){this.path=b;this.parsedPath=c||Aa.parseTrackName(b);this.node=Aa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function ii(){this.uuid=O.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total- +d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function ji(a,b,c,d){this._mixer=a;this._clip=b;this._localRoot=c||null;this.blendMode=d||b.blendMode;a=b.tracks;b=a.length;c=Array(b);d={endingStart:2400,endingEnd:2400};for(var e=0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop= +2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=!0}function Hg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function uf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Ig(a,b,c){rb.call(this, +a,b);this.meshPerAttribute=c||1}function Jg(a,b,c,d){this.ray=new Wb(a,b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.layers=new De;this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function ki(a,b){return a.distance-b.distance}function Kg(a,b,c,d){a.layers.test(b.layers)&&a.raycast(b, +c);if(!0===d){a=a.children;d=0;for(var e=a.length;dc;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1, +Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new B(b,3));b=new da({fog:!1,toneMapped:!1});this.cone=new ma(a,b);this.add(this.cone);this.update()}function ni(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c\n\nvec3 getSample(float theta, vec3 axis) {\n\tfloat cosTheta = cos(theta);\n\t// Rodrigues' axis-angle rotation\n\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\treturn bilinearCubeUV(envMap, sampleDirection, mipInt);\n}\n\nvoid main() {\n\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\tif (all(equal(axis, vec3(0.0))))\n\t\taxis = vec3(vOutputDirection.z, 0.0, - vOutputDirection.x);\n\taxis = normalize(axis);\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb += weights[0] * getSample(0.0, axis);\n\tfor (int i = 1; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfloat theta = dTheta * float(i);\n\t\tgl_FragColor.rgb += weights[i] * getSample(-1.0 * theta, axis);\n\t\tgl_FragColor.rgb += weights[i] * getSample(theta, axis);\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="SphericalGaussianBlur";this._blurMaterial=a;this._cubemapShader=this._equirectShader=null;this._compileMaterial(this._blurMaterial)}function oi(a){a=new Ba(3*nb,3*nb,a);a.texture.mapping=306;a.texture.name="PMREM.cubeUv";a.scissorTest=!0;return a}function Rg(a,b,c,d,e){a.viewport.set(b,c,d,e);a.scissor.set(b,c,d,e)}function pi(){var a=new v(1,1);a=new ub({uniforms:{envMap:{value:null},texelSize:{value:a},inputEncoding:{value:mb[3E3]},outputEncoding:{value:mb[3E3]}}, +vertexShader:Pg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n"+Qg()+"\n\n#include \n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv = equirectUv( outputDirection );\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="EquirectangularToCubeUV";return a}function qi(){var a=new ub({uniforms:{envMap:{value:null},inputEncoding:{value:mb[3E3]},outputEncoding:{value:mb[3E3]}},vertexShader:Pg(),fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n"+Qg()+"\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t", +blending:0,depthTest:!1,depthWrite:!1});a.type="CubemapToCubeUV";return a}function Pg(){return"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\n\n// RH coordinate system; PMREM face-indexing convention\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\t} else if (face == 2.0) {\n\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\t} else if (face == 5.0) {\n\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\t}\n\treturn direction;\n}\n\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t"} +function Qg(){return"\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t"} +function ri(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");qa.call(this,a);this.type="catmullrom";this.closed=!0}function si(a){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");qa.call(this,a);this.type="catmullrom"}function Sg(a){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");qa.call(this,a);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2, +-52));void 0===Number.isInteger&&(Number.isInteger=function(a){return"number"===typeof a&&isFinite(a)&&Math.floor(a)===a});void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0se;se++)za[se]=(16>se?"0":"")+se.toString(16);var O={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295*Math.random()| +0,d=4294967295*Math.random()|0;return(za[a&255]+za[a>>8&255]+za[a>>16&255]+za[a>>24&255]+"-"+za[b&255]+za[b>>8&255]+"-"+za[b>>16&15|64]+za[b>>24&255]+"-"+za[c&63|128]+za[c>>8&255]+"-"+za[c>>16&255]+za[c>>24&255]+za[d&255]+za[d>>8&255]+za[d>>16&255]+za[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a, +b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},degToRad:function(a){return a*O.DEG2RAD},radToDeg:function(a){return a*O.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2, +Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))},setQuaternionFromProperEuler:function(a,b,c,d,e){var f=Math.cos,g=Math.sin,h=f(c/2);c=g(c/2);var l=f((b+d)/2),m=g((b+d)/2),k=f((b-d)/2),n=g((b-d)/2);f=f((d-b)/2);b=g((d-b)/2);switch(e){case "XYX":a.set(h*m,c*k,c*n,h*l);break;case "YZY":a.set(c*n,h*m,c*k,h*l);break;case "ZXZ":a.set(c*k,c*n,h*m,h*l);break;case "XZX":a.set(h*m,c*b,c*f,h*l);break;case "YXY":a.set(c*f,h*m,c*b,h*l);break;case "ZYZ":a.set(c* +b,c*f,h*m,h*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+e)}}};Object.defineProperties(v.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(v.prototype,{isVector2:!0,set:function(a,b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y= +a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this}, +subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this}, +max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},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=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x* +this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y- +a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!== +c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this},random:function(){this.x=Math.random();this.y=Math.random();return this}});Object.assign(ya.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,l){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]= +l;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(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this,2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1], +a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],l=c[7],m=c[2],k=c[5];c=c[8];var n=d[0],t=d[3],p=d[6],q=d[1],u=d[4],v=d[7],x=d[2],w=d[5];d=d[8];b[0]=a*n+e*q+f*x;b[3]=a*t+e*u+f*w;b[6]=a*p+e*v+f*d;b[1]=g*n+h*q+l*x;b[4]=g*t+h*u+l*w;b[7]=g*p+h*v+l*d;b[2]=m*n+k*q+c*x;b[5]=m*t+k* +u+c*w;b[8]=m*p+k*v+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*h+d*e*l-d*f*h},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");var c=a.elements;a=this.elements;b=c[0];var d=c[1], +e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7];c=c[8];var k=c*g-h*m,n=h*l-c*f,p=m*f-g*l,r=b*k+d*n+e*p;if(0===r)return this.set(0,0,0,0,0,0,0,0,0);r=1/r;a[0]=k*r;a[1]=(e*m-c*d)*r;a[2]=(h*d-e*g)*r;a[3]=n*r;a[4]=(c*b-e*l)*r;a[5]=(e*f-h*b)*r;a[6]=p*r;a[7]=(d*l-m*b)*r;a[8]=(g*b-d*f)*r;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()}, +transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c*h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4], +l=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*l;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*l;return this},translate:function(a,b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c= +this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var ld,Ob={getDataURL:function(a){if("undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===ld&&(ld=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));ld.width=a.width;ld.height=a.height;var b=ld.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height);a=ld}return 2048< +a.width||2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(W.prototype, +"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(R.prototype,{width:{get:function(){return this.z},set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w=a}}});Object.assign(R.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z= +a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x= +a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;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(a,b){this.x+=a.x* +b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;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(a){this.x*=a;this.y*=a;this.z*= +a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a= +a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var l=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-l)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+l)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+l)/4;b>f&&b>m?.01>b?(l=0,c=h=.707106781):(l=Math.sqrt(b),h=c/l,c=d/l):f>m?.01>f?(l=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),l=c/h,c=g/h):.01>m?(h=l=.707106781,c=0):(c= +Math.sqrt(m),l=d/c,h=g/c);this.set(l,h,c,a);return this}a=Math.sqrt((l-g)*(l-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(l-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a, +b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x= +Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y); +this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.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)},manhattanLength:function(){return Math.abs(this.x)+ +Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;this.w=a.w+(b.w-a.w)*c;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&& +a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this},random:function(){this.x=Math.random();this.y= +Math.random();this.z=Math.random();this.w=Math.random();return this}});Ba.prototype=Object.assign(Object.create(ua.prototype),{constructor:Ba,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport); +this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Xf.prototype=Object.assign(Object.create(Ba.prototype),{constructor:Xf,isWebGLMultisampleRenderTarget:!0,copy:function(a){Ba.prototype.copy.call(this,a);this.samples=a.samples;return this}});Object.assign(va,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h= +c[d+0],l=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var k=e[f+1],n=e[f+2];e=e[f+3];if(c!==e||h!==d||l!==k||m!==n){f=1-g;var p=h*d+l*k+m*n+c*e,r=0<=p?1:-1,q=1-p*p;q>Number.EPSILON&&(q=Math.sqrt(q),p=Math.atan2(q,p*r),f=Math.sin(f*p)/q,g=Math.sin(g*p)/q);r*=g;h=h*f+d*r;l=l*f+k*r;m=m*f+n*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+l*l+m*m+c*c),h*=g,l*=g,m*=g,c*=g)}a[b]=h;a[b+1]=l;a[b+2]=m;a[b+3]=c},multiplyQuaternionsFlat:function(a,b,c,d,e,f){var g=c[d],h=c[d+1],l=c[d+2];c=c[d+3];d=e[f];var m=e[f+1],k=e[f+2];e= +e[f+3];a[b]=g*e+c*d+h*k-l*m;a[b+1]=h*e+c*m+l*d-g*k;a[b+2]=l*e+c*k+g*m-h*d;a[b+3]=c*e-g*d-h*m-l*k;return a}});Object.defineProperties(va.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}});Object.assign(va.prototype, +{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos, +g=Math.sin,h=f(c/2),l=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);switch(a){case "XYZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "YXZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "ZXY":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "ZYX":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "YZX":this._x=c*l*f+h*d*e;this._y= +h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f-c*d*e;break;case "XZY":this._x=c*l*f-h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f+c*d*e;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0]; +a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],l=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(l-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+l)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+l)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a, +b){var c=a.dot(b)+1;1E-6>c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(O.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*= +-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._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 a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this._onChangeCallback();return this}, +multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this._onChangeCallback(); +return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(),this;a=Math.sqrt(a);var h=Math.atan2(a, +g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+ +3]=this._w;return a},fromBufferAttribute:function(a,b){this._x=a.getX(b);this._y=a.getY(b);this._z=a.getZ(b);this._w=a.getW(b);return this},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});var Tg=new p,ti=new va;Object.assign(p.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z= +a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."), +this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;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(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z; +return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;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(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;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(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(ti.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(ti.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyNormalMatrix:function(a){return this.applyMatrix3(a).normalize()}, +applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,l=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+l*-g-m*-f;this.y=l*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-l*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)}, +unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z, +a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c|| +1).multiplyScalar(Math.max(a,Math.min(b,c)))},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=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z= +0>this.z?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(a){return this.x*a.x+this.y*a.y+this.z*a.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)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)}, +lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;return this},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a* +e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.lengthSq();if(0===b)return this.set(0,0,0);b=a.dot(this)/b;return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){Tg.copy(this).projectOnVector(a);return this.sub(Tg)},reflect:function(a){return this.sub(Tg.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;a=this.dot(a)/b;return Math.acos(O.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))}, +distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta, +a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},setFromMatrix3Column:function(a, +b){return this.fromArray(a.elements,3*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}, +random:function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();return this}});var md=new p,ba=new N,Hk=new p(0,0,0),Ik=new p(1,1,1),Pb=new p,zf=new p,Ea=new p;Object.assign(N.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,l,m,k,n,p,r,q,u){var z=this.elements;z[0]=a;z[4]=b;z[8]=c;z[12]=d;z[1]=e;z[5]=f;z[9]=g;z[13]=h;z[2]=l;z[6]=m;z[10]=k;z[14]=n;z[3]=p;z[7]=r;z[11]=q;z[15]=u;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 N).fromArray(this.elements)}, copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x, -b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(){var a=new p;return function(b){var c=this.elements,d=b.elements,e=1/a.setFromMatrixColumn(b,0).length(),f=1/a.setFromMatrixColumn(b,1).length();b=1/a.setFromMatrixColumn(b,2).length();c[0]=d[0]*e;c[1]=d[1]*e;c[2]=d[2]*e;c[3]=0;c[4]=d[4]*f;c[5]=d[5]*f;c[6]=d[6]*f;c[7]=0;c[8]=d[8]*b;c[9]=d[9]*b;c[10]=d[10]*b;c[11]=0;c[12]=0;c[13]=0;c[14]=0;c[15]=1;return this}}(),makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order."); -var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=Math.sin(e);if("XYZ"===a.order){a=f*h;var k=f*e,m=c*h,q=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=k+m*d;b[5]=a-q*d;b[9]=-c*g;b[2]=q-a*d;b[6]=m+k*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a+q*c,b[4]=m*c-k,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-m,b[6]=q+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,q=d*e,b[0]=a-q*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]= -q-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,q=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+q,b[1]=g*e,b[5]=q*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=q-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-q*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,q=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+q,b[5]=f*h,b[9]=k*e-m,b[2]=m*e-k,b[6]=c*h,b[10]=q*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(){var a= -new p(0,0,0),b=new p(1,1,1);return function(c){return this.compose(a,c,b)}}(),lookAt:function(){var a=new p,b=new p,c=new p;return function(d,e,f){var g=this.elements;c.subVectors(d,e);0===c.lengthSq()&&(c.z=1);c.normalize();a.crossVectors(f,c);0===a.lengthSq()&&(1===Math.abs(f.z)?c.x+=1E-4:c.z+=1E-4,c.normalize(),a.crossVectors(f,c));a.normalize();b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!== -b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],k=c[5],m=c[9],q=c[13],n=c[2],l=c[6],u=c[10],r=c[14],p=c[3],y=c[7],x=c[11];c=c[15];var w=d[0],B=d[4],E=d[8],P=d[12],N=d[1],z=d[5],A=d[9],D=d[13],C=d[2], -H=d[6],G=d[10],K=d[14],L=d[3],I=d[7],J=d[11];d=d[15];b[0]=a*w+e*N+f*C+g*L;b[4]=a*B+e*z+f*H+g*I;b[8]=a*E+e*A+f*G+g*J;b[12]=a*P+e*D+f*K+g*d;b[1]=h*w+k*N+m*C+q*L;b[5]=h*B+k*z+m*H+q*I;b[9]=h*E+k*A+m*G+q*J;b[13]=h*P+k*D+m*K+q*d;b[2]=n*w+l*N+u*C+r*L;b[6]=n*B+l*z+u*H+r*I;b[10]=n*E+l*A+u*G+r*J;b[14]=n*P+l*D+u*K+r*d;b[3]=p*w+y*N+x*C+c*L;b[7]=p*B+y*z+x*H+c*I;b[11]=p*E+y*A+x*G+c*J;b[15]=p*P+y*D+x*K+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*= -a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cthis.determinant()&&(g=-g);c.x=f[12];c.y=f[13];c.z=f[14];b.copy(this);c=1/g;f=1/h;var m=1/k;b.elements[0]*=c;b.elements[1]*=c;b.elements[2]*=c;b.elements[4]*=f;b.elements[5]*=f;b.elements[6]*=f;b.elements[8]*=m;b.elements[9]*=m;b.elements[10]*=m;d.setFromRotationMatrix(b); -e.x=g;e.y=h;e.z=k;return this}}(),makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),k=1/(c-d),m=1/(f-e);g[0]= -2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*k;g[9]=0;g[13]=-((c+d)*k);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4]; -a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});Object.assign(fa,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,b,c,d,e,f,g){var h=c[d+0],k=c[d+1],m=c[d+2];c=c[d+3];d=e[f+0];var q=e[f+1],l=e[f+2];e=e[f+3];if(c!==e||h!==d||k!==q||m!==l){f=1-g;var t=h*d+k*q+m*l+c*e,u=0<=t?1:-1,r=1-t*t;r>Number.EPSILON&&(r=Math.sqrt(r),t=Math.atan2(r,t*u),f=Math.sin(f*t)/r,g=Math.sin(g* -t)/r);u*=g;h=h*f+d*u;k=k*f+q*u;m=m*f+l*u;c=c*f+e*u;f===1-g&&(g=1/Math.sqrt(h*h+k*k+m*m+c*c),h*=g,k*=g,m*=g,c*=g)}a[b]=h;a[b+1]=k;a[b+2]=m;a[b+3]=c}});Object.defineProperties(fa.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this.onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this.onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this.onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w= -a;this.onChangeCallback()}}});Object.assign(fa.prototype,{set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this.onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this.onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c= -a._x,d=a._y,e=a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),k=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);"XYZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"YXZ"===a?(this._x=c*k*f+h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"ZXY"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f-c*d*e):"ZYX"===a?(this._x=c*k*f-h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f+c*d*e):"YZX"===a?(this._x=c*k*f+ -h*d*e,this._y=h*d*f+c*k*e,this._z=h*k*e-c*d*f,this._w=h*k*f-c*d*e):"XZY"===a&&(this._x=c*k*f-h*d*e,this._y=h*d*f-c*k*e,this._z=h*k*e+c*d*f,this._w=h*k*f+c*d*e);if(!1!==b)this.onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this.onChangeCallback();return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],k=b[6];b=b[10];var m=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(k-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+k)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+k)/c,this._z=.25*c);this.onChangeCallback();return this},setFromUnitVectors:function(){var a=new p,b;return function(c,d){void 0===a&&(a=new p);b=c.dot(d)+1;1E-6>b?(b=0, -Math.abs(c.x)>Math.abs(c.z)?a.set(-c.y,c.x,0):a.set(0,-c.z,c.y)):a.crossVectors(c,d);this._x=a.x;this._y=a.y;this._z=a.z;this._w=b;return this.normalize()}}(),angleTo:function(a){return 2*Math.acos(Math.abs(H.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},inverse:function(){return this.conjugate()},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this.onChangeCallback();return this},dot:function(a){return this._x* -a._x+this._y*a._y+this._z*a._z+this._w*a._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 a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);this.onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), -this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=a*b-c*f-d*g-e*h;this.onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z; -0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize();a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this.onChangeCallback();return this},equals:function(a){return a._x=== -this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(p.prototype,{isVector3:!0,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this}, -setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x, -this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;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(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+= -a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;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(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."), -this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;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 a=new fa;return function(b){b&&b.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(a.setFromEuler(b))}}(),applyAxisAngle:function(){var a=new fa;return function(b, -c){return this.applyQuaternion(a.setFromAxisAngle(b,c))}}(),applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x, -c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,k=a*c+g*b-e*d,m=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*a+b*-e+k*-g-m*-f;this.y=k*a+b*-f+m*-e-h*-g;this.z=m*a+b*-g+h*-f-k*-e;return this},project:function(){var a=new I;return function(b){a.multiplyMatrices(b.projectionMatrix,a.getInverse(b.matrixWorld));return this.applyMatrix4(a)}}(),unproject:function(){var a=new I;return function(b){a.multiplyMatrices(b.matrixWorld,a.getInverse(b.projectionMatrix));return this.applyMatrix4(a)}}(),transformDirection:function(a){var b= -this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a, -b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(){var a=new p,b=new p;return function(c,d){a.set(c,c,c);b.set(d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},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=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?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(a){return this.x*a.x+this.y* -a.y+this.z*a.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)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a, -b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},cross:function(a,b){return void 0!==b?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.dot(this)/a.lengthSq();return this.copy(a).multiplyScalar(b)},projectOnPlane:function(){var a= -new p;return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a=new p;return function(b){return this.sub(a.copy(b).multiplyScalar(2*this.dot(b)))}}(),angleTo:function(a){a=this.dot(a)/Math.sqrt(this.lengthSq()*a.lengthSq());return Math.acos(H.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x- -a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){var b=Math.sin(a.phi)*a.radius;this.x=b*Math.sin(a.theta);this.y=Math.cos(a.phi)*a.radius;this.z=b*Math.cos(a.theta);return this},setFromCylindrical:function(a){this.x=a.radius*Math.sin(a.theta);this.y=a.y;this.z=a.radius*Math.cos(a.theta);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,0).length(), -c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!== -c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this}});Object.assign(ra.prototype,{isMatrix3:!0,set:function(a,b,c,d,e,f,g,h,k){var m=this.elements;m[0]=a;m[1]=d;m[2]=g;m[3]=b;m[4]=e;m[5]=h;m[6]=c;m[7]=f;m[8]=k;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(a){var b=this.elements;a=a.elements; -b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},applyToBufferAttribute:function(){var a=new p;return function(b){for(var c=0,d=b.count;cc;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1]; -a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var eb={getDataURL:function(a){if(a instanceof HTMLCanvasElement)var b=a;else{"undefined"!==typeof OffscreenCanvas?b=new OffscreenCanvas(a.width,a.height):(b=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),b.width=a.width,b.height=a.height);var c=b.getContext("2d");a instanceof ImageData?c.putImageData(a,0,0):c.drawImage(a,0,0,a.width,a.height)}return 2048a.x||1a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}});Object.defineProperty(T.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(V.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y= -b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y; -case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+= -a;this.y+=a;this.z+=a;this.w+=a;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(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-= -a;this.z-=a;this.w-=a;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(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/ -a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var k=a[6];var m=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-k)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+k)&&.1>Math.abs(b+f+m-3))return this.set(1,0,0,0),this;a=Math.PI; -b=(b+1)/2;f=(f+1)/2;m=(m+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+k)/4;b>f&&b>m?.01>b?(k=0,c=h=.707106781):(k=Math.sqrt(b),h=c/k,c=d/k):f>m?.01>f?(k=.707106781,h=0,c=.707106781):(h=Math.sqrt(f),k=c/h,c=g/h):.01>m?(h=k=.707106781,c=0):(c=Math.sqrt(m),k=d/c,h=g/c);this.set(k,h,c,a);return this}a=Math.sqrt((k-g)*(k-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(k-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+m-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y, -a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(){var a,b;return function(c,d){void 0===a&&(a=new V,b=new V);a.set(c, -c,c,c);b.set(d,d,d,d);return this.clamp(a,b)}}(),clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y); -this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.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)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a, -b,c){return this.subVectors(b,a).multiplyScalar(c).add(a)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."); -this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this}});fb.prototype=Object.assign(Object.create(ya.prototype),{constructor:fb,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone(); -this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Gb.prototype=Object.create(fb.prototype);Gb.prototype.constructor=Gb;Gb.prototype.isWebGLRenderTargetCube=!0;gb.prototype=Object.create(T.prototype);gb.prototype.constructor=gb;gb.prototype.isDataTexture=!0;Object.assign(Sa.prototype,{isBox3:!0,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){for(var b= -Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.length;he&&(e=m);q>f&&(f=q);l>g&&(g=l)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,k=a.count;he&&(e=m);l>f&&(f=l);n>g&&(g=n)}this.min.set(b,c,d); -this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&& -a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new p);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(){var a=new p;return function(b){this.clampPoint(b.center, -a);return a.distanceToSquared(b.center)<=b.radius*b.radius}}(),intersectsPlane:function(a){if(0=a.constant},intersectsTriangle:function(){function a(a){var e; -var f=0;for(e=a.length-3;f<=e;f+=3){h.fromArray(a,f);var g=m.x*Math.abs(h.x)+m.y*Math.abs(h.y)+m.z*Math.abs(h.z),k=b.dot(h),l=c.dot(h),q=d.dot(h);if(Math.max(-Math.max(k,l,q),Math.min(k,l,q))>g)return!1}return!0}var b=new p,c=new p,d=new p,e=new p,f=new p,g=new p,h=new p,k=new p,m=new p,l=new p;return function(h){if(this.isEmpty())return!1;this.getCenter(k);m.subVectors(this.max,k);b.subVectors(h.a,k);c.subVectors(h.b,k);d.subVectors(h.c,k);e.subVectors(c,b);f.subVectors(d,c);g.subVectors(b,d);h= -[0,-e.z,e.y,0,-f.z,f.y,0,-g.z,g.y,e.z,0,-e.x,f.z,0,-f.x,g.z,0,-g.x,-e.y,e.x,0,-f.y,f.x,0,-g.y,g.x,0];if(!a(h))return!1;h=[1,0,0,0,1,0,0,0,1];if(!a(h))return!1;l.crossVectors(e,f);h=[l.x,l.y,l.z];return a(h)}}(),clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new p);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new p;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a= -new p;return function(b){void 0===b&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),b=new Da);this.getCenter(b.center);b.radius=.5*this.getSize(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;a=a.elements;var b=a[0]*this.min.x,c=a[1]*this.min.x,d=a[2]*this.min.x,e= -a[0]*this.max.x,f=a[1]*this.max.x,g=a[2]*this.max.x,h=a[4]*this.min.y,k=a[5]*this.min.y,m=a[6]*this.min.y,l=a[4]*this.max.y,n=a[5]*this.max.y,t=a[6]*this.max.y,u=a[8]*this.min.z,r=a[9]*this.min.z,p=a[10]*this.min.z,y=a[8]*this.max.z,x=a[9]*this.max.z,w=a[10]*this.max.z;this.min.x=Math.min(b,e)+Math.min(h,l)+Math.min(u,y)+a[12];this.min.y=Math.min(c,f)+Math.min(k,n)+Math.min(r,x)+a[13];this.min.z=Math.min(d,g)+Math.min(m,t)+Math.min(p,w)+a[14];this.max.x=Math.max(b,e)+Math.max(h,l)+Math.max(u,y)+a[12]; -this.max.y=Math.max(c,f)+Math.max(k,n)+Math.max(r,x)+a[13];this.max.z=Math.max(d,g)+Math.max(m,t)+Math.max(p,w)+a[14];return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(Da.prototype,{set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new Sa;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).getCenter(d);for(var e= -c=0,f=b.length;e=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius; -return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),b=new p);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0=== -a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Sa);a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});Object.assign(Ma.prototype,{set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a, -b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new p,b=new p;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d,c);return this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a= -1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new p);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},intersectLine:function(){var a= -new p;return function(b,c){void 0===c&&(console.warn("THREE.Plane: .intersectLine() target is now required"),c=new p);var d=b.delta(a),e=this.normal.dot(d);if(0===e){if(0===this.distanceToPoint(b.start))return c.copy(b.start)}else if(e=-(b.start.dot(this.normal)+this.constant)/e,!(0>e||1b&&0a&&0c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4], -h=c[5],k=c[6],m=c[7],l=c[8],n=c[9],t=c[10],p=c[11],r=c[12],v=c[13],y=c[14];c=c[15];b[0].setComponents(f-a,m-g,p-l,c-r).normalize();b[1].setComponents(f+a,m+g,p+l,c+r).normalize();b[2].setComponents(f+d,m+h,p+n,c+v).normalize();b[3].setComponents(f-d,m-h,p-n,c-v).normalize();b[4].setComponents(f-e,m-k,p-t,c-y).normalize();b[5].setComponents(f+e,m+k,p+t,c+y).normalize();return this},intersectsObject:function(){var a=new Da;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere(); -a.copy(c.boundingSphere).applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSprite:function(){var a=new Da;return function(b){a.center.set(0,0,0);a.radius=.7071067811865476;a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)d;d++){var e=c[d]; -a.x=0e.distanceToPoint(a))return!1}return!0}}(),containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var S={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n", -aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif", -begin_vertex:"\nvec3 transformed = vec3( position );\n",beginnormal_vertex:"\nvec3 objectNormal = vec3( normal );\n",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n", -bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n", -clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif\n", -clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n", -color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\n", -cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n", -defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n", -emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:" gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n", -envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n", -envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n", -envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n", -envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n", -fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n", -gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n", -lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n", -lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n", -lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n", -lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n", -lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n", -lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif\n", -lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif\n", -lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n", -logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n", -map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n", -metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", -morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n", -normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n", -normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif\n", -packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n", -premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n", -roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n", -shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n", -shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n", -shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n", -skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n", -skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n", -specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n", -uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n", -uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif", -uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n", -cube_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n", -depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n", -distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}\n", -equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n", -linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n", -meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n", -normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n", -normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n", -points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}\n",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n", -sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}\n", -sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tvec4 mvPosition;\n\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n"}, -Aa={merge:function(a){for(var b={},c=0;c>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1d?c:d<2/3?a+6*(c-a)*(2/3-d):a}return function(b, -c,d){b=H.euclideanModulo(b,1);c=H.clamp(c,0,1);d=H.clamp(d,0,1);0===c?this.r=this.g=this.b=d:(c=.5>=d?d*(1+c):d+c-d*c,d=2*d-c,this.r=a(d,c,b+1/3),this.g=a(d,c,b),this.b=a(d,c,b-1/3));return this}}(),setStyle:function(a){function b(b){void 0!==b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= -Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/ -360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}a&&0a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}return function(b){this.r=a(b.r);this.g=a(b.g);this.b=a(b.b);return this}}(),copyLinearToSRGB:function(){function a(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}return function(b){this.r=a(b.r);this.g=a(b.g);this.b=a(b.b);return this}}(),convertSRGBToLinear:function(){this.copySRGBToLinear(this); -return this},convertLinearToSRGB:function(){this.copyLinearToSRGB(this);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){void 0===a&&(console.warn("THREE.Color: .getHSL() target is now required"),a={h:0,s:0,l:0});var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var k=e-f;f=.5>=h?k/(e+f):k/(2-e-f);switch(e){case b:g=(c- -d)/k+(cMath.abs(g)?(this._x=Math.atan2(-m,e),this._z= -Math.atan2(-f,a)):(this._x=Math.atan2(n,k),this._z=0)):"YXZ"===b?(this._x=Math.asin(-d(m,-1,1)),.99999>Math.abs(m)?(this._y=Math.atan2(g,e),this._z=Math.atan2(h,k)):(this._y=Math.atan2(-l,a),this._z=0)):"ZXY"===b?(this._x=Math.asin(d(n,-1,1)),.99999>Math.abs(n)?(this._y=Math.atan2(-l,e),this._z=Math.atan2(-f,k)):(this._y=0,this._z=Math.atan2(h,a))):"ZYX"===b?(this._y=Math.asin(-d(l,-1,1)),.99999>Math.abs(l)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,k))):"YZX"=== -b?(this._z=Math.asin(d(h,-1,1)),.99999>Math.abs(h)?(this._x=Math.atan2(-m,k),this._y=Math.atan2(-l,a)):(this._x=0,this._y=Math.atan2(g,e))):"XZY"===b?(this._z=Math.asin(-d(f,-1,1)),.99999>Math.abs(f)?(this._x=Math.atan2(n,k),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+b);this._order=b;if(!1!==c)this.onChangeCallback();return this},setFromQuaternion:function(){var a=new I;return function(b,c,d){a.makeRotationFromQuaternion(b); -return this.setFromRotationMatrix(a,c,d)}}(),setFromVector3:function(a,b){return this.set(a.x,a.y,a.z,b||this._order)},reorder:function(){var a=new fa;return function(b){a.setFromEuler(this);return this.setFromQuaternion(a,b)}}(),equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this.onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]); -void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,this._y,this._z):new p(this._x,this._y,this._z)},onChange:function(a){this.onChangeCallback=a;return this},onChangeCallback:function(){}});Object.assign(Rd.prototype,{set:function(a){this.mask=1<this.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];ba.copy(this);a=1/e;d=1/f;var h=1/g;ba.elements[0]*=a;ba.elements[1]*=a;ba.elements[2]*= +a;ba.elements[4]*=d;ba.elements[5]*=d;ba.elements[6]*=d;ba.elements[8]*=h;ba.elements[9]*=h;ba.elements[10]*=h;b.setFromRotationMatrix(ba);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e); +g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),l=1/(c-d),m=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*l;g[9]=0;g[13]=-((c+d)*l);g[2]=0;g[6]=0;g[10]=-2*m;g[14]=-((f+e)*m);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this}, +toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var ui=new N,vi=new va;Ub.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");Ub.DefaultOrder="XYZ";Object.defineProperties(Ub.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}}, +y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Ub.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)}, +copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=O.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],l=e[5],m=e[9],k=e[2],n=e[6];e=e[10];b=b||this._order;switch(b){case "XYZ":this._y=Math.asin(d(g,-1,1));.9999999>Math.abs(g)?(this._x=Math.atan2(-m,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(n,l),this._z=0);break;case "YXZ":this._x=Math.asin(-d(m,-1,1));.9999999>Math.abs(m)?(this._y= +Math.atan2(g,e),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-k,a),this._z=0);break;case "ZXY":this._x=Math.asin(d(n,-1,1));.9999999>Math.abs(n)?(this._y=Math.atan2(-k,e),this._z=Math.atan2(-f,l)):(this._y=0,this._z=Math.atan2(h,a));break;case "ZYX":this._y=Math.asin(-d(k,-1,1));.9999999>Math.abs(k)?(this._x=Math.atan2(n,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,l));break;case "YZX":this._z=Math.asin(d(h,-1,1));.9999999>Math.abs(h)?(this._x=Math.atan2(-m,l),this._y=Math.atan2(-k, +a)):(this._x=0,this._y=Math.atan2(g,e));break;case "XZY":this._z=Math.asin(-d(f,-1,1));.9999999>Math.abs(f)?(this._x=Math.atan2(n,l),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-m,e),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a,b,c){ui.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(ui,b,c)},setFromVector3:function(a,b){return this.set(a.x, +a.y,a.z,b||this._order)},reorder:function(a){vi.setFromEuler(this);return this.setFromQuaternion(vi,a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x, +this._y,this._z):new p(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});Object.assign(De.prototype,{set:function(a){this.mask=1<e&&(e=m);k>f&&(f=k);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.count;he&&(e=m);k>f&&(f=k);n>g&&(g=n)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;bthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new p);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(a){return a.max.xthis.max.x|| +a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,ue);return ue.distanceToSquared(a.center)<=a.radius*a.radius},intersectsPlane:function(a){if(0=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1;this.getCenter(ve);Bf.subVectors(this.max,ve);od.subVectors(a.a,ve);pd.subVectors(a.b,ve);qd.subVectors(a.c,ve);Qb.subVectors(pd,od);Rb.subVectors(qd,pd);qc.subVectors(od,qd);a=[0,-Qb.z,Qb.y,0,-Rb.z,Rb.y,0,-qc.z,qc.y,Qb.z,0,-Qb.x,Rb.z,0,-Rb.x,qc.z,0,-qc.x,-Qb.y,Qb.x,0,-Rb.y,Rb.x,0,-qc.y,qc.x,0];if(!Yf(a,od,pd,qd,Bf))return!1; +a=[1,0,0,0,1,0,0,0,1];if(!Yf(a,od,pd,qd,Bf))return!1;Cf.crossVectors(Qb,Rb);a=[Cf.x,Cf.y,Cf.z];return Yf(a,od,pd,qd,Bf)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new p);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return ue.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required");this.getCenter(a.center); +a.radius=.5*this.getSize(ue).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;zb[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);zb[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);zb[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);zb[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(a); +zb[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);zb[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);zb[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);zb[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a);this.setFromPoints(zb);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Nk=new Va;Object.assign(eb.prototype,{set:function(a,b){this.center.copy(a);this.radius= +b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):Nk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;dthis.radius},makeEmpty:function(){this.center.set(0,0,0);this.radius=-1;return this},containsPoint:function(a){return a.distanceToSquared(this.center)<= +this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"), +b=new p);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Va);if(this.isEmpty())return a.makeEmpty(),a;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a); +return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var Ab=new p,Vg=new p,Df=new p,Sb=new p,Wg=new p,Ef=new p,Xg=new p;Object.assign(Wb.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new p); +return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a,Ab));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new p);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))}, +distanceSqToPoint:function(a){var b=Ab.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);Ab.copy(this.direction).multiplyScalar(b).add(this.origin);return Ab.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){Vg.copy(a).add(b).multiplyScalar(.5);Df.copy(b).sub(a).normalize();Sb.copy(this.origin).sub(Vg);var e=.5*a.distanceTo(b),f=-this.direction.dot(Df),g=Sb.dot(this.direction),h=-Sb.dot(Df),l=Sb.lengthSq(),m=Math.abs(1-f*f);if(0=-k?b<=k?(e=1/m,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+l):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):b<=-k?(a=Math.max(0,-(-f*e+g)),b=0a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)},intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+ +a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y- +f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!==this.intersectBox(a,Ab)},intersectTriangle:function(a,b,c,d,e){Wg.subVectors(b,a);Ef.subVectors(c,a);Xg.crossVectors(Wg,Ef);b=this.direction.dot(Xg);if(0b)d=-1,b=-b;else return null; +Sb.subVectors(this.origin,a);a=d*this.direction.dot(Ef.crossVectors(Sb,Ef));if(0>a)return null;c=d*this.direction.dot(Wg.cross(Sb));if(0>c||a+c>b)return null;a=-d*Sb.dot(Xg);return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var Yg=new p,Ok=new p,Pk=new ya;Object.assign(Wa.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a); +this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=Yg.subVectors(c,b).cross(Ok.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant; +return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new p);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)}, +intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new p);var c=a.delta(Yg),d=this.normal.dot(c);if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1b&&0a&&0=Cb.x+Cb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,Cb);h.set(0,0);h.addScaledVector(e,Cb.x);h.addScaledVector(f,Cb.y);h.addScaledVector(g,Cb.z);return h},isFrontFacing:function(a, +b,c,d){cb.subVectors(c,b);Bb.subVectors(a,b);return 0>cb.cross(Bb).dot(d)?!0:!1}});Object.assign(pa.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){cb.subVectors(this.c,this.b);Bb.subVectors(this.a, +this.b);return.5*cb.cross(Bb).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new p);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return pa.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Wa);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return pa.getBarycoord(a, +this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return pa.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return pa.containsPoint(a,this.a,this.b,this.c)},isFrontFacing:function(a){return pa.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new p);var c=this.a,d=this.b,e=this.c;rd.subVectors(d,c);sd.subVectors(e, +c);$g.subVectors(a,c);var f=rd.dot($g),g=sd.dot($g);if(0>=f&&0>=g)return b.copy(c);ah.subVectors(a,d);var h=rd.dot(ah),l=sd.dot(ah);if(0<=h&&l<=h)return b.copy(d);var m=f*l-h*g;if(0>=m&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(rd,d);bh.subVectors(a,e);a=rd.dot(bh);var k=sd.dot(bh);if(0<=k&&a<=k)return b.copy(e);f=a*g-f*k;if(0>=f&&0<=g&&0>=k)return m=g/(g-k),b.copy(c).addScaledVector(sd,m);g=h*k-a*l;if(0>=g&&0<=l-h&&0<=a-k)return Ai.subVectors(e,d),m=(l-h)/(l-h+(a-k)),b.copy(d).addScaledVector(Ai, +m);e=1/(g+f+m);d=f*e;m*=e;return b.copy(c).addScaledVector(rd,d).addScaledVector(sd,m)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});var Bi={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388, +crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146, +floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323, +lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273, +moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638, +sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Fa={h:0,s:0,l:0},Ff={h:0,s:0,l:0};Object.assign(D.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"=== +typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=O.euclideanModulo(a,1);b=O.clamp(b,0,1);c=O.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=Zf(c,b,a+1/3),this.g=Zf(c,b,a),this.b=Zf(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!== +b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d))return this.r= +Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+ +c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0=h?l/(e+f):l/(2-e-f);switch(e){case b:g=(c-d)/l+(cthis.opacity&&(d.opacity=this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask; +d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef;d.stencilFuncMask=this.stencilFuncMask;d.stencilFail=this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&&(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth= +this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0g;g++)if(d[g]===d[(g+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(d=a[f],this.faces.splice(d,1),c=0,e= this.faceVertexUvs.length;cthis.opacity&&(d.opacity=this.opacity); -!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;0!==this.rotation&&(d.rotation=this.rotation);1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},distanceSqToPoint:function(){var a=new p;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceToSquared(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceToSquared(b)}}(),distanceSqToSegment:function(){var a=new p,b=new p,c=new p;return function(d,e,f,g){a.copy(d).add(e).multiplyScalar(.5); -b.copy(e).sub(d).normalize();c.copy(this.origin).sub(a);var h=.5*d.distanceTo(e),k=-this.direction.dot(b),m=c.dot(this.direction),l=-c.dot(b),n=c.lengthSq(),t=Math.abs(1-k*k);if(0=-p?e<=p?(h=1/t,d*=h,e*=h,k=d*(d+k*e+2*m)+e*(k*d+e+2*l)+n):(e=h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):(e=-h,d=Math.max(0,-(k*e+m)),k=-d*d+e*(e+2*l)+n):e<=-p?(d=Math.max(0,-(-k*h+m)),e=0b)return null;b=Math.sqrt(b-e);e=d-b;d+=b;return 0>e&&0>d?null:0>e?this.at(d, -c):this.at(e,c)}}(),intersectsSphere:function(a){return this.distanceToPoint(a.center)<=a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a, -b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(da||h>c)return null;if(h>g||g!==g)g=h;if(ac?null:this.at(0<=g?g:c,b)},intersectsBox:function(){var a= -new p;return function(b){return null!==this.intersectBox(b,a)}}(),intersectTriangle:function(){var a=new p,b=new p,c=new p,d=new p;return function(e,f,g,h,k){b.subVectors(f,e);c.subVectors(g,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0f)h=-1,f=-f;else return null;a.subVectors(this.origin,e);e=h*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;g=h*this.direction.dot(b.cross(a));if(0>g||e+g>f)return null;e=-h*a.dot(d);return 0>e?null:this.at(e/f,k)}}(), -applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});Object.assign(ja,{getNormal:function(){var a=new p;return function(b,c,d,e){void 0===e&&(console.warn("THREE.Triangle: .getNormal() target is now required"),e=new p);e.subVectors(d,c);a.subVectors(b,c);e.cross(a);b=e.lengthSq();return 0=a.x+a.y}}()});Object.assign(ja.prototype, -{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){var a=new p,b=new p;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return.5*a.cross(b).length()}}(),getMidpoint:function(a){void 0=== -a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new p);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ja.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new p);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return ja.getBarycoord(a,this.a,this.b,this.c,b)},containsPoint:function(a){return ja.containsPoint(a, -this.a,this.b,this.c)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(){var a=new p,b=new p,c=new p,d=new p,e=new p,f=new p;return function(g,h){void 0===h&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),h=new p);var k=this.a,m=this.b,l=this.c;a.subVectors(m,k);b.subVectors(l,k);d.subVectors(g,k);var n=a.dot(d),t=b.dot(d);if(0>=n&&0>=t)return h.copy(k);e.subVectors(g,m);var u=a.dot(e),r=b.dot(e);if(0<=u&&r<=u)return h.copy(m); -var v=n*r-u*t;if(0>=v&&0<=n&&0>=u)return m=n/(n-u),h.copy(k).addScaledVector(a,m);f.subVectors(g,l);g=a.dot(f);var y=b.dot(f);if(0<=y&&g<=y)return h.copy(l);n=g*t-n*y;if(0>=n&&0<=t&&0>=y)return v=t/(t-y),h.copy(k).addScaledVector(b,v);t=u*y-g*r;if(0>=t&&0<=r-u&&0<=g-y)return c.subVectors(l,m),v=(r-u)/(r-u+(g-y)),h.copy(m).addScaledVector(c,v);l=1/(t+n+v);m=n*l;v*=l;return h.copy(k).addScaledVector(a,m).addScaledVector(b,v)}}(),equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}}); -la.prototype=Object.assign(Object.create(D.prototype),{constructor:la,isMesh:!0,setDrawMode:function(a){this.drawMode=a},copy:function(a){D.prototype.copy.call(this,a);this.drawMode=a.drawMode;void 0!==a.morphTargetInfluences&&(this.morphTargetInfluences=a.morphTargetInfluences.slice());void 0!==a.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},a.morphTargetDictionary));return this},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b= -Object.keys(a);if(0c.far?null:{distance:b,point:x.clone(),object:a}}function c(c,d,e,f,m,l,n,q,p){g.fromBufferAttribute(m,n);h.fromBufferAttribute(m,q);k.fromBufferAttribute(m, -p);if(c=b(c,d,e,f,g,h,k,y))l&&(t.fromBufferAttribute(l,n),u.fromBufferAttribute(l,q),r.fromBufferAttribute(l,p),c.uv=a(y,g,h,k,t,u,r)),l=new Ta(n,q,p),ja.getNormal(g,h,k,l.normal),c.face=l;return c}var d=new I,e=new mb,f=new Da,g=new p,h=new p,k=new p,m=new p,l=new p,n=new p,t=new z,u=new z,r=new z,v=new p,y=new p,x=new p;return function(q,p){var v=this.geometry,w=this.material,x=this.matrixWorld;if(void 0!==w&&(null===v.boundingSphere&&v.computeBoundingSphere(),f.copy(v.boundingSphere),f.applyMatrix4(x), -!1!==q.ray.intersectsSphere(f)&&(d.getInverse(x),e.copy(q.ray).applyMatrix4(d),null===v.boundingBox||!1!==e.intersectsBox(v.boundingBox))))if(v.isBufferGeometry){var z=v.index,B=v.attributes.position,A=v.attributes.uv,D=v.groups;v=v.drawRange;var C;if(null!==z)if(Array.isArray(w)){var H=0;for(C=D.length;He.far||f.push({distance:q,point:b.clone(),face:null,object:this})}}(),clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){D.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}}); -Bc.prototype=Object.assign(Object.create(D.prototype),{constructor:Bc,copy:function(a){D.prototype.copy.call(this,a,!1);a=a.levels;for(var b=0,c=a.length;b=d[e].distance)d[e-1].object.visible=!1,d[e].object.visible=!0;else break; -for(;ef||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}else for(g=0,r=u.length/3-1;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld), -index:g,face:null,faceIndex:null,object:this}))}else if(g.isGeometry)for(k=g.vertices,m=k.length,g=0;gf||(l.applyMatrix4(this.matrixWorld),v=d.ray.origin.distanceTo(l),vd.far||e.push({distance:v,point:h.clone().applyMatrix4(this.matrixWorld),index:g,face:null,faceIndex:null,object:this}))}}}(),clone:function(){return(new this.constructor(this.geometry,this.material)).copy(this)}});W.prototype=Object.assign(Object.create(sa.prototype), -{constructor:W,isLineSegments:!0,computeLineDistances:function(){var a=new p,b=new p;return function(){var c=this.geometry;if(c.isBufferGeometry)if(null===c.index){for(var d=c.attributes.position,e=[],f=0,g=d.count;fd.far||e.push({distance:a,distanceToRay:Math.sqrt(f),point:n.clone(),index:c,face:null,object:g}))}var g=this,h=this.geometry,k=this.matrixWorld,m=d.params.Points.threshold;null===h.boundingSphere&& -h.computeBoundingSphere();c.copy(h.boundingSphere);c.applyMatrix4(k);c.radius+=m;if(!1!==d.ray.intersectsSphere(c)){a.getInverse(k);b.copy(d.ray).applyMatrix4(a);m/=(this.scale.x+this.scale.y+this.scale.z)/3;var l=m*m;m=new p;var n=new p;if(h.isBufferGeometry){var t=h.index;h=h.attributes.position.array;if(null!==t){var u=t.array;t=0;for(var r=u.length;t=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Pb.prototype=Object.create(T.prototype);Pb.prototype.constructor=Pb;Pb.prototype.isCompressedTexture=!0;Dc.prototype=Object.create(T.prototype);Dc.prototype.constructor=Dc;Dc.prototype.isCanvasTexture=!0;Ec.prototype= -Object.create(T.prototype);Ec.prototype.constructor=Ec;Ec.prototype.isDepthTexture=!0;Qb.prototype=Object.create(C.prototype);Qb.prototype.constructor=Qb;Fc.prototype=Object.create(R.prototype);Fc.prototype.constructor=Fc;Rb.prototype=Object.create(C.prototype);Rb.prototype.constructor=Rb;Gc.prototype=Object.create(R.prototype);Gc.prototype.constructor=Gc;na.prototype=Object.create(C.prototype);na.prototype.constructor=na;Hc.prototype=Object.create(R.prototype);Hc.prototype.constructor=Hc;Sb.prototype= -Object.create(na.prototype);Sb.prototype.constructor=Sb;Ic.prototype=Object.create(R.prototype);Ic.prototype.constructor=Ic;pb.prototype=Object.create(na.prototype);pb.prototype.constructor=pb;Jc.prototype=Object.create(R.prototype);Jc.prototype.constructor=Jc;Tb.prototype=Object.create(na.prototype);Tb.prototype.constructor=Tb;Kc.prototype=Object.create(R.prototype);Kc.prototype.constructor=Kc;Ub.prototype=Object.create(na.prototype);Ub.prototype.constructor=Ub;Lc.prototype=Object.create(R.prototype); -Lc.prototype.constructor=Lc;Vb.prototype=Object.create(C.prototype);Vb.prototype.constructor=Vb;Mc.prototype=Object.create(R.prototype);Mc.prototype.constructor=Mc;Wb.prototype=Object.create(C.prototype);Wb.prototype.constructor=Wb;Nc.prototype=Object.create(R.prototype);Nc.prototype.constructor=Nc;Xb.prototype=Object.create(C.prototype);Xb.prototype.constructor=Xb;var Ug={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=bf(a,0,e,c,!0),g=[];if(!f)return g;var h;if(d){var k= -c;d=[];var m;var l=0;for(m=b.length;l80*c){var p=h=a[0];var r=d=a[1];for(k=c;kh&&(h=l),b>d&&(d=b);h=Math.max(h-p,d-r);h=0!==h?1/h:0}Qc(f,g,c,p,r,h);return g}},Va={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;eVa.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];ff(a);gf(c,a);var f=a.length;b.forEach(ff);for(a=0;aMath.abs(g-k)?[new z(a,1-c),new z(h,1-d),new z(m,1-e),new z(n,1-b)]:[new z(g,1-c),new z(k,1-d),new z(l,1-e),new z(t,1-b)]}};Sc.prototype=Object.create(R.prototype);Sc.prototype.constructor=Sc;Yb.prototype=Object.create(Oa.prototype);Yb.prototype.constructor=Yb;Tc.prototype=Object.create(R.prototype);Tc.prototype.constructor=Tc;sb.prototype=Object.create(C.prototype);sb.prototype.constructor=sb;Uc.prototype=Object.create(R.prototype);Uc.prototype.constructor=Uc;Zb.prototype=Object.create(C.prototype); -Zb.prototype.constructor=Zb;Vc.prototype=Object.create(R.prototype);Vc.prototype.constructor=Vc;$b.prototype=Object.create(C.prototype);$b.prototype.constructor=$b;tb.prototype=Object.create(R.prototype);tb.prototype.constructor=tb;tb.prototype.toJSON=function(){var a=R.prototype.toJSON.call(this);return jf(this.parameters.shapes,a)};ub.prototype=Object.create(C.prototype);ub.prototype.constructor=ub;ub.prototype.toJSON=function(){var a=C.prototype.toJSON.call(this);return jf(this.parameters.shapes, -a)};ac.prototype=Object.create(C.prototype);ac.prototype.constructor=ac;vb.prototype=Object.create(R.prototype);vb.prototype.constructor=vb;Wa.prototype=Object.create(C.prototype);Wa.prototype.constructor=Wa;Wc.prototype=Object.create(vb.prototype);Wc.prototype.constructor=Wc;Xc.prototype=Object.create(Wa.prototype);Xc.prototype.constructor=Xc;Yc.prototype=Object.create(R.prototype);Yc.prototype.constructor=Yc;bc.prototype=Object.create(C.prototype);bc.prototype.constructor=bc;var xa=Object.freeze({WireframeGeometry:Qb, -ParametricGeometry:Fc,ParametricBufferGeometry:Rb,TetrahedronGeometry:Hc,TetrahedronBufferGeometry:Sb,OctahedronGeometry:Ic,OctahedronBufferGeometry:pb,IcosahedronGeometry:Jc,IcosahedronBufferGeometry:Tb,DodecahedronGeometry:Kc,DodecahedronBufferGeometry:Ub,PolyhedronGeometry:Gc,PolyhedronBufferGeometry:na,TubeGeometry:Lc,TubeBufferGeometry:Vb,TorusKnotGeometry:Mc,TorusKnotBufferGeometry:Wb,TorusGeometry:Nc,TorusBufferGeometry:Xb,TextGeometry:Sc,TextBufferGeometry:Yb,SphereGeometry:Tc,SphereBufferGeometry:sb, -RingGeometry:Uc,RingBufferGeometry:Zb,PlaneGeometry:uc,PlaneBufferGeometry:lb,LatheGeometry:Vc,LatheBufferGeometry:$b,ShapeGeometry:tb,ShapeBufferGeometry:ub,ExtrudeGeometry:rb,ExtrudeBufferGeometry:Oa,EdgesGeometry:ac,ConeGeometry:Wc,ConeBufferGeometry:Xc,CylinderGeometry:vb,CylinderBufferGeometry:Wa,CircleGeometry:Yc,CircleBufferGeometry:bc,BoxGeometry:Ib,BoxBufferGeometry:kb});wb.prototype=Object.create(J.prototype);wb.prototype.constructor=wb;wb.prototype.isShadowMaterial=!0;wb.prototype.copy= -function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);return this};cc.prototype=Object.create(ta.prototype);cc.prototype.constructor=cc;cc.prototype.isRawShaderMaterial=!0;Pa.prototype=Object.create(J.prototype);Pa.prototype.constructor=Pa;Pa.prototype.isMeshStandardMaterial=!0;Pa.prototype.copy=function(a){J.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= -a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap= -a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};xb.prototype=Object.create(Pa.prototype);xb.prototype.constructor=xb;xb.prototype.isMeshPhysicalMaterial= -!0;xb.prototype.copy=function(a){Pa.prototype.copy.call(this,a);this.defines={PHYSICAL:""};this.reflectivity=a.reflectivity;this.clearCoat=a.clearCoat;this.clearCoatRoughness=a.clearCoatRoughness;return this};Fa.prototype=Object.create(J.prototype);Fa.prototype.constructor=Fa;Fa.prototype.isMeshPhongMaterial=!0;Fa.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity= +a.elementsNeedUpdate;this.verticesNeedUpdate=a.verticesNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.lineDistancesNeedUpdate=a.lineDistancesNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});var fh=function(a){function b(b,d,e,f,g,h){a.call(this);this.type="BoxGeometry";this.parameters={width:b,height:d,depth:e,widthSegments:f,heightSegments:g, +depthSegments:h};this.fromBufferGeometry(new Gd(b,d,e,f,g,h));this.mergeVertices()}a&&(b.__proto__=a);b.prototype=Object.create(a&&a.prototype);return b.prototype.constructor=b}(L),Gd=function(a){function b(b,d,e,f,g,h){function c(a,b,c,d,e,f,g,h,l,z,v){var w=f/l,x=g/z,y=f/2,A=g/2,E=h/2;g=l+1;for(var C=z+1,B=f=0,D=new p,F=0;F\n\t#include \n}", +fragmentShader:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}",side:1,blending:0});d.uniforms.tEquirect.value=b;b=new ea(new Gd(5,5,5),d);c.add(b);(new Fc(1,10,this)).update(a,c);b.geometry.dispose();b.material.dispose();return this};$b.prototype=Object.create(W.prototype);$b.prototype.constructor=$b;$b.prototype.isDataTexture= +!0;var ud=new eb,Hf=new p;Object.assign(Gc.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromProjectionMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],m=c[7],k=c[8],n=c[9],p=c[10],r=c[11],q=c[12],u= +c[13],v=c[14];c=c[15];b[0].setComponents(f-a,m-g,r-k,c-q).normalize();b[1].setComponents(f+a,m+g,r+k,c+q).normalize();b[2].setComponents(f+d,m+h,r+n,c+u).normalize();b[3].setComponents(f-d,m-h,r-n,c-u).normalize();b[4].setComponents(f-e,m-l,r-p,c-v).normalize();b[5].setComponents(f+e,m+l,r+p,c+v).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();ud.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(ud)}, +intersectsSprite:function(a){ud.center.set(0,0,0);ud.radius=.7071067811865476;ud.applyMatrix4(a.matrixWorld);return this.intersectsSphere(ud)},intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)c;c++){var d=b[c];Hf.x=0d.distanceToPoint(Hf))return!1}return!0}, +containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var A={common:{diffuse:{value:new D(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new ya},uv2Transform:{value:new ya},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null}, +lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new v(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:2.5E-4},fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new D(16777215)}}, +lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]}, +spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new D(15658734)},opacity:{value:1}, +size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new ya}},sprite:{diffuse:{value:new D(15658734)},opacity:{value:1},center:{value:new v(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new ya}}};Fd.prototype=Object.create(L.prototype);Fd.prototype.constructor=Fd;ac.prototype=Object.create(F.prototype);ac.prototype.constructor=ac;var M={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif", +alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif", +aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif", +bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif", +clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif", +clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif", +color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}", +cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x); } else if (face == 1.0) {\n uv = vec2(-direction.x, -direction.z) / abs(direction.y); } else if (face == 2.0) {\n uv = vec2(-direction.x, direction.y) / abs(direction.z); } else if (face == 3.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x); } else if (face == 4.0) {\n uv = vec2(-direction.x, direction.z) / abs(direction.y); } else {\n uv = vec2(direction.x, direction.y) / abs(direction.z); }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif", +defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif", +displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif", +emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}", +envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif", +envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV = equirectUv( reflectVec );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif", +fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif", +gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif", +lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif", +lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)", +lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)", +lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif", +lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}", +lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif", +lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif", +lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif", +logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif", +map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif", +map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif", +morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif", +normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;", +normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif", +normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif", +clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif", +packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}", +premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif", +roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif", +shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif", +shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}", +skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif", +skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif", +specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}", +uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif", +uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}", +background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}", +cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}", +depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}", +distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}", +distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}", +equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}", +linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}", +meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}", +normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}", +normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}", +points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}", +points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}", +shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}", +sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}", +sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"}, +gb={basic:{uniforms:wa([A.common,A.specularmap,A.envmap,A.aomap,A.lightmap,A.fog]),vertexShader:M.meshbasic_vert,fragmentShader:M.meshbasic_frag},lambert:{uniforms:wa([A.common,A.specularmap,A.envmap,A.aomap,A.lightmap,A.emissivemap,A.fog,A.lights,{emissive:{value:new D(0)}}]),vertexShader:M.meshlambert_vert,fragmentShader:M.meshlambert_frag},phong:{uniforms:wa([A.common,A.specularmap,A.envmap,A.aomap,A.lightmap,A.emissivemap,A.bumpmap,A.normalmap,A.displacementmap,A.fog,A.lights,{emissive:{value:new D(0)}, +specular:{value:new D(1118481)},shininess:{value:30}}]),vertexShader:M.meshphong_vert,fragmentShader:M.meshphong_frag},standard:{uniforms:wa([A.common,A.envmap,A.aomap,A.lightmap,A.emissivemap,A.bumpmap,A.normalmap,A.displacementmap,A.roughnessmap,A.metalnessmap,A.fog,A.lights,{emissive:{value:new D(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:M.meshphysical_vert,fragmentShader:M.meshphysical_frag},toon:{uniforms:wa([A.common,A.specularmap,A.aomap,A.lightmap, +A.emissivemap,A.bumpmap,A.normalmap,A.displacementmap,A.gradientmap,A.fog,A.lights,{emissive:{value:new D(0)},specular:{value:new D(1118481)},shininess:{value:30}}]),vertexShader:M.meshtoon_vert,fragmentShader:M.meshtoon_frag},matcap:{uniforms:wa([A.common,A.bumpmap,A.normalmap,A.displacementmap,A.fog,{matcap:{value:null}}]),vertexShader:M.meshmatcap_vert,fragmentShader:M.meshmatcap_frag},points:{uniforms:wa([A.points,A.fog]),vertexShader:M.points_vert,fragmentShader:M.points_frag},dashed:{uniforms:wa([A.common, +A.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:M.linedashed_vert,fragmentShader:M.linedashed_frag},depth:{uniforms:wa([A.common,A.displacementmap]),vertexShader:M.depth_vert,fragmentShader:M.depth_frag},normal:{uniforms:wa([A.common,A.bumpmap,A.normalmap,A.displacementmap,{opacity:{value:1}}]),vertexShader:M.normal_vert,fragmentShader:M.normal_frag},sprite:{uniforms:wa([A.sprite,A.fog]),vertexShader:M.sprite_vert,fragmentShader:M.sprite_frag},background:{uniforms:{uvTransform:{value:new ya}, +t2D:{value:null}},vertexShader:M.background_vert,fragmentShader:M.background_frag},cube:{uniforms:wa([A.envmap,{opacity:{value:1}}]),vertexShader:M.cube_vert,fragmentShader:M.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:M.equirect_vert,fragmentShader:M.equirect_frag},distanceRGBA:{uniforms:wa([A.common,A.displacementmap,{referencePosition:{value:new p},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:M.distanceRGBA_vert,fragmentShader:M.distanceRGBA_frag},shadow:{uniforms:wa([A.lights, +A.fog,{color:{value:new D(0)},opacity:{value:1}}]),vertexShader:M.shadow_vert,fragmentShader:M.shadow_frag}};gb.physical={uniforms:wa([gb.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new v(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new D(0)},transparency:{value:0}}]),vertexShader:M.meshphysical_vert,fragmentShader:M.meshphysical_frag};qb.prototype=Object.create(W.prototype);qb.prototype.constructor= +qb;qb.prototype.isCubeTexture=!0;Object.defineProperty(qb.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Hc.prototype=Object.create(W.prototype);Hc.prototype.constructor=Hc;Hc.prototype.isDataTexture2DArray=!0;Ic.prototype=Object.create(W.prototype);Ic.prototype.constructor=Ic;Ic.prototype.isDataTexture3D=!0;var Bh=new W,Ej=new Hc,Gj=new Ic,Ch=new qb,vh=[],xh=[],Ah=new Float32Array(16),zh=new Float32Array(9),yh=new Float32Array(4);Dh.prototype.updateCache=function(a){var b= +this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Ja(b,a)};Eh.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var eg=/([\w\d_]+)(\])?(\[|\.)?/g;Gb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Gb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Gb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e], +h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Gb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var lk=0,gg=/^[ \t]*#include +<([\w\d./]+)>/gm,Nh=/#pragma unroll_loop[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Mh=/#pragma unroll_loop_start[\s]+?for \( int i = (\d+); i < (\d+); i \+\+ \) \{([\s\S]+?)(?=\})\}[\s]+?#pragma unroll_loop_end/g,vk=0;Hb.prototype=Object.create(K.prototype);Hb.prototype.constructor= +Hb;Hb.prototype.isMeshDepthMaterial=!0;Hb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Ib.prototype=Object.create(K.prototype);Ib.prototype.constructor= +Ib;Ib.prototype.isMeshDistanceMaterial=!0;Ib.prototype.copy=function(a){K.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Le.prototype=Object.assign(Object.create(P.prototype), +{constructor:Le,isArrayCamera:!0});Kc.prototype=Object.assign(Object.create(y.prototype),{constructor:Kc,isGroup:!0});Object.assign(Me.prototype,{constructor:Me,getTargetRaySpace:function(){null===this._targetRay&&(this._targetRay=new Kc,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1);return this._targetRay},getGripSpace:function(){null===this._grip&&(this._grip=new Kc,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1);return this._grip},dispatchEvent:function(a){null!==this._targetRay&& +this._targetRay.dispatchEvent(a);null!==this._grip&&this._grip.dispatchEvent(a);return this},disconnect:function(a){this.dispatchEvent({type:"disconnected",data:a});null!==this._targetRay&&(this._targetRay.visible=!1);null!==this._grip&&(this._grip.visible=!1);return this},update:function(a,b,c){var d=null,e=null,f=this._targetRay,g=this._grip;a&&(null!==f&&(d=b.getPose(a.targetRaySpace,c),null!==d&&(f.matrix.fromArray(d.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale))),null!== +g&&a.gripSpace&&(e=b.getPose(a.gripSpace,c),null!==e&&(g.matrix.fromArray(e.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale))));null!==f&&(f.visible=null!==d);null!==g&&(g.visible=null!==e);return this}});Object.assign(Uh.prototype,ua.prototype);Object.assign(Ne.prototype,{isFogExp2:!0,clone:function(){return new Ne(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}});Object.assign(Oe.prototype,{isFog:!0,clone:function(){return new Oe(this.color, +this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}});Object.defineProperty(rb.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(rb.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride; +c*=b.stride;for(var d=0,e=this.stride;da.far||b.push({distance:e,point:xe.clone(),uv:pa.getUV(xe,If,ye,Jf,Di,gh,Ei,new v),face:null,object:this})},clone:function(){return(new this.constructor(this.material)).copy(this)},copy:function(a){y.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);return this}});var Kf=new p,Fi=new p;Nd.prototype=Object.assign(Object.create(y.prototype), +{constructor:Nd,isLOD:!0,copy:function(a){y.prototype.copy.call(this,a,!1);for(var b=a.levels,c=0,d=b.length;c=b[c].distance)b[c- +1].object.visible=!1,b[c].object.visible=!0;else break;for(this._currentLevel=c-1;cf;f++)if(l=c.getComponent(f),0!==l){var m=b.getComponent(f);e.multiplyMatrices(h.bones[m].matrixWorld,h.boneInverses[m]);g.addScaledVector(d.copy(a).applyMatrix4(e),l)}return g.applyMatrix4(this.bindMatrixInverse)}}()});var Gi=new N,Qk=new N;Object.assign(Re.prototype,{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;ad||(h.applyMatrix4(this.matrixWorld),t=a.ray.origin.distanceTo(h),ta.far||b.push({distance:t,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}}else for(c=0,n=k.length/3-1;cd||(h.applyMatrix4(this.matrixWorld),t=a.ray.origin.distanceTo(h), +ta.far||b.push({distance:t,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}else if(c.isGeometry)for(f=c.vertices,g=f.length,c=0;cd||(h.applyMatrix4(this.matrixWorld),t=a.ray.origin.distanceTo(h),ta.far||b.push({distance:t,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a= +a.morphAttributes;var b=Object.keys(a);if(0=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Oc.prototype=Object.create(W.prototype);Oc.prototype.constructor=Oc;Oc.prototype.isCompressedTexture=!0;Od.prototype=Object.create(W.prototype);Od.prototype.constructor=Od;Od.prototype.isCanvasTexture=!0;Pd.prototype=Object.create(W.prototype);Pd.prototype.constructor=Pd;Pd.prototype.isDepthTexture=!0;Pc.prototype=Object.create(F.prototype);Pc.prototype.constructor=Pc;Qd.prototype=Object.create(L.prototype); +Qd.prototype.constructor=Qd;Qc.prototype=Object.create(F.prototype);Qc.prototype.constructor=Qc;Rd.prototype=Object.create(L.prototype);Rd.prototype.constructor=Rd;Ga.prototype=Object.create(F.prototype);Ga.prototype.constructor=Ga;Sd.prototype=Object.create(L.prototype);Sd.prototype.constructor=Sd;Rc.prototype=Object.create(Ga.prototype);Rc.prototype.constructor=Rc;Td.prototype=Object.create(L.prototype);Td.prototype.constructor=Td;bc.prototype=Object.create(Ga.prototype);bc.prototype.constructor= +bc;Ud.prototype=Object.create(L.prototype);Ud.prototype.constructor=Ud;Sc.prototype=Object.create(Ga.prototype);Sc.prototype.constructor=Sc;Vd.prototype=Object.create(L.prototype);Vd.prototype.constructor=Vd;Tc.prototype=Object.create(Ga.prototype);Tc.prototype.constructor=Tc;Wd.prototype=Object.create(L.prototype);Wd.prototype.constructor=Wd;cc.prototype=Object.create(F.prototype);cc.prototype.constructor=cc;cc.prototype.toJSON=function(){var a=F.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON(); +return a};Xd.prototype=Object.create(L.prototype);Xd.prototype.constructor=Xd;Uc.prototype=Object.create(F.prototype);Uc.prototype.constructor=Uc;Yd.prototype=Object.create(L.prototype);Yd.prototype.constructor=Yd;Vc.prototype=Object.create(F.prototype);Vc.prototype.constructor=Vc;var Rk={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=Xh(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var l=c;d=[];var m;var k=0;for(m=b.length;k80*c){var r=h=a[0];var q=d=a[1];for(l=c;lh&&(h=k),b>d&&(d=b);h=Math.max(h-r,d-q);h=0!==h?1/h:0}$d(f,g,c,r,q,h);return g}},sb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e +sb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];ai(a);bi(c,a);var f=a.length;b.forEach(ai);for(a=0;aMath.abs(g-l)?[new v(a,1-c),new v(h,1-d), +new v(k,1-e),new v(n,1-b)]:[new v(g,1-c),new v(l,1-d),new v(p,1-e),new v(t,1-b)]}};be.prototype=Object.create(L.prototype);be.prototype.constructor=be;Xc.prototype=Object.create(hb.prototype);Xc.prototype.constructor=Xc;ce.prototype=Object.create(L.prototype);ce.prototype.constructor=ce;ec.prototype=Object.create(F.prototype);ec.prototype.constructor=ec;de.prototype=Object.create(L.prototype);de.prototype.constructor=de;Yc.prototype=Object.create(F.prototype);Yc.prototype.constructor=Yc;ee.prototype= +Object.create(L.prototype);ee.prototype.constructor=ee;Zc.prototype=Object.create(F.prototype);Zc.prototype.constructor=Zc;fc.prototype=Object.create(L.prototype);fc.prototype.constructor=fc;fc.prototype.toJSON=function(){var a=L.prototype.toJSON.call(this);return di(this.parameters.shapes,a)};gc.prototype=Object.create(F.prototype);gc.prototype.constructor=gc;gc.prototype.toJSON=function(){var a=F.prototype.toJSON.call(this);return di(this.parameters.shapes,a)};$c.prototype=Object.create(F.prototype); +$c.prototype.constructor=$c;hc.prototype=Object.create(L.prototype);hc.prototype.constructor=hc;tb.prototype=Object.create(F.prototype);tb.prototype.constructor=tb;fe.prototype=Object.create(hc.prototype);fe.prototype.constructor=fe;ge.prototype=Object.create(tb.prototype);ge.prototype.constructor=ge;he.prototype=Object.create(L.prototype);he.prototype.constructor=he;ad.prototype=Object.create(F.prototype);ad.prototype.constructor=ad;var ra=Object.freeze({__proto__:null,WireframeGeometry:Pc,ParametricGeometry:Qd, +ParametricBufferGeometry:Qc,TetrahedronGeometry:Sd,TetrahedronBufferGeometry:Rc,OctahedronGeometry:Td,OctahedronBufferGeometry:bc,IcosahedronGeometry:Ud,IcosahedronBufferGeometry:Sc,DodecahedronGeometry:Vd,DodecahedronBufferGeometry:Tc,PolyhedronGeometry:Rd,PolyhedronBufferGeometry:Ga,TubeGeometry:Wd,TubeBufferGeometry:cc,TorusKnotGeometry:Xd,TorusKnotBufferGeometry:Uc,TorusGeometry:Yd,TorusBufferGeometry:Vc,TextGeometry:be,TextBufferGeometry:Xc,SphereGeometry:ce,SphereBufferGeometry:ec,RingGeometry:de, +RingBufferGeometry:Yc,PlaneGeometry:Fd,PlaneBufferGeometry:ac,LatheGeometry:ee,LatheBufferGeometry:Zc,ShapeGeometry:fc,ShapeBufferGeometry:gc,ExtrudeGeometry:dc,ExtrudeBufferGeometry:hb,EdgesGeometry:$c,ConeGeometry:fe,ConeBufferGeometry:ge,CylinderGeometry:hc,CylinderBufferGeometry:tb,CircleGeometry:he,CircleBufferGeometry:ad,BoxGeometry:fh,BoxBufferGeometry:Gd});ic.prototype=Object.create(K.prototype);ic.prototype.constructor=ic;ic.prototype.isShadowMaterial=!0;ic.prototype.copy=function(a){K.prototype.copy.call(this, +a);this.color.copy(a.color);return this};ub.prototype=Object.create(Ca.prototype);ub.prototype.constructor=ub;ub.prototype.isRawShaderMaterial=!0;ib.prototype=Object.create(K.prototype);ib.prototype.constructor=ib;ib.prototype.isMeshStandardMaterial=!0;ib.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity; +this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap= +a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this};jc.prototype=Object.create(ib.prototype);jc.prototype.constructor=jc;jc.prototype.isMeshPhysicalMaterial= +!0;jc.prototype.copy=function(a){ib.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap;this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap=a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen=a.sheen?(this.sheen||new D).copy(a.sheen):null;this.transparency=a.transparency;return this};Mb.prototype= +Object.create(K.prototype);Mb.prototype.constructor=Mb;Mb.prototype.isMeshPhongMaterial=!0;Mb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap; +this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap= +a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};kc.prototype=Object.create(K.prototype);kc.prototype.constructor=kc;kc.prototype.isMeshToonMaterial=!0;kc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);this.shininess=a.shininess;this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity= a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap; -this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};yb.prototype=Object.create(Fa.prototype);yb.prototype.constructor=yb;yb.prototype.isMeshToonMaterial=!0;yb.prototype.copy=function(a){Fa.prototype.copy.call(this, -a);this.gradientMap=a.gradientMap;return this};zb.prototype=Object.create(J.prototype);zb.prototype.constructor=zb;zb.prototype.isMeshNormalMaterial=!0;zb.prototype.copy=function(a){J.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe; -this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};Ab.prototype=Object.create(J.prototype);Ab.prototype.constructor=Ab;Ab.prototype.isMeshLambertMaterial=!0;Ab.prototype.copy=function(a){J.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive); -this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this}; -Bb.prototype=Object.create(Y.prototype);Bb.prototype.constructor=Bb;Bb.prototype.isLineDashedMaterial=!0;Bb.prototype.copy=function(a){Y.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Vg=Object.freeze({ShadowMaterial:wb,SpriteMaterial:cb,RawShaderMaterial:cc,ShaderMaterial:ta,PointsMaterial:Ea,MeshPhysicalMaterial:xb,MeshStandardMaterial:Pa,MeshPhongMaterial:Fa,MeshToonMaterial:yb,MeshNormalMaterial:zb,MeshLambertMaterial:Ab,MeshDepthMaterial:$a, -MeshDistanceMaterial:ab,MeshBasicMaterial:da,LineDashedMaterial:Bb,LineBasicMaterial:Y,Material:J}),Fb={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},clear:function(){this.files={}}},ka=new ce,Ya={};Object.assign(Ga.prototype,{load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=Fb.get(a);if(void 0!==f)return e.manager.itemStart(a), -setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;if(void 0!==Ya[a])Ya[a].push({onLoad:b,onProgress:c,onError:d});else{var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(g){c=g[1];var h=!!g[2];g=g[3];g=window.decodeURIComponent(g);h&&(g=window.atob(g));try{var k=(this.responseType||"").toLowerCase();switch(k){case "arraybuffer":case "blob":var m=new Uint8Array(g.length);for(h=0;hg)e=a+1;else if(0b&&(b=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(H.clamp(d[k-1].dot(d[k]),-1,1)),e[k].applyMatrix4(h.makeRotationAxis(g,c))),f[k].crossVectors(d[k],e[k]);if(!0===b)for(c=Math.acos(H.clamp(e[0].dot(e[a]),-1,1)),c/=a,0d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);Ae.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);Be.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);Ce.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(Ae.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),Be.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),Ce.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(Ae.calc(a), -Be.calc(a),Ce.calc(a));return b};ca.prototype.copy=function(a){L.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(lf(d,e.x,f.x,g.x,c.x),lf(d,e.y,f.y,g.y,c.y));return b};Ka.prototype.copy=function(a){L.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths(); -return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;c=e)break a;else{f=b[1];a=e)break b}d=c;c= -0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ia.arraySlice(c,e,f),this.values=ia.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a= -!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e= -g}if(void 0!==b&&ia.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,f,d);a=!1;break}return a},optimize:function(){for(var a=this.times,b=this.values,c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gm.opacity&&(m.transparent=!0);d.setTextures(k);return d.parse(m)}}()});var De={decodeText:function(a){if("undefined"!==typeof TextDecoder)return(new TextDecoder).decode(a);for(var b="",c=0,d=a.length;cf;f++){var E=h[u++];var A=B[2*E];E=B[2*E+1];A=new z(A,E);2!==f&&c.faceVertexUvs[e][v].push(A);0!==f&&c.faceVertexUvs[e][v+1].push(A)}}y&&(y=3*h[u++],r.normal.set(m[y++],m[y++],m[y]),w.normal.copy(r.normal));if(x)for(e=0;4>e;e++)y=3*h[u++],x=new p(m[y++], -m[y++],m[y]),2!==e&&r.vertexNormals.push(x),0!==e&&w.vertexNormals.push(x);n&&(n=h[u++],n=l[n],r.color.setHex(n),w.color.setHex(n));if(k)for(e=0;4>e;e++)n=h[u++],n=l[n],2!==e&&r.vertexColors.push(new G(n)),0!==e&&w.vertexColors.push(new G(n));c.faces.push(r);c.faces.push(w)}else{r=new Ta;r.a=h[u++];r.b=h[u++];r.c=h[u++];v&&(v=h[u++],r.materialIndex=v);v=c.faces.length;if(e)for(e=0;ef;f++)E=h[u++],A=B[2*E],E=B[2*E+1],A=new z(A,E),c.faceVertexUvs[e][v].push(A); -y&&(y=3*h[u++],r.normal.set(m[y++],m[y++],m[y]));if(x)for(e=0;3>e;e++)y=3*h[u++],x=new p(m[y++],m[y++],m[y]),r.vertexNormals.push(x);n&&(n=h[u++],r.color.setHex(l[n]));if(k)for(e=0;3>e;e++)n=h[u++],r.vertexColors.push(new G(l[n]));c.faces.push(r)}}d=a;u=void 0!==d.influencesPerVertex?d.influencesPerVertex:2;if(d.skinWeights)for(g=0,h=d.skinWeights.length;g -Number.EPSILON){if(0>m&&(g=b[f],k=-k,h=b[e],m=-m),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=m*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=Va.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new db;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var m=[],l=[],n=0;m[n]=void 0;l[n]=[];for(var p= -0,u=f.length;pd&&this._mixBufferRegion(c,a,3*b,1-d,b);d=b;for(var f=b+b;d!==f;++d)if(c[d]!==c[d+b]){e.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=3*b;this.binding.getValue(a, -c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){fa.slerpFlat(a,b,a,b,a,c,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}}});Object.assign(pf.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a, -b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(pa,{Composite:pf,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new pa.Composite(a,b,c):new pa(a,b,c)},sanitizeNodeName:function(){var a= -/[\[\]\.:\/]/g;return function(b){return b.replace(/\s/g,"_").replace(a,"")}}(),parseTrackName:function(){var a="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",b=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]");a=/(WCOD+)?/.source.replace("WCOD",a);var c=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),d=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),e=new RegExp("^"+b+a+c+d+"$"),f=["material","materials","bones"];return function(a){var b=e.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+ -a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],propertyName:b[5],propertyIndex:b[6]};var c=b.nodeName&&b.nodeName.lastIndexOf(".");if(void 0!==c&&-1!==c){var d=b.nodeName.substring(c+1);-1!==f.indexOf(d)&&(b.nodeName=b.nodeName.substring(0,c),b.objectName=d)}if(null===b.propertyName||0===b.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return b}}(),findNode:function(a,b){if(!b||""===b||"root"===b||"."===b||-1===b||b===a.name||b===a.uuid)return a; -if(a.skeleton){var c=a.skeleton.getBoneByName(b);if(void 0!==c)return c}if(a.children){var d=function(a){for(var c=0;c=b){var p=b++,n=a[p];c[n.uuid]=l;a[l]=n;c[k]=p;a[p]=h;h=0;for(k=e;h!==k;++h){n=d[h];var t=n[l];n[l]=n[p];n[p]=t}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k= -arguments[g].uuid,l=d[k];if(void 0!==l)if(delete d[k],lb||0===c)return;this._startTime=null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&&(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1=== -e?b:f&&1===(e&1)?c-b:b;if(2200===d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else break a;this.clampWhenFinished?this.paused=!0:this.enabled=!1;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0: -this.enabled=!1,b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}if(f&&1===(e&1))return this.time=b,c-b}return this.time=b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?2401: -2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});re.prototype=Object.assign(Object.create(ya.prototype),{constructor:re,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0=== -k&&(k={},h[g]=k);for(h=0;h!==e;++h){var l=d[h],p=l.name,n=k[p];if(void 0===n){n=f[h];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,g,p));continue}n=new qe(pa.create(c,p,b&&b._propertyBindings[h].binding.parsedPath),l.ValueTypeName,l.getValueSize());++n.referenceCount;this._addInactiveBinding(n,g,p)}f[h]=n;a[h].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid, +this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};lc.prototype=Object.create(K.prototype);lc.prototype.constructor=lc;lc.prototype.isMeshNormalMaterial=!0;lc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap; +this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};mc.prototype=Object.create(K.prototype);mc.prototype.constructor=mc;mc.prototype.isMeshLambertMaterial=!0;mc.prototype.copy=function(a){K.prototype.copy.call(this, +a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth; +this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype=Object.create(K.prototype);nc.prototype.constructor=nc;nc.prototype.isMeshMatcapMaterial=!0;nc.prototype.copy=function(a){K.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap= +a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};oc.prototype=Object.create(da.prototype);oc.prototype.constructor=oc;oc.prototype.isLineDashedMaterial=!0;oc.prototype.copy=function(a){da.prototype.copy.call(this,a); +this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Sk=Object.freeze({__proto__:null,ShadowMaterial:ic,SpriteMaterial:Kb,RawShaderMaterial:ub,ShaderMaterial:Ca,PointsMaterial:Xa,MeshPhysicalMaterial:jc,MeshStandardMaterial:ib,MeshPhongMaterial:Mb,MeshToonMaterial:kc,MeshNormalMaterial:lc,MeshLambertMaterial:mc,MeshDepthMaterial:Hb,MeshDistanceMaterial:Ib,MeshBasicMaterial:Pa,MeshMatcapMaterial:nc,LineDashedMaterial:oc,LineBasicMaterial:da,Material:K}),ka={arraySlice:function(a, +b,c){return ka.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e= +new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,l=0;l!==b;++l)e[g++]=a[h+l];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++]; +while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;var f=[];for(b=0;b=d))for(l.push(g.times[p]),n=0;na.tracks[b].times[0]&&(c=a.tracks[b].times[0]); +for(b=0;b=d)d=30;var e=a.tracks.length;b/=d;for(d=0;d=f.times[k]?k=ka.arraySlice(f.values, +k*l):(k=f.createInterpolant(),k.evaluate(b),k=k.resultBuffer);"quaternion"===g&&(new va(k[0],k[1],k[2],k[3])).normalize().conjugate().toArray(k);for(var p=h.times.length,n=0;n=e)break a;else{f=b[1];a=e)break b}d=c;c=0}}for(;c>>1,ab;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ka.arraySlice(c,e,f),this.values=ka.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times; +b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=g}if(void 0!==b&&ka.isTypedArray(b))for(f=0,c=b.length;f!==c;++f)if(d=b[f],isNaN(d)){console.error("THREE.KeyframeTrack: Value is not a valid number.", +this,f,d);a=!1;break}return a},optimize:function(){for(var a=ka.arraySlice(this.times),b=ka.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=1,f=a.length-1,g=1;gg)e=a+1;else if(0c&&(c=0);1Number.EPSILON&&(g.normalize(),c=Math.acos(O.clamp(d[l-1].dot(d[l]),-1,1)),e[l].applyMatrix4(h.makeRotationAxis(g,c))),f[l].crossVectors(d[l],e[l]);if(!0===b)for(c=Math.acos(O.clamp(e[0].dot(e[a]),-1,1)),c/=a,0 +d;)d+=c;for(;d>c;)d-=c;de&&(e=1);1E-4>d&&(d=e);1E-4>l&&(l=e);hh.initNonuniformCatmullRom(f.x, +g.x,h.x,c.x,d,e,l);ih.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,l);jh.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,l)}else"catmullrom"===this.curveType&&(hh.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),ih.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),jh.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(hh.calc(a),ih.calc(a),jh.calc(a));return b};qa.prototype.copy=function(a){H.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;bc.length- +2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(fi(d,e.x,f.x,g.x,c.x),fi(d,e.y,f.y,g.y,c.y));return b};ab.prototype.copy=function(a){H.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&& +this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;cb;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.282095);b.addScaledVector(e[1],.488603*d);b.addScaledVector(e[2],.488603*a);b.addScaledVector(e[3],.488603*c);b.addScaledVector(e[4],1.092548*c*d);b.addScaledVector(e[5],1.092548*d*a);b.addScaledVector(e[6],.315392*(3*a*a-1));b.addScaledVector(e[7], +1.092548*c*a);b.addScaledVector(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScaledVector(e[1],1.023328*d);b.addScaledVector(e[2],1.023328*a);b.addScaledVector(e[3],1.023328*c);b.addScaledVector(e[4],.858086*c*d);b.addScaledVector(e[5],.858086*d*a);b.addScaledVector(e[6],.743125*a*a-.247708);b.addScaledVector(e[7],.858086*c*a);b.addScaledVector(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b= +0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},addScaledSH:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].addScaledVector(a.coefficients[c],b);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)}, +clone:function(){return(new this.constructor).copy(this)},fromArray:function(a,b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(of,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548* +c*a;b[8]=.546274*(c*c-d*d)}});Ua.prototype=Object.assign(Object.create(S.prototype),{constructor:Ua,isLightProbe:!0,copy:function(a){S.prototype.copy.call(this,a);this.sh.copy(a.sh);return this},fromJSON:function(a){this.intensity=a.intensity;this.sh.fromArray(a.sh);return this},toJSON:function(a){a=S.prototype.toJSON.call(this,a);a.object.sh=this.sh.toArray();return a}});pf.prototype=Object.assign(Object.create(V.prototype),{constructor:pf,load:function(a,b,c,d){var e=this,f=new Ta(e.manager);f.setPath(e.path); +f.load(a,function(c){try{b(e.parse(JSON.parse(c)))}catch(h){d?d(h):console.error(h),e.manager.itemError(a)}},c,d)},parse:function(a){function b(a){void 0===c[a]&&console.warn("THREE.MaterialLoader: Undefined texture",a);return c[a]}var c=this.textures,d=new Sk[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color);void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.sheen&&(d.sheen=(new D).setHex(a.sheen)); +void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);void 0!==a.clearcoat&&(d.clearcoat=a.clearcoat);void 0!==a.clearcoatRoughness&&(d.clearcoatRoughness=a.clearcoatRoughness);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.flatShading&&(d.flatShading=a.flatShading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.combine&&(d.combine=a.combine);void 0!==a.side&&(d.side=a.side);void 0!==a.opacity&&(d.opacity= +a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite=a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.stencilWrite&&(d.stencilWrite=a.stencilWrite);void 0!==a.stencilWriteMask&&(d.stencilWriteMask=a.stencilWriteMask);void 0!==a.stencilFunc&&(d.stencilFunc=a.stencilFunc);void 0!==a.stencilRef&&(d.stencilRef=a.stencilRef);void 0!== +a.stencilFuncMask&&(d.stencilFuncMask=a.stencilFuncMask);void 0!==a.stencilFail&&(d.stencilFail=a.stencilFail);void 0!==a.stencilZFail&&(d.stencilZFail=a.stencilZFail);void 0!==a.stencilZPass&&(d.stencilZPass=a.stencilZPass);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&(d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.rotation&& +(d.rotation=a.rotation);1!==a.linewidth&&(d.linewidth=a.linewidth);void 0!==a.dashSize&&(d.dashSize=a.dashSize);void 0!==a.gapSize&&(d.gapSize=a.gapSize);void 0!==a.scale&&(d.scale=a.scale);void 0!==a.polygonOffset&&(d.polygonOffset=a.polygonOffset);void 0!==a.polygonOffsetFactor&&(d.polygonOffsetFactor=a.polygonOffsetFactor);void 0!==a.polygonOffsetUnits&&(d.polygonOffsetUnits=a.polygonOffsetUnits);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets); +void 0!==a.morphNormals&&(d.morphNormals=a.morphNormals);void 0!==a.dithering&&(d.dithering=a.dithering);void 0!==a.vertexTangents&&(d.vertexTangents=a.vertexTangents);void 0!==a.visible&&(d.visible=a.visible);void 0!==a.toneMapped&&(d.toneMapped=a.toneMapped);void 0!==a.userData&&(d.userData=a.userData);void 0!==a.vertexColors&&(d.vertexColors="number"===typeof a.vertexColors?0Number.EPSILON){if(0>k&&(g=b[f],l=-l,h=b[e],k=-k),!(a.yh.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=k*(a.x-g.x)-l*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d} +var e=sb.isClockWise,f=this.subPaths;if(0===f.length)return[];if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Nb;h.curves=g.curves;b.push(h);return b}var l=!e(f[0].getPoints());l=a?!l:l;h=[];var k=[],p=[],n=0;k[n]=void 0;p[n]=[];for(var t=0,r=f.length;td&&this._mixBufferRegion(c,a,b*this._origIndex,1-d,b);0=b){var p=b++,n=a[p];c[n.uuid]=m;a[m]=n;c[k]=p;a[p]=h;h=0;for(k=e;h!==k;++h){n=d[h];var t=n[m];n[m]=n[p];n[p]=t}}}this.nCachedObjects_=b},uncache:function(){for(var a=this._objects,b=a.length,c=this.nCachedObjects_,d=this._indicesByUUID,e=this._bindings,f=e.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,m=d[k];if(void 0!==m)if(delete d[k],mb||0===c)return;this._startTime= +null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0c.parameterPositions[1]&& +(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this.time+a,c=this._clip.duration,d=this.loop,e=this._loopCount,f=2202===d;if(0===a)return-1===e?b:f&&1===(e&1)?c-b:b;if(2200=== +d)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),b>=c)b=c;else if(0>b)b=0;else{this.time=b;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=b;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(b>=c||0>b){d=Math.floor(b/c);b-=c*d;e+=Math.abs(d);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0:this.enabled= +!1,this.time=b=0a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=b,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:d}))}else this.time=b;if(f&&1===(e&1))return c-b}return b},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd? +2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Hg.prototype=Object.assign(Object.create(ua.prototype),{constructor:Hg,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0=== +k&&(k={},h[g]=k);for(h=0;h!==e;++h){var m=d[h],p=m.name,n=k[p];if(void 0===n){n=f[h];if(void 0!==n){null===n._cacheIndex&&(++n.referenceCount,this._addInactiveBinding(n,g,p));continue}n=new Gg(Aa.create(c,p,b&&b._propertyBindings[h].binding.parsedPath),m.ValueTypeName,m.getValueSize());++n.referenceCount;this._addInactiveBinding(n,g,p)}f[h]=n;a[h].resultBuffer=n.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid, d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions= [];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}}, _isActiveAction:function(a){a=a._cacheIndex;return null!==a&&athis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a, -b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new z);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new z);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new z; -return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});Object.assign(xe.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)}, -copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new p);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new p);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)}, -at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new p);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new p,b=new p;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);c=b.dot(b);c=b.dot(a)/c;d&&(c=H.clamp(c,0,1));return c}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"), -c=new p);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ed.prototype=Object.create(D.prototype);ed.prototype.constructor=ed;ed.prototype.isImmediateRenderObject=!0;fd.prototype=Object.create(W.prototype);fd.prototype.constructor=fd;fd.prototype.update=function(){var a=new p,b=new p,c=new ra;return function(){var d=["a","b", -"c"];this.object.updateMatrixWorld(!0);c.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,f=this.geometry.attributes.position,g=this.object.geometry;if(g&&g.isGeometry)for(var h=g.vertices,k=g.faces,l=g=0,p=k.length;lMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);D.prototype.updateMatrixWorld.call(this,a)};var Nd,ye;Eb.prototype=Object.create(D.prototype);Eb.prototype.constructor=Eb;Eb.prototype.setDirection=function(){var a=new p,b;return function(c){.99999c.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();Eb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(0,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Eb.prototype.setColor=function(a){this.line.material.color.copy(a);this.cone.material.color.copy(a)};ld.prototype=Object.create(W.prototype); -ld.prototype.constructor=ld;L.create=function(a,b){console.log("THREE.Curve.create() has been deprecated");a.prototype=Object.create(L.prototype);a.prototype.constructor=a;a.prototype.getPoint=b;return a};Object.assign(Xa.prototype,{createPointsGeometry:function(a){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getPoints(a);return this.createGeometry(a)},createSpacedPointsGeometry:function(a){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead."); -a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var b=new R,c=0,d=a.length;cthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new v);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.x< +this.min.x||a.min.x>this.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new v);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return Ti.copy(a).clamp(this.min,this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a); +this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Ui=new p,Sf=new p;Object.assign(Mg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new p);return a.addVectors(this.start,this.end).multiplyScalar(.5)}, +delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),a=new p);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new p);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a,b){Ui.subVectors(a,this.start);Sf.subVectors(this.end, +this.start);a=Sf.dot(Sf);a=Sf.dot(Ui)/a;b&&(a=O.clamp(a,0,1));return a},closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new p);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});ne.prototype=Object.create(y.prototype); +ne.prototype.constructor=ne;ne.prototype.isImmediateRenderObject=!0;var Vi=new p;hd.prototype=Object.create(y.prototype);hd.prototype.constructor=hd;hd.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};hd.prototype.update=function(){this.light.updateMatrixWorld();var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b,b,a);Vi.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(Vi);void 0!==this.color? +this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var Tb=new p,Tf=new N,nh=new N;pc.prototype=Object.create(ma.prototype);pc.prototype.constructor=pc;pc.prototype.isSkeletonHelper=!0;pc.prototype.updateMatrixWorld=function(a){var b=this.bones,c=this.geometry,d=c.getAttribute("position");nh.getInverse(this.root.matrixWorld);for(var e=0,f=0;eMath.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);y.prototype.updateMatrixWorld.call(this,a)};var $i=new p,yf,Ng;xb.prototype=Object.create(y.prototype);xb.prototype.constructor=xb;xb.prototype.setDirection=function(a){.99999a.y?this.quaternion.set(1,0,0,0):($i.set(a.z, +0,-a.x).normalize(),this.quaternion.setFromAxisAngle($i,Math.acos(a.y)))};xb.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};xb.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};xb.prototype.copy=function(a){y.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone); +return this};xb.prototype.clone=function(){return(new this.constructor).copy(this)};re.prototype=Object.create(ma.prototype);re.prototype.constructor=re;var nb=Math.pow(2,8),aj=[.125,.215,.35,.446,.526,.582],bj=5+aj.length,mb={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},oh=new fd,ph=function(){for(var a=[],b=[],c=[],d=8,e=0;em;m++){var p=m%3*2/3-1,n=2n;n++)t=n%3,0==t?(b.up.set(0,c[n],0),b.lookAt(e[n],0,0)):1==t?(b.up.set(0,0,c[n]),b.lookAt(0,e[n],0)):(b.up.set(0,c[n],0),b.lookAt(0,0,e[n])),Rg(d,t*nb,2q;++q){var u=q/n;u=Math.exp(-u*u/2);e.push(u);0==q?r+=u:q b ? 1 : -1 } -},{}],235:[function(require,module,exports){ +},{}],252:[function(require,module,exports){ var applyProperties = require("./apply-properties") var isWidget = require("../vnode/is-widget.js") @@ -17063,7 +25681,7 @@ function replaceRoot(oldRoot, newRoot) { return newRoot; } -},{"../vnode/is-widget.js":247,"../vnode/vpatch.js":250,"./apply-properties":232,"./update-widget":237}],236:[function(require,module,exports){ +},{"../vnode/is-widget.js":264,"../vnode/vpatch.js":267,"./apply-properties":249,"./update-widget":254}],253:[function(require,module,exports){ var document = require("global/document") var isArray = require("x-is-array") @@ -17145,7 +25763,7 @@ function patchIndices(patches) { return indices } -},{"./create-element":233,"./dom-index":234,"./patch-op":235,"global/document":16,"x-is-array":272}],237:[function(require,module,exports){ +},{"./create-element":250,"./dom-index":251,"./patch-op":252,"global/document":16,"x-is-array":289}],254:[function(require,module,exports){ var isWidget = require("../vnode/is-widget.js") module.exports = updateWidget @@ -17162,7 +25780,7 @@ function updateWidget(a, b) { return false } -},{"../vnode/is-widget.js":247}],238:[function(require,module,exports){ +},{"../vnode/is-widget.js":264}],255:[function(require,module,exports){ 'use strict'; var EvStore = require('ev-store'); @@ -17191,7 +25809,7 @@ EvHook.prototype.unhook = function(node, propertyName) { es[propName] = undefined; }; -},{"ev-store":9}],239:[function(require,module,exports){ +},{"ev-store":9}],256:[function(require,module,exports){ 'use strict'; module.exports = SoftSetHook; @@ -17210,7 +25828,7 @@ SoftSetHook.prototype.hook = function (node, propertyName) { } }; -},{}],240:[function(require,module,exports){ +},{}],257:[function(require,module,exports){ 'use strict'; var isArray = require('x-is-array'); @@ -17349,7 +25967,7 @@ function errorString(obj) { } } -},{"../vnode/is-thunk":243,"../vnode/is-vhook":244,"../vnode/is-vnode":245,"../vnode/is-vtext":246,"../vnode/is-widget":247,"../vnode/vnode.js":249,"../vnode/vtext.js":251,"./hooks/ev-hook.js":238,"./hooks/soft-set-hook.js":239,"./parse-tag.js":241,"x-is-array":272}],241:[function(require,module,exports){ +},{"../vnode/is-thunk":260,"../vnode/is-vhook":261,"../vnode/is-vnode":262,"../vnode/is-vtext":263,"../vnode/is-widget":264,"../vnode/vnode.js":266,"../vnode/vtext.js":268,"./hooks/ev-hook.js":255,"./hooks/soft-set-hook.js":256,"./parse-tag.js":258,"x-is-array":289}],258:[function(require,module,exports){ 'use strict'; var split = require('browser-split'); @@ -17405,7 +26023,7 @@ function parseTag(tag, props) { return props.namespace ? tagName : tagName.toUpperCase(); } -},{"browser-split":5}],242:[function(require,module,exports){ +},{"browser-split":5}],259:[function(require,module,exports){ var isVNode = require("./is-vnode") var isVText = require("./is-vtext") var isWidget = require("./is-widget") @@ -17447,14 +26065,14 @@ function renderThunk(thunk, previous) { return renderedThunk } -},{"./is-thunk":243,"./is-vnode":245,"./is-vtext":246,"./is-widget":247}],243:[function(require,module,exports){ +},{"./is-thunk":260,"./is-vnode":262,"./is-vtext":263,"./is-widget":264}],260:[function(require,module,exports){ module.exports = isThunk function isThunk(t) { return t && t.type === "Thunk" } -},{}],244:[function(require,module,exports){ +},{}],261:[function(require,module,exports){ module.exports = isHook function isHook(hook) { @@ -17463,7 +26081,7 @@ function isHook(hook) { typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook")) } -},{}],245:[function(require,module,exports){ +},{}],262:[function(require,module,exports){ var version = require("./version") module.exports = isVirtualNode @@ -17472,7 +26090,7 @@ function isVirtualNode(x) { return x && x.type === "VirtualNode" && x.version === version } -},{"./version":248}],246:[function(require,module,exports){ +},{"./version":265}],263:[function(require,module,exports){ var version = require("./version") module.exports = isVirtualText @@ -17481,17 +26099,17 @@ function isVirtualText(x) { return x && x.type === "VirtualText" && x.version === version } -},{"./version":248}],247:[function(require,module,exports){ +},{"./version":265}],264:[function(require,module,exports){ module.exports = isWidget function isWidget(w) { return w && w.type === "Widget" } -},{}],248:[function(require,module,exports){ +},{}],265:[function(require,module,exports){ module.exports = "2" -},{}],249:[function(require,module,exports){ +},{}],266:[function(require,module,exports){ var version = require("./version") var isVNode = require("./is-vnode") var isWidget = require("./is-widget") @@ -17565,7 +26183,7 @@ function VirtualNode(tagName, properties, children, key, namespace) { VirtualNode.prototype.version = version VirtualNode.prototype.type = "VirtualNode" -},{"./is-thunk":243,"./is-vhook":244,"./is-vnode":245,"./is-widget":247,"./version":248}],250:[function(require,module,exports){ +},{"./is-thunk":260,"./is-vhook":261,"./is-vnode":262,"./is-widget":264,"./version":265}],267:[function(require,module,exports){ var version = require("./version") VirtualPatch.NONE = 0 @@ -17589,7 +26207,7 @@ function VirtualPatch(type, vNode, patch) { VirtualPatch.prototype.version = version VirtualPatch.prototype.type = "VirtualPatch" -},{"./version":248}],251:[function(require,module,exports){ +},{"./version":265}],268:[function(require,module,exports){ var version = require("./version") module.exports = VirtualText @@ -17601,7 +26219,7 @@ function VirtualText(text) { VirtualText.prototype.version = version VirtualText.prototype.type = "VirtualText" -},{"./version":248}],252:[function(require,module,exports){ +},{"./version":265}],269:[function(require,module,exports){ var isObject = require("is-object") var isHook = require("../vnode/is-vhook") @@ -17661,7 +26279,7 @@ function getPrototype(value) { } } -},{"../vnode/is-vhook":244,"is-object":20}],253:[function(require,module,exports){ +},{"../vnode/is-vhook":261,"is-object":20}],270:[function(require,module,exports){ var isArray = require("x-is-array") var VPatch = require("../vnode/vpatch") @@ -18090,7 +26708,7 @@ function appendPatch(apply, patch) { } } -},{"../vnode/handle-thunk":242,"../vnode/is-thunk":243,"../vnode/is-vnode":245,"../vnode/is-vtext":246,"../vnode/is-widget":247,"../vnode/vpatch":250,"./diff-props":252,"x-is-array":272}],254:[function(require,module,exports){ +},{"../vnode/handle-thunk":259,"../vnode/is-thunk":260,"../vnode/is-vnode":262,"../vnode/is-vtext":263,"../vnode/is-widget":264,"../vnode/vpatch":267,"./diff-props":269,"x-is-array":289}],271:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18109,7 +26727,7 @@ define(function (require) { }); })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); }); -},{"./Scheduler":255,"./env":267,"./makePromise":269}],255:[function(require,module,exports){ +},{"./Scheduler":272,"./env":284,"./makePromise":286}],272:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18191,7 +26809,7 @@ define(function() { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],256:[function(require,module,exports){ +},{}],273:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18219,7 +26837,7 @@ define(function() { return TimeoutError; }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],257:[function(require,module,exports){ +},{}],274:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18276,7 +26894,7 @@ define(function() { -},{}],258:[function(require,module,exports){ +},{}],275:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18577,7 +27195,7 @@ define(function(require) { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); -},{"../apply":257,"../state":270}],259:[function(require,module,exports){ +},{"../apply":274,"../state":287}],276:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18739,7 +27357,7 @@ define(function() { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],260:[function(require,module,exports){ +},{}],277:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18768,7 +27386,7 @@ define(function() { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],261:[function(require,module,exports){ +},{}],278:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18790,7 +27408,7 @@ define(function(require) { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); -},{"../state":270}],262:[function(require,module,exports){ +},{"../state":287}],279:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18857,7 +27475,7 @@ define(function() { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],263:[function(require,module,exports){ +},{}],280:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18883,7 +27501,7 @@ define(function() { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],264:[function(require,module,exports){ +},{}],281:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -18963,7 +27581,7 @@ define(function(require) { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); -},{"../TimeoutError":256,"../env":267}],265:[function(require,module,exports){ +},{"../TimeoutError":273,"../env":284}],282:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -19051,7 +27669,7 @@ define(function(require) { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); })); -},{"../env":267,"../format":268}],266:[function(require,module,exports){ +},{"../env":284,"../format":285}],283:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -19091,7 +27709,7 @@ define(function() { }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],267:[function(require,module,exports){ +},{}],284:[function(require,module,exports){ (function (process){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ @@ -19169,7 +27787,7 @@ define(function(require) { }).call(this,require('_process')) -},{"_process":6}],268:[function(require,module,exports){ +},{"_process":7}],285:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -19227,7 +27845,7 @@ define(function() { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],269:[function(require,module,exports){ +},{}],286:[function(require,module,exports){ (function (process){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ @@ -20187,7 +28805,7 @@ define(function() { }).call(this,require('_process')) -},{"_process":6}],270:[function(require,module,exports){ +},{"_process":7}],287:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ @@ -20224,7 +28842,7 @@ define(function() { }); }(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); })); -},{}],271:[function(require,module,exports){ +},{}],288:[function(require,module,exports){ /** @license MIT License (c) copyright 2010-2014 original author or authors */ /** @@ -20454,7 +29072,7 @@ define(function (require) { }); })(typeof define === 'function' && define.amd ? define : function (factory) { module.exports = factory(require); }); -},{"./lib/Promise":254,"./lib/TimeoutError":256,"./lib/apply":257,"./lib/decorators/array":258,"./lib/decorators/flow":259,"./lib/decorators/fold":260,"./lib/decorators/inspect":261,"./lib/decorators/iterate":262,"./lib/decorators/progress":263,"./lib/decorators/timed":264,"./lib/decorators/unhandledRejection":265,"./lib/decorators/with":266}],272:[function(require,module,exports){ +},{"./lib/Promise":271,"./lib/TimeoutError":273,"./lib/apply":274,"./lib/decorators/array":275,"./lib/decorators/flow":276,"./lib/decorators/fold":277,"./lib/decorators/inspect":278,"./lib/decorators/iterate":279,"./lib/decorators/progress":280,"./lib/decorators/timed":281,"./lib/decorators/unhandledRejection":282,"./lib/decorators/with":283}],289:[function(require,module,exports){ var nativeIsArray = Array.isArray var toString = Object.prototype.toString @@ -20464,335 +29082,441 @@ function isArray(obj) { return toString.call(obj) === "[object Array]" } -},{}],273:[function(require,module,exports){ +},{}],290:[function(require,module,exports){ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var APIv3_1 = require("./api/APIv3"); -exports.APIv3 = APIv3_1.APIv3; +Object.defineProperty(exports, "APIv3", { enumerable: true, get: function () { return APIv3_1.APIv3; } }); var ModelCreator_1 = require("./api/ModelCreator"); -exports.ModelCreator = ModelCreator_1.ModelCreator; - -},{"./api/APIv3":286,"./api/ModelCreator":287}],274:[function(require,module,exports){ -"use strict"; -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} +Object.defineProperty(exports, "ModelCreator", { enumerable: true, get: function () { return ModelCreator_1.ModelCreator; } }); +__exportStar(require("./api/interfaces/interfaces"), exports); + +},{"./api/APIv3":303,"./api/ModelCreator":304,"./api/interfaces/interfaces":305}],291:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageBoundary = void 0; var Component_1 = require("./component/Component"); -exports.Component = Component_1.Component; +Object.defineProperty(exports, "Component", { enumerable: true, get: function () { return Component_1.Component; } }); var ComponentService_1 = require("./component/ComponentService"); -exports.ComponentService = ComponentService_1.ComponentService; +Object.defineProperty(exports, "ComponentService", { enumerable: true, get: function () { return ComponentService_1.ComponentService; } }); var HandlerBase_1 = require("./component/utils/HandlerBase"); -exports.HandlerBase = HandlerBase_1.HandlerBase; +Object.defineProperty(exports, "HandlerBase", { enumerable: true, get: function () { return HandlerBase_1.HandlerBase; } }); var MeshFactory_1 = require("./component/utils/MeshFactory"); -exports.MeshFactory = MeshFactory_1.MeshFactory; +Object.defineProperty(exports, "MeshFactory", { enumerable: true, get: function () { return MeshFactory_1.MeshFactory; } }); var MeshScene_1 = require("./component/utils/MeshScene"); -exports.MeshScene = MeshScene_1.MeshScene; +Object.defineProperty(exports, "MeshScene", { enumerable: true, get: function () { return MeshScene_1.MeshScene; } }); var MouseOperator_1 = require("./component/utils/MouseOperator"); -exports.MouseOperator = MouseOperator_1.MouseOperator; +Object.defineProperty(exports, "MouseOperator", { enumerable: true, get: function () { return MouseOperator_1.MouseOperator; } }); +var ComponentSize_1 = require("./component/utils/ComponentSize"); +Object.defineProperty(exports, "ComponentSize", { enumerable: true, get: function () { return ComponentSize_1.ComponentSize; } }); var AttributionComponent_1 = require("./component/AttributionComponent"); -exports.AttributionComponent = AttributionComponent_1.AttributionComponent; +Object.defineProperty(exports, "AttributionComponent", { enumerable: true, get: function () { return AttributionComponent_1.AttributionComponent; } }); var BackgroundComponent_1 = require("./component/BackgroundComponent"); -exports.BackgroundComponent = BackgroundComponent_1.BackgroundComponent; +Object.defineProperty(exports, "BackgroundComponent", { enumerable: true, get: function () { return BackgroundComponent_1.BackgroundComponent; } }); var BearingComponent_1 = require("./component/BearingComponent"); -exports.BearingComponent = BearingComponent_1.BearingComponent; +Object.defineProperty(exports, "BearingComponent", { enumerable: true, get: function () { return BearingComponent_1.BearingComponent; } }); var CacheComponent_1 = require("./component/CacheComponent"); -exports.CacheComponent = CacheComponent_1.CacheComponent; +Object.defineProperty(exports, "CacheComponent", { enumerable: true, get: function () { return CacheComponent_1.CacheComponent; } }); var CoverComponent_1 = require("./component/CoverComponent"); -exports.CoverComponent = CoverComponent_1.CoverComponent; +Object.defineProperty(exports, "CoverComponent", { enumerable: true, get: function () { return CoverComponent_1.CoverComponent; } }); var DebugComponent_1 = require("./component/DebugComponent"); -exports.DebugComponent = DebugComponent_1.DebugComponent; +Object.defineProperty(exports, "DebugComponent", { enumerable: true, get: function () { return DebugComponent_1.DebugComponent; } }); var DirectionComponent_1 = require("./component/direction/DirectionComponent"); -exports.DirectionComponent = DirectionComponent_1.DirectionComponent; +Object.defineProperty(exports, "DirectionComponent", { enumerable: true, get: function () { return DirectionComponent_1.DirectionComponent; } }); var DirectionDOMCalculator_1 = require("./component/direction/DirectionDOMCalculator"); -exports.DirectionDOMCalculator = DirectionDOMCalculator_1.DirectionDOMCalculator; +Object.defineProperty(exports, "DirectionDOMCalculator", { enumerable: true, get: function () { return DirectionDOMCalculator_1.DirectionDOMCalculator; } }); var DirectionDOMRenderer_1 = require("./component/direction/DirectionDOMRenderer"); -exports.DirectionDOMRenderer = DirectionDOMRenderer_1.DirectionDOMRenderer; +Object.defineProperty(exports, "DirectionDOMRenderer", { enumerable: true, get: function () { return DirectionDOMRenderer_1.DirectionDOMRenderer; } }); var ImageComponent_1 = require("./component/ImageComponent"); -exports.ImageComponent = ImageComponent_1.ImageComponent; +Object.defineProperty(exports, "ImageComponent", { enumerable: true, get: function () { return ImageComponent_1.ImageComponent; } }); var KeyboardComponent_1 = require("./component/keyboard/KeyboardComponent"); -exports.KeyboardComponent = KeyboardComponent_1.KeyboardComponent; +Object.defineProperty(exports, "KeyboardComponent", { enumerable: true, get: function () { return KeyboardComponent_1.KeyboardComponent; } }); var KeyPlayHandler_1 = require("./component/keyboard/KeyPlayHandler"); -exports.KeyPlayHandler = KeyPlayHandler_1.KeyPlayHandler; +Object.defineProperty(exports, "KeyPlayHandler", { enumerable: true, get: function () { return KeyPlayHandler_1.KeyPlayHandler; } }); var KeyZoomHandler_1 = require("./component/keyboard/KeyZoomHandler"); -exports.KeyZoomHandler = KeyZoomHandler_1.KeyZoomHandler; +Object.defineProperty(exports, "KeyZoomHandler", { enumerable: true, get: function () { return KeyZoomHandler_1.KeyZoomHandler; } }); var KeySequenceNavigationHandler_1 = require("./component/keyboard/KeySequenceNavigationHandler"); -exports.KeySequenceNavigationHandler = KeySequenceNavigationHandler_1.KeySequenceNavigationHandler; +Object.defineProperty(exports, "KeySequenceNavigationHandler", { enumerable: true, get: function () { return KeySequenceNavigationHandler_1.KeySequenceNavigationHandler; } }); var KeySpatialNavigationHandler_1 = require("./component/keyboard/KeySpatialNavigationHandler"); -exports.KeySpatialNavigationHandler = KeySpatialNavigationHandler_1.KeySpatialNavigationHandler; +Object.defineProperty(exports, "KeySpatialNavigationHandler", { enumerable: true, get: function () { return KeySpatialNavigationHandler_1.KeySpatialNavigationHandler; } }); var LoadingComponent_1 = require("./component/LoadingComponent"); -exports.LoadingComponent = LoadingComponent_1.LoadingComponent; +Object.defineProperty(exports, "LoadingComponent", { enumerable: true, get: function () { return LoadingComponent_1.LoadingComponent; } }); var Marker_1 = require("./component/marker/marker/Marker"); -exports.Marker = Marker_1.Marker; +Object.defineProperty(exports, "Marker", { enumerable: true, get: function () { return Marker_1.Marker; } }); var MarkerComponent_1 = require("./component/marker/MarkerComponent"); -exports.MarkerComponent = MarkerComponent_1.MarkerComponent; +Object.defineProperty(exports, "MarkerComponent", { enumerable: true, get: function () { return MarkerComponent_1.MarkerComponent; } }); var MarkerScene_1 = require("./component/marker/MarkerScene"); -exports.MarkerScene = MarkerScene_1.MarkerScene; +Object.defineProperty(exports, "MarkerScene", { enumerable: true, get: function () { return MarkerScene_1.MarkerScene; } }); var MarkerSet_1 = require("./component/marker/MarkerSet"); -exports.MarkerSet = MarkerSet_1.MarkerSet; +Object.defineProperty(exports, "MarkerSet", { enumerable: true, get: function () { return MarkerSet_1.MarkerSet; } }); var MouseComponent_1 = require("./component/mouse/MouseComponent"); -exports.MouseComponent = MouseComponent_1.MouseComponent; +Object.defineProperty(exports, "MouseComponent", { enumerable: true, get: function () { return MouseComponent_1.MouseComponent; } }); +__exportStar(require("./component/mouse/HandlerTypes"), exports); var BounceHandler_1 = require("./component/mouse/BounceHandler"); -exports.BounceHandler = BounceHandler_1.BounceHandler; +Object.defineProperty(exports, "BounceHandler", { enumerable: true, get: function () { return BounceHandler_1.BounceHandler; } }); var DragPanHandler_1 = require("./component/mouse/DragPanHandler"); -exports.DragPanHandler = DragPanHandler_1.DragPanHandler; +Object.defineProperty(exports, "DragPanHandler", { enumerable: true, get: function () { return DragPanHandler_1.DragPanHandler; } }); var DoubleClickZoomHandler_1 = require("./component/mouse/DoubleClickZoomHandler"); -exports.DoubleClickZoomHandler = DoubleClickZoomHandler_1.DoubleClickZoomHandler; +Object.defineProperty(exports, "DoubleClickZoomHandler", { enumerable: true, get: function () { return DoubleClickZoomHandler_1.DoubleClickZoomHandler; } }); var EarthControlHandler_1 = require("./component/mouse/EarthControlHandler"); -exports.EarthControlHandler = EarthControlHandler_1.EarthControlHandler; +Object.defineProperty(exports, "EarthControlHandler", { enumerable: true, get: function () { return EarthControlHandler_1.EarthControlHandler; } }); var ScrollZoomHandler_1 = require("./component/mouse/ScrollZoomHandler"); -exports.ScrollZoomHandler = ScrollZoomHandler_1.ScrollZoomHandler; +Object.defineProperty(exports, "ScrollZoomHandler", { enumerable: true, get: function () { return ScrollZoomHandler_1.ScrollZoomHandler; } }); var TouchZoomHandler_1 = require("./component/mouse/TouchZoomHandler"); -exports.TouchZoomHandler = TouchZoomHandler_1.TouchZoomHandler; +Object.defineProperty(exports, "TouchZoomHandler", { enumerable: true, get: function () { return TouchZoomHandler_1.TouchZoomHandler; } }); var ImageBoundary = require("./component/mouse/ImageBoundary"); exports.ImageBoundary = ImageBoundary; var Popup_1 = require("./component/popup/popup/Popup"); -exports.Popup = Popup_1.Popup; +Object.defineProperty(exports, "Popup", { enumerable: true, get: function () { return Popup_1.Popup; } }); var PopupComponent_1 = require("./component/popup/PopupComponent"); -exports.PopupComponent = PopupComponent_1.PopupComponent; +Object.defineProperty(exports, "PopupComponent", { enumerable: true, get: function () { return PopupComponent_1.PopupComponent; } }); var NavigationComponent_1 = require("./component/NavigationComponent"); -exports.NavigationComponent = NavigationComponent_1.NavigationComponent; +Object.defineProperty(exports, "NavigationComponent", { enumerable: true, get: function () { return NavigationComponent_1.NavigationComponent; } }); var RouteComponent_1 = require("./component/RouteComponent"); -exports.RouteComponent = RouteComponent_1.RouteComponent; +Object.defineProperty(exports, "RouteComponent", { enumerable: true, get: function () { return RouteComponent_1.RouteComponent; } }); var SequenceComponent_1 = require("./component/sequence/SequenceComponent"); -exports.SequenceComponent = SequenceComponent_1.SequenceComponent; +Object.defineProperty(exports, "SequenceComponent", { enumerable: true, get: function () { return SequenceComponent_1.SequenceComponent; } }); var SequenceDOMRenderer_1 = require("./component/sequence/SequenceDOMRenderer"); -exports.SequenceDOMRenderer = SequenceDOMRenderer_1.SequenceDOMRenderer; +Object.defineProperty(exports, "SequenceDOMRenderer", { enumerable: true, get: function () { return SequenceDOMRenderer_1.SequenceDOMRenderer; } }); var SequenceMode_1 = require("./component/sequence/SequenceMode"); -exports.SequenceMode = SequenceMode_1.SequenceMode; +Object.defineProperty(exports, "SequenceMode", { enumerable: true, get: function () { return SequenceMode_1.SequenceMode; } }); var SpatialDataCache_1 = require("./component/spatialdata/SpatialDataCache"); -exports.SpatialDataCache = SpatialDataCache_1.SpatialDataCache; +Object.defineProperty(exports, "SpatialDataCache", { enumerable: true, get: function () { return SpatialDataCache_1.SpatialDataCache; } }); var SpatialDataComponent_1 = require("./component/spatialdata/SpatialDataComponent"); -exports.SpatialDataComponent = SpatialDataComponent_1.SpatialDataComponent; +Object.defineProperty(exports, "SpatialDataComponent", { enumerable: true, get: function () { return SpatialDataComponent_1.SpatialDataComponent; } }); var SpatialDataScene_1 = require("./component/spatialdata/SpatialDataScene"); -exports.SpatialDataScene = SpatialDataScene_1.SpatialDataScene; +Object.defineProperty(exports, "SpatialDataScene", { enumerable: true, get: function () { return SpatialDataScene_1.SpatialDataScene; } }); var ImagePlaneComponent_1 = require("./component/imageplane/ImagePlaneComponent"); -exports.ImagePlaneComponent = ImagePlaneComponent_1.ImagePlaneComponent; +Object.defineProperty(exports, "ImagePlaneComponent", { enumerable: true, get: function () { return ImagePlaneComponent_1.ImagePlaneComponent; } }); var ImagePlaneGLRenderer_1 = require("./component/imageplane/ImagePlaneGLRenderer"); -exports.ImagePlaneGLRenderer = ImagePlaneGLRenderer_1.ImagePlaneGLRenderer; +Object.defineProperty(exports, "ImagePlaneGLRenderer", { enumerable: true, get: function () { return ImagePlaneGLRenderer_1.ImagePlaneGLRenderer; } }); var Shaders_1 = require("./component/shaders/Shaders"); -exports.Shaders = Shaders_1.Shaders; +Object.defineProperty(exports, "Shaders", { enumerable: true, get: function () { return Shaders_1.Shaders; } }); var SimpleMarker_1 = require("./component/marker/marker/SimpleMarker"); -exports.SimpleMarker = SimpleMarker_1.SimpleMarker; +Object.defineProperty(exports, "SimpleMarker", { enumerable: true, get: function () { return SimpleMarker_1.SimpleMarker; } }); var CircleMarker_1 = require("./component/marker/marker/CircleMarker"); -exports.CircleMarker = CircleMarker_1.CircleMarker; +Object.defineProperty(exports, "CircleMarker", { enumerable: true, get: function () { return CircleMarker_1.CircleMarker; } }); var SliderComponent_1 = require("./component/slider/SliderComponent"); -exports.SliderComponent = SliderComponent_1.SliderComponent; +Object.defineProperty(exports, "SliderComponent", { enumerable: true, get: function () { return SliderComponent_1.SliderComponent; } }); var SliderDOMRenderer_1 = require("./component/slider/SliderDOMRenderer"); -exports.SliderDOMRenderer = SliderDOMRenderer_1.SliderDOMRenderer; +Object.defineProperty(exports, "SliderDOMRenderer", { enumerable: true, get: function () { return SliderDOMRenderer_1.SliderDOMRenderer; } }); var SliderGLRenderer_1 = require("./component/slider/SliderGLRenderer"); -exports.SliderGLRenderer = SliderGLRenderer_1.SliderGLRenderer; +Object.defineProperty(exports, "SliderGLRenderer", { enumerable: true, get: function () { return SliderGLRenderer_1.SliderGLRenderer; } }); var StatsComponent_1 = require("./component/StatsComponent"); -exports.StatsComponent = StatsComponent_1.StatsComponent; +Object.defineProperty(exports, "StatsComponent", { enumerable: true, get: function () { return StatsComponent_1.StatsComponent; } }); var TagHandlerBase_1 = require("./component/tag/handlers/TagHandlerBase"); -exports.TagHandlerBase = TagHandlerBase_1.TagHandlerBase; +Object.defineProperty(exports, "TagHandlerBase", { enumerable: true, get: function () { return TagHandlerBase_1.TagHandlerBase; } }); var CreateHandlerBase_1 = require("./component/tag/handlers/CreateHandlerBase"); -exports.CreateHandlerBase = CreateHandlerBase_1.CreateHandlerBase; +Object.defineProperty(exports, "CreateHandlerBase", { enumerable: true, get: function () { return CreateHandlerBase_1.CreateHandlerBase; } }); var CreatePointHandler_1 = require("./component/tag/handlers/CreatePointHandler"); -exports.CreatePointHandler = CreatePointHandler_1.CreatePointHandler; +Object.defineProperty(exports, "CreatePointHandler", { enumerable: true, get: function () { return CreatePointHandler_1.CreatePointHandler; } }); var CreateVertexHandler_1 = require("./component/tag/handlers/CreateVertexHandler"); -exports.CreateVertexHandler = CreateVertexHandler_1.CreateVertexHandler; +Object.defineProperty(exports, "CreateVertexHandler", { enumerable: true, get: function () { return CreateVertexHandler_1.CreateVertexHandler; } }); +var CreatePointsHandler_1 = require("./component/tag/handlers/CreatePointsHandler"); +Object.defineProperty(exports, "CreatePointsHandler", { enumerable: true, get: function () { return CreatePointsHandler_1.CreatePointsHandler; } }); var CreatePolygonHandler_1 = require("./component/tag/handlers/CreatePolygonHandler"); -exports.CreatePolygonHandler = CreatePolygonHandler_1.CreatePolygonHandler; +Object.defineProperty(exports, "CreatePolygonHandler", { enumerable: true, get: function () { return CreatePolygonHandler_1.CreatePolygonHandler; } }); var CreateRectHandler_1 = require("./component/tag/handlers/CreateRectHandler"); -exports.CreateRectHandler = CreateRectHandler_1.CreateRectHandler; +Object.defineProperty(exports, "CreateRectHandler", { enumerable: true, get: function () { return CreateRectHandler_1.CreateRectHandler; } }); var CreateRectDragHandler_1 = require("./component/tag/handlers/CreateRectDragHandler"); -exports.CreateRectDragHandler = CreateRectDragHandler_1.CreateRectDragHandler; +Object.defineProperty(exports, "CreateRectDragHandler", { enumerable: true, get: function () { return CreateRectDragHandler_1.CreateRectDragHandler; } }); var EditVertexHandler_1 = require("./component/tag/handlers/EditVertexHandler"); -exports.EditVertexHandler = EditVertexHandler_1.EditVertexHandler; +Object.defineProperty(exports, "EditVertexHandler", { enumerable: true, get: function () { return EditVertexHandler_1.EditVertexHandler; } }); var Tag_1 = require("./component/tag/tag/Tag"); -exports.Tag = Tag_1.Tag; +Object.defineProperty(exports, "Tag", { enumerable: true, get: function () { return Tag_1.Tag; } }); var OutlineTag_1 = require("./component/tag/tag/OutlineTag"); -exports.OutlineTag = OutlineTag_1.OutlineTag; +Object.defineProperty(exports, "OutlineTag", { enumerable: true, get: function () { return OutlineTag_1.OutlineTag; } }); +var ExtremePointTag_1 = require("./component/tag/tag/ExtremePointTag"); +Object.defineProperty(exports, "ExtremePointTag", { enumerable: true, get: function () { return ExtremePointTag_1.ExtremePointTag; } }); var RenderTag_1 = require("./component/tag/tag/RenderTag"); -exports.RenderTag = RenderTag_1.RenderTag; +Object.defineProperty(exports, "RenderTag", { enumerable: true, get: function () { return RenderTag_1.RenderTag; } }); +var OutlineRenderTagBase_1 = require("./component/tag/tag/OutlineRenderTagBase"); +Object.defineProperty(exports, "OutlineRenderTagBase", { enumerable: true, get: function () { return OutlineRenderTagBase_1.OutlineRenderTagBase; } }); var OutlineRenderTag_1 = require("./component/tag/tag/OutlineRenderTag"); -exports.OutlineRenderTag = OutlineRenderTag_1.OutlineRenderTag; -var OutlineCreateTag_1 = require("./component/tag/tag/OutlineCreateTag"); -exports.OutlineCreateTag = OutlineCreateTag_1.OutlineCreateTag; +Object.defineProperty(exports, "OutlineRenderTag", { enumerable: true, get: function () { return OutlineRenderTag_1.OutlineRenderTag; } }); +var ExtremePointRenderTag_1 = require("./component/tag/tag/ExtremePointRenderTag"); +Object.defineProperty(exports, "ExtremePointRenderTag", { enumerable: true, get: function () { return ExtremePointRenderTag_1.ExtremePointRenderTag; } }); var SpotTag_1 = require("./component/tag/tag/SpotTag"); -exports.SpotTag = SpotTag_1.SpotTag; +Object.defineProperty(exports, "SpotTag", { enumerable: true, get: function () { return SpotTag_1.SpotTag; } }); var SpotRenderTag_1 = require("./component/tag/tag/SpotRenderTag"); -exports.SpotRenderTag = SpotRenderTag_1.SpotRenderTag; +Object.defineProperty(exports, "SpotRenderTag", { enumerable: true, get: function () { return SpotRenderTag_1.SpotRenderTag; } }); var TagDomain_1 = require("./component/tag/tag/TagDomain"); -exports.TagDomain = TagDomain_1.TagDomain; +Object.defineProperty(exports, "TagDomain", { enumerable: true, get: function () { return TagDomain_1.TagDomain; } }); var TagComponent_1 = require("./component/tag/TagComponent"); -exports.TagComponent = TagComponent_1.TagComponent; +Object.defineProperty(exports, "TagComponent", { enumerable: true, get: function () { return TagComponent_1.TagComponent; } }); var TagCreator_1 = require("./component/tag/TagCreator"); -exports.TagCreator = TagCreator_1.TagCreator; +Object.defineProperty(exports, "TagCreator", { enumerable: true, get: function () { return TagCreator_1.TagCreator; } }); var TagDOMRenderer_1 = require("./component/tag/TagDOMRenderer"); -exports.TagDOMRenderer = TagDOMRenderer_1.TagDOMRenderer; +Object.defineProperty(exports, "TagDOMRenderer", { enumerable: true, get: function () { return TagDOMRenderer_1.TagDOMRenderer; } }); var TagMode_1 = require("./component/tag/TagMode"); -exports.TagMode = TagMode_1.TagMode; +Object.defineProperty(exports, "TagMode", { enumerable: true, get: function () { return TagMode_1.TagMode; } }); var TagOperation_1 = require("./component/tag/TagOperation"); -exports.TagOperation = TagOperation_1.TagOperation; +Object.defineProperty(exports, "TagOperation", { enumerable: true, get: function () { return TagOperation_1.TagOperation; } }); var TagScene_1 = require("./component/tag/TagScene"); -exports.TagScene = TagScene_1.TagScene; +Object.defineProperty(exports, "TagScene", { enumerable: true, get: function () { return TagScene_1.TagScene; } }); var TagSet_1 = require("./component/tag/TagSet"); -exports.TagSet = TagSet_1.TagSet; +Object.defineProperty(exports, "TagSet", { enumerable: true, get: function () { return TagSet_1.TagSet; } }); var Geometry_1 = require("./component/tag/geometry/Geometry"); -exports.Geometry = Geometry_1.Geometry; +Object.defineProperty(exports, "Geometry", { enumerable: true, get: function () { return Geometry_1.Geometry; } }); var VertexGeometry_1 = require("./component/tag/geometry/VertexGeometry"); -exports.VertexGeometry = VertexGeometry_1.VertexGeometry; +Object.defineProperty(exports, "VertexGeometry", { enumerable: true, get: function () { return VertexGeometry_1.VertexGeometry; } }); var RectGeometry_1 = require("./component/tag/geometry/RectGeometry"); -exports.RectGeometry = RectGeometry_1.RectGeometry; +Object.defineProperty(exports, "RectGeometry", { enumerable: true, get: function () { return RectGeometry_1.RectGeometry; } }); var PointGeometry_1 = require("./component/tag/geometry/PointGeometry"); -exports.PointGeometry = PointGeometry_1.PointGeometry; +Object.defineProperty(exports, "PointGeometry", { enumerable: true, get: function () { return PointGeometry_1.PointGeometry; } }); +var PointsGeometry_1 = require("./component/tag/geometry/PointsGeometry"); +Object.defineProperty(exports, "PointsGeometry", { enumerable: true, get: function () { return PointsGeometry_1.PointsGeometry; } }); var PolygonGeometry_1 = require("./component/tag/geometry/PolygonGeometry"); -exports.PolygonGeometry = PolygonGeometry_1.PolygonGeometry; +Object.defineProperty(exports, "PolygonGeometry", { enumerable: true, get: function () { return PolygonGeometry_1.PolygonGeometry; } }); var GeometryTagError_1 = require("./component/tag/error/GeometryTagError"); -exports.GeometryTagError = GeometryTagError_1.GeometryTagError; +Object.defineProperty(exports, "GeometryTagError", { enumerable: true, get: function () { return GeometryTagError_1.GeometryTagError; } }); var ZoomComponent_1 = require("./component/zoom/ZoomComponent"); -exports.ZoomComponent = ZoomComponent_1.ZoomComponent; -__export(require("./component/interfaces/interfaces")); - -},{"./component/AttributionComponent":288,"./component/BackgroundComponent":289,"./component/BearingComponent":290,"./component/CacheComponent":291,"./component/Component":292,"./component/ComponentService":293,"./component/CoverComponent":294,"./component/DebugComponent":295,"./component/ImageComponent":296,"./component/LoadingComponent":297,"./component/NavigationComponent":298,"./component/RouteComponent":299,"./component/StatsComponent":300,"./component/direction/DirectionComponent":301,"./component/direction/DirectionDOMCalculator":302,"./component/direction/DirectionDOMRenderer":303,"./component/imageplane/ImagePlaneComponent":304,"./component/imageplane/ImagePlaneGLRenderer":305,"./component/interfaces/interfaces":308,"./component/keyboard/KeyPlayHandler":309,"./component/keyboard/KeySequenceNavigationHandler":310,"./component/keyboard/KeySpatialNavigationHandler":311,"./component/keyboard/KeyZoomHandler":312,"./component/keyboard/KeyboardComponent":313,"./component/marker/MarkerComponent":315,"./component/marker/MarkerScene":316,"./component/marker/MarkerSet":317,"./component/marker/marker/CircleMarker":318,"./component/marker/marker/Marker":319,"./component/marker/marker/SimpleMarker":320,"./component/mouse/BounceHandler":321,"./component/mouse/DoubleClickZoomHandler":322,"./component/mouse/DragPanHandler":323,"./component/mouse/EarthControlHandler":324,"./component/mouse/ImageBoundary":325,"./component/mouse/MouseComponent":326,"./component/mouse/ScrollZoomHandler":327,"./component/mouse/TouchZoomHandler":328,"./component/popup/PopupComponent":330,"./component/popup/popup/Popup":331,"./component/sequence/SequenceComponent":332,"./component/sequence/SequenceDOMRenderer":333,"./component/sequence/SequenceMode":334,"./component/shaders/Shaders":335,"./component/slider/SliderComponent":336,"./component/slider/SliderDOMRenderer":337,"./component/slider/SliderGLRenderer":338,"./component/spatialdata/SpatialDataCache":339,"./component/spatialdata/SpatialDataComponent":340,"./component/spatialdata/SpatialDataScene":341,"./component/tag/TagComponent":343,"./component/tag/TagCreator":344,"./component/tag/TagDOMRenderer":345,"./component/tag/TagMode":346,"./component/tag/TagOperation":347,"./component/tag/TagScene":348,"./component/tag/TagSet":349,"./component/tag/error/GeometryTagError":350,"./component/tag/geometry/Geometry":351,"./component/tag/geometry/PointGeometry":352,"./component/tag/geometry/PolygonGeometry":353,"./component/tag/geometry/RectGeometry":354,"./component/tag/geometry/VertexGeometry":355,"./component/tag/handlers/CreateHandlerBase":356,"./component/tag/handlers/CreatePointHandler":357,"./component/tag/handlers/CreatePolygonHandler":358,"./component/tag/handlers/CreateRectDragHandler":359,"./component/tag/handlers/CreateRectHandler":360,"./component/tag/handlers/CreateVertexHandler":361,"./component/tag/handlers/EditVertexHandler":362,"./component/tag/handlers/TagHandlerBase":363,"./component/tag/tag/OutlineCreateTag":364,"./component/tag/tag/OutlineRenderTag":365,"./component/tag/tag/OutlineTag":366,"./component/tag/tag/RenderTag":367,"./component/tag/tag/SpotRenderTag":368,"./component/tag/tag/SpotTag":369,"./component/tag/tag/Tag":370,"./component/tag/tag/TagDomain":371,"./component/utils/HandlerBase":372,"./component/utils/MeshFactory":373,"./component/utils/MeshScene":374,"./component/utils/MouseOperator":375,"./component/zoom/ZoomComponent":376}],275:[function(require,module,exports){ -"use strict"; +Object.defineProperty(exports, "ZoomComponent", { enumerable: true, get: function () { return ZoomComponent_1.ZoomComponent; } }); +var CreateTag_1 = require("./component/tag/tag/CreateTag"); +Object.defineProperty(exports, "CreateTag", { enumerable: true, get: function () { return CreateTag_1.CreateTag; } }); +var OutlineCreateTag_1 = require("./component/tag/tag/OutlineCreateTag"); +Object.defineProperty(exports, "OutlineCreateTag", { enumerable: true, get: function () { return OutlineCreateTag_1.OutlineCreateTag; } }); +var ExtremePointCreateTag_1 = require("./component/tag/tag/ExtremePointCreateTag"); +Object.defineProperty(exports, "ExtremePointCreateTag", { enumerable: true, get: function () { return ExtremePointCreateTag_1.ExtremePointCreateTag; } }); +__exportStar(require("./component/interfaces/interfaces"), exports); + +},{"./component/AttributionComponent":306,"./component/BackgroundComponent":307,"./component/BearingComponent":308,"./component/CacheComponent":309,"./component/Component":310,"./component/ComponentService":311,"./component/CoverComponent":312,"./component/DebugComponent":313,"./component/ImageComponent":314,"./component/LoadingComponent":315,"./component/NavigationComponent":316,"./component/RouteComponent":317,"./component/StatsComponent":318,"./component/direction/DirectionComponent":319,"./component/direction/DirectionDOMCalculator":320,"./component/direction/DirectionDOMRenderer":321,"./component/imageplane/ImagePlaneComponent":322,"./component/imageplane/ImagePlaneGLRenderer":323,"./component/interfaces/interfaces":327,"./component/keyboard/KeyPlayHandler":328,"./component/keyboard/KeySequenceNavigationHandler":329,"./component/keyboard/KeySpatialNavigationHandler":330,"./component/keyboard/KeyZoomHandler":331,"./component/keyboard/KeyboardComponent":332,"./component/marker/MarkerComponent":334,"./component/marker/MarkerScene":335,"./component/marker/MarkerSet":336,"./component/marker/marker/CircleMarker":338,"./component/marker/marker/Marker":339,"./component/marker/marker/SimpleMarker":340,"./component/mouse/BounceHandler":341,"./component/mouse/DoubleClickZoomHandler":342,"./component/mouse/DragPanHandler":343,"./component/mouse/EarthControlHandler":344,"./component/mouse/HandlerTypes":345,"./component/mouse/ImageBoundary":346,"./component/mouse/MouseComponent":347,"./component/mouse/ScrollZoomHandler":348,"./component/mouse/TouchZoomHandler":349,"./component/popup/PopupComponent":351,"./component/popup/popup/Popup":352,"./component/sequence/SequenceComponent":353,"./component/sequence/SequenceDOMRenderer":354,"./component/sequence/SequenceMode":355,"./component/shaders/Shaders":356,"./component/slider/SliderComponent":357,"./component/slider/SliderDOMRenderer":358,"./component/slider/SliderGLRenderer":359,"./component/spatialdata/SpatialDataCache":362,"./component/spatialdata/SpatialDataComponent":363,"./component/spatialdata/SpatialDataScene":364,"./component/tag/TagComponent":367,"./component/tag/TagCreator":368,"./component/tag/TagDOMRenderer":369,"./component/tag/TagMode":370,"./component/tag/TagOperation":371,"./component/tag/TagScene":372,"./component/tag/TagSet":373,"./component/tag/error/GeometryTagError":374,"./component/tag/geometry/Geometry":375,"./component/tag/geometry/PointGeometry":376,"./component/tag/geometry/PointsGeometry":377,"./component/tag/geometry/PolygonGeometry":378,"./component/tag/geometry/RectGeometry":379,"./component/tag/geometry/VertexGeometry":380,"./component/tag/handlers/CreateHandlerBase":381,"./component/tag/handlers/CreatePointHandler":382,"./component/tag/handlers/CreatePointsHandler":383,"./component/tag/handlers/CreatePolygonHandler":384,"./component/tag/handlers/CreateRectDragHandler":385,"./component/tag/handlers/CreateRectHandler":386,"./component/tag/handlers/CreateVertexHandler":387,"./component/tag/handlers/EditVertexHandler":388,"./component/tag/handlers/TagHandlerBase":389,"./component/tag/tag/CreateTag":391,"./component/tag/tag/ExtremePointCreateTag":392,"./component/tag/tag/ExtremePointRenderTag":393,"./component/tag/tag/ExtremePointTag":394,"./component/tag/tag/OutlineCreateTag":395,"./component/tag/tag/OutlineRenderTag":396,"./component/tag/tag/OutlineRenderTagBase":397,"./component/tag/tag/OutlineTag":398,"./component/tag/tag/RenderTag":399,"./component/tag/tag/SpotRenderTag":400,"./component/tag/tag/SpotTag":401,"./component/tag/tag/Tag":402,"./component/tag/tag/TagDomain":403,"./component/utils/ComponentSize":404,"./component/utils/HandlerBase":405,"./component/utils/MeshFactory":406,"./component/utils/MeshScene":407,"./component/utils/MouseOperator":408,"./component/zoom/ZoomComponent":409}],292:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var EdgeDirection_1 = require("./graph/edge/EdgeDirection"); -exports.EdgeDirection = EdgeDirection_1.EdgeDirection; +Object.defineProperty(exports, "EdgeDirection", { enumerable: true, get: function () { return EdgeDirection_1.EdgeDirection; } }); var EdgeCalculatorSettings_1 = require("./graph/edge/EdgeCalculatorSettings"); -exports.EdgeCalculatorSettings = EdgeCalculatorSettings_1.EdgeCalculatorSettings; +Object.defineProperty(exports, "EdgeCalculatorSettings", { enumerable: true, get: function () { return EdgeCalculatorSettings_1.EdgeCalculatorSettings; } }); var EdgeCalculatorDirections_1 = require("./graph/edge/EdgeCalculatorDirections"); -exports.EdgeCalculatorDirections = EdgeCalculatorDirections_1.EdgeCalculatorDirections; +Object.defineProperty(exports, "EdgeCalculatorDirections", { enumerable: true, get: function () { return EdgeCalculatorDirections_1.EdgeCalculatorDirections; } }); var EdgeCalculatorCoefficients_1 = require("./graph/edge/EdgeCalculatorCoefficients"); -exports.EdgeCalculatorCoefficients = EdgeCalculatorCoefficients_1.EdgeCalculatorCoefficients; +Object.defineProperty(exports, "EdgeCalculatorCoefficients", { enumerable: true, get: function () { return EdgeCalculatorCoefficients_1.EdgeCalculatorCoefficients; } }); var EdgeCalculator_1 = require("./graph/edge/EdgeCalculator"); -exports.EdgeCalculator = EdgeCalculator_1.EdgeCalculator; +Object.defineProperty(exports, "EdgeCalculator", { enumerable: true, get: function () { return EdgeCalculator_1.EdgeCalculator; } }); +__exportStar(require("./graph/edge/interfaces/interfaces"), exports); -},{"./graph/edge/EdgeCalculator":398,"./graph/edge/EdgeCalculatorCoefficients":399,"./graph/edge/EdgeCalculatorDirections":400,"./graph/edge/EdgeCalculatorSettings":401,"./graph/edge/EdgeDirection":402}],276:[function(require,module,exports){ +},{"./graph/edge/EdgeCalculator":433,"./graph/edge/EdgeCalculatorCoefficients":434,"./graph/edge/EdgeCalculatorDirections":435,"./graph/edge/EdgeCalculatorSettings":436,"./graph/edge/EdgeDirection":437,"./graph/edge/interfaces/interfaces":438}],293:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var AbortMapillaryError_1 = require("./error/AbortMapillaryError"); -exports.AbortMapillaryError = AbortMapillaryError_1.AbortMapillaryError; +Object.defineProperty(exports, "AbortMapillaryError", { enumerable: true, get: function () { return AbortMapillaryError_1.AbortMapillaryError; } }); var ArgumentMapillaryError_1 = require("./error/ArgumentMapillaryError"); -exports.ArgumentMapillaryError = ArgumentMapillaryError_1.ArgumentMapillaryError; +Object.defineProperty(exports, "ArgumentMapillaryError", { enumerable: true, get: function () { return ArgumentMapillaryError_1.ArgumentMapillaryError; } }); var GraphMapillaryError_1 = require("./error/GraphMapillaryError"); -exports.GraphMapillaryError = GraphMapillaryError_1.GraphMapillaryError; +Object.defineProperty(exports, "GraphMapillaryError", { enumerable: true, get: function () { return GraphMapillaryError_1.GraphMapillaryError; } }); var MapillaryError_1 = require("./error/MapillaryError"); -exports.MapillaryError = MapillaryError_1.MapillaryError; - -},{"./error/AbortMapillaryError":377,"./error/ArgumentMapillaryError":378,"./error/GraphMapillaryError":379,"./error/MapillaryError":380}],277:[function(require,module,exports){ -"use strict"; +Object.defineProperty(exports, "MapillaryError", { enumerable: true, get: function () { return MapillaryError_1.MapillaryError; } }); + +},{"./error/AbortMapillaryError":410,"./error/ArgumentMapillaryError":411,"./error/GraphMapillaryError":412,"./error/MapillaryError":413}],294:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Lines = exports.Geo = void 0; var Camera_1 = require("./geo/Camera"); -exports.Camera = Camera_1.Camera; +Object.defineProperty(exports, "Camera", { enumerable: true, get: function () { return Camera_1.Camera; } }); var GeoCoords_1 = require("./geo/GeoCoords"); -exports.GeoCoords = GeoCoords_1.GeoCoords; +Object.defineProperty(exports, "GeoCoords", { enumerable: true, get: function () { return GeoCoords_1.GeoCoords; } }); +var GeoRBush_1 = require("./geo/GeoRBush"); +Object.defineProperty(exports, "GeoRBush", { enumerable: true, get: function () { return GeoRBush_1.GeoRBush; } }); var ViewportCoords_1 = require("./geo/ViewportCoords"); -exports.ViewportCoords = ViewportCoords_1.ViewportCoords; +Object.defineProperty(exports, "ViewportCoords", { enumerable: true, get: function () { return ViewportCoords_1.ViewportCoords; } }); var Spatial_1 = require("./geo/Spatial"); -exports.Spatial = Spatial_1.Spatial; +Object.defineProperty(exports, "Spatial", { enumerable: true, get: function () { return Spatial_1.Spatial; } }); var Transform_1 = require("./geo/Transform"); -exports.Transform = Transform_1.Transform; +Object.defineProperty(exports, "Transform", { enumerable: true, get: function () { return Transform_1.Transform; } }); +__exportStar(require("./geo/interfaces/interfaces"), exports); var Geo = require("./geo/Geo"); exports.Geo = Geo; var Lines = require("./geo/Lines"); exports.Lines = Lines; -},{"./geo/Camera":381,"./geo/Geo":382,"./geo/GeoCoords":383,"./geo/Lines":384,"./geo/Spatial":385,"./geo/Transform":386,"./geo/ViewportCoords":387}],278:[function(require,module,exports){ -"use strict"; +},{"./geo/Camera":414,"./geo/Geo":415,"./geo/GeoCoords":416,"./geo/GeoRBush":417,"./geo/Lines":418,"./geo/Spatial":419,"./geo/Transform":420,"./geo/ViewportCoords":421,"./geo/interfaces/interfaces":422}],295:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var FilterCreator_1 = require("./graph/FilterCreator"); -exports.FilterCreator = FilterCreator_1.FilterCreator; +Object.defineProperty(exports, "FilterCreator", { enumerable: true, get: function () { return FilterCreator_1.FilterCreator; } }); var Graph_1 = require("./graph/Graph"); -exports.Graph = Graph_1.Graph; +Object.defineProperty(exports, "Graph", { enumerable: true, get: function () { return Graph_1.Graph; } }); var GraphCalculator_1 = require("./graph/GraphCalculator"); -exports.GraphCalculator = GraphCalculator_1.GraphCalculator; +Object.defineProperty(exports, "GraphCalculator", { enumerable: true, get: function () { return GraphCalculator_1.GraphCalculator; } }); var GraphMode_1 = require("./graph/GraphMode"); -exports.GraphMode = GraphMode_1.GraphMode; +Object.defineProperty(exports, "GraphMode", { enumerable: true, get: function () { return GraphMode_1.GraphMode; } }); var GraphService_1 = require("./graph/GraphService"); -exports.GraphService = GraphService_1.GraphService; +Object.defineProperty(exports, "GraphService", { enumerable: true, get: function () { return GraphService_1.GraphService; } }); var ImageLoadingService_1 = require("./graph/ImageLoadingService"); -exports.ImageLoadingService = ImageLoadingService_1.ImageLoadingService; +Object.defineProperty(exports, "ImageLoadingService", { enumerable: true, get: function () { return ImageLoadingService_1.ImageLoadingService; } }); var MeshReader_1 = require("./graph/MeshReader"); -exports.MeshReader = MeshReader_1.MeshReader; +Object.defineProperty(exports, "MeshReader", { enumerable: true, get: function () { return MeshReader_1.MeshReader; } }); var Node_1 = require("./graph/Node"); -exports.Node = Node_1.Node; +Object.defineProperty(exports, "Node", { enumerable: true, get: function () { return Node_1.Node; } }); var NodeCache_1 = require("./graph/NodeCache"); -exports.NodeCache = NodeCache_1.NodeCache; +Object.defineProperty(exports, "NodeCache", { enumerable: true, get: function () { return NodeCache_1.NodeCache; } }); var Sequence_1 = require("./graph/Sequence"); -exports.Sequence = Sequence_1.Sequence; +Object.defineProperty(exports, "Sequence", { enumerable: true, get: function () { return Sequence_1.Sequence; } }); +__exportStar(require("./graph/interfaces/interfaces"), exports); -},{"./graph/FilterCreator":388,"./graph/Graph":389,"./graph/GraphCalculator":390,"./graph/GraphMode":391,"./graph/GraphService":392,"./graph/ImageLoadingService":393,"./graph/MeshReader":394,"./graph/Node":395,"./graph/NodeCache":396,"./graph/Sequence":397}],279:[function(require,module,exports){ +},{"./graph/FilterCreator":423,"./graph/Graph":424,"./graph/GraphCalculator":425,"./graph/GraphMode":426,"./graph/GraphService":427,"./graph/ImageLoadingService":428,"./graph/MeshReader":429,"./graph/Node":430,"./graph/NodeCache":431,"./graph/Sequence":432,"./graph/interfaces/interfaces":439}],296:[function(require,module,exports){ "use strict"; /** * MapillaryJS is a WebGL JavaScript library for exploring street level imagery * @name Mapillary */ -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); -__export(require("./Support")); +exports.SpatialDataComponent = exports.PopupComponent = exports.MarkerComponent = exports.TagComponent = void 0; +__exportStar(require("./Support"), exports); var Edge_1 = require("./Edge"); -exports.EdgeDirection = Edge_1.EdgeDirection; +Object.defineProperty(exports, "EdgeDirection", { enumerable: true, get: function () { return Edge_1.EdgeDirection; } }); var Error_1 = require("./Error"); -exports.AbortMapillaryError = Error_1.AbortMapillaryError; +Object.defineProperty(exports, "AbortMapillaryError", { enumerable: true, get: function () { return Error_1.AbortMapillaryError; } }); var Render_1 = require("./Render"); -exports.RenderMode = Render_1.RenderMode; +Object.defineProperty(exports, "RenderMode", { enumerable: true, get: function () { return Render_1.RenderMode; } }); var State_1 = require("./State"); -exports.TransitionMode = State_1.TransitionMode; +Object.defineProperty(exports, "TransitionMode", { enumerable: true, get: function () { return State_1.TransitionMode; } }); var Viewer_1 = require("./Viewer"); -exports.Alignment = Viewer_1.Alignment; -exports.ImageSize = Viewer_1.ImageSize; -exports.Viewer = Viewer_1.Viewer; +Object.defineProperty(exports, "Alignment", { enumerable: true, get: function () { return Viewer_1.Alignment; } }); +Object.defineProperty(exports, "ImageSize", { enumerable: true, get: function () { return Viewer_1.ImageSize; } }); +Object.defineProperty(exports, "Viewer", { enumerable: true, get: function () { return Viewer_1.Viewer; } }); var Component_1 = require("./Component"); -exports.SliderMode = Component_1.SliderMode; +Object.defineProperty(exports, "SliderMode", { enumerable: true, get: function () { return Component_1.SliderMode; } }); +Object.defineProperty(exports, "ComponentSize", { enumerable: true, get: function () { return Component_1.ComponentSize; } }); var TagComponent = require("./component/tag/Tag"); exports.TagComponent = TagComponent; var MarkerComponent = require("./component/marker/Marker"); exports.MarkerComponent = MarkerComponent; var PopupComponent = require("./component/popup/Popup"); exports.PopupComponent = PopupComponent; +var SpatialDataComponent = require("./component/spatialdata/SpatialData"); +exports.SpatialDataComponent = SpatialDataComponent; -},{"./Component":274,"./Edge":275,"./Error":276,"./Render":280,"./State":281,"./Support":282,"./Viewer":285,"./component/marker/Marker":314,"./component/popup/Popup":329,"./component/tag/Tag":342}],280:[function(require,module,exports){ -"use strict"; +},{"./Component":291,"./Edge":292,"./Error":293,"./Render":297,"./State":298,"./Support":299,"./Viewer":302,"./component/marker/Marker":333,"./component/popup/Popup":350,"./component/spatialdata/SpatialData":361,"./component/tag/Tag":366}],297:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var DOMRenderer_1 = require("./render/DOMRenderer"); -exports.DOMRenderer = DOMRenderer_1.DOMRenderer; +Object.defineProperty(exports, "DOMRenderer", { enumerable: true, get: function () { return DOMRenderer_1.DOMRenderer; } }); var GLRenderer_1 = require("./render/GLRenderer"); -exports.GLRenderer = GLRenderer_1.GLRenderer; +Object.defineProperty(exports, "GLRenderer", { enumerable: true, get: function () { return GLRenderer_1.GLRenderer; } }); var GLRenderStage_1 = require("./render/GLRenderStage"); -exports.GLRenderStage = GLRenderStage_1.GLRenderStage; +Object.defineProperty(exports, "GLRenderStage", { enumerable: true, get: function () { return GLRenderStage_1.GLRenderStage; } }); var RenderCamera_1 = require("./render/RenderCamera"); -exports.RenderCamera = RenderCamera_1.RenderCamera; +Object.defineProperty(exports, "RenderCamera", { enumerable: true, get: function () { return RenderCamera_1.RenderCamera; } }); var RenderMode_1 = require("./render/RenderMode"); -exports.RenderMode = RenderMode_1.RenderMode; +Object.defineProperty(exports, "RenderMode", { enumerable: true, get: function () { return RenderMode_1.RenderMode; } }); var RenderService_1 = require("./render/RenderService"); -exports.RenderService = RenderService_1.RenderService; - -},{"./render/DOMRenderer":403,"./render/GLRenderStage":404,"./render/GLRenderer":405,"./render/RenderCamera":406,"./render/RenderMode":407,"./render/RenderService":408}],281:[function(require,module,exports){ -"use strict"; +Object.defineProperty(exports, "RenderService", { enumerable: true, get: function () { return RenderService_1.RenderService; } }); +__exportStar(require("./render/interfaces/interfaces"), exports); + +},{"./render/DOMRenderer":440,"./render/GLRenderStage":441,"./render/GLRenderer":442,"./render/RenderCamera":443,"./render/RenderMode":444,"./render/RenderService":445,"./render/interfaces/interfaces":446}],298:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var FrameGenerator_1 = require("./state/FrameGenerator"); -exports.FrameGenerator = FrameGenerator_1.FrameGenerator; +Object.defineProperty(exports, "FrameGenerator", { enumerable: true, get: function () { return FrameGenerator_1.FrameGenerator; } }); var RotationDelta_1 = require("./state/RotationDelta"); -exports.RotationDelta = RotationDelta_1.RotationDelta; +Object.defineProperty(exports, "RotationDelta", { enumerable: true, get: function () { return RotationDelta_1.RotationDelta; } }); var State_1 = require("./state/State"); -exports.State = State_1.State; +Object.defineProperty(exports, "State", { enumerable: true, get: function () { return State_1.State; } }); var StateBase_1 = require("./state/states/StateBase"); -exports.StateBase = StateBase_1.StateBase; +Object.defineProperty(exports, "StateBase", { enumerable: true, get: function () { return StateBase_1.StateBase; } }); var StateContext_1 = require("./state/StateContext"); -exports.StateContext = StateContext_1.StateContext; +Object.defineProperty(exports, "StateContext", { enumerable: true, get: function () { return StateContext_1.StateContext; } }); var StateService_1 = require("./state/StateService"); -exports.StateService = StateService_1.StateService; +Object.defineProperty(exports, "StateService", { enumerable: true, get: function () { return StateService_1.StateService; } }); var TransitionMode_1 = require("./state/TransitionMode"); -exports.TransitionMode = TransitionMode_1.TransitionMode; +Object.defineProperty(exports, "TransitionMode", { enumerable: true, get: function () { return TransitionMode_1.TransitionMode; } }); var EarthState_1 = require("./state/states/EarthState"); -exports.EarthState = EarthState_1.EarthState; +Object.defineProperty(exports, "EarthState", { enumerable: true, get: function () { return EarthState_1.EarthState; } }); var InteractiveStateBase_1 = require("./state/states/InteractiveStateBase"); -exports.InteractiveStateBase = InteractiveStateBase_1.InteractiveStateBase; +Object.defineProperty(exports, "InteractiveStateBase", { enumerable: true, get: function () { return InteractiveStateBase_1.InteractiveStateBase; } }); var InteractiveWaitingState_1 = require("./state/states/InteractiveWaitingState"); -exports.InteractiveWaitingState = InteractiveWaitingState_1.InteractiveWaitingState; +Object.defineProperty(exports, "InteractiveWaitingState", { enumerable: true, get: function () { return InteractiveWaitingState_1.InteractiveWaitingState; } }); var TraversingState_1 = require("./state/states/TraversingState"); -exports.TraversingState = TraversingState_1.TraversingState; +Object.defineProperty(exports, "TraversingState", { enumerable: true, get: function () { return TraversingState_1.TraversingState; } }); var WaitingState_1 = require("./state/states/WaitingState"); -exports.WaitingState = WaitingState_1.WaitingState; +Object.defineProperty(exports, "WaitingState", { enumerable: true, get: function () { return WaitingState_1.WaitingState; } }); +__exportStar(require("./state/interfaces/interfaces"), exports); -},{"./state/FrameGenerator":409,"./state/RotationDelta":410,"./state/State":411,"./state/StateContext":412,"./state/StateService":413,"./state/TransitionMode":414,"./state/states/EarthState":415,"./state/states/InteractiveStateBase":416,"./state/states/InteractiveWaitingState":417,"./state/states/StateBase":418,"./state/states/TraversingState":419,"./state/states/WaitingState":420}],282:[function(require,module,exports){ +},{"./state/FrameGenerator":447,"./state/RotationDelta":448,"./state/State":449,"./state/StateContext":450,"./state/StateService":451,"./state/TransitionMode":452,"./state/interfaces/interfaces":453,"./state/states/EarthState":454,"./state/states/InteractiveStateBase":455,"./state/states/InteractiveWaitingState":456,"./state/states/StateBase":457,"./state/states/TraversingState":458,"./state/states/WaitingState":459}],299:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.isFallbackSupported = exports.isSupported = void 0; var support = require("./utils/Support"); /** * Test whether the current browser supports the full @@ -20830,71 +29554,101 @@ function isFallbackSupported() { } exports.isFallbackSupported = isFallbackSupported; -},{"./utils/Support":428}],283:[function(require,module,exports){ -"use strict"; +},{"./utils/Support":468}],300:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var ImageTileLoader_1 = require("./tiles/ImageTileLoader"); -exports.ImageTileLoader = ImageTileLoader_1.ImageTileLoader; +Object.defineProperty(exports, "ImageTileLoader", { enumerable: true, get: function () { return ImageTileLoader_1.ImageTileLoader; } }); var ImageTileStore_1 = require("./tiles/ImageTileStore"); -exports.ImageTileStore = ImageTileStore_1.ImageTileStore; +Object.defineProperty(exports, "ImageTileStore", { enumerable: true, get: function () { return ImageTileStore_1.ImageTileStore; } }); var TextureProvider_1 = require("./tiles/TextureProvider"); -exports.TextureProvider = TextureProvider_1.TextureProvider; +Object.defineProperty(exports, "TextureProvider", { enumerable: true, get: function () { return TextureProvider_1.TextureProvider; } }); var RegionOfInterestCalculator_1 = require("./tiles/RegionOfInterestCalculator"); -exports.RegionOfInterestCalculator = RegionOfInterestCalculator_1.RegionOfInterestCalculator; - -},{"./tiles/ImageTileLoader":421,"./tiles/ImageTileStore":422,"./tiles/RegionOfInterestCalculator":423,"./tiles/TextureProvider":424}],284:[function(require,module,exports){ -"use strict"; -function __export(m) { - for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; -} +Object.defineProperty(exports, "RegionOfInterestCalculator", { enumerable: true, get: function () { return RegionOfInterestCalculator_1.RegionOfInterestCalculator; } }); +__exportStar(require("./tiles/interfaces/interfaces"), exports); + +},{"./tiles/ImageTileLoader":460,"./tiles/ImageTileStore":461,"./tiles/RegionOfInterestCalculator":462,"./tiles/TextureProvider":463,"./tiles/interfaces/interfaces":464}],301:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var DOM_1 = require("./utils/DOM"); -exports.DOM = DOM_1.DOM; +Object.defineProperty(exports, "DOM", { enumerable: true, get: function () { return DOM_1.DOM; } }); var EventEmitter_1 = require("./utils/EventEmitter"); -exports.EventEmitter = EventEmitter_1.EventEmitter; +Object.defineProperty(exports, "EventEmitter", { enumerable: true, get: function () { return EventEmitter_1.EventEmitter; } }); var Settings_1 = require("./utils/Settings"); -exports.Settings = Settings_1.Settings; -__export(require("./utils/Support")); +Object.defineProperty(exports, "Settings", { enumerable: true, get: function () { return Settings_1.Settings; } }); +__exportStar(require("./utils/Support"), exports); var Urls_1 = require("./utils/Urls"); -exports.Urls = Urls_1.Urls; - -},{"./utils/DOM":425,"./utils/EventEmitter":426,"./utils/Settings":427,"./utils/Support":428,"./utils/Urls":429}],285:[function(require,module,exports){ -"use strict"; +Object.defineProperty(exports, "Urls", { enumerable: true, get: function () { return Urls_1.Urls; } }); + +},{"./utils/DOM":465,"./utils/EventEmitter":466,"./utils/Settings":467,"./utils/Support":468,"./utils/Urls":469}],302:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var Alignment_1 = require("./viewer/Alignment"); -exports.Alignment = Alignment_1.Alignment; +Object.defineProperty(exports, "Alignment", { enumerable: true, get: function () { return Alignment_1.Alignment; } }); var CacheService_1 = require("./viewer/CacheService"); -exports.CacheService = CacheService_1.CacheService; +Object.defineProperty(exports, "CacheService", { enumerable: true, get: function () { return CacheService_1.CacheService; } }); var ComponentController_1 = require("./viewer/ComponentController"); -exports.ComponentController = ComponentController_1.ComponentController; +Object.defineProperty(exports, "ComponentController", { enumerable: true, get: function () { return ComponentController_1.ComponentController; } }); var Container_1 = require("./viewer/Container"); -exports.Container = Container_1.Container; +Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return Container_1.Container; } }); var Observer_1 = require("./viewer/Observer"); -exports.Observer = Observer_1.Observer; +Object.defineProperty(exports, "Observer", { enumerable: true, get: function () { return Observer_1.Observer; } }); var ImageSize_1 = require("./viewer/ImageSize"); -exports.ImageSize = ImageSize_1.ImageSize; +Object.defineProperty(exports, "ImageSize", { enumerable: true, get: function () { return ImageSize_1.ImageSize; } }); var KeyboardService_1 = require("./viewer/KeyboardService"); -exports.KeyboardService = KeyboardService_1.KeyboardService; +Object.defineProperty(exports, "KeyboardService", { enumerable: true, get: function () { return KeyboardService_1.KeyboardService; } }); var LoadingService_1 = require("./viewer/LoadingService"); -exports.LoadingService = LoadingService_1.LoadingService; +Object.defineProperty(exports, "LoadingService", { enumerable: true, get: function () { return LoadingService_1.LoadingService; } }); var MouseService_1 = require("./viewer/MouseService"); -exports.MouseService = MouseService_1.MouseService; +Object.defineProperty(exports, "MouseService", { enumerable: true, get: function () { return MouseService_1.MouseService; } }); var Navigator_1 = require("./viewer/Navigator"); -exports.Navigator = Navigator_1.Navigator; +Object.defineProperty(exports, "Navigator", { enumerable: true, get: function () { return Navigator_1.Navigator; } }); var PlayService_1 = require("./viewer/PlayService"); -exports.PlayService = PlayService_1.PlayService; +Object.defineProperty(exports, "PlayService", { enumerable: true, get: function () { return PlayService_1.PlayService; } }); var Projection_1 = require("./viewer/Projection"); -exports.Projection = Projection_1.Projection; +Object.defineProperty(exports, "Projection", { enumerable: true, get: function () { return Projection_1.Projection; } }); var SpriteService_1 = require("./viewer/SpriteService"); -exports.SpriteService = SpriteService_1.SpriteService; +Object.defineProperty(exports, "SpriteService", { enumerable: true, get: function () { return SpriteService_1.SpriteService; } }); var TouchService_1 = require("./viewer/TouchService"); -exports.TouchService = TouchService_1.TouchService; +Object.defineProperty(exports, "TouchService", { enumerable: true, get: function () { return TouchService_1.TouchService; } }); var Viewer_1 = require("./viewer/Viewer"); -exports.Viewer = Viewer_1.Viewer; +Object.defineProperty(exports, "Viewer", { enumerable: true, get: function () { return Viewer_1.Viewer; } }); +__exportStar(require("./viewer/interfaces/interfaces"), exports); -},{"./viewer/Alignment":430,"./viewer/CacheService":431,"./viewer/ComponentController":432,"./viewer/Container":433,"./viewer/ImageSize":434,"./viewer/KeyboardService":435,"./viewer/LoadingService":436,"./viewer/MouseService":437,"./viewer/Navigator":438,"./viewer/Observer":439,"./viewer/PlayService":440,"./viewer/Projection":441,"./viewer/SpriteService":442,"./viewer/TouchService":443,"./viewer/Viewer":444}],286:[function(require,module,exports){ +},{"./viewer/Alignment":470,"./viewer/CacheService":471,"./viewer/ComponentController":472,"./viewer/Container":473,"./viewer/ImageSize":474,"./viewer/KeyboardService":475,"./viewer/LoadingService":476,"./viewer/MouseService":477,"./viewer/Navigator":478,"./viewer/Observer":479,"./viewer/PlayService":481,"./viewer/Projection":482,"./viewer/SpriteService":483,"./viewer/TouchService":484,"./viewer/Viewer":485,"./viewer/interfaces/interfaces":486}],303:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.APIv3 = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var API_1 = require("../API"); @@ -20944,8 +29698,11 @@ var APIv3 = /** @class */ (function () { ]; this._propertiesSpatial = [ "atomic_scale", + "cluster_key", + "c_rotation", "ca", "calt", + "camera_projection_type", "cca", "cfocal", "ck1", @@ -20954,7 +29711,6 @@ var APIv3 = /** @class */ (function () { "height", "merge_cc", "merge_version", - "c_rotation", "orientation", "width", ]; @@ -20962,6 +29718,13 @@ var APIv3 = /** @class */ (function () { "username", ]; } + Object.defineProperty(APIv3.prototype, "clientId", { + get: function () { + return this._clientId; + }, + enumerable: false, + configurable: true + }); APIv3.prototype.imageByKeyFill$ = function (keys) { return this._catchInvalidateGet$(this._wrapModelResponse$(this._model.get([ this._pathImageByKey, @@ -21072,13 +29835,6 @@ var APIv3 = /** @class */ (function () { APIv3.prototype.sequenceViewAdd$ = function (sequenceKeys) { return this._catchInvalidateCall$(this._wrapCallModelResponse$(this._model.call([this._pathSequenceViewAdd], [sequenceKeys])), this._pathSequenceViewAdd, sequenceKeys); }; - Object.defineProperty(APIv3.prototype, "clientId", { - get: function () { - return this._clientId; - }, - enumerable: true, - configurable: true - }); APIv3.prototype._catchInvalidateGet$ = function (observable, path, paths) { var _this = this; return observable.pipe(operators_1.catchError(function (error) { @@ -21121,9 +29877,10 @@ var APIv3 = /** @class */ (function () { exports.APIv3 = APIv3; exports.default = APIv3; -},{"../API":273,"rxjs":26,"rxjs/operators":224}],287:[function(require,module,exports){ +},{"../API":290,"rxjs":43,"rxjs/operators":241}],304:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ModelCreator = void 0; var falcor = require("falcor"); var falcor_http_datasource_1 = require("falcor-http-datasource"); var Utils_1 = require("../Utils"); @@ -21164,7 +29921,11 @@ var ModelCreator = /** @class */ (function () { exports.ModelCreator = ModelCreator; exports.default = ModelCreator; -},{"../Utils":284,"falcor":15,"falcor-http-datasource":10}],288:[function(require,module,exports){ +},{"../Utils":301,"falcor":15,"falcor-http-datasource":10}],305:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],306:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21172,7 +29933,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21180,6 +29941,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.AttributionComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -21231,7 +29993,7 @@ exports.AttributionComponent = AttributionComponent; Component_1.ComponentService.register(AttributionComponent); exports.default = AttributionComponent; -},{"../Component":274,"../Utils":284,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],289:[function(require,module,exports){ +},{"../Component":291,"../Utils":301,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],307:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21239,7 +30001,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21247,6 +30009,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.BackgroundComponent = void 0; var vd = require("virtual-dom"); var Component_1 = require("../Component"); var BackgroundComponent = /** @class */ (function (_super) { @@ -21277,7 +30040,7 @@ exports.BackgroundComponent = BackgroundComponent; Component_1.ComponentService.register(BackgroundComponent); exports.default = BackgroundComponent; -},{"../Component":274,"virtual-dom":230}],290:[function(require,module,exports){ +},{"../Component":291,"virtual-dom":247}],308:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21285,7 +30048,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21293,17 +30056,41 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.BearingComponent = void 0; var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); +var UnitBezier = require("@mapbox/unitbezier"); +var rxjs_1 = require("rxjs"); var Component_1 = require("../Component"); var Geo_1 = require("../Geo"); +var ViewportCoords_1 = require("../geo/ViewportCoords"); +var ComponentSize_1 = require("./utils/ComponentSize"); +/** + * @class BearingComponent + * + * @classdesc Component for indicating bearing and field of view. + * + * @example + * ``` + * var viewer = new Mapillary.Viewer( + * "", + * "", + * ""); + * + * var bearingComponent = viewer.getComponent("bearing"); + * bearingComponent.configure({ size: Mapillary.ComponentSize.Small }); + * ``` + */ var BearingComponent = /** @class */ (function (_super) { __extends(BearingComponent, _super); function BearingComponent(name, container, navigator) { var _this = _super.call(this, name, container, navigator) || this; _this._spatial = new Geo_1.Spatial(); + _this._viewportCoords = new ViewportCoords_1.default(); _this._svgNamespace = "http://www.w3.org/2000/svg"; _this._distinctThreshold = Math.PI / 360; + _this._animationSpeed = 0.075; + _this._unitBezier = new UnitBezier(0.74, 0.67, 0.38, 0.96); return _this; } BearingComponent.prototype._activate = function () { @@ -21318,17 +30105,110 @@ var BearingComponent = /** @class */ (function (_super) { return Math.abs(a2[0] - a1[0]) < _this._distinctThreshold && Math.abs(a2[1] - a1[1]) < _this._distinctThreshold; })); - this._renderSubscription = cameraBearingFov$.pipe(operators_1.map(function (_a) { - var bearing = _a[0], fov = _a[1]; - var background = vd.h("div.BearingIndicatorBackground", {}, []); - var backgroundCircle = vd.h("div.BearingIndicatorBackgroundCircle", {}, []); - var north = _this._createNorth(bearing); - var cameraSector = _this._createCircleSectorCompass(_this._createCircleSector(Math.max(Math.PI / 20, fov), "#FFF")); + var nodeFov$ = rxjs_1.combineLatest(this._navigator.stateService.currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (frame) { + return frame.state.currentNode.key; + })), this._navigator.panService.panNodes$).pipe(operators_1.map(function (_a) { + var frame = _a[0], panNodes = _a[1]; + var node = frame.state.currentNode; + var transform = frame.state.currentTransform; + if (node.pano) { + var panoHFov = 2 * Math.PI * node.gpano.CroppedAreaImageWidthPixels / node.gpano.FullPanoWidthPixels; + return [panoHFov / 2, panoHFov / 2]; + } + var currentProjectedPoints = _this._computeProjectedPoints(transform); + var hFov = _this._spatial.degToRad(_this._computeHorizontalFov(currentProjectedPoints)); + var hFovLeft = hFov / 2; + var hFovRight = hFov / 2; + for (var _i = 0, panNodes_1 = panNodes; _i < panNodes_1.length; _i++) { + var _b = panNodes_1[_i], n = _b[0], f = _b[2]; + var diff = _this._spatial.wrap(n.ca - node.ca, -180, 180); + if (diff < 0) { + hFovLeft = _this._spatial.degToRad(Math.abs(diff)) + f / 2; + } + else { + hFovRight = _this._spatial.degToRad(Math.abs(diff)) + f / 2; + } + } + return [hFovLeft, hFovRight]; + }), operators_1.distinctUntilChanged(function (_a, _b) { + var hFovLeft1 = _a[0], hFovRight1 = _a[1]; + var hFovLeft2 = _b[0], hFovRight2 = _b[1]; + return Math.abs(hFovLeft2 - hFovLeft1) < _this._distinctThreshold && + Math.abs(hFovRight2 - hFovRight1) < _this._distinctThreshold; + })); + var offset$ = rxjs_1.combineLatest(this._navigator.stateService.currentState$.pipe(operators_1.distinctUntilChanged(undefined, function (frame) { + return frame.state.currentNode.key; + })), this._container.renderService.bearing$).pipe(operators_1.map(function (_a) { + var frame = _a[0], bearing = _a[1]; + var offset = _this._spatial.degToRad(frame.state.currentNode.ca - bearing); + return offset; + })); + var nodeFovOperation$ = new rxjs_1.Subject(); + var smoothNodeFov$ = nodeFovOperation$.pipe(operators_1.scan(function (state, operation) { + return operation(state); + }, { alpha: 0, curr: [0, 0, 0], prev: [0, 0, 0] }), operators_1.map(function (state) { + var alpha = _this._unitBezier.solve(state.alpha); + var curr = state.curr; + var prev = state.prev; + return [ + _this._interpolate(prev[0], curr[0], alpha), + _this._interpolate(prev[1], curr[1], alpha), + ]; + })); + this._fovSubscription = nodeFov$.pipe(operators_1.map(function (nbf) { + return function (state) { + var a = _this._unitBezier.solve(state.alpha); + var c = state.curr; + var p = state.prev; + var prev = [ + _this._interpolate(p[0], c[0], a), + _this._interpolate(p[1], c[1], a), + ]; + var curr = nbf.slice(); + return { + alpha: 0, + curr: curr, + prev: prev, + }; + }; + })) + .subscribe(nodeFovOperation$); + this._fovAnimationSubscription = nodeFov$.pipe(operators_1.switchMap(function () { + return _this._container.renderService.renderCameraFrame$.pipe(operators_1.skip(1), operators_1.scan(function (alpha) { + return alpha + _this._animationSpeed; + }, 0), operators_1.takeWhile(function (alpha) { + return alpha <= 1 + _this._animationSpeed; + }), operators_1.map(function (alpha) { + return Math.min(alpha, 1); + })); + }), operators_1.map(function (alpha) { + return function (nbfState) { + return { + alpha: alpha, + curr: nbfState.curr.slice(), + prev: nbfState.prev.slice(), + }; + }; + })) + .subscribe(nodeFovOperation$); + var nodeBearingFov$ = rxjs_1.combineLatest(offset$, smoothNodeFov$).pipe(operators_1.map(function (_a) { + var offset = _a[0], fov = _a[1]; + return [offset, fov[0], fov[1]]; + })); + this._renderSubscription = rxjs_1.combineLatest(cameraBearingFov$, nodeBearingFov$, this._configuration$, this._container.renderService.size$).pipe(operators_1.map(function (_a) { + var _b = _a[0], cb = _b[0], cf = _b[1], _c = _a[1], no = _c[0], nfl = _c[1], nfr = _c[2], configuration = _a[2], size = _a[3]; + var background = _this._createBackground(cb); + var fovIndicator = _this._createFovIndicator(nfl, nfr, no); + var north = _this._createNorth(cb); + var cameraSector = _this._createCircleSectorCompass(_this._createCircleSector(Math.max(Math.PI / 20, cf), "#FFF")); + var compact = configuration.size === ComponentSize_1.default.Small || + configuration.size === ComponentSize_1.default.Automatic && size.width < 640 ? + ".BearingCompact" : ""; return { name: _this._name, - vnode: vd.h("div.BearingIndicatorContainer", { oncontextmenu: function (event) { event.preventDefault(); } }, [ + vnode: vd.h("div.BearingIndicatorContainer" + compact, { oncontextmenu: function (event) { event.preventDefault(); } }, [ background, - backgroundCircle, + fovIndicator, north, cameraSector, ]), @@ -21338,9 +30218,66 @@ var BearingComponent = /** @class */ (function (_super) { }; BearingComponent.prototype._deactivate = function () { this._renderSubscription.unsubscribe(); + this._fovSubscription.unsubscribe(); + this._fovAnimationSubscription.unsubscribe(); }; BearingComponent.prototype._getDefaultConfiguration = function () { - return {}; + return { size: ComponentSize_1.default.Automatic }; + }; + BearingComponent.prototype._createFovIndicator = function (fovLeft, fovRigth, offset) { + var arc = this._createFovArc(fovLeft, fovRigth); + var group = vd.h("g", { + attributes: { transform: "translate(18,18)" }, + namespace: this._svgNamespace, + }, [arc]); + var svg = vd.h("svg", { + attributes: { viewBox: "0 0 36 36" }, + namespace: this._svgNamespace, + style: { + height: "36px", + left: "2px", + position: "absolute", + top: "2px", + transform: "rotateZ(" + this._spatial.radToDeg(offset) + "deg)", + width: "36px", + }, + }, [group]); + return svg; + }; + BearingComponent.prototype._createFovArc = function (fovLeft, fovRigth) { + var radius = 16.75; + var strokeWidth = 2.5; + var fov = fovLeft + fovRigth; + if (fov > 2 * Math.PI - Math.PI / 90) { + return vd.h("circle", { + attributes: { + cx: "0", + cy: "0", + "fill-opacity": "0", + r: "" + radius, + stroke: "#FFF", + "stroke-width": "" + strokeWidth, + }, + namespace: this._svgNamespace, + }, []); + } + var arcStart = -Math.PI / 2 - fovLeft; + var arcEnd = arcStart + fov; + var startX = radius * Math.cos(arcStart); + var startY = radius * Math.sin(arcStart); + var endX = radius * Math.cos(arcEnd); + var endY = radius * Math.sin(arcEnd); + var largeArc = fov >= Math.PI ? 1 : 0; + var description = "M " + startX + " " + startY + " A " + radius + " " + radius + " 0 " + largeArc + " 1 " + endX + " " + endY; + return vd.h("path", { + attributes: { + d: description, + "fill-opacity": "0", + stroke: "#FFF", + "stroke-width": "" + strokeWidth, + }, + namespace: this._svgNamespace, + }, []); }; BearingComponent.prototype._createCircleSectorCompass = function (cameraSector) { var group = vd.h("g", { @@ -21351,11 +30288,11 @@ var BearingComponent = /** @class */ (function (_super) { attributes: { viewBox: "0 0 2 2" }, namespace: this._svgNamespace, style: { - height: "30px", - left: "4px", + height: "26px", + left: "7px", position: "absolute", - top: "4px", - width: "30px", + top: "7px", + width: "26px", }, }, [group]); return svg; @@ -21382,9 +30319,38 @@ var BearingComponent = /** @class */ (function (_super) { }; BearingComponent.prototype._createNorth = function (bearing) { var north = vd.h("div.BearingNorth", []); - var container = vd.h("div.BearingNorthContainer", { style: { transform: "rotateZ(" + -bearing * 180 / Math.PI + "deg)" } }, [north]); + var container = vd.h("div.BearingNorthContainer", { style: { transform: "rotateZ(" + this._spatial.radToDeg(-bearing) + "deg)" } }, [north]); return container; }; + BearingComponent.prototype._createBackground = function (bearing) { + return vd.h("div.BearingIndicatorBackground", { style: { transform: "rotateZ(" + this._spatial.radToDeg(-bearing) + "deg)" } }, [ + vd.h("div.BearingIndicatorBackgroundCircle", []), + vd.h("div.BearingIndicatorBackgroundArrowContainer", [ + vd.h("div.BearingIndicatorBackgroundArrow", []), + ]), + ]); + }; + BearingComponent.prototype._computeProjectedPoints = function (transform) { + var vertices = [[1, 0]]; + var directions = [[0, 0.5]]; + var pointsPerLine = 12; + return Geo_1.Geo.computeProjectedPoints(transform, vertices, directions, pointsPerLine, this._viewportCoords); + }; + BearingComponent.prototype._computeHorizontalFov = function (projectedPoints) { + var _this = this; + var fovs = projectedPoints + .map(function (projectedPoint) { + return _this._coordToFov(projectedPoint[0]); + }); + var fov = Math.min.apply(Math, fovs); + return fov; + }; + BearingComponent.prototype._coordToFov = function (x) { + return this._spatial.radToDeg(2 * Math.atan(x)); + }; + BearingComponent.prototype._interpolate = function (x1, x2, alpha) { + return (1 - alpha) * x1 + alpha * x2; + }; BearingComponent.componentName = "bearing"; return BearingComponent; }(Component_1.Component)); @@ -21392,7 +30358,8 @@ exports.BearingComponent = BearingComponent; Component_1.ComponentService.register(BearingComponent); exports.default = BearingComponent; -},{"../Component":274,"../Geo":277,"rxjs/operators":224,"virtual-dom":230}],291:[function(require,module,exports){ + +},{"../Component":291,"../Geo":294,"../geo/ViewportCoords":421,"./utils/ComponentSize":404,"@mapbox/unitbezier":2,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],309:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21400,7 +30367,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21408,6 +30375,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CacheComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Edge_1 = require("../Edge"); @@ -21514,7 +30482,7 @@ exports.CacheComponent = CacheComponent; Component_1.ComponentService.register(CacheComponent); exports.default = CacheComponent; -},{"../Component":274,"../Edge":275,"rxjs":26,"rxjs/operators":224}],292:[function(require,module,exports){ +},{"../Component":291,"../Edge":292,"rxjs":43,"rxjs/operators":241}],310:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21522,7 +30490,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21530,6 +30498,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.Component = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var Utils_1 = require("../Utils"); @@ -21559,7 +30528,7 @@ var Component = /** @class */ (function (_super) { get: function () { return this._activated; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Component.prototype, "activated$", { @@ -21567,7 +30536,7 @@ var Component = /** @class */ (function (_super) { get: function () { return this._activated$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Component.prototype, "defaultConfiguration", { @@ -21579,7 +30548,7 @@ var Component = /** @class */ (function (_super) { get: function () { return this._getDefaultConfiguration(); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Component.prototype, "configuration$", { @@ -21587,7 +30556,7 @@ var Component = /** @class */ (function (_super) { get: function () { return this._configuration$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Component.prototype, "name", { @@ -21600,7 +30569,7 @@ var Component = /** @class */ (function (_super) { get: function () { return this._name; }, - enumerable: true, + enumerable: false, configurable: true }); Component.prototype.activate = function (conf) { @@ -21640,9 +30609,10 @@ var Component = /** @class */ (function (_super) { exports.Component = Component; exports.default = Component; -},{"../Utils":284,"rxjs":26,"rxjs/operators":224}],293:[function(require,module,exports){ +},{"../Utils":301,"rxjs":43,"rxjs/operators":241}],311:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ComponentService = void 0; var Error_1 = require("../Error"); var ComponentService = /** @class */ (function () { function ComponentService(container, navigator) { @@ -21673,7 +30643,7 @@ var ComponentService = /** @class */ (function () { get: function () { return this._coverActivated; }, - enumerable: true, + enumerable: false, configurable: true }); ComponentService.prototype.activateCover = function () { @@ -21724,15 +30694,6 @@ var ComponentService = /** @class */ (function () { this.get(name).deactivate(); } }; - ComponentService.prototype.resize = function () { - for (var componentName in this._components) { - if (!this._components.hasOwnProperty(componentName)) { - continue; - } - var component = this._components[componentName]; - component.component.resize(); - } - }; ComponentService.prototype.get = function (name) { return this._components[name].component; }; @@ -21750,7 +30711,7 @@ var ComponentService = /** @class */ (function () { exports.ComponentService = ComponentService; exports.default = ComponentService; -},{"../Error":276}],294:[function(require,module,exports){ +},{"../Error":293}],312:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21758,7 +30719,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21766,6 +30727,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CoverComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -21825,9 +30787,15 @@ var CoverComponent = /** @class */ (function (_super) { CoverComponent.prototype._getCoverButtonVNode = function (configuration) { var _this = this; var cover = configuration.state === Component_1.CoverState.Loading ? "div.Cover.CoverLoading" : "div.Cover"; - var coverButton = vd.h("div.CoverButton", { onclick: function () { _this.configure({ state: Component_1.CoverState.Loading }); } }, [vd.h("div.CoverButtonIcon", [])]); + var coverButton = vd.h("div.CoverButton", [vd.h("div.CoverButtonIcon", [])]); var coverLogo = vd.h("a.CoverLogo", { href: Utils_1.Urls.explore, target: "_blank" }, []); - return vd.h(cover, [this._getCoverBackgroundVNode(configuration), coverButton, coverLogo]); + var coverIndicator = vd.h("div.CoverIndicator", { onclick: function () { _this.configure({ state: Component_1.CoverState.Loading }); } }, []); + return vd.h(cover, [ + this._getCoverBackgroundVNode(configuration), + coverIndicator, + coverButton, + coverLogo, + ]); }; CoverComponent.prototype._getCoverBackgroundVNode = function (conf) { var url = conf.src != null ? @@ -21846,7 +30814,7 @@ exports.CoverComponent = CoverComponent; Component_1.ComponentService.registerCover(CoverComponent); exports.default = CoverComponent; -},{"../Component":274,"../Utils":284,"../Viewer":285,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],295:[function(require,module,exports){ +},{"../Component":291,"../Utils":301,"../Viewer":302,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],313:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21854,7 +30822,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21862,6 +30830,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.DebugComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -21963,7 +30932,7 @@ exports.DebugComponent = DebugComponent; Component_1.ComponentService.register(DebugComponent); exports.default = DebugComponent; -},{"../Component":274,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],296:[function(require,module,exports){ +},{"../Component":291,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],314:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -21971,7 +30940,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -21979,6 +30948,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -22034,7 +31004,7 @@ Component_1.ComponentService.register(ImageComponent); exports.default = ImageComponent; -},{"../Component":274,"../Utils":284,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],297:[function(require,module,exports){ +},{"../Component":291,"../Utils":301,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],315:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -22042,7 +31012,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -22050,6 +31020,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoadingComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -22112,7 +31083,7 @@ exports.LoadingComponent = LoadingComponent; Component_1.ComponentService.register(LoadingComponent); exports.default = LoadingComponent; -},{"../Component":274,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],298:[function(require,module,exports){ +},{"../Component":291,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],316:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -22120,7 +31091,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -22128,6 +31099,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.NavigationComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -22241,7 +31213,7 @@ exports.NavigationComponent = NavigationComponent; Component_1.ComponentService.register(NavigationComponent); exports.default = NavigationComponent; -},{"../Component":274,"../Edge":275,"../Error":276,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],299:[function(require,module,exports){ +},{"../Component":291,"../Edge":292,"../Error":293,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],317:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -22249,7 +31221,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -22257,6 +31229,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.RouteComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -22283,6 +31256,12 @@ var RouteComponent = /** @class */ (function (_super) { function RouteComponent(name, container, navigator) { return _super.call(this, name, container, navigator) || this; } + RouteComponent.prototype.play = function () { + this.configure({ playing: true }); + }; + RouteComponent.prototype.stop = function () { + this.configure({ playing: false }); + }; RouteComponent.prototype._activate = function () { var _this = this; var slowedStream$ = this._navigator.stateService.currentState$.pipe(operators_1.filter(function (frame) { @@ -22445,12 +31424,6 @@ var RouteComponent = /** @class */ (function (_super) { RouteComponent.prototype._getDefaultConfiguration = function () { return {}; }; - RouteComponent.prototype.play = function () { - this.configure({ playing: true }); - }; - RouteComponent.prototype.stop = function () { - this.configure({ playing: false }); - }; RouteComponent.prototype._getRouteAnnotationNode = function (description) { return vd.h("div.RouteFrame", {}, [ vd.h("p", { textContent: description }, []), @@ -22463,7 +31436,7 @@ exports.RouteComponent = RouteComponent; Component_1.ComponentService.register(RouteComponent); exports.default = RouteComponent; -},{"../Component":274,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],300:[function(require,module,exports){ +},{"../Component":291,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],318:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -22471,7 +31444,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -22479,6 +31452,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.StatsComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../Component"); @@ -22544,7 +31518,7 @@ exports.StatsComponent = StatsComponent; Component_1.ComponentService.register(StatsComponent); exports.default = StatsComponent; -},{"../Component":274,"rxjs":26,"rxjs/operators":224}],301:[function(require,module,exports){ +},{"../Component":291,"rxjs":43,"rxjs/operators":241}],319:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -22552,7 +31526,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -22560,9 +31534,10 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.DirectionComponent = void 0; +var vd = require("virtual-dom"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); -var vd = require("virtual-dom"); var Component_1 = require("../../Component"); /** * @class DirectionComponent @@ -22574,7 +31549,7 @@ var DirectionComponent = /** @class */ (function (_super) { var _this = _super.call(this, name, container, navigator) || this; _this._renderer = !!directionDOMRenderer ? directionDOMRenderer : - new Component_1.DirectionDOMRenderer(_this.defaultConfiguration, container.element); + new Component_1.DirectionDOMRenderer(_this.defaultConfiguration, { height: container.element.offsetHeight, width: container.element.offsetWidth }); _this._hoveredKeySubject$ = new rxjs_1.Subject(); _this._hoveredKey$ = _this._hoveredKeySubject$.pipe(operators_1.share()); return _this; @@ -22592,7 +31567,7 @@ var DirectionComponent = /** @class */ (function (_super) { get: function () { return this._hoveredKey$; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -22637,16 +31612,16 @@ var DirectionComponent = /** @class */ (function (_super) { DirectionComponent.prototype.setMaxWidth = function (maxWidth) { this.configure({ maxWidth: maxWidth }); }; - /** @inheritdoc */ - DirectionComponent.prototype.resize = function () { - this._renderer.resize(this._container.element); - }; DirectionComponent.prototype._activate = function () { var _this = this; this._configurationSubscription = this._configuration$ .subscribe(function (configuration) { _this._renderer.setConfiguration(configuration); }); + this._resizeSubscription = this._container.renderService.size$ + .subscribe(function (size) { + _this._renderer.resize(size); + }); this._nodeSubscription = this._navigator.stateService.currentNode$.pipe(operators_1.tap(function (node) { _this._container.domRenderer.render$.next({ name: _this._name, vnode: vd.h("div", {}, []) }); _this._renderer.setNode(node); @@ -22724,142 +31699,144 @@ exports.DirectionComponent = DirectionComponent; Component_1.ComponentService.register(DirectionComponent); exports.default = DirectionComponent; -},{"../../Component":274,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],302:[function(require,module,exports){ + +},{"../../Component":291,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],320:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.DirectionDOMCalculator = void 0; var Geo_1 = require("../../Geo"); /** * @class DirectionDOMCalculator * @classdesc Helper class for calculating DOM CSS properties. */ var DirectionDOMCalculator = /** @class */ (function () { - function DirectionDOMCalculator(configuration, element) { + function DirectionDOMCalculator(configuration, size) { this._spatial = new Geo_1.Spatial(); this._minThresholdWidth = 320; this._maxThresholdWidth = 1480; this._minThresholdHeight = 240; this._maxThresholdHeight = 820; this._configure(configuration); - this._resize(element); + this._resize(size); this._reset(); } Object.defineProperty(DirectionDOMCalculator.prototype, "minWidth", { get: function () { return this._minWidth; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "maxWidth", { get: function () { return this._maxWidth; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "containerWidth", { get: function () { return this._containerWidth; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "containerWidthCss", { get: function () { return this._containerWidthCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "containerMarginCss", { get: function () { return this._containerMarginCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "containerLeftCss", { get: function () { return this._containerLeftCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "containerHeight", { get: function () { return this._containerHeight; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "containerHeightCss", { get: function () { return this._containerHeightCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "containerBottomCss", { get: function () { return this._containerBottomCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleSize", { get: function () { return this._stepCircleSize; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleSizeCss", { get: function () { return this._stepCircleSizeCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "stepCircleMarginCss", { get: function () { return this._stepCircleMarginCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "turnCircleSize", { get: function () { return this._turnCircleSize; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "turnCircleSizeCss", { get: function () { return this._turnCircleSizeCss; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "outerRadius", { get: function () { return this._outerRadius; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "innerRadius", { get: function () { return this._innerRadius; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DirectionDOMCalculator.prototype, "shadowOffset", { get: function () { return this._shadowOffset; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -22874,13 +31851,12 @@ var DirectionDOMCalculator = /** @class */ (function () { }; /** * Resizes all properties according to the width and height - * of the element. + * of the size object. * - * @param {HTMLElement} element The container element from which to extract - * the width and height. + * @param {ISize} size The size of the container element. */ - DirectionDOMCalculator.prototype.resize = function (element) { - this._resize(element); + DirectionDOMCalculator.prototype.resize = function (size) { + this._resize(size); this._reset(); }; /** @@ -22909,9 +31885,9 @@ var DirectionDOMCalculator = /** @class */ (function () { this._minWidth = configuration.minWidth; this._maxWidth = this._getMaxWidth(configuration.minWidth, configuration.maxWidth); }; - DirectionDOMCalculator.prototype._resize = function (element) { - this._elementWidth = element.offsetWidth; - this._elementHeight = element.offsetHeight; + DirectionDOMCalculator.prototype._resize = function (size) { + this._elementWidth = size.width; + this._elementHeight = size.height; }; DirectionDOMCalculator.prototype._reset = function () { this._containerWidth = this._getContainerWidth(this._elementWidth, this._elementHeight); @@ -22964,9 +31940,10 @@ exports.DirectionDOMCalculator = DirectionDOMCalculator; exports.default = DirectionDOMCalculator; -},{"../../Geo":277}],303:[function(require,module,exports){ +},{"../../Geo":294}],321:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.DirectionDOMRenderer = void 0; var vd = require("virtual-dom"); var Component_1 = require("../../Component"); var Edge_1 = require("../../Edge"); @@ -22977,10 +31954,10 @@ var Geo_1 = require("../../Geo"); * @classdesc DOM renderer for direction arrows. */ var DirectionDOMRenderer = /** @class */ (function () { - function DirectionDOMRenderer(configuration, element) { + function DirectionDOMRenderer(configuration, size) { this._isEdge = false; this._spatial = new Geo_1.Spatial(); - this._calculator = new Component_1.DirectionDOMCalculator(configuration, element); + this._calculator = new Component_1.DirectionDOMCalculator(configuration, size); this._node = null; this._rotation = { phi: 0, theta: 0 }; this._epsilon = 0.5 * Math.PI / 180; @@ -23019,7 +31996,7 @@ var DirectionDOMRenderer = /** @class */ (function () { get: function () { return this._needsRender; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -23095,10 +32072,10 @@ var DirectionDOMRenderer = /** @class */ (function () { * Detect the element's width and height and resize * elements accordingly. * - * @param {HTMLElement} element Viewer container element. + * @param {ISize} size Size of vßiewer container element. */ - DirectionDOMRenderer.prototype.resize = function (element) { - this._calculator.resize(element); + DirectionDOMRenderer.prototype.resize = function (size) { + this._calculator.resize(size); this._setNeedsRender(); }; DirectionDOMRenderer.prototype._setNeedsRender = function () { @@ -23344,7 +32321,7 @@ exports.DirectionDOMRenderer = DirectionDOMRenderer; exports.default = DirectionDOMRenderer; -},{"../../Component":274,"../../Edge":275,"../../Error":276,"../../Geo":277,"virtual-dom":230}],304:[function(require,module,exports){ +},{"../../Component":291,"../../Edge":292,"../../Error":293,"../../Geo":294,"virtual-dom":247}],322:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -23352,7 +32329,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -23360,12 +32337,16 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImagePlaneComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); +var Viewer_1 = require("../../Viewer"); var Render_1 = require("../../Render"); var Tiles_1 = require("../../Tiles"); var Utils_1 = require("../../Utils"); +var ViewportCoords_1 = require("../../geo/ViewportCoords"); +var Spatial_1 = require("../../geo/Spatial"); var ImagePlaneComponent = /** @class */ (function (_super) { __extends(ImagePlaneComponent, _super); function ImagePlaneComponent(name, container, navigator) { @@ -23483,10 +32464,16 @@ var ImagePlaneComponent = /** @class */ (function (_super) { this._setRegionOfInterestSubscription = textureProvider$.pipe(operators_1.switchMap(function (provider) { return roiTrigger$.pipe(operators_1.map(function (_a) { var camera = _a[0], size = _a[1], transform = _a[2]; + var basic = new ViewportCoords_1.default().viewportToBasic(0, 0, transform, camera.perspective); + if (basic[0] < 0 || basic[1] < 0 || basic[0] > 1 || basic[1] > 1) { + return undefined; + } return [ _this._roiCalculator.computeRegionOfInterest(camera, size, transform), provider, ]; + }), operators_1.filter(function (args) { + return !!args; })); }), operators_1.filter(function (args) { return !args[1].disposed; @@ -23547,6 +32534,92 @@ var ImagePlaneComponent = /** @class */ (function (_super) { }; })) .subscribe(this._rendererOperation$); + this._clearPeripheryPlaneSubscription = this._navigator.panService.panNodes$.pipe(operators_1.filter(function (panNodes) { + return panNodes.length === 0; + }), operators_1.map(function () { + return function (renderer) { + renderer.clearPeripheryPlanes(); + return renderer; + }; + })) + .subscribe(this._rendererOperation$); + var cachedPanNodes$ = this._navigator.panService.panNodes$.pipe(operators_1.switchMap(function (nts) { + return rxjs_1.from(nts).pipe(operators_1.mergeMap(function (_a) { + var n = _a[0], t = _a[1]; + return rxjs_1.combineLatest(_this._navigator.graphService.cacheNode$(n.key).pipe(operators_1.catchError(function (error) { + console.error("Failed to cache periphery node (" + n.key + ")", error); + return rxjs_1.empty(); + })), rxjs_1.of(t)); + })); + }), operators_1.share()); + this._addPeripheryPlaneSubscription = cachedPanNodes$.pipe(operators_1.map(function (_a) { + var n = _a[0], t = _a[1]; + return function (renderer) { + renderer.addPeripheryPlane(n, t); + return renderer; + }; + })) + .subscribe(this._rendererOperation$); + this._updatePeripheryPlaneTextureSubscription = cachedPanNodes$.pipe(operators_1.mergeMap(function (_a) { + var n = _a[0]; + return Viewer_1.ImageSize.Size2048 > Math.max(n.image.width, n.image.height) ? + n.cacheImage$(Viewer_1.ImageSize.Size2048).pipe(operators_1.catchError(function () { + return rxjs_1.empty(); + })) : + rxjs_1.empty(); + }), operators_1.map(function (n) { + return function (renderer) { + renderer.updateTextureImage(n.image, n); + return renderer; + }; + })) + .subscribe(this._rendererOperation$); + var inTransition$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { + return frame.state.alpha < 1; + }), operators_1.distinctUntilChanged()); + var panTrigger$ = rxjs_1.combineLatest(this._container.mouseService.active$, this._container.touchService.active$, this._navigator.stateService.inMotion$, inTransition$).pipe(operators_1.map(function (_a) { + var mouseActive = _a[0], touchActive = _a[1], inMotion = _a[2], inTransition = _a[3]; + return !(mouseActive || touchActive || inMotion || inTransition); + }), operators_1.filter(function (trigger) { + return trigger; + })); + this._moveToPeripheryNodeSubscription = this._navigator.panService.panNodes$.pipe(operators_1.switchMap(function (nts) { + return panTrigger$.pipe(operators_1.withLatestFrom(_this._container.renderService.renderCamera$, _this._navigator.stateService.currentNode$, _this._navigator.stateService.currentTransform$), operators_1.mergeMap(function (_a) { + var renderCamera = _a[1], currentNode = _a[2], currentTransform = _a[3]; + return rxjs_1.of([ + renderCamera, + currentNode, + currentTransform, + nts, + ]); + })); + }), operators_1.switchMap(function (_a) { + var camera = _a[0], cn = _a[1], ct = _a[2], nts = _a[3]; + var direction = camera.camera.lookat.clone().sub(camera.camera.position); + var cd = new Spatial_1.default().viewingDirection(cn.rotation); + var ca = cd.angleTo(direction); + var closest = [ca, undefined]; + var basic = new ViewportCoords_1.default().viewportToBasic(0, 0, ct, camera.perspective); + if (basic[0] >= 0 && basic[0] <= 1 && basic[1] >= 0 && basic[1] <= 1) { + closest[0] = Number.NEGATIVE_INFINITY; + } + for (var _i = 0, nts_1 = nts; _i < nts_1.length; _i++) { + var n = nts_1[_i][0]; + var d = new Spatial_1.default().viewingDirection(n.rotation); + var a = d.angleTo(direction); + if (a < closest[0]) { + closest[0] = a; + closest[1] = n.key; + } + } + if (!closest[1]) { + return rxjs_1.empty(); + } + return _this._navigator.moveToKey$(closest[1]).pipe(operators_1.catchError(function () { + return rxjs_1.empty(); + })); + })) + .subscribe(); }; ImagePlaneComponent.prototype._deactivate = function () { this._rendererDisposer$.next(null); @@ -23560,6 +32633,10 @@ var ImagePlaneComponent = /** @class */ (function (_super) { this._textureProviderSubscription.unsubscribe(); this._updateBackgroundSubscription.unsubscribe(); this._updateTextureImageSubscription.unsubscribe(); + this._clearPeripheryPlaneSubscription.unsubscribe(); + this._addPeripheryPlaneSubscription.unsubscribe(); + this._updatePeripheryPlaneTextureSubscription.unsubscribe(); + this._moveToPeripheryNodeSubscription.unsubscribe(); }; ImagePlaneComponent.prototype._getDefaultConfiguration = function () { return {}; @@ -23571,9 +32648,10 @@ exports.ImagePlaneComponent = ImagePlaneComponent; Component_1.ComponentService.register(ImagePlaneComponent); exports.default = ImagePlaneComponent; -},{"../../Component":274,"../../Render":280,"../../Tiles":283,"../../Utils":284,"rxjs":26,"rxjs/operators":224}],305:[function(require,module,exports){ +},{"../../Component":291,"../../Render":297,"../../Tiles":300,"../../Utils":301,"../../Viewer":302,"../../geo/Spatial":419,"../../geo/ViewportCoords":421,"rxjs":43,"rxjs/operators":241}],323:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImagePlaneGLRenderer = void 0; var Component_1 = require("../../Component"); var ImagePlaneGLRenderer = /** @class */ (function () { function ImagePlaneGLRenderer() { @@ -23592,19 +32670,30 @@ var ImagePlaneGLRenderer = /** @class */ (function () { get: function () { return this._frameId; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(ImagePlaneGLRenderer.prototype, "needsRender", { get: function () { return this._needsRender; }, - enumerable: true, + enumerable: false, configurable: true }); ImagePlaneGLRenderer.prototype.indicateNeedsRender = function () { this._needsRender = true; }; + ImagePlaneGLRenderer.prototype.addPeripheryPlane = function (node, transform) { + var mesh = this._factory.createMesh(node, transform); + var planes = {}; + planes[node.key] = mesh; + this._scene.addPeripheryPlanes(planes); + this._needsRender = true; + }; + ImagePlaneGLRenderer.prototype.clearPeripheryPlanes = function () { + this._scene.setPeripheryPlanes({}); + this._needsRender = true; + }; ImagePlaneGLRenderer.prototype.updateFrame = function (frame) { this._updateFrameId(frame.id); this._needsRender = this._updateAlpha(frame.state.alpha) || this._needsRender; @@ -23636,24 +32725,17 @@ var ImagePlaneGLRenderer = /** @class */ (function () { } this._providerDisposers[key] = dispose; }; - ImagePlaneGLRenderer.prototype._updateTexture = function (texture) { - this._needsRender = true; - for (var _i = 0, _a = this._scene.imagePlanes; _i < _a.length; _i++) { - var plane = _a[_i]; - var material = plane.material; - var oldTexture = material.uniforms.projectorTex.value; - material.uniforms.projectorTex.value = null; - oldTexture.dispose(); - material.uniforms.projectorTex.value = texture; - } - }; ImagePlaneGLRenderer.prototype.updateTextureImage = function (image, node) { - if (this._currentKey !== node.key) { - return; - } this._needsRender = true; - for (var _i = 0, _a = this._scene.imagePlanes; _i < _a.length; _i++) { - var plane = _a[_i]; + var planes = this._extend({}, this._scene.planes, this._scene.planesOld, this._scene.planesPeriphery); + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + if (key !== node.key) { + continue; + } + var plane = planes[key]; var material = plane.material; var texture = material.uniforms.projectorTex.value; texture.image = image; @@ -23661,19 +32743,40 @@ var ImagePlaneGLRenderer = /** @class */ (function () { } }; ImagePlaneGLRenderer.prototype.render = function (perspectiveCamera, renderer) { - var planeAlpha = this._scene.imagePlanesOld.length ? 1 : this._alpha; - for (var _i = 0, _a = this._scene.imagePlanes; _i < _a.length; _i++) { - var plane = _a[_i]; + var planes = this._scene.planes; + var planesOld = this._scene.planesOld; + var planesPeriphery = this._scene.planesPeriphery; + var planeAlpha = Object.keys(planesOld).length ? 1 : this._alpha; + var peripheryAlpha = Object.keys(planesOld).length ? 1 : Math.floor(this._alpha); + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; plane.material.uniforms.opacity.value = planeAlpha; } - for (var _b = 0, _c = this._scene.imagePlanesOld; _b < _c.length; _b++) { - var plane = _c[_b]; + for (var key in planesOld) { + if (!planesOld.hasOwnProperty(key)) { + continue; + } + var plane = planesOld[key]; plane.material.uniforms.opacity.value = this._alphaOld; } + for (var key in planesPeriphery) { + if (!planesPeriphery.hasOwnProperty(key)) { + continue; + } + var plane = planesPeriphery[key]; + plane.material.uniforms.opacity.value = peripheryAlpha; + } + renderer.render(this._scene.scenePeriphery, perspectiveCamera); renderer.render(this._scene.scene, perspectiveCamera); renderer.render(this._scene.sceneOld, perspectiveCamera); - for (var _d = 0, _e = this._scene.imagePlanes; _d < _e.length; _d++) { - var plane = _e[_d]; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; plane.material.uniforms.opacity.value = this._alpha; } renderer.render(this._scene.scene, perspectiveCamera); @@ -23717,24 +32820,64 @@ var ImagePlaneGLRenderer = /** @class */ (function () { if (previousKey != null) { if (previousKey !== this._currentKey && previousKey !== this._previousKey) { var previousMesh = this._factory.createMesh(state.previousNode, state.previousTransform); - this._scene.updateImagePlanes([previousMesh]); + var previousPlanes = {}; + previousPlanes[previousKey] = previousMesh; + this._scene.updateImagePlanes(previousPlanes); } this._previousKey = previousKey; } this._currentKey = currentKey; var currentMesh = this._factory.createMesh(state.currentNode, state.currentTransform); - this._scene.updateImagePlanes([currentMesh]); + var planes = {}; + planes[currentKey] = currentMesh; + this._scene.updateImagePlanes(planes); this._alphaOld = 1; return true; }; + ImagePlaneGLRenderer.prototype._updateTexture = function (texture) { + this._needsRender = true; + var planes = this._scene.planes; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; + var material = plane.material; + var oldTexture = material.uniforms.projectorTex.value; + material.uniforms.projectorTex.value = null; + oldTexture.dispose(); + material.uniforms.projectorTex.value = texture; + } + }; + ImagePlaneGLRenderer.prototype._extend = function (dest) { + var sources = []; + for (var _i = 1; _i < arguments.length; _i++) { + sources[_i - 1] = arguments[_i]; + } + for (var _a = 0, sources_1 = sources; _a < sources_1.length; _a++) { + var src = sources_1[_a]; + for (var k in src) { + if (!src.hasOwnProperty(k)) { + continue; + } + dest[k] = src[k]; + } + } + return dest; + }; return ImagePlaneGLRenderer; }()); exports.ImagePlaneGLRenderer = ImagePlaneGLRenderer; exports.default = ImagePlaneGLRenderer; -},{"../../Component":274}],306:[function(require,module,exports){ +},{"../../Component":291}],324:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],325:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.CoverState = void 0; var CoverState; (function (CoverState) { CoverState[CoverState["Hidden"] = 0] = "Hidden"; @@ -23742,9 +32885,10 @@ var CoverState; CoverState[CoverState["Visible"] = 2] = "Visible"; })(CoverState = exports.CoverState || (exports.CoverState = {})); -},{}],307:[function(require,module,exports){ +},{}],326:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.SliderMode = void 0; /** * Enumeration for slider mode. * @@ -23782,15 +32926,29 @@ var SliderMode; SliderMode[SliderMode["Stationary"] = 1] = "Stationary"; })(SliderMode = exports.SliderMode || (exports.SliderMode = {})); -},{}],308:[function(require,module,exports){ -"use strict"; +},{}],327:[function(require,module,exports){ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p); +}; Object.defineProperty(exports, "__esModule", { value: true }); var ICoverConfiguration_1 = require("./ICoverConfiguration"); -exports.CoverState = ICoverConfiguration_1.CoverState; +Object.defineProperty(exports, "CoverState", { enumerable: true, get: function () { return ICoverConfiguration_1.CoverState; } }); var ISliderConfiguration_1 = require("./ISliderConfiguration"); -exports.SliderMode = ISliderConfiguration_1.SliderMode; +Object.defineProperty(exports, "SliderMode", { enumerable: true, get: function () { return ISliderConfiguration_1.SliderMode; } }); +__exportStar(require("../imageplane/interfaces/interfaces"), exports); +__exportStar(require("../marker/interfaces/interfaces"), exports); +__exportStar(require("../spatialdata/interfaces/interfaces"), exports); +__exportStar(require("../tag/interfaces/interfaces"), exports); -},{"./ICoverConfiguration":306,"./ISliderConfiguration":307}],309:[function(require,module,exports){ +},{"../imageplane/interfaces/interfaces":324,"../marker/interfaces/interfaces":337,"../spatialdata/interfaces/interfaces":365,"../tag/interfaces/interfaces":390,"./ICoverConfiguration":325,"./ISliderConfiguration":326}],328:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -23798,7 +32956,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -23806,6 +32964,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeyPlayHandler = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); var Edge_1 = require("../../Edge"); @@ -23895,7 +33054,7 @@ var KeyPlayHandler = /** @class */ (function (_super) { exports.KeyPlayHandler = KeyPlayHandler; exports.default = KeyPlayHandler; -},{"../../Component":274,"../../Edge":275,"rxjs/operators":224}],310:[function(require,module,exports){ +},{"../../Component":291,"../../Edge":292,"rxjs/operators":241}],329:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -23903,7 +33062,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -23911,6 +33070,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeySequenceNavigationHandler = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); var Edge_1 = require("../../Edge"); @@ -23985,7 +33145,7 @@ var KeySequenceNavigationHandler = /** @class */ (function (_super) { exports.KeySequenceNavigationHandler = KeySequenceNavigationHandler; exports.default = KeySequenceNavigationHandler; -},{"../../Component":274,"../../Edge":275,"../../Error":276,"rxjs/operators":224}],311:[function(require,module,exports){ +},{"../../Component":291,"../../Edge":292,"../../Error":293,"rxjs/operators":241}],330:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -23993,7 +33153,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -24001,6 +33161,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeySpatialNavigationHandler = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); var Edge_1 = require("../../Edge"); @@ -24134,7 +33295,7 @@ var KeySpatialNavigationHandler = /** @class */ (function (_super) { exports.KeySpatialNavigationHandler = KeySpatialNavigationHandler; exports.default = KeySpatialNavigationHandler; -},{"../../Component":274,"../../Edge":275,"../../Error":276,"rxjs/operators":224}],312:[function(require,module,exports){ +},{"../../Component":291,"../../Edge":292,"../../Error":293,"rxjs/operators":241}],331:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -24142,7 +33303,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -24150,6 +33311,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeyZoomHandler = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); /** @@ -24213,7 +33375,7 @@ var KeyZoomHandler = /** @class */ (function (_super) { exports.KeyZoomHandler = KeyZoomHandler; exports.default = KeyZoomHandler; -},{"../../Component":274,"rxjs/operators":224}],313:[function(require,module,exports){ +},{"../../Component":291,"rxjs/operators":241}],332:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -24221,7 +33383,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -24229,6 +33391,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeyboardComponent = void 0; var Component_1 = require("../../Component"); var Geo_1 = require("../../Geo"); /** @@ -24268,7 +33431,7 @@ var KeyboardComponent = /** @class */ (function (_super) { get: function () { return this._keyPlayHandler; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(KeyboardComponent.prototype, "keySequenceNavigation", { @@ -24280,7 +33443,7 @@ var KeyboardComponent = /** @class */ (function (_super) { get: function () { return this._keySequenceNavigationHandler; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(KeyboardComponent.prototype, "keySpatialNavigation", { @@ -24292,7 +33455,7 @@ var KeyboardComponent = /** @class */ (function (_super) { get: function () { return this._keySpatialNavigationHandler; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(KeyboardComponent.prototype, "keyZoom", { @@ -24304,7 +33467,7 @@ var KeyboardComponent = /** @class */ (function (_super) { get: function () { return this._keyZoomHandler; }, - enumerable: true, + enumerable: false, configurable: true }); KeyboardComponent.prototype._activate = function () { @@ -24354,17 +33517,17 @@ exports.KeyboardComponent = KeyboardComponent; Component_1.ComponentService.register(KeyboardComponent); exports.default = KeyboardComponent; -},{"../../Component":274,"../../Geo":277}],314:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294}],333:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var MarkerComponent_1 = require("./MarkerComponent"); -exports.MarkerComponent = MarkerComponent_1.MarkerComponent; +Object.defineProperty(exports, "MarkerComponent", { enumerable: true, get: function () { return MarkerComponent_1.MarkerComponent; } }); var SimpleMarker_1 = require("./marker/SimpleMarker"); -exports.SimpleMarker = SimpleMarker_1.SimpleMarker; +Object.defineProperty(exports, "SimpleMarker", { enumerable: true, get: function () { return SimpleMarker_1.SimpleMarker; } }); var CircleMarker_1 = require("./marker/CircleMarker"); -exports.CircleMarker = CircleMarker_1.CircleMarker; +Object.defineProperty(exports, "CircleMarker", { enumerable: true, get: function () { return CircleMarker_1.CircleMarker; } }); -},{"./MarkerComponent":315,"./marker/CircleMarker":318,"./marker/SimpleMarker":320}],315:[function(require,module,exports){ +},{"./MarkerComponent":334,"./marker/CircleMarker":338,"./marker/SimpleMarker":340}],334:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -24372,7 +33535,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -24380,6 +33543,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.MarkerComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var THREE = require("three"); @@ -24802,9 +33966,10 @@ Component_1.ComponentService.register(MarkerComponent); exports.default = MarkerComponent; -},{"../../Component":274,"../../Geo":277,"../../Graph":278,"../../Render":280,"rxjs":26,"rxjs/operators":224,"three":225,"when":271}],316:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294,"../../Graph":295,"../../Render":297,"rxjs":43,"rxjs/operators":241,"three":242,"when":288}],335:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.MarkerScene = void 0; var THREE = require("three"); var MarkerScene = /** @class */ (function () { function MarkerScene(scene, raycaster) { @@ -24819,14 +33984,14 @@ var MarkerScene = /** @class */ (function () { get: function () { return this._markers; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MarkerScene.prototype, "needsRender", { get: function () { return this._needsRender; }, - enumerable: true, + enumerable: false, configurable: true }); MarkerScene.prototype.add = function (marker, position) { @@ -24924,15 +34089,16 @@ var MarkerScene = /** @class */ (function () { exports.MarkerScene = MarkerScene; exports.default = MarkerScene; -},{"three":225}],317:[function(require,module,exports){ +},{"three":242}],336:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var rbush = require("rbush"); +exports.MarkerSet = void 0; var rxjs_1 = require("rxjs"); +var Geo_1 = require("../../Geo"); var MarkerSet = /** @class */ (function () { function MarkerSet() { this._hash = {}; - this._index = rbush(16, [".lon", ".lat", ".lon", ".lat"]); + this._index = new Geo_1.GeoRBush(16); this._indexChanged$ = new rxjs_1.Subject(); this._updated$ = new rxjs_1.Subject(); } @@ -24940,14 +34106,14 @@ var MarkerSet = /** @class */ (function () { get: function () { return this._indexChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MarkerSet.prototype, "updated$", { get: function () { return this._updated$; }, - enumerable: true, + enumerable: false, configurable: true }); MarkerSet.prototype.add = function (markers) { @@ -25015,7 +34181,12 @@ var MarkerSet = /** @class */ (function () { MarkerSet.prototype.search = function (_a) { var sw = _a[0], ne = _a[1]; return this._index - .search({ maxX: ne.lon, maxY: ne.lat, minX: sw.lon, minY: sw.lat }) + .search({ + maxX: ne.lat, + maxY: ne.lon, + minX: sw.lat, + minY: sw.lon, + }) .map(function (indexItem) { return indexItem.marker; }); @@ -25041,7 +34212,11 @@ var MarkerSet = /** @class */ (function () { exports.MarkerSet = MarkerSet; exports.default = MarkerSet; -},{"rbush":25,"rxjs":26}],318:[function(require,module,exports){ +},{"../../Geo":294,"rxjs":43}],337:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],338:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -25049,7 +34224,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -25057,6 +34232,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CircleMarker = void 0; var THREE = require("three"); var Component_1 = require("../../../Component"); /** @@ -25126,9 +34302,10 @@ var CircleMarker = /** @class */ (function (_super) { exports.CircleMarker = CircleMarker; exports.default = CircleMarker; -},{"../../../Component":274,"three":225}],319:[function(require,module,exports){ +},{"../../../Component":291,"three":242}],339:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Marker = void 0; /** * @class Marker * @@ -25148,7 +34325,7 @@ var Marker = /** @class */ (function () { get: function () { return this._id; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Marker.prototype, "geometry", { @@ -25160,7 +34337,7 @@ var Marker = /** @class */ (function () { get: function () { return this._geometry; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Marker.prototype, "latLon", { @@ -25171,7 +34348,7 @@ var Marker = /** @class */ (function () { get: function () { return this._latLon; }, - enumerable: true, + enumerable: false, configurable: true }); /** @ignore */ @@ -25222,7 +34399,7 @@ var Marker = /** @class */ (function () { exports.Marker = Marker; exports.default = Marker; -},{}],320:[function(require,module,exports){ +},{}],340:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -25230,7 +34407,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -25238,6 +34415,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.SimpleMarker = void 0; var THREE = require("three"); var Component_1 = require("../../../Component"); /** @@ -25371,7 +34549,7 @@ var SimpleMarker = /** @class */ (function (_super) { exports.SimpleMarker = SimpleMarker; exports.default = SimpleMarker; -},{"../../../Component":274,"three":225}],321:[function(require,module,exports){ +},{"../../../Component":291,"three":242}],341:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -25379,7 +34557,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -25387,6 +34565,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.BounceHandler = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); @@ -25406,16 +34585,16 @@ var BounceHandler = /** @class */ (function (_super) { var _this = this; var inTransition$ = this._navigator.stateService.currentState$.pipe(operators_1.map(function (frame) { return frame.state.alpha < 1; - })); + }), operators_1.distinctUntilChanged()); this._bounceSubscription = rxjs_1.combineLatest(inTransition$, this._navigator.stateService.inTranslation$, this._container.mouseService.active$, this._container.touchService.active$).pipe(operators_1.map(function (noForce) { return noForce[0] || noForce[1] || noForce[2] || noForce[3]; }), operators_1.distinctUntilChanged(), operators_1.switchMap(function (noForce) { return noForce ? rxjs_1.empty() : rxjs_1.combineLatest(_this._container.renderService.renderCamera$, _this._navigator.stateService.currentTransform$.pipe(operators_1.first())); - })) + }), operators_1.withLatestFrom(this._navigator.panService.panNodes$)) .subscribe(function (_a) { - var render = _a[0], transform = _a[1]; + var _b = _a[0], render = _b[0], transform = _b[1], nts = _a[1]; if (!transform.hasValidScale && render.camera.focal < 0.1) { return; } @@ -25423,6 +34602,19 @@ var BounceHandler = /** @class */ (function (_super) { return; } var distances = Component_1.ImageBoundary.viewportDistances(transform, render.perspective, _this._viewportCoords); + var basic = _this._viewportCoords.viewportToBasic(0, 0, transform, render.perspective); + if ((basic[0] < 0 || basic[0] > 1) && nts.length > 0) { + distances[0] = distances[2] = 0; + } + for (var _i = 0, nts_1 = nts; _i < nts_1.length; _i++) { + var _c = nts_1[_i], t = _c[1]; + var d = Component_1.ImageBoundary.viewportDistances(t, render.perspective, _this._viewportCoords); + for (var i = 1; i < distances.length; i += 2) { + if (d[i] < distances[i]) { + distances[i] = d[i]; + } + } + } if (Math.max.apply(Math, distances) < 0.01) { return; } @@ -25457,7 +34649,7 @@ var BounceHandler = /** @class */ (function (_super) { exports.BounceHandler = BounceHandler; exports.default = BounceHandler; -},{"../../Component":274,"rxjs":26,"rxjs/operators":224}],322:[function(require,module,exports){ +},{"../../Component":291,"rxjs":43,"rxjs/operators":241}],342:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -25465,7 +34657,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -25473,6 +34665,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.DoubleClickZoomHandler = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); @@ -25525,7 +34718,7 @@ var DoubleClickZoomHandler = /** @class */ (function (_super) { exports.DoubleClickZoomHandler = DoubleClickZoomHandler; exports.default = DoubleClickZoomHandler; -},{"../../Component":274,"rxjs":26,"rxjs/operators":224}],323:[function(require,module,exports){ +},{"../../Component":291,"rxjs":43,"rxjs/operators":241}],343:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -25533,7 +34726,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -25541,6 +34734,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.DragPanHandler = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); @@ -25609,8 +34803,8 @@ var DragPanHandler = /** @class */ (function (_super) { return pair[0] != null && pair[1] != null; })); return rxjs_1.merge(mouseDrag$, singleTouchDrag$); - }), operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { - var events = _a[0], render = _a[1], transform = _a[2]; + }), operators_1.withLatestFrom(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$, this._navigator.panService.panNodes$), operators_1.map(function (_a) { + var events = _a[0], render = _a[1], transform = _a[2], nts = _a[3]; var previousEvent = events[0]; var event = events[1]; var movementX = event.clientX - previousEvent.clientX; @@ -25626,6 +34820,15 @@ var DragPanHandler = /** @class */ (function (_super) { var phi = (movementX > 0 ? 1 : -1) * directionX.angleTo(currentDirection); var theta = (movementY > 0 ? -1 : 1) * directionY.angleTo(currentDirection); var distances = Component_1.ImageBoundary.viewportDistances(transform, render.perspective, _this._viewportCoords); + for (var _i = 0, nts_1 = nts; _i < nts_1.length; _i++) { + var _c = nts_1[_i], t = _c[1]; + var d = Component_1.ImageBoundary.viewportDistances(t, render.perspective, _this._viewportCoords); + for (var i = 0; i < distances.length; i++) { + if (d[i] < distances[i]) { + distances[i] = d[i]; + } + } + } if (distances[0] > 0 && theta < 0) { theta /= Math.max(1, 2e2 * distances[0]); } @@ -25697,7 +34900,7 @@ var DragPanHandler = /** @class */ (function (_super) { exports.DragPanHandler = DragPanHandler; exports.default = DragPanHandler; -},{"../../Component":274,"rxjs":26,"rxjs/operators":224}],324:[function(require,module,exports){ +},{"../../Component":291,"rxjs":43,"rxjs/operators":241}],344:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -25705,7 +34908,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -25713,6 +34916,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.EarthControlHandler = void 0; var THREE = require("three"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); @@ -25845,9 +35049,14 @@ var EarthControlHandler = /** @class */ (function (_super) { exports.EarthControlHandler = EarthControlHandler; exports.default = EarthControlHandler; -},{"../../Component":274,"../../State":281,"rxjs":26,"rxjs/operators":224,"three":225}],325:[function(require,module,exports){ +},{"../../Component":291,"../../State":298,"rxjs":43,"rxjs/operators":241,"three":242}],345:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],346:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.viewportDistances = void 0; var Geo_1 = require("../../../src/Geo"); function basicBoundaryPoints(pointsPerSide) { var points = []; @@ -25962,7 +35171,7 @@ function viewportDistances(transform, perspective, viewportCoords) { } exports.viewportDistances = viewportDistances; -},{"../../../src/Geo":277}],326:[function(require,module,exports){ +},{"../../../src/Geo":294}],347:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -25970,7 +35179,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -25978,6 +35187,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.MouseComponent = void 0; var Component_1 = require("../../Component"); var Geo_1 = require("../../Geo"); /** @@ -26021,7 +35231,7 @@ var MouseComponent = /** @class */ (function (_super) { get: function () { return this._doubleClickZoomHandler; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseComponent.prototype, "dragPan", { @@ -26033,7 +35243,7 @@ var MouseComponent = /** @class */ (function (_super) { get: function () { return this._dragPanHandler; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseComponent.prototype, "scrollZoom", { @@ -26045,7 +35255,7 @@ var MouseComponent = /** @class */ (function (_super) { get: function () { return this._scrollZoomHandler; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseComponent.prototype, "touchZoom", { @@ -26057,7 +35267,7 @@ var MouseComponent = /** @class */ (function (_super) { get: function () { return this._touchZoomHandler; }, - enumerable: true, + enumerable: false, configurable: true }); MouseComponent.prototype._activate = function () { @@ -26114,7 +35324,7 @@ exports.MouseComponent = MouseComponent; Component_1.ComponentService.register(MouseComponent); exports.default = MouseComponent; -},{"../../Component":274,"../../Geo":277}],327:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294}],348:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -26122,7 +35332,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -26130,6 +35340,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.ScrollZoomHandler = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); /** @@ -26206,7 +35417,7 @@ var ScrollZoomHandler = /** @class */ (function (_super) { exports.ScrollZoomHandler = ScrollZoomHandler; exports.default = ScrollZoomHandler; -},{"../../Component":274,"rxjs/operators":224}],328:[function(require,module,exports){ +},{"../../Component":291,"rxjs/operators":241}],349:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -26214,7 +35425,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -26222,6 +35433,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.TouchZoomHandler = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); @@ -26292,15 +35504,15 @@ var TouchZoomHandler = /** @class */ (function (_super) { exports.TouchZoomHandler = TouchZoomHandler; exports.default = TouchZoomHandler; -},{"../../Component":274,"rxjs":26,"rxjs/operators":224}],329:[function(require,module,exports){ +},{"../../Component":291,"rxjs":43,"rxjs/operators":241}],350:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Popup_1 = require("./popup/Popup"); -exports.Popup = Popup_1.Popup; +Object.defineProperty(exports, "Popup", { enumerable: true, get: function () { return Popup_1.Popup; } }); var PopupComponent_1 = require("./PopupComponent"); -exports.PopupComponent = PopupComponent_1.PopupComponent; +Object.defineProperty(exports, "PopupComponent", { enumerable: true, get: function () { return PopupComponent_1.PopupComponent; } }); -},{"./PopupComponent":330,"./popup/Popup":331}],330:[function(require,module,exports){ +},{"./PopupComponent":351,"./popup/Popup":352}],351:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -26308,7 +35520,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -26316,6 +35528,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.PopupComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); @@ -26480,9 +35693,10 @@ exports.PopupComponent = PopupComponent; Component_1.ComponentService.register(PopupComponent); exports.default = PopupComponent; -},{"../../Component":274,"../../Utils":284,"rxjs":26,"rxjs/operators":224}],331:[function(require,module,exports){ +},{"../../Component":291,"../../Utils":301,"rxjs":43,"rxjs/operators":241}],352:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Popup = void 0; var rxjs_1 = require("rxjs"); var Geo_1 = require("../../../Geo"); var Utils_1 = require("../../../Utils"); @@ -26558,7 +35772,7 @@ var Popup = /** @class */ (function () { get: function () { return this._notifyChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -26764,10 +35978,10 @@ var Popup = /** @class */ (function () { } } if (pointPixel == null) { - this._container.style.visibility = "hidden"; + this._container.style.display = "none"; return; } - this._container.style.visibility = "visible"; + this._container.style.display = ""; if (!float) { var width = this._container.offsetWidth; var height = this._container.offsetHeight; @@ -26962,7 +36176,7 @@ exports.Popup = Popup; exports.default = Popup; -},{"../../../Geo":277,"../../../Utils":284,"../../../Viewer":285,"rxjs":26}],332:[function(require,module,exports){ +},{"../../../Geo":294,"../../../Utils":301,"../../../Viewer":302,"rxjs":43}],353:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -26970,7 +36184,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -26978,6 +36192,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.SequenceComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); @@ -27033,7 +36248,7 @@ var SequenceComponent = /** @class */ (function (_super) { get: function () { return this._hoveredKey$; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -27109,16 +36324,6 @@ var SequenceComponent = /** @class */ (function (_super) { SequenceComponent.prototype.setVisible = function (visible) { this.configure({ visible: visible }); }; - /** @inheritdoc */ - SequenceComponent.prototype.resize = function () { - var _this = this; - this._configuration$.pipe(operators_1.first(), operators_1.map(function (configuration) { - return _this._sequenceDOMRenderer.getContainerWidth(_this._container.element, configuration); - })) - .subscribe(function (containerWidth) { - _this._containerWidth$.next(containerWidth); - }); - }; SequenceComponent.prototype._activate = function () { var _this = this; this._sequenceDOMRenderer.activate(); @@ -27224,12 +36429,13 @@ var SequenceComponent = /** @class */ (function (_super) { .subscribe(function (direction) { _this._navigator.playService.setDirection(direction); }); - this._containerWidthSubscription = this._configuration$.pipe(operators_1.distinctUntilChanged(function (value1, value2) { + this._containerWidthSubscription = rxjs_1.combineLatest(this._container.renderService.size$, this._configuration$.pipe(operators_1.distinctUntilChanged(function (value1, value2) { return value1[0] === value2[0] && value1[1] === value2[1]; }, function (configuration) { return [configuration.minWidth, configuration.maxWidth]; - }), operators_1.map(function (configuration) { - return _this._sequenceDOMRenderer.getContainerWidth(_this._container.element, configuration); + }))).pipe(operators_1.map(function (_a) { + var size = _a[0], configuration = _a[1]; + return _this._sequenceDOMRenderer.getContainerWidth(size, configuration); })) .subscribe(this._containerWidth$); this._playingSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { @@ -27312,9 +36518,10 @@ exports.SequenceComponent = SequenceComponent; Component_1.ComponentService.register(SequenceComponent); exports.default = SequenceComponent; -},{"../../Component":274,"../../Edge":275,"../../Graph":278,"rxjs":26,"rxjs/operators":224}],333:[function(require,module,exports){ +},{"../../Component":291,"../../Edge":292,"../../Graph":295,"rxjs":43,"rxjs/operators":241}],354:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.SequenceDOMRenderer = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -27348,42 +36555,42 @@ var SequenceDOMRenderer = /** @class */ (function () { get: function () { return this._notifyChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SequenceDOMRenderer.prototype, "changingPositionChanged$", { get: function () { return this._notifyChangingPositionChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SequenceDOMRenderer.prototype, "speed$", { get: function () { return this._notifySpeedChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SequenceDOMRenderer.prototype, "index$", { get: function () { return this._notifyIndexChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SequenceDOMRenderer.prototype, "mouseEnterDirection$", { get: function () { return this._mouseEnterDirection$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SequenceDOMRenderer.prototype, "mouseLeaveDirection$", { get: function () { return this._mouseLeaveDirection$; }, - enumerable: true, + enumerable: false, configurable: true }); SequenceDOMRenderer.prototype.activate = function () { @@ -27424,16 +36631,14 @@ var SequenceDOMRenderer = /** @class */ (function () { var timeline = this._createTimelineControls(containerWidth, index, max); return vd.h("div.SequenceContainer", [stepper, controls, playback, timeline]); }; - SequenceDOMRenderer.prototype.getContainerWidth = function (element, configuration) { - var elementWidth = element.offsetWidth; - var elementHeight = element.offsetHeight; + SequenceDOMRenderer.prototype.getContainerWidth = function (size, configuration) { var minWidth = configuration.minWidth; var maxWidth = configuration.maxWidth; if (maxWidth < minWidth) { maxWidth = minWidth; } - var relativeWidth = (elementWidth - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth); - var relativeHeight = (elementHeight - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight); + var relativeWidth = (size.width - this._minThresholdWidth) / (this._maxThresholdWidth - this._minThresholdWidth); + var relativeHeight = (size.height - this._minThresholdHeight) / (this._maxThresholdHeight - this._minThresholdHeight); var coeff = Math.max(0, Math.min(1, Math.min(relativeWidth, relativeHeight))); return minWidth + coeff * (maxWidth - minWidth); }; @@ -27743,10 +36948,10 @@ var SequenceDOMRenderer = /** @class */ (function () { exports.SequenceDOMRenderer = SequenceDOMRenderer; exports.default = SequenceDOMRenderer; - -},{"../../Component":274,"../../Edge":275,"../../Error":276,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],334:[function(require,module,exports){ +},{"../../Component":291,"../../Edge":292,"../../Error":293,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],355:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.SequenceMode = void 0; var SequenceMode; (function (SequenceMode) { SequenceMode[SequenceMode["Default"] = 0] = "Default"; @@ -27755,9 +36960,10 @@ var SequenceMode; })(SequenceMode = exports.SequenceMode || (exports.SequenceMode = {})); exports.default = SequenceMode; -},{}],335:[function(require,module,exports){ +},{}],356:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Shaders = void 0; var path = require("path"); var Shaders = /** @class */ (function () { @@ -27779,6 +36985,14 @@ var Shaders = /** @class */ (function () { fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x / vRstq.z;\n float y = vRstq.y / vRstq.z;\n float r2 = x * x + y * y;\n\n if (radial_peak > 0. && r2 > radial_peak * sqrt(r2)) {\n r2 = radial_peak * radial_peak;\n }\n\n float d = 1.0 + k1 * r2 + k2 * r2 * r2;\n float u = scale_x * focal * d * x + 0.5;\n float v = - scale_y * focal * d * y + 0.5;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", }; + Shaders.fisheye = { + fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x;\n float y = vRstq.y;\n float z = vRstq.z;\n\n float r = sqrt(x * x + y * y);\n float theta = atan(r, z);\n\n if (radial_peak > 0. && theta > radial_peak) {\n theta = radial_peak;\n }\n\n float theta2 = theta * theta;\n float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n float s = focal * theta_d / r;\n\n float u = scale_x * s * x + 0.5;\n float v = -scale_y * s * y + 0.5;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", + vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", + }; + Shaders.fisheyeCurtain = { + fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\nuniform float focal;\nuniform float k1;\nuniform float k2;\nuniform float scale_x;\nuniform float scale_y;\nuniform float radial_peak;\nuniform float curtain;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float x = vRstq.x;\n float y = vRstq.y;\n float z = vRstq.z;\n\n float r2 = sqrt(x * x + y * y);\n float theta = atan(r2, z);\n\n if (radial_peak > 0. && theta > radial_peak) {\n theta = radial_peak;\n }\n\n float theta2 = theta * theta;\n float theta_d = theta * (1.0 + theta2 * (k1 + theta2 * k2));\n float s = focal * theta_d / r2;\n\n float u = scale_x * s * x + 0.5;\n float v = -scale_y * s * y + 0.5;\n\n vec4 baseColor;\n if ((u < curtain || curtain >= 1.0) && u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", + vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}", + }; Shaders.perspectiveDistorted = { fragment: "#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n\nuniform sampler2D projectorTex;\nuniform float opacity;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n float u = vRstq.x / vRstq.w;\n float v = vRstq.y / vRstq.w;\n\n vec4 baseColor;\n if (u >= 0. && u <= 1. && v >= 0. && v <= 1.) {\n baseColor = texture2D(projectorTex, vec2(u, v));\n baseColor.a = opacity;\n } else {\n baseColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n\n gl_FragColor = baseColor;\n}\n", vertex: "#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform mat4 projectorMat;\n\nvarying vec4 vRstq;\n\nvoid main()\n{\n vRstq = projectorMat * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n", @@ -27792,7 +37006,7 @@ var Shaders = /** @class */ (function () { exports.Shaders = Shaders; -},{"path":22}],336:[function(require,module,exports){ +},{"path":39}],357:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -27800,7 +37014,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -27808,6 +37022,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.SliderComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../Component"); @@ -27826,7 +37041,7 @@ var Utils_1 = require("../../Utils"); * components when activating the slider component to avoid * interfering UI elements. * - * To retrive and use the marker component + * To retrive and use the slider component * * @example * ``` @@ -27841,7 +37056,7 @@ var Utils_1 = require("../../Utils"); * * viewer.activateComponent("slider"); * - * var sliderComponent = viewer.getComponent("marker"); + * var sliderComponent = viewer.getComponent("slider"); * ``` */ var SliderComponent = /** @class */ (function (_super) { @@ -28472,9 +37687,10 @@ Component_1.ComponentService.register(SliderComponent); exports.default = SliderComponent; -},{"../../Component":274,"../../Geo":277,"../../Render":280,"../../State":281,"../../Tiles":283,"../../Utils":284,"rxjs":26,"rxjs/operators":224}],337:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294,"../../Render":297,"../../State":298,"../../Tiles":300,"../../Utils":301,"rxjs":43,"rxjs/operators":241}],358:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.SliderDOMRenderer = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -28491,14 +37707,14 @@ var SliderDOMRenderer = /** @class */ (function () { get: function () { return this._notifyModeChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SliderDOMRenderer.prototype, "position$", { get: function () { return this._notifyPositionChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); SliderDOMRenderer.prototype.activate = function () { @@ -28530,6 +37746,7 @@ var SliderDOMRenderer = /** @class */ (function () { var modeVisible = !(motionless || pano); if (modeVisible) { children.push(this._createModeButton(mode)); + children.push(this._createModeButton2d(mode)); } children.push(this._createPositionInput(position, modeVisible)); } @@ -28541,16 +37758,32 @@ var SliderDOMRenderer = /** @class */ (function () { var _this = this; var properties = { onclick: function () { - _this._notifyModeChanged$.next(mode === Component_1.SliderMode.Motion ? - Component_1.SliderMode.Stationary : - Component_1.SliderMode.Motion); + if (mode === Component_1.SliderMode.Motion) { + return; + } + _this._notifyModeChanged$.next(Component_1.SliderMode.Motion); }, }; var className = mode === Component_1.SliderMode.Stationary ? - "SliderModeButtonPressed" : + "SliderModeButtonDisabled" : "SliderModeButton"; return vd.h("div." + className, properties, [vd.h("div.SliderModeIcon", [])]); }; + SliderDOMRenderer.prototype._createModeButton2d = function (mode) { + var _this = this; + var properties = { + onclick: function () { + if (mode === Component_1.SliderMode.Stationary) { + return; + } + _this._notifyModeChanged$.next(Component_1.SliderMode.Stationary); + }, + }; + var className = mode === Component_1.SliderMode.Motion ? + "SliderModeButton2dDisabled" : + "SliderModeButton2d"; + return vd.h("div." + className, properties, [vd.h("div.SliderModeIcon2d", [])]); + }; SliderDOMRenderer.prototype._createPositionInput = function (position, modeVisible) { var _this = this; var onChange = function (e) { @@ -28572,7 +37805,7 @@ var SliderDOMRenderer = /** @class */ (function () { } }; var boundingRect = this._container.domContainer.getBoundingClientRect(); - var width = Math.max(215, Math.min(400, boundingRect.width - 105)) - 68 + (modeVisible ? 0 : 36); + var width = Math.max(215, Math.min(400, boundingRect.width - 105)) - 84 + (modeVisible ? 0 : 52); var positionInput = vd.h("input.SliderPosition", { max: 1000, min: 0, @@ -28596,9 +37829,10 @@ var SliderDOMRenderer = /** @class */ (function () { exports.SliderDOMRenderer = SliderDOMRenderer; exports.default = SliderDOMRenderer; -},{"../../Component":274,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],338:[function(require,module,exports){ +},{"../../Component":291,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],359:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.SliderGLRenderer = void 0; var Component_1 = require("../../Component"); var Geo_1 = require("../../Geo"); var SliderGLRenderer = /** @class */ (function () { @@ -28620,21 +37854,21 @@ var SliderGLRenderer = /** @class */ (function () { get: function () { return this._disabled; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SliderGLRenderer.prototype, "frameId", { get: function () { return this._frameId; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SliderGLRenderer.prototype, "needsRender", { get: function () { return this._needsRender; }, - enumerable: true, + enumerable: false, configurable: true }); SliderGLRenderer.prototype.setTextureProvider = function (key, provider) { @@ -28656,17 +37890,20 @@ var SliderGLRenderer = /** @class */ (function () { this._needsRender = true; }; SliderGLRenderer.prototype.updateTexture = function (image, node) { - var imagePlanes = node.key === this._currentKey ? - this._scene.imagePlanes : + var planes = node.key === this._currentKey ? + this._scene.planes : node.key === this._previousKey ? - this._scene.imagePlanesOld : - []; - if (imagePlanes.length === 0) { + this._scene.planesOld : + {}; + if (Object.keys(planes).length === 0) { return; } this._needsRender = true; - for (var _i = 0, imagePlanes_1 = imagePlanes; _i < imagePlanes_1.length; _i++) { - var plane = imagePlanes_1[_i]; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; var material = plane.material; var texture = material.uniforms.projectorTex.value; texture.image = image; @@ -28678,8 +37915,12 @@ var SliderGLRenderer = /** @class */ (function () { return; } this._needsRender = true; - for (var _i = 0, _a = this._scene.imagePlanes; _i < _a.length; _i++) { - var plane = _a[_i]; + var planes = this._scene.planes; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; var material = plane.material; var texture = material.uniforms.projectorTex.value; texture.image = image; @@ -28754,8 +37995,12 @@ var SliderGLRenderer = /** @class */ (function () { providerDisposers[key] = dispose; }; SliderGLRenderer.prototype._updateCurtain = function () { - for (var _i = 0, _a = this._scene.imagePlanes; _i < _a.length; _i++) { - var plane = _a[_i]; + var planes = this._scene.planes; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; var shaderMaterial = plane.material; if (!!shaderMaterial.uniforms.curtain) { shaderMaterial.uniforms.curtain.value = this._curtain; @@ -28783,7 +38028,7 @@ var SliderGLRenderer = /** @class */ (function () { } } if (this.disabled) { - this._scene.setImagePlanesOld([]); + this._scene.setImagePlanesOld({}); } else { if (previousChanged || modeChanged) { @@ -28824,7 +38069,9 @@ var SliderGLRenderer = /** @class */ (function () { mesh = this._factory.createMesh(state.previousNode, state.previousTransform); } } - this._scene.setImagePlanesOld([mesh]); + var previousPlanes = {}; + previousPlanes[previousNode.key] = mesh; + this._scene.setImagePlanesOld(previousPlanes); } } if (currentChanged || modeChanged) { @@ -28833,29 +38080,33 @@ var SliderGLRenderer = /** @class */ (function () { delete this._currentProviderDisposers[this._currentKey]; } this._currentKey = state.currentNode.key; - var imagePlanes = []; + var planes = {}; if (state.currentNode.fullPano) { - imagePlanes.push(this._factory.createCurtainMesh(state.currentNode, state.currentTransform)); + planes[state.currentNode.key] = this._factory.createCurtainMesh(state.currentNode, state.currentTransform); } else if (state.currentNode.pano && !state.currentNode.fullPano) { - imagePlanes.push(this._factory.createMesh(state.currentNode, state.currentTransform)); + planes[state.currentNode.key] = this._factory.createMesh(state.currentNode, state.currentTransform); } else { if (motionless) { - imagePlanes.push(this._factory.createDistortedCurtainMesh(state.currentNode, state.currentTransform)); + planes[state.currentNode.key] = this._factory.createDistortedCurtainMesh(state.currentNode, state.currentTransform); } else { - imagePlanes.push(this._factory.createCurtainMesh(state.currentNode, state.currentTransform)); + planes[state.currentNode.key] = this._factory.createCurtainMesh(state.currentNode, state.currentTransform); } } - this._scene.setImagePlanes(imagePlanes); + this._scene.setImagePlanes(planes); this._updateCurtain(); } }; SliderGLRenderer.prototype._updateTexture = function (texture) { this._needsRender = true; - for (var _i = 0, _a = this._scene.imagePlanes; _i < _a.length; _i++) { - var plane = _a[_i]; + var planes = this._scene.planes; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; var material = plane.material; var oldTexture = material.uniforms.projectorTex.value; material.uniforms.projectorTex.value = null; @@ -28865,8 +38116,12 @@ var SliderGLRenderer = /** @class */ (function () { }; SliderGLRenderer.prototype._updateTexturePrev = function (texture) { this._needsRender = true; - for (var _i = 0, _a = this._scene.imagePlanesOld; _i < _a.length; _i++) { - var plane = _a[_i]; + var planes = this._scene.planesOld; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; var material = plane.material; var oldTexture = material.uniforms.projectorTex.value; material.uniforms.projectorTex.value = null; @@ -28880,10 +38135,31 @@ exports.SliderGLRenderer = SliderGLRenderer; exports.default = SliderGLRenderer; -},{"../../Component":274,"../../Geo":277}],339:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294}],360:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraVisualizationMode = void 0; +var CameraVisualizationMode; +(function (CameraVisualizationMode) { + CameraVisualizationMode[CameraVisualizationMode["Default"] = 0] = "Default"; + CameraVisualizationMode[CameraVisualizationMode["Cluster"] = 1] = "Cluster"; + CameraVisualizationMode[CameraVisualizationMode["ConnectedComponent"] = 2] = "ConnectedComponent"; + CameraVisualizationMode[CameraVisualizationMode["Sequence"] = 3] = "Sequence"; +})(CameraVisualizationMode = exports.CameraVisualizationMode || (exports.CameraVisualizationMode = {})); +exports.default = CameraVisualizationMode; + +},{}],361:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var CameraVisualizationMode_1 = require("./CameraVisualizationMode"); +Object.defineProperty(exports, "CameraVisualizationMode", { enumerable: true, get: function () { return CameraVisualizationMode_1.CameraVisualizationMode; } }); + +},{"./CameraVisualizationMode":360}],362:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SpatialDataCache = void 0; var geohash = require("latlon-geohash"); +var pako = require("pako"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Error_1 = require("../../Error"); @@ -28893,68 +38169,68 @@ var SpatialDataCache = /** @class */ (function () { this._graphService = graphService; this._tiles = {}; this._cacheRequests = {}; - this._reconstructions = {}; - this._cachingReconstructions$ = {}; + this._clusterReconstructions = {}; + this._clusterReconstructionTiles = {}; + this._tileClusters = {}; this._cachingTiles$ = {}; + this._cachingClusterReconstructions$ = {}; } - SpatialDataCache.prototype.cacheReconstructions$ = function (hash) { + SpatialDataCache.prototype.cacheClusterReconstructions$ = function (hash) { var _this = this; - if (!(hash in this._tiles)) { + if (!this.hasTile(hash)) { throw new Error("Cannot cache reconstructions of a non-existing tile."); } - if (this.hasReconstructions(hash)) { + if (this.hasClusterReconstructions(hash)) { throw new Error("Cannot cache reconstructions that already exists."); } - if (hash in this._cachingReconstructions$) { - return this._cachingReconstructions$[hash]; + if (this.isCachingClusterReconstructions(hash)) { + return this._cachingClusterReconstructions$[hash]; } - var tile = []; - if (hash in this._reconstructions) { - var reconstructionKeys = this.getReconstructions(hash) - .map(function (reconstruction) { - return reconstruction.data.key; - }); - for (var _i = 0, _a = this.getTile(hash); _i < _a.length; _i++) { - var node = _a[_i]; - if (reconstructionKeys.indexOf(node.key) === -1) { - tile.push(node); + var clusterKeys = this.getTile(hash) + .filter(function (nd) { + return !!nd.clusterKey; + }) + .map(function (nd) { + return nd.clusterKey; + }) + .filter(function (v, i, a) { + return a.indexOf(v) === i; + }); + this._tileClusters[hash] = clusterKeys; + this._cacheRequests[hash] = []; + this._cachingClusterReconstructions$[hash] = rxjs_1.from(clusterKeys).pipe(operators_1.mergeMap(function (key) { + if (_this._hasClusterReconstruction(key)) { + return rxjs_1.of(_this._getClusterReconstruction(key)); + } + return _this._getClusterReconstruction$(key, _this._cacheRequests[hash]) + .pipe(operators_1.catchError(function (error) { + if (error instanceof Error_1.AbortMapillaryError) { + return rxjs_1.empty(); } + console.error(error); + return rxjs_1.empty(); + })); + }, 6), operators_1.filter(function () { + return hash in _this._tileClusters; + }), operators_1.tap(function (reconstruction) { + if (!_this._hasClusterReconstruction(reconstruction.key)) { + _this._clusterReconstructions[reconstruction.key] = reconstruction; + } + if (!(reconstruction.key in _this._clusterReconstructionTiles)) { + _this._clusterReconstructionTiles[reconstruction.key] = []; + } + if (_this._clusterReconstructionTiles[reconstruction.key].indexOf(hash) === -1) { + _this._clusterReconstructionTiles[reconstruction.key].push(hash); } - } - else { - tile.push.apply(tile, this.getTile(hash)); - this._reconstructions[hash] = []; - } - this._cacheRequests[hash] = []; - this._cachingReconstructions$[hash] = rxjs_1.from(tile).pipe(operators_1.mergeMap(function (nodeData) { - return !_this._cacheRequests[hash] ? - rxjs_1.empty() : - rxjs_1.zip(rxjs_1.of(nodeData), _this._getAtomicReconstruction(nodeData.key, _this._cacheRequests[hash])) - .pipe(operators_1.catchError(function (error) { - if (error instanceof Error_1.AbortMapillaryError) { - return rxjs_1.empty(); - } - console.error(error); - return rxjs_1.of([nodeData, null]); - })); - }, 6), operators_1.map(function (_a) { - var nodeData = _a[0], reconstruction = _a[1]; - return { data: nodeData, reconstruction: reconstruction }; - }), operators_1.filter(function () { - return hash in _this._reconstructions; - }), operators_1.tap(function (data) { - _this._reconstructions[hash].push(data); - }), operators_1.filter(function (data) { - return !!data.reconstruction; }), operators_1.finalize(function () { - if (hash in _this._cachingReconstructions$) { - delete _this._cachingReconstructions$[hash]; + if (hash in _this._cachingClusterReconstructions$) { + delete _this._cachingClusterReconstructions$[hash]; } if (hash in _this._cacheRequests) { delete _this._cacheRequests[hash]; } }), operators_1.publish(), operators_1.refCount()); - return this._cachingReconstructions$[hash]; + return this._cachingClusterReconstructions$[hash]; }; SpatialDataCache.prototype.cacheTile$ = function (hash) { var _this = this; @@ -28964,15 +38240,14 @@ var SpatialDataCache = /** @class */ (function () { if (this.hasTile(hash)) { throw new Error("Cannot cache tile that already exists."); } - if (hash in this._cachingTiles$) { + if (this.isCachingTile(hash)) { return this._cachingTiles$[hash]; } var bounds = geohash.bounds(hash); var sw = { lat: bounds.sw.lat, lon: bounds.sw.lon }; var ne = { lat: bounds.ne.lat, lon: bounds.ne.lon }; - this._tiles[hash] = []; - this._cachingTiles$[hash] = this._graphService.cacheBoundingBox$(sw, ne).pipe(operators_1.catchError(function () { - delete _this._tiles[hash]; + this._cachingTiles$[hash] = this._graphService.cacheBoundingBox$(sw, ne).pipe(operators_1.catchError(function (error) { + console.error(error); return rxjs_1.empty(); }), operators_1.map(function (nodes) { return nodes @@ -28980,9 +38255,10 @@ var SpatialDataCache = /** @class */ (function () { return _this._createNodeData(n); }); }), operators_1.filter(function () { - return hash in _this._tiles; + return !(hash in _this._tiles); }), operators_1.tap(function (nodeData) { var _a; + _this._tiles[hash] = []; (_a = _this._tiles[hash]).push.apply(_a, nodeData); delete _this._cachingTiles$[hash]; }), operators_1.finalize(function () { @@ -28992,25 +38268,37 @@ var SpatialDataCache = /** @class */ (function () { }), operators_1.publish(), operators_1.refCount()); return this._cachingTiles$[hash]; }; - SpatialDataCache.prototype.isCachingReconstructions = function (hash) { - return hash in this._cachingReconstructions$; + SpatialDataCache.prototype.isCachingClusterReconstructions = function (hash) { + return hash in this._cachingClusterReconstructions$; }; SpatialDataCache.prototype.isCachingTile = function (hash) { return hash in this._cachingTiles$; }; - SpatialDataCache.prototype.hasReconstructions = function (hash) { - return !(hash in this._cachingReconstructions$) && - hash in this._reconstructions && - this._reconstructions[hash].length === this._tiles[hash].length; + SpatialDataCache.prototype.hasClusterReconstructions = function (hash) { + if (hash in this._cachingClusterReconstructions$ || + !(hash in this._tileClusters)) { + return false; + } + for (var _i = 0, _a = this._tileClusters[hash]; _i < _a.length; _i++) { + var key = _a[_i]; + if (!(key in this._clusterReconstructions)) { + return false; + } + } + return true; }; SpatialDataCache.prototype.hasTile = function (hash) { return !(hash in this._cachingTiles$) && hash in this._tiles; }; - SpatialDataCache.prototype.getReconstructions = function (hash) { - return hash in this._reconstructions ? - this._reconstructions[hash] - .filter(function (data) { - return !!data.reconstruction; + SpatialDataCache.prototype.getClusterReconstructions = function (hash) { + var _this = this; + return hash in this._tileClusters ? + this._tileClusters[hash] + .map(function (key) { + return _this._clusterReconstructions[key]; + }) + .filter(function (reconstruction) { + return !!reconstruction; }) : []; }; @@ -29029,15 +38317,31 @@ var SpatialDataCache = /** @class */ (function () { } delete this._cacheRequests[hash]; } - for (var _d = 0, _e = Object.keys(this._reconstructions); _d < _e.length; _d++) { + for (var _d = 0, _e = Object.keys(this._tileClusters); _d < _e.length; _d++) { var hash = _e[_d]; if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { continue; } - delete this._reconstructions[hash]; + for (var _f = 0, _g = this._tileClusters[hash]; _f < _g.length; _f++) { + var key = _g[_f]; + if (!(key in this._clusterReconstructionTiles)) { + continue; + } + var index = this._clusterReconstructionTiles[key].indexOf(hash); + if (index === -1) { + continue; + } + this._clusterReconstructionTiles[key].splice(index, 1); + if (this._clusterReconstructionTiles[key].length > 0) { + continue; + } + delete this._clusterReconstructionTiles[key]; + delete this._clusterReconstructions[key]; + } + delete this._tileClusters[hash]; } - for (var _f = 0, _g = Object.keys(this._tiles); _f < _g.length; _f++) { - var hash = _g[_f]; + for (var _h = 0, _j = Object.keys(this._tiles); _h < _j.length; _h++) { + var hash = _j[_h]; if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { continue; } @@ -29047,6 +38351,8 @@ var SpatialDataCache = /** @class */ (function () { SpatialDataCache.prototype._createNodeData = function (node) { return { alt: node.alt, + cameraProjection: node.cameraProjection, + clusterKey: node.clusterKey, focal: node.focal, gpano: node.gpano, height: node.height, @@ -29061,43 +38367,57 @@ var SpatialDataCache = /** @class */ (function () { originalLon: node.originalLatLon.lon, rotation: [node.rotation[0], node.rotation[1], node.rotation[2]], scale: node.scale, + sequenceKey: node.sequenceKey, width: node.width, }; }; - SpatialDataCache.prototype._getAtomicReconstruction = function (key, requests) { + SpatialDataCache.prototype._getClusterReconstruction = function (key) { + return this._clusterReconstructions[key]; + }; + SpatialDataCache.prototype._getClusterReconstruction$ = function (key, requests) { return rxjs_1.Observable.create(function (subscriber) { - var xmlHTTP = new XMLHttpRequest(); - xmlHTTP.open("GET", Utils_1.Urls.atomicReconstruction(key), true); - xmlHTTP.responseType = "json"; - xmlHTTP.timeout = 15000; - xmlHTTP.onload = function () { - if (!xmlHTTP.response) { - subscriber.error(new Error("Atomic reconstruction does not exist (" + key + ")")); + var xhr = new XMLHttpRequest(); + xhr.open("GET", Utils_1.Urls.clusterReconstruction(key), true); + xhr.responseType = "arraybuffer"; + xhr.timeout = 15000; + xhr.onload = function () { + if (!xhr.response) { + subscriber.error(new Error("Cluster reconstruction retreival failed (" + key + ")")); } else { - subscriber.next(xmlHTTP.response); + var inflated = pako.inflate(xhr.response, { to: "string" }); + var reconstructions = JSON.parse(inflated); + if (reconstructions.length < 1) { + subscriber.error(new Error("No cluster reconstruction exists (" + key + ")")); + } + var reconstruction = reconstructions[0]; + reconstruction.key = key; + subscriber.next(reconstruction); subscriber.complete(); } }; - xmlHTTP.onerror = function () { - subscriber.error(new Error("Failed to get atomic reconstruction (" + key + ")")); + xhr.onerror = function () { + subscriber.error(new Error("Failed to get cluster reconstruction (" + key + ")")); }; - xmlHTTP.ontimeout = function () { - subscriber.error(new Error("Atomic reconstruction request timed out (" + key + ")")); + xhr.ontimeout = function () { + subscriber.error(new Error("Cluster reconstruction request timed out (" + key + ")")); }; - xmlHTTP.onabort = function () { - subscriber.error(new Error_1.AbortMapillaryError("Atomic reconstruction request was aborted (" + key + ")")); + xhr.onabort = function () { + subscriber.error(new Error_1.AbortMapillaryError("Cluster reconstruction request was aborted (" + key + ")")); }; - requests.push(xmlHTTP); - xmlHTTP.send(null); + requests.push(xhr); + xhr.send(null); }); }; + SpatialDataCache.prototype._hasClusterReconstruction = function (key) { + return key in this._clusterReconstructions; + }; return SpatialDataCache; }()); exports.SpatialDataCache = SpatialDataCache; exports.default = SpatialDataCache; -},{"../../Error":276,"../../Utils":284,"latlon-geohash":21,"rxjs":26,"rxjs/operators":224}],340:[function(require,module,exports){ +},{"../../Error":293,"../../Utils":301,"latlon-geohash":21,"pako":23,"rxjs":43,"rxjs/operators":241}],363:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -29105,7 +38425,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -29113,6 +38433,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.SpatialDataComponent = void 0; var geohash = require("latlon-geohash"); var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); @@ -29121,6 +38442,7 @@ var Geo_1 = require("../../Geo"); var Render_1 = require("../../Render"); var PlayService_1 = require("../../viewer/PlayService"); var State_1 = require("../../state/State"); +var CameraVisualizationMode_1 = require("./CameraVisualizationMode"); var SpatialDataComponent = /** @class */ (function (_super) { __extends(SpatialDataComponent, _super); function SpatialDataComponent(name, container, navigator) { @@ -29133,6 +38455,18 @@ var SpatialDataComponent = /** @class */ (function (_super) { } SpatialDataComponent.prototype._activate = function () { var _this = this; + this._earthControlsSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { + return configuration.earthControls; + }), operators_1.distinctUntilChanged(), operators_1.withLatestFrom(this._navigator.stateService.state$)) + .subscribe(function (_a) { + var earth = _a[0], state = _a[1]; + if (earth && state !== State_1.default.Earth) { + _this._navigator.stateService.earth(); + } + else if (!earth && state === State_1.default.Earth) { + _this._navigator.stateService.traverse(); + } + }); var direction$ = this._container.renderService.bearing$.pipe(operators_1.map(function (bearing) { var direction = ""; if (bearing > 292.5 || bearing <= 67.5) { @@ -29160,80 +38494,81 @@ var SpatialDataComponent = /** @class */ (function (_super) { var playing = _a[0], speed = _a[1]; return playing && speed > PlayService_1.default.sequenceSpeed; }), operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); - this._addSubscription = this._navigator.stateService.state$.pipe(operators_1.map(function (state) { + var hashes$ = rxjs_1.combineLatest(this._navigator.stateService.state$.pipe(operators_1.map(function (state) { return state === State_1.default.Earth; - }), operators_1.distinctUntilChanged(), operators_1.switchMap(function (earth) { - if (earth) { - return rxjs_1.combineLatest(hash$, sequencePlay$).pipe(operators_1.mergeMap(function (_a) { - var hash = _a[0], sequencePlay = _a[1]; - return sequencePlay ? - rxjs_1.of([hash]) : - rxjs_1.of(_this._adjacentComponent(hash, 4)); - })); + }), operators_1.distinctUntilChanged()), hash$, sequencePlay$, direction$).pipe(operators_1.distinctUntilChanged(function (_a, _b) { + var e1 = _a[0], h1 = _a[1], s1 = _a[2], d1 = _a[3]; + var e2 = _b[0], h2 = _b[1], s2 = _b[2], d2 = _b[3]; + if (e1 !== e2) { + return false; } - return rxjs_1.combineLatest(hash$, sequencePlay$, direction$).pipe(operators_1.mergeMap(function (_a) { - var hash = _a[0], sequencePlay = _a[1], direction = _a[2]; + if (e1) { + return h1 === h2 && s1 === s2; + } + return h1 === h2 && s1 === s2 && d1 === d2; + }), operators_1.concatMap(function (_a) { + var earth = _a[0], hash = _a[1], sequencePlay = _a[2], direction = _a[3]; + if (earth) { return sequencePlay ? - rxjs_1.of([hash, geohash.neighbours(hash)[direction]]) : - rxjs_1.of(_this._computeTiles(hash, direction)); - })); - }), operators_1.switchMap(function (hashes) { + rxjs_1.of([hash]) : + rxjs_1.of(_this._adjacentComponent(hash, 4)); + } + return sequencePlay ? + rxjs_1.of([hash, geohash.neighbours(hash)[direction]]) : + rxjs_1.of(_this._computeTiles(hash, direction)); + }), operators_1.publish(), operators_1.refCount()); + var tile$ = hashes$.pipe(operators_1.switchMap(function (hashes) { return rxjs_1.from(hashes).pipe(operators_1.mergeMap(function (h) { - var tile$; - if (_this._cache.hasTile(h)) { - tile$ = rxjs_1.of(_this._cache.getTile(h)); - } - else if (_this._cache.isCachingTile(h)) { - tile$ = _this._cache.cacheTile$(h).pipe(operators_1.last(null, {}), operators_1.switchMap(function () { - return rxjs_1.of(_this._cache.getTile(h)); - })); - } - else { - tile$ = _this._cache.cacheTile$(h); + var t$ = _this._cache.hasTile(h) ? + rxjs_1.of(_this._cache.getTile(h)) : + _this._cache.cacheTile$(h); + return rxjs_1.combineLatest(rxjs_1.of(h), t$); + }, 6)); + }), operators_1.publish(), operators_1.refCount()); + this._addTileSubscription = tile$.pipe(operators_1.withLatestFrom(this._navigator.stateService.reference$)) + .subscribe(function (_a) { + var hash = _a[0][0], reference = _a[1]; + if (_this._scene.hasTile(hash)) { + return; + } + _this._scene.addTile(_this._computeTileBBox(hash, reference), hash); + }); + this._addNodeSubscription = tile$.pipe(operators_1.withLatestFrom(this._navigator.stateService.reference$)) + .subscribe(function (_a) { + var _b = _a[0], hash = _b[0], datas = _b[1], reference = _a[1]; + for (var _i = 0, datas_1 = datas; _i < datas_1.length; _i++) { + var data = datas_1[_i]; + if (_this._scene.hasNode(data.key, hash)) { + continue; } - return rxjs_1.combineLatest(rxjs_1.of(h), tile$); - }, 1), operators_1.map(function (_a) { - var hash = _a[0]; - return hash; - })); - }), operators_1.concatMap(function (hash) { + _this._scene.addNode(data, _this._createTransform(data, reference), _this._computeOriginalPosition(data, reference), hash); + } + }); + this._addReconstructionSubscription = tile$.pipe(operators_1.concatMap(function (_a) { + var hash = _a[0]; var reconstructions$; - if (_this._cache.hasReconstructions(hash)) { - reconstructions$ = rxjs_1.from(_this._cache.getReconstructions(hash)); + if (_this._cache.hasClusterReconstructions(hash)) { + reconstructions$ = rxjs_1.from(_this._cache.getClusterReconstructions(hash)); } - else if (_this._cache.isCachingReconstructions(hash)) { - reconstructions$ = _this._cache.cacheReconstructions$(hash).pipe(operators_1.last(null, {}), operators_1.switchMap(function () { - return rxjs_1.from(_this._cache.getReconstructions(hash)); + else if (_this._cache.isCachingClusterReconstructions(hash)) { + reconstructions$ = _this._cache.cacheClusterReconstructions$(hash).pipe(operators_1.last(null, {}), operators_1.switchMap(function () { + return rxjs_1.from(_this._cache.getClusterReconstructions(hash)); })); } else if (_this._cache.hasTile(hash)) { - reconstructions$ = _this._cache.cacheReconstructions$(hash); + reconstructions$ = _this._cache.cacheClusterReconstructions$(hash); } else { reconstructions$ = rxjs_1.empty(); } return rxjs_1.combineLatest(rxjs_1.of(hash), reconstructions$); - }), operators_1.withLatestFrom(this._navigator.stateService.reference$), operators_1.tap(function (_a) { - var hash = _a[0][0], reference = _a[1]; - if (_this._scene.hasTile(hash)) { + }), operators_1.withLatestFrom(this._navigator.stateService.reference$)) + .subscribe(function (_a) { + var _b = _a[0], hash = _b[0], reconstruction = _b[1], reference = _a[1]; + if (_this._scene.hasClusterReconstruction(reconstruction.key, hash)) { return; } - _this._scene.addTile(_this._computeTileBBox(hash, reference), hash); - }), operators_1.filter(function (_a) { - var _b = _a[0], hash = _b[0], data = _b[1]; - return !_this._scene.hasReconstruction(data.reconstruction.main_shot, hash); - }), operators_1.map(function (_a) { - var _b = _a[0], hash = _b[0], data = _b[1], reference = _a[1]; - return [ - data, - _this._createTransform(data.data, reference), - _this._computeOriginalPosition(data.data, reference), - hash - ]; - })) - .subscribe(function (_a) { - var data = _a[0], transform = _a[1], position = _a[2], hash = _a[3]; - _this._scene.addReconstruction(data.reconstruction, transform, position, !!data.data.mergeCC ? data.data.mergeCC.toString() : "", hash); + _this._scene.addClusterReconstruction(reconstruction, _this._computeTranslation(reconstruction, reference), hash); }); this._cameraVisibilitySubscription = this._configuration$.pipe(operators_1.map(function (configuration) { return configuration.camerasVisible; @@ -29259,11 +38594,19 @@ var SpatialDataComponent = /** @class */ (function (_super) { .subscribe(function (visible) { _this._scene.setTileVisibility(visible); }); - this._visualizeConnectedComponentSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.connectedComponents; + this._ccToModeSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { + return configuration.connectedComponents === true ? + CameraVisualizationMode_1.default.ConnectedComponent : + CameraVisualizationMode_1.default.Default; + }), operators_1.distinctUntilChanged()) + .subscribe(function (mode) { + _this.configure({ cameraVisualizationMode: mode }); + }); + this._cameraVisualizationModeSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { + return configuration.cameraVisualizationMode; }), operators_1.distinctUntilChanged()) - .subscribe(function (visualize) { - _this._scene.setConnectedComponentVisualization(visualize); + .subscribe(function (mode) { + _this._scene.setCameraVisualizationMode(mode); }); this._uncacheSubscription = hash$ .subscribe(function (hash) { @@ -29301,30 +38644,14 @@ var SpatialDataComponent = /** @class */ (function (_super) { }; })) .subscribe(this._container.glRenderer.render$); - this._earthControlsSubscription = this._configuration$.pipe(operators_1.map(function (configuration) { - return configuration.earthControls; - }), operators_1.distinctUntilChanged(), operators_1.withLatestFrom(this._navigator.stateService.state$)) - .subscribe(function (_a) { - var earth = _a[0], state = _a[1]; - if (earth && state !== State_1.default.Earth) { - _this._navigator.stateService.earth(); - } - else if (!earth && state === State_1.default.Earth) { - _this._navigator.stateService.traverse(); - } - }); }; SpatialDataComponent.prototype._deactivate = function () { var _this = this; - this._navigator.stateService.state$.pipe(operators_1.first()) - .subscribe(function (state) { - if (state === State_1.default.Earth) { - _this._navigator.stateService.traverse(); - } - }); this._cache.uncache(); this._scene.uncache(); - this._addSubscription.unsubscribe(); + this._addNodeSubscription.unsubscribe(); + this._addReconstructionSubscription.unsubscribe(); + this._addTileSubscription.unsubscribe(); this._cameraVisibilitySubscription.unsubscribe(); this._earthControlsSubscription.unsubscribe(); this._moveSubscription.unsubscribe(); @@ -29333,10 +38660,24 @@ var SpatialDataComponent = /** @class */ (function (_super) { this._renderSubscription.unsubscribe(); this._tileVisibilitySubscription.unsubscribe(); this._uncacheSubscription.unsubscribe(); - this._visualizeConnectedComponentSubscription.unsubscribe(); + this._cameraVisualizationModeSubscription.unsubscribe(); + this._ccToModeSubscription.unsubscribe(); + this._navigator.stateService.state$.pipe(operators_1.first()) + .subscribe(function (state) { + if (state === State_1.default.Earth) { + _this._navigator.stateService.traverse(); + } + }); }; SpatialDataComponent.prototype._getDefaultConfiguration = function () { - return { camerasVisible: false, pointsVisible: true, positionsVisible: false, tilesVisible: false }; + return { + cameraVisualizationMode: CameraVisualizationMode_1.default.Default, + camerasVisible: false, + connectedComponents: false, + pointsVisible: true, + positionsVisible: false, + tilesVisible: false, + }; }; SpatialDataComponent.prototype._adjacentComponent = function (hash, depth) { var hashSet = new Set(); @@ -29380,7 +38721,7 @@ var SpatialDataComponent = /** @class */ (function (_super) { }; SpatialDataComponent.prototype._createTransform = function (data, reference) { var translation = Geo_1.Geo.computeTranslation({ alt: data.alt, lat: data.lat, lon: data.lon }, data.rotation, reference); - var transform = new Geo_1.Transform(data.orientation, data.width, data.height, data.focal, data.scale, data.gpano, data.rotation, translation, undefined, undefined, data.k1, data.k2); + var transform = new Geo_1.Transform(data.orientation, data.width, data.height, data.focal, data.scale, data.gpano, data.rotation, translation, undefined, undefined, data.k1, data.k2, data.cameraProjection); return transform; }; SpatialDataComponent.prototype._computeTiles = function (hash, direction) { @@ -29407,6 +38748,9 @@ var SpatialDataComponent = /** @class */ (function (_super) { this._computeTilesRecursive(hashSet, directionNeighbour, direction, directions, currentDepth + 1, maxDepth); } }; + SpatialDataComponent.prototype._computeTranslation = function (reconstruction, reference) { + return this._geoCoords.geodeticToEnu(reconstruction.reference_lla.latitude, reconstruction.reference_lla.longitude, reconstruction.reference_lla.altitude, reference.lat, reference.lon, reference.alt); + }; SpatialDataComponent.prototype._modulo = function (a, n) { return ((a % n) + n) % n; }; @@ -29424,65 +38768,115 @@ exports.SpatialDataComponent = SpatialDataComponent; Component_1.ComponentService.register(SpatialDataComponent); exports.default = SpatialDataComponent; -},{"../../Component":274,"../../Geo":277,"../../Render":280,"../../state/State":411,"../../viewer/PlayService":440,"latlon-geohash":21,"rxjs":26,"rxjs/operators":224}],341:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294,"../../Render":297,"../../state/State":449,"../../viewer/PlayService":481,"./CameraVisualizationMode":360,"latlon-geohash":21,"rxjs":43,"rxjs/operators":241}],364:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.SpatialDataScene = void 0; var THREE = require("three"); +var CameraVisualizationMode_1 = require("./CameraVisualizationMode"); var SpatialDataScene = /** @class */ (function () { function SpatialDataScene(configuration, scene, raycaster) { this._scene = !!scene ? scene : new THREE.Scene(); this._raycaster = !!raycaster ? raycaster : new THREE.Raycaster(undefined, undefined, 0.8); - this._connectedComponentColors = {}; + this._cameraColors = {}; this._needsRender = false; this._interactiveObjects = []; - this._reconstructions = {}; + this._nodes = {}; this._tiles = {}; + this._tileClusterReconstructions = {}; + this._clusterReconstructions = {}; + this._cameraVisualizationMode = !!configuration.cameraVisualizationMode ? + configuration.cameraVisualizationMode : + CameraVisualizationMode_1.default.Default; + if (this._cameraVisualizationMode === CameraVisualizationMode_1.default.Default && + configuration.connectedComponents === true) { + this._cameraVisualizationMode = CameraVisualizationMode_1.default.ConnectedComponent; + } this._camerasVisible = configuration.camerasVisible; this._pointsVisible = configuration.pointsVisible; this._positionsVisible = configuration.positionsVisible; this._tilesVisible = configuration.tilesVisible; - this._visualizeConnectedComponents = configuration.connectedComponents; } Object.defineProperty(SpatialDataScene.prototype, "needsRender", { get: function () { return this._needsRender; }, - enumerable: true, + enumerable: false, configurable: true }); - SpatialDataScene.prototype.addReconstruction = function (reconstruction, transform, originalPosition, connectedComponent, hash) { - if (!(hash in this._reconstructions)) { - this._reconstructions[hash] = { + SpatialDataScene.prototype.addClusterReconstruction = function (reconstruction, translation, hash) { + if (this.hasClusterReconstruction(reconstruction.key, hash)) { + return; + } + var key = reconstruction.key; + if (!(key in this._clusterReconstructions)) { + this._clusterReconstructions[key] = { + points: new THREE.Object3D(), + tiles: [], + }; + this._clusterReconstructions[key].points.visible = this._pointsVisible; + this._clusterReconstructions[key].points.add(this._createClusterPoints(reconstruction, translation)); + this._scene.add(this._clusterReconstructions[key].points); + } + if (this._clusterReconstructions[key].tiles.indexOf(hash) === -1) { + this._clusterReconstructions[key].tiles.push(hash); + } + if (!(hash in this._tileClusterReconstructions)) { + this._tileClusterReconstructions[hash] = { + keys: [], + }; + } + if (this._tileClusterReconstructions[hash].keys.indexOf(key) === -1) { + this._tileClusterReconstructions[hash].keys.push(key); + } + this._needsRender = true; + }; + SpatialDataScene.prototype.addNode = function (data, transform, originalPosition, hash) { + var key = data.key; + var clusterKey = data.clusterKey; + var sequenceKey = data.sequenceKey; + var connectedComponent = !!data.mergeCC ? data.mergeCC.toString() : ""; + if (this.hasNode(key, hash)) { + return; + } + if (!(hash in this._nodes)) { + this._nodes[hash] = { cameraKeys: {}, cameras: new THREE.Object3D(), + clusters: {}, connectedComponents: {}, keys: [], - points: new THREE.Object3D(), positions: new THREE.Object3D(), + sequences: {}, }; - this._reconstructions[hash].cameras.visible = this._camerasVisible; - this._reconstructions[hash].points.visible = this._pointsVisible; - this._reconstructions[hash].positions.visible = this._positionsVisible; - this._scene.add(this._reconstructions[hash].cameras, this._reconstructions[hash].points, this._reconstructions[hash].positions); + this._nodes[hash].cameras.visible = this._camerasVisible; + this._nodes[hash].positions.visible = this._positionsVisible; + this._scene.add(this._nodes[hash].cameras, this._nodes[hash].positions); + } + if (!(connectedComponent in this._nodes[hash].connectedComponents)) { + this._nodes[hash].connectedComponents[connectedComponent] = []; } - if (!(connectedComponent in this._reconstructions[hash].connectedComponents)) { - this._reconstructions[hash].connectedComponents[connectedComponent] = []; + if (!(clusterKey in this._nodes[hash].clusters)) { + this._nodes[hash].clusters[clusterKey] = []; } - if (transform.hasValidScale) { - this._reconstructions[hash].points.add(this._createPoints(reconstruction, transform)); + if (!(sequenceKey in this._nodes[hash].sequences)) { + this._nodes[hash].sequences[sequenceKey] = []; } var camera = this._createCamera(transform); - this._reconstructions[hash].cameras.add(camera); + this._nodes[hash].cameras.add(camera); for (var _i = 0, _a = camera.children; _i < _a.length; _i++) { var child = _a[_i]; - this._reconstructions[hash].cameraKeys[child.uuid] = reconstruction.main_shot; + this._nodes[hash].cameraKeys[child.uuid] = key; this._interactiveObjects.push(child); } - this._reconstructions[hash].connectedComponents[connectedComponent].push(camera); - var color = this._getColor(connectedComponent, this._visualizeConnectedComponents); + this._nodes[hash].connectedComponents[connectedComponent].push(camera); + this._nodes[hash].clusters[clusterKey].push(camera); + this._nodes[hash].sequences[sequenceKey].push(camera); + var id = this._getId(clusterKey, connectedComponent, sequenceKey, this._cameraVisualizationMode); + var color = this._getColor(id, this._cameraVisualizationMode); this._setCameraColor(color, camera); - this._reconstructions[hash].positions.add(this._createPosition(transform, originalPosition)); - this._reconstructions[hash].keys.push(reconstruction.main_shot); + this._nodes[hash].positions.add(this._createPosition(transform, originalPosition)); + this._nodes[hash].keys.push(key); this._needsRender = true; }; SpatialDataScene.prototype.addTile = function (tileBBox, hash) { @@ -29501,28 +38895,39 @@ var SpatialDataScene = /** @class */ (function () { this._needsRender = true; }; SpatialDataScene.prototype.uncache = function (keepHashes) { - for (var _i = 0, _a = Object.keys(this._reconstructions); _i < _a.length; _i++) { + for (var _i = 0, _a = Object.keys(this._tileClusterReconstructions); _i < _a.length; _i++) { var hash = _a[_i]; if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { continue; } this._disposeReconstruction(hash); } - for (var _b = 0, _c = Object.keys(this._tiles); _b < _c.length; _b++) { + for (var _b = 0, _c = Object.keys(this._nodes); _b < _c.length; _b++) { var hash = _c[_b]; if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { continue; } + this._disposeNodes(hash); + } + for (var _d = 0, _e = Object.keys(this._tiles); _d < _e.length; _d++) { + var hash = _e[_d]; + if (!!keepHashes && keepHashes.indexOf(hash) !== -1) { + continue; + } this._disposeTile(hash); } this._needsRender = true; }; - SpatialDataScene.prototype.hasReconstruction = function (key, hash) { - return hash in this._reconstructions && this._reconstructions[hash].keys.indexOf(key) !== -1; + SpatialDataScene.prototype.hasClusterReconstruction = function (key, hash) { + return key in this._clusterReconstructions && + this._clusterReconstructions[key].tiles.indexOf(hash) !== -1; }; SpatialDataScene.prototype.hasTile = function (hash) { return hash in this._tiles; }; + SpatialDataScene.prototype.hasNode = function (key, hash) { + return hash in this._nodes && this._nodes[hash].keys.indexOf(key) !== -1; + }; SpatialDataScene.prototype.intersectObjects = function (_a, camera) { var viewportX = _a[0], viewportY = _a[1]; if (!this._camerasVisible) { @@ -29532,12 +38937,12 @@ var SpatialDataScene = /** @class */ (function () { var intersects = this._raycaster.intersectObjects(this._interactiveObjects); for (var _i = 0, intersects_1 = intersects; _i < intersects_1.length; _i++) { var intersect = intersects_1[_i]; - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { + for (var hash in this._nodes) { + if (!this._nodes.hasOwnProperty(hash)) { continue; } - if (intersect.object.uuid in this._reconstructions[hash].cameraKeys) { - return this._reconstructions[hash].cameraKeys[intersect.object.uuid]; + if (intersect.object.uuid in this._nodes[hash].cameraKeys) { + return this._nodes[hash].cameraKeys[intersect.object.uuid]; } } } @@ -29547,11 +38952,11 @@ var SpatialDataScene = /** @class */ (function () { if (visible === this._camerasVisible) { return; } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { + for (var hash in this._nodes) { + if (!this._nodes.hasOwnProperty(hash)) { continue; } - this._reconstructions[hash].cameras.visible = visible; + this._nodes[hash].cameras.visible = visible; } this._camerasVisible = visible; this._needsRender = true; @@ -29560,11 +38965,11 @@ var SpatialDataScene = /** @class */ (function () { if (visible === this._pointsVisible) { return; } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { + for (var key in this._clusterReconstructions) { + if (!this._clusterReconstructions.hasOwnProperty(key)) { continue; } - this._reconstructions[hash].points.visible = visible; + this._clusterReconstructions[key].points.visible = visible; } this._pointsVisible = visible; this._needsRender = true; @@ -29573,11 +38978,11 @@ var SpatialDataScene = /** @class */ (function () { if (visible === this._positionsVisible) { return; } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { + for (var hash in this._nodes) { + if (!this._nodes.hasOwnProperty(hash)) { continue; } - this._reconstructions[hash].positions.visible = visible; + this._nodes[hash].positions.visible = visible; } this._positionsVisible = visible; this._needsRender = true; @@ -29595,27 +39000,44 @@ var SpatialDataScene = /** @class */ (function () { this._tilesVisible = visible; this._needsRender = true; }; - SpatialDataScene.prototype.setConnectedComponentVisualization = function (visualize) { - if (visualize === this._visualizeConnectedComponents) { + SpatialDataScene.prototype.setCameraVisualizationMode = function (mode) { + if (mode === this._cameraVisualizationMode) { return; } - for (var hash in this._reconstructions) { - if (!this._reconstructions.hasOwnProperty(hash)) { + for (var hash in this._nodes) { + if (!this._nodes.hasOwnProperty(hash)) { + continue; + } + var cameras = undefined; + if (mode === CameraVisualizationMode_1.default.Cluster) { + cameras = this._nodes[hash].clusters; + } + else if (mode === CameraVisualizationMode_1.default.ConnectedComponent) { + cameras = this._nodes[hash].connectedComponents; + } + else if (mode === CameraVisualizationMode_1.default.Sequence) { + cameras = this._nodes[hash].sequences; + } + else { + for (var _i = 0, _a = this._nodes[hash].cameras.children; _i < _a.length; _i++) { + var child = _a[_i]; + var color = this._getColor("", mode); + this._setCameraColor(color, child); + } continue; } - var connectedComponents = this._reconstructions[hash].connectedComponents; - for (var connectedComponent in connectedComponents) { - if (!connectedComponents.hasOwnProperty(connectedComponent)) { + for (var id in cameras) { + if (!cameras.hasOwnProperty(id)) { continue; } - var color = this._getColor(connectedComponent, visualize); - for (var _i = 0, _a = connectedComponents[connectedComponent]; _i < _a.length; _i++) { - var camera = _a[_i]; + var color = this._getColor(id, mode); + for (var _b = 0, _c = cameras[id]; _b < _c.length; _b++) { + var camera = _c[_b]; this._setCameraColor(color, camera); } } } - this._visualizeConnectedComponents = visualize; + this._cameraVisualizationMode = mode; this._needsRender = true; }; SpatialDataScene.prototype.render = function (perspectiveCamera, renderer) { @@ -29638,7 +39060,7 @@ var SpatialDataScene = /** @class */ (function () { var north = transform.unprojectBasic([0.5, 0], 0.22); var south = transform.unprojectBasic([0.5, 1], 0.16); var axis = new THREE.BufferGeometry(); - axis.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray([north, south], 3), 3)); + axis.setAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray([north, south], 3), 3)); return new THREE.Line(axis, new THREE.LineBasicMaterial()); }; SpatialDataScene.prototype._createCamera = function (transform) { @@ -29659,7 +39081,7 @@ var SpatialDataScene = /** @class */ (function () { origin, bottomLeft, ]; var diagonals = new THREE.BufferGeometry(); - diagonals.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3)); + diagonals.setAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3)); return new THREE.LineSegments(diagonals, new THREE.LineBasicMaterial()); }; SpatialDataScene.prototype._createFrame = function (transform, depth) { @@ -29672,7 +39094,7 @@ var SpatialDataScene = /** @class */ (function () { return transform.unprojectBasic(basic, depth, true); }); var frame = new THREE.BufferGeometry(); - frame.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices3d, 3), 3)); + frame.setAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices3d, 3), 3)); return new THREE.Line(frame, new THREE.LineBasicMaterial()); }; SpatialDataScene.prototype._createLatitude = function (basicY, numVertices, transform) { @@ -29685,7 +39107,7 @@ var SpatialDataScene = /** @class */ (function () { positions[index + 2] = position[2]; } var latitude = new THREE.BufferGeometry(); - latitude.addAttribute("position", new THREE.BufferAttribute(positions, 3)); + latitude.setAttribute("position", new THREE.BufferAttribute(positions, 3)); return new THREE.Line(latitude, new THREE.LineBasicMaterial()); }; SpatialDataScene.prototype._createLongitude = function (basicX, numVertices, transform) { @@ -29698,7 +39120,7 @@ var SpatialDataScene = /** @class */ (function () { positions[index + 2] = position[2]; } var latitude = new THREE.BufferGeometry(); - latitude.addAttribute("position", new THREE.BufferAttribute(positions, 3)); + latitude.setAttribute("position", new THREE.BufferAttribute(positions, 3)); return new THREE.Line(latitude, new THREE.LineBasicMaterial()); }; SpatialDataScene.prototype._createPanoCamera = function (transform) { @@ -29711,8 +39133,7 @@ var SpatialDataScene = /** @class */ (function () { camera.children.push(this._createLongitude(0.75, 6, transform)); return camera; }; - SpatialDataScene.prototype._createPoints = function (reconstruction, transform) { - var srtInverse = new THREE.Matrix4().getInverse(transform.srt); + SpatialDataScene.prototype._createClusterPoints = function (reconstruction, translation) { var points = Object .keys(reconstruction.points) .map(function (key) { @@ -29725,7 +39146,7 @@ var SpatialDataScene = /** @class */ (function () { var index = 3 * i; var coords = points[i].coordinates; var point = new THREE.Vector3(coords[0], coords[1], coords[2]) - .applyMatrix4(srtInverse); + .add(new THREE.Vector3().fromArray(translation)); positions[index + 0] = point.x; positions[index + 1] = point.y; positions[index + 2] = point.z; @@ -29735,11 +39156,11 @@ var SpatialDataScene = /** @class */ (function () { colors[index + 2] = color[2] / 255.0; } var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.addAttribute("color", new THREE.BufferAttribute(colors, 3)); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.setAttribute("color", new THREE.BufferAttribute(colors, 3)); var material = new THREE.PointsMaterial({ size: 0.1, - vertexColors: THREE.VertexColors, + vertexColors: true, }); return new THREE.Points(geometry, material); }; @@ -29747,7 +39168,7 @@ var SpatialDataScene = /** @class */ (function () { var computedPosition = transform.unprojectBasic([0, 0], 0); var vertices = [originalPosition, computedPosition]; var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3)); + geometry.setAttribute("position", new THREE.BufferAttribute(this._arrayToFloatArray(vertices, 3), 3)); return new THREE.Line(geometry, new THREE.LineBasicMaterial({ color: new THREE.Color(1, 0, 0) })); }; SpatialDataScene.prototype._createPrespectiveCamera = function (transform) { @@ -29758,7 +39179,7 @@ var SpatialDataScene = /** @class */ (function () { return camera; }; SpatialDataScene.prototype._disposeCameras = function (hash) { - var tileCameras = this._reconstructions[hash].cameras; + var tileCameras = this._nodes[hash].cameras; for (var _i = 0, _a = tileCameras.children.slice(); _i < _a.length; _i++) { var camera = _a[_i]; for (var _b = 0, _c = camera.children; _b < _c.length; _b++) { @@ -29778,17 +39199,30 @@ var SpatialDataScene = /** @class */ (function () { this._scene.remove(tileCameras); }; SpatialDataScene.prototype._disposePoints = function (hash) { - var tilePoints = this._reconstructions[hash].points; - for (var _i = 0, _a = tilePoints.children.slice(); _i < _a.length; _i++) { - var points = _a[_i]; - points.geometry.dispose(); - points.material.dispose(); - tilePoints.remove(points); + for (var _i = 0, _a = this._tileClusterReconstructions[hash].keys; _i < _a.length; _i++) { + var key = _a[_i]; + if (!(key in this._clusterReconstructions)) { + continue; + } + var index = this._clusterReconstructions[key].tiles.indexOf(hash); + if (index === -1) { + continue; + } + this._clusterReconstructions[key].tiles.splice(index, 1); + if (this._clusterReconstructions[key].tiles.length > 0) { + continue; + } + for (var _b = 0, _c = this._clusterReconstructions[key].points.children.slice(); _b < _c.length; _b++) { + var points = _c[_b]; + points.geometry.dispose(); + points.material.dispose(); + } + this._scene.remove(this._clusterReconstructions[key].points); + delete this._clusterReconstructions[key]; } - this._scene.remove(tilePoints); }; SpatialDataScene.prototype._disposePositions = function (hash) { - var tilePositions = this._reconstructions[hash].positions; + var tilePositions = this._nodes[hash].positions; for (var _i = 0, _a = tilePositions.children.slice(); _i < _a.length; _i++) { var position = _a[_i]; position.geometry.dispose(); @@ -29797,11 +39231,14 @@ var SpatialDataScene = /** @class */ (function () { } this._scene.remove(tilePositions); }; - SpatialDataScene.prototype._disposeReconstruction = function (hash) { + SpatialDataScene.prototype._disposeNodes = function (hash) { this._disposeCameras(hash); - this._disposePoints(hash); this._disposePositions(hash); - delete this._reconstructions[hash]; + delete this._nodes[hash]; + }; + SpatialDataScene.prototype._disposeReconstruction = function (hash) { + this._disposePoints(hash); + delete this._tileClusterReconstructions[hash]; }; SpatialDataScene.prototype._disposeTile = function (hash) { var tile = this._tiles[hash]; @@ -29814,16 +39251,28 @@ var SpatialDataScene = /** @class */ (function () { this._scene.remove(tile); delete this._tiles[hash]; }; - SpatialDataScene.prototype._getColor = function (connectedComponent, visualizeConnectedComponents) { - return visualizeConnectedComponents ? - this._getConnectedComponentColor(connectedComponent) : + SpatialDataScene.prototype._getColor = function (id, mode) { + return mode !== CameraVisualizationMode_1.default.Default && id.length > 0 ? + this._getCameraColor(id) : "#FFFFFF"; }; - SpatialDataScene.prototype._getConnectedComponentColor = function (connectedComponent) { - if (!(connectedComponent in this._connectedComponentColors)) { - this._connectedComponentColors[connectedComponent] = this._randomColor(); + SpatialDataScene.prototype._getCameraColor = function (id) { + if (!(id in this._cameraColors)) { + this._cameraColors[id] = this._randomColor(); + } + return this._cameraColors[id]; + }; + SpatialDataScene.prototype._getId = function (clusterKey, connectedComponent, sequenceKey, mode) { + switch (mode) { + case CameraVisualizationMode_1.default.Cluster: + return clusterKey; + case CameraVisualizationMode_1.default.ConnectedComponent: + return connectedComponent; + case CameraVisualizationMode_1.default.Sequence: + return sequenceKey; + default: + return ""; } - return this._connectedComponentColors[connectedComponent]; }; SpatialDataScene.prototype._interpolate = function (a, b, alpha) { return a + alpha * (b - a); @@ -29856,29 +39305,37 @@ var SpatialDataScene = /** @class */ (function () { exports.SpatialDataScene = SpatialDataScene; exports.default = SpatialDataScene; -},{"three":225}],342:[function(require,module,exports){ +},{"./CameraVisualizationMode":360,"three":242}],365:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],366:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var GeometryTagError_1 = require("./error/GeometryTagError"); -exports.GeometryTagError = GeometryTagError_1.GeometryTagError; +Object.defineProperty(exports, "GeometryTagError", { enumerable: true, get: function () { return GeometryTagError_1.GeometryTagError; } }); var PointGeometry_1 = require("./geometry/PointGeometry"); -exports.PointGeometry = PointGeometry_1.PointGeometry; +Object.defineProperty(exports, "PointGeometry", { enumerable: true, get: function () { return PointGeometry_1.PointGeometry; } }); +var PointsGeometry_1 = require("./geometry/PointsGeometry"); +Object.defineProperty(exports, "PointsGeometry", { enumerable: true, get: function () { return PointsGeometry_1.PointsGeometry; } }); var RectGeometry_1 = require("./geometry/RectGeometry"); -exports.RectGeometry = RectGeometry_1.RectGeometry; +Object.defineProperty(exports, "RectGeometry", { enumerable: true, get: function () { return RectGeometry_1.RectGeometry; } }); var PolygonGeometry_1 = require("./geometry/PolygonGeometry"); -exports.PolygonGeometry = PolygonGeometry_1.PolygonGeometry; +Object.defineProperty(exports, "PolygonGeometry", { enumerable: true, get: function () { return PolygonGeometry_1.PolygonGeometry; } }); var OutlineTag_1 = require("./tag/OutlineTag"); -exports.OutlineTag = OutlineTag_1.OutlineTag; +Object.defineProperty(exports, "OutlineTag", { enumerable: true, get: function () { return OutlineTag_1.OutlineTag; } }); +var ExtremePointTag_1 = require("./tag/ExtremePointTag"); +Object.defineProperty(exports, "ExtremePointTag", { enumerable: true, get: function () { return ExtremePointTag_1.ExtremePointTag; } }); var SpotTag_1 = require("./tag/SpotTag"); -exports.SpotTag = SpotTag_1.SpotTag; +Object.defineProperty(exports, "SpotTag", { enumerable: true, get: function () { return SpotTag_1.SpotTag; } }); var TagDomain_1 = require("./tag/TagDomain"); -exports.TagDomain = TagDomain_1.TagDomain; +Object.defineProperty(exports, "TagDomain", { enumerable: true, get: function () { return TagDomain_1.TagDomain; } }); var TagComponent_1 = require("./TagComponent"); -exports.TagComponent = TagComponent_1.TagComponent; +Object.defineProperty(exports, "TagComponent", { enumerable: true, get: function () { return TagComponent_1.TagComponent; } }); var TagMode_1 = require("./TagMode"); -exports.TagMode = TagMode_1.TagMode; +Object.defineProperty(exports, "TagMode", { enumerable: true, get: function () { return TagMode_1.TagMode; } }); -},{"./TagComponent":343,"./TagMode":346,"./error/GeometryTagError":350,"./geometry/PointGeometry":352,"./geometry/PolygonGeometry":353,"./geometry/RectGeometry":354,"./tag/OutlineTag":366,"./tag/SpotTag":369,"./tag/TagDomain":371}],343:[function(require,module,exports){ +},{"./TagComponent":367,"./TagMode":370,"./error/GeometryTagError":374,"./geometry/PointGeometry":376,"./geometry/PointsGeometry":377,"./geometry/PolygonGeometry":378,"./geometry/RectGeometry":379,"./tag/ExtremePointTag":394,"./tag/OutlineTag":398,"./tag/SpotTag":401,"./tag/TagDomain":403}],367:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -29886,7 +39343,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -29894,6 +39351,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var when = require("when"); @@ -29950,6 +39408,7 @@ var TagComponent = /** @class */ (function (_super) { _this._viewportCoords = new Geo_1.ViewportCoords(); _this._createHandlers = { "CreatePoint": new Component_1.CreatePointHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), + "CreatePoints": new Component_1.CreatePointsHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), "CreatePolygon": new Component_1.CreatePolygonHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), "CreateRect": new Component_1.CreateRectHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), "CreateRectDrag": new Component_1.CreateRectDragHandler(_this, container, navigator, _this._viewportCoords, _this._tagCreator), @@ -30035,6 +39494,70 @@ var TagComponent = /** @class */ (function (_super) { this._tagSet.addDeactivated(tags); } }; + /** + * Calculate the smallest rectangle containing all the points + * in the points geometry. + * + * @description The result may be different depending on if the + * current node is an equirectangular panorama or not. If the + * current node is an equirectangular panorama the rectangle may + * wrap the horizontal border of the image. + * + * @returns {Promise>} Promise to the rectangle + * on the format specified for the {@link RectGeometry} in basic + * coordinates. + */ + TagComponent.prototype.calculateRect = function (geometry) { + var _this = this; + return when.promise(function (resolve, reject) { + _this._navigator.stateService.currentTransform$.pipe(operators_1.first(), operators_1.map(function (transform) { + return geometry.getRect2d(transform); + })) + .subscribe(function (rect) { + resolve(rect); + }, function (error) { + reject(error); + }); + }); + }; + /** + * Force the creation of a geometry programatically using its + * current vertices. + * + * @description The method only has an effect when the tag + * mode is either of the following modes: + * + * TagMode.CreatePoints + * TagMode.CreatePolygon + * TagMode.CreateRect + * TagMode.CreateRectDrag + * + * In the case of points or polygon creation, only the created + * vertices are used, i.e. the mouse position is disregarded. + * + * In the case of rectangle creation the position of the mouse + * at the time of the method call is used as one of the vertices + * defining the rectangle. + * + * @fires TagComponent.geometrycreated + * + * @example + * ``` + * tagComponent.on("geometrycreated", function(geometry) { + * console.log(geometry); + * }); + * + * tagComponent.create(); + * ``` + */ + TagComponent.prototype.create = function () { + this._tagCreator.replayedTag$.pipe(operators_1.first(), operators_1.filter(function (tag) { + return !!tag; + })) + .subscribe(function (tag) { + tag.create(); + }); + }; /** * Change the current tag mode. * @@ -30091,7 +39614,8 @@ var TagComponent = /** @class */ (function (_super) { * tags that do not have a fill will also be returned if the point is inside * the geometry of the tag. Tags with point geometries can not be retrieved. * - * No tag ids will be returned for panoramas. + * No tag ids will be returned for polygons rendered in cropped panoramas or + * rectangles rendered in panoramas. * * Notice that the pixelPoint argument requires x, y coordinates from pixel space. * @@ -30101,7 +39625,8 @@ var TagComponent = /** @class */ (function (_super) { * If no tag at exist the pixel point, an empty array will be returned. * * @param {Array} pixelPoint - Pixel coordinates on the viewer element. - * @returns {Array} Ids of the tags that contain the specified pixel point. + * @returns {Promise>} Promise to the ids of the tags that + * contain the specified pixel point. * * @example * ``` @@ -30202,12 +39727,12 @@ var TagComponent = /** @class */ (function (_super) { } }); this._fireTagsChangedSubscription = this._renderTags$ - .subscribe(function (tags) { + .subscribe(function () { _this.fire(TagComponent.tagschanged, _this); }); this._stopCreateSubscription = this._tagCreator.tag$.pipe(operators_1.switchMap(function (tag) { return tag != null ? - tag.aborted$.pipe(operators_1.map(function (t) { return null; })) : + tag.aborted$.pipe(operators_1.map(function () { return null; })) : rxjs_1.empty(); })) .subscribe(function () { _this.changeMode(Component_1.TagMode.Default); }); @@ -30229,16 +39754,16 @@ var TagComponent = /** @class */ (function (_super) { _this._tagScene.updateObjects(tag); }); this._updateTagSceneSubscription = this._tagChanged$ - .subscribe(function (tag) { + .subscribe(function () { _this._tagScene.update(); }); - this._domSubscription = rxjs_1.combineLatest(this._renderTags$.pipe(operators_1.startWith([]), operators_1.tap(function (tags) { + this._domSubscription = rxjs_1.combineLatest(this._renderTags$.pipe(operators_1.startWith([]), operators_1.tap(function () { _this._container.domRenderer.render$.next({ name: _this._name, vnode: _this._tagDomRenderer.clear(), }); })), this._container.renderService.renderCamera$, this._container.spriteService.spriteAtlas$, this._container.renderService.size$, this._tagChanged$.pipe(operators_1.startWith(null)), rxjs_1.merge(this._tagCreator.tag$, this._createGeometryChanged$).pipe(operators_1.startWith(null))).pipe(operators_1.map(function (_a) { - var renderTags = _a[0], rc = _a[1], atlas = _a[2], size = _a[3], tag = _a[4], ct = _a[5]; + var renderTags = _a[0], rc = _a[1], atlas = _a[2], size = _a[3], ct = _a[5]; return { name: _this._name, vnode: _this._tagDomRenderer.render(renderTags, ct, atlas, rc.perspective, size), @@ -30287,6 +39812,7 @@ var TagComponent = /** @class */ (function (_super) { TagComponent.prototype._getDefaultConfiguration = function () { return { createColor: 0xFFFFFF, + indicatePointsCompleter: true, mode: Component_1.TagMode.Default, }; }; @@ -30381,9 +39907,10 @@ exports.TagComponent = TagComponent; Component_1.ComponentService.register(TagComponent); exports.default = TagComponent; -},{"../../Component":274,"../../Geo":277,"../../Render":280,"rxjs":26,"rxjs/operators":224,"when":271}],344:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294,"../../Render":297,"rxjs":43,"rxjs/operators":241,"when":288}],368:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagCreator = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var Component_1 = require("../../Component"); @@ -30392,15 +39919,32 @@ var TagCreator = /** @class */ (function () { this._component = component; this._navigator = navigator; this._tagOperation$ = new rxjs_1.Subject(); + this._createPoints$ = new rxjs_1.Subject(); this._createPolygon$ = new rxjs_1.Subject(); this._createRect$ = new rxjs_1.Subject(); this._delete$ = new rxjs_1.Subject(); this._tag$ = this._tagOperation$.pipe(operators_1.scan(function (tag, operation) { return operation(tag); }, null), operators_1.share()); + this._replayedTag$ = this._tag$.pipe(operators_1.publishReplay(1), operators_1.refCount()); + this._replayedTag$.subscribe(); + this._createPoints$.pipe(operators_1.withLatestFrom(this._component.configuration$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { + var coord = _a[0], conf = _a[1], transform = _a[2]; + return function () { + var geometry = new Component_1.PointsGeometry([ + [coord[0], coord[1]], + [coord[0], coord[1]], + ]); + return new Component_1.ExtremePointCreateTag(geometry, { + color: conf.createColor, + indicateCompleter: conf.indicatePointsCompleter, + }, transform); + }; + })) + .subscribe(this._tagOperation$); this._createRect$.pipe(operators_1.withLatestFrom(this._component.configuration$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { var coord = _a[0], conf = _a[1], transform = _a[2]; - return function (tag) { + return function () { var geometry = new Component_1.RectGeometry([ coord[0], coord[1], @@ -30413,7 +39957,7 @@ var TagCreator = /** @class */ (function () { .subscribe(this._tagOperation$); this._createPolygon$.pipe(operators_1.withLatestFrom(this._component.configuration$, this._navigator.stateService.currentTransform$), operators_1.map(function (_a) { var coord = _a[0], conf = _a[1], transform = _a[2]; - return function (tag) { + return function () { var geometry = new Component_1.PolygonGeometry([ [coord[0], coord[1]], [coord[0], coord[1]], @@ -30424,7 +39968,7 @@ var TagCreator = /** @class */ (function () { })) .subscribe(this._tagOperation$); this._delete$.pipe(operators_1.map(function () { - return function (tag) { + return function () { return null; }; })) @@ -30434,28 +39978,42 @@ var TagCreator = /** @class */ (function () { get: function () { return this._createRect$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TagCreator.prototype, "createPolygon$", { get: function () { return this._createPolygon$; }, - enumerable: true, + enumerable: false, + configurable: true + }); + Object.defineProperty(TagCreator.prototype, "createPoints$", { + get: function () { + return this._createPoints$; + }, + enumerable: false, configurable: true }); Object.defineProperty(TagCreator.prototype, "delete$", { get: function () { return this._delete$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TagCreator.prototype, "tag$", { get: function () { return this._tag$; }, - enumerable: true, + enumerable: false, + configurable: true + }); + Object.defineProperty(TagCreator.prototype, "replayedTag$", { + get: function () { + return this._replayedTag$; + }, + enumerable: false, configurable: true }); return TagCreator; @@ -30463,9 +40021,10 @@ var TagCreator = /** @class */ (function () { exports.TagCreator = TagCreator; exports.default = TagCreator; -},{"../../Component":274,"rxjs":26,"rxjs/operators":224}],345:[function(require,module,exports){ +},{"../../Component":291,"rxjs":43,"rxjs/operators":241}],369:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagDOMRenderer = void 0; var vd = require("virtual-dom"); var TagDOMRenderer = /** @class */ (function () { function TagDOMRenderer() { @@ -30488,9 +40047,10 @@ var TagDOMRenderer = /** @class */ (function () { }()); exports.TagDOMRenderer = TagDOMRenderer; -},{"virtual-dom":230}],346:[function(require,module,exports){ +},{"virtual-dom":247}],370:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagMode = void 0; /** * Enumeration for tag modes * @enum {number} @@ -30507,27 +40067,32 @@ var TagMode; * Create a point geometry through a click. */ TagMode[TagMode["CreatePoint"] = 1] = "CreatePoint"; + /** + * Create a points geometry through clicks. + */ + TagMode[TagMode["CreatePoints"] = 2] = "CreatePoints"; /** * Create a polygon geometry through clicks. */ - TagMode[TagMode["CreatePolygon"] = 2] = "CreatePolygon"; + TagMode[TagMode["CreatePolygon"] = 3] = "CreatePolygon"; /** * Create a rect geometry through clicks. */ - TagMode[TagMode["CreateRect"] = 3] = "CreateRect"; + TagMode[TagMode["CreateRect"] = 4] = "CreateRect"; /** * Create a rect geometry through drag. * * @description Claims the mouse which results in mouse handlers like * drag pan and scroll zoom becoming inactive. */ - TagMode[TagMode["CreateRectDrag"] = 4] = "CreateRectDrag"; + TagMode[TagMode["CreateRectDrag"] = 5] = "CreateRectDrag"; })(TagMode = exports.TagMode || (exports.TagMode = {})); exports.default = TagMode; -},{}],347:[function(require,module,exports){ +},{}],371:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagOperation = void 0; var TagOperation; (function (TagOperation) { TagOperation[TagOperation["None"] = 0] = "None"; @@ -30536,9 +40101,10 @@ var TagOperation; })(TagOperation = exports.TagOperation || (exports.TagOperation = {})); exports.default = TagOperation; -},{}],348:[function(require,module,exports){ +},{}],372:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagScene = void 0; var THREE = require("three"); var TagScene = /** @class */ (function () { function TagScene(scene, raycaster) { @@ -30554,7 +40120,7 @@ var TagScene = /** @class */ (function () { get: function () { return this._needsRender; }, - enumerable: true, + enumerable: false, configurable: true }); TagScene.prototype.add = function (tags) { @@ -30703,11 +40269,14 @@ var TagScene = /** @class */ (function () { exports.TagScene = TagScene; exports.default = TagScene; -},{"three":225}],349:[function(require,module,exports){ +},{"three":242}],373:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagSet = void 0; var rxjs_1 = require("rxjs"); var Component_1 = require("../../Component"); +var ExtremePointTag_1 = require("./tag/ExtremePointTag"); +var ExtremePointRenderTag_1 = require("./tag/ExtremePointRenderTag"); var TagSet = /** @class */ (function () { function TagSet() { this._active = false; @@ -30719,14 +40288,14 @@ var TagSet = /** @class */ (function () { get: function () { return this._active; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TagSet.prototype, "changed$", { get: function () { return this._notifyChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); TagSet.prototype.activate = function (transform) { @@ -30769,7 +40338,9 @@ var TagSet = /** @class */ (function () { this._assertActivationState(false); for (var _i = 0, tags_2 = tags; _i < tags_2.length; _i++) { var tag = tags_2[_i]; - if (!(tag instanceof Component_1.OutlineTag || tag instanceof Component_1.SpotTag)) { + if (!(tag instanceof Component_1.OutlineTag || + tag instanceof Component_1.SpotTag || + tag instanceof ExtremePointTag_1.default)) { throw new Error("Tag type not supported"); } this._hashDeactivated[tag.id] = tag; @@ -30840,6 +40411,9 @@ var TagSet = /** @class */ (function () { else if (tag instanceof Component_1.SpotTag) { this._hash[tag.id] = new Component_1.SpotRenderTag(tag, transform); } + else if (tag instanceof ExtremePointTag_1.default) { + this._hash[tag.id] = new ExtremePointRenderTag_1.default(tag, transform); + } else { throw new Error("Tag type not supported"); } @@ -30854,7 +40428,7 @@ var TagSet = /** @class */ (function () { exports.TagSet = TagSet; exports.default = TagSet; -},{"../../Component":274,"rxjs":26}],350:[function(require,module,exports){ +},{"../../Component":291,"./tag/ExtremePointRenderTag":393,"./tag/ExtremePointTag":394,"rxjs":43}],374:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -30862,7 +40436,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -30870,11 +40444,13 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.GeometryTagError = void 0; var Error_1 = require("../../../Error"); var GeometryTagError = /** @class */ (function (_super) { __extends(GeometryTagError, _super); function GeometryTagError(message) { var _this = _super.call(this, message != null ? message : "The provided geometry value is incorrect") || this; + Object.setPrototypeOf(_this, GeometryTagError.prototype); _this.name = "GeometryTagError"; return _this; } @@ -30883,9 +40459,10 @@ var GeometryTagError = /** @class */ (function (_super) { exports.GeometryTagError = GeometryTagError; exports.default = Error_1.MapillaryError; -},{"../../../Error":276}],351:[function(require,module,exports){ +},{"../../../Error":293}],375:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Geometry = void 0; var rxjs_1 = require("rxjs"); /** * @class Geometry @@ -30915,7 +40492,7 @@ var Geometry = /** @class */ (function () { get: function () { return this._notifyChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); return Geometry; @@ -30923,7 +40500,7 @@ var Geometry = /** @class */ (function () { exports.Geometry = Geometry; exports.default = Geometry; -},{"rxjs":26}],352:[function(require,module,exports){ +},{"rxjs":43}],376:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -30931,7 +40508,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -30939,6 +40516,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.PointGeometry = void 0; var Component_1 = require("../../../Component"); /** * @class PointGeometry @@ -30980,7 +40558,7 @@ var PointGeometry = /** @class */ (function (_super) { get: function () { return this._point; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -31023,8 +40601,9 @@ var PointGeometry = /** @class */ (function (_super) { return PointGeometry; }(Component_1.Geometry)); exports.PointGeometry = PointGeometry; +exports.default = PointGeometry; -},{"../../../Component":274}],353:[function(require,module,exports){ +},{"../../../Component":291}],377:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -31032,7 +40611,223 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PointsGeometry = void 0; +var Component_1 = require("../../../Component"); +/** + * @class PointsGeometry + * + * @classdesc Represents a point set in the 2D basic image coordinate system. + * + * @example + * ``` + * var points = [[0.5, 0.3], [0.7, 0.3], [0.6, 0.5]]; + * var pointsGeometry = new Mapillary.TagComponent.PointsGeometry(points); + * ``` + */ +var PointsGeometry = /** @class */ (function (_super) { + __extends(PointsGeometry, _super); + /** + * Create a points geometry. + * + * @constructor + * @param {Array>} points - Array of 2D points on the basic coordinate + * system. The number of points must be greater than or equal to two. + * + * @throws {GeometryTagError} Point coordinates must be valid basic coordinates. + */ + function PointsGeometry(points) { + var _this = _super.call(this) || this; + var pointsLength = points.length; + if (pointsLength < 2) { + throw new Component_1.GeometryTagError("A points geometry must have two or more positions."); + } + _this._points = []; + for (var _i = 0, points_1 = points; _i < points_1.length; _i++) { + var point = points_1[_i]; + if (point[0] < 0 || point[0] > 1 || + point[1] < 0 || point[1] > 1) { + throw new Component_1.GeometryTagError("Basic coordinates of points must be on the interval [0, 1]."); + } + _this._points.push(point.slice()); + } + return _this; } + Object.defineProperty(PointsGeometry.prototype, "points", { + /** + * Get points property. + * @returns {Array>} Array of 2d points. + */ + get: function () { + return this._points; + }, + enumerable: false, + configurable: true + }); + /** + * Add a point to the point set. + * + * @param {Array} point - Point to add. + * @ignore + */ + PointsGeometry.prototype.addPoint2d = function (point) { + var clamped = [ + Math.max(0, Math.min(1, point[0])), + Math.max(0, Math.min(1, point[1])), + ]; + this._points.push(clamped); + this._notifyChanged$.next(this); + }; + /** + * Get the coordinates of a point from the point set representation of the geometry. + * + * @param {number} index - Point index. + * @returns {Array} Array representing the 2D basic coordinates of the point. + * @ignore + */ + PointsGeometry.prototype.getPoint2d = function (index) { + return this._points[index].slice(); + }; + /** + * Remove a point from the point set. + * + * @param {number} index - The index of the point to remove. + * @ignore + */ + PointsGeometry.prototype.removePoint2d = function (index) { + if (index < 0 || + index >= this._points.length || + this._points.length < 3) { + throw new Component_1.GeometryTagError("Index for removed point must be valid."); + } + this._points.splice(index, 1); + this._notifyChanged$.next(this); + }; + /** @ignore */ + PointsGeometry.prototype.setVertex2d = function (index, value, transform) { + this.setPoint2d(index, value, transform); + }; + /** @ignore */ + PointsGeometry.prototype.setPoint2d = function (index, value, transform) { + var changed = [ + Math.max(0, Math.min(1, value[0])), + Math.max(0, Math.min(1, value[1])), + ]; + this._points[index] = changed; + this._notifyChanged$.next(this); + }; + /** @ignore */ + PointsGeometry.prototype.getPoints3d = function (transform) { + return this._getPoints3d(this._points, transform); + }; + /** @ignore */ + PointsGeometry.prototype.getPoint3d = function (index, transform) { + return transform.unprojectBasic(this._points[index], 200); + }; + /** @ignore */ + PointsGeometry.prototype.getPoints2d = function () { + return this._points.slice(); + }; + /** @ignore */ + PointsGeometry.prototype.getCentroid2d = function (transform) { + if (!transform) { + throw new Component_1.GeometryTagError("Get centroid must be called with a transform for points geometries."); + } + var _a = this.getRect2d(transform), minX = _a[0], minY = _a[1], maxX = _a[2], maxY = _a[3]; + var centroidX = minX < maxX ? + (minX + maxX) / 2 : + ((minX + maxX + 1) / 2) % 1; + var centroidY = (minY + maxY) / 2; + return [centroidX, centroidY]; + }; + /** @ignore */ + PointsGeometry.prototype.getCentroid3d = function (transform) { + var centroid2d = this.getCentroid2d(); + return transform.unprojectBasic(centroid2d, 200); + }; + /** @ignore */ + PointsGeometry.prototype.getRect2d = function (transform) { + var minX = 1; + var maxX = 0; + var minY = 1; + var maxY = 0; + var points = this._points; + for (var _i = 0, points_2 = points; _i < points_2.length; _i++) { + var point = points_2[_i]; + if (point[0] < minX) { + minX = point[0]; + } + if (point[0] > maxX) { + maxX = point[0]; + } + if (point[1] < minY) { + minY = point[1]; + } + if (point[1] > maxY) { + maxY = point[1]; + } + } + if (transform.fullPano) { + var indices = []; + for (var i = 0; i < points.length; i++) { + indices[i] = i; + } + indices.sort(function (a, b) { + return points[a][0] < points[b][0] ? + -1 : + points[a][0] > points[b][0] ? + 1 : + a < b ? -1 : 1; + }); + var maxDistanceX = points[indices[0]][0] + 1 - points[indices[indices.length - 1]][0]; + var leftMostIndex = 0; + for (var i = 0; i < indices.length - 1; i++) { + var index1 = indices[i]; + var index2 = indices[i + 1]; + var distanceX = points[index2][0] - points[index1][0]; + if (distanceX > maxDistanceX) { + maxDistanceX = distanceX; + leftMostIndex = i + 1; + } + } + if (leftMostIndex > 0) { + minX = points[indices[leftMostIndex]][0]; + maxX = points[indices[leftMostIndex - 1]][0]; + } + } + return [minX, minY, maxX, maxY]; + }; + /** @ignore */ + PointsGeometry.prototype.setCentroid2d = function (value, transform) { + throw new Error("Not implemented"); + }; + PointsGeometry.prototype._getPoints3d = function (points2d, transform) { + return points2d + .map(function (point) { + return transform.unprojectBasic(point, 200); + }); + }; + return PointsGeometry; +}(Component_1.Geometry)); +exports.PointsGeometry = PointsGeometry; +exports.default = PointsGeometry; + +},{"../../../Component":291}],378:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -31040,6 +40835,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.PolygonGeometry = void 0; var Component_1 = require("../../../Component"); /** * @class PolygonGeometry @@ -31067,7 +40863,6 @@ var PolygonGeometry = /** @class */ (function (_super) { */ function PolygonGeometry(polygon, holes) { var _this = _super.call(this) || this; - _this._subsampleThreshold = 0.01; var polygonLength = polygon.length; if (polygonLength < 3) { throw new Component_1.GeometryTagError("A polygon must have three or more positions."); @@ -31119,7 +40914,7 @@ var PolygonGeometry = /** @class */ (function (_super) { get: function () { return this._polygon; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(PolygonGeometry.prototype, "holes", { @@ -31130,7 +40925,7 @@ var PolygonGeometry = /** @class */ (function (_super) { get: function () { return this._holes; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -31150,9 +40945,6 @@ var PolygonGeometry = /** @class */ (function (_super) { /** * Get the coordinates of a vertex from the polygon representation of the geometry. * - * @description The first vertex represents the bottom-left corner with the rest of - * the vertices following in clockwise order. - * * @param {number} index - Vertex index. * @returns {Array} Array representing the 2D basic coordinates of the vertex. * @ignore @@ -31222,7 +41014,7 @@ var PolygonGeometry = /** @class */ (function (_super) { }; /** @ignore */ PolygonGeometry.prototype.getPoints3d = function (transform) { - return this._getPoints3d(this._subsample(this._polygon, this._subsampleThreshold), transform); + return this._getPoints3d(this._subsample(this._polygon), transform); }; /** @ignore */ PolygonGeometry.prototype.getVertex3d = function (index, transform) { @@ -31250,7 +41042,7 @@ var PolygonGeometry = /** @class */ (function (_super) { var _this = this; return this._holes .map(function (hole2d) { - return _this._getPoints3d(_this._subsample(hole2d, _this._subsampleThreshold), transform); + return _this._getPoints3d(_this._subsample(hole2d), transform); }); }; /** @@ -31306,12 +41098,14 @@ var PolygonGeometry = /** @class */ (function (_super) { /** @ignore */ PolygonGeometry.prototype.getTriangles3d = function (transform) { var _this = this; - var threshold = this._subsampleThreshold; - var points2d = this._project(this._subsample(this._polygon, threshold), transform); + if (transform.fullPano) { + return this._triangulatePano(this._polygon.slice(), this.holes.slice(), transform); + } + var points2d = this._project(this._subsample(this._polygon), transform); var points3d = this.getPoints3d(transform); var holes2d = this._holes .map(function (hole) { - return _this._project(_this._subsample(hole, threshold), transform); + return _this._project(_this._subsample(hole), transform); }); var holes3d = this.getHolePoints3d(transform); return this._triangulate(points2d, points3d, holes2d, holes3d); @@ -31331,33 +41125,12 @@ var PolygonGeometry = /** @class */ (function (_super) { return transform.unprojectBasic(point, 200); }); }; - PolygonGeometry.prototype._subsample = function (points2d, threshold) { - var subsampled = []; - var length = points2d.length; - for (var index = 0; index < length; index++) { - var p1 = points2d[index]; - var p2 = points2d[(index + 1) % length]; - subsampled.push(p1); - var dist = Math.sqrt(Math.pow((p2[0] - p1[0]), 2) + Math.pow((p2[1] - p1[1]), 2)); - var subsamples = Math.floor(dist / threshold); - var coeff = 1 / (subsamples + 1); - for (var i = 1; i <= subsamples; i++) { - var alpha = i * coeff; - var subsample = [ - (1 - alpha) * p1[0] + alpha * p2[0], - (1 - alpha) * p1[1] + alpha * p2[1], - ]; - subsampled.push(subsample); - } - } - return subsampled; - }; return PolygonGeometry; }(Component_1.VertexGeometry)); exports.PolygonGeometry = PolygonGeometry; exports.default = PolygonGeometry; -},{"../../../Component":274}],354:[function(require,module,exports){ +},{"../../../Component":291}],379:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -31365,7 +41138,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -31373,6 +41146,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.RectGeometry = void 0; var Component_1 = require("../../../Component"); /** * @class RectGeometry @@ -31424,7 +41198,7 @@ var RectGeometry = /** @class */ (function (_super) { get: function () { return this._anchorIndex; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RectGeometry.prototype, "inverted", { @@ -31438,7 +41212,7 @@ var RectGeometry = /** @class */ (function (_super) { get: function () { return this._inverted; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RectGeometry.prototype, "rect", { @@ -31451,7 +41225,7 @@ var RectGeometry = /** @class */ (function (_super) { get: function () { return this._rect; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -31920,7 +41694,9 @@ var RectGeometry = /** @class */ (function (_super) { }; /** @ignore */ RectGeometry.prototype.getTriangles3d = function (transform) { - return this._triangulate(this._project(this._getPoints2d(), transform), this.getPoints3d(transform)); + return transform.fullPano ? + [] : + this._triangulate(this._project(this._getPoints2d(), transform), this.getPoints3d(transform)); }; /** * Check if a particular bottom-right value is valid according to the current @@ -32019,7 +41795,7 @@ var RectGeometry = /** @class */ (function (_super) { exports.RectGeometry = RectGeometry; exports.default = RectGeometry; -},{"../../../Component":274}],355:[function(require,module,exports){ +},{"../../../Component":291}],380:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32027,15 +41803,24 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); +var __spreadArrays = (this && this.__spreadArrays) || function () { + for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; + for (var r = Array(s), k = 0, i = 0; i < il; i++) + for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) + r[k] = a[j]; + return r; +}; Object.defineProperty(exports, "__esModule", { value: true }); +exports.VertexGeometry = void 0; var earcut_1 = require("earcut"); +var martinez = require("martinez-polygon-clipping"); var polylabel = require("@mapbox/polylabel"); var THREE = require("three"); var Component_1 = require("../../../Component"); @@ -32053,7 +41838,9 @@ var VertexGeometry = /** @class */ (function (_super) { * @ignore */ function VertexGeometry() { - return _super.call(this) || this; + var _this = _super.call(this) || this; + _this._subsampleThreshold = 0.005; + return _this; } /** * Finds the polygon pole of inaccessibility, the most distant internal @@ -32067,6 +41854,32 @@ var VertexGeometry = /** @class */ (function (_super) { var pole2d = polylabel([points2d], 3e-2); return pole2d; }; + VertexGeometry.prototype._project = function (points2d, transform) { + var camera = this._createCamera(transform.upVector().toArray(), transform.unprojectSfM([0, 0], 0), transform.unprojectSfM([0, 0], 10)); + return this._deunproject(points2d, transform, camera); + }; + VertexGeometry.prototype._subsample = function (points2d, threshold) { + if (threshold === void 0) { threshold = this._subsampleThreshold; } + var subsampled = []; + var length = points2d.length; + for (var index = 0; index < length; index++) { + var p1 = points2d[index]; + var p2 = points2d[(index + 1) % length]; + subsampled.push(p1); + var dist = Math.sqrt(Math.pow((p2[0] - p1[0]), 2) + Math.pow((p2[1] - p1[1]), 2)); + var subsamples = Math.floor(dist / threshold); + var coeff = 1 / (subsamples + 1); + for (var i = 1; i <= subsamples; i++) { + var alpha = i * coeff; + var subsample = [ + (1 - alpha) * p1[0] + alpha * p2[0], + (1 - alpha) * p1[1] + alpha * p2[1], + ]; + subsampled.push(subsample); + } + } + return subsampled; + }; /** * Triangulates a 2d polygon and returns the triangle * representation as a flattened array of 3d points. @@ -32100,28 +41913,92 @@ var VertexGeometry = /** @class */ (function (_super) { } return triangles; }; - VertexGeometry.prototype._project = function (points2d, transform) { + VertexGeometry.prototype._triangulatePano = function (points2d, holes2d, transform) { + var triangles = []; + var epsilon = 1e-9; + var subareasX = 3; + var subareasY = 3; + for (var x = 0; x < subareasX; x++) { + for (var y = 0; y < subareasY; y++) { + var epsilonX0 = x === 0 ? -epsilon : epsilon; + var epsilonY0 = y === 0 ? -epsilon : epsilon; + var x0 = x / subareasX + epsilonX0; + var y0 = y / subareasY + epsilonY0; + var x1 = (x + 1) / subareasX + epsilon; + var y1 = (y + 1) / subareasY + epsilon; + var bbox2d = [ + [x0, y0], + [x0, y1], + [x1, y1], + [x1, y0], + [x0, y0], + ]; + var lookat2d = [ + (2 * x + 1) / (2 * subareasX), + (2 * y + 1) / (2 * subareasY), + ]; + triangles.push.apply(triangles, this._triangulateSubarea(points2d, holes2d, bbox2d, lookat2d, transform)); + } + } + return triangles; + }; + VertexGeometry.prototype._unproject = function (points2d, transform, distance) { + if (distance === void 0) { distance = 200; } + return points2d + .map(function (point) { + return transform.unprojectBasic(point, distance); + }); + }; + VertexGeometry.prototype._createCamera = function (upVector, position, lookAt) { var camera = new THREE.Camera(); - camera.up.copy(transform.upVector()); - camera.position.copy(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0))); - camera.lookAt(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10))); + camera.up.copy(new THREE.Vector3().fromArray(upVector)); + camera.position.copy(new THREE.Vector3().fromArray(position)); + camera.lookAt(new THREE.Vector3().fromArray(lookAt)); camera.updateMatrix(); camera.updateMatrixWorld(true); - var projected = points2d + return camera; + }; + VertexGeometry.prototype._deunproject = function (points2d, transform, camera) { + return points2d .map(function (point2d) { var pointWorld = transform.unprojectBasic(point2d, 10000); var pointCamera = new THREE.Vector3(pointWorld[0], pointWorld[1], pointWorld[2]) .applyMatrix4(camera.matrixWorldInverse); return [pointCamera.x / pointCamera.z, pointCamera.y / pointCamera.z]; }); - return projected; + }; + VertexGeometry.prototype._triangulateSubarea = function (points2d, holes2d, bbox2d, lookat2d, transform) { + var intersections = martinez.intersection(__spreadArrays([points2d], holes2d), [bbox2d]); + if (!intersections) { + return []; + } + var triangles = []; + var threshold = this._subsampleThreshold; + var camera = this._createCamera(transform.upVector().toArray(), transform.unprojectSfM([0, 0], 0), transform.unprojectBasic(lookat2d, 10)); + for (var _i = 0, intersections_1 = intersections; _i < intersections_1.length; _i++) { + var intersection = intersections_1[_i]; + var subsampledPolygon2d = this._subsample(intersection[0], threshold); + var polygon2d = this._deunproject(subsampledPolygon2d, transform, camera); + var polygon3d = this._unproject(subsampledPolygon2d, transform); + var polygonHoles2d = []; + var polygonHoles3d = []; + for (var i = 1; i < intersection.length; i++) { + var subsampledHole2d = this._subsample(intersection[i], threshold); + var hole2d = this._deunproject(subsampledHole2d, transform, camera); + var hole3d = this._unproject(subsampledHole2d, transform); + polygonHoles2d.push(hole2d); + polygonHoles3d.push(hole3d); + } + triangles.push.apply(triangles, this._triangulate(polygon2d, polygon3d, polygonHoles2d, polygonHoles3d)); + } + return triangles; }; return VertexGeometry; }(Component_1.Geometry)); exports.VertexGeometry = VertexGeometry; exports.default = VertexGeometry; -},{"../../../Component":274,"@mapbox/polylabel":1,"earcut":8,"three":225}],356:[function(require,module,exports){ +},{"../../../Component":291,"@mapbox/polylabel":1,"earcut":8,"martinez-polygon-clipping":22,"three":242}],381:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32129,7 +42006,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32137,6 +42014,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateHandlerBase = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var Component_1 = require("../../../Component"); @@ -32152,7 +42030,7 @@ var CreateHandlerBase = /** @class */ (function (_super) { get: function () { return this._geometryCreated$; }, - enumerable: true, + enumerable: false, configurable: true }); CreateHandlerBase.prototype._enable = function () { @@ -32180,7 +42058,7 @@ var CreateHandlerBase = /** @class */ (function (_super) { exports.CreateHandlerBase = CreateHandlerBase; exports.default = CreateHandlerBase; -},{"../../../Component":274,"rxjs":26,"rxjs/operators":224}],357:[function(require,module,exports){ +},{"../../../Component":291,"rxjs":43,"rxjs/operators":241}],382:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32188,7 +42066,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32196,6 +42074,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreatePointHandler = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../../../Component"); var CreatePointHandler = /** @class */ (function (_super) { @@ -32222,7 +42101,7 @@ var CreatePointHandler = /** @class */ (function (_super) { exports.CreatePointHandler = CreatePointHandler; exports.default = CreatePointHandler; -},{"../../../Component":274,"rxjs/operators":224}],358:[function(require,module,exports){ +},{"../../../Component":291,"rxjs/operators":241}],383:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32230,7 +42109,51 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreatePointsHandler = void 0; +var Component_1 = require("../../../Component"); +var CreatePointsHandler = /** @class */ (function (_super) { + __extends(CreatePointsHandler, _super); + function CreatePointsHandler() { + return _super !== null && _super.apply(this, arguments) || this; } + Object.defineProperty(CreatePointsHandler.prototype, "_create$", { + get: function () { + return this._tagCreator.createPoints$; + }, + enumerable: false, + configurable: true + }); + CreatePointsHandler.prototype._addPoint = function (tag, basicPoint) { + tag.geometry.addPoint2d(basicPoint); + }; + CreatePointsHandler.prototype._getNameExtension = function () { + return "create-points"; + }; + CreatePointsHandler.prototype._setVertex2d = function (tag, basicPoint, transform) { + tag.geometry.setPoint2d((tag.geometry).points.length - 1, basicPoint, transform); + }; + return CreatePointsHandler; +}(Component_1.CreateVertexHandler)); +exports.CreatePointsHandler = CreatePointsHandler; +exports.default = CreatePointsHandler; + +},{"../../../Component":291}],384:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32238,22 +42161,23 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreatePolygonHandler = void 0; var Component_1 = require("../../../Component"); var CreatePolygonHandler = /** @class */ (function (_super) { __extends(CreatePolygonHandler, _super); function CreatePolygonHandler() { return _super !== null && _super.apply(this, arguments) || this; } - CreatePolygonHandler.prototype._addPoint = function (tag, basicPoint) { - tag.addPoint(basicPoint); - }; Object.defineProperty(CreatePolygonHandler.prototype, "_create$", { get: function () { return this._tagCreator.createPolygon$; }, - enumerable: true, + enumerable: false, configurable: true }); + CreatePolygonHandler.prototype._addPoint = function (tag, basicPoint) { + tag.addPoint(basicPoint); + }; CreatePolygonHandler.prototype._getNameExtension = function () { return "create-polygon"; }; @@ -32265,7 +42189,7 @@ var CreatePolygonHandler = /** @class */ (function (_super) { exports.CreatePolygonHandler = CreatePolygonHandler; exports.default = CreatePolygonHandler; -},{"../../../Component":274}],359:[function(require,module,exports){ +},{"../../../Component":291}],385:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32273,7 +42197,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32281,6 +42205,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateRectDragHandler = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../../Component"); @@ -32358,7 +42283,7 @@ var CreateRectDragHandler = /** @class */ (function (_super) { exports.CreateRectDragHandler = CreateRectDragHandler; exports.default = CreateRectDragHandler; -},{"../../../Component":274,"rxjs":26,"rxjs/operators":224}],360:[function(require,module,exports){ +},{"../../../Component":291,"rxjs":43,"rxjs/operators":241}],386:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32366,7 +42291,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32374,6 +42299,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateRectHandler = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../../../Component"); var CreateRectHandler = /** @class */ (function (_super) { @@ -32385,7 +42311,7 @@ var CreateRectHandler = /** @class */ (function (_super) { get: function () { return this._tagCreator.createRect$; }, - enumerable: true, + enumerable: false, configurable: true }); CreateRectHandler.prototype._addPoint = function (tag, basicPoint) { @@ -32419,7 +42345,7 @@ var CreateRectHandler = /** @class */ (function (_super) { exports.CreateRectHandler = CreateRectHandler; exports.default = CreateRectHandler; -},{"../../../Component":274,"rxjs/operators":224}],361:[function(require,module,exports){ +},{"../../../Component":291,"rxjs/operators":241}],387:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32427,7 +42353,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32435,6 +42361,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateVertexHandler = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../../Component"); @@ -32446,7 +42373,7 @@ var CreateVertexHandler = /** @class */ (function (_super) { CreateVertexHandler.prototype._enableCreate = function () { var _this = this; this._container.mouseService.deferPixels(this._name, 4); - var transformChanged$ = this._navigator.stateService.currentTransform$.pipe(operators_1.map(function (transform) { }), operators_1.publishReplay(1), operators_1.refCount()); + var transformChanged$ = this._navigator.stateService.currentTransform$.pipe(operators_1.map(function () { }), operators_1.publishReplay(1), operators_1.refCount()); this._deleteSubscription = transformChanged$.pipe(operators_1.skip(1)) .subscribe(this._tagCreator.delete$); var basicClick$ = this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(operators_1.share()); @@ -32496,7 +42423,7 @@ var CreateVertexHandler = /** @class */ (function (_super) { exports.CreateVertexHandler = CreateVertexHandler; exports.default = CreateVertexHandler; -},{"../../../Component":274,"rxjs":26,"rxjs/operators":224}],362:[function(require,module,exports){ +},{"../../../Component":291,"rxjs":43,"rxjs/operators":241}],388:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32504,7 +42431,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32512,6 +42439,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.EditVertexHandler = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Component_1 = require("../../../Component"); @@ -32609,7 +42537,7 @@ exports.EditVertexHandler = EditVertexHandler; exports.default = EditVertexHandler; -},{"../../../Component":274,"rxjs":26,"rxjs/operators":224}],363:[function(require,module,exports){ +},{"../../../Component":291,"rxjs":43,"rxjs/operators":241}],389:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32617,7 +42545,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32625,6 +42553,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagHandlerBase = void 0; var Component_1 = require("../../../Component"); var TagHandlerBase = /** @class */ (function (_super) { __extends(TagHandlerBase, _super); @@ -32650,84 +42579,687 @@ exports.TagHandlerBase = TagHandlerBase; exports.default = TagHandlerBase; -},{"../../../Component":274}],364:[function(require,module,exports){ +},{"../../../Component":291}],390:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],391:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateTag = void 0; var operators_1 = require("rxjs/operators"); var THREE = require("three"); -var vd = require("virtual-dom"); var rxjs_1 = require("rxjs"); -var Component_1 = require("../../../Component"); var Geo_1 = require("../../../Geo"); -var OutlineCreateTag = /** @class */ (function () { - function OutlineCreateTag(geometry, options, transform, viewportCoords) { +var CreateTag = /** @class */ (function () { + function CreateTag(geometry, transform, viewportCoords) { var _this = this; this._geometry = geometry; - this._options = { color: options.color == null ? 0xFFFFFF : options.color }; this._transform = transform; this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords(); - this._outline = this._createOutine(); - this._glObjects = [this._outline]; this._aborted$ = new rxjs_1.Subject(); this._created$ = new rxjs_1.Subject(); this._glObjectsChanged$ = new rxjs_1.Subject(); this._geometryChangedSubscription = this._geometry.changed$ - .subscribe(function (vertexGeometry) { - _this._disposeOutline(); - _this._outline = _this._createOutine(); - _this._glObjects = [_this._outline]; + .subscribe(function () { + _this._onGeometryChanged(); _this._glObjectsChanged$.next(_this); }); } - Object.defineProperty(OutlineCreateTag.prototype, "geometry", { + Object.defineProperty(CreateTag.prototype, "geometry", { get: function () { return this._geometry; }, - enumerable: true, + enumerable: false, configurable: true }); - Object.defineProperty(OutlineCreateTag.prototype, "glObjects", { + Object.defineProperty(CreateTag.prototype, "glObjects", { get: function () { return this._glObjects; }, - enumerable: true, + enumerable: false, configurable: true }); - Object.defineProperty(OutlineCreateTag.prototype, "aborted$", { + Object.defineProperty(CreateTag.prototype, "aborted$", { get: function () { return this._aborted$; }, - enumerable: true, + enumerable: false, configurable: true }); - Object.defineProperty(OutlineCreateTag.prototype, "created$", { + Object.defineProperty(CreateTag.prototype, "created$", { get: function () { return this._created$; }, - enumerable: true, + enumerable: false, configurable: true }); - Object.defineProperty(OutlineCreateTag.prototype, "glObjectsChanged$", { + Object.defineProperty(CreateTag.prototype, "glObjectsChanged$", { get: function () { return this._glObjectsChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); - Object.defineProperty(OutlineCreateTag.prototype, "geometryChanged$", { + Object.defineProperty(CreateTag.prototype, "geometryChanged$", { get: function () { var _this = this; - return this._geometry.changed$.pipe(operators_1.map(function (geometry) { + return this._geometry.changed$.pipe(operators_1.map(function () { return _this; })); }, - enumerable: true, + enumerable: false, configurable: true }); - OutlineCreateTag.prototype.dispose = function () { - this._disposeOutline(); + CreateTag.prototype.dispose = function () { this._geometryChangedSubscription.unsubscribe(); }; + CreateTag.prototype._canvasToTransform = function (canvas) { + var canvasX = Math.round(canvas[0]); + var canvasY = Math.round(canvas[1]); + var transform = "translate(-50%,-50%) translate(" + canvasX + "px," + canvasY + "px)"; + return transform; + }; + CreateTag.prototype._colorToBackground = function (color) { + return "#" + ("000000" + color.toString(16)).substr(-6); + }; + CreateTag.prototype._createOutine = function (polygon3d, color) { + var positions = this._getLinePositions(polygon3d); + var geometry = new THREE.BufferGeometry(); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); + var material = new THREE.LineBasicMaterial({ + color: color, + linewidth: 1, + }); + return new THREE.Line(geometry, material); + }; + CreateTag.prototype._disposeLine = function (line) { + if (line == null) { + return; + } + line.geometry.dispose(); + line.material.dispose(); + }; + CreateTag.prototype._getLinePositions = function (polygon3d) { + var length = polygon3d.length; + var positions = new Float32Array(length * 3); + for (var i = 0; i < length; ++i) { + var index = 3 * i; + var position = polygon3d[i]; + positions[index] = position[0]; + positions[index + 1] = position[1]; + positions[index + 2] = position[2]; + } + return positions; + }; + return CreateTag; +}()); +exports.CreateTag = CreateTag; +exports.default = CreateTag; + +},{"../../../Geo":294,"rxjs":43,"rxjs/operators":241,"three":242}],392:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ExtremePointCreateTag = void 0; +var vd = require("virtual-dom"); +var Tag_1 = require("../Tag"); +var Component_1 = require("../../../Component"); +var ExtremePointCreateTag = /** @class */ (function (_super) { + __extends(ExtremePointCreateTag, _super); + function ExtremePointCreateTag(geometry, options, transform, viewportCoords) { + var _this = _super.call(this, geometry, transform, viewportCoords) || this; + _this._options = { + color: options.color == null ? 0xFFFFFF : options.color, + indicateCompleter: options.indicateCompleter == null ? true : options.indicateCompleter, + }; + _this._rectGeometry = new Tag_1.RectGeometry(_this._geometry.getRect2d(transform)); + _this._createGlObjects(); + return _this; + } + ExtremePointCreateTag.prototype.create = function () { + if (this._geometry.points.length < 3) { + return; + } + this._geometry.removePoint2d(this._geometry.points.length - 1); + this._created$.next(this); + }; + ExtremePointCreateTag.prototype.dispose = function () { + _super.prototype.dispose.call(this); + this._disposeObjects(); + }; + ExtremePointCreateTag.prototype.getDOMObjects = function (camera, size) { + var _this = this; + var container = { + offsetHeight: size.height, offsetWidth: size.width, + }; + var vNodes = []; + var points2d = this._geometry.getPoints2d(); + var length = points2d.length; + var _loop_1 = function (index) { + var nonModifiedIndex = index; + var _a = points2d[index], pointX = _a[0], pointY = _a[1]; + var pointCanvas = this_1._viewportCoords.basicToCanvasSafe(pointX, pointY, container, this_1._transform, camera); + if (!pointCanvas) { + return "continue"; + } + var abort = function (e) { + e.stopPropagation(); + _this._aborted$.next(_this); + }; + var remove = function (e) { + e.stopPropagation(); + _this._geometry.removePoint2d(nonModifiedIndex); + }; + var transform = this_1._canvasToTransform(pointCanvas); + var completerProperties = { + onclick: index === 0 && length < 3 ? abort : remove, + style: { transform: transform }, + }; + vNodes.push(vd.h("div.TagInteractor", completerProperties, [])); + var background = this_1._colorToBackground(this_1._options.color); + var pointProperties = { + style: { + background: background, + transform: transform, + }, + }; + vNodes.push(vd.h("div.TagVertex", pointProperties, [])); + }; + var this_1 = this; + for (var index = 0; index < length - 1; index++) { + _loop_1(index); + } + if (length > 2 && this._options.indicateCompleter === true) { + var _a = this._geometry.getCentroid2d(this._transform), centroidX = _a[0], centroidY = _a[1]; + var centroidCanvas = this._viewportCoords.basicToCanvasSafe(centroidX, centroidY, container, this._transform, camera); + if (!!centroidCanvas) { + var complete = function (e) { + e.stopPropagation(); + _this._geometry.removePoint2d(_this._geometry.points.length - 1); + _this._created$.next(_this); + }; + var transform = this._canvasToTransform(centroidCanvas); + var completerProperties = { + onclick: complete, + style: { transform: transform }, + }; + vNodes.push(vd.h("div.TagCompleter.TagLarger", completerProperties, [])); + var pointProperties = { + style: { + background: this._colorToBackground(this._options.color), + transform: transform, + }, + }; + vNodes.push(vd.h("div.TagVertex.TagLarger", pointProperties, [])); + var dotProperties = { + style: { + transform: transform, + }, + }; + vNodes.push(vd.h("div.TagDot", dotProperties, [])); + } + } + return vNodes; + }; + ExtremePointCreateTag.prototype._onGeometryChanged = function () { + this._disposeObjects(); + this._rectGeometry = new Tag_1.RectGeometry(this._geometry.getRect2d(this._transform)); + this._createGlObjects(); + }; + ExtremePointCreateTag.prototype._createGlObjects = function () { + this._glObjects = []; + var polygon3d = this._rectGeometry.getPoints3d(this._transform); + this._outline = this._createOutine(polygon3d, this._options.color); + this._glObjects.push(this._outline); + }; + ExtremePointCreateTag.prototype._disposeObjects = function () { + this._disposeLine(this._outline); + this._outline = null; + this._glObjects = null; + }; + return ExtremePointCreateTag; +}(Component_1.CreateTag)); +exports.ExtremePointCreateTag = ExtremePointCreateTag; + + +},{"../../../Component":291,"../Tag":366,"virtual-dom":247}],393:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ExtremePointRenderTag = void 0; +var THREE = require("three"); +var vd = require("virtual-dom"); +var Component_1 = require("../../../Component"); +/** + * @class OutlineRenderTag + * @classdesc Tag visualizing the properties of an OutlineTag. + */ +var ExtremePointRenderTag = /** @class */ (function (_super) { + __extends(ExtremePointRenderTag, _super); + function ExtremePointRenderTag(tag, transform) { + var _this = _super.call(this, tag, transform) || this; + _this._rectGeometry = new Component_1.RectGeometry(_this._tag.geometry.getRect2d(transform)); + _this._fill = !transform.gpano ? + _this._createFill() : null; + _this._outline = _this._tag.lineWidth >= 1 ? + _this._createOutline() : + null; + return _this; + } + ExtremePointRenderTag.prototype.dispose = function () { + _super.prototype.dispose.call(this); + this._disposeFill(); + this._disposeOutline(); + }; + ExtremePointRenderTag.prototype.getDOMObjects = function (atlas, camera, size) { + var vNodes = []; + var container = { + offsetHeight: size.height, offsetWidth: size.width, + }; + if (!this._tag.editable) { + return vNodes; + } + var lineColor = this._colorToCss(this._tag.lineColor); + var points2d = this._tag.geometry.getPoints2d(); + for (var i = 0; i < points2d.length; i++) { + var _a = points2d[i], vertexBasicX = _a[0], vertexBasicY = _a[1]; + var vertexCanvas = this._viewportCoords.basicToCanvasSafe(vertexBasicX, vertexBasicY, container, this._transform, camera); + if (vertexCanvas == null) { + continue; + } + var cursor = "crosshair"; + var interact = this._interact(Component_1.TagOperation.Vertex, cursor, i); + var vertexCanvasX = Math.round(vertexCanvas[0]); + var vertexCanvasY = Math.round(vertexCanvas[1]); + var transform = "translate(-50%, -50%) translate(" + vertexCanvasX + "px," + vertexCanvasY + "px)"; + var properties = { + onmousedown: interact, + style: { background: lineColor, transform: transform, cursor: cursor }, + }; + vNodes.push(vd.h("div.TagResizer", properties, [])); + if (!this._tag.indicateVertices) { + continue; + } + var pointProperties = { + style: { background: lineColor, transform: transform }, + }; + vNodes.push(vd.h("div.TagVertex", pointProperties, [])); + } + return vNodes; + }; + ExtremePointRenderTag.prototype.getGLObjects = function () { + var glObjects = []; + if (this._fill != null) { + glObjects.push(this._fill); + } + if (this._outline != null) { + glObjects.push(this._outline); + } + return glObjects; + }; + ExtremePointRenderTag.prototype.getRetrievableObjects = function () { + return this._fill != null ? [this._fill] : []; + }; + ExtremePointRenderTag.prototype._onGeometryChanged = function () { + this._rectGeometry = new Component_1.RectGeometry(this._tag.geometry.getRect2d(this._transform)); + if (this._fill != null) { + this._updateFillGeometry(); + } + if (this._outline != null) { + this._updateOulineGeometry(); + } + }; + ExtremePointRenderTag.prototype._onTagChanged = function () { + var glObjectsChanged = false; + if (this._fill != null) { + this._updateFillMaterial(this._fill.material); + } + if (this._outline == null) { + if (this._tag.lineWidth >= 1) { + this._outline = this._createOutline(); + glObjectsChanged = true; + } + } + else { + this._updateOutlineMaterial(); + } + return glObjectsChanged; + }; + ExtremePointRenderTag.prototype._getPoints3d = function () { + return this._rectGeometry.getPoints3d(this._transform); + }; + ExtremePointRenderTag.prototype._getTriangles = function () { + return this._rectGeometry.getTriangles3d(this._transform); + }; + ExtremePointRenderTag.prototype._updateFillMaterial = function (material) { + material.color = new THREE.Color(this._tag.fillColor); + material.opacity = this._tag.fillOpacity; + material.needsUpdate = true; + }; + ExtremePointRenderTag.prototype._updateLineBasicMaterial = function (material) { + material.color = new THREE.Color(this._tag.lineColor); + material.linewidth = Math.max(this._tag.lineWidth, 1); + material.visible = this._tag.lineWidth >= 1 && this._tag.lineOpacity > 0; + material.opacity = this._tag.lineOpacity; + material.transparent = this._tag.lineOpacity < 1; + material.needsUpdate = true; + }; + ExtremePointRenderTag.prototype._updateOutlineMaterial = function () { + var material = this._outline.material; + this._updateLineBasicMaterial(material); + }; + return ExtremePointRenderTag; +}(Component_1.OutlineRenderTagBase)); +exports.ExtremePointRenderTag = ExtremePointRenderTag; +exports.default = ExtremePointRenderTag; + + +},{"../../../Component":291,"three":242,"virtual-dom":247}],394:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ExtremePointTag = void 0; +var Component_1 = require("../../../Component"); +/** + * @class ExtremePointTag + * + * @classdesc Tag holding properties for visualizing a extreme points + * and their outline. + * + * @example + * ``` + * var geometry = new Mapillary.TagComponent.PointsGeometry([[0.3, 0.3], [0.5, 0.4]]); + * var tag = new Mapillary.TagComponent.ExtremePointTag( + * "id-1", + * geometry + * { editable: true, lineColor: 0xff0000 }); + * + * tagComponent.add([tag]); + * ``` + */ +var ExtremePointTag = /** @class */ (function (_super) { + __extends(ExtremePointTag, _super); + /** + * Create an extreme point tag. + * + * @override + * @constructor + * @param {string} id - Unique identifier of the tag. + * @param {PointsGeometry} geometry - Geometry defining points of tag. + * @param {IExtremePointTagOptions} options - Options defining the visual appearance and + * behavior of the extreme point tag. + */ + function ExtremePointTag(id, geometry, options) { + var _this = _super.call(this, id, geometry) || this; + options = !!options ? options : {}; + _this._editable = options.editable == null ? false : options.editable; + _this._fillColor = options.fillColor == null ? 0xFFFFFF : options.fillColor; + _this._fillOpacity = options.fillOpacity == null ? 0.0 : options.fillOpacity; + _this._indicateVertices = options.indicateVertices == null ? true : options.indicateVertices; + _this._lineColor = options.lineColor == null ? 0xFFFFFF : options.lineColor; + _this._lineOpacity = options.lineOpacity == null ? 1 : options.lineOpacity; + _this._lineWidth = options.lineWidth == null ? 1 : options.lineWidth; + return _this; + } + Object.defineProperty(ExtremePointTag.prototype, "editable", { + /** + * Get editable property. + * @returns {boolean} Value indicating if tag is editable. + */ + get: function () { + return this._editable; + }, + /** + * Set editable property. + * @param {boolean} + * + * @fires Tag#changed + */ + set: function (value) { + this._editable = value; + this._notifyChanged$.next(this); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ExtremePointTag.prototype, "fillColor", { + /** + * Get fill color property. + * @returns {number} + */ + get: function () { + return this._fillColor; + }, + /** + * Set fill color property. + * @param {number} + * + * @fires Tag#changed + */ + set: function (value) { + this._fillColor = value; + this._notifyChanged$.next(this); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ExtremePointTag.prototype, "fillOpacity", { + /** + * Get fill opacity property. + * @returns {number} + */ + get: function () { + return this._fillOpacity; + }, + /** + * Set fill opacity property. + * @param {number} + * + * @fires Tag#changed + */ + set: function (value) { + this._fillOpacity = value; + this._notifyChanged$.next(this); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ExtremePointTag.prototype, "geometry", { + /** @inheritdoc */ + get: function () { + return this._geometry; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ExtremePointTag.prototype, "indicateVertices", { + /** + * Get indicate vertices property. + * @returns {boolean} Value indicating if vertices should be indicated + * when tag is editable. + */ + get: function () { + return this._indicateVertices; + }, + /** + * Set indicate vertices property. + * @param {boolean} + * + * @fires Tag#changed + */ + set: function (value) { + this._indicateVertices = value; + this._notifyChanged$.next(this); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ExtremePointTag.prototype, "lineColor", { + /** + * Get line color property. + * @returns {number} + */ + get: function () { + return this._lineColor; + }, + /** + * Set line color property. + * @param {number} + * + * @fires Tag#changed + */ + set: function (value) { + this._lineColor = value; + this._notifyChanged$.next(this); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ExtremePointTag.prototype, "lineOpacity", { + /** + * Get line opacity property. + * @returns {number} + */ + get: function () { + return this._lineOpacity; + }, + /** + * Set line opacity property. + * @param {number} + * + * @fires Tag#changed + */ + set: function (value) { + this._lineOpacity = value; + this._notifyChanged$.next(this); + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(ExtremePointTag.prototype, "lineWidth", { + /** + * Get line width property. + * @returns {number} + */ + get: function () { + return this._lineWidth; + }, + /** + * Set line width property. + * @param {number} + * + * @fires Tag#changed + */ + set: function (value) { + this._lineWidth = value; + this._notifyChanged$.next(this); + }, + enumerable: false, + configurable: true + }); + /** + * Set options for tag. + * + * @description Sets all the option properties provided and keeps + * the rest of the values as is. + * + * @param {IExtremePointTagOptions} options - Extreme point tag options + * + * @fires {Tag#changed} + */ + ExtremePointTag.prototype.setOptions = function (options) { + this._editable = options.editable == null ? this._editable : options.editable; + this._indicateVertices = options.indicateVertices == null ? this._indicateVertices : options.indicateVertices; + this._lineColor = options.lineColor == null ? this._lineColor : options.lineColor; + this._lineWidth = options.lineWidth == null ? this._lineWidth : options.lineWidth; + this._fillColor = options.fillColor == null ? this._fillColor : options.fillColor; + this._fillOpacity = options.fillOpacity == null ? this._fillOpacity : options.fillOpacity; + this._notifyChanged$.next(this); + }; + return ExtremePointTag; +}(Component_1.Tag)); +exports.ExtremePointTag = ExtremePointTag; +exports.default = ExtremePointTag; + +},{"../../../Component":291}],395:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OutlineCreateTag = void 0; +var vd = require("virtual-dom"); +var Component_1 = require("../../../Component"); +var OutlineCreateTag = /** @class */ (function (_super) { + __extends(OutlineCreateTag, _super); + function OutlineCreateTag(geometry, options, transform, viewportCoords) { + var _this = _super.call(this, geometry, transform, viewportCoords) || this; + _this._options = { color: options.color == null ? 0xFFFFFF : options.color }; + _this._createGlObjects(); + return _this; + } + OutlineCreateTag.prototype.create = function () { + if (this._geometry instanceof Component_1.RectGeometry) { + this._created$.next(this); + } + else if (this._geometry instanceof Component_1.PolygonGeometry) { + var polygonGeometry = this._geometry; + polygonGeometry.removeVertex2d(polygonGeometry.polygon.length - 2); + this._created$.next(this); + } + }; + OutlineCreateTag.prototype.dispose = function () { + _super.prototype.dispose.call(this); + this._disposeLine(this._outline); + this._disposeObjects(); + }; OutlineCreateTag.prototype.getDOMObjects = function (camera, size) { var _this = this; var vNodes = []; @@ -32828,57 +43360,29 @@ var OutlineCreateTag = /** @class */ (function () { polygonGeometry.addVertex2d(point); } }; - OutlineCreateTag.prototype._canvasToTransform = function (canvas) { - var canvasX = Math.round(canvas[0]); - var canvasY = Math.round(canvas[1]); - var transform = "translate(-50%,-50%) translate(" + canvasX + "px," + canvasY + "px)"; - return transform; + OutlineCreateTag.prototype._onGeometryChanged = function () { + this._disposeLine(this._outline); + this._disposeObjects(); + this._createGlObjects(); }; - OutlineCreateTag.prototype._colorToBackground = function (color) { - return "#" + ("000000" + color.toString(16)).substr(-6); + OutlineCreateTag.prototype._disposeObjects = function () { + this._outline = null; + this._glObjects = []; }; - OutlineCreateTag.prototype._createOutine = function () { + OutlineCreateTag.prototype._createGlObjects = function () { var polygon3d = this._geometry instanceof Component_1.RectGeometry ? this._geometry.getPoints3d(this._transform) : this._geometry.getVertices3d(this._transform); - var positions = this._getLinePositions(polygon3d); - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - var material = new THREE.LineBasicMaterial({ - color: this._options.color, - linewidth: 1, - }); - return new THREE.Line(geometry, material); - }; - OutlineCreateTag.prototype._disposeOutline = function () { - if (this._outline == null) { - return; - } - var line = this._outline; - line.geometry.dispose(); - line.material.dispose(); - this._outline = null; - this._glObjects = []; - }; - OutlineCreateTag.prototype._getLinePositions = function (polygon3d) { - var length = polygon3d.length; - var positions = new Float32Array(length * 3); - for (var i = 0; i < length; ++i) { - var index = 3 * i; - var position = polygon3d[i]; - positions[index] = position[0]; - positions[index + 1] = position[1]; - positions[index + 2] = position[2]; - } - return positions; + this._outline = this._createOutine(polygon3d, this._options.color); + this._glObjects = [this._outline]; }; return OutlineCreateTag; -}()); +}(Component_1.CreateTag)); exports.OutlineCreateTag = OutlineCreateTag; exports.default = OutlineCreateTag; -},{"../../../Component":274,"../../../Geo":277,"rxjs":26,"rxjs/operators":224,"three":225,"virtual-dom":230}],365:[function(require,module,exports){ +},{"../../../Component":291,"virtual-dom":247}],396:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -32886,7 +43390,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -32894,6 +43398,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.OutlineRenderTag = void 0; var THREE = require("three"); var vd = require("virtual-dom"); var Component_1 = require("../../../Component"); @@ -32907,54 +43412,24 @@ var OutlineRenderTag = /** @class */ (function (_super) { var _this = _super.call(this, tag, transform) || this; _this._fill = !transform.gpano ? _this._createFill() : - null; + transform.fullPano && + tag.domain === Component_1.TagDomain.TwoDimensional && + tag.geometry instanceof Component_1.PolygonGeometry ? + _this._createFill() : + null; _this._holes = _this._tag.lineWidth >= 1 ? _this._createHoles() : []; _this._outline = _this._tag.lineWidth >= 1 ? _this._createOutline() : null; - _this._geometryChangedSubscription = _this._tag.geometry.changed$ - .subscribe(function (geometry) { - if (_this._fill != null) { - _this._updateFillGeometry(); - } - if (_this._holes.length > 0) { - _this._updateHoleGeometries(); - } - if (_this._outline != null) { - _this._updateOulineGeometry(); - } - }); - _this._changedSubscription = _this._tag.changed$ - .subscribe(function (changedTag) { - var glObjectsChanged = false; - if (_this._fill != null) { - _this._updateFillMaterial(_this._fill.material); - } - if (_this._outline == null) { - if (_this._tag.lineWidth >= 1) { - _this._holes = _this._createHoles(); - _this._outline = _this._createOutline(); - glObjectsChanged = true; - } - } - else { - _this._updateHoleMaterials(); - _this._updateOutlineMaterial(); - } - if (glObjectsChanged) { - _this._glObjectsChanged$.next(_this); - } - }); return _this; } OutlineRenderTag.prototype.dispose = function () { + _super.prototype.dispose.call(this); this._disposeFill(); this._disposeHoles(); this._disposeOutline(); - this._changedSubscription.unsubscribe(); - this._geometryChangedSubscription.unsubscribe(); }; OutlineRenderTag.prototype.getDOMObjects = function (atlas, camera, size) { var _this = this; @@ -32970,7 +43445,7 @@ var OutlineRenderTag = /** @class */ (function (_super) { this._tag.geometry.getPoleOfInaccessibility2d(), iconBasicX = _a[0], iconBasicY = _a[1]; var iconCanvas = this._viewportCoords.basicToCanvasSafe(iconBasicX, iconBasicY, container, this._transform, camera); if (iconCanvas != null) { - var interact = function (e) { + var interact = function () { _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: _this._tag }); }; if (atlas.loaded) { @@ -33002,7 +43477,7 @@ var OutlineRenderTag = /** @class */ (function (_super) { var transform = this._tag.geometry instanceof Component_1.RectGeometry ? "translate(" + textCanvasX + "px," + textCanvasY + "px)" : "translate(-50%, -50%) translate(" + textCanvasX + "px," + textCanvasY + "px)"; - var interact = function (e) { + var interact = function () { _this._interact$.next({ offsetX: 0, offsetY: 0, operation: Component_1.TagOperation.None, tag: _this._tag }); }; var properties = { @@ -33086,18 +43561,57 @@ var OutlineRenderTag = /** @class */ (function (_super) { OutlineRenderTag.prototype.getRetrievableObjects = function () { return this._fill != null ? [this._fill] : []; }; - OutlineRenderTag.prototype._colorToCss = function (color) { - return "#" + ("000000" + color.toString(16)).substr(-6); + OutlineRenderTag.prototype._onGeometryChanged = function () { + if (this._fill != null) { + this._updateFillGeometry(); + } + if (this._holes.length > 0) { + this._updateHoleGeometries(); + } + if (this._outline != null) { + this._updateOulineGeometry(); + } }; - OutlineRenderTag.prototype._createFill = function () { - var triangles = this._getTriangles(); - var positions = new Float32Array(triangles); - var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - var material = new THREE.MeshBasicMaterial({ side: THREE.DoubleSide, transparent: true }); - this._updateFillMaterial(material); - return new THREE.Mesh(geometry, material); + OutlineRenderTag.prototype._onTagChanged = function () { + var glObjectsChanged = false; + if (this._fill != null) { + this._updateFillMaterial(this._fill.material); + } + if (this._outline == null) { + if (this._tag.lineWidth >= 1) { + this._holes = this._createHoles(); + this._outline = this._createOutline(); + glObjectsChanged = true; + } + } + else { + this._updateHoleMaterials(); + this._updateOutlineMaterial(); + } + return glObjectsChanged; + }; + OutlineRenderTag.prototype._getPoints3d = function () { + return this._in3dDomain() ? + this._tag.geometry.getVertices3d(this._transform) : + this._tag.geometry.getPoints3d(this._transform); + }; + OutlineRenderTag.prototype._getTriangles = function () { + return this._in3dDomain() ? + this._tag.geometry.get3dDomainTriangles3d(this._transform) : + this._tag.geometry.getTriangles3d(this._transform); + }; + OutlineRenderTag.prototype._updateFillMaterial = function (material) { + material.color = new THREE.Color(this._tag.fillColor); + material.opacity = this._tag.fillOpacity; + material.needsUpdate = true; + }; + OutlineRenderTag.prototype._updateLineBasicMaterial = function (material) { + material.color = new THREE.Color(this._tag.lineColor); + material.linewidth = Math.max(this._tag.lineWidth, 1); + material.visible = this._tag.lineWidth >= 1 && this._tag.lineOpacity > 0; + material.opacity = this._tag.lineOpacity; + material.transparent = this._tag.lineOpacity < 1; + material.needsUpdate = true; }; OutlineRenderTag.prototype._createHoles = function () { var holes = []; @@ -33111,10 +43625,105 @@ var OutlineRenderTag = /** @class */ (function (_super) { } return holes; }; - OutlineRenderTag.prototype._createLine = function (points3d) { + OutlineRenderTag.prototype._disposeHoles = function () { + for (var _i = 0, _a = this._holes; _i < _a.length; _i++) { + var hole = _a[_i]; + hole.geometry.dispose(); + hole.material.dispose(); + } + this._holes = []; + }; + OutlineRenderTag.prototype._getHoles3d = function () { + var polygonGeometry = this._tag.geometry; + return this._in3dDomain() ? + polygonGeometry.getHoleVertices3d(this._transform) : + polygonGeometry.getHolePoints3d(this._transform); + }; + OutlineRenderTag.prototype._in3dDomain = function () { + return this._tag.geometry instanceof Component_1.PolygonGeometry && this._tag.domain === Component_1.TagDomain.ThreeDimensional; + }; + OutlineRenderTag.prototype._updateHoleGeometries = function () { + var holes3d = this._getHoles3d(); + if (holes3d.length !== this._holes.length) { + throw new Error("Changing the number of holes is not supported."); + } + for (var i = 0; i < this._holes.length; i++) { + var holePoints3d = holes3d[i]; + var hole = this._holes[i]; + this._updateLine(hole, holePoints3d); + } + }; + OutlineRenderTag.prototype._updateHoleMaterials = function () { + for (var _i = 0, _a = this._holes; _i < _a.length; _i++) { + var hole = _a[_i]; + this._updateLineBasicMaterial(hole.material); + } + }; + OutlineRenderTag.prototype._updateOutlineMaterial = function () { + this._updateLineBasicMaterial(this._outline.material); + }; + return OutlineRenderTag; +}(Component_1.OutlineRenderTagBase)); +exports.OutlineRenderTag = OutlineRenderTag; + + +},{"../../../Component":291,"three":242,"virtual-dom":247}],397:[function(require,module,exports){ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OutlineRenderTagBase = void 0; +var THREE = require("three"); +var Component_1 = require("../../../Component"); +var OutlineRenderTagBase = /** @class */ (function (_super) { + __extends(OutlineRenderTagBase, _super); + function OutlineRenderTagBase(tag, transform) { + var _this = _super.call(this, tag, transform) || this; + _this._geometryChangedSubscription = _this._tag.geometry.changed$ + .subscribe(function () { + _this._onGeometryChanged(); + }); + _this._changedSubscription = _this._tag.changed$ + .subscribe(function () { + var glObjectsChanged = _this._onTagChanged(); + if (glObjectsChanged) { + _this._glObjectsChanged$.next(_this); + } + }); + return _this; + } + OutlineRenderTagBase.prototype.dispose = function () { + this._changedSubscription.unsubscribe(); + this._geometryChangedSubscription.unsubscribe(); + }; + OutlineRenderTagBase.prototype._colorToCss = function (color) { + return "#" + ("000000" + color.toString(16)).substr(-6); + }; + OutlineRenderTagBase.prototype._createFill = function () { + var triangles = this._getTriangles(); + var positions = new Float32Array(triangles); + var geometry = new THREE.BufferGeometry(); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.computeBoundingSphere(); + var material = new THREE.MeshBasicMaterial({ side: THREE.DoubleSide, transparent: true }); + this._updateFillMaterial(material); + return new THREE.Mesh(geometry, material); + }; + OutlineRenderTagBase.prototype._createLine = function (points3d) { var positions = this._getLinePositions(points3d); var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); geometry.computeBoundingSphere(); var material = new THREE.LineBasicMaterial(); this._updateLineBasicMaterial(material); @@ -33122,10 +43731,10 @@ var OutlineRenderTag = /** @class */ (function (_super) { line.renderOrder = 1; return line; }; - OutlineRenderTag.prototype._createOutline = function () { + OutlineRenderTagBase.prototype._createOutline = function () { return this._createLine(this._getPoints3d()); }; - OutlineRenderTag.prototype._disposeFill = function () { + OutlineRenderTagBase.prototype._disposeFill = function () { if (this._fill == null) { return; } @@ -33133,15 +43742,7 @@ var OutlineRenderTag = /** @class */ (function (_super) { this._fill.material.dispose(); this._fill = null; }; - OutlineRenderTag.prototype._disposeHoles = function () { - for (var _i = 0, _a = this._holes; _i < _a.length; _i++) { - var hole = _a[_i]; - hole.geometry.dispose(); - hole.material.dispose(); - } - this._holes = []; - }; - OutlineRenderTag.prototype._disposeOutline = function () { + OutlineRenderTagBase.prototype._disposeOutline = function () { if (this._outline == null) { return; } @@ -33149,7 +43750,7 @@ var OutlineRenderTag = /** @class */ (function (_super) { this._outline.material.dispose(); this._outline = null; }; - OutlineRenderTag.prototype._getLinePositions = function (points3d) { + OutlineRenderTagBase.prototype._getLinePositions = function (points3d) { var length = points3d.length; var positions = new Float32Array(length * 3); for (var i = 0; i < length; ++i) { @@ -33161,26 +43762,7 @@ var OutlineRenderTag = /** @class */ (function (_super) { } return positions; }; - OutlineRenderTag.prototype._getHoles3d = function () { - var polygonGeometry = this._tag.geometry; - return this._in3dDomain() ? - polygonGeometry.getHoleVertices3d(this._transform) : - polygonGeometry.getHolePoints3d(this._transform); - }; - OutlineRenderTag.prototype._getPoints3d = function () { - return this._in3dDomain() ? - this._tag.geometry.getVertices3d(this._transform) : - this._tag.geometry.getPoints3d(this._transform); - }; - OutlineRenderTag.prototype._getTriangles = function () { - return this._in3dDomain() ? - this._tag.geometry.get3dDomainTriangles3d(this._transform) : - this._tag.geometry.getTriangles3d(this._transform); - }; - OutlineRenderTag.prototype._in3dDomain = function () { - return this._tag.geometry instanceof Component_1.PolygonGeometry && this._tag.domain === Component_1.TagDomain.ThreeDimensional; - }; - OutlineRenderTag.prototype._interact = function (operation, cursor, vertexIndex) { + OutlineRenderTagBase.prototype._interact = function (operation, cursor, vertexIndex) { var _this = this; return function (e) { var offsetX = e.offsetX - e.target.offsetWidth / 2; @@ -33195,7 +43777,7 @@ var OutlineRenderTag = /** @class */ (function (_super) { }); }; }; - OutlineRenderTag.prototype._updateFillGeometry = function () { + OutlineRenderTagBase.prototype._updateFillGeometry = function () { var triangles = this._getTriangles(); var positions = new Float32Array(triangles); var geometry = this._fill.geometry; @@ -33206,34 +43788,11 @@ var OutlineRenderTag = /** @class */ (function (_super) { } else { geometry.removeAttribute("position"); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); } geometry.computeBoundingSphere(); }; - OutlineRenderTag.prototype._updateFillMaterial = function (material) { - material.color = new THREE.Color(this._tag.fillColor); - material.opacity = this._tag.fillOpacity; - material.needsUpdate = true; - }; - OutlineRenderTag.prototype._updateHoleGeometries = function () { - var holes3d = this._getHoles3d(); - if (holes3d.length !== this._holes.length) { - throw new Error("Changing the number of holes is not supported."); - } - for (var i = 0; i < this._holes.length; i++) { - var holePoints3d = holes3d[i]; - var hole = this._holes[i]; - this._updateLine(hole, holePoints3d); - } - }; - OutlineRenderTag.prototype._updateHoleMaterials = function () { - for (var _i = 0, _a = this._holes; _i < _a.length; _i++) { - var hole = _a[_i]; - var material = hole.material; - this._updateLineBasicMaterial(material); - } - }; - OutlineRenderTag.prototype._updateLine = function (line, points3d) { + OutlineRenderTagBase.prototype._updateLine = function (line, points3d) { var positions = this._getLinePositions(points3d); var geometry = line.geometry; var attribute = geometry.getAttribute("position"); @@ -33241,27 +43800,16 @@ var OutlineRenderTag = /** @class */ (function (_super) { attribute.needsUpdate = true; geometry.computeBoundingSphere(); }; - OutlineRenderTag.prototype._updateOulineGeometry = function () { + OutlineRenderTagBase.prototype._updateOulineGeometry = function () { this._updateLine(this._outline, this._getPoints3d()); }; - OutlineRenderTag.prototype._updateOutlineMaterial = function () { - var material = this._outline.material; - this._updateLineBasicMaterial(material); - }; - OutlineRenderTag.prototype._updateLineBasicMaterial = function (material) { - material.color = new THREE.Color(this._tag.lineColor); - material.linewidth = Math.max(this._tag.lineWidth, 1); - material.visible = this._tag.lineWidth >= 1 && this._tag.lineOpacity > 0; - material.opacity = this._tag.lineOpacity; - material.transparent = this._tag.lineOpacity < 1; - material.needsUpdate = true; - }; - return OutlineRenderTag; + return OutlineRenderTagBase; }(Component_1.RenderTag)); -exports.OutlineRenderTag = OutlineRenderTag; +exports.OutlineRenderTagBase = OutlineRenderTagBase; +exports.default = OutlineRenderTagBase; -},{"../../../Component":274,"three":225,"virtual-dom":230}],366:[function(require,module,exports){ +},{"../../../Component":291,"three":242}],398:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -33269,7 +43817,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -33277,6 +43825,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.OutlineTag = void 0; var rxjs_1 = require("rxjs"); var Component_1 = require("../../../Component"); var Viewer_1 = require("../../../Viewer"); @@ -33346,7 +43895,7 @@ var OutlineTag = /** @class */ (function (_super) { get: function () { return this._click$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "domain", { @@ -33360,7 +43909,7 @@ var OutlineTag = /** @class */ (function (_super) { get: function () { return this._domain; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "editable", { @@ -33384,7 +43933,7 @@ var OutlineTag = /** @class */ (function (_super) { this._editable = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "fillColor", { @@ -33405,7 +43954,7 @@ var OutlineTag = /** @class */ (function (_super) { this._fillColor = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "fillOpacity", { @@ -33426,7 +43975,7 @@ var OutlineTag = /** @class */ (function (_super) { this._fillOpacity = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "geometry", { @@ -33434,7 +43983,7 @@ var OutlineTag = /** @class */ (function (_super) { get: function () { return this._geometry; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "icon", { @@ -33455,7 +44004,7 @@ var OutlineTag = /** @class */ (function (_super) { this._icon = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "iconFloat", { @@ -33476,7 +44025,7 @@ var OutlineTag = /** @class */ (function (_super) { this._iconFloat = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "iconIndex", { @@ -33497,7 +44046,7 @@ var OutlineTag = /** @class */ (function (_super) { this._iconIndex = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "indicateVertices", { @@ -33519,7 +44068,7 @@ var OutlineTag = /** @class */ (function (_super) { this._indicateVertices = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "lineColor", { @@ -33540,7 +44089,7 @@ var OutlineTag = /** @class */ (function (_super) { this._lineColor = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "lineOpacity", { @@ -33561,7 +44110,7 @@ var OutlineTag = /** @class */ (function (_super) { this._lineOpacity = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "lineWidth", { @@ -33582,7 +44131,7 @@ var OutlineTag = /** @class */ (function (_super) { this._lineWidth = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "text", { @@ -33603,7 +44152,7 @@ var OutlineTag = /** @class */ (function (_super) { this._text = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(OutlineTag.prototype, "textColor", { @@ -33624,7 +44173,7 @@ var OutlineTag = /** @class */ (function (_super) { this._textColor = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -33667,9 +44216,10 @@ var OutlineTag = /** @class */ (function (_super) { exports.OutlineTag = OutlineTag; exports.default = OutlineTag; -},{"../../../Component":274,"../../../Viewer":285,"rxjs":26}],367:[function(require,module,exports){ +},{"../../../Component":291,"../../../Viewer":302,"rxjs":43}],399:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.RenderTag = void 0; var rxjs_1 = require("rxjs"); var Geo_1 = require("../../../Geo"); var RenderTag = /** @class */ (function () { @@ -33684,21 +44234,21 @@ var RenderTag = /** @class */ (function () { get: function () { return this._glObjectsChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderTag.prototype, "interact$", { get: function () { return this._interact$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderTag.prototype, "tag", { get: function () { return this._tag; }, - enumerable: true, + enumerable: false, configurable: true }); return RenderTag; @@ -33706,7 +44256,7 @@ var RenderTag = /** @class */ (function () { exports.RenderTag = RenderTag; exports.default = RenderTag; -},{"../../../Geo":277,"rxjs":26}],368:[function(require,module,exports){ +},{"../../../Geo":294,"rxjs":43}],400:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -33714,7 +44264,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -33722,6 +44272,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.SpotRenderTag = void 0; var vd = require("virtual-dom"); var Component_1 = require("../../../Component"); var Viewer_1 = require("../../../Viewer"); @@ -33824,7 +44375,7 @@ var SpotRenderTag = /** @class */ (function (_super) { exports.SpotRenderTag = SpotRenderTag; -},{"../../../Component":274,"../../../Viewer":285,"virtual-dom":230}],369:[function(require,module,exports){ +},{"../../../Component":291,"../../../Viewer":302,"virtual-dom":247}],401:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -33832,7 +44383,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -33840,6 +44391,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.SpotTag = void 0; var Component_1 = require("../../../Component"); /** * @class SpotTag @@ -33897,7 +44449,7 @@ var SpotTag = /** @class */ (function (_super) { this._color = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SpotTag.prototype, "editable", { @@ -33918,7 +44470,7 @@ var SpotTag = /** @class */ (function (_super) { this._editable = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SpotTag.prototype, "icon", { @@ -33939,7 +44491,7 @@ var SpotTag = /** @class */ (function (_super) { this._icon = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SpotTag.prototype, "text", { @@ -33960,7 +44512,7 @@ var SpotTag = /** @class */ (function (_super) { this._text = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SpotTag.prototype, "textColor", { @@ -33981,7 +44533,7 @@ var SpotTag = /** @class */ (function (_super) { this._textColor = value; this._notifyChanged$.next(this); }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -34007,7 +44559,7 @@ var SpotTag = /** @class */ (function (_super) { exports.SpotTag = SpotTag; exports.default = SpotTag; -},{"../../../Component":274}],370:[function(require,module,exports){ +},{"../../../Component":291}],402:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -34015,7 +44567,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -34023,6 +44575,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.Tag = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var Utils_1 = require("../../../Utils"); @@ -34063,7 +44616,7 @@ var Tag = /** @class */ (function (_super) { get: function () { return this._id; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Tag.prototype, "geometry", { @@ -34074,7 +44627,7 @@ var Tag = /** @class */ (function (_super) { get: function () { return this._geometry; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Tag.prototype, "changed$", { @@ -34086,7 +44639,7 @@ var Tag = /** @class */ (function (_super) { get: function () { return this._notifyChanged$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Tag.prototype, "geometryChanged$", { @@ -34101,7 +44654,7 @@ var Tag = /** @class */ (function (_super) { return _this; }), operators_1.share()); }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -34124,9 +44677,10 @@ var Tag = /** @class */ (function (_super) { exports.Tag = Tag; exports.default = Tag; -},{"../../../Utils":284,"rxjs":26,"rxjs/operators":224}],371:[function(require,module,exports){ +},{"../../../Utils":301,"rxjs":43,"rxjs/operators":241}],403:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TagDomain = void 0; /** * Enumeration for tag domains. * @enum {number} @@ -34156,9 +44710,41 @@ var TagDomain; })(TagDomain = exports.TagDomain || (exports.TagDomain = {})); exports.default = TagDomain; -},{}],372:[function(require,module,exports){ +},{}],404:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ComponentSize = void 0; +/** + * Enumeration for component size. + * @enum {number} + * @readonly + * @description May be used by a component to allow for resizing + * of the UI elements rendered by the component. + */ +var ComponentSize; +(function (ComponentSize) { + /** + * Automatic size. The size of the elements will automatically + * change at a predefined threshold. + */ + ComponentSize[ComponentSize["Automatic"] = 0] = "Automatic"; + /** + * Large size. The size of the elements will be fixed until another + * component size is configured. + */ + ComponentSize[ComponentSize["Large"] = 1] = "Large"; + /** + * Small size. The size of the elements will be fixed until another + * component size is configured. + */ + ComponentSize[ComponentSize["Small"] = 2] = "Small"; +})(ComponentSize = exports.ComponentSize || (exports.ComponentSize = {})); +exports.default = ComponentSize; + +},{}],405:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.HandlerBase = void 0; var HandlerBase = /** @class */ (function () { /** @ignore */ function HandlerBase(component, container, navigator) { @@ -34176,7 +44762,7 @@ var HandlerBase = /** @class */ (function () { get: function () { return this._enabled; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -34212,9 +44798,10 @@ var HandlerBase = /** @class */ (function () { exports.HandlerBase = HandlerBase; exports.default = HandlerBase; -},{}],373:[function(require,module,exports){ +},{}],406:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.MeshFactory = void 0; var THREE = require("three"); var Component_1 = require("../../Component"); var MeshFactory = /** @class */ (function () { @@ -34223,10 +44810,15 @@ var MeshFactory = /** @class */ (function () { this._imageSphereRadius = imageSphereRadius != null ? imageSphereRadius : 200; } MeshFactory.prototype.createMesh = function (node, transform) { - var mesh = node.pano ? - this._createImageSphere(node, transform) : - this._createImagePlane(node, transform); - return mesh; + if (node.pano) { + return this._createImageSphere(node, transform); + } + else if (transform.cameraProjection === "fisheye") { + return this._createImagePlaneFisheye(node, transform); + } + else { + return this._createImagePlane(node, transform); + } }; MeshFactory.prototype.createFlatMesh = function (node, transform, basicX0, basicX1, basicY0, basicY1) { var texture = this._createTexture(node.image); @@ -34239,9 +44831,15 @@ var MeshFactory = /** @class */ (function () { if (node.pano && !node.fullPano) { throw new Error("Cropped panoramas cannot have curtain."); } - return node.pano ? - this._createSphereCurtainMesh(node, transform) : - this._createCurtainMesh(node, transform); + if (node.pano) { + return this._createSphereCurtainMesh(node, transform); + } + else if (transform.cameraProjection === "fisheye") { + return this._createCurtainMeshFisheye(node, transform); + } + else { + return this._createCurtainMesh(node, transform); + } }; MeshFactory.prototype.createDistortedCurtainMesh = function (node, transform) { if (node.pano) { @@ -34258,6 +44856,15 @@ var MeshFactory = /** @class */ (function () { this._getRegularFlatImagePlaneGeo(transform); return new THREE.Mesh(geometry, material); }; + MeshFactory.prototype._createCurtainMeshFisheye = function (node, transform) { + var texture = this._createTexture(node.image); + var materialParameters = this._createCurtainPlaneMaterialParametersFisheye(transform, texture); + var material = new THREE.ShaderMaterial(materialParameters); + var geometry = this._useMesh(transform, node) ? + this._getImagePlaneGeoFisheye(transform, node) : + this._getRegularFlatImagePlaneGeo(transform); + return new THREE.Mesh(geometry, material); + }; MeshFactory.prototype._createDistortedCurtainMesh = function (node, transform) { var texture = this._createTexture(node.image); var materialParameters = this._createDistortedCurtainPlaneMaterialParameters(transform, texture); @@ -34291,6 +44898,15 @@ var MeshFactory = /** @class */ (function () { this._getRegularFlatImagePlaneGeo(transform); return new THREE.Mesh(geometry, material); }; + MeshFactory.prototype._createImagePlaneFisheye = function (node, transform) { + var texture = this._createTexture(node.image); + var materialParameters = this._createPlaneMaterialParametersFisheye(transform, texture); + var material = new THREE.ShaderMaterial(materialParameters); + var geometry = this._useMesh(transform, node) ? + this._getImagePlaneGeoFisheye(transform, node) : + this._getRegularFlatImagePlaneGeoFisheye(transform); + return new THREE.Mesh(geometry, material); + }; MeshFactory.prototype._createSphereMaterialParameters = function (transform, texture) { var gpano = transform.gpano; var halfCroppedWidth = (gpano.FullPanoWidthPixels - gpano.CroppedAreaImageWidthPixels) / 2; @@ -34305,34 +44921,13 @@ var MeshFactory = /** @class */ (function () { side: THREE.DoubleSide, transparent: true, uniforms: { - opacity: { - type: "f", - value: 1, - }, - phiLength: { - type: "f", - value: phiLength, - }, - phiShift: { - type: "f", - value: phiShift, - }, - projectorMat: { - type: "m4", - value: transform.rt, - }, - projectorTex: { - type: "t", - value: texture, - }, - thetaLength: { - type: "f", - value: thetaLength, - }, - thetaShift: { - type: "f", - value: thetaShift, - }, + opacity: { value: 1.0 }, + phiLength: { value: phiLength }, + phiShift: { value: phiShift }, + projectorMat: { value: transform.rt }, + projectorTex: { value: texture }, + thetaLength: { value: thetaLength }, + thetaShift: { value: thetaShift }, }, vertexShader: Component_1.Shaders.equirectangular.vertex, }; @@ -34352,38 +44947,14 @@ var MeshFactory = /** @class */ (function () { side: THREE.DoubleSide, transparent: true, uniforms: { - curtain: { - type: "f", - value: 1, - }, - opacity: { - type: "f", - value: 1, - }, - phiLength: { - type: "f", - value: phiLength, - }, - phiShift: { - type: "f", - value: phiShift, - }, - projectorMat: { - type: "m4", - value: transform.rt, - }, - projectorTex: { - type: "t", - value: texture, - }, - thetaLength: { - type: "f", - value: thetaLength, - }, - thetaShift: { - type: "f", - value: thetaShift, - }, + curtain: { value: 1.0 }, + opacity: { value: 1.0 }, + phiLength: { value: phiLength }, + phiShift: { value: phiShift }, + projectorMat: { value: transform.rt }, + projectorTex: { value: texture }, + thetaLength: { value: thetaLength }, + thetaShift: { value: thetaShift }, }, vertexShader: Component_1.Shaders.equirectangularCurtain.vertex, }; @@ -34396,47 +44967,63 @@ var MeshFactory = /** @class */ (function () { side: THREE.DoubleSide, transparent: true, uniforms: { - focal: { - type: "f", - value: transform.focal, - }, - k1: { - type: "f", - value: transform.ck1, - }, - k2: { - type: "f", - value: transform.ck2, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.basicRt, - }, - projectorTex: { - type: "t", - value: texture, - }, - radial_peak: { - type: "f", - value: !!transform.radialPeak ? transform.radialPeak : 0, - }, - scale_x: { - type: "f", - value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth, - }, - scale_y: { - type: "f", - value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight, - }, + focal: { value: transform.focal }, + k1: { value: transform.ck1 }, + k2: { value: transform.ck2 }, + opacity: { value: 1.0 }, + projectorMat: { value: transform.basicRt }, + projectorTex: { value: texture }, + radial_peak: { value: !!transform.radialPeak ? transform.radialPeak : 0.0 }, + scale_x: { value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth }, + scale_y: { value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight }, }, vertexShader: Component_1.Shaders.perspective.vertex, }; return materialParameters; }; + MeshFactory.prototype._createPlaneMaterialParametersFisheye = function (transform, texture) { + var materialParameters = { + depthWrite: false, + fragmentShader: Component_1.Shaders.fisheye.fragment, + side: THREE.DoubleSide, + transparent: true, + uniforms: { + focal: { value: transform.focal }, + k1: { value: transform.ck1 }, + k2: { value: transform.ck2 }, + opacity: { value: 1.0 }, + projectorMat: { value: transform.basicRt }, + projectorTex: { value: texture }, + radial_peak: { value: !!transform.radialPeak ? transform.radialPeak : 0.0 }, + scale_x: { value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth }, + scale_y: { value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight }, + }, + vertexShader: Component_1.Shaders.fisheye.vertex, + }; + return materialParameters; + }; + MeshFactory.prototype._createCurtainPlaneMaterialParametersFisheye = function (transform, texture) { + var materialParameters = { + depthWrite: false, + fragmentShader: Component_1.Shaders.fisheyeCurtain.fragment, + side: THREE.DoubleSide, + transparent: true, + uniforms: { + curtain: { value: 1.0 }, + focal: { value: transform.focal }, + k1: { value: transform.ck1 }, + k2: { value: transform.ck2 }, + opacity: { value: 1.0 }, + projectorMat: { value: transform.basicRt }, + projectorTex: { value: texture }, + radial_peak: { value: !!transform.radialPeak ? transform.radialPeak : 0.0 }, + scale_x: { value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth }, + scale_y: { value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight }, + }, + vertexShader: Component_1.Shaders.fisheyeCurtain.vertex, + }; + return materialParameters; + }; MeshFactory.prototype._createCurtainPlaneMaterialParameters = function (transform, texture) { var materialParameters = { depthWrite: false, @@ -34444,46 +45031,16 @@ var MeshFactory = /** @class */ (function () { side: THREE.DoubleSide, transparent: true, uniforms: { - curtain: { - type: "f", - value: 1, - }, - focal: { - type: "f", - value: transform.focal, - }, - k1: { - type: "f", - value: transform.ck1, - }, - k2: { - type: "f", - value: transform.ck2, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.basicRt, - }, - projectorTex: { - type: "t", - value: texture, - }, - radial_peak: { - type: "f", - value: !!transform.radialPeak ? transform.radialPeak : 0, - }, - scale_x: { - type: "f", - value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth, - }, - scale_y: { - type: "f", - value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight, - }, + curtain: { value: 1.0 }, + focal: { value: transform.focal }, + k1: { value: transform.ck1 }, + k2: { value: transform.ck2 }, + opacity: { value: 1.0 }, + projectorMat: { value: transform.basicRt }, + projectorTex: { value: texture }, + radial_peak: { value: !!transform.radialPeak ? transform.radialPeak : 0.0 }, + scale_x: { value: Math.max(transform.basicHeight, transform.basicWidth) / transform.basicWidth }, + scale_y: { value: Math.max(transform.basicWidth, transform.basicHeight) / transform.basicHeight }, }, vertexShader: Component_1.Shaders.perspectiveCurtain.vertex, }; @@ -34496,22 +45053,10 @@ var MeshFactory = /** @class */ (function () { side: THREE.DoubleSide, transparent: true, uniforms: { - curtain: { - type: "f", - value: 1, - }, - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.projectorMatrix(), - }, - projectorTex: { - type: "t", - value: texture, - }, + curtain: { value: 1.0 }, + opacity: { value: 1.0 }, + projectorMat: { value: transform.projectorMatrix() }, + projectorTex: { value: texture }, }, vertexShader: Component_1.Shaders.perspectiveDistortedCurtain.vertex, }; @@ -34524,18 +45069,9 @@ var MeshFactory = /** @class */ (function () { side: THREE.DoubleSide, transparent: true, uniforms: { - opacity: { - type: "f", - value: 1, - }, - projectorMat: { - type: "m4", - value: transform.projectorMatrix(), - }, - projectorTex: { - type: "t", - value: texture, - }, + opacity: { value: 1.0 }, + projectorMat: { value: transform.projectorMatrix() }, + projectorTex: { value: texture }, }, vertexShader: Component_1.Shaders.perspectiveDistorted.vertex, }; @@ -34578,7 +45114,7 @@ var MeshFactory = /** @class */ (function () { indices[i] = faces[i]; } var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); geometry.setIndex(new THREE.BufferAttribute(indices, 1)); return geometry; }; @@ -34614,7 +45150,39 @@ var MeshFactory = /** @class */ (function () { indices[i] = faces[i]; } var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.setIndex(new THREE.BufferAttribute(indices, 1)); + return geometry; + }; + MeshFactory.prototype._getImagePlaneGeoFisheye = function (transform, node) { + var t = new THREE.Matrix4().getInverse(transform.srt); + // push everything at least 5 meters in front of the camera + var minZ = 5.0 * transform.scale; + var maxZ = this._imagePlaneDepth * transform.scale; + var vertices = node.mesh.vertices; + var numVertices = vertices.length / 3; + var positions = new Float32Array(vertices.length); + for (var i = 0; i < numVertices; ++i) { + var index = 3 * i; + var x = vertices[index + 0]; + var y = vertices[index + 1]; + var z = vertices[index + 2]; + var l = Math.sqrt(x * x + y * y + z * z); + var boundedL = Math.max(minZ, Math.min(l, maxZ)); + var factor = boundedL / l; + var p = new THREE.Vector3(x * factor, y * factor, z * factor); + p.applyMatrix4(t); + positions[index + 0] = p.x; + positions[index + 1] = p.y; + positions[index + 2] = p.z; + } + var faces = node.mesh.faces; + var indices = new Uint16Array(faces.length); + for (var i = 0; i < faces.length; ++i) { + indices[i] = faces[i]; + } + var geometry = new THREE.BufferGeometry(); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); geometry.setIndex(new THREE.BufferAttribute(indices, 1)); return geometry; }; @@ -34627,7 +45195,7 @@ var MeshFactory = /** @class */ (function () { gpano.FullPanoHeightPixels; var thetaLength = Math.PI * gpano.CroppedAreaImageHeightPixels / gpano.FullPanoHeightPixels; var geometry = new THREE.SphereGeometry(this._imageSphereRadius, 20, 40, phiStart - Math.PI / 2, phiLength, thetaStart, thetaLength); - geometry.applyMatrix(new THREE.Matrix4().getInverse(transform.rt)); + geometry.applyMatrix4(new THREE.Matrix4().getInverse(transform.rt)); return geometry; }; MeshFactory.prototype._getRegularFlatImagePlaneGeo = function (transform) { @@ -34646,6 +45214,22 @@ var MeshFactory = /** @class */ (function () { vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth)); return this._createFlatGeometry(vertices); }; + MeshFactory.prototype._getRegularFlatImagePlaneGeoFisheye = function (transform) { + var width = transform.width; + var height = transform.height; + var size = Math.max(width, height); + var dx = width / 2.0 / size; + var dy = height / 2.0 / size; + return this._getFlatImagePlaneGeoFisheye(transform, dx, dy); + }; + MeshFactory.prototype._getFlatImagePlaneGeoFisheye = function (transform, dx, dy) { + var vertices = []; + vertices.push(transform.unprojectSfM([-dx, -dy], this._imagePlaneDepth)); + vertices.push(transform.unprojectSfM([dx, -dy], this._imagePlaneDepth)); + vertices.push(transform.unprojectSfM([dx, dy], this._imagePlaneDepth)); + vertices.push(transform.unprojectSfM([-dx, dy], this._imagePlaneDepth)); + return this._createFlatGeometry(vertices); + }; MeshFactory.prototype._getFlatImagePlaneGeoFromBasic = function (transform, basicX0, basicX1, basicY0, basicY1) { var vertices = []; vertices.push(transform.unprojectBasic([basicX0, basicY0], this._imagePlaneDepth)); @@ -34670,7 +45254,7 @@ var MeshFactory = /** @class */ (function () { indices[4] = 2; indices[5] = 3; var geometry = new THREE.BufferGeometry(); - geometry.addAttribute("position", new THREE.BufferAttribute(positions, 3)); + geometry.setAttribute("position", new THREE.BufferAttribute(positions, 3)); geometry.setIndex(new THREE.BufferAttribute(indices, 1)); return geometry; }; @@ -34679,49 +45263,119 @@ var MeshFactory = /** @class */ (function () { exports.MeshFactory = MeshFactory; exports.default = MeshFactory; -},{"../../Component":274,"three":225}],374:[function(require,module,exports){ +},{"../../Component":291,"three":242}],407:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.MeshScene = void 0; var THREE = require("three"); var MeshScene = /** @class */ (function () { function MeshScene() { - this.scene = new THREE.Scene(); - this.sceneOld = new THREE.Scene(); - this.imagePlanes = []; - this.imagePlanesOld = []; + this._planes = {}; + this._planesOld = {}; + this._planesPeriphery = {}; + this._scene = new THREE.Scene(); + this._sceneOld = new THREE.Scene(); + this._scenePeriphery = new THREE.Scene(); } + Object.defineProperty(MeshScene.prototype, "planes", { + get: function () { + return this._planes; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MeshScene.prototype, "planesOld", { + get: function () { + return this._planesOld; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MeshScene.prototype, "planesPeriphery", { + get: function () { + return this._planesPeriphery; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MeshScene.prototype, "scene", { + get: function () { + return this._scene; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MeshScene.prototype, "sceneOld", { + get: function () { + return this._sceneOld; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MeshScene.prototype, "scenePeriphery", { + get: function () { + return this._scenePeriphery; + }, + enumerable: false, + configurable: true + }); MeshScene.prototype.updateImagePlanes = function (planes) { - this._dispose(this.imagePlanesOld, this.sceneOld); - for (var _i = 0, _a = this.imagePlanes; _i < _a.length; _i++) { - var plane = _a[_i]; - this.scene.remove(plane); - this.sceneOld.add(plane); + this._dispose(this._planesOld, this.sceneOld); + for (var key in this._planes) { + if (!this._planes.hasOwnProperty(key)) { + continue; + } + var plane = this._planes[key]; + this._scene.remove(plane); + this._sceneOld.add(plane); } - for (var _b = 0, planes_1 = planes; _b < planes_1.length; _b++) { - var plane = planes_1[_b]; - this.scene.add(plane); + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + this._scene.add(planes[key]); } - this.imagePlanesOld = this.imagePlanes; - this.imagePlanes = planes; + this._planesOld = this._planes; + this._planes = planes; }; MeshScene.prototype.addImagePlanes = function (planes) { - for (var _i = 0, planes_2 = planes; _i < planes_2.length; _i++) { - var plane = planes_2[_i]; - this.scene.add(plane); - this.imagePlanes.push(plane); + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; + this._scene.add(plane); + this._planes[key] = plane; } }; MeshScene.prototype.addImagePlanesOld = function (planes) { - for (var _i = 0, planes_3 = planes; _i < planes_3.length; _i++) { - var plane = planes_3[_i]; - this.sceneOld.add(plane); - this.imagePlanesOld.push(plane); + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; + this._sceneOld.add(plane); + this._planesOld[key] = plane; } }; MeshScene.prototype.setImagePlanes = function (planes) { this._clear(); this.addImagePlanes(planes); }; + MeshScene.prototype.addPeripheryPlanes = function (planes) { + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; + this._scenePeriphery.add(plane); + this._planesPeriphery[key] = plane; + } + }; + MeshScene.prototype.setPeripheryPlanes = function (planes) { + this._clearPeriphery(); + this.addPeripheryPlanes(planes); + }; MeshScene.prototype.setImagePlanesOld = function (planes) { this._clearOld(); this.addImagePlanesOld(planes); @@ -34731,16 +45385,23 @@ var MeshScene = /** @class */ (function () { this._clearOld(); }; MeshScene.prototype._clear = function () { - this._dispose(this.imagePlanes, this.scene); - this.imagePlanes.length = 0; + this._dispose(this._planes, this._scene); + this._planes = {}; }; MeshScene.prototype._clearOld = function () { - this._dispose(this.imagePlanesOld, this.sceneOld); - this.imagePlanesOld.length = 0; + this._dispose(this._planesOld, this._sceneOld); + this._planesOld = {}; + }; + MeshScene.prototype._clearPeriphery = function () { + this._dispose(this._planesPeriphery, this._scenePeriphery); + this._planesPeriphery = {}; }; MeshScene.prototype._dispose = function (planes, scene) { - for (var _i = 0, planes_4 = planes; _i < planes_4.length; _i++) { - var plane = planes_4[_i]; + for (var key in planes) { + if (!planes.hasOwnProperty(key)) { + continue; + } + var plane = planes[key]; scene.remove(plane); plane.geometry.dispose(); plane.material.dispose(); @@ -34755,9 +45416,10 @@ var MeshScene = /** @class */ (function () { exports.MeshScene = MeshScene; exports.default = MeshScene; -},{"three":225}],375:[function(require,module,exports){ +},{"three":242}],408:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.MouseOperator = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var MouseOperator = /** @class */ (function () { @@ -34784,7 +45446,7 @@ var MouseOperator = /** @class */ (function () { exports.MouseOperator = MouseOperator; exports.default = MouseOperator; -},{"rxjs":26,"rxjs/operators":224}],376:[function(require,module,exports){ +},{"rxjs":43,"rxjs/operators":241}],409:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -34792,7 +45454,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -34800,12 +45462,30 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.ZoomComponent = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); var Component_1 = require("../../Component"); var Geo_1 = require("../../Geo"); var State_1 = require("../../State"); +var ComponentSize_1 = require("../utils/ComponentSize"); +/** + * @class ZoomComponent + * + * @classdesc Component rendering UI elements used for zooming. + * + * @example + * ``` + * var viewer = new Mapillary.Viewer( + * "", + * "", + * ""); + * + * var zoomComponent = viewer.getComponent("zoom"); + * zoomComponent.configure({ size: Mapillary.ComponentSize.Small }); + * ``` + */ var ZoomComponent = /** @class */ (function (_super) { __extends(ZoomComponent, _super); function ZoomComponent(name, container, navigator) { @@ -34816,11 +45496,9 @@ var ZoomComponent = /** @class */ (function (_super) { } ZoomComponent.prototype._activate = function () { var _this = this; - this._renderSubscription = rxjs_1.combineLatest(this._navigator.stateService.currentState$, this._navigator.stateService.state$).pipe(operators_1.map(function (_a) { - var frame = _a[0], state = _a[1]; - return [frame.state.zoom, state]; - }), operators_1.map(function (_a) { - var zoom = _a[0], state = _a[1]; + this._renderSubscription = rxjs_1.combineLatest(this._navigator.stateService.currentState$, this._navigator.stateService.state$, this._configuration$, this._container.renderService.size$).pipe(operators_1.map(function (_a) { + var frame = _a[0], state = _a[1], configuration = _a[2], size = _a[3]; + var zoom = frame.state.zoom; var zoomInIcon = vd.h("div.ZoomInIcon", []); var zoomInButton = zoom >= 3 || state === State_1.State.Waiting ? vd.h("div.ZoomInButtonDisabled", [zoomInIcon]) : @@ -34829,9 +45507,12 @@ var ZoomComponent = /** @class */ (function (_super) { var zoomOutButton = zoom <= 0 || state === State_1.State.Waiting ? vd.h("div.ZoomOutButtonDisabled", [zoomOutIcon]) : vd.h("div.ZoomOutButton", { onclick: function () { _this._zoomDelta$.next(-1); } }, [zoomOutIcon]); + var compact = configuration.size === ComponentSize_1.default.Small || + configuration.size === ComponentSize_1.default.Automatic && size.width < 640 ? + ".ZoomCompact" : ""; return { name: _this._name, - vnode: vd.h("div.ZoomContainer", { oncontextmenu: function (event) { event.preventDefault(); } }, [zoomInButton, zoomOutButton]), + vnode: vd.h("div.ZoomContainer" + compact, { oncontextmenu: function (event) { event.preventDefault(); } }, [zoomInButton, zoomOutButton]), }; })) .subscribe(this._container.domRenderer.render$); @@ -34848,7 +45529,7 @@ var ZoomComponent = /** @class */ (function (_super) { this._zoomSubscription.unsubscribe(); }; ZoomComponent.prototype._getDefaultConfiguration = function () { - return {}; + return { size: ComponentSize_1.default.Automatic }; }; ZoomComponent.componentName = "zoom"; return ZoomComponent; @@ -34857,7 +45538,7 @@ exports.ZoomComponent = ZoomComponent; Component_1.ComponentService.register(ZoomComponent); exports.default = ZoomComponent; -},{"../../Component":274,"../../Geo":277,"../../State":281,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],377:[function(require,module,exports){ +},{"../../Component":291,"../../Geo":294,"../../State":298,"../utils/ComponentSize":404,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],410:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -34865,7 +45546,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -34873,6 +45554,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.AbortMapillaryError = void 0; var MapillaryError_1 = require("./MapillaryError"); /** * @class AbortMapillaryError @@ -34893,7 +45575,7 @@ var AbortMapillaryError = /** @class */ (function (_super) { exports.AbortMapillaryError = AbortMapillaryError; exports.default = AbortMapillaryError; -},{"./MapillaryError":380}],378:[function(require,module,exports){ +},{"./MapillaryError":413}],411:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -34901,7 +45583,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -34909,6 +45591,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.ArgumentMapillaryError = void 0; var MapillaryError_1 = require("./MapillaryError"); var ArgumentMapillaryError = /** @class */ (function (_super) { __extends(ArgumentMapillaryError, _super); @@ -34923,7 +45606,7 @@ var ArgumentMapillaryError = /** @class */ (function (_super) { exports.ArgumentMapillaryError = ArgumentMapillaryError; exports.default = ArgumentMapillaryError; -},{"./MapillaryError":380}],379:[function(require,module,exports){ +},{"./MapillaryError":413}],412:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -34931,7 +45614,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -34939,6 +45622,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphMapillaryError = void 0; var MapillaryError_1 = require("./MapillaryError"); var GraphMapillaryError = /** @class */ (function (_super) { __extends(GraphMapillaryError, _super); @@ -34953,7 +45637,7 @@ var GraphMapillaryError = /** @class */ (function (_super) { exports.GraphMapillaryError = GraphMapillaryError; exports.default = GraphMapillaryError; -},{"./MapillaryError":380}],380:[function(require,module,exports){ +},{"./MapillaryError":413}],413:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -34961,7 +45645,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -34969,6 +45653,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.MapillaryError = void 0; var MapillaryError = /** @class */ (function (_super) { __extends(MapillaryError, _super); function MapillaryError(message) { @@ -34982,9 +45667,10 @@ var MapillaryError = /** @class */ (function (_super) { exports.MapillaryError = MapillaryError; exports.default = MapillaryError; -},{}],381:[function(require,module,exports){ +},{}],414:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Camera = void 0; var THREE = require("three"); /** * @class Camera @@ -35018,7 +45704,7 @@ var Camera = /** @class */ (function () { get: function () { return this._position; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Camera.prototype, "lookat", { @@ -35029,7 +45715,7 @@ var Camera = /** @class */ (function () { get: function () { return this._lookat; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Camera.prototype, "up", { @@ -35040,7 +45726,7 @@ var Camera = /** @class */ (function () { get: function () { return this._up; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Camera.prototype, "focal", { @@ -35057,7 +45743,7 @@ var Camera = /** @class */ (function () { set: function (value) { this._focal = value; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -35131,9 +45817,11 @@ var Camera = /** @class */ (function () { }()); exports.Camera = Camera; -},{"three":225}],382:[function(require,module,exports){ +},{"three":242}],415:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.computeProjectedPoints = exports.computeTranslation = void 0; +var THREE = require("three"); var Geo_1 = require("../Geo"); var geoCoords = new Geo_1.GeoCoords(); var spatial = new Geo_1.Spatial(); @@ -35144,10 +45832,39 @@ function computeTranslation(position, rotation, reference) { return translation; } exports.computeTranslation = computeTranslation; +function computeProjectedPoints(transform, basicVertices, basicDirections, pointsPerLine, viewportCoords) { + var basicPoints = []; + for (var side = 0; side < basicVertices.length; ++side) { + var v = basicVertices[side]; + var d = basicDirections[side]; + for (var i = 0; i <= pointsPerLine; ++i) { + basicPoints.push([v[0] + d[0] * i / pointsPerLine, + v[1] + d[1] * i / pointsPerLine]); + } + } + var camera = new THREE.Camera(); + camera.up.copy(transform.upVector()); + camera.position.copy(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0))); + camera.lookAt(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10))); + camera.updateMatrix(); + camera.updateMatrixWorld(true); + var projectedPoints = basicPoints + .map(function (basicPoint) { + var worldPoint = transform.unprojectBasic(basicPoint, 10000); + var cameraPoint = viewportCoords.worldToCamera(worldPoint, camera); + return [ + Math.abs(cameraPoint[0] / cameraPoint[2]), + Math.abs(cameraPoint[1] / cameraPoint[2]), + ]; + }); + return projectedPoints; +} +exports.computeProjectedPoints = computeProjectedPoints; -},{"../Geo":277}],383:[function(require,module,exports){ +},{"../Geo":294,"three":242}],416:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.GeoCoords = void 0; /** * @class GeoCoords * @@ -35369,9 +46086,43 @@ var GeoCoords = /** @class */ (function () { exports.GeoCoords = GeoCoords; exports.default = GeoCoords; -},{}],384:[function(require,module,exports){ +},{}],417:[function(require,module,exports){ "use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.GeoRBush = void 0; +var RBush = require("rbush"); +var GeoRBush = /** @class */ (function (_super) { + __extends(GeoRBush, _super); + function GeoRBush() { + return _super !== null && _super.apply(this, arguments) || this; + } + GeoRBush.prototype.compareMinX = function (a, b) { return a.lat - b.lat; }; + GeoRBush.prototype.compareMinY = function (a, b) { return a.lon - b.lon; }; + GeoRBush.prototype.toBBox = function (item) { + return { minX: item.lat, minY: item.lon, maxX: item.lat, maxY: item.lon }; + }; + return GeoRBush; +}(RBush)); +exports.GeoRBush = GeoRBush; +exports.default = GeoRBush; + +},{"rbush":42}],418:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.segmentIntersection = exports.segmentsIntersect = void 0; function sign(n) { return n > 0 ? 1 : n < 0 ? -1 : 0; } @@ -35442,9 +46193,10 @@ function segmentIntersection(s1, s2) { } exports.segmentIntersection = segmentIntersection; -},{}],385:[function(require,module,exports){ +},{}],419:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Spatial = void 0; var THREE = require("three"); /** * @class Spatial @@ -35645,6 +46397,13 @@ var Spatial = /** @class */ (function () { var projection = v.dot(new THREE.Vector3().fromArray(planeNormal)); return Math.asin(projection / norm); }; + Spatial.prototype.azimuthal = function (direction, up) { + var directionVector = new THREE.Vector3().fromArray(direction); + var upVector = new THREE.Vector3().fromArray(up); + var upProjection = directionVector.clone().dot(upVector); + var planeProjection = directionVector.clone().sub(upVector.clone().multiplyScalar(upProjection)); + return Math.atan2(planeProjection.y, planeProjection.x); + }; /** * Calculates the distance between two coordinates * (latitude longitude pairs) in meters according to @@ -35671,9 +46430,10 @@ var Spatial = /** @class */ (function () { exports.Spatial = Spatial; exports.default = Spatial; -},{"three":225}],386:[function(require,module,exports){ +},{"three":242}],420:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Transform = void 0; var THREE = require("three"); /** * @class Transform @@ -35694,7 +46454,7 @@ var Transform = /** @class */ (function () { * @param {Array} translation - Translation vector in three dimensions. * @param {HTMLImageElement} image - Image for fallback size calculations. */ - function Transform(orientation, width, height, focal, scale, gpano, rotation, translation, image, textureScale, ck1, ck2) { + function Transform(orientation, width, height, focal, scale, gpano, rotation, translation, image, textureScale, ck1, ck2, cameraProjection) { this._orientation = this._getValue(orientation, 1); var imageWidth = image != null ? image.width : 4; var imageHeight = image != null ? image.height : 3; @@ -35715,20 +46475,32 @@ var Transform = /** @class */ (function () { this._textureScale = !!textureScale ? textureScale : [1, 1]; this._ck1 = !!ck1 ? ck1 : 0; this._ck2 = !!ck2 ? ck2 : 0; + this._cameraProjection = !!cameraProjection ? + cameraProjection : + !!gpano ? + "equirectangular" : + "perspective"; this._radialPeak = this._getRadialPeak(this._ck1, this._ck2); } Object.defineProperty(Transform.prototype, "ck1", { get: function () { return this._ck1; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "ck2", { get: function () { return this._ck2; }, - enumerable: true, + enumerable: false, + configurable: true + }); + Object.defineProperty(Transform.prototype, "cameraProjection", { + get: function () { + return this._cameraProjection; + }, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "basicAspect", { @@ -35739,7 +46511,7 @@ var Transform = /** @class */ (function () { get: function () { return this._basicAspect; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "basicHeight", { @@ -35755,14 +46527,14 @@ var Transform = /** @class */ (function () { get: function () { return this._basicHeight; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "basicRt", { get: function () { return this._basicRt; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "basicWidth", { @@ -35778,7 +46550,7 @@ var Transform = /** @class */ (function () { get: function () { return this._basicWidth; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "focal", { @@ -35789,7 +46561,7 @@ var Transform = /** @class */ (function () { get: function () { return this._focal; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "fullPano", { @@ -35806,7 +46578,7 @@ var Transform = /** @class */ (function () { this._gpano.CroppedAreaImageWidthPixels === this._gpano.FullPanoWidthPixels && this._gpano.CroppedAreaImageHeightPixels === this._gpano.FullPanoHeightPixels; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "gpano", { @@ -35817,7 +46589,7 @@ var Transform = /** @class */ (function () { get: function () { return this._gpano; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "height", { @@ -35832,7 +46604,7 @@ var Transform = /** @class */ (function () { get: function () { return this._height; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "orientation", { @@ -35843,7 +46615,7 @@ var Transform = /** @class */ (function () { get: function () { return this._orientation; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "rt", { @@ -35854,7 +46626,7 @@ var Transform = /** @class */ (function () { get: function () { return this._rt; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "srt", { @@ -35865,7 +46637,7 @@ var Transform = /** @class */ (function () { get: function () { return this._srt; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "scale", { @@ -35876,7 +46648,7 @@ var Transform = /** @class */ (function () { get: function () { return this._scale; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "hasValidScale", { @@ -35887,7 +46659,7 @@ var Transform = /** @class */ (function () { get: function () { return this._scale > 1e-2 && this._scale < 50; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "radialPeak", { @@ -35899,7 +46671,7 @@ var Transform = /** @class */ (function () { get: function () { return this._radialPeak; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Transform.prototype, "width", { @@ -35914,7 +46686,7 @@ var Transform = /** @class */ (function () { get: function () { return this._width; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -36035,18 +46807,21 @@ var Transform = /** @class */ (function () { var z = Math.cos(lat) * Math.cos(lon); return [x, y, z]; } - else { + else if (this._cameraProjection === "fisheye") { var _a = [sfm[0] / this._focal, sfm[1] / this._focal], dxn = _a[0], dyn = _a[1]; - var rp = this._radialPeak; + var dTheta = Math.sqrt(dxn * dxn + dyn * dyn); + var d = this._distortionFromDistortedRadius(dTheta, this._ck1, this._ck2, this._radialPeak); + var theta = dTheta / d; + var z = Math.cos(theta); + var r = Math.sin(theta); + var x = r * dxn / dTheta; + var y = r * dyn / dTheta; + return [x, y, z]; + } + else { + var _b = [sfm[0] / this._focal, sfm[1] / this._focal], dxn = _b[0], dyn = _b[1]; var dr = Math.sqrt(dxn * dxn + dyn * dyn); - var d = 1.0; - for (var i = 0; i < 10; i++) { - var r = dr / d; - if (r > rp) { - r = rp; - } - d = 1 + this._ck1 * Math.pow(r, 2) + this._ck2 * Math.pow(r, 4); - } + var d = this._distortionFromDistortedRadius(dr, this._ck1, this._ck2, this._radialPeak); var xn = dxn / d; var yn = dyn / d; var v = new THREE.Vector3(xn, yn, 1); @@ -36054,6 +46829,23 @@ var Transform = /** @class */ (function () { return [v.x, v.y, v.z]; } }; + /** Compute distortion given the distorted radius. + * + * Solves for d in the equation + * y = d(x, k1, k2) * x + * given the distorted radius, y. + */ + Transform.prototype._distortionFromDistortedRadius = function (distortedRadius, k1, k2, radialPeak) { + var d = 1.0; + for (var i = 0; i < 10; i++) { + var radius = distortedRadius / d; + if (radius > radialPeak) { + radius = radialPeak; + } + d = 1 + k1 * Math.pow(radius, 2) + k2 * Math.pow(radius, 4); + } + return d; + }; /** * Transform bearing vector (3D cartesian coordiantes on the unit sphere) to * SfM coordinates. @@ -36087,6 +46879,25 @@ var Transform = /** @class */ (function () { (fullPanoPixel[1] - this.gpano.CroppedAreaTopPixels - this.gpano.CroppedAreaImageHeightPixels / 2) / size, ]; } + else if (this._cameraProjection === "fisheye") { + if (bearing[2] > 0) { + var x = bearing[0], y = bearing[1], z = bearing[2]; + var r = Math.sqrt(x * x + y * y); + var theta = Math.atan2(r, z); + if (theta > this._radialPeak) { + theta = this._radialPeak; + } + var distortion = 1.0 + Math.pow(theta, 2) * (this._ck1 + Math.pow(theta, 2) * this._ck2); + var s = this._focal * distortion * theta / r; + return [s * x, s * y]; + } + else { + return [ + bearing[0] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, + bearing[1] < 0 ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, + ]; + } + } else { if (bearing[2] > 0) { var _a = [bearing[0] / bearing[2], bearing[1] / bearing[2]], xn = _a[0], yn = _a[1]; @@ -36311,9 +47122,10 @@ var Transform = /** @class */ (function () { }()); exports.Transform = Transform; -},{"three":225}],387:[function(require,module,exports){ +},{"three":242}],421:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ViewportCoords = void 0; var THREE = require("three"); /** * @class ViewportCoords @@ -36615,6 +47427,24 @@ var ViewportCoords = /** @class */ (function () { var canvas = this.viewportToCanvas(viewport[0], viewport[1], container); return canvas; }; + /** + * Project 3D world coordinates to canvas coordinates safely. If 3D + * point is behind camera null will be returned. + * + * @param {Array} point3D - 3D world coordinates. + * @param {HTMLElement} container - The viewer container. + * @param {THREE.Camera} camera - Camera used in rendering. + * @returns {Array} 2D canvas coordinates. + */ + ViewportCoords.prototype.projectToCanvasSafe = function (point3d, container, camera) { + var pointCamera = this.worldToCamera(point3d, camera); + if (pointCamera[2] > 0) { + return null; + } + var viewport = this.projectToViewport(point3d, camera); + var canvas = this.viewportToCanvas(viewport[0], viewport[1], container); + return canvas; + }; /** * Project 3D world coordinates to viewport coordinates. * @@ -36705,9 +47535,14 @@ exports.ViewportCoords = ViewportCoords; exports.default = ViewportCoords; -},{"three":225}],388:[function(require,module,exports){ +},{"three":242}],422:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],423:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.FilterCreator = void 0; /** * @class Filter * @@ -36793,15 +47628,16 @@ var FilterCreator = /** @class */ (function () { exports.FilterCreator = FilterCreator; exports.default = FilterCreator; -},{}],389:[function(require,module,exports){ +},{}],424:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Graph = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); -var rbush = require("rbush"); var Edge_1 = require("../Edge"); var Error_1 = require("../Error"); var Graph_1 = require("../Graph"); +var Geo_1 = require("../Geo"); /** * @class Graph * @@ -36846,7 +47682,7 @@ var Graph = /** @class */ (function () { maxUnusedTiles: 20, }; this._nodes = {}; - this._nodeIndex = nodeIndex != null ? nodeIndex : rbush(16, [".lat", ".lon", ".lat", ".lon"]); + this._nodeIndex = nodeIndex != null ? nodeIndex : new Geo_1.GeoRBush(16); this._nodeIndexTiles = {}; this._nodeToTile = {}; this._preStored = {}; @@ -36866,7 +47702,7 @@ var Graph = /** @class */ (function () { get: function () { return this._changed$; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -38004,9 +48840,10 @@ var Graph = /** @class */ (function () { exports.Graph = Graph; exports.default = Graph; -},{"../Edge":275,"../Error":276,"../Graph":278,"rbush":25,"rxjs":26,"rxjs/operators":224}],390:[function(require,module,exports){ +},{"../Edge":292,"../Error":293,"../Geo":294,"../Graph":295,"rxjs":43,"rxjs/operators":241}],425:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphCalculator = void 0; var geohash = require("latlon-geohash"); var THREE = require("three"); var Error_1 = require("../Error"); @@ -38179,9 +49016,10 @@ var GraphCalculator = /** @class */ (function () { exports.GraphCalculator = GraphCalculator; exports.default = GraphCalculator; -},{"../Error":276,"../Geo":277,"latlon-geohash":21,"three":225}],391:[function(require,module,exports){ +},{"../Error":293,"../Geo":294,"latlon-geohash":21,"three":242}],426:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphMode = void 0; /** * Enumeration for graph modes. * @enum {number} @@ -38211,9 +49049,10 @@ var GraphMode; })(GraphMode = exports.GraphMode || (exports.GraphMode = {})); exports.default = GraphMode; -},{}],392:[function(require,module,exports){ +},{}],427:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphService = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Graph_1 = require("../Graph"); @@ -38253,7 +49092,7 @@ var GraphService = /** @class */ (function () { get: function () { return this._graphMode$; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -38571,9 +49410,10 @@ var GraphService = /** @class */ (function () { exports.GraphService = GraphService; exports.default = GraphService; -},{"../Graph":278,"rxjs":26,"rxjs/operators":224}],393:[function(require,module,exports){ +},{"../Graph":295,"rxjs":43,"rxjs/operators":241}],428:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageLoadingService = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var ImageLoadingService = /** @class */ (function () { @@ -38606,23 +49446,24 @@ var ImageLoadingService = /** @class */ (function () { get: function () { return this._loadnode$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(ImageLoadingService.prototype, "loadstatus$", { get: function () { return this._loadstatus$; }, - enumerable: true, + enumerable: false, configurable: true }); return ImageLoadingService; }()); exports.ImageLoadingService = ImageLoadingService; -},{"rxjs":26,"rxjs/operators":224}],394:[function(require,module,exports){ +},{"rxjs":43,"rxjs/operators":241}],429:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.MeshReader = void 0; var Pbf = require("pbf"); var MeshReader = /** @class */ (function () { function MeshReader() { @@ -38643,9 +49484,10 @@ var MeshReader = /** @class */ (function () { }()); exports.MeshReader = MeshReader; -},{"pbf":23}],395:[function(require,module,exports){ +},{"pbf":40}],430:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Node = void 0; var operators_1 = require("rxjs/operators"); /** * @class Node @@ -38712,7 +49554,7 @@ var Node = /** @class */ (function () { this._cache.image != null && this._cache.mesh != null; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "alt", { @@ -38727,7 +49569,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.calt; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "ca", { @@ -38743,7 +49585,21 @@ var Node = /** @class */ (function () { get: function () { return this._fill.cca != null ? this._fill.cca : this._fill.ca; }, - enumerable: true, + enumerable: false, + configurable: true + }); + Object.defineProperty(Node.prototype, "cameraProjection", { + /** + * Get cameraProjection. + * + * @description Will be undefined if SfM has not been run. + * + * @returns {number} The camera projection of the image. + */ + get: function () { + return this._fill.camera_projection_type; + }, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "capturedAt", { @@ -38755,7 +49611,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.captured_at; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "cameraUuid", { @@ -38771,7 +49627,20 @@ var Node = /** @class */ (function () { get: function () { return this._fill.captured_with_camera_uuid; }, - enumerable: true, + enumerable: false, + configurable: true + }); + Object.defineProperty(Node.prototype, "clusterKey", { + /** + * Get clusterKey. + * + * @returns {string} Unique key of the SfM cluster to which + * the node belongs. + */ + get: function () { + return this._fill.cluster_key; + }, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "ck1", { @@ -38786,7 +49655,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.ck1; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "ck2", { @@ -38801,7 +49670,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.ck2; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "computedCA", { @@ -38816,7 +49685,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.cca; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "computedLatLon", { @@ -38831,7 +49700,7 @@ var Node = /** @class */ (function () { get: function () { return this._core.cl; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "focal", { @@ -38845,7 +49714,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.cfocal; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "full", { @@ -38863,7 +49732,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill != null; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "fullPano", { @@ -38880,7 +49749,7 @@ var Node = /** @class */ (function () { this._fill.gpano.CroppedAreaImageWidthPixels === this._fill.gpano.FullPanoWidthPixels && this._fill.gpano.CroppedAreaImageHeightPixels === this._fill.gpano.FullPanoHeightPixels; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "gpano", { @@ -38894,7 +49763,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.gpano; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "height", { @@ -38907,7 +49776,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.height; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "image", { @@ -38921,7 +49790,7 @@ var Node = /** @class */ (function () { get: function () { return this._cache.image; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "image$", { @@ -38936,7 +49805,7 @@ var Node = /** @class */ (function () { get: function () { return this._cache.image$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "key", { @@ -38948,7 +49817,7 @@ var Node = /** @class */ (function () { get: function () { return this._core.key; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "latLon", { @@ -38965,7 +49834,7 @@ var Node = /** @class */ (function () { get: function () { return this._core.cl != null ? this._core.cl : this._core.l; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "loadStatus", { @@ -38974,11 +49843,13 @@ var Node = /** @class */ (function () { * * @returns {ILoadStatus} Value indicating the load status * of the mesh and image. + * + * @ignore */ get: function () { return this._cache.loadStatus; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "merged", { @@ -38994,7 +49865,7 @@ var Node = /** @class */ (function () { this._fill.merge_version != null && this._fill.merge_version > 0; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "mergeCC", { @@ -39010,7 +49881,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.merge_cc; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "mergeVersion", { @@ -39022,7 +49893,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.merge_version; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "mesh", { @@ -39037,7 +49908,7 @@ var Node = /** @class */ (function () { get: function () { return this._cache.mesh; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "organizationKey", { @@ -39051,7 +49922,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.organization_key; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "orientation", { @@ -39063,7 +49934,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.orientation; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "originalCA", { @@ -39076,7 +49947,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.ca; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "originalLatLon", { @@ -39089,7 +49960,7 @@ var Node = /** @class */ (function () { get: function () { return this._core.l; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "pano", { @@ -39103,7 +49974,7 @@ var Node = /** @class */ (function () { return this._fill.gpano != null && this._fill.gpano.FullPanoWidthPixels != null; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "private", { @@ -39116,7 +49987,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.private; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "projectKey", { @@ -39135,7 +50006,7 @@ var Node = /** @class */ (function () { this._fill.project.key : null; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "rotation", { @@ -39149,7 +50020,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.c_rotation; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "scale", { @@ -39163,7 +50034,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.atomic_scale; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "sequenceKey", { @@ -39176,7 +50047,7 @@ var Node = /** @class */ (function () { get: function () { return this._core.sequence_key; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "sequenceEdges", { @@ -39185,11 +50056,13 @@ var Node = /** @class */ (function () { * * @returns {IEdgeStatus} Value describing the status of the * sequence edges. + * + * @ignore */ get: function () { return this._cache.sequenceEdges; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "sequenceEdges$", { @@ -39206,7 +50079,7 @@ var Node = /** @class */ (function () { get: function () { return this._cache.sequenceEdges$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "spatialEdges", { @@ -39215,11 +50088,13 @@ var Node = /** @class */ (function () { * * @returns {IEdgeStatus} Value describing the status of the * spatial edges. + * + * @ignore */ get: function () { return this._cache.spatialEdges; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "spatialEdges$", { @@ -39236,7 +50111,7 @@ var Node = /** @class */ (function () { get: function () { return this._cache.spatialEdges$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "userKey", { @@ -39249,7 +50124,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.user.key; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "username", { @@ -39262,7 +50137,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.user.username; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Node.prototype, "width", { @@ -39275,7 +50150,7 @@ var Node = /** @class */ (function () { get: function () { return this._fill.width; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -39414,10 +50289,11 @@ var Node = /** @class */ (function () { exports.Node = Node; exports.default = Node; -},{"rxjs/operators":224}],396:[function(require,module,exports){ +},{"rxjs/operators":241}],431:[function(require,module,exports){ (function (Buffer){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.NodeCache = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Graph_1 = require("../Graph"); @@ -39461,7 +50337,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._image; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(NodeCache.prototype, "image$", { @@ -39474,7 +50350,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._image$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(NodeCache.prototype, "loadStatus", { @@ -39487,7 +50363,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._loadStatus; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(NodeCache.prototype, "mesh", { @@ -39503,7 +50379,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._mesh; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(NodeCache.prototype, "sequenceEdges", { @@ -39516,7 +50392,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._sequenceEdges; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(NodeCache.prototype, "sequenceEdges$", { @@ -39529,7 +50405,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._sequenceEdges$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(NodeCache.prototype, "spatialEdges", { @@ -39542,7 +50418,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._spatialEdges; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(NodeCache.prototype, "spatialEdges$", { @@ -39555,7 +50431,7 @@ var NodeCache = /** @class */ (function () { get: function () { return this._spatialEdges$; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -39836,9 +50712,10 @@ exports.default = NodeCache; }).call(this,require("buffer").Buffer) -},{"../Graph":278,"../Utils":284,"buffer":7,"rxjs":26,"rxjs/operators":224}],397:[function(require,module,exports){ +},{"../Graph":295,"../Utils":301,"buffer":6,"rxjs":43,"rxjs/operators":241}],432:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Sequence = void 0; /** * @class Sequence * @@ -39863,7 +50740,7 @@ var Sequence = /** @class */ (function () { get: function () { return this._key; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Sequence.prototype, "keys", { @@ -39875,7 +50752,7 @@ var Sequence = /** @class */ (function () { get: function () { return this._keys; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -39924,9 +50801,10 @@ var Sequence = /** @class */ (function () { exports.Sequence = Sequence; exports.default = Sequence; -},{}],398:[function(require,module,exports){ +},{}],433:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.EdgeCalculator = void 0; var THREE = require("three"); var Edge_1 = require("../../Edge"); var Error_1 = require("../../Error"); @@ -40525,9 +51403,10 @@ var EdgeCalculator = /** @class */ (function () { exports.EdgeCalculator = EdgeCalculator; exports.default = EdgeCalculator; -},{"../../Edge":275,"../../Error":276,"../../Geo":277,"three":225}],399:[function(require,module,exports){ +},{"../../Edge":292,"../../Error":293,"../../Geo":294,"three":242}],434:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.EdgeCalculatorCoefficients = void 0; var EdgeCalculatorCoefficients = /** @class */ (function () { function EdgeCalculatorCoefficients() { this.panoPreferredDistance = 2; @@ -40551,9 +51430,10 @@ var EdgeCalculatorCoefficients = /** @class */ (function () { exports.EdgeCalculatorCoefficients = EdgeCalculatorCoefficients; exports.default = EdgeCalculatorCoefficients; -},{}],400:[function(require,module,exports){ +},{}],435:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.EdgeCalculatorDirections = void 0; var Edge_1 = require("../../Edge"); var EdgeCalculatorDirections = /** @class */ (function () { function EdgeCalculatorDirections() { @@ -40624,9 +51504,10 @@ var EdgeCalculatorDirections = /** @class */ (function () { }()); exports.EdgeCalculatorDirections = EdgeCalculatorDirections; -},{"../../Edge":275}],401:[function(require,module,exports){ +},{"../../Edge":292}],436:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.EdgeCalculatorSettings = void 0; var EdgeCalculatorSettings = /** @class */ (function () { function EdgeCalculatorSettings() { this.panoMinDistance = 0.1; @@ -40653,7 +51534,7 @@ var EdgeCalculatorSettings = /** @class */ (function () { get: function () { return Math.max(this.panoMaxDistance, this.similarMaxDistance, this.stepMaxDistance, this.turnMaxDistance); }, - enumerable: true, + enumerable: false, configurable: true }); return EdgeCalculatorSettings; @@ -40661,9 +51542,10 @@ var EdgeCalculatorSettings = /** @class */ (function () { exports.EdgeCalculatorSettings = EdgeCalculatorSettings; exports.default = EdgeCalculatorSettings; -},{}],402:[function(require,module,exports){ +},{}],437:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.EdgeDirection = void 0; /** * Enumeration for edge directions * @enum {number} @@ -40719,9 +51601,18 @@ var EdgeDirection; EdgeDirection[EdgeDirection["Similar"] = 10] = "Similar"; })(EdgeDirection = exports.EdgeDirection || (exports.EdgeDirection = {})); -},{}],403:[function(require,module,exports){ +},{}],438:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],439:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],440:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DOMRenderer = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var vd = require("virtual-dom"); @@ -40869,21 +51760,21 @@ var DOMRenderer = /** @class */ (function () { get: function () { return this._element$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DOMRenderer.prototype, "render$", { get: function () { return this._render$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(DOMRenderer.prototype, "renderAdaptive$", { get: function () { return this._renderAdaptive$; }, - enumerable: true, + enumerable: false, configurable: true }); DOMRenderer.prototype.clear = function (name) { @@ -40896,9 +51787,10 @@ exports.DOMRenderer = DOMRenderer; exports.default = DOMRenderer; -},{"../Render":280,"rxjs":26,"rxjs/operators":224,"virtual-dom":230}],404:[function(require,module,exports){ +},{"../Render":297,"rxjs":43,"rxjs/operators":241,"virtual-dom":247}],441:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.GLRenderStage = void 0; var GLRenderStage; (function (GLRenderStage) { GLRenderStage[GLRenderStage["Background"] = 0] = "Background"; @@ -40906,9 +51798,10 @@ var GLRenderStage; })(GLRenderStage = exports.GLRenderStage || (exports.GLRenderStage = {})); exports.default = GLRenderStage; -},{}],405:[function(require,module,exports){ +},{}],442:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.GLRenderer = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var THREE = require("three"); @@ -41087,14 +51980,14 @@ var GLRenderer = /** @class */ (function () { get: function () { return this._render$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(GLRenderer.prototype, "webGLRenderer$", { get: function () { return this._webGLRenderer$; }, - enumerable: true, + enumerable: false, configurable: true }); GLRenderer.prototype.clear = function (name) { @@ -41122,9 +52015,10 @@ exports.GLRenderer = GLRenderer; exports.default = GLRenderer; -},{"../Render":280,"../Utils":284,"rxjs":26,"rxjs/operators":224,"three":225}],406:[function(require,module,exports){ +},{"../Render":297,"../Utils":301,"rxjs":43,"rxjs/operators":241,"three":242}],443:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.RenderCamera = void 0; var THREE = require("three"); var Geo_1 = require("../Geo"); var Render_1 = require("../Render"); @@ -41158,58 +52052,72 @@ var RenderCamera = /** @class */ (function () { get: function () { return this._alpha; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderCamera.prototype, "camera", { get: function () { return this._camera; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderCamera.prototype, "changed", { get: function () { return this._frameId === this._changedForFrame; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderCamera.prototype, "frameId", { get: function () { return this._frameId; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderCamera.prototype, "perspective", { get: function () { return this._perspective; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderCamera.prototype, "renderMode", { get: function () { return this._renderMode; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderCamera.prototype, "rotation", { get: function () { return this._rotation; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderCamera.prototype, "zoom", { get: function () { return this._zoom; }, - enumerable: true, + enumerable: false, configurable: true }); + RenderCamera.prototype.getTilt = function () { + return 90 - this._spatial.radToDeg(this._rotation.theta); + }; + RenderCamera.prototype.fovToZoom = function (fov) { + fov = Math.min(90, Math.max(0, fov)); + var currentFov = this._computeCurrentFov(0); + var actualFov = this._alpha === 1 ? + currentFov : + this._interpolateFov(currentFov, this._computePreviousFov(0), this._alpha); + var y0 = Math.tan(actualFov / 2 * Math.PI / 180); + var y1 = Math.tan(fov / 2 * Math.PI / 180); + var zoom = Math.log(y0 / y1) / Math.log(2); + return zoom; + }; RenderCamera.prototype.setFrame = function (frame) { var state = frame.state; if (state.state !== this._state) { @@ -41236,8 +52144,8 @@ var RenderCamera = /** @class */ (function () { this._changed = true; } if (this._changed) { - this._currentFov = this._computeCurrentFov(); - this._previousFov = this._computePreviousFov(); + this._currentFov = this._computeCurrentFov(this.zoom); + this._previousFov = this._computePreviousFov(this._zoom); } var alpha = state.alpha; if (this._changed || alpha !== this._alpha) { @@ -41253,7 +52161,10 @@ var RenderCamera = /** @class */ (function () { this._rotation = this._computeRotation(camera); this._perspective.up.copy(camera.up); this._perspective.position.copy(camera.position); + // Workaround for shaking camera + this._perspective.matrixAutoUpdate = true; this._perspective.lookAt(camera.lookat); + this._perspective.matrixAutoUpdate = false; this._perspective.updateMatrix(); this._perspective.updateMatrixWorld(false); this._changed = true; @@ -41278,59 +52189,40 @@ var RenderCamera = /** @class */ (function () { RenderCamera.prototype._computeAspect = function (elementWidth, elementHeight) { return elementWidth === 0 ? 0 : elementWidth / elementHeight; }; - RenderCamera.prototype._computeCurrentFov = function () { + RenderCamera.prototype._computeCurrentFov = function (zoom) { + if (this._perspective.aspect === 0) { + return 0; + } if (!this._currentNodeId) { return this._initialFov; } return this._currentPano ? - this._yToFov(1, this._zoom) : - this._computeVerticalFov(this._currentProjectedPoints, this._renderMode, this._zoom, this.perspective.aspect); + this._yToFov(1, zoom) : + this._computeVerticalFov(this._currentProjectedPoints, this._renderMode, zoom, this.perspective.aspect); }; RenderCamera.prototype._computeFov = function () { - this._currentFov = this._computeCurrentFov(); - this._previousFov = this._computePreviousFov(); + this._currentFov = this._computeCurrentFov(this._zoom); + this._previousFov = this._computePreviousFov(this._zoom); return this._interpolateFov(this._currentFov, this._previousFov, this._alpha); }; - RenderCamera.prototype._computePreviousFov = function () { + RenderCamera.prototype._computePreviousFov = function (zoom) { + if (this._perspective.aspect === 0) { + return 0; + } if (!this._currentNodeId) { return this._initialFov; } return !this._previousNodeId ? this._currentFov : this._previousPano ? - this._yToFov(1, this._zoom) : - this._computeVerticalFov(this._previousProjectedPoints, this._renderMode, this._zoom, this.perspective.aspect); + this._yToFov(1, zoom) : + this._computeVerticalFov(this._previousProjectedPoints, this._renderMode, zoom, this.perspective.aspect); }; RenderCamera.prototype._computeProjectedPoints = function (transform) { - var _this = this; - var os = [[0.5, 0], [1, 0]]; - var ds = [[0.5, 0], [0, 0.5]]; - var pointsPerSide = 100; - var basicPoints = []; - for (var side = 0; side < os.length; ++side) { - var o = os[side]; - var d = ds[side]; - for (var i = 0; i <= pointsPerSide; ++i) { - basicPoints.push([o[0] + d[0] * i / pointsPerSide, - o[1] + d[1] * i / pointsPerSide]); - } - } - var camera = new THREE.Camera(); - camera.up.copy(transform.upVector()); - camera.position.copy(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 0))); - camera.lookAt(new THREE.Vector3().fromArray(transform.unprojectSfM([0, 0], 10))); - camera.updateMatrix(); - camera.updateMatrixWorld(true); - var projectedPoints = basicPoints - .map(function (basicPoint) { - var worldPoint = transform.unprojectBasic(basicPoint, 10000); - var cameraPoint = _this._viewportCoords.worldToCamera(worldPoint, camera); - return [ - Math.abs(cameraPoint[0] / cameraPoint[2]), - Math.abs(cameraPoint[1] / cameraPoint[2]), - ]; - }); - return projectedPoints; + var vertices = [[0.5, 0], [1, 0]]; + var directions = [[0.5, 0], [0, 0.5]]; + var pointsPerLine = 100; + return Geo_1.Geo.computeProjectedPoints(transform, vertices, directions, pointsPerLine, this._viewportCoords); }; RenderCamera.prototype._computeRequiredVerticalFov = function (projectedPoint, zoom, aspect) { var maxY = Math.max(projectedPoint[0] / aspect, projectedPoint[1]); @@ -41339,9 +52231,7 @@ var RenderCamera = /** @class */ (function () { RenderCamera.prototype._computeRotation = function (camera) { var direction = camera.lookat.clone().sub(camera.position); var up = camera.up.clone(); - var upProjection = direction.clone().dot(up); - var planeProjection = direction.clone().sub(up.clone().multiplyScalar(upProjection)); - var phi = Math.atan2(planeProjection.y, planeProjection.x); + var phi = this._spatial.azimuthal(direction.toArray(), up.toArray()); var theta = Math.PI / 2 - this._spatial.angleToPlane(direction.toArray(), [0, 0, 1]); return { phi: phi, theta: theta }; }; @@ -41373,9 +52263,10 @@ var RenderCamera = /** @class */ (function () { exports.RenderCamera = RenderCamera; exports.default = RenderCamera; -},{"../Geo":277,"../Render":280,"../State":281,"three":225}],407:[function(require,module,exports){ +},{"../Geo":294,"../Render":297,"../State":298,"three":242}],444:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.RenderMode = void 0; /** * Enumeration for render mode * @enum {number} @@ -41409,9 +52300,10 @@ var RenderMode; })(RenderMode = exports.RenderMode || (exports.RenderMode = {})); exports.default = RenderMode; -},{}],408:[function(require,module,exports){ +},{}],445:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.RenderService = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var Geo_1 = require("../Geo"); @@ -41478,49 +52370,49 @@ var RenderService = /** @class */ (function () { get: function () { return this._bearing$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderService.prototype, "element", { get: function () { return this._element; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderService.prototype, "resize$", { get: function () { return this._resize$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderService.prototype, "size$", { get: function () { return this._size$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderService.prototype, "renderMode$", { get: function () { return this._renderMode$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderService.prototype, "renderCameraFrame$", { get: function () { return this._renderCameraFrame$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RenderService.prototype, "renderCamera$", { get: function () { return this._renderCamera$; }, - enumerable: true, + enumerable: false, configurable: true }); return RenderService; @@ -41529,9 +52421,14 @@ exports.RenderService = RenderService; exports.default = RenderService; -},{"../Geo":277,"../Render":280,"rxjs":26,"rxjs/operators":224}],409:[function(require,module,exports){ +},{"../Geo":294,"../Render":297,"rxjs":43,"rxjs/operators":241}],446:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],447:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FrameGenerator = void 0; var FrameGenerator = /** @class */ (function () { function FrameGenerator(root) { if (root.requestAnimationFrame) { @@ -41563,14 +52460,14 @@ var FrameGenerator = /** @class */ (function () { get: function () { return this._cancelAnimationFrame; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(FrameGenerator.prototype, "requestAnimationFrame", { get: function () { return this._requestAnimationFrame; }, - enumerable: true, + enumerable: false, configurable: true }); return FrameGenerator; @@ -41578,9 +52475,10 @@ var FrameGenerator = /** @class */ (function () { exports.FrameGenerator = FrameGenerator; exports.default = FrameGenerator; -},{}],410:[function(require,module,exports){ +},{}],448:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.RotationDelta = void 0; var RotationDelta = /** @class */ (function () { function RotationDelta(phi, theta) { this._phi = phi; @@ -41593,7 +52491,7 @@ var RotationDelta = /** @class */ (function () { set: function (value) { this._phi = value; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RotationDelta.prototype, "theta", { @@ -41603,14 +52501,14 @@ var RotationDelta = /** @class */ (function () { set: function (value) { this._theta = value; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(RotationDelta.prototype, "isZero", { get: function () { return this._phi === 0 && this._theta === 0; }, - enumerable: true, + enumerable: false, configurable: true }); RotationDelta.prototype.copy = function (delta) { @@ -41641,9 +52539,10 @@ var RotationDelta = /** @class */ (function () { exports.RotationDelta = RotationDelta; exports.default = RotationDelta; -},{}],411:[function(require,module,exports){ +},{}],449:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.State = void 0; var State; (function (State) { State[State["Earth"] = 0] = "Earth"; @@ -41653,9 +52552,10 @@ var State; })(State = exports.State || (exports.State = {})); exports.default = State; -},{}],412:[function(require,module,exports){ +},{}],450:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.StateContext = void 0; var State_1 = require("../State"); var Geo_1 = require("../Geo"); var StateContext = /** @class */ (function () { @@ -41670,18 +52570,6 @@ var StateContext = /** @class */ (function () { zoom: 0, }); } - StateContext.prototype.earth = function () { - this._state = this._state.earth(); - }; - StateContext.prototype.traverse = function () { - this._state = this._state.traverse(); - }; - StateContext.prototype.wait = function () { - this._state = this._state.wait(); - }; - StateContext.prototype.waitInteractively = function () { - this._state = this._state.waitInteractively(); - }; Object.defineProperty(StateContext.prototype, "state", { get: function () { if (this._state instanceof State_1.EarthState) { @@ -41698,107 +52586,119 @@ var StateContext = /** @class */ (function () { } throw new Error("Invalid state"); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "reference", { get: function () { return this._state.reference; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "alpha", { get: function () { return this._state.alpha; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "camera", { get: function () { return this._state.camera; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "zoom", { get: function () { return this._state.zoom; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "currentNode", { get: function () { return this._state.currentNode; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "previousNode", { get: function () { return this._state.previousNode; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "currentCamera", { get: function () { return this._state.currentCamera; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "currentTransform", { get: function () { return this._state.currentTransform; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "previousTransform", { get: function () { return this._state.previousTransform; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "trajectory", { get: function () { return this._state.trajectory; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "currentIndex", { get: function () { return this._state.currentIndex; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "lastNode", { get: function () { return this._state.trajectory[this._state.trajectory.length - 1]; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "nodesAhead", { get: function () { return this._state.trajectory.length - 1 - this._state.currentIndex; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateContext.prototype, "motionless", { get: function () { return this._state.motionless; }, - enumerable: true, + enumerable: false, configurable: true }); + StateContext.prototype.earth = function () { + this._state = this._state.earth(); + }; + StateContext.prototype.traverse = function () { + this._state = this._state.traverse(); + }; + StateContext.prototype.wait = function () { + this._state = this._state.wait(); + }; + StateContext.prototype.waitInteractively = function () { + this._state = this._state.waitInteractively(); + }; StateContext.prototype.getCenter = function () { return this._state.getCenter(); }; @@ -41881,9 +52781,10 @@ var StateContext = /** @class */ (function () { }()); exports.StateContext = StateContext; -},{"../Geo":277,"../State":281}],413:[function(require,module,exports){ +},{"../Geo":294,"../State":298}],451:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.StateService = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var State_1 = require("../State"); @@ -42017,77 +52918,77 @@ var StateService = /** @class */ (function () { get: function () { return this._currentState$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "currentNode$", { get: function () { return this._currentNode$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "currentKey$", { get: function () { return this._currentKey$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "currentNodeExternal$", { get: function () { return this._currentNodeExternal$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "currentCamera$", { get: function () { return this._currentCamera$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "currentTransform$", { get: function () { return this._currentTransform$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "state$", { get: function () { return this._state$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "reference$", { get: function () { return this._reference$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "inMotion$", { get: function () { return this._inMotion$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "inTranslation$", { get: function () { return this._inTranslation$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateService.prototype, "appendNode$", { get: function () { return this._appendNode$; }, - enumerable: true, + enumerable: false, configurable: true }); StateService.prototype.earth = function () { @@ -42235,9 +53136,10 @@ var StateService = /** @class */ (function () { }()); exports.StateService = StateService; -},{"../State":281,"rxjs":26,"rxjs/operators":224}],414:[function(require,module,exports){ +},{"../State":298,"rxjs":43,"rxjs/operators":241}],452:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TransitionMode = void 0; /** * Enumeration for transition mode * @enum {number} @@ -42266,7 +53168,11 @@ var TransitionMode; })(TransitionMode = exports.TransitionMode || (exports.TransitionMode = {})); exports.default = TransitionMode; -},{}],415:[function(require,module,exports){ +},{}],453:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],454:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -42274,7 +53180,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -42282,6 +53188,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.EarthState = void 0; var THREE = require("three"); var State_1 = require("../../State"); var EarthState = /** @class */ (function (_super) { @@ -42350,7 +53257,7 @@ exports.EarthState = EarthState; exports.default = EarthState; -},{"../../State":281,"three":225}],416:[function(require,module,exports){ +},{"../../State":298,"three":242}],455:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -42358,7 +53265,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -42366,6 +53273,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.InteractiveStateBase = void 0; var THREE = require("three"); var State_1 = require("../../State"); var InteractiveStateBase = /** @class */ (function (_super) { @@ -42395,6 +53303,9 @@ var InteractiveStateBase = /** @class */ (function (_super) { if (this._currentNode == null) { return; } + if (rotationDelta.phi === 0 && rotationDelta.theta === 0) { + return; + } this._desiredZoom = this._zoom; this._desiredLookat = null; this._requestedBasicRotation = null; @@ -42693,7 +53604,8 @@ var InteractiveStateBase = /** @class */ (function (_super) { if (this._rotationDelta.isZero) { return; } - this._rotationDelta.multiply(this._rotationAcceleration); + var alpha = this.currentNode.fullPano ? 1 : this._alpha; + this._rotationDelta.multiply(this._rotationAcceleration * alpha); this._rotationDelta.threshold(this._rotationThreshold); }; InteractiveStateBase.prototype._updateRotationBasic = function () { @@ -42784,7 +53696,7 @@ exports.InteractiveStateBase = InteractiveStateBase; exports.default = InteractiveStateBase; -},{"../../State":281,"three":225}],417:[function(require,module,exports){ +},{"../../State":298,"three":242}],456:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -42792,7 +53704,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -42800,6 +53712,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.InteractiveWaitingState = void 0; var State_1 = require("../../State"); var InteractiveWaitingState = /** @class */ (function (_super) { __extends(InteractiveWaitingState, _super); @@ -42869,9 +53782,10 @@ var InteractiveWaitingState = /** @class */ (function (_super) { exports.InteractiveWaitingState = InteractiveWaitingState; exports.default = InteractiveWaitingState; -},{"../../State":281}],418:[function(require,module,exports){ +},{"../../State":298}],457:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.StateBase = void 0; var Error_1 = require("../../Error"); var Geo_1 = require("../../Geo"); var State_1 = require("../../State"); @@ -42892,7 +53806,7 @@ var StateBase = /** @class */ (function () { for (var _i = 0, _a = this._trajectory; _i < _a.length; _i++) { var node = _a[_i]; var translation = this._nodeToTranslation(node, this._reference); - var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2); + var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection); this._trajectoryTransforms.push(transform); this._trajectoryCameras.push(new Geo_1.Camera(transform)); } @@ -42913,63 +53827,63 @@ var StateBase = /** @class */ (function () { get: function () { return this._reference; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "alpha", { get: function () { return this._getAlpha(); }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "camera", { get: function () { return this._camera; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "zoom", { get: function () { return this._zoom; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "trajectory", { get: function () { return this._trajectory; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "currentIndex", { get: function () { return this._currentIndex; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "currentNode", { get: function () { return this._currentNode; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "previousNode", { get: function () { return this._previousNode; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "currentCamera", { get: function () { return this._currentCamera; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "currentTransform", { @@ -42977,7 +53891,7 @@ var StateBase = /** @class */ (function () { return this._trajectoryTransforms.length > 0 ? this._trajectoryTransforms[this.currentIndex] : null; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "previousTransform", { @@ -42985,21 +53899,21 @@ var StateBase = /** @class */ (function () { return this._trajectoryTransforms.length > 1 && this.currentIndex > 0 ? this._trajectoryTransforms[this.currentIndex - 1] : null; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "motionless", { get: function () { return this._motionless; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(StateBase.prototype, "transitionMode", { get: function () { return this._transitionMode; }, - enumerable: true, + enumerable: false, configurable: true }); StateBase.prototype.earth = function () { throw new Error("Not implemented"); }; @@ -43169,7 +54083,7 @@ var StateBase = /** @class */ (function () { throw new Error_1.ArgumentMapillaryError("Assets must be cached when node is added to trajectory"); } var translation = this._nodeToTranslation(node, this.reference); - var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2); + var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection); this._trajectoryTransforms.push(transform); this._trajectoryCameras.push(new Geo_1.Camera(transform)); } @@ -43181,7 +54095,7 @@ var StateBase = /** @class */ (function () { throw new Error_1.ArgumentMapillaryError("Assets must be cached when added to trajectory"); } var translation = this._nodeToTranslation(node, this.reference); - var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2); + var transform = new Geo_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.image, undefined, node.ck1, node.ck2, node.cameraProjection); this._trajectoryTransforms.unshift(transform); this._trajectoryCameras.unshift(new Geo_1.Camera(transform)); } @@ -43209,7 +54123,7 @@ var StateBase = /** @class */ (function () { }()); exports.StateBase = StateBase; -},{"../../Error":276,"../../Geo":277,"../../State":281}],419:[function(require,module,exports){ +},{"../../Error":293,"../../Geo":294,"../../State":298}],458:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -43217,7 +54131,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -43225,6 +54139,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.TraversingState = void 0; var UnitBezier = require("@mapbox/unitbezier"); var State_1 = require("../../State"); var TraversingState = /** @class */ (function (_super) { @@ -43343,7 +54258,7 @@ var TraversingState = /** @class */ (function (_super) { exports.TraversingState = TraversingState; exports.default = TraversingState; -},{"../../State":281,"@mapbox/unitbezier":2}],420:[function(require,module,exports){ +},{"../../State":298,"@mapbox/unitbezier":2}],459:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -43351,7 +54266,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -43359,6 +54274,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.WaitingState = void 0; var State_1 = require("../../State"); var WaitingState = /** @class */ (function (_super) { __extends(WaitingState, _super); @@ -43417,9 +54333,10 @@ var WaitingState = /** @class */ (function (_super) { exports.WaitingState = WaitingState; exports.default = WaitingState; -},{"../../State":281}],421:[function(require,module,exports){ +},{"../../State":298}],460:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageTileLoader = void 0; var rxjs_1 = require("rxjs"); /** * @class ImageTileLoader @@ -43509,9 +54426,10 @@ var ImageTileLoader = /** @class */ (function () { exports.ImageTileLoader = ImageTileLoader; exports.default = ImageTileLoader; -},{"rxjs":26}],422:[function(require,module,exports){ +},{"rxjs":43}],461:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageTileStore = void 0; /** * @class ImageTileStore * @@ -43577,9 +54495,10 @@ var ImageTileStore = /** @class */ (function () { exports.ImageTileStore = ImageTileStore; exports.default = ImageTileStore; -},{}],423:[function(require,module,exports){ +},{}],462:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.RegionOfInterestCalculator = void 0; var Geo_1 = require("../Geo"); /** * @class RegionOfInterestCalculator @@ -43717,9 +54636,10 @@ var RegionOfInterestCalculator = /** @class */ (function () { exports.RegionOfInterestCalculator = RegionOfInterestCalculator; exports.default = RegionOfInterestCalculator; -},{"../Geo":277}],424:[function(require,module,exports){ +},{"../Geo":294}],463:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TextureProvider = void 0; var operators_1 = require("rxjs/operators"); var THREE = require("three"); var rxjs_1 = require("rxjs"); @@ -43781,7 +54701,7 @@ var TextureProvider = /** @class */ (function () { get: function () { return this._disposed; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TextureProvider.prototype, "hasTexture$", { @@ -43795,7 +54715,7 @@ var TextureProvider = /** @class */ (function () { get: function () { return this._has$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TextureProvider.prototype, "key", { @@ -43808,7 +54728,7 @@ var TextureProvider = /** @class */ (function () { get: function () { return this._key; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TextureProvider.prototype, "textureUpdated$", { @@ -43821,7 +54741,7 @@ var TextureProvider = /** @class */ (function () { get: function () { return this._updated$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TextureProvider.prototype, "textureCreated$", { @@ -43834,7 +54754,7 @@ var TextureProvider = /** @class */ (function () { get: function () { return this._created$; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -44116,8 +55036,10 @@ var TextureProvider = /** @class */ (function () { mesh.position.y = this._height / 2 - y - h / 2; var scene = new THREE.Scene(); scene.add(mesh); - this._renderer.render(scene, this._camera, this._renderTarget); - this._renderer.setRenderTarget(undefined); + var target = this._renderer.getRenderTarget(); + this._renderer.setRenderTarget(this._renderTarget); + this._renderer.render(scene, this._camera); + this._renderer.setRenderTarget(target); scene.remove(mesh); geometry.dispose(); material.dispose(); @@ -44193,9 +55115,14 @@ var TextureProvider = /** @class */ (function () { exports.TextureProvider = TextureProvider; exports.default = TextureProvider; -},{"rxjs":26,"rxjs/operators":224,"three":225}],425:[function(require,module,exports){ +},{"rxjs":43,"rxjs/operators":241,"three":242}],464:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); + +},{}],465:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DOM = void 0; var DOM = /** @class */ (function () { function DOM(doc) { this._document = !!doc ? doc : document; @@ -44204,7 +55131,7 @@ var DOM = /** @class */ (function () { get: function () { return this._document; }, - enumerable: true, + enumerable: false, configurable: true }); DOM.prototype.createElement = function (tagName, className, container) { @@ -44222,9 +55149,10 @@ var DOM = /** @class */ (function () { exports.DOM = DOM; exports.default = DOM; -},{}],426:[function(require,module,exports){ +},{}],466:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.EventEmitter = void 0; var EventEmitter = /** @class */ (function () { function EventEmitter() { this._events = {}; @@ -44281,53 +55209,55 @@ var EventEmitter = /** @class */ (function () { exports.EventEmitter = EventEmitter; exports.default = EventEmitter; -},{}],427:[function(require,module,exports){ +},{}],467:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Settings = void 0; var Viewer_1 = require("../Viewer"); var Settings = /** @class */ (function () { function Settings() { } - Settings.setOptions = function (options) { - Settings._baseImageSize = options.baseImageSize != null ? - options.baseImageSize : - Viewer_1.ImageSize.Size640; - Settings._basePanoramaSize = options.basePanoramaSize != null ? - options.basePanoramaSize : - Viewer_1.ImageSize.Size2048; - Settings._maxImageSize = options.maxImageSize != null ? - options.maxImageSize : - Viewer_1.ImageSize.Size2048; - }; Object.defineProperty(Settings, "baseImageSize", { get: function () { return Settings._baseImageSize; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Settings, "basePanoramaSize", { get: function () { return Settings._basePanoramaSize; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Settings, "maxImageSize", { get: function () { return Settings._maxImageSize; }, - enumerable: true, + enumerable: false, configurable: true }); + Settings.setOptions = function (options) { + Settings._baseImageSize = options.baseImageSize != null ? + options.baseImageSize : + Viewer_1.ImageSize.Size640; + Settings._basePanoramaSize = options.basePanoramaSize != null ? + options.basePanoramaSize : + Viewer_1.ImageSize.Size2048; + Settings._maxImageSize = options.maxImageSize != null ? + options.maxImageSize : + Viewer_1.ImageSize.Size2048; + }; return Settings; }()); exports.Settings = Settings; exports.default = Settings; -},{"../Viewer":285}],428:[function(require,module,exports){ +},{"../Viewer":302}],468:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.isWebGLSupported = exports.isWebGLSupportedCached = exports.isBlobSupported = exports.isObjectSupported = exports.isJSONSupported = exports.isFunctionSupported = exports.isArraySupported = exports.isBrowser = void 0; function isBrowser() { return typeof window !== "undefined" && typeof document !== "undefined"; } @@ -44395,9 +55325,10 @@ function isWebGLSupported() { } exports.isWebGLSupported = isWebGLSupported; -},{}],429:[function(require,module,exports){ +},{}],469:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Urls = void 0; var Urls = /** @class */ (function () { function Urls() { } @@ -44405,32 +55336,32 @@ var Urls = /** @class */ (function () { get: function () { return Urls._scheme + "://" + Urls._exploreHost; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Urls, "origin", { get: function () { return Urls._origin; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Urls, "tileScheme", { get: function () { return Urls._scheme; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Urls, "tileDomain", { get: function () { return Urls._imageTileHost; }, - enumerable: true, + enumerable: false, configurable: true }); - Urls.atomicReconstruction = function (key) { - return Urls._scheme + "://" + Urls._atomicReconstructionHost + "/" + key + "/sfm/v1.0/atomic_reconstruction.json"; + Urls.clusterReconstruction = function (key) { + return Urls._scheme + "://" + Urls._clusterReconstructionHost + "/" + key + "/v1.0/aligned.jsonz"; }; Urls.exporeImage = function (key) { return Urls._scheme + "://" + Urls._exploreHost + "/app/?pKey=" + key + "&focus=photo"; @@ -44455,8 +55386,8 @@ var Urls = /** @class */ (function () { if (!!options.apiHost) { Urls._apiHost = options.apiHost; } - if (!!options.atomicReconstructionHost) { - Urls._atomicReconstructionHost = options.atomicReconstructionHost; + if (!!options.clusterReconstructionHost) { + Urls._clusterReconstructionHost = options.clusterReconstructionHost; } if (!!options.exploreHost) { Urls._exploreHost = options.exploreHost; @@ -44475,11 +55406,11 @@ var Urls = /** @class */ (function () { } }; Urls._apiHost = "a.mapillary.com"; - Urls._atomicReconstructionHost = "d3necqxnn15whe.cloudfront.net"; + Urls._clusterReconstructionHost = "cluster-reconstructions.mapillary.com"; Urls._exploreHost = "www.mapillary.com"; - Urls._imageHost = "d1cuyjsrcm0gby.cloudfront.net"; - Urls._imageTileHost = "d2qb1440i7l50o.cloudfront.net"; - Urls._meshHost = "d1brzeo354iq2l.cloudfront.net"; + Urls._imageHost = "images.mapillary.com"; + Urls._imageTileHost = "loris.mapillary.com"; + Urls._meshHost = "meshes.mapillary.com"; Urls._origin = "mapillary.webgl"; Urls._scheme = "https"; return Urls; @@ -44487,9 +55418,10 @@ var Urls = /** @class */ (function () { exports.Urls = Urls; exports.default = Urls; -},{}],430:[function(require,module,exports){ +},{}],470:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Alignment = void 0; /** * Enumeration for alignments * @enum {number} @@ -44536,9 +55468,10 @@ var Alignment; })(Alignment = exports.Alignment || (exports.Alignment = {})); exports.default = Alignment; -},{}],431:[function(require,module,exports){ +},{}],471:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.CacheService = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Graph_1 = require("../Graph"); @@ -44552,7 +55485,7 @@ var CacheService = /** @class */ (function () { get: function () { return this._started; }, - enumerable: true, + enumerable: false, configurable: true }); CacheService.prototype.start = function () { @@ -44620,9 +55553,10 @@ var CacheService = /** @class */ (function () { exports.CacheService = CacheService; exports.default = CacheService; -},{"../Graph":278,"rxjs":26,"rxjs/operators":224}],432:[function(require,module,exports){ +},{"../Graph":295,"rxjs":43,"rxjs/operators":241}],472:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ComponentController = void 0; var operators_1 = require("rxjs/operators"); var Component_1 = require("../Component"); var ComponentController = /** @class */ (function () { @@ -44654,6 +55588,7 @@ var ComponentController = /** @class */ (function () { _this._subscribeCoverComponent(); _this._navigator.stateService.start(); _this._navigator.cacheService.start(); + _this._navigator.panService.start(); _this._observer.startEmit(); }); } @@ -44662,7 +55597,7 @@ var ComponentController = /** @class */ (function () { get: function () { return this._navigable; }, - enumerable: true, + enumerable: false, configurable: true }); ComponentController.prototype.get = function (name) { @@ -44680,9 +55615,6 @@ var ComponentController = /** @class */ (function () { ComponentController.prototype.deactivateCover = function () { this._coverComponent.configure({ state: Component_1.CoverState.Loading }); }; - ComponentController.prototype.resize = function () { - this._componentService.resize(); - }; ComponentController.prototype._initializeComponents = function () { var options = this._options; this._uFalse(options.background, "background"); @@ -44743,6 +55675,7 @@ var ComponentController = /** @class */ (function () { .subscribe(function () { _this._navigator.stateService.start(); _this._navigator.cacheService.start(); + _this._navigator.panService.start(); _this._observer.startEmit(); _this._coverComponent.configure({ state: Component_1.CoverState.Hidden }); _this._componentService.deactivateCover(); @@ -44757,6 +55690,7 @@ var ComponentController = /** @class */ (function () { _this._navigator.stateService.stop(); _this._navigator.cacheService.stop(); _this._navigator.playService.stop(); + _this._navigator.panService.stop(); _this._componentService.activateCover(); _this._setNavigable(conf.key == null); } @@ -44800,20 +55734,29 @@ var ComponentController = /** @class */ (function () { }()); exports.ComponentController = ComponentController; -},{"../Component":274,"rxjs/operators":224}],433:[function(require,module,exports){ +},{"../Component":291,"rxjs/operators":241}],473:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Container = void 0; var Render_1 = require("../Render"); var Utils_1 = require("../Utils"); var Viewer_1 = require("../Viewer"); var Container = /** @class */ (function () { - function Container(id, stateService, options, dom) { - this.id = id; + function Container(container, stateService, options, dom) { this._dom = !!dom ? dom : new Utils_1.DOM(); - this._container = this._dom.document.getElementById(id); - if (!this._container) { - throw new Error("Container '" + id + "' not found."); + if (typeof container === 'string') { + this._container = this._dom.document.getElementById(container); + if (!this._container) { + throw new Error("Container '" + container + "' not found."); + } + } + else if (container instanceof HTMLElement) { + this._container = container; } + else { + throw new Error("Invalid type: 'container' must be a String or HTMLElement."); + } + this.id = !!this._container.id ? this._container.id : "mapillary-js-fallback-container-id"; this._container.classList.add("mapillary-js"); this._canvasContainer = this._dom.createElement("div", "mapillary-js-interactive", this._container); this._domContainer = this._dom.createElement("div", "mapillary-js-dom", this._container); @@ -44829,21 +55772,21 @@ var Container = /** @class */ (function () { get: function () { return this._container; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Container.prototype, "canvasContainer", { get: function () { return this._canvasContainer; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Container.prototype, "domContainer", { get: function () { return this._domContainer; }, - enumerable: true, + enumerable: false, configurable: true }); return Container; @@ -44851,9 +55794,10 @@ var Container = /** @class */ (function () { exports.Container = Container; exports.default = Container; -},{"../Render":280,"../Utils":284,"../Viewer":285}],434:[function(require,module,exports){ +},{"../Render":297,"../Utils":301,"../Viewer":302}],474:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.ImageSize = void 0; /** * Enumeration for image sizes * @enum {number} @@ -44880,9 +55824,10 @@ var ImageSize; ImageSize[ImageSize["Size2048"] = 2048] = "Size2048"; })(ImageSize = exports.ImageSize || (exports.ImageSize = {})); -},{}],435:[function(require,module,exports){ +},{}],475:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.KeyboardService = void 0; var rxjs_1 = require("rxjs"); var KeyboardService = /** @class */ (function () { function KeyboardService(canvasContainer) { @@ -44893,14 +55838,14 @@ var KeyboardService = /** @class */ (function () { get: function () { return this._keyDown$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(KeyboardService.prototype, "keyUp$", { get: function () { return this._keyUp$; }, - enumerable: true, + enumerable: false, configurable: true }); return KeyboardService; @@ -44908,9 +55853,10 @@ var KeyboardService = /** @class */ (function () { exports.KeyboardService = KeyboardService; exports.default = KeyboardService; -},{"rxjs":26}],436:[function(require,module,exports){ +},{"rxjs":43}],476:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoadingService = void 0; var operators_1 = require("rxjs/operators"); var rxjs_1 = require("rxjs"); var LoadingService = /** @class */ (function () { @@ -44937,7 +55883,7 @@ var LoadingService = /** @class */ (function () { return false; }), operators_1.debounceTime(100), operators_1.distinctUntilChanged()); }, - enumerable: true, + enumerable: false, configurable: true }); LoadingService.prototype.taskLoading$ = function (task) { @@ -44956,16 +55902,15 @@ var LoadingService = /** @class */ (function () { exports.LoadingService = LoadingService; exports.default = LoadingService; -},{"rxjs":26,"rxjs/operators":224}],437:[function(require,module,exports){ +},{"rxjs":43,"rxjs/operators":241}],477:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.MouseService = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); -var Geo_1 = require("../Geo"); var MouseService = /** @class */ (function () { - function MouseService(container, canvasContainer, domContainer, doc, viewportCoords) { + function MouseService(container, canvasContainer, domContainer, doc) { var _this = this; - viewportCoords = viewportCoords != null ? viewportCoords : new Geo_1.ViewportCoords(); this._activeSubject$ = new rxjs_1.BehaviorSubject(false); this._active$ = this._activeSubject$.pipe(operators_1.distinctUntilChanged(), operators_1.publishReplay(1), operators_1.refCount()); this._claimMouse$ = new rxjs_1.Subject(); @@ -45063,175 +56008,175 @@ var MouseService = /** @class */ (function () { get: function () { return this._active$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "activate$", { get: function () { return this._activeSubject$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "documentMouseMove$", { get: function () { return this._documentMouseMove$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "documentMouseUp$", { get: function () { return this._documentMouseUp$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "domMouseDragStart$", { get: function () { return this._domMouseDragStart$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "domMouseDrag$", { get: function () { return this._domMouseDrag$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "domMouseDragEnd$", { get: function () { return this._domMouseDragEnd$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "domMouseDown$", { get: function () { return this._domMouseDown$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "domMouseMove$", { get: function () { return this._domMouseMove$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseOwner$", { get: function () { return this._mouseOwner$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseDown$", { get: function () { return this._mouseDown$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseMove$", { get: function () { return this._mouseMove$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseLeave$", { get: function () { return this._mouseLeave$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseOut$", { get: function () { return this._mouseOut$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseOver$", { get: function () { return this._mouseOver$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseUp$", { get: function () { return this._mouseUp$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "click$", { get: function () { return this._click$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "dblClick$", { get: function () { return this._dblClick$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "contextMenu$", { get: function () { return this._consistentContextMenu$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseWheel$", { get: function () { return this._mouseWheel$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseDragStart$", { get: function () { return this._mouseDragStart$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseDrag$", { get: function () { return this._mouseDrag$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "mouseDragEnd$", { get: function () { return this._mouseDragEnd$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "proximateClick$", { get: function () { return this._proximateClick$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(MouseService.prototype, "staticClick$", { get: function () { return this._staticClick$; }, - enumerable: true, + enumerable: false, configurable: true }); MouseService.prototype.claimMouse = function (name, zindex) { @@ -45339,9 +56284,10 @@ var MouseService = /** @class */ (function () { exports.MouseService = MouseService; exports.default = MouseService; -},{"../Geo":277,"rxjs":26,"rxjs/operators":224}],438:[function(require,module,exports){ +},{"rxjs":43,"rxjs/operators":241}],478:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Navigator = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var API_1 = require("../API"); @@ -45350,8 +56296,9 @@ var Edge_1 = require("../Edge"); var Error_1 = require("../Error"); var State_1 = require("../State"); var Viewer_1 = require("../Viewer"); +var PanService_1 = require("./PanService"); var Navigator = /** @class */ (function () { - function Navigator(clientId, options, token, apiV3, graphService, imageLoadingService, loadingService, stateService, cacheService, playService) { + function Navigator(clientId, options, token, apiV3, graphService, imageLoadingService, loadingService, stateService, cacheService, playService, panService) { this._apiV3 = apiV3 != null ? apiV3 : new API_1.APIv3(clientId, token); this._imageLoadingService = imageLoadingService != null ? imageLoadingService : new Graph_1.ImageLoadingService(); this._graphService = graphService != null ? @@ -45366,6 +56313,9 @@ var Navigator = /** @class */ (function () { this._playService = playService != null ? playService : new Viewer_1.PlayService(this._graphService, this._stateService); + this._panService = panService != null ? + panService : + new PanService_1.PanService(this._graphService, this._stateService, options.combinedPanning); this._keyRequested$ = new rxjs_1.BehaviorSubject(null); this._movedToKey$ = new rxjs_1.BehaviorSubject(null); this._request$ = null; @@ -45376,56 +56326,63 @@ var Navigator = /** @class */ (function () { get: function () { return this._apiV3; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Navigator.prototype, "cacheService", { get: function () { return this._cacheService; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Navigator.prototype, "graphService", { get: function () { return this._graphService; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Navigator.prototype, "imageLoadingService", { get: function () { return this._imageLoadingService; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Navigator.prototype, "loadingService", { get: function () { return this._loadingService; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Navigator.prototype, "movedToKey$", { get: function () { return this._movedToKey$; }, - enumerable: true, + enumerable: false, + configurable: true + }); + Object.defineProperty(Navigator.prototype, "panService", { + get: function () { + return this._panService; + }, + enumerable: false, configurable: true }); Object.defineProperty(Navigator.prototype, "playService", { get: function () { return this._playService; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Navigator.prototype, "stateService", { get: function () { return this._stateService; }, - enumerable: true, + enumerable: false, configurable: true }); Navigator.prototype.moveToKey$ = function (key) { @@ -45579,9 +56536,10 @@ var Navigator = /** @class */ (function () { exports.Navigator = Navigator; exports.default = Navigator; -},{"../API":273,"../Edge":275,"../Error":276,"../Graph":278,"../State":281,"../Viewer":285,"rxjs":26,"rxjs/operators":224}],439:[function(require,module,exports){ +},{"../API":290,"../Edge":292,"../Error":293,"../Graph":295,"../State":298,"../Viewer":302,"./PanService":480,"rxjs":43,"rxjs/operators":241}],479:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Observer = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Viewer_1 = require("../Viewer"); @@ -45608,22 +56566,44 @@ var Observer = /** @class */ (function () { get: function () { return this._started; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(Observer.prototype, "navigable$", { get: function () { return this._navigable$; }, - enumerable: true, + enumerable: false, configurable: true }); + Object.defineProperty(Observer.prototype, "projection", { + get: function () { + return this._projection; + }, + enumerable: false, + configurable: true + }); + Observer.prototype.project$ = function (latLon) { + var _this = this; + return rxjs_1.combineLatest(this._container.renderService.renderCamera$, this._navigator.stateService.currentNode$, this._navigator.stateService.reference$).pipe(operators_1.first(), operators_1.map(function (_a) { + var render = _a[0], node = _a[1], reference = _a[2]; + if (_this._projection.distanceBetweenLatLons(latLon, node.latLon) > 1000) { + return null; + } + var canvasPoint = _this._projection.latLonToCanvas(latLon, _this._container.element, render, reference); + return !!canvasPoint ? + [Math.round(canvasPoint[0]), Math.round(canvasPoint[1])] : + null; + })); + }; Observer.prototype.projectBasic$ = function (basicPoint) { var _this = this; return rxjs_1.combineLatest(this._container.renderService.renderCamera$, this._navigator.stateService.currentTransform$).pipe(operators_1.first(), operators_1.map(function (_a) { var render = _a[0], transform = _a[1]; var canvasPoint = _this._projection.basicToCanvas(basicPoint, _this._container.element, render, transform); - return [Math.round(canvasPoint[0]), Math.round(canvasPoint[1])]; + return !!canvasPoint ? + [Math.round(canvasPoint[0]), Math.round(canvasPoint[1])] : + null; })); }; Observer.prototype.startEmit = function () { @@ -45685,6 +56665,45 @@ var Observer = /** @class */ (function () { .subscribe(function (event) { _this._eventEmitter.fire(event.type, event); }); + this._positionSubscription = this._container.renderService.renderCamera$.pipe(operators_1.distinctUntilChanged(function (_a, _b) { + var x1 = _a[0], y1 = _a[1]; + var x2 = _b[0], y2 = _b[1]; + return _this._closeTo(x1, x2, 1e-2) && + _this._closeTo(y1, y2, 1e-2); + }, function (rc) { + return rc.camera.position.toArray(); + })) + .subscribe(function () { + _this._eventEmitter.fire(Viewer_1.Viewer.positionchanged, { + target: _this._eventEmitter, + type: Viewer_1.Viewer.positionchanged, + }); + }); + this._povSubscription = this._container.renderService.renderCamera$.pipe(operators_1.distinctUntilChanged(function (_a, _b) { + var phi1 = _a[0], theta1 = _a[1]; + var phi2 = _b[0], theta2 = _b[1]; + return _this._closeTo(phi1, phi2, 1e-3) && + _this._closeTo(theta1, theta2, 1e-3); + }, function (rc) { + return [rc.rotation.phi, rc.rotation.theta]; + })) + .subscribe(function () { + _this._eventEmitter.fire(Viewer_1.Viewer.povchanged, { + target: _this._eventEmitter, + type: Viewer_1.Viewer.povchanged, + }); + }); + this._fovSubscription = this._container.renderService.renderCamera$.pipe(operators_1.distinctUntilChanged(function (fov1, fov2) { + return _this._closeTo(fov1, fov2, 1e-2); + }, function (rc) { + return rc.perspective.fov; + })) + .subscribe(function () { + _this._eventEmitter.fire(Viewer_1.Viewer.fovchanged, { + target: _this._eventEmitter, + type: Viewer_1.Viewer.fovchanged, + }); + }); }; Observer.prototype.stopEmit = function () { if (!this.started) { @@ -45693,13 +56712,19 @@ var Observer = /** @class */ (function () { this._started = false; this._bearingSubscription.unsubscribe(); this._currentNodeSubscription.unsubscribe(); + this._fovSubscription.unsubscribe(); this._moveSubscription.unsubscribe(); + this._positionSubscription.unsubscribe(); + this._povSubscription.unsubscribe(); this._sequenceEdgesSubscription.unsubscribe(); this._spatialEdgesSubscription.unsubscribe(); this._viewerMouseEventSubscription.unsubscribe(); this._bearingSubscription = null; this._currentNodeSubscription = null; + this._fovSubscription = null; this._moveSubscription = null; + this._positionSubscription = null; + this._povSubscription = null; this._sequenceEdgesSubscription = null; this._spatialEdgesSubscription = null; this._viewerMouseEventSubscription = null; @@ -45719,6 +56744,9 @@ var Observer = /** @class */ (function () { return _this._projection.canvasToBasic(canvasPoint, _this._container.element, render, transform); })); }; + Observer.prototype._closeTo = function (v1, v2, absoluteTolerance) { + return Math.abs(v1 - v2) <= absoluteTolerance; + }; Observer.prototype._mapMouseEvent$ = function (type, mouseEvent$) { return mouseEvent$.pipe(operators_1.map(function (event) { return [type, event]; @@ -45729,9 +56757,230 @@ var Observer = /** @class */ (function () { exports.Observer = Observer; exports.default = Observer; -},{"../Viewer":285,"rxjs":26,"rxjs/operators":224}],440:[function(require,module,exports){ +},{"../Viewer":302,"rxjs":43,"rxjs/operators":241}],480:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.PanService = void 0; +var rxjs_1 = require("rxjs"); +var operators_1 = require("rxjs/operators"); +var Geo = require("../geo/Geo"); +var GeoCoords_1 = require("../geo/GeoCoords"); +var GraphCalculator_1 = require("../graph/GraphCalculator"); +var Spatial_1 = require("../geo/Spatial"); +var Transform_1 = require("../geo/Transform"); +var ViewportCoords_1 = require("../geo/ViewportCoords"); +var PanMode; +(function (PanMode) { + PanMode[PanMode["Disabled"] = 0] = "Disabled"; + PanMode[PanMode["Enabled"] = 1] = "Enabled"; + PanMode[PanMode["Started"] = 2] = "Started"; +})(PanMode || (PanMode = {})); +var PanService = /** @class */ (function () { + function PanService(graphService, stateService, enabled, geoCoords, graphCalculator, spatial, viewportCoords) { + this._graphService = graphService; + this._stateService = stateService; + this._geoCoords = !!geoCoords ? geoCoords : new GeoCoords_1.default(); + this._graphCalculator = !!graphCalculator ? graphCalculator : new GraphCalculator_1.default(this._geoCoords); + this._spatial = !!spatial ? spatial : new Spatial_1.default(); + this._viewportCoords = !!viewportCoords ? viewportCoords : new ViewportCoords_1.default(); + this._mode = enabled !== false ? PanMode.Enabled : PanMode.Disabled; + this._panNodesSubject$ = new rxjs_1.Subject(); + this._panNodes$ = this._panNodesSubject$.pipe(operators_1.startWith([]), operators_1.publishReplay(1), operators_1.refCount()); + this._panNodes$.subscribe(); + } + Object.defineProperty(PanService.prototype, "panNodes$", { + get: function () { + return this._panNodes$; + }, + enumerable: false, + configurable: true + }); + PanService.prototype.enable = function () { + if (this._mode !== PanMode.Disabled) { + return; + } + this._mode = PanMode.Enabled; + this.start(); + }; + PanService.prototype.disable = function () { + if (this._mode === PanMode.Disabled) { + return; + } + this.stop(); + this._mode = PanMode.Disabled; + }; + PanService.prototype.start = function () { + var _this = this; + if (this._mode !== PanMode.Enabled) { + return; + } + var panNodes$ = this._stateService.currentNode$.pipe(operators_1.switchMap(function (current) { + if (!current.merged) { + return rxjs_1.of([]); + } + var current$ = rxjs_1.of(current); + var bounds = _this._graphCalculator.boundingBoxCorners(current.latLon, 20); + var adjacent$ = _this._graphService + .cacheBoundingBox$(bounds[0], bounds[1]).pipe(operators_1.catchError(function (error) { + console.error("Failed to cache periphery bounding box (" + current.key + ")", error); + return rxjs_1.empty(); + }), operators_1.map(function (nodes) { + if (current.pano) { + return []; + } + var potential = []; + for (var _i = 0, nodes_1 = nodes; _i < nodes_1.length; _i++) { + var node = nodes_1[_i]; + if (node.key === current.key) { + continue; + } + if (node.mergeCC !== current.mergeCC) { + continue; + } + if (node.pano) { + continue; + } + if (_this._distance(node, current) > 4) { + continue; + } + potential.push(node); + } + return potential; + })); + return rxjs_1.combineLatest(current$, adjacent$).pipe(operators_1.withLatestFrom(_this._stateService.reference$), operators_1.map(function (_a) { + var _b = _a[0], cn = _b[0], adjacent = _b[1], reference = _a[1]; + var currentDirection = _this._spatial.viewingDirection(cn.rotation); + var currentTranslation = Geo.computeTranslation({ lat: cn.latLon.lat, lon: cn.latLon.lon, alt: cn.alt }, cn.rotation, reference); + var currentTransform = _this._createTransform(cn, currentTranslation); + var currentAzimuthal = _this._spatial.wrap(_this._spatial.azimuthal(currentDirection.toArray(), currentTransform.upVector().toArray()), 0, 2 * Math.PI); + var currentProjectedPoints = _this._computeProjectedPoints(currentTransform); + var currentHFov = _this._computeHorizontalFov(currentProjectedPoints) / 180 * Math.PI; + var preferredOverlap = Math.PI / 8; + var left = undefined; + var right = undefined; + for (var _i = 0, adjacent_1 = adjacent; _i < adjacent_1.length; _i++) { + var a = adjacent_1[_i]; + var translation = Geo.computeTranslation({ lat: a.latLon.lat, lon: a.latLon.lon, alt: a.alt }, a.rotation, reference); + var transform = _this._createTransform(a, translation); + var projectedPoints = _this._computeProjectedPoints(transform); + var hFov = _this._computeHorizontalFov(projectedPoints) / 180 * Math.PI; + var direction = _this._spatial.viewingDirection(a.rotation); + var azimuthal = _this._spatial.wrap(_this._spatial.azimuthal(direction.toArray(), transform.upVector().toArray()), 0, 2 * Math.PI); + var directionChange = _this._spatial.angleBetweenVector2(currentDirection.x, currentDirection.y, direction.x, direction.y); + var overlap = Number.NEGATIVE_INFINITY; + if (directionChange > 0) { + if (currentAzimuthal > azimuthal) { + overlap = currentAzimuthal - 2 * Math.PI + currentHFov / 2 - (azimuthal - hFov / 2); + } + else { + overlap = currentAzimuthal + currentHFov / 2 - (azimuthal - hFov / 2); + } + } + else { + if (currentAzimuthal < azimuthal) { + overlap = azimuthal + hFov / 2 - (currentAzimuthal + 2 * Math.PI - currentHFov / 2); + } + else { + overlap = azimuthal + hFov / 2 - (currentAzimuthal - currentHFov / 2); + } + } + var nonOverlap = Math.abs(hFov - overlap); + var distanceCost = _this._distance(a, cn); + var timeCost = Math.min(_this._timeDifference(a, cn), 4); + var overlapCost = 20 * Math.abs(overlap - preferredOverlap); + var fovCost = Math.min(5, 1 / Math.min(hFov / currentHFov, 1)); + var nonOverlapCost = overlap > 0 ? -2 * nonOverlap : 0; + var cost = distanceCost + timeCost + overlapCost + fovCost + nonOverlapCost; + if (overlap > 0 && + overlap < 0.5 * currentHFov && + overlap < 0.5 * hFov && + nonOverlap > 0.5 * currentHFov) { + if (directionChange > 0) { + if (!left) { + left = [cost, a, transform, hFov]; + } + else { + if (cost < left[0]) { + left = [cost, a, transform, hFov]; + } + } + } + else { + if (!right) { + right = [cost, a, transform, hFov]; + } + else { + if (cost < right[0]) { + right = [cost, a, transform, hFov]; + } + } + } + } + } + var panNodes = []; + if (!!left) { + panNodes.push([left[1], left[2], left[3]]); + } + if (!!right) { + panNodes.push([right[1], right[2], right[3]]); + } + return panNodes; + }), operators_1.startWith([])); + })); + this._panNodesSubscription = this._stateService.currentState$.pipe(operators_1.map(function (frame) { + return frame.state.nodesAhead > 0; + }), operators_1.distinctUntilChanged(), operators_1.switchMap(function (traversing) { + return traversing ? rxjs_1.of([]) : panNodes$; + })) + .subscribe(function (panNodes) { + _this._panNodesSubject$.next(panNodes); + }); + this._mode = PanMode.Started; + }; + PanService.prototype.stop = function () { + if (this._mode !== PanMode.Started) { + return; + } + this._panNodesSubscription.unsubscribe(); + this._panNodesSubject$.next([]); + this._mode = PanMode.Enabled; + }; + PanService.prototype._distance = function (node, reference) { + var _a = this._geoCoords.geodeticToEnu(node.latLon.lat, node.latLon.lon, node.alt, reference.latLon.lat, reference.latLon.lon, reference.alt), x = _a[0], y = _a[1], z = _a[2]; + return Math.sqrt(x * x + y * y + z * z); + }; + PanService.prototype._timeDifference = function (node, reference) { + return Math.abs(node.capturedAt - reference.capturedAt) / (1000 * 60 * 60 * 24 * 30); + }; + PanService.prototype._createTransform = function (node, translation) { + return new Transform_1.Transform(node.orientation, node.width, node.height, node.focal, node.scale, node.gpano, node.rotation, translation, node.assetsCached ? node.image : undefined, undefined, node.ck1, node.ck2, node.cameraProjection); + }; + PanService.prototype._computeProjectedPoints = function (transform) { + var vertices = [[1, 0]]; + var directions = [[0, 0.5]]; + var pointsPerLine = 20; + return Geo.computeProjectedPoints(transform, vertices, directions, pointsPerLine, this._viewportCoords); + }; + PanService.prototype._computeHorizontalFov = function (projectedPoints) { + var _this = this; + var fovs = projectedPoints + .map(function (projectedPoint) { + return _this._coordToFov(projectedPoint[0]); + }); + var fov = Math.min.apply(Math, fovs); + return fov; + }; + PanService.prototype._coordToFov = function (x) { + return 2 * Math.atan(x) * 180 / Math.PI; + }; + return PanService; +}()); +exports.PanService = PanService; + +},{"../geo/Geo":415,"../geo/GeoCoords":416,"../geo/Spatial":419,"../geo/Transform":420,"../geo/ViewportCoords":421,"../graph/GraphCalculator":425,"rxjs":43,"rxjs/operators":241}],481:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PlayService = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var Edge_1 = require("../Edge"); @@ -45759,28 +57008,28 @@ var PlayService = /** @class */ (function () { get: function () { return this._playing; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(PlayService.prototype, "direction$", { get: function () { return this._direction$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(PlayService.prototype, "playing$", { get: function () { return this._playing$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(PlayService.prototype, "speed$", { get: function () { return this._speed$; }, - enumerable: true, + enumerable: false, configurable: true }); PlayService.prototype.play = function () { @@ -46050,19 +57299,22 @@ var PlayService = /** @class */ (function () { exports.PlayService = PlayService; exports.default = PlayService; -},{"../Edge":275,"../Graph":278,"rxjs":26,"rxjs/operators":224}],441:[function(require,module,exports){ +},{"../Edge":292,"../Graph":295,"rxjs":43,"rxjs/operators":241}],482:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.Projection = void 0; var THREE = require("three"); var Geo_1 = require("../Geo"); +var Spatial_1 = require("../geo/Spatial"); var Projection = /** @class */ (function () { - function Projection(geoCoords, viewportCoords) { + function Projection(geoCoords, viewportCoords, spatial) { this._geoCoords = !!geoCoords ? geoCoords : new Geo_1.GeoCoords(); + this._spatial = !!spatial ? spatial : new Spatial_1.default(); this._viewportCoords = !!viewportCoords ? viewportCoords : new Geo_1.ViewportCoords(); } Projection.prototype.basicToCanvas = function (basicPoint, container, render, transform) { return this._viewportCoords - .basicToCanvas(basicPoint[0], basicPoint[1], container, transform, render.perspective); + .basicToCanvasSafe(basicPoint[0], basicPoint[1], container, transform, render.perspective); }; Projection.prototype.canvasToBasic = function (canvasPoint, container, render, transform) { var basicPoint = this._viewportCoords @@ -46103,14 +57355,28 @@ var Projection = /** @class */ (function () { }; return unprojection; }; + Projection.prototype.cameraToLatLon = function (render, reference) { + var position = render.camera.position; + var _a = this._geoCoords.enuToGeodetic(position.x, position.y, position.z, reference.lat, reference.lon, reference.alt), lat = _a[0], lon = _a[1]; + return { lat: lat, lon: lon }; + }; + Projection.prototype.latLonToCanvas = function (latLon, container, render, reference) { + var point3d = this._geoCoords.geodeticToEnu(latLon.lat, latLon.lon, 0, reference.lat, reference.lon, reference.alt); + var canvas = this._viewportCoords.projectToCanvasSafe(point3d, container, render.perspective); + return canvas; + }; + Projection.prototype.distanceBetweenLatLons = function (latLon1, latLon2) { + return this._spatial.distanceFromLatLon(latLon1.lat, latLon1.lon, latLon2.lat, latLon2.lon); + }; return Projection; }()); exports.Projection = Projection; exports.default = Projection; -},{"../Geo":277,"three":225}],442:[function(require,module,exports){ +},{"../Geo":294,"../geo/Spatial":419,"three":242}],483:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.SpriteService = void 0; var operators_1 = require("rxjs/operators"); var THREE = require("three"); var vd = require("virtual-dom"); @@ -46123,7 +57389,7 @@ var SpriteAtlas = /** @class */ (function () { set: function (value) { this._json = value; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SpriteAtlas.prototype, "image", { @@ -46132,14 +57398,14 @@ var SpriteAtlas = /** @class */ (function () { this._texture = new THREE.Texture(this._image); this._texture.minFilter = THREE.NearestFilter; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(SpriteAtlas.prototype, "loaded", { get: function () { return !!(this._image && this._json); }, - enumerable: true, + enumerable: false, configurable: true }); SpriteAtlas.prototype.getGLSprite = function (name) { @@ -46292,7 +57558,7 @@ var SpriteService = /** @class */ (function () { get: function () { return this._spriteAtlas$; }, - enumerable: true, + enumerable: false, configurable: true }); return SpriteService; @@ -46301,9 +57567,10 @@ exports.SpriteService = SpriteService; exports.default = SpriteService; -},{"../Viewer":285,"rxjs":26,"rxjs/operators":224,"three":225,"virtual-dom":230}],443:[function(require,module,exports){ +},{"../Viewer":302,"rxjs":43,"rxjs/operators":241,"three":242,"virtual-dom":247}],484:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); +exports.TouchService = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var TouchService = /** @class */ (function () { @@ -46434,98 +57701,98 @@ var TouchService = /** @class */ (function () { get: function () { return this._active$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "activate$", { get: function () { return this._activeSubject$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "doubleTap$", { get: function () { return this._doubleTap$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "touchStart$", { get: function () { return this._touchStart$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "touchMove$", { get: function () { return this._touchMove$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "touchEnd$", { get: function () { return this._touchEnd$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "touchCancel$", { get: function () { return this._touchCancel$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "singleTouchDragStart$", { get: function () { return this._singleTouchDragStart$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "singleTouchDrag$", { get: function () { return this._singleTouchDrag$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "singleTouchDragEnd$", { get: function () { return this._singleTouchDragEnd$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "pinch$", { get: function () { return this._pinchChange$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "pinchStart$", { get: function () { return this._pinchStart$; }, - enumerable: true, + enumerable: false, configurable: true }); Object.defineProperty(TouchService.prototype, "pinchEnd$", { get: function () { return this._pinchEnd$; }, - enumerable: true, + enumerable: false, configurable: true }); return TouchService; }()); exports.TouchService = TouchService; -},{"rxjs":26,"rxjs/operators":224}],444:[function(require,module,exports){ +},{"rxjs":43,"rxjs/operators":241}],485:[function(require,module,exports){ "use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { @@ -46533,7 +57800,7 @@ var __extends = (this && this.__extends) || (function () { ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); - } + }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } @@ -46541,6 +57808,7 @@ var __extends = (this && this.__extends) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); +exports.Viewer = void 0; var rxjs_1 = require("rxjs"); var operators_1 = require("rxjs/operators"); var when = require("when"); @@ -46633,8 +57901,9 @@ var Viewer = /** @class */ (function (_super) { * application when the initial key is not known at implementation * time. * - * @param {string} id - Required `id` of a DOM element which will - * be transformed into the viewer. + * @param {string | HTMLElement} container - The HTML element in which + * MapillaryJS will render the viewer, or the element's string `id`. The + * specified element must have no children. * @param {string} clientId - Required `Mapillary API ClientID`. Can * be obtained from https://www.mapillary.com/app/settings/developers. * @param {string} key - Optional `image-key` to start from. The key @@ -46653,13 +57922,13 @@ var Viewer = /** @class */ (function (_super) { * var viewer = new Mapillary.Viewer("", "", ""); * ``` */ - function Viewer(id, clientId, key, options, token) { + function Viewer(container, clientId, key, options, token) { var _this = _super.call(this) || this; options = options != null ? options : {}; Utils_1.Settings.setOptions(options); Utils_1.Urls.setOptions(options.url); _this._navigator = new Viewer_1.Navigator(clientId, options, token); - _this._container = new Viewer_1.Container(id, _this._navigator.stateService, options); + _this._container = new Viewer_1.Container(container, _this._navigator.stateService, options); _this._observer = new Viewer_1.Observer(_this, _this._navigator, _this._container); _this._componentController = new Viewer_1.ComponentController(_this._container, _this._navigator, _this._observer, key, options.component); return _this; @@ -46669,7 +57938,7 @@ var Viewer = /** @class */ (function (_super) { * Return a boolean indicating if the viewer is in a navigable state. * * @description The navigable state indicates if the viewer supports - * moving, i.e. calling the {@link moveToKey}, {@link moveDir`} + * moving, i.e. calling the {@link moveToKey}, {@link moveDir} * and {@link moveCloseTo} methods or changing the authentication state, * i.e. calling {@link setAuthToken}. The viewer will not be in a navigable * state if the cover is activated and the viewer has been supplied a key. @@ -46681,9 +57950,17 @@ var Viewer = /** @class */ (function (_super) { get: function () { return this._componentController.navigable; }, - enumerable: true, + enumerable: false, configurable: true }); + /** + * Activate the combined panning functionality. + * + * @description The combined panning functionality is active by default. + */ + Viewer.prototype.activateCombinedPanning = function () { + this._navigator.panService.enable(); + }; /** * Activate a component. * @@ -46703,6 +57980,15 @@ var Viewer = /** @class */ (function (_super) { Viewer.prototype.activateCover = function () { this._componentController.activateCover(); }; + /** + * Deactivate the combined panning functionality. + * + * @description Deactivating the combined panning functionality + * could be needed in scenarios involving sequence only navigation. + */ + Viewer.prototype.deactivateCombinedPanning = function () { + this._navigator.panService.disable(); + }; /** * Deactivate a component. * @@ -46752,6 +58038,17 @@ var Viewer = /** @class */ (function (_super) { }); }); }; + /** + * Returns the HTML element containing the viewer's element. + * + * @description This is the element to which event bindings for viewer + * interactivity (such as panning and zooming) are attached. + * + * @returns {HTMLElement} The container viewer's element. + */ + Viewer.prototype.getCanvasContainer = function () { + return this._container.canvasContainer; + }; /** * Get the basic coordinates of the current image that is * at the center of the viewport. @@ -46802,6 +58099,80 @@ var Viewer = /** @class */ (function (_super) { Viewer.prototype.getContainer = function () { return this._container.element; }; + /** + * Get the viewer's current vertical field of view. + * + * @description The vertical field of view rendered on the viewer canvas + * measured in degrees. + * + * @returns {Promise} Promise to the current field of view + * of the viewer camera. + * + * @example + * ``` + * viewer.getFieldOfView().then((fov) => { console.log(fov); }); + * ``` + */ + Viewer.prototype.getFieldOfView = function () { + var _this = this; + return when.promise(function (resolve, reject) { + _this._container.renderService.renderCamera$.pipe(operators_1.first()) + .subscribe(function (rc) { + resolve(rc.perspective.fov); + }, function (error) { + reject(error); + }); + }); + }; + /** + * Get the viewer's current point of view. + * + * @returns {Promise} Promise to the current point of view + * of the viewer camera. + * + * @example + * ``` + * viewer.getPointOfView().then((pov) => { console.log(pov); }); + * ``` + */ + Viewer.prototype.getPointOfView = function () { + var _this = this; + return when.promise(function (resolve, reject) { + rxjs_1.combineLatest(_this._container.renderService.renderCamera$, _this._container.renderService.bearing$).pipe(operators_1.first()) + .subscribe(function (_a) { + var rc = _a[0], bearing = _a[1]; + resolve({ + bearing: bearing, + tilt: rc.getTilt(), + }); + }, function (error) { + reject(error); + }); + }); + }; + /** + * Get the viewer's current position + * + * @returns {Promise} Promise to the viewers's current + * position. + * + * @example + * ``` + * viewer.getPosition().then((pos) => { console.log(pos); }); + * ``` + */ + Viewer.prototype.getPosition = function () { + var _this = this; + return when.promise(function (resolve, reject) { + rxjs_1.combineLatest(_this._container.renderService.renderCamera$, _this._navigator.stateService.reference$).pipe(operators_1.first()) + .subscribe(function (_a) { + var render = _a[0], reference = _a[1]; + resolve(_this._observer.projection.cameraToLatLon(render, reference)); + }, function (error) { + reject(error); + }); + }); + }; /** * Get the image's current zoom level. * @@ -46837,7 +58208,7 @@ var Viewer = /** @class */ (function (_super) { * longitude. * @throws {Error} Propagates any IO errors to the caller. * @throws {Error} When viewer is not navigable. - * @throws {AbortMapillaryError} When a subsequent move request is made + * @throws {@link AbortMapillaryError} When a subsequent move request is made * before the move close to call has completed. * * @example @@ -46870,7 +58241,7 @@ var Viewer = /** @class */ (function (_super) { * or the edges has not yet been cached. * @throws {Error} Propagates any IO errors to the caller. * @throws {Error} When viewer is not navigable. - * @throws {AbortMapillaryError} When a subsequent move request is made + * @throws {@link AbortMapillaryError} When a subsequent move request is made * before the move dir call has completed. * * @example @@ -46899,7 +58270,7 @@ var Viewer = /** @class */ (function (_super) { * @returns {Promise} Promise to the node that was navigated to. * @throws {Error} Propagates any IO errors to the caller. * @throws {Error} When viewer is not navigable. - * @throws {AbortMapillaryError} When a subsequent move request is made + * @throws {@link AbortMapillaryError} When a subsequent move request is made * before the move to key call has completed. * * @example @@ -46921,12 +58292,60 @@ var Viewer = /** @class */ (function (_super) { }); }); }; + /** + * Project an ILatLon representing geographicalcoordinates to + * canvas pixel coordinates. + * + * @description The geographical coordinates may not always correspond to pixel + * coordinates, e.g. if the geographical coordinates have a position behind the + * viewer camera. In the case of no correspondence the returned value will + * be `null`. + * + * If the distance from the viewer camera position to the provided lat-lon + * is more than 1000 meters `null` will be returned. + * + * The projection is performed from the ground plane, i.e. + * the altitude with respect to the ground plane for the geographical + * point is zero. + * + * Note that whenever the camera moves, the result of the method will be + * different. + * + * @param {ILatLon} latLon - Geographical coordinates to project. + * @returns {Promise>} Promise to the pixel coordinates corresponding + * to the latLon. + * + * @example + * ``` + * viewer.project({ lat: 0, lon: 0 }) + * .then((pixelPoint) => { + * if (!pixelPoint) { + * console.log("no correspondence"); + * } + * + * console.log(pixelPoint); + * }); + * ``` + */ + Viewer.prototype.project = function (latLon) { + var _this = this; + return when.promise(function (resolve, reject) { + _this._observer.project$(latLon) + .subscribe(function (pixelPoint) { + resolve(pixelPoint); + }, function (error) { + reject(error); + }); + }); + }; /** * Project basic image coordinates for the current node to canvas pixel * coordinates. * * @description The basic image coordinates may not always correspond to a - * pixel point that lies in the visible area of the viewer container. + * pixel point that lies in the visible area of the viewer container. In the + * case of no correspondence the returned value can be `null`. + * * * @param {Array} basicPoint - Basic images coordinates to project. * @returns {Promise>} Promise to the pixel coordinates corresponding @@ -46962,7 +58381,6 @@ var Viewer = /** @class */ (function (_super) { */ Viewer.prototype.resize = function () { this._container.renderService.resize$.next(null); - this._componentController.resize(); }; /** * Set a bearer token for authenticated API requests of @@ -47061,12 +58479,30 @@ var Viewer = /** @class */ (function (_super) { * * Clear the filter by setting it to null or empty array. * + * Commonly used filter properties (see the {@link Node} class + * documentation for a full list of properties that can be used + * in a filter) and common use cases: + * + * ``` + * fullPano // Show only full 360 panoramas or not + * organizationKey // Show images from one or several organizations + * sequenceKey // Show images from one or several sequences + * userKey // Show images from one or several users + * capturedAt // Show images from a certain time interval + * ``` + * * @param {FilterExpression} filter - The filter expression. * @returns {Promise} Promise that resolves after filter is applied. * * @example * ``` * viewer.setFilter(["==", "sequenceKey", ""]); + * + * // Other examples + * // viewer.setFilter(["==", "organizationKey", ""]); + * // viewer.setFilter(["in", "userKey", "", ""]); + * // viewer.setFilter(["==", "fullPano", true]); + * // viewer.setFilter([">=", "capturedAt", ]); * ``` */ Viewer.prototype.setFilter = function (filter) { @@ -47080,6 +58516,30 @@ var Viewer = /** @class */ (function (_super) { }); }); }; + /** + * Set the viewer's current vertical field of view. + * + * @description Sets the vertical field of view rendered + * on the viewer canvas measured in degrees. The value + * will be clamped to be able to set a valid zoom level + * based on the projection model of the current image and + * the viewer's current render mode. + * + * @param {number} fov - Vertical field of view in degrees. + * + * @example + * ``` + * viewer.setFieldOfView(45); + * ``` + */ + Viewer.prototype.setFieldOfView = function (fov) { + var _this = this; + this._container.renderService.renderCamera$.pipe(operators_1.first()) + .subscribe(function (rc) { + var zoom = rc.fovToZoom(fov); + _this._navigator.stateService.setZoom(zoom); + }); + }; /** * Set the viewer's render mode. * @@ -47131,6 +58591,9 @@ var Viewer = /** @class */ (function (_super) { * coordinates. In the case of no correspondence the returned value will * be `null`. * + * The unprojection to a latLon will be performed towards the ground plane, i.e. + * the altitude with respect to the ground plane for the returned latLon is zero. + * * @param {Array} pixelPoint - Pixel coordinates to unproject. * @returns {Promise} Promise to the latLon corresponding to the pixel point. * @@ -47184,7 +58647,7 @@ var Viewer = /** @class */ (function (_super) { * Fired when the viewing direction of the camera changes. * * @description Related to the computed compass angle - * ({@link Node.computedCa}) from SfM, not the original EXIF compass + * ({@link Node.computedCA}) from SfM, not the original EXIF compass * angle. * * @event @@ -47196,22 +58659,29 @@ var Viewer = /** @class */ (function (_super) { * Fired when a pointing device (usually a mouse) is pressed and released at * the same point in the viewer. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.click = "click"; /** * Fired when the right button of the mouse is clicked within the viewer. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.contextmenu = "contextmenu"; /** * Fired when a pointing device (usually a mouse) is clicked twice at * the same point in the viewer. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.dblclick = "dblclick"; + /** + * Fired when the viewer's vertical field of view changes. + * + * @event + * @type {@link IViewerEvent} event - The event object. + */ + Viewer.fovchanged = "fovchanged"; /** * Fired when the viewer is loading more data. * @event @@ -47221,32 +58691,32 @@ var Viewer = /** @class */ (function (_super) { /** * Fired when a pointing device (usually a mouse) is pressed within the viewer. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.mousedown = "mousedown"; /** * Fired when a pointing device (usually a mouse) is moved within the viewer. * @description Will not fire when the mouse is actively used, e.g. for drag pan. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.mousemove = "mousemove"; /** * Fired when a pointing device (usually a mouse) leaves the viewer's canvas. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.mouseout = "mouseout"; /** * Fired when a pointing device (usually a mouse) is moved onto the viewer's canvas. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.mouseover = "mouseover"; /** * Fired when a pointing device (usually a mouse) is released within the viewer. * @event - * @type {IViewerMouseEvent} event - Viewer mouse event data. + * @type {@link IViewerMouseEvent} event - Viewer mouse event data. */ Viewer.mouseup = "mouseup"; /** @@ -47278,26 +58748,49 @@ var Viewer = /** @class */ (function (_super) { Viewer.navigablechanged = "navigablechanged"; /** * Fired every time the viewer navigates to a new node. + * * @event - * @type {Node} node - Current node. + * @type {@link Node} node - Current node. */ Viewer.nodechanged = "nodechanged"; + /** + * Fired when the viewer's position changes. + * + * @description The viewer's position changes when transitioning + * between nodes. + * + * @event + * @type {@link IViewerEvent} event - The event object. + */ + Viewer.positionchanged = "positionchanged"; + /** + * Fired when the viewer's point of view changes. The point of view changes + * when the bearing, or tilt changes. + * + * @event + * @type {@link IViewerEvent} event - The event object. + */ + Viewer.povchanged = "povchanged"; /** * Fired every time the sequence edges of the current node changes. * @event - * @type {IEdgeStatus} status - The edge status object. + * @type {@link IEdgeStatus} status - The edge status object. */ Viewer.sequenceedgeschanged = "sequenceedgeschanged"; /** * Fired every time the spatial edges of the current node changes. * @event - * @type {IEdgeStatus} status - The edge status object. + * @type {@link IEdgeStatus} status - The edge status object. */ Viewer.spatialedgeschanged = "spatialedgeschanged"; return Viewer; }(Utils_1.EventEmitter)); exports.Viewer = Viewer; -},{"../Utils":284,"../Viewer":285,"rxjs":26,"rxjs/operators":224,"when":271}]},{},[279])(279) +},{"../Utils":301,"../Viewer":302,"rxjs":43,"rxjs/operators":241,"when":288}],486:[function(require,module,exports){ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + +},{}]},{},[296])(296) }); //# sourceMappingURL=mapillary.js.map